Postado Março 29, 2013 12 anos 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á! Editado Março 29, 2013 12 anos por Kurwa (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.