Ir para conteúdo
Entre para seguir isso  
the Gray Fox

[N:Médio] Construindo uma Arena

Recommended Posts

the Gray Fox    0
the Gray Fox

INTRODUÇÃO

 

Bom, há algum tempo atrás procurei por um modo de produzir uma arena igual ao do servidor global em meu OT. Encontrei. Mas no mundo dos OTServs, para bons mappers e scripters, tudo é possível. Então por que não seria existir uma Arena em cada cidade? Foi isso que pensei. Mas produzir um mapa de arena em cada cidade, configurar com as devidas Actions id e etc. Foi ai que pensei "por que não fazer uma arena com uma única sala, na qual o Player puxaria uma alavanca quando quisesse enfrentar um monstro?". Aí vai!

 

PS: com o entendimento desse tutorial será possível criar uma Arena como a do Global.

 

TUTORIAL

Índice

  1. Criando o mapa
  2. Desenvolvendo os scripts
  3. Conectando as funções

 

 

1. Criando o Mapa

 

Bom, a arena que estarei desenvolvendo será usada futuramente em meu servidor. Essa em especial, se localizará na cidade principal. Vamos lá.

 

1) Construa um local mais ou menos assim:

 

47079028ts3.png

 

Será nesse local que o NPC da Arena ficará.

OBS: é de extrema importância para o bom funcionamento do script que exista aquela mesa e palpel no canto superior da sala, e que nada seja jogado lá. Garanta isso! Um modo, por exemplo, é por um caldeirão embaixo da mesa.

 

2) Agora vamos a parte em que a platéia fica na Arena. Faremos de um modo mais bonito e legal que o do map Global. Será assim:

 

53226272pu6.png

 

Ficou um pouco proporcional, mas serve. As grades dão um visual mais rústico, mas não são nessessárias. Você pode substituir por o quê quiser. Você pode ainda decorar um pouco o mapa em volta das cadeiras.

 

3) Agora a parte mais importante. Vamos fazer a Arena em si.

 

33913856qh0.png

 

O teleport superior será o teleport que leva a sala de recompensas e o inferior levará de volta para a sala do NPC.

 

4) Finalmente a última parte, a sala de recompensas.

 

90318630fr1.png

 

Talvez essa seja a parte da produção do mapa que toma mais tempo, pois exige vários detalhes.

 

Bom, assim finalizamos o mapa. Agora vamos aos Scripts.

 

2. Desenvolvendo Scripts

 

1) NPC. O NPC é simples. Aqui está o código dele:

 

local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false
local talk_state = 0

function pay(cid, cost)
   if doPlayerRemoveMoney(cid, cost) == 1 then
       return true
   else
       return false
   end
end

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
     if focus == cid then
         selfSay('Adeus então.')
         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)
     msg = string.lower(msg)

     if (msgcontains(msg, 'oi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
         selfSay('Olá, ' .. getCreatureName(cid) .. '! Deseja realizar o desafio da  arena?')
         focus = cid
         talk_start = os.clock()
       talk_state = 0

     elseif msgcontains(msg, 'oi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
         selfSay('Espere um pouco, ' .. getCreatureName(cid) .. '! Já te atenderei.')

   elseif (focus == cid) then
   poscheck = [color=DarkOrchid]{x=956, y=914, z=9}[/color]
   check = getThingfromPos(poscheck)
        if (msgcontains(msg, 'sim') and talk_state == 0) then
               if (check.actionid == 0) then
           selfSay('Qual nível do desafio deseja fazer: Bronze, Prata ou Ouro?')
           talk_state = 1
               else
                       selfSay('Desculpe, mas já há alguém na sala.')
       end
       elseif (msgcontains(msg, 'bronze') and talk_state == 1) then
           selfSay('O nivel Bronze da arena de [color=Red](Cidade)[/color] custa 1.000gps. Deseja mesmo fazer?')
           talk_state = 2
           nivel = 1
       elseif (msgcontains(msg, 'prata') and talk_state == 1) then
           selfSay('O nivel Prata da arena de [color=Red](Cidade)[/color] custa 3.000gps. Deseja mesmo fazer?')
           talk_state = 2
           nivel = 2
       elseif (msgcontains(msg, 'ouro') and talk_state == 1) then
           selfSay('O nível Ouro da arena de [color=Red](Cidade)[/color] custa 5.000gps. Deseja mesmo fazer?')
           talk_state = 2
           nivel = 3
       elseif (msgcontains(msg, 'sim') and talk_state == 2) then
           if (nivel == 1) then
               valor = 1000
               monstro = "[color=Blue]Wolf[/color]"
            elseif (nivel == 2) then
               valor = 3000
               monstro = "[color=Blue]Dwarf Guard[/color]"
            elseif (nivel == 3) then
               valor = 5000
               monstro = "[color=Blue]Dragon[/color]"
            end

           if pay(cid,valor) == true then
           Stonepos = [color=Yellow]{x=939, y=912, z=10}[/color]
           stone = getThingfromPos(Stonepos)
               if (nivel == 1) then
                   doSetItemActionId(stone.uid,6001)
               elseif (nivel == 2) then
                   doSetItemActionId(stone.uid,6002)
               elseif (nivel == 3) then
                   doSetItemActionId(stone.uid,6003)
               end

               selfSay('Boa sorte!')    
               doSetItemActionId(check.uid,6000)
           telpos = [color=Green]{x=939, y=911, z=10, stackpos=1}[/color]
       tel = getThingfromPos(telpos)
               doSetItemActionId(tel.uid,2004)
       [color=Cyan][color=Black]pos = [/color]{x=939, y=923, z=10}[/color]
               [color=Blue][color=Black]posc = [/color]{x=939, y=914, z=10}[/color]
               doSummonCreature(monstro, posc)
               doSendAnimatedText(pos,"Fight!",198)
       ppos = getPlayerPosition(cid)
       player = getThingfromPos(cid)
               doTeleportThing(player, pos)

               talk_state = 0
               talk_start = 0
               focus = 0
           else
               selfSay('Desculpe, mas voce so pode fazer arena se pagar!')
               talk_state = 0
               talk_start = 0
               focus = 0
           end

       elseif (msgcontains(msg, 'flw')) then
           talk_state = 0
           talk_start = 0
           focus = 0
           selfSay('Volte quando quiser.')

       end        

   end
end


function onCreatureChangeOutfit(creature)

end


function onThink()
     if (os.clock() - talk_start) > 30 then
         if focus > 0 then
             selfSay('Proximo!')
         end
             focus = 0
     end
    if focus ~= 0 then
        if getDistanceToCreature(focus) > 5 then
            selfSay('Adeus.')
            focus = 0
        end
    end
end[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][/color][/color][/color]

 

Vamos as partes que serão mudadas de Pessoa a pessoa:

em Laranja: Posição em que o monstro será sumonado em sua sala de Luta. Minha sugestão é que seja aqui:

 

26599712tr4.png

 

em Azul: Primeiro monstro a ser summonado.

em Amarelo: Posição da pedra que impede o caminho.

em Ciano: Posição que será mandada as mensagens como "Fight!". Pode ser qualquer lugar da sala.

em Vermelho: Nome da cidade que abriga essa arena.

em Roxo: Posição do Papel que fica na sala do NPC.

em Verde: Posição que o jogador aparecerá após falar com o NPC. Minha sugestão é que seja aqui:

 

44288470yd2.png

 

Salve o código do NPC como "Arenanpc.lua", na pasta data\NPC\Scripts.

 

2) Agora adicinaramos o Movement que summonará o próximo monstro quando o atual for morto.

 

Aqui vai o código:

local function doCheckLvl(stone)
   if stone.actionid == 6001 then
       [color=Orange]monsters = {"Bear", "Lion"}  [/color]
   elseif stone.actionid == 6002 then
       [color=Orange]monsters = {"Necromancer", "Orc Warlord"} [/color]
   elseif stone.actionid == 6003 then
       [color=Orange]monsters = {"Giant Spider", "Dragon Lord"}[/color]
   end
end

function onAddItem(moveitem, tileitem, pos)
   [color=Red]poscheck = {x=956, y=914, z=9}[/color]
   check = getThingfromPos(poscheck)
       [color=Blue]posm = {x=939, y=914, z=10}[/color]
       [color=Green]Stonepos = {x=939, y=912, z=10}[/color]
       stone = getThingfromPos(Stonepos)
   if moveitem.itemid == 7349 and tileitem.actionid == 6001 then
       if (check.actionid == 6000) then
           doCheckLvl(stone)
           doSummonCreature(monsters[1],posm)
                   doSetItemActionId(check.uid,6002)
                   doSendAnimatedText(posm,"Fight!",198)
           elseif (check.actionid == 6002) then
           doCheckLvl(stone)
           doSummonCreature(monsters[2],posm)
                doSetItemActionId(check.uid,6003)
                   doSendAnimatedText(posm,"Fight!",198)
       elseif (check.actionid == 6003) then
           stoneloc = {x=939, y=912, z=10, stackpos=1}
           stonerem = getThingfromPos(stoneloc)
           doRemoveItem(stonerem.uid,1)
           doSetItemActionId(check.uid,6000)
           doSendAnimatedText(posm,"You won!",198)
           end

    end    
   doRemoveItem(moveitem.uid,1)
end


function onStepIn(cid, item, pos)
   [color=Green]stonepos = {x=939, y=912, z=10}[/color]
   doCreateItem(1304,1,stonepos)
   [color=Red]poscheck = {x=956, y=914, z=9}[/color]
   check = getThingfromPos(poscheck)
   doSetItemActionId(check.uid,0)
   nivel = getPlayerStorageValue(cid, 5029)
   if nivel == 1 then
       setPlayerStorageValue(cid, 5032, 1)
   elseif nivel == 2 then
       setPlayerStorageValue(cid, 5033, 1)
   elseif nivel == 3 then
       setPlayerStorageValue(cid, 5034, 1)
   end
   [color=Purple]posrw = {x=960, y=919, z=10}[/color]
   doTeleportThing(cid,posrw)
   doSendMagicEffect(posrw, 10)
end


[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][/color][/color][/color]

Explicando o quê deve ser mudado:

em Laranja: Mude aqui os monstros que serão enfrentados após o primeiro ser morto.

em Azul: Posição que os monstros serão summonados. Use a mesma que a usada no NPC.

em Verde: Posição da pedra que impede o caminho.

em Vermelho: Posição do Papel da sala do NPC.

em Roxo: Posição da sala de recompensas que você será teleportado. Minha sugestão é que seja aqui:

 

96170738lo2.png

 

OBS: É nessessário para o funcionamento do Script que o id do corpo dos monstros seja 7349, aquele mesmo corpo das criaturas da Arena do servidor Global. Os monstros ultilizados por mim(wolf, bear, etc) são apenas exemplos. Sugiro a criação de monstros novos, específicos para a arena, cujo ID do corpo seá 7349.

Salve o código como "Arena.lua", na pasta data\Movements\Scripts.

3) Configuraremos agora o loot.

 

 
function onUse(cid, item, frompos, item2, topos)

      if item.uid == 9009 then
          queststatus = getPlayerStorageValue(cid,5075)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou uma Blacksteel Sword.")
              [u]doPlayerAddItem(cid,7406,1)[/u]
              setPlayerStorageValue(cid,5075,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9008 then
          queststatus = getPlayerStorageValue(cid,5075)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou um Headchopper.")
              [u][color=DarkOrchid]doPlayerAddItem(cid,7380,1)[/color][/u]
              setPlayerStorageValue(cid,5075,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9007 then
          queststatus = getPlayerStorageValue(cid,5075)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou uma Orcish Maul.")
             [u][color=DarkOrchid]doPlayerAddItem(cid,7392,1)[/color][/u]
              setPlayerStorageValue(cid,5075,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9004 then
       queststatus = getPlayerStorageValue(cid, 5075)
       if queststatus == -1 then
[color=DarkOrchid]             [u]doPlayerAddItem(cid, 2331, 1)
[/u]             [u]doPlayerAddItem(cid, 2114, 1)
[/u]             [u]doPlayerAddItem(cid, 6574, 1)
[/u]             [u]doPlayerAddItem(cid, 6569, 10)
[/u]             [u]doPlayerAddItem(cid, 7373, 1)
[/u]             [u]doPlayerAddItem(cid, 6570, 1)[/u][/color]
           doPlayerSendTextMessage(cid, 22, "Você encontrou uma Present Box.")
           setPlayerStorageValue(cid,5075,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9006 then
          queststatus = getPlayerStorageValue(cid,5075)
          if queststatus == -1 then
[color=DarkOrchid]             [u]doPlayerAddItem(cid, 7364, 100)
[/u]             [u]doPlayerAddItem(cid, 7365, 100)[/u][/color]
              doPlayerSendTextMessage(cid,22,"Você encontrou 100 Sniper Arrows e 100 Onyx Arrows.")
              setPlayerStorageValue(cid,5075,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9005 then
          queststatus = getPlayerStorageValue(cid,5076)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou um Bronze Goblet.")
           trof = [u][color=DarkOrchid]doPlayerAddItem(cid,7371,1)[/color][/u]
           nome = getPlayerName(cid)
           doSetItemSpecialDescription(trof, "Dado àqueles que vencem o nível Bronze da arena de Rodório.")
              setPlayerStorageValue(cid,5076,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end

   elseif item.uid == 9026 then
          queststatus = getPlayerStorageValue(cid,5077)
          if queststatus == -1 then
              [color=Red][u]doPlayerSendTextMessage(cid,22,"Você encontrou uma Mystic blade.")[/u][/color]
              [u][color=DarkOrchid]doPlayerAddItem(cid,7384,1)[/color][/u]
              setPlayerStorageValue(cid,5077,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9025 then
          queststatus = getPlayerStorageValue(cid,5077)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou um Heroic Axe.")
              [color=DarkOrchid][u]doPlayerAddItem(cid,7389,1)[/u][/color]
              setPlayerStorageValue(cid,5077,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9024 then
          queststatus = getPlayerStorageValue(cid,5077)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou uma Cranial Basher.")
              [color=DarkOrchid][u]doPlayerAddItem(cid,7415,1)[/u][/color]
              setPlayerStorageValue(cid,5077,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9022 then
       queststatus = getPlayerStorageValue(cid, 5077)
       if queststatus == -1 then
           [color=DarkOrchid][u]doPlayerAddItem(cid, 7584, 1)
[/u]             [u]doPlayerAddItem(cid, 7375, 1)
[/u]             [u]doPlayerAddItem(cid, 6574, 1)
[/u]             [u]doPlayerAddItem(cid, 6569, 10)[/u][/color]
           doPlayerSendTextMessage(cid, 22, "Você encontrou uma Present Box.")
           setPlayerStorageValue(cid,5077,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9023 then
          queststatus = getPlayerStorageValue(cid,5077)
          if queststatus == -1 then
[color=DarkOrchid]             [u]doPlayerAddItem(cid, 2311, 50)
[/u]             [u]doPlayerAddItem(cid, 2304, 50)
[/u]             [u]doPlayerAddItem(cid, 2547, 100)
[/u]             [u]doPlayerAddItem(cid, 2547, 100)
[/u]             [u]doPlayerAddItem(cid, 7365, 100)[/u][/color]
              doPlayerSendTextMessage(cid,22,"Você encontrou duas runas.")
              setPlayerStorageValue(cid,5077,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9021 then
          queststatus = getPlayerStorageValue(cid,5078)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou um Silver Goblet.")
              trof = [u][color=DarkOrchid]doPlayerAddItem(cid,7370,1)[/color][/u]
           nome = getPlayerName(cid)
           [color=Red][u]doSetItemSpecialDescription(trof, "Dado àqueles que vencem o nível Prata da arena de Rodório.")[/u][/color]
              setPlayerStorageValue(cid,5078,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end

   elseif item.uid == 9027 then
          queststatus = getPlayerStorageValue(cid,5079)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou uma Justice Seeker.")
              doPlayerAddItem(cid,7390,1)
              setPlayerStorageValue(cid,5079,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9028 then
          queststatus = getPlayerStorageValue(cid,5079)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou um Royal Axe.")
              doPlayerAddItem(cid,7434,1)
              setPlayerStorageValue(cid,5079,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9029 then
          queststatus = getPlayerStorageValue(cid,5079)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou uma Blessed Sceptre.")
              [u][color=DarkOrchid]doPlayerAddItem(cid,7429,1)[/color][/u]
              setPlayerStorageValue(cid,5079,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9030 then
       queststatus = getPlayerStorageValue(cid, 5079)
       if queststatus == -1 then
           [u][color=DarkOrchid]doPlayerAddItem(cid, 5080, 1)[/color][/u]
           [u][color=DarkOrchid]doPlayerAddItem(cid, 7374, 1)
[/color][/u][u][color=DarkOrchid]doPlayerAddItem(cid, 6574, 1)
[/color][/u][u][color=DarkOrchid]doPlayerAddItem(cid, 6569, 10)[/color][/u]
           doPlayerSendTextMessage(cid, 22, "Você encontrou uma Present Box.")
           setPlayerStorageValue(cid,5079,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end
      elseif item.uid == 9031 then
          queststatus = getPlayerStorageValue(cid,5079)
          if queststatus == -1 then
           [u][color=DarkOrchid]doPlayerAddItem(cid, 2268, 50)
[/color][/u][u][color=DarkOrchid]doPlayerAddItem(cid, 2273, 50)
[/color][/u][u][color=DarkOrchid]doPlayerAddItem(cid, 6529, 100)
[/color][/u][u][color=DarkOrchid]doPlayerAddItem(cid, 7440, 1)
[/color][/u][u][color=DarkOrchid]doPlayerAddItem(cid, 7443, 1)[/color][/u]
              doPlayerSendTextMessage(cid,22,"Você encontrou alguns itens.")
              setPlayerStorageValue(cid,5079,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
          end

      elseif item.uid == 9032 then
          queststatus = getPlayerStorageValue(cid,5080)
          if queststatus == -1 then
              doPlayerSendTextMessage(cid,22,"Você encontrou um Golden Goblet.")
              trof = [u][color=DarkOrchid]doPlayerAddItem(cid,7370,1)[/color][/u]
           nome = getPlayerName(cid)
[u][color=Red]doSetItemSpecialDescription(trof, "Dado àqueles que vencem o nível Ouro da arena de Rodório.")[/color][/u]
              setPlayerStorageValue(cid,5080,1)
          else
              doPlayerSendTextMessage(cid,22,"Está vazio.")
   else
       return 0
      end

      return 1
end

Explicando:

 

em Roxo: comandos que adicionam as recompensas pro jogador.

em Vermelho: comando que adiciona a descrição ao troféu.

 

Salve na pasta Data\Actions\Scripts com o nome "Arenaloot.lua"

 

4) Finalmente o ultimo script, o das portas. Go Go Go!

 

function onUse(cid, item, frompos, item2, topos)

           if item.uid == 9034 and getPlayerStorageValue(cid,5032) == 1 then

               doTransformItem(item.uid, item.itemid + 1)

               playerpos = getPlayerPosition(cid)

               doorpos = {x = frompos.x, y = frompos.y, z = frompos.z, stackpos = 253}

               if playerpos.y == doorpos.y + 1 and playerpos.x == doorpos.x then

                   doMoveCreature(cid, 0)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y then

                   doMoveCreature(cid, 1)

               elseif playerpos.y == doorpos.y - 1 and playerpos.x == doorpos.x then

                   doMoveCreature(cid, 2)

               elseif playerpos.y == doorpos.y and playerpos.x == doorpos.x + 1 then

                   doMoveCreature(cid, 3)

               elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y - 1 then

                   doMoveCreature(cid, 4)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y - 1 then

                   doMoveCreature(cid, 5)

               elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y + 1 then

                   doMoveCreature(cid, 6)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y + 1 then

                   doMoveCreature(cid, 7)

               end

           elseif item.uid == 9033 and getPlayerStorageValue(cid,5033) == 1 then

               doTransformItem(item.uid, item.itemid + 1)

               playerpos = getPlayerPosition(cid)

               doorpos = {x = frompos.x, y = frompos.y, z = frompos.z, stackpos = 253}

               if playerpos.y == doorpos.y + 1 and playerpos.x == doorpos.x then

                   doMoveCreature(cid, 0)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y then

                   doMoveCreature(cid, 1)

               elseif playerpos.y == doorpos.y - 1 and playerpos.x == doorpos.x then

                   doMoveCreature(cid, 2)

               elseif playerpos.y == doorpos.y and playerpos.x == doorpos.x + 1 then

                   doMoveCreature(cid, 3)

               elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y - 1 then

                   doMoveCreature(cid, 4)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y - 1 then

                   doMoveCreature(cid, 5)

               elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y + 1 then

                   doMoveCreature(cid, 6)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y + 1 then

                   doMoveCreature(cid, 7)

               end

           elseif item.uid == 9035 and getPlayerStorageValue(cid,5034) == 1 then

               doTransformItem(item.uid, item.itemid + 1)

               playerpos = getPlayerPosition(cid)

               doorpos = {x = frompos.x, y = frompos.y, z = frompos.z, stackpos = 253}

               if playerpos.y == doorpos.y + 1 and playerpos.x == doorpos.x then

                   doMoveCreature(cid, 0)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y then

                   doMoveCreature(cid, 1)

               elseif playerpos.y == doorpos.y - 1 and playerpos.x == doorpos.x then

                   doMoveCreature(cid, 2)

               elseif playerpos.y == doorpos.y and playerpos.x == doorpos.x + 1 then

                   doMoveCreature(cid, 3)

               elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y - 1 then

                   doMoveCreature(cid, 4)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y - 1 then

                   doMoveCreature(cid, 5)

               elseif playerpos.x == doorpos.x + 1 and playerpos.y == doorpos.y + 1 then

                   doMoveCreature(cid, 6)

               elseif playerpos.x == doorpos.x - 1 and playerpos.y == doorpos.y + 1 then

                   doMoveCreature(cid, 7)

               end


           else
               doPlayerSendTextMessage(cid, 20,'Apenas os seletos podem passar!')

           end


   return 1

end

Nesse script não é nessessário mudar nada. Apenas salve-o na pasta Data\Actions\Scripts com o nome "Arenadoor.lua"

3. Conectando as funções.

 

Finalmente a ultima parte ativa do tutorial. Depois é só festa! \o/

 

1) Adicione em data\movements\movements.xml o seguinte código:

 

<movevent event="AddItem" tileitem="1" actionid="6001" script="arena.lua" />
<movevent event="StepIn" actionid="2004" script="arena.lua" />

Agora em data\npc, crie um npc com o nome escolhido por você. Exemplo:

O nome escolhido por mim foi "Aldebaran". Logo, criarei um arquivo *.xml com o seguinte nome "Aldebara.xml". Ele ficará assim:

 

<?xml version="1.0"?>
<npc name="Aldebaran" script="data/npc/scripts/Arenanpc.lua" autowalk="25" access="3" lookdir="3">
   <health now="1000" max="1000"/>
   <look type="134" head="114" body="95" legs="38" feet="114" addons="3"/>

</npc>

Agora adicione em data\actions\actions.xml as linhas:


<action uniqueid="9004" script="Rodorio Arena quest.lua" />
<action uniqueid="9005" script="Rodorio Arena quest.lua" />
<action uniqueid="9006" script="Arenaloot.lua" />
<action uniqueid="9007" script="
[color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9008" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9009" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9021" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9022" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9023" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9024" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9025" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9026" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]
<action uniqueid="9026" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color]
[color=YellowGreen][color=Black][color=YellowGreen][color=Black]<action uniqueid="9010" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9027" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9028" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
<action uniqueid="9029" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]
<action uniqueid="9030" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]
<action uniqueid="9031" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]
<action uniqueid="9032" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenaloot[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]
<action uniqueid="9033" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenadoor[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]
<action uniqueid="9034" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenadoor[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]
<action uniqueid="9035" script="[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black]Arenadoor[/color][/color][/color][/color][color=YellowGreen][color=Black][color=YellowGreen][color=Black].lua" />
[/color][/color][/color][/color]

2) Para terminar, siga os Screeshots e determine os ActionId's do modo a seguir:

 

52550802ag9.png

 

37751383fb8.png

 

OBS: Nessa segunda imagem, os números são todos Unique ID's.

 

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

É isso. Para dúvidas, erros de código, sugestões ou comentário poste aqui, ou mande uma PM para mim.

 

PS: Peço a colaboração para que meu ovo choque. =D Go Go Go Greenzito!

 

Edit: Ae gente. To usando assim na minha arena. Arrumei o max q eu pude, mas se tive alg bug eh soh avisa ae.

Compartilhar este post


Link para o post
Dark    3
Dark

Muito bom, bem formatado e explicado gostei :D, estava sentindo falta de um topico bem formatado assim. Párabens

 

Aprovado

 

Movido

(Scripting Tutoriais)

Compartilhar este post


Link para o post
Lambix    0
Lambix

Muito bom, gostei bastante.

Só acho que o mapa deixou a desejar. ):

Mesmo assim, parabéns.

Compartilhar este post


Link para o post
Jack Sparros    0
Jack Sparros

Muito bom mesmo... aqui funfo bunitinho... muito rox...

Valeu pela contribuição ;D

 

Aprovado!

Compartilhar este post


Link para o post
Palmares_    0
Palmares_
Jack Sparros[/size];233443]Muito bom mesmo... aqui funfo bunitinho... muito rox...

Valeu pela contribuição ;D

 

Aprovado!

 

 

@Jack Sparros: É feio mentir.

 

@topic: Eu passei o olho ai, ta cheio de bugs, e alem disso o script ta dum jeito super NOOB, nem a função onDie foi usada, lol, do mesmo jeito parabens para você, se você é novato.

Compartilhar este post


Link para o post
Caedo    0
Caedo

Meus parabéns. Tutorial exelente, tudo explicado. Muito bem exemplificado! Continue assim...

 

Obrigado por postar esse script tão completo :P

Compartilhar este post


Link para o post
Jovial    2
Jovial

Não gostei.. e tem muitos erros e alguns ainda tão coloridos de azul no script...

Compartilhar este post


Link para o post
the Gray Fox    0
the Gray Fox

@Palmares

Conforme eu disse, se houvesse algum bug gostaria de ser notificado de sua existência e de sua localização. A função onDie não foi ultilizada, pois foi substituida pela onAddItem, ou seja, quando a criatura morrer, seu corpo "será adicionado" e se for do ID 7349(que esqueci de informar) o evento ocorrerá.

 

@Lambix & Jack Sparros

Thanks. ^^

Compartilhar este post


Link para o post
Palmares_    0
Palmares_
@Palmares

Conforme eu disse, se houvesse algum bug gostaria de ser notificado de sua existência e de sua localização. A função onDie não foi ultilizada, pois foi substituida pela onAddItem, ou seja, quando a criatura morrer, seu corpo "será adicionado" e se for do ID 7349(que esqueci de informar) o evento ocorrerá.

 

@Lambix & Jack Sparros

Thanks. ^^

 

@the Gray Fox Porisso mesmo que eu falei que esta gambiarra lol, ter que fazer action ID em todos os piso lol, kkkk, bugs... hum não to afim de mostrar, se foi vocÊ que fez o script você tem capácidade de corrigilos, alguns estão até coloridos como o jovial falou. :)

Compartilhar este post


Link para o post
the Gray Fox    0
the Gray Fox

 

@the Gray Fox

Porisso mesmo que eu falei que esta gambiarra lol, ter que fazer action ID em todos os piso lol, kkkk, bugs... hum não to afim de mostrar, se foi vocÊ que fez o script você tem capácidade de corrigilos, alguns estão até coloridos como o jovial falou. :)

 

Sim, isso é trabalhoso. Mas também ao mesmo tempo é de fácil compreenção. Quanto aos bugs, capacidade concordo que tenho o suficiente para corrigi-los, mas talvez falte a perícia suficiente para encontrá-los, já que como pode ver ali(vide perfil), sou um mapper.

Compartilhar este post


Link para o post
Sir fanton    0
Sir fanton

bem legal cara parabens vc adivinho oq eu estava precisando parabens!!

Compartilhar este post


Link para o post
MuriloAgah    0
MuriloAgah

Ótimo tutorial, fácil de fazer(fácil pra mim que to com o tutorial, díficil foi você que fez o tuto e arena)

Compartilhar este post


Link para o post
naruto ownz    0
naruto ownz

Cara aqui nao esta funfanu perfeitamente...

Tem Varios Bugs

Mas Pra Um Mapper Ta Bom

Mas Eu Naum Aprovo

Compartilhar este post


Link para o post
the Gray Fox    0
the Gray Fox

@Topic

Por favor ae gente... kem axa bug fla ql foi pra eu poder arrumar... =O

Compartilhar este post


Link para o post
Sir Terox    0
Sir Terox

Realmente otimo tutorial..

 

da 1 tempo pra fazer mais com essas explicaçoes realmente fica tdo mais facil.. bem explicado perfeito otimo tutor!!

 

Continue assim!

Compartilhar este post


Link para o post
GOD Andrezin    0
GOD Andrezin

Hmm. muito bom msm vlw ai vo por no meu ot aqui :D

Compartilhar este post


Link para o post
plomentes    0
plomentes

cara curti muito ja to testanto mais aqui ó...

<action uniqueid="9004" script="Rodorio Arena quest.lua" />

<action uniqueid="9005" script="Rodorio Arena quest.lua" />

<action uniqueid="9006" script="Arenaloot.lua" />

<action uniqueid="9007" script="

,

nao falta alguma coisa ae nofinal nao??

 

- - - - E D I T - - - - -

 

Não tinha visto a continuação ainda.

Compartilhar este post


Link para o post
Pekeboi    0
Pekeboi

boa lek =]

vai ajudar mta gente

Compartilhar este post


Link para o post
radori    0
radori

af gente testem primero vcs so sabem fla eu fis tudo direitinho deu uns mill erros fikei umas 2 horas pqp

Compartilhar este post


Link para o post
Ragster    0
Ragster

Gostei, bem organizado, tudo certo, testei aqui e funcionou continue assim!

~Abraços

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×