Ir para conteúdo
  • Cadastre-se

[Pedido] The Oracle 8.42 TFS


Posts Recomendados

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 por Kurwa (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo