Ir para conteúdo

[npc] Sistema De Casamento


leleos

Posts Recomendados

Bom eu tava dando uma olhada aqui e achei um npc de casamento muito legal, entao resolvi editar ele.

 

O Sistema que eu editei é o que Delton postou aqui, eu só adicionei para o npc que casa os players dar um anel com os nomes gravados, exemplo:

 

Se eu pedir a "Maria" em casamento e ela casar comigo, ela recebera um anel disendo "Com amor, Leleo".

 

E eu irei receber um anel dizendo "Com amor, Maria".

 

Pra quem no entendeu ta ai uma SS:

 

imagemgg.png

 

Bom agora vamos ao Script:

 

Adicione isso no function.lua

 

function getPlayerMarriage(player)

local rows = db.getResult("SELECT `marriage` FROM `players` WHERE `id` = " .. player .. ";")

local marry = rows:getDataInt("marriage")

if marry ~= 0 then

return marry

else

return FALSE

end

end

 

function addMarryStatus(player,partner)

db.executeQuery("UPDATE `players` SET `marrystatus` = " .. partner .. " WHERE `id` = " .. player .. ";")

return TRUE

end

 

function doCancelMarryStatus(player)

db.executeQuery("UPDATE `players` SET `marrystatus` = 0 WHERE `id` = " .. player .. ";")

return TRUE

end

 

function getMarryStatus(player)

local stat = db.getResult("SELECT `id` FROM `players` WHERE `marrystatus` = " .. player .. ";")

if(stat:getID() == -1) then

return FALSE

else

local info = stat:getDataInt("id")

return info

end

end

 

function getOwnMarryStatus(player)

local stat = db.getResult("SELECT `marrystatus` FROM `players` WHERE `id` = " .. player .. ";")

if(stat:getID() == -1) then

return FALSE

else

local info = stat:getDataInt("marrystatus")

return info

end

end

 

function isOnline(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

 

Agora vá para data/npc e crie um arquivo chamado: Priest.xml, e adicione isso:

 

<?xml version="1.0"?>

<npc name="Priest" script="data/npc/scripts/weedding.lua" access="3" lookdir="2">

<mana now="800" max="800"/>

<health now="200" max="200"/>

<look type="57" head="20" body="30" legs="40" feet="50"/>

</npc>

 

Agora vá para data/npc/scripts e crie um arquivo chamado: wedding.lua e adicione:

 

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

 

if msgcontains(msg, 'marry') or msgcontains(msg, 'marriage') then

if getPlayerStorageValue(cid,3066) == -1 then

selfSay('Would you like to get married?', cid)

talkState[talkUser] = 1

elseif getPlayerStorageValue(cid,3066) == 1 then

local fid = getPlayerGUID(cid)

local marrystatus = getOwnMarryStatus(fid)

if marrystatus ~= 0 then

local newpartner = getPlayerNameByGUID(marrystatus)

selfSay('You already set a wedding date with {' .. newpartner .. '}, now I must talk to your partner. Do you want to {cancel} it?', cid)

talkState[talkUser] = 5

else

setPlayerStorageValue(cid,3066,-1)

selfSay('Would you like to get married?', cid)

talkState[talkUser] = 1

end

elseif getPlayerStorageValue(cid,3066) == 2 then

selfSay('You are already married. If you want to {divorce}, just say it.', cid)

talkState[talkUser] = 0

end

 

elseif msgcontains(msg, 'divorce') then

if getPlayerStorageValue(cid,3066) == 2 then

selfSay('Would you like to divorce of your partner?', cid)

talkState[talkUser] = 6

else

selfSay('You are not married. If you want to get married, just say {marry}.', cid)

talkState[talkUser] = 0

end

end

 

if talkState[talkUser] == 1 then

if msgcontains(msg, 'yes') then

local fid = getPlayerGUID(cid)

local marrystatus = getMarryStatus(fid)

if marrystatus == FALSE then

selfSay('And what\'s the name of your future partner?', cid)

talkState[talkUser] = 2

else

local marryname = getPlayerNameByGUID(marrystatus)

selfSay('{' .. marryname .. '} has set a wedding date with you. Do you want to {proceed} or {cancel} the wedding?', cid)

talkState[talkUser] = 4

end

end

 

elseif talkState[talkUser] == 2 then

local p = msg

local player = getPlayerName(cid)

local fid = getPlayerGUID(cid)

local sid = getPlayerGUIDByName(p)

if sid == 0 then

selfSay('A player with that name does not exists.', cid)

talkState[talkUser] = 0

elseif sid == fid then

selfSay('Don\'t worry, you will always be married with yourself, kid.', cid)

talkState[talkUser] = 0

else

local marrystatus = getMarryStatus(fid)

local pmarriage = getPlayerMarriage(sid)

local ownstatus = getOwnMarryStatus(cid)

if pmarriage == FALSE then

if marrystatus == FALSE then

if ownstatus == FALSE then

setPlayerStorageValue(cid,3066,1)

addMarryStatus(fid,sid)

selfSay('You\'ve just set a wedding date with {' .. p .. '}.', cid)

talkState[talkUser] = 0

else

local partnername = getPlayerNameByGUID(ownstatus)

selfSay('{' .. p .. '} has already set a wedding date with {' .. partnername .. '}.', cid)

talkState[talkUser] = 0

end

else

local marryname = getPlayerNameByGUID(marrystatus)

selfSay('{' .. marryname .. '} has set a wedding date with you. Do you want to {proceed} or {cancel} the wedding?', cid)

talkState[talkUser] = 4

end

else

local pname = getPlayerNameByGUID(pmarriage)

selfSay('Sorry, but {' .. p .. '} is already married to {' .. pname .. '}.', cid)

talkState[talkUser] = 0

end

end

 

elseif talkState[talkUser] == 4 then

if msgcontains(msg, 'proceed') then

local fid = getPlayerGUID(cid)

local sid = getMarryStatus(fid)

local marryname = getPlayerNameByGUID(sid)

local pid = getPlayerByNameWildcard(marryname)

if isOnline(fid) == TRUE and isOnline(sid) == TRUE then

local tmf = getCreaturePosition(cid)

local tms = getCreaturePosition(pid)

local text = {'I love you!','My love!','Baby dear!'}

local chance1 = math.random(1,table.getn(text))

local chance2 = math.random(1,table.getn(text))

ring1 = doPlayerAddItem(pid,2121,1)

ring2 = doPlayerAddItem(cid,2121,1)

nome = getPlayerName(cid)

nome2 = getPlayerName(pid)

if getDistanceBetween(tmf, tms) <= 3 then

setPlayerStorageValue(cid,3066,2)

setPlayerStorageValue(pid,3066,2)

doCancelMarryStatus(fid)

doCancelMarryStatus(sid)

setPlayerPartner(cid,sid)

setPlayerPartner(pid,fid)

doCreatureSay(cid, text[chance1], TALKTYPE_ORANGE_1)

doCreatureSay(pid, text[chance2], TALKTYPE_ORANGE_1)

doSendMagicEffect(tmf, 35)

doSendMagicEffect(tms, 35)

doSetItemSpecialDescription(ring1,"Com amor, ".. nome .. ".")

doSetItemSpecialDescription(ring2,"Com amor, ".. nome2 .. ".")

selfSay('Congratulations! Now you may kiss your partner! Everytime you wanna make this effect, just say {love}. You must be close to your partner.', cid)

talkState[talkUser] = 0

else

selfSay('Your partner must be close to you so you can marry!', cid)

talkState[talkUser] = 0

end

else

selfSay('You and your new partner must be online at the same time.', cid)

talkState[talkUser] = 0

end

 

elseif msgcontains(msg, 'cancel') then

local fid = getPlayerGUID(cid)

local sid = getMarryStatus(fid)

local marryname = getPlayerNameByGUID(sid)

local pid = getPlayerByNameWildcard(marryname)

if isOnline(sid) == TRUE then

setPlayerStorageValue(pid,3066,-1)

end

doCancelMarryStatus(sid)

selfSay('You just canceled your wedding date with {' .. marryname .. '}.', cid)

talkState[talkUser] = 0

end

 

elseif talkState[talkUser] == 5 then

if msgcontains(msg, 'cancel') or msgcontains(msg, 'yes') then

local fid = getPlayerGUID(cid)

setPlayerStorageValue(cid,3066,-1)

doCancelMarryStatus(fid)

talkState[talkUser] = 0

end

 

elseif talkState[talkUser] == 6 then

if msgcontains(msg, 'yes') then

local fid = getPlayerGUID(cid)

local sid = getPlayerPartner(cid)

local marryname = getPlayerNameByGUID(sid)

local pid = getPlayerByNameWildcard(marryname)

if (isOnline(fid) == TRUE and isOnline(sid) == TRUE) then

setPlayerStorageValue(cid,3066,-1)

setPlayerStorageValue(pid,3066,-1)

setPlayerPartner(cid,0)

setPlayerPartner(pid,0)

selfSay('You\'ve just divorced of your old partner.', cid)

talkState[talkUser] = 0

else

selfSay('You and your new partner must be online at the same time.', cid)

talkState[talkUser] = 0

end

end

end

return TRUE

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Execulte essa querry no seu mysql:

 

ALTER TABLE `players` ADD `marrystatus` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `marriage`;

 

Em data/talkactions/talkactions. xml adicione:

 

<talkaction words="love" script="love.lua"/>

 

Em data/talkactions/scripts crie um arquivo chamado love.lua e adicione:

 

function onSay(cid, words, param)

-- Exhausted Settings --

local exhausted_seconds = 1 -- How many seconds player will be exhausted --

local exhausted_storagevalue = 9847 -- Storage Value to store exhaust. It MUST be unused! --

-- Exhausted Settings END --

 

 

local text = {'I love you!','My love!','Baby dear!'}

local chance1 = math.random(1,table.getn(text))

local chance2 = math.random(1,table.getn(text))

local sid = getPlayerPartner(cid)

if sid > 0 then

if isOnline(sid) == TRUE then

local sname = getPlayerNameByGUID(sid)

local pid = getPlayerByNameWildcard(sname)

local tmf = getCreaturePosition(cid)

local tms = getCreaturePosition(pid)

if getDistanceBetween(tmf, tms) <= 3 then

if(os.time() > getPlayerStorageValue(cid, exhausted_storagevalue)) then

setPlayerStorageValue(cid, exhausted_storagevalue, os.time() + exhausted_seconds)

doCreatureSay(cid, text[chance1], TALKTYPE_ORANGE_1)

doCreatureSay(pid, text[chance2], TALKTYPE_ORANGE_1)

doSendMagicEffect(tmf, 35)

doSendMagicEffect(tms, 35)

else

doPlayerSendCancel(cid, "You are exhausted.")

return TRUE

end

end

end

end

end

 

Foi adicionado exhaust para que os chars não façam SPAM, e dê lag no server.

 

Pronto!

 

Como funciona?

 

PLAYER1 Vai para o NPC e começa a conversa...

PLAYER1: Hi

PLAYER1: marry

PLAYER1: yes

PLAYER1: Nome do player 2 para adicionar "status de casado", e o player 2 começa a conversa....

PLAYER2: Hi

PLAYER2: marry

PLAYER2: yes

PLAYER2: proceed

 

Você pode se divorciar caso o "fogo da paixão" acabe xD

 

Script funciona com gesior acc maker (Apenas mostra se o char está casado ou não)

 

Bom ta ai o script espero ter ajudado.

 

Eu testei aqui e pego certinho.

 

Creditos:

Godely - Por ter criado o script.

Delton - Por ter postado aqui.

Leleos - Pequena Modificação no script.

 

Comenta ai!

 

Abraços!

Editado por leleos
Link para o comentário
Compartilhar em outros sites

Ja existe tópicos semelhante a esse (com o mesmo tema).

Mais mesmo assim, fico agradeçido leleos por trazer ao Xtibia.

 

 

 

cagaio

 

Evite postar post deste tipo, isto pode ser considerado como flood.

(na minha opinião)

 

__

Abraços

Editado por BravHart
Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...
  • 2 weeks later...

Minha database nao tem essa table

ALTER TABLE `players` ADD `marrystatus` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `marriage`;

como faco pra criar uma pelo sqlitestudio-1.1.3

no meu arquivo forgoten.s3db

por favor me ajude

Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...
  • 7 months later...
×
×
  • Criar Novo...