Ir para conteúdo
  • 0

Pedido Npc Transport


Raidou

Pergunta

Fala XTibia,estou aqui por quê nao achei em lugar nenhum este NPC.Bom vou dar uma breve explicada abaixo do que eu quero.

 

O player fala hi,dai o npc fala o lugar que ele pode ir,o player vai la fala o nome do lugar.Depois yes.E se teletransporta para o lugar Configuravel.

 

Posso por pra mais de 1 lugar.(Que de para configurar o nome e a localizaçao do lugar.)

 

O npc nao remove nada do player.

 

O player nao pode estar com Battle.

 

Espero ajuda galera,preciso urgente.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local parameters = {}

local teleports = {
["Random Void"] = {price = 100, position = {x = 0, y = 0, z = 7}}
}

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 onCreatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
	return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

for name, info in pairs(teleports) do
	if msgcontains(msg, name) then
		selfSay("Você quer ir para {".. name .."}?", cid)
		talkState[talkUser] = 1
		parameters[talkUser] = info
		break
	end
end

if talkState[talkUser] == 1 then
	if msgcontains(msg, "yes") then
		if doPlayerRemoveMoney(cid, parameters[talkUser].price) then
			doTeleportThing(cid, parameters[talkUser].position)
			selfSay("Boa viagem!", cid)
		else
			selfSay("Desculpe, você não possui ".. parameters[talkUser].price .." gp para viajar.", cid)
			talkState[talkUser] = 0
		end
	elseif msgcontains(msg, "no") then
		selfSay("Tudo bem, volte quando mudar de ideia.", cid)
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
	end
end
return true
end

local msg = "Olá, |PLAYERNAME|. Gostaria de viajar? Posso te levar para: "
local i = 1

for name, info in pairs(teleports) do
msg = msg .." {".. name .."}" .. (i == 1 and "" or ", ")
i = i + 1
end

npcHandler:setMessage(MESSAGE_GREET, msg)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Configure novos locais aqui:

 

local teleports = {
["Random Void"] = {price = 100, position = {x = 0, y = 0, z = 7}}
}

 

Sempre colocando vírgula no final da linha, com exceção da última linha.

 

local teleports = {
["Random Void"] = {price = 100, position = {x = 0, y = 0, z = 7}},
   ["Terra do Exemplo"] = {price = 777, position = {x = 160, y = 54, z = 7}}
}

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

  • 0

Bom ja que você pediu no msn vou ter que ajudar ...

 

Vai em data/npc e cria um Citizen.xml

 

<?xml version="1.0"?>
<npc name="Citizen" script="data/npc/scripts/tele.lua" walkinterval="0" floorchange="0">
<health now="1" max="1"/>
<look type="57" head="20" body="30" legs="40" feet="50" corpse="3128"/>
</npc>

 

Depois vai em data/npc/script e cria um tele.lua

 

local keywordHandler = KeywordHandler:new()
		    local npcHandler = NpcHandler:new(keywordHandler)
		    NpcSystem.parseParameters(npcHandler)


		    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 
  if msgcontains(msg, 'young') and not isPlayerPzLocked(cid) then
    if  doPlayerRemoveItem(cid, 2152, 0) == true then
	 doTeleportThing(cid,{x=1021, y=1072, z=7})
	 self:releaseFocus(cid)
    else
	 npcHandler:say('You don\'t have enought money to travel!', cid)
	 self:releaseFocus(cid)
    end
  end
  if msgcontains(msg, 'templo') and not isPlayerPzLocked(cid) then
    if  doPlayerRemoveItem(cid, 2152, 15) == true then
	 doTeleportThing(cid,{x=32387, y=31821, z=6})
	 self:releaseFocus(cid)
    else
	 npcHandler:say('You don\'t have enought money to travel!', cid)
	 self:releaseFocus(cid)
    end
  end 
  if isPlayerPzLocked(cid) then
	 npcHandler:say('You can\'t travel, you have pz!', cid)
  end
 return true
end
 npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
 keywordHandler:addKeyword({'travel'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Eu posso te levar para: {templo}, {young}.'})
 npcHandler:addModule(FocusModule:new())

 

Nessa parte :

 

if msgcontains(msg, 'young') and not isPlayerPzLocked(cid) then

if doPlayerRemoveItem(cid, 2152, 0) == true then

doTeleportThing(cid,{x=1021, y=1072, z=7})

self:releaseFocus(cid)

else

npcHandler:say('You don\'t have enought money to travel!', cid)

self:releaseFocus(cid)

end

end

 

Se você quiser colocar mais cidade copia essa e edita..

 

Eu tirei o dinheiro tipo o npc teleporta de graça se você quiser colocar pra cobrar basta add isso.

 

if doPlayerRemoveItem(cid, 2152, 10) == true then

 

 

Legenda:

 

Azul: Coordenadas

Vermelho: Custo da viagem

Verde: Nome da cidade

 

Ajudei? REP Ai smile_positivo.gif

Link para o comentário
Compartilhar em outros sites

  • 0

@Edit

 

Os dois funcionaram corretamente.Muito Obrigado pela atençao de todos,irei dar rep+ para os dois.

 

@Topico

 

Minha Dúvida foi sanada podem fechar o tópico.

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

  • 0

Aproveitando o tema, como eu faço para colocar uma storage nesse código abaixo?

 

local travelNode = keywordHandler:addKeyword({'thais'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you seek a passage to Thais for 180 gold?'})
	 travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = false, level = 0, cost = 180, destination = {x=32310, y=32210, z=6} })
	 travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'We would like to serve you some time.'})

 

Quero que o npc leve o player só se ele tiver X storage, mas quero que continue nesse mesmo formato de NODE.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...