Ir para conteúdo
  • 0

Npc Teleporter


wesley_world

Pergunta

Galera, é o seguinte. Preciso de um npc que teletransporte o player para alguns lugares, como os de navios, porem com algumas diferenças:

  • Para acessar o npc o player deve acionar o comando !teleport no qual o player será teleportado para a área onde se encontra o npc;

  • Apenas players abaixo do level 80 podem ter acesso a esse npc;

  • Um player até o level 40 ao falar com o npc ele dará algumas opções para onde ele possa teletransportar; players do level 41 até ao 80 terá outras opções que o npc poderá teletransportar;

  • O npc não cobrará nenhum valor para teletransportar o player.

  • Durante as passagens de leveis desde o 70 até ao 80 o player receberá mensagens informando que após o level 80 ele não poderá mais usar o comando !teleport.

 

Um exemplo de player de level menor que 40:

 

- Player: Hi

- NPC: Olá ______, escolha para onde quer ser teleportado: Templo, troll, orc, elf, amazon, dwarf, cyclops.

- Player: Troll

(player teletransportado).

 

Um exemplo de player de level maior que 40:

 

- Player: Hi

- NPC: Olá ______, escolha para onde quer ser teleportado: Templo, dragon, scarab, giant spider, vampire, hydra.

- Player: Dragon

(player teletransportado).

 

Aguardo respostas.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Va em npc/scripts e crie um arquivo itemtravel.lua e bote isto dentro:

[/font][/color]
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

local pos = {x=152,y=58,z=7} -------------- Pos para onde o player sera levado
local itemid = 2468 ----------------- Id do item que vai ser removido do player

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, "offer") or msgcontains(msg, "help") then
       selfSay("Eu posso te levar a TAL lugar por um "..getItemNameById(itemid).." item, fale {travel} se quizer viajar.", cid)
       talkState[cid] = 0
   elseif msgcontains(msg, 'travel') then
      if doPlayerRemoveItem(cid, itemid, 1) then
       selfSay("Boa viagem.", cid)
    doTeleportThing(cid, pos)
    else
    selfSay("Voce nao tem o item nescessario.", cid)
    end
    end
    return TRUE   
    end


npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Depois crie um arquivo NOMEDONPC.lua e bote isto dentro:

[/font][/color]
<npc name="NOMEDONPC" script="data/npc/scripts/itemtravel.lua" walkinterval="2000" floorchange="0">
   <health now="100" max="100"/>
   <look type="134" head="78" body="88" legs="0" feet="88" addons="3"/>
       <parameters>
               <parameter key="message_greet" value="Ola. Para mais informacoes de meus servicos diga {offer}." />
               <parameter key="message_farewell" value="Tchau." />
               <parameter key="message_walkaway" value="Tchau." />
       </parameters>
</npc>

 

 

AJUDEI?REP+

Link para o comentário
Compartilhar em outros sites

  • 0

@Ifelipebsilva05

Obrigado cara pela ajuda, porem não era bem assim o que eu queria, teria como fazer com que não necessitasse de item para o teleport? apenas pelo comando !teleport ? Se conseguir essas alterações, ficarei muito grato. Alias, como recompensa pelo seu esforço ja darei REP+, caso consiga essa alteração darei REP+ novamente.

Link para o comentário
Compartilhar em outros sites

  • 0

===NPC===

 

Crie um arquivo.lua em data/npcs/scripts e cole isto dentro:

 

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

local t = { --- posições para level menor que 40
["cyclops"] = {pos = {x=1,y=1,z=1}},
["templo"] = {pos = {x=100,y=40,z=7}},
["troll"] = {pos = {x=1,y=1,z=1}},
["dwarf"] = {pos = {x=1,y=1,z=1}},
["elf"] = {pos = {x=1,y=1,z=1}},
["amazon"] = {pos = {x=1,y=1,z=1}},
["orc"] = {pos = {x=1,y=1,z=1}}
}

local x = { -- posições para level maior que 40
["templo"] = {go = {x=100,y=40,z=7}},
["dragon"] = {go = {x=1,y=1,z=1}},
["scarab"] = {go = {x=1,y=1,z=1}},
["vampire"] = {go = {x=1,y=1,z=1}},
["giant spider"] = {go = {x=1,y=1,z=1}},
["hydra"] = {go = {x=1,y=1,z=1}},
["dragon lord"] = {go = {x=1,y=1,z=1}}
}

local min = "Escolha para onde quer ser teleportado: {cyclops}, {templo}, {troll}, {dwarf}, {orc}, {elf}, {amazon}." --- msg para lvl menor q 40
local max = "Escolha para onde quer ser teleportado: {templo}, {dragon}, {scarab}, {vampire}, {giant spider}, {hydra}, {dragon lord}." -- msg para lvl maior que 40

	if msgcontains(msg, "travel") or msgcontains(msg, "Travel") then
			if getPlayerLevel(cid) <= 40 then
					selfSay(min, cid)
							talkState[talkUser] = 1
			elseif getPlayerLevel(cid) > 40 and getPlayerLevel(cid) <= 80 then
					selfSay(max, cid)
					talkState[talkUser] = 2
end

	elseif talkState[talkUser] == 1 then			
			if t[msg] then
					doTeleportThing(cid, t[msg].pos)
							doSendMagicEffect(getCreaturePosition(cid), 10)
									selfSay("Boa viagem.", cid)
											talkState[talkUser] = 0
							 end

	elseif talkState[talkUser] == 2 then
			if x[msg] then
					doTeleportThing(cid, x[msg].go)
							doSendMagicEffect(getCreaturePosition(cid), 10)
									selfSay("Boa viagem.", cid)
					 end
end
return TRUE  
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Em data/npcs, crie um arquivo.xml e cole isto dentro:

 

<npc name="NOMEDOSEUNPC" script="data/npc/scripts/NOMEDOSEUARQUIVO.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="134" head="78" body="88" legs="0" feet="88" addons="3"/>
	<parameters>
			<parameter key="message_greet" value="Ola. Para mais informacoes de meus servicos diga {travel}." />
			<parameter key="message_farewell" value="Tchau." />
			<parameter key="message_walkaway" value="Tchau." />
	</parameters>
</npc>

 

===TALKACTION===

 

Em data/talkactions/scripts crie um arquivo.lua e cole isto dentro:

 

local maxlevel = 80 -- abaixo desse level os players poderão ir
local npc = {x=1, y=1, z=1}  --- local que o npc estará

function onSay(cid, words, param)
if getPlayerLevel(cid) < 80 then
doTeleportThing(cid, npc)
doSendMagicEffect(npc, 10)
else
doPlayerSendTextMessage(cid, 22, "Apenas players com level abaixo de ".. maxlevel .." tem acesso ao npc.")
end
return true
end

 

Em talkactions.xml cole a tag: <talkaction words="!teleport" script="NOMEDOSEUARQUIVO.lua"/>

 

===CREATURESCRIPTS===

 

Em data/creaturescripts/scripts crie um arquivo.lua e cole isto dentro:

 

function onAdvance(cid, skill, oldLevel, newLevel)
if getPlayerLevel(cid) >= 70 and getPlayerLevel(cid) <= 80 then
doPlayerSendTextMessage(cid, 18, "Lembre-se que depois do level 80 você não poderá usar o comando !teleport")
end
return true
end

 

Em creaturescripts/scripts/login.lua cole antes do return true: registerCreatureEvent(cid, "Notice")

 

Em creaturescripts.xml cole a tag: <event type="advance" name="Notice" event="script" value=NOMEDOSEUARQUIVO.lua"/>

 

Vlw, espero ter ajudado, abraços.

 

@edit

Percebi que level 80+ podiam se teleportar com o npc,agora já resolvi isso.

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

  • 0

@Leoxtibia

 

Caraaaaaa, que perfeito seu script, era exatamente oq eu precisava, nossa muito bom mesmo, deu tudo certinho. Muito obrigado mesmo! minha cota de REP+ ja se esgotou por hoje, mas amanha e sempre que eu lembrar te darei reputação positiva!! Continue assim meu caro, é de gente assim que o Xtibia precisa mdr.gif

 

 

Só mais uma coisa, tem como adicionar mais um item: que o player só possa fazer o comando !teleport se ele não estiver em battle? Caso ele esteja em battle e fazer o comando !teleport apareça uma mensagem informando que ele só pode acionar o teleport estando livre de battle.

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

  • 0

Ok, aí está:

 

local maxlevel = 80 -- abaixo desse level os players poderão ir
local npc = {x=1, y=1, z=1}  --- local que o npc estará

function onSay(cid, words, param)
if getPlayerLevel(cid) < 80 then
if getCreatureCondition(cid, CONDITION_INFIGHT) == FALSE then
doTeleportThing(cid, npc)
doSendMagicEffect(npc, 10)
else
doPlayerSendTextMessage(cid, 22, "Você não pode estar em battle para se teleportar.")
end
else
doPlayerSendTextMessage(cid, 22, "Apenas players com level abaixo de ".. maxlevel .." tem acesso ao npc.")
end
return true
end

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

×
×
  • Criar Novo...