Boa noite aew
Galera, eu tenho um OT 8.42 TFS 0.2.1 e gostaria que alguém me ajuda-se a fazer o NPC The Oracle funcionar (ele não troca a vocação e nem teleporta para a city), irei postar o xml e o lua do npc: xml: <?xml version="1.0" encoding="UTF-8"?>
<npc name="The Oracle" floorchange="0" walkinterval="0">
<health now="150" max="150"/>
<look typeex="1448"/>
<interaction range="3" idletime="30">
<interact keywords="hi" focus="1">
<!--These are the keywords will trigger this interaction-->
<keywords>hello</keywords>
<keywords>greet</keywords>
<response>
<action name="script">
<!--
if(getPlayerVocation(cid) ~= 0) then
selfSay("SORRY, YOU HAVE ALREADY MADE YOUR CHOICE IN LIFE!")
_state.isidle = true
return
end
-->
if(getPlayerLevel(cid)) >= 8 then
selfSay(getCreatureName(cid) .. ", ARE YOU PREPARED O FACE YOUR DESTINY?")
_state.b1 = (isPremium(cid) == TRUE)
_state.topic = 1
else
selfSay("CHILD! COME BACK WHEN YOU HAVE GROWN UP!")
_state.isidle = true
end
</action>
</response>
</interact>
<interact keywords="yes" topic="1">
<!--Premium account, b1 is set in above-->
<response b1="1" text="IN WHICH TOWN DO YOU WANT TO LIVE: CARLIN, EDRON, THAIS, OR VENORE?">
<action name="topic" value="2"/>
</response>
<!--Normal account-->
<response text="IN WHICH TOWN DO YOU WANT TO LIVE: CARLIN, THAIS, OR VENORE?">
<action name="topic" value="2"/>
</response>
</interact>
<interact keywords="carlin" topic="2">
<response text="IN CARLIN! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
<!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
<action name="script">
_state.n1 = 1
_state.topic = 3
</action>
</response>
</interact>
<interact keywords="thais" topic="2">
<response text="IN THAIS! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
<!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
<action name="script">
_state.n1 = 2
_state.topic = 3
</action>
</response>
</interact>
<interact keywords="venore" topic="2">
<response text="IN VENORE! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
<!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
<action name="script">
_state.n1 = 3
_state.topic = 3
</action>
</response>
</interact>
<interact keywords="edron" topic="2">
<response text="YOU NEED A PREMIUM ACCOUNT IN ORDER TO GO THERE!">
<!--Set the topic back to 2, ie. choose a new town.-->
<action name="topic" value="2"/>
</response>
<!--b1: premium account, see <interact keywords="hi" focus="1"> where _state.b1 is is set.-->
<response b1="1" text="IN EDRON! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
<!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
<action name="script">
_state.n1 = 3
_state.topic = 3
</action>
</response>
</interact>
<!--If the player does not say any city, repeat our question-->
<interact keywords="|*|" topic="2">
<response b1="1" text="CARLIN, EDRON, THAIS, OR VENORE?"/>
<response text="CARLIN, EDRON, THAIS, OR VENORE?"/>
</interact>
<interact keywords="sorcerer" topic="3">
<response text="A SORCERER! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
<!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
<action name="script">
_state.n2 = 1
_state.topic = 4
</action>
</response>
</interact>
<interact keywords="druid" topic="3">
<response text="A DRUID! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
<!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
<action name="script">
_state.n2 = 2
_state.topic = 4
</action>
</response>
</interact>
<interact keywords="paladin" topic="3">
<response text="A PALADIN! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
<!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
<action name="script">
_state.n2 = 3
_state.topic = 4
</action>
</response>
</interact>
<interact keywords="knight" topic="3">
<response text="A KNIGHT! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
<!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
<action name="script">
_state.n2 = 4
_state.topic = 4
</action>
</response>
</interact>
<!--If the player does not say any profession, repeat our question-->
<interact keywords="|*|" topic="3">
<response text="KNIGHT, PALADIN, SORCERER, OR DRUID?"/>
</interact>
<interact keywords="yes" topic="4">
<response>
<!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
<!--n2: 1 = knight, 2 = paladin, 3 = sorcerer, 4 = druid-->
<action name="script">
local pos = 0
if(_state.n1 == 1) then
pos = {x=180, y=233, z=7}
elseif(_state.n1 == 2) then
pos = {x=180, y=233, z=7}
elseif(_state.n1 == 3) then
pos = {x=180, y=233, z=7}
elseif(_state.n1 == 4) then
pos = {x=180, y=233, z=7}
else
selfSay("I DO NOT KNOW WHAT PROFESSION THAT IS, ASK THE GODS FOR GUIDANCE!")
return
end
selfSay("SO BE IT!")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
if(doTeleportThing(cid, pos) == 0) then
doPlayerSetVocation(cid, _state.n2)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
end
</action>
<action name="idle" value="1"/>
</response>
</interact>
<interact keywords="bye" focus="0">
<keywords>farewell</keywords>
<response text="Good bye. Recommend us, if you were satisfied with our service."/>
</interact>
<!--
If the event onBusy exists, the npc will make a queue like Tibia, if the event is removed
the npc will be able to talk to all customers at the same time without problems.
-->
<interact event="onBusy">
<response text="WAIT UNTIL IT IS YOUR TURN!">
<action name="addqueue" value="|PLAYER|"/>
</response>
</interact>
<!--This event triggers if the player goes to far away from the npc/logout/idle timeout-->
<interact event="onPlayerLeave" focus="0">
<response text="COME BACK WHEN YOU ARE PREPARED TO FACE YOUR DESTINY!"/>
</interact>
</interaction>
</npc> lua: focus = 0
talk_start = 0
target = 0
following = false
attacking = false
talk_state = 0
cname = ''
vocation = 0
mainlevel = 8
dx = 0
dy = 0
dz = 0
function onThingMove(creature, thing, oldpos, oldstackpos)
end
function onCreatureAppear(creature)
end
function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye then.')
focus = 0
talk_start = 0
end
end
function onCreatureTurn(creature)
end
function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end
function onCreatureSay(cid, type, msg)
cname = creatureGetName(cid)
msg = string.lower(msg)
if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hello ' .. cname .. '! Are you ready to face your destiny?')
talk_state = 0
focus = cid
talk_start = os.clock()
elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
selfSay('Sorry, ' .. cname .. '! I talk to you in a minute.')
elseif msgcontains(msg, 'bye') and focus == cid and getDistanceToCreature(cid) < 4 then
selfSay('Good bye, ' .. cname .. '!')
talk_state = 0
focus = 0
talk_start = 0
elseif focus == cid then
talk_start = os.clock()
if talk_state == 0 then
if msgcontains(msg, 'yes') then -- wanna go to mainland
level = getPlayerLevel(cname)
if level >= mainlevel then
selfSay('Great! Do you want to be a knight, a paladin, a sorcerer or a druid?')
talk_state = 1
else
selfSay('Sorry, you need level ' .. mainlevel .. ' to go to the mainland.')
talk_state = 0
end
else
selfSay('Come back when you are ready then.')
talk_state = 0
end
elseif talk_state == 1 then -- telling vocation
talk_state = 2
if msgcontains(msg, 'sorcerer') then
selfSay('A mighty sorcerer! Are you sure?')
vocation = 1
elseif msgcontains(msg, 'druid') then
selfSay('A mysterious druid! Are you sure?')
vocation = 2
elseif msgcontains(msg, 'paladin') then
selfSay('A nimble paladin! Are you sure?')
vocation = 3
elseif msgcontains(msg, 'knight') then
selfSay('A valorous knight! Are you sure?')
vocation = 4
else
selfSay('Sorry, there is no such vocation.')
vocation = 0
talk_state = 1
end
elseif talk_state == 2 then -- confirming vocation
if msgcontains(msg, 'yes') then
selfSay('Great! I can send you to Carlin, Thais, Abdendriel, Venore or Kazordoon. Where do you want to go?')
talk_state = 3
else
selfSay('What vocation do you want then?')
talk_state = 1
end
elseif talk_state == 3 then -- telling city name
if msgcontains(msg, 'carlin') then
dx=32360
dy=31782
dz=7
elseif msgcontains(msg, 'thais') then
dx=32369
dy=32241
dz=7
elseif msgcontains(msg, 'venore') then
dx=32957
dy=32076
dz=7
elseif msgcontains(msg, 'kazordoon') then
dx=32649
dy=31925
dz=11
elseif msgcontains(msg, 'abdendriel') then
dx=32732
dy=31634
dz=7
else
selfSay('Sorry, there is no such city.')
talk_state = 3
dx = 0
end
if dx > 0 then
selfSay('Good luck, young adventurer!')
setPlayerVocation(cid,vocation)
setPlayerMasterPos(cid,dx,dy,dz)
selfSay('/send ' .. cname .. ', '..dx..' '..dy..' '..dz)
talk_state = 0
focus = 0
talk_start = 0
end
end
end
end
function onCreatureChangeOutfit(creature)
end
function onThink()
if focus > 0 then
selfLook(focus)
if getDistanceToCreature(focus) > 5 then
focus = 0
selfSay('Good bye then.')
end
end
if (os.clock() - talk_start) > 40 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
end
end
Grato desde já!