Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Nome: Married System

Versão: 8.70

Executavel testado: Crystal server V1.0

Bem, esse script eu fiz no meu projeto, arrumei ele completo para funcionar perfeitamente sem nenhum bug no 8.70, claro que consegui.

Em data/npc crie um arquivo .xml e adicione:

<?xml version="1.0" encoding="UTF-8"?>  

<npc name="Priest" script="data/npc/scripts/NOME_SCRIPT_NO_LUA.lua"  walkinterval="0" floorchange="0">

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

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

</npc>

Agora em data/npc/scripts crie um arquivo .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)

								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))

								local dateFormat = "%A %d"..getMonthDayEnding(os.date("%d")).." %B %Y"

								local ring = doPlayerAddItem(cid,2121,1)

								local ring2 = doPlayerAddItem(pid,2121,1)


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

						if getDistanceBetween(tmf, tms) <= 3 then

										setPlayerStorageValue(cid,3066,2)

										setPlayerStorageValue(pid,3066,2)

										doCancelMarryStatus(fid)

										doCancelMarryStatus(sid)

										setPlayerPartner(cid,sid)

										setPlayerPartner(pid,fid)

										doItemSetAttribute(ring, "description", "" .. getCreatureName(cid) .. " & " .. getCreatureName(pid) .. " forever - married on " ..os.date(dateFormat).. ".")

										doItemSetAttribute(ring2, "description", "" .. getCreatureName(cid) .. " & " .. getCreatureName(pid) .. " forever - married on " ..os.date(dateFormat).. ".")

										doCreatureSay(cid, text[chance1], TALKTYPE_ORANGE_1)

										doCreatureSay(pid, text[chance2], TALKTYPE_ORANGE_1)

										doSendMagicEffect(tmf, 35)

										doSendMagicEffect(tms, 35)

										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())

Em data/lib/functions.lua adicione no final (depois do END):
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 adicione a query(mysql):
ALTER TABLE `players` ADD `marrystatus` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `marriage` ;

Simples assim!

Retirei todos os bugs, não apareçe nenhum erro no distro/executavel. Espero que gostem!

PS: não sei se funfa nas versões anteriores ou superiores, não testei.

Créditos: Mulizeu 80%

Eu 20%

Editado por Subyth
Arrumando o tópico, adicionando o resto das funções que havia esquecido. (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Respostas 8
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Nome: Married System Versão: 8.70 Executavel testado: Crystal server V1.0 Bem, esse script eu fiz no meu projeto, arrumei ele completo para funcionar perfeitamente sem nenhum bug no 8.70, claro que consegui. Em data/npc crie um arquivo .xml e adicione: <?xml version="1.0" encoding="UTF-8"?> <npc name="Priest" script="data/npc/scripts/NOME_SCRIPT_NO_LUA.lua" walkinterval="0" floorchange="0"> <health now="200" max="200"/> <look

mas não tem que colocar as funções e query no tópico junto? se não eles vão colocar o npc e não vai funcionar '-'

mas não tem que colocar as funções e query no tópico junto?

se não eles vão colocar o npc e não vai funcionar '-'

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
  Em 22/06/2012 em 14:51, Vodkart disse:

mas não tem que colocar as funções e query no tópico junto?

se não eles vão colocar o npc e não vai funcionar '-'

Expand   Mostrar mais  

Eita, agradeço por me lembrar kkk esqueci totalmente das query (por isso na minha cabeça tava faltando alguma coisa para adicionar).

Link para o post
Compartilhar em outros sites
  • 2 years later...

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.

  • Estatísticas dos Fóruns

    96847
    Tópicos
    519611
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo