Ir para conteúdo
  • Cadastre-se

[AJUDA] Desbugar script Marriage


Posts Recomendados

Isso deve ser a mesma coisa que nesse tópico:  http://www.tibiaking.com/forum/topic/57409-pedido-desbugar-script-de-points/

 

 

 

 

 

 

 

 

 

Mulizeu/Latoy são a msm pessoa



Na sua db execute:

CREATE TABLE marriage_system (
        id                INTEGER NOT NULL,
        player_id INTEGER NOT NULL,
        partner     VARCHAR( 255 ) NOT NULL,
        marriage_date INTEGER NOT NULL,
        PRIMARY KEY ( id )
);
Mods

MarriageSystem.xml
<?xml version="1.0" encoding="UTF-8"?>
<mod name="MarriageSystem" version="1.0" author="Mulizeu" contact="tibiaking.com" enabled="yes">
<config name="marry_func"><![CDATA[
marry_config = {
Premium = false,
OnlyDifferentSex = false,
Marry_Price = 300000,
Divorce_Price = 100000,
Level = 50,
MaxSqm = 7 -- to up system and win bonus
}
Marry_stage = {
[0] = {exp = 350000, marry_percent = 50, player_experience = 0},
[1] = {exp = 700000, marry_percent = 45, player_experience = 2},
[2] = {exp = 1050000, marry_percent = 40, player_experience = 4},
[3] = {exp = 1400000, marry_percent = 35, player_experience = 6},
[4] = {exp = 1750000, marry_percent = 30, player_experience = 8},
[5] = {exp = 2100000, marry_percent = 25, player_experience = 10},
[6] = {exp = 2450000, marry_percent = 20, player_experience = 12},
[7] = {exp = 2800000, marry_percent = 15, player_experience = 14},
[8] = {exp = 3150000, marry_percent = 10, player_experience = 16},
[9] = {exp = 3500000, marry_percent = 5, player_experience = 18},
[10] = {exp = 0, marry_percent = 0, player_experience = 20}
}
marriage_tabble = {exp = 350250,level = 340200}
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 isMarryOnline(cid)
if not getPlayerByNameWildcard(getPartner(cid)) then
return false
end
return true
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
if(not player or isPlayerGhost(player)) then
db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = " .. pid .. " AND `key` = " .. marriage_tabble.level .. ";")
db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = " .. pid .. " AND `key` = " .. marriage_tabble.exp .. ";")
else
setPlayerStorageValue(player, marriage_tabble.level,0)
setPlayerStorageValue(player, marriage_tabble.exp,0)
end
return db.executeQuery("DELETE FROM `marriage_system` WHERE `player_id` = '" .. pid .. "';")
end
function getMarryStatus(cid, status)
player = isPatner(cid) and getPlayerByNameWildcard(getPartner(cid)) or cid
return getPlayerStorageValue(player,status == "level" and marriage_tabble.level or marriage_tabble.exp) < 0 and 0 or getPlayerStorageValue(player, status == "level" and marriage_tabble.level or marriage_tabble.exp)
end
function setMarryStatus(cid, status, amount)
player = isPatner(cid) and getPlayerByNameWildcard(getPartner(cid)) or cid
return setPlayerStorageValue(player, status == "level" and marriage_tabble.level or marriage_tabble.exp, getMarryStatus(player, status)+amount)
end
function getMarryExp(cid)
return getMarryStatus(cid, "exp")
end
function addMarryExp(cid, amount)
return setMarryStatus(cid, "exp", amount)
end
function addMarryLevel(cid, amount)
return setMarryStatus(cid, "level", amount)
end
function getMarryLevel(cid)
return getMarryStatus(cid, "level")
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;!divorce;/divorce" event="buffer"><![CDATA[
domodlib('marry_func')
config = {TimeAccept = 30, sqm = 3, storage1 = 873438, storage2 = 532579}
if words =="!marriage" or words =="/marriage" then
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
msg = "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 bonus exp as a wedding gift given by the union".."\n\nThis bonus is only given if the married players are nearby.\n\nTo marry use the command:\n!marriage NAME"
doShowTextDialog(cid,2160,msg)
elseif(param == "status") then
if isMarried(cid) then
msg = "Marriage Status".."\n\nMarried with: ["..getPartner(cid).."]\n\nMarry Experience: "..(getMarryLevel(cid) ~= 10 and "["..getMarryExp(cid).."/"..Marry_stage[getMarryLevel(cid)].exp.."]" or "[Max]").."\n\nMarry Level: "..(getMarryLevel(cid) ~= 10 and "["..getMarryLevel(cid).."]" or "[Max]").."\n"
else
msg = "you are not married"
end
doPlayerPopupFYI(cid, msg)
elseif (param =="date") then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,""..(isMarried(cid) and "The date of his marriage with "..getPartner(cid).." was: "..getMarryDate(cid).."." or "you are not married.").."")
elseif (param =="accept") then
player = getPlayerStorageValue(cid, config.storage2)
if getPlayerStorageValue(cid, config.storage1) >= os.time() then
if not isMarried(cid) then
if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player)) <= config.sqm then
doMarry(cid, getPlayerGUID(player))
doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations! "..getCreatureName(cid).." accepted his marriage proposal.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations! you married with "..getCreatureName(player))
doSendMagicEffect(getCreaturePosition(cid), 35)
doSendMagicEffect(getCreaturePosition(player), 35)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you're far away from her suitor.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are not married.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you do not received none wedding invitation.")
end
elseif (param =="reject") then
if getPlayerStorageValue(cid, config.storage1) >= os.time() then
if not isMarried(cid) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"You just refuse the wedding invitation from player "..getCreatureName(getPlayerStorageValue(cid, config.storage2)))
doPlayerSendTextMessage(getPlayerStorageValue(cid, config.storage2), MESSAGE_STATUS_CONSOLE_ORANGE,getCreatureName(cid).." rejected his marriage proposal.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are already married.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you do not received none wedding invitation.")
end
else
local player = getPlayerByNameWildcard(param)
if(not player)then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param.." is offline or does not exist.") return true
elseif isMarried(cid) or isMarried(player) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, ""..(isMarried(cid) and "you" or "he").." already is wedded.") return true
elseif marry_config.Premium == true then
if not isPremium(cid) or not isPremium(Player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "players must be premium") end
return true
elseif getPlayerLevel(cid) < marry_config.Level or getPlayerLevel(player) < marry_config.Level then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "players must to be level "..marry_config.Level) return true
elseif getPlayerStorageValue(player, config.storage1) >= os.time() then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param.." already have a wedding invitation, wait.") return true
elseif getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player)) > config.sqm then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you are far away from each other to get married.") return true
elseif marry_config.OnlyDifferentSex and getPlayerSex(cid) == getPlayerSex(player) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you can only marry the opposite sex") return true
elseif not doPlayerRemoveMoney(cid, marry_config.Marry_Price) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, but you do not have "..marry_config.Marry_Price.." gp(s) to ask "..param.." in marriage.") return true
end
setPlayerStorageValue(player, config.storage1,os.time()+config.TimeAccept)
setPlayerStorageValue(player, config.storage2, cid)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you asked "..param.." in marriage, wait a answer!")
doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE,getCreatureName(cid).." asked you in marriage, enter !marriage accept or !marriage reject")
end
elseif words =="!divorce" or words =="/divorce" then
if isMarried(cid) then
if doPlayerRemoveMoney(cid, marry_config.Divorce_Price) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations, you end up divorcing from player: "..getPartner(cid))
doDivorcePlayer(cid)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Sorry, you do not have "..marry_config.Divorce_Price.." gp(s).")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are not married.")
end
end
return true
]]></talkaction>
<event type="login" name="MarryRegister" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "ExpMarry")
registerCreatureEvent(cid, "MarryLook")
registerCreatureEvent(cid, "MarryStats")
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, "\nMarried with "..getPartner(thing.uid).." - [Nv: " .. getMarryLevel(thing.uid) .."]\n")
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>
<event type="kill" name="ExpMarry" event="script"><![CDATA[
domodlib('marry_func')
function onKill(cid, target, lastHit)
if isMonster(target) then
conta = getMonsterInfo(string.lower(getCreatureName(target))).experience
if isMarried(cid) and isMarryOnline(cid) and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(getPlayerByNameWildcard(getPartner(cid)))) <= marry_config.MaxSqm then
if getMarryLevel(cid) ~= 10 then
mexp = math.ceil((conta*Marry_stage[getMarryLevel(cid)].marry_percent)/100)
addMarryExp(cid, mexp)
if isMarryOnline(cid) then
doPlayerSendTextMessage(getPlayerByNameWildcard(getPartner(cid)),MESSAGE_STATUS_SMALL,"Marry exp + "..mexp)
end
doPlayerSendTextMessage(cid,MESSAGE_STATUS_SMALL,"Marry exp + "..mexp)
if getMarryExp(cid) >= Marry_stage[getMarryLevel(cid)].exp then
addMarryLevel(cid, 1)
if isMarryOnline(cid) then
doPlayerSendTextMessage(getPlayerByNameWildcard(getPartner(cid)), MESSAGE_STATUS_CONSOLE_RED,"[Marriage System] Level Up! [Nv: "..getMarryLevel(cid).."].")
doSendMagicEffect(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), 35)
end
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_RED,"[Marriage System] Level Up! [Nv: "..getMarryLevel(cid).."].")
doSendMagicEffect(getCreaturePosition(cid), 35)
end
end
local exp = getExperienceStage(getPlayerLevel(cid), getVocationInfo(getPlayerVocation(cid)).experienceMultiplier)
local count = math.ceil(((getMonsterInfo(string.lower(getCreatureName(target))).experience*exp)*Marry_stage[getMarryLevel(cid)].player_experience)/100)
doPlayerAddExperience(cid, count)
end
end
return true
end]]></event>
<event type="statschange" name="MarryStats" event="script"><![CDATA[
domodlib('marry_func')
Damage_percent = 50 -- metade n mexa
Chance = 25 -- chance de conseguir o reflect ou couple damage
if isMonster(attacker) and type == STATSCHANGE_HEALTHLOSS then
if isMarried(cid) and isMarryOnline(cid) and getPlayerByNameWildcard(getPartner(cid)) and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(getPlayerByNameWildcard(getPartner(cid)))) <= marry_config.MaxSqm then
if (Chance > math.random(1, 100)) then
damage = math.ceil((value*Damage_percent)/100)
if (50 > math.random(1, 100)) then
doTargetCombatHealth(cid, attacker, COMBAT_PHYSICALDAMAGE, -damage, -damage, CONST_ME_HOLYDAMAGE)
doSendAnimatedText(getCreaturePosition(cid), "REFLECT!", 140)
else
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HEARTS)
doSendAnimatedText(getCreaturePosition(cid), "Love!", 200)
doCreatureAddHealth(cid, damage)
if isMarryOnline(cid) then
doSendMagicEffect(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), CONST_ME_HEARTS)
doSendAnimatedText(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), "Love!", 200)
doCreatureAddHealth(getPlayerByNameWildcard(getPartner(cid)), -damage)
end
end
end
end
end
return true
]]></event>
</mod>

Configuração:




CREDITOS : 25% Ao vodkart pela lib e 75% ao mulizeu(eu) Pelos demais scripts

 

 

 

 

 

ps: não tá dando para citar tudo, ta vindo bugado..
Link do tópico: http://www.tibiaking.com/forum/topic/12994-new-marriage-system/


Bom, to seguindo o tutorial certinho e da esse erro:

 

[20/05/2015 23:58:16] [Error - TalkAction Interface]
[20/05/2015 23:58:16] buffer
[20/05/2015 23:58:16] Description:
[20/05/2015 23:58:16] [string "marry_config = {..."]:58: attempt to call field 'executeQuery' (a nil value)

  

 

 

é um sistema incrível, quero usar ele em meu server, alguém pode me ajudar.. fazendo um favor de imeeensa gratidão?
Desde já, agradecido!

Link para o post
Compartilhar em outros sites

Troca 'db.executeQuery' para 'db.query' ou add isso em compat.lua/global.lua.

 

db.executeQuery = db.query

 

se ainda não der onde tiver  'db.executeQuery' por 'db.escapeString'

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

db.escapeString   foi a solução.. esse é um ótimo script que agora, estou usando em meu server graças ao Latoy e a ti, Vodkart..


Se puder, me ajuda nesse tópico também pq o problema é parecido com esse..

[20/05/2015 22:18:19] [Error - GlobalEvent Interface]

[20/05/2015 22:18:19] data/globalevents/scripts/pointsperhour.lua:onThink

[20/05/2015 22:18:19] Description:

[20/05/2015 22:18:19] data/lib/050-function.lua:810: attempt to call field 'executeQuery' (a nil value)

[20/05/2015 22:18:19] stack traceback:

[20/05/2015 22:18:19]     data/lib/050-function.lua:810: in function 'doPlayerAddPoints'

[20/05/2015 22:18:19]     data/globalevents/scripts/pointsperhour.lua:15: in function 'givePoints'

[20/05/2015 22:18:19]     data/globalevents/scripts/pointsperhour.lua:24: in function <data/globalevents/scripts/pointsperhour.lua:22>

[20/05/2015 22:18:19] [Error - GlobalEvents::think] Couldn't execute event: points 

substitui o db.executeQuery por db.escapeString  no 050-function.lua (apenas na parte que afeta esse sistema) e não está dando nenhum bug no distro, mas também não está dando points nem para o player nem para a conta.. ;x
é outro sistema que quero usar em meu server hueh


Parte do 050-function.lua que afeta o script de points:

function getPoints(cid)
local res = db.getResult('select `p_points` from accounts where name = \''..getPlayerAccount(cid)..'\'')
if(res:getID() == -1) then
return false
end
local ret = res:getDataInt("p_points")
res:free()
return tonumber(ret)
end

function doPlayerAddPoints(cid, quant)
return db.escapeString("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) + quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end

function doPlayerRemovePoints(cid, quant)
return db.escapeString("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) - quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end    
    



http://www.tibiaking.com/forum/topic/57409-pedido-desbugar-script-de-points/









 


@EDIT!

 

 

Manin, tava testando aqui e não está dando nenhum erro no distro, porém não está funcionando as funções do script.. quando falo !marriage status fala que não está casado e não funciona nenhum dos bonus de casamento ;x
 

 

 

 

 


PLAYER 1

12:40 you asked nessaaa in marriage, wait a answer!

12:40 Congratulations! Nessaaa accepted his marriage proposal.

 

PLAYER 2

 

12:40 Gabriel asked you in marriage, enter !marriage accept or !marriage reject

12:40 Congratulations! you married with Gabriel



Mesmo depois disso, continua constando que não é casado e não funciona o script, e pode-se fazer infinitos pedidos de casamento seguidos(sem divorcio)

Editado por biel.stocco (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo