Para aqueles que não quiserem entrar na pagina o script do NPC:
<spoiler>
domodlib('marry_func')local keywordHandler =KeywordHandler:new()local npcHandler =NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState ={}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid)endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid)endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg)endfunction onThink() npcHandler:onThink()endfunction creatureSayCallback(cid, type, msg)if(not npcHandler:isFocused(cid))thenreturnfalseendlocal talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and0or cid
msg,players =string.lower(msg),{getPlayerGUID(cid)}if msgcontains(msg,'marry')or msgcontains(msg,'marriage')thenif isMarried(cid)then
npcHandler:say("Sorry, You already is wedded.", cid)
elseif getPlayerStorageValue(cid, marry_config.storage3)>=1then
npcHandler:say("you must sign the {divorce}.", cid)
elseif getPlayerStorageValue(cid, marry_config.storage1)>= os.time()thenlocal 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]=2else
npcHandler:say("Would you like to get married?", cid)
talkState[talkUser]=1end
elseif msgcontains(msg,"yes")and talkState[talkUser]==1then
npcHandler:say("And what\'s the name of your future partner?", cid)
talkState[talkUser]=3
elseif talkState[talkUser]==3thenlocal player = getPlayerByNameWildcard(msg)if(not player)then
npcHandler:say(msg.." is offline or does not exist.", cid)returntrue
elseif isMarried(player)then
npcHandler:say("He already is wedded.", cid)returntrue
elseif getPlayerStorageValue(cid, marry_config.storage3)>=1or getPlayerStorageValue(player, marry_config.storage3)>=1then
npcHandler:say((getPlayerStorageValue(cid, marry_config.storage1)>=1and"You"or"He").." must sign the divorce.", cid)returntrue
elseif getPlayerLevel(cid)< marry_config.Levelor getPlayerLevel(player)< marry_config.Levelthen
npcHandler:say("players must to be level "..marry_config.Level, cid)returntrue
elseif getPlayerStorageValue(player, marry_config.storage1)>= os.time()then
npcHandler:say(msg.." already have a wedding invitation, wait.", cid)returntrue
elseif getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player))> marry_config.MaxSqmthen
npcHandler:say("you are far away from each other to get married.", cid)returntrue
elseif marry_config.OnlyDifferentSexand getPlayerSex(cid)== getPlayerSex(player)then
npcHandler:say("you can only marry the opposite sex", cid)returntrue
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)returntrueend
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]==2then
player = getPlayerStorageValue(cid, marry_config.storage2)if getPlayerStorageValue(cid, marry_config.storage1)>= os.time()thenifnot isMarried(cid)thenifPonline(player)then
x = getPlayerByNameWildcard(getPlayerNameByGUID(player))if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(x))<= marry_config.MaxSqmthen
table.insert(players, player)
doMarry(cid, player)for i =1,#players dolocal 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]=0else
npcHandler:say("you're far away from her suitor.", cid)endelse
npcHandler:say("suitor offline.", cid)endelse
npcHandler:say("you are not married.", cid)
talkState[talkUser]=0endelse
npcHandler:say("you do not received none wedding invitation.", cid)
talkState[talkUser]=0end
elseif msgcontains(msg,"cancel")and talkState[talkUser]==2then
player = getPlayerStorageValue(cid, marry_config.storage2)if getPlayerStorageValue(cid, marry_config.storage1)>= os.time()thenifnot isMarried(cid)then
setPlayerStorageValue(cid, marry_config.storage1,-1)
npcHandler:say("You just refuse the wedding invitation from player "..getPlayerNameByGUID(player), cid)ifPonline(player)then
doPlayerSendTextMessage(getPlayerByNameWildcard(getPlayerNameByGUID(player)), MESSAGE_STATUS_CONSOLE_ORANGE,getCreatureName(cid).." rejected his marriage proposal.")endelse
npcHandler:say("you are already married.", cid)
talkState[talkUser]=0endelse
npcHandler:say("you do not received none wedding invitation.", cid)
talkState[talkUser]=0end
elseif msgcontains(msg,"divorce")thenif 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)>=1then
npcHandler:say("you must sign here to end your marriage, ok? {yes}", cid)
talkState[talkUser]=7else
npcHandler:say("you are not married", cid)
talkState[talkUser]=0end
elseif msgcontains(msg,"yes")and talkState[talkUser]==6thenif isMarried(cid)thenif 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))ifPonline(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)endelse
npcHandler:say("you are not married.", cid)end
elseif msgcontains(msg,"yes")and talkState[talkUser]==7then
npcHandler:say("Congratulations, you end up divorcing.", cid)
setPlayerStorageValue(cid, marry_config.storage3,-1)
elseif msg =="no"and talkState[talkUser]>=1then
selfSay("tudo bem então.", cid)
talkState[talkUser]=0
npcHandler:releaseFocus(cid)endreturn TRUE
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
<spoiler/>
Aqui é o MOD, creio que onde tudo se resume ao look no ring.
<spoiler>
<?xml version="1.0" encoding="UTF-8"?><modname="MarriageSystem"version="1.0"author="Vodkart"contact="xtibia.com"enabled="yes"><configname="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 = 30,
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><talkactionwords="/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><eventtype="login"name="MarryRegister"event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "MarryLook")
registerCreatureEvent(cid, "MarryNoAttack")
return true
end]]></event><eventtype="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><eventtype="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>
Pergunta
julhinhuu 26
Olá galera do XT, Boa tarde
O que eu gostaria hoje era que meu npc de casamento retirasse o anel de casado ao se divorciarem e desse o broken com o look de divorcio.
Exemplo: Você vê um engraved wedding ring.
Fulano & Sicrano para sempre - casaram em 29 December 2015 11:39:46 .
obs: Esse eles estão casados
O do divorcio seria mais o menos assim:
Exemplo: Você vê um broken engraved wedding ring.
Fulano e Sicrano para sempre não existe - Se divorciaram em 29 December 2015 11:39:46 .
Se não tiver o look não tem problema, poderia ser so o npc retirando o engraved ring e dando o broken aos jogadores.
Então o script que eu uso é esse:
Para aqueles que não quiserem entrar na pagina o script do NPC:
<spoiler>
<spoiler/>
Aqui é o MOD, creio que onde tudo se resume ao look no ring.
<spoiler>
<spoiler/>
Link para o comentário
https://xtibia.com/forum/topic/238539-npc-ao-dar-divorcio-trocar-o-anel-de-casamento-pelo-o-anel-quebrado/Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados