• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Why my marriage system not work?

oliverarrow

Member
Joined
Jul 31, 2015
Messages
82
Reaction score
6
I tried to marriage using this system:
https://otland.net/threads/marriage-system-8-6-fixed.161590/

But when i say:
Hi, Proceed

Show me this error:

Error

Code:
[8:28:51.513] mysql_real_query(): INSERT INTO `marriage_system` (`player_id`, `partner`, `marriage_date`) VALUES ('4', '2', '1476012531'); - MYSQL ERROR: Field 'id' doesn't have a default value (1364)

[8:28:51.627] [Error - NpcScript Interface]
[8:28:51.627] data/npc/scripts/marriagesystem.lua:onCreatureSay
[8:28:51.627] Description:
[8:28:51.627] data/lib/004-database.lua:76: [Result:getDataString] Result not set!
[8:28:51.627] stack traceback:
[8:28:51.627]    [C]: in function 'error'
[8:28:51.627]    data/lib/004-database.lua:76: in function 'getDataString'
[8:28:51.627]    [string "marry_config = {..."]:50: in function 'getPartner'
[8:28:51.627]    data/npc/scripts/marriagesystem.lua:67: in function 'callback'
[8:28:51.627]    data/npc/lib/npcsystem/npchandler.lua:423: in function 'onCreatureSay'
[8:28:51.627]    data/npc/scripts/marriagesystem.lua:8: in function <data/npc/scripts/marriagesystem.lua:8>


Scripts:

Mods/MarriageSystem.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="MarriageSystem" version="1.0" author="Vodkart" contact="xtibia.com" enabled="yes">
<config name="marry_func"><![CDATA[

marry_config = {
OnlyDifferentSex = false,
Marry_Price = 300000,
Divorce_Price = 100000,
Level = 50,
MaxSqm = 7, -- to marry
Text = {'I love you!','My love!','Baby dear!'},
RingID = 10502,
TimeAccept = 60,
storage1 = 300235,
storage2 = 300236,
storage3 = 300237
}

function isMarried(cid)
local m = db.getResult("SELECT `player_id` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';")
if(m:getID() == -1) then
local e = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `partner` = '"..getPlayerGUID(cid).."';")
if(e:getID() == -1) then
return false
end
end
return true
end
function isPatner(cid)
local p = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';")
if(p:getID() == -1) then
return true
end
return false
end
function Ponline(player)
local rows = db.getResult("SELECT `online` FROM `players` WHERE `id` = " .. player .. ";")
local on = rows:getDataInt("online")
if on ~= 0 then
return TRUE
else
return FALSE
end
end
function getPartner(cid)
if isPatner(cid) then
a = db.getResult("SELECT `player_id` FROM `marriage_system` WHERE `partner` = '"..getPlayerGUID(cid).."';")
b = "player_id"
else
a = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';")
b = "partner"
end
local query = a
return getPlayerNameByGUID(query:getDataString(b))
end
function doMarry(cid, patner)
return db.executeQuery("INSERT INTO `marriage_system` (`player_id`, `partner`, `marriage_date`) VALUES ('".. getPlayerGUID(cid) .."', '"..patner.."', '".. os.time() .."');")
end
function doDivorcePlayer(cid)
if isPatner(cid) then
pid,player = getPlayerGUIDByName(getPartner(cid)),getPlayerByNameWildcard(getPartner(cid))
else
pid,player = getPlayerGUID(cid),cid
end
return db.executeQuery("DELETE FROM `marriage_system` WHERE `player_id` = '" .. pid .. "';")
end
function getMarryDate(cid)
local player = isPatner(cid) and getPlayerGUIDByName(getPartner(cid)) or getPlayerGUID(cid)
local date = db.getResult("SELECT `marriage_date` FROM `marriage_system` WHERE `player_id` = '"..player.."';")
return os.date("%d %B %Y %X ", date:getDataInt("marriage_date"))
end
]]></config>
<talkaction words="/marriage;!marriage" event="buffer"><![CDATA[
domodlib('marry_func')
param = string.lower(param)
if (param == "") then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"invalid command, for more information enter !marriage info")
elseif(param == "info") then
doShowTextDialog(cid,2160,"Marriage Info:\n\nLevel Minimum: "..marry_config.Level.."\nMarriage Cost: "..marry_config.Marry_Price.."\nDivorce Cost: "..marry_config.Divorce_Price.."\n\nMarried Players have a special buffs as a wedding gift given by the union\n\nThis bonus is only given if the married players are nearby.")
elseif(param == "status") then
doPlayerPopupFYI(cid,""..(isMarried(cid) and "Marriage Status".."\n\nMarried with: ["..getPartner(cid).."]\n\nThe date of his marriage was: "..getMarryDate(cid).."" or "you are not married").."")
end
return true
]]></talkaction>
<event type="login" name="MarryRegister" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "MarryLook")
registerCreatureEvent(cid, "MarryNoAttack")
return true
end]]></event>
<event type="look" name="MarryLook" event="script"><![CDATA[
domodlib('marry_func')
function onLook(cid, thing, position, lookDistance)
if isPlayer(thing.uid) and isMarried(thing.uid) then
doPlayerSetSpecialDescription(thing.uid,'.\n'..(getPlayerSex(thing.uid) == 0 and 'She' or 'He')..' is married to '..getPartner(thing.uid))
end
return true
end]]></event>
<event type="combat" name="MarryNoAttack" event="script"><![CDATA[
domodlib('marry_func')
if isPlayer(cid) and isPlayer(target) and isMarried(cid) and isMarried(target) then
if (getCreatureName(target) == getPartner(cid))then
doPlayerSendCancel(cid, "You may not attack this player.")
return false
end
end
return true
]]></event>
</mod>

Npc/Data/Script/
marriagesystem.lua


Code:
domodlib('marry_func')
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
msg,players = string.lower(msg), {getPlayerGUID(cid)}
if msgcontains(msg, 'marry') or msgcontains(msg, 'marriage') then
if isMarried(cid) then
npcHandler:say("Sorry, You already is wedded.", cid)
elseif getPlayerStorageValue(cid, marry_config.storage3) >= 1 then
npcHandler:say("you must sign the {divorce}.", cid)
elseif getPlayerStorageValue(cid, marry_config.storage1) >= os.time() then
local pid = getPlayerStorageValue(cid, marry_config.storage2)
npcHandler:say(getPlayerNameByGUID(pid).." has set a wedding date with you. Do you want to {proceed} or {cancel} the wedding?", cid)
talkState[talkUser] = 2
else
npcHandler:say("Would you like to get married?", cid)
talkState[talkUser] = 1
end
elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
npcHandler:say("And what\'s the name of your future partner?", cid)
talkState[talkUser] = 3
elseif talkState[talkUser] == 3 then
local player = getPlayerByNameWildcard(msg)
if(not player)then
npcHandler:say(msg.." is offline or does not exist.", cid) return true
elseif isMarried(player) then
npcHandler:say("He already is wedded.", cid) return true
elseif getPlayerStorageValue(cid, marry_config.storage3) >= 1 or getPlayerStorageValue(player, marry_config.storage3) >= 1 then
npcHandler:say((getPlayerStorageValue(cid, marry_config.storage1) >= 1 and "You" or "He").." must sign the divorce.", cid) return true
elseif getPlayerLevel(cid) < marry_config.Level or getPlayerLevel(player) < marry_config.Level then
npcHandler:say("players must to be level "..marry_config.Level, cid) return true
elseif getPlayerStorageValue(player, marry_config.storage1) >= os.time() then
npcHandler:say(msg.." already have a wedding invitation, wait.", cid) return true
elseif getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player)) > marry_config.MaxSqm then
npcHandler:say("you are far away from each other to get married.", cid) return true
elseif marry_config.OnlyDifferentSex and getPlayerSex(cid) == getPlayerSex(player) then
npcHandler:say("you can only marry the opposite sex", cid) return true
elseif not doPlayerRemoveMoney(cid, marry_config.Marry_Price) then
npcHandler:say("Sorry, but you do not have "..marry_config.Marry_Price.." gp(s) to ask "..msg.." in marriage.", cid) return true
end
setPlayerStorageValue(player, marry_config.storage1,os.time()+marry_config.TimeAccept)
setPlayerStorageValue(player, marry_config.storage2, getPlayerGUID(cid))
npcHandler:say("you asked "..msg.." in marriage, wait a answer!", cid)
doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE,getCreatureName(cid).." asked you in marriage.")
talkState[talkUser] = 0
elseif msgcontains(msg, "proceed") and talkState[talkUser] == 2 then
player = getPlayerStorageValue(cid, marry_config.storage2)
if getPlayerStorageValue(cid, marry_config.storage1) >= os.time() then
if not isMarried(cid) then
if Ponline(player) then
x = getPlayerByNameWildcard(getPlayerNameByGUID(player))
if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(x)) <= marry_config.MaxSqm then
table.insert(players, player)
doMarry(cid, player)
for i = 1, #players do
local ring = doPlayerAddItem(getPlayerByNameWildcard(getPlayerNameByGUID(players[i])), marry_config.RingID, 1)
doItemSetAttribute(ring, "description", getCreatureName(cid) .. " & " .. getPartner(cid) .. " forever - married on " ..getMarryDate(cid).. ".")
doCreatureSay(getPlayerByNameWildcard(getPlayerNameByGUID(players[i])), marry_config.Text[math.random(1,#marry_config.Text)], TALKTYPE_ORANGE_1)
doSendMagicEffect(getCreaturePosition(getPlayerByNameWildcard(getPlayerNameByGUID(players[i]))), 35)
setPlayerStorageValue(getPlayerByNameWildcard(getPlayerNameByGUID(players[i])), marry_config.storage3, 1)
setPlayerStorageValue(getPlayerByNameWildcard(getPlayerNameByGUID(players[i])), 150420, 1)
end
npcHandler:say("Congratulations! Now you may kiss your partner! to see the status of marriage enter !marriage status", cid)
talkState[talkUser] = 0
else
npcHandler:say("you're far away from her suitor.", cid)
end
else
npcHandler:say("suitor offline.", cid)
end
else
npcHandler:say("you are not married.", cid)
talkState[talkUser] = 0
end
else
npcHandler:say("you do not received none wedding invitation.", cid)
talkState[talkUser] = 0
end
elseif msgcontains(msg, "cancel") and talkState[talkUser] == 2 then
player = getPlayerStorageValue(cid, marry_config.storage2)
if getPlayerStorageValue(cid, marry_config.storage1) >= os.time() then
if not isMarried(cid) then
setPlayerStorageValue(cid, marry_config.storage1, -1)
npcHandler:say("You just refuse the wedding invitation from player "..getPlayerNameByGUID(player), cid)
if Ponline(player) then
doPlayerSendTextMessage(getPlayerByNameWildcard(getPlayerNameByGUID(player)), MESSAGE_STATUS_CONSOLE_ORANGE,getCreatureName(cid).." rejected his marriage proposal.")
end
else
npcHandler:say("you are already married.", cid)
talkState[talkUser] = 0
end
else
npcHandler:say("you do not received none wedding invitation.", cid)
talkState[talkUser] = 0
end
elseif msgcontains(msg, "divorce") then
if isMarried(cid) then
npcHandler:say("Would you like to divorce of your partner for "..marry_config.Divorce_Price.." gp(s) ? {yes}", cid)
talkState[talkUser] = 6
elseif getPlayerStorageValue(cid, marry_config.storage3) >= 1 then
npcHandler:say("you must sign here to end your marriage, ok? {yes}", cid)
talkState[talkUser] = 7
else
npcHandler:say("you are not married", cid)
talkState[talkUser] = 0
end
elseif msgcontains(msg, "yes") and talkState[talkUser] == 6 then
if isMarried(cid) then
if doPlayerRemoveMoney(cid, marry_config.Divorce_Price) then
npcHandler:say("Congratulations, you end up divorcing from player: "..getPartner(cid), cid)
setPlayerStorageValue(cid, 150420, -1)
setPlayerStorageValue(cid, marry_config.storage3, -1)
pguid = getPlayerGUIDByName(getPartner(cid))
if Ponline(pguid) then
setPlayerStorageValue(getPlayerByNameWildcard(getPlayerNameByGUID(pguid)), 150420, -1)
else
db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = " .. pguid .. " AND `key` = 150420;")
end
doDivorcePlayer(cid)
else
npcHandler:say("Sorry, you do not have "..marry_config.Divorce_Price.." gp(s).", cid)
end
else
npcHandler:say("you are not married.", cid)
end
elseif msgcontains(msg, "yes") and talkState[talkUser] == 7 then
npcHandler:say("Congratulations, you end up divorcing.", cid)
setPlayerStorageValue(cid, marry_config.storage3, -1)
elseif msg == "no" and talkState[talkUser] >= 1 then
selfSay("tudo bem então.", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return TRUE
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())



/lib/004-database.lua
Code:
if(result == nil) then
   print("> WARNING: Couldn't load database lib.")
   return
end

Result = createClass(nil)
Result:setAttributes({
   id = -1,
   query = ""
})

function Result:getID()
   return self.id
end

function Result:setID(_id)
   self.id = _id
end

function Result:getQuery()
   return self.query
end

function Result:setQuery(_query)
   self.query = _query
end

function Result:create(_query)
   self:setQuery(_query)
   local _id = db.storeQuery(self:getQuery())
   if(_id) then
       self:setID(_id)
   end

   return self:getID()
end

function Result:getRows(free)
   local free = free or false
   if(self:getID() == -1) then
       error("[Result:getRows] Result not set!")
   end

   local c = 0
   repeat
       c = c + 1
   until not self:next()

   local _query = self:getQuery()
   self:free()
   if(not free) then
       self:create(_query)
   end

   return c
end

function Result:getDataInt(s)
   if(self:getID() == -1) then
       error("[Result:getDataInt] Result not set!")
   end

   return result.getDataInt(self:getID(), s)
end

function Result:getDataLong(s)
   if(self:getID() == -1) then
       error("[Result:getDataLong] Result not set!")
   end

   return result.getDataLong(self:getID(), s)
end

function Result:getDataString(s)
   if(self:getID() == -1) then
       error("[Result:getDataString] Result not set!")
   end

   return result.getDataString(self:getID(), s)
end

function Result:getDataStream(s)
   if(self:getID() == -1) then
       error("[Result:getDataStream] Result not set!")
   end

   return result.getDataStream(self:getID(), s)
end

function Result:next()
   if(self:getID() == -1) then
       error("[Result:next] Result not set!")
   end

   return result.next(self:getID())
end

function Result:free()
   if(self:getID() == -1) then
       error("[Result:free] Result not set!")
   end

   self:setQuery("")
   local ret = result.free(self:getID())
   self:setID(-1)
   return ret
end

Result.numRows = Result.getRows
function db.getResult(query)
   if(type(query) ~= 'string') then
       return nil
   end

   local ret = Result:new()
   ret:create(query)
   return ret
end
 
Last edited:
you dont show people a script and ask what's wrong with it
you show people what the error you're getting is
 
Last edited:
I mean, the error is pretty self-explanatory.
If you would read the other pages in the thread you'd find this
https://otland.net/threads/marriage-system-8-6-fixed.161590/page-3#post-2183119
In the first post, id is set to be not null but is not given a default value. The above solution will make it an auto-increment value as it's supposed to be. Without the above solution, id would be null which it explicitly says it cannot be :D
 
I mean, the error is pretty self-explanatory.
If you would read the other pages in the thread you'd find this
https://otland.net/threads/marriage-system-8-6-fixed.161590/page-3#post-2183119
In the first post, id is set to be not null but is not given a default value. The above solution will make it an auto-increment value as it's supposed to be. Without the above solution, id would be null which it explicitly says it cannot be :D
TYYY next time i will check all posts
 
Back
Top