Ir para conteúdo

Npc Changer Town


Luga03

Posts Recomendados

Eae pessoal blz?? Estou aqui para postar um script simples porém util pra comunidade!


Descrição: Você é morador de uma cidade, por exemplo, Carlin, dai você quer virar morador de Thais(Configuravel), você fala com o Npc James, ele vai te perguntar se você quer morar em thais, se você dizer sim, ele vai te teleportar para thais e você vai ser um morador de thais! Caso você já seja morador de Thais, ele vai dizer que você é morador de thais!

Testado em Tfs 0.3.6pl1 e Funcionou!

Simples não?? Vamos começar!

Em data/npc crie um arquivo James.xml e coloque isto dentro:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="James" script="data/npc/scripts/James.lua" walkinterval="0" floorchange="0" access="5" >
<health now="150" max="150"/>
<look type="177" head="17" body="54" legs="114" feet="0" addons="2" />
<parameters>
<parameter key="message_greet" value="Welcome to CITYNAME |PLAYERNAME|! Would you like to become {resident} of CITYNAME??"/>
<parameter key="message_farewell" value="Goodbye!"/>
</parameters>
 
</npc>


E Agora em data/npc/scripts Crie um arquivo .lua chamado de James e dentro coloque isto:

 

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 CITYID = 1 -- Townid da cidade!
local CITYNAME = "Thais" -- Nome da Cidade!
 
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'resident') or msgcontains(msg, 'yes') then
if (getPlayerTown(cid) ~= CITYID) then
doPlayerSetTown(cid, CITYID)
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
selfSay('You just become resident '.. CITYNAME ..'!', cid)
elseif msgcontains(msg, 'no') then
selfSay('How Are You! If you want to become a resident of '.. CITYNAME ..' talk to me!', cid)
else
selfSay('Already a resident of '.. CITYNAME ..'!!!', cid)
end
end
return 0
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) 
npcHandler:addModule(FocusModule:new())

 



Configurações:

No arquivo James.xml, onde tiver escrito "CITYNAME", substitua pelo nome da cidade

e em James.lua só modifique está parte:

local CITYID = 1 -- Townid da cidade!
local CITYNAME = "Thais" -- Nome da Cidade!



Creio que já deu pra entender ali no código oque deve configurar!

Pessoal Obrigado pela atenção e espero que façam um bom proveito!

Créditos

Zet0N0Mumurou(Eu) - Por Criar o Script!
KualKerun - Pela ideia!
Editado por Zet0N0Murmurouu
Link para o comentário
Compartilhar em outros sites

Se você colocasse uma tabela com mais cidades ficaria melhor não acha? Ai o player escolhe a cidade que ele quer morar u.u

Curti a ideia, rep+

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

Se você colocasse uma tabela com mais cidades ficaria melhor não acha? Ai o player escolhe a cidade que ele quer morar u.u

Curti a ideia, rep+

Cara a ideia deste script foi de apenas uma cidade mas se quizer que o player escolhe-se uma cidade entre 5(cofiguravel) cidades, seila só pedir ai que eu faço!

Link para o comentário
Compartilhar em outros sites

@ gostei da ideia, obrigado por compartilhar conosco.

 

Precisa de uma correção:

Se o player falar "hi", "yes" ele já troca a cidade...

 

Olha, pode tentar assim:

 

local CONFIG = {
	CITYID = 1, -- Townid da cidade!
	CITYNAME = "Thais" -- Nome da Cidade!
}

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, 'resident') or msgcontains(msg, CONFIG.CITYNAME)) and talkState[talkUser] == 0 then
		selfSay('Do you want to become a resident of ' .. CONFIG.CITYNAME .. '?', cid)
		talkState[talkUser] = 1
	elseif msgcontains(msg, 'yes') and talkState[talkUser] == 1 then
		if getPlayerTown(cid) ~= CONFIG.CITYID then
			doPlayerSetTown(cid, CONFIG.CITYID)
			doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
			selfSay('You just become resident {' .. CONFIG.CITYNAME .. '}!', cid)
			talkState[talkUser] = 0
		else
			selfSay('You already a resident of ' .. CONFIG.CITYNAME .. '!!!', cid)
			talkState[talkUser] = 0
		end
	elseif msgcontains(msg, 'no') and talkState[talkUser] == 1 then
		selfSay('How Are You! If you want to become a resident of {' .. CONFIG.CITYNAME .. '} talk to me!', cid)
		talkState[talkUser] = 0
	end
	return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) 
npcHandler:addModule(FocusModule:new())

 

Link para o comentário
Compartilhar em outros sites

@ gostei da ideia, obrigado por compartilhar conosco.

 

Precisa de uma correção:

Se o player falar "hi", "yes" ele já troca a cidade...

 

Denada! Mas você ao menos testou?? porque eu fiz ele testando direto até ficar 100% funcional! ele fala hi, o player manda uma mensage se ele falar resident ou yes, ele é teleportado direto pra cidade nova dele e o npc envia uma mensagem! exatamente como foi pedido lá no código :) mas obrigado pela melhoria ae ^^

Link para o comentário
Compartilhar em outros sites

Denada! Mas você ao menos testou?? porque eu fiz ele testando direto até ficar 100% funcional! ele fala hi, o player manda uma mensage se ele falar resident ou yes, ele é teleportado direto pra cidade nova dele e o npc envia uma mensagem! exatamente como foi pedido lá no código :) mas obrigado pela melhoria ae ^^

 

Te dei um toque apenas amigo...basta olhar pra essa linha:

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

Faça o teste, fala "hi" e depois "yes".

 

Quando eu comecei com LUA, tive muitas pessoas que me corrigiram, isso me ajudou a enxergar a linguagem de uma forma diferente, certas coisas nós não precisamos testar, basta olhar para o script para saber o que ele faz.

 

Link para o comentário
Compartilhar em outros sites

 

Te dei um toque apenas amigo...basta olhar pra essa linha:

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

Faça o teste, fala "hi" e depois "yes".

 

Quando eu comecei com LUA, tive muitas pessoas que me corrigiram, isso me ajudou a enxergar a linguagem de uma forma diferente, certas coisas nós não precisamos testar, basta olhar para o script para saber o que ele faz.

 

Eu to ligado mas é porque o lek la que pediu pra o player falar hi ai depois "resident" e já ser teleportado, eu tentei fazer uma confirmação mais não due certo então deixei meio que incompleto porem funcional como o cara lá queria :) e vlw ae dnv pela dica e.e eu estou olhando aqui uns tutoriais sobre lua, pra complementar meu conhecimento eu acabei de aprender sobre Arrays(tables) só que com um probleminha dps vou criar um tópico pra ver se alguem pode me explicar ^^

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...