LU
script

Npc Changer Town

Por Luga03, 16 de ago. de 2015 em NPCs, monsters e raids

9
2.1k
Luga03L
16 de agosto de 2015 às 11:37

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 Agosto 16 por Zet0N0Murmurouu

LumusL
16 de agosto de 2015 às 16:27

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 Agosto 16 por Fawz

Luga03L
16 de agosto de 2015 às 20:12

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!

BrunoB
16 de agosto de 2015 às 22:26

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

 

Editado Agosto 16 por Bruno Minervino

Luga03L
17 de agosto de 2015 às 08:18

@ 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 ^^

SkyLighS
17 de agosto de 2015 às 08:54

Ficou bem da hora parabéns :D

Luga03L
17 de agosto de 2015 às 09:04

Valeu man :) Comentários assim me incentivam mais ainda ^^

BrunoB
17 de agosto de 2015 às 09:54

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.

 

Luga03L
17 de agosto de 2015 às 10:05

 

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