Ir para conteúdo

Base Bolz 2.5 Com Source


Posts Recomendados

estou tentando arrumar o duel system do server mas estou tendo um probleminha, quando o server esta non-pvp e eu dou duel, msm depois do duel ativo n da pra atacar o outro poke mas quando o server esta pvp da para atacar o poke do outro player mesmo fora do duel.

Link para o comentário
Compartilhar em outros sites

19 horas atrás, Justiceiro751 disse:

Alguém conseguiu arrumar o Fly ?

fly só ir no data/movements/movements.xml

 

e adicionar os ids 11675,11676 e 11677 nessa linha:

    <movevent type="StepIn" itemid="460;1022;1023" event="script" value="fly.lua"/>

 

ficando assim:

    <movevent type="StepIn" itemid="460;1022;1023;11675-11677" event="script" value="fly.lua"/>

Link para o comentário
Compartilhar em outros sites

eu consegui adaptar o sistema de duel, 1x1 pelo menos, mas tive q mecher em muita coisa para deixar 10/10, vou tentar fazer um tutorial se eu conseguir compilar essa source, compilei com um dev c++ de todos jeitos mas n funcionou o .exe, vou tentar compilar com msvc2010 e depois informo aqui.

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Scizorgame disse:

fly só ir no data/movements/movements.xml

 

e adicionar os ids 11675,11676 e 11677 nessa linha:

    <movevent type="StepIn" itemid="460;1022;1023" event="script" value="fly.lua"/>

 

ficando assim:

    <movevent type="StepIn" itemid="460;1022;1023;11675-11677" event="script" value="fly.lua"/>

Obrigado Scizorgame, você me ajudou muito cara.

Obrigadão mesmo cara.

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Scizorgame disse:

eu consegui adaptar o sistema de duel, 1x1 pelo menos, mas tive q mecher em muita coisa para deixar 10/10, vou tentar fazer um tutorial se eu conseguir compilar essa source, compilei com um dev c++ de todos jeitos mas n funcionou o .exe, vou tentar compilar com msvc2010 e depois informo aqui.

Cara se você fizer esse tutorial contendo o sistema, irá ajudar varias pessoas aqui do fórum, seremos eternamente gratos pelo seu ato de bondade e colaboração.

Estou fazendo um projeto serio de Poketibia, irei bancar VPS, Domínio e hospedagem, caso se interessa, entre em contato comigo.

Link para o comentário
Compartilhar em outros sites

fiz um tutorial enquanto instalava o msvc2010 estou tendo uns problemas com o msvc mas vou postar logo o duelsystem para vocês irem testando, não sei se esta 100%

 

TUTORIAL DUEL SYSTEM BASE BOLZ 2.5

1)vai no config.lua e troque o worldType para pvp e o protectionLevel para 1000 ficando assim: 
    worldType = "pvp"
    protectionLevel = 1000

OBS: Isso vai liberar para que os players possam atacar pelo menos o summon de um dos outros.

 

2)vai em data/creaturescripts no creaturescripts.xml e adicione:
<!-- TV SYSTEM e DUEL SYSTEM -->
    <event type="joinchannel" name="WatchTv" event="script" value="tvsys.lua"/>
    <event type="leavechannel" name="StopWatchingTv" event="script" value="tvsys.lua"/>

    <event type="walk" name="WalkTv" event="script" value="tvsys.lua"/>

    <event type="textedit" name="RecordTv" event="script" value="tvsys.lua"/>
OBS: Apesar de estar como tvsystem tambem é o script responsavel para funcionar os channels do duel(1x1, numero de pokes, etc).

 

3)agora precisamos fazer funcionar para atacar só quando estiver em duel, para isso conto com a colaboração de vocês para me ajudar a relembrar
tudo que eu fiz vou postar o que eu lembro vocês testam e qualquer erro postem de preferencia com o conteudo do script que a distro acusar,
vamos trabalhar encima do storage 6598754, o que acredito eu antes liberava para atacar em duel e agora nos vamos fazer ele bloquear para não atacar
fora do duel va em data/creaturescripts/scripts no login.lua e procure pelo storage 6598754 você vai encontrar algo como:

    if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then
       setPlayerStorageValue(cid, 6598754, -1)
       setPlayerStorageValue(cid, 6598755, -1)
       doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v1.9 \/
       doTeleportThing(cid, posBackPVP, false)
       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
    end

na segunda linha troque o -1 por "cant" e deixe só essa e a 3ª linha, desabilite ou delete as outras linhas ficando:
    --if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then
       setPlayerStorageValue(cid, 6598754, "cant")
       setPlayerStorageValue(cid, 6598755, -1)
       --doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v1.9 \/
       --doTeleportThing(cid, posBackPVP, false)
       --doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
   -- end

ou só:

     setPlayerStorageValue(cid, 6598754, "cant")
     setPlayerStorageValue(cid, 6598755, -1)


4)vai em data/actions/scripts no revive.lua e procure por "if getPlayerStorageValue(cid,6598754)" bem no inicio, e delete e desabilite dali até o proximo end.
OBS:isso era uma tentativa de proteção para não usar revive em duel mas logo embaixo tem outra proteção que faz o mesmo sem dar possiveis bugs e erros
(do storage 52481).

 

5)vai em data/lib no some functions.lua procure por "function canAttackOther" e substitua toda função por:
function canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/player

if not isCreature(cid) or not isCreature(pid) then return "Cant" end

local master1 = isSummon(cid) and getCreatureMaster(cid) or cid
local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
   
   ----             
   if getPlayerStorageValue(master1, 6598754) ~= "cant" and getPlayerStorageValue(master2, 6598754) ~= "cant" then
      if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then
         if isDuelingAgainst(master1, master2) then   --alterado v1.8
            if isSummon(cid) and isPlayer(pid) then
               return "Cant"
            else
               return "Can"
            end
         end
      end
   end
   ----              pvp system
   if getPlayerStorageValue(cid, 6598754) == "cant" then
      return "Cant"
     else
      return "Can"
   end
    -- if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then
     -- return "Can" 
    -- end
    -- if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then  ---estar em times diferentes
    --  return "Can"
    -- end
   ----
   if ehMonstro(cid) or ehMonstro(pid) then
      return "Can"
   end
   
if getTileInfo(getThingPos(cid)).pvp then
return "Can"
end

return "Cant"
end

 

6)agora em data/lib no Duel System.lua procure por "function doEndDuel" e substitua toda função por:
function doEndDuel(cid, desisto)
if isCreature(cid) then
if getPlayerStorageValue(cid, 52482) ~= -1 then
   t1 = string.explode(getPlayerStorageValue(cid, 52482), ",")
   t2 = string.explode(getPlayerStorageValue(cid, 52483), ",")
end

local invit = getPlayerByName(getPlayerStorageValue(cid, 52485))
if isCreature(invit) then
   table1 = string.explode(getPlayerStorageValue(invit, 52482), ",") 
   table2 = string.explode(getPlayerStorageValue(invit, 52483), ",")
end

if getPlayerStorageValue(cid, 52484) ~= 10 then
   if getPlayerStorageValue(cid, 52482) ~= -1 then
      for a = 1, 3 do
          local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])
          if isCreature(pid) then doCreatureSetSkullType(pid, 0) doRemoveCondition(pid, CONDITION_INFIGHT) end
          if isCreature(sid) then doCreatureSetSkullType(sid, 0) doRemoveCondition(sid, CONDITION_INFIGHT) end 
          for i = 1, #storagesDuel do
              if isCreature(pid) then setPlayerStorageValue(pid, storagesDuel, -1) setPlayerStorageValue(pid, 6598754, "cant") end
              if isCreature(sid) then setPlayerStorageValue(sid, storagesDuel, -1) setPlayerStorageValue(sid, 6598754, "cant") end
          end
      end
   else
       for i = 1, #storagesDuel do
           setPlayerStorageValue(cid, storagesDuel, -1)
           setPlayerStorageValue(cid, 6598754, "cant")
       end
       doCreatureSetSkullType(cid, 0) 
       doRemoveCondition(cid, CONDITION_INFIGHT)
       ---------------------------------   
       if table2 then
          local numero = 0
          for i = 1, #table2 do
              local ppid = getPlayerByName(table2)              
              if not isCreature(ppid) or getPlayerStorageValue(ppid, 52480) ~= -1 then
                 numero = numero+1
              end
          end
          if numero == 0 then doEndDuel(invit) sendMsgToPlayer(invit, 20, "The opponents are give up! Duel is canceled!") end
       end
       --------------------------------
   end
   if desisto then doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE) end
   return true
end 

   for a = 1, #t1 do
       local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])
       removeFromTableDuel(pid, getCreatureName(cid))
       removeFromTableDuel(sid, getCreatureName(cid))
   end 
   
   local t3 = string.explode(getPlayerStorageValue(cid, 52482), ",")
   local t4 = string.explode(getPlayerStorageValue(cid, 52483), ",")
   if (#t3 == 0 and #t4 >= 1) or (#t4 == 0 and #t3 >= 1) then  
      
      for j = 1, (#t3 > 0 and #t3 or #t4) do
          local winner = #t3 > 0 and getPlayerByName(t3[j]) or getPlayerByName(t4[j])
          if isCreature(winner) then
             addEvent(doSendAnimatedText, 500, getThingPosWithDebug(winner), "WIN", COLOR_ELECTRIC) 
             for i = 1, #storagesDuel do
                 setPlayerStorageValue(winner, storagesDuel, -1)
                 setPlayerStorageValue(winner, 6598754, "cant")
             end
             doCreatureSetSkullType(winner, 0)
             doRemoveCondition(winner, CONDITION_INFIGHT)
          end
      end
      addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN)
      for i = 1, #storagesDuel do
          setPlayerStorageValue(cid, storagesDuel, -1)
          setPlayerStorageValue(cid, 6598754, "cant")
      end
      doCreatureSetSkullType(cid, 0)
      doRemoveCondition(cid, CONDITION_INFIGHT)
      
   else 
      for i = 1, #storagesDuel do
          setPlayerStorageValue(cid, storagesDuel, -1)
          setPlayerStorageValue(cid, 6598754, "cant")
      end
      doCreatureSetSkullType(cid, 0)
      doRemoveCondition(cid, CONDITION_INFIGHT)
      if desisto then
         doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE)
      else
         addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN)
      end
   end
end
end

 

7)por ultimo va em data/lib no level system.lua procure pelo storage 6598754 e delete ou desabilite do if ao end assim:
  --  if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then
   --     setPlayerStorageValue(pk, 6598754, 1)                               
   -- elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then
   --     setPlayerStorageValue(pk, 6598755, 1)
   -- end

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

5 minutos atrás, Scizorgame disse:

fiz um tutorial enquanto instalava o msvc2010 estou tendo uns problemas com o msvc mas vou postar logo o duelsystem para vocês irem testando, não sei se esta 100%

 

TUTORIAL DUEL SYSTEM BASE BOLZ 2.5

1)vai no config.lua e troque o worldType para pvp e o protectionLevel para 1000 ficando assim: 

    worldType = "pvp"

    protectionLevel = 1000

OBS: Isso vai liberar para que os players possam atacar pelo menos o summon de um dos outros.

 

2)vai em data/creaturescripts no creaturescripts.xml e adicione:

<!-- TV SYSTEM e DUEL SYSTEM -->

    <event type="joinchannel" name="WatchTv" event="script" value="tvsys.lua"/>

    <event type="leavechannel" name="StopWatchingTv" event="script" value="tvsys.lua"/>

    <event type="walk" name="WalkTv" event="script" value="tvsys.lua"/>

    <event type="textedit" name="RecordTv" event="script" value="tvsys.lua"/>

OBS: Apesar de estar como tvsystem tambem é o script responsavel para funcionar os channels do duel(1x1, numero de pokes, etc).

 

3)agora precisamos fazer funcionar para atacar só quando estiver em duel, para isso conto com a colaboração de vocês para me ajudar a relembrar

tudo que eu fiz vou postar o que eu lembro vocês testam e qualquer erro postem de preferencia com o conteudo do script que a distro acusar,

vamos trabalhar encima do storage 6598754, o que acredito eu antes liberava para atacar em duel e agora nos vamos fazer ele bloquear para não atacar

fora do duel va em data/creaturescripts/scripts no login.lua e procure pelo storage 6598754 você vai encontrar algo como:

    if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then

       setPlayerStorageValue(cid, 6598754, -1)

       setPlayerStorageValue(cid, 6598755, -1)

       doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v1.9 \/

       doTeleportThing(cid, posBackPVP, false)

       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

    end

na segunda linha troque o -1 por "cant" e deixe só essa e a 3ª linha, desabilite ou delete as outras linhas ficando:

    --if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then

       setPlayerStorageValue(cid, 6598754, "cant")

       setPlayerStorageValue(cid, 6598755, -1)

       --doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v1.9 \/

       --doTeleportThing(cid, posBackPVP, false)

       --doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

   -- end

ou só:

     setPlayerStorageValue(cid, 6598754, "cant")

     setPlayerStorageValue(cid, 6598755, -1)

 

4)vai em data/actions/scripts no revive.lua e procure por "if getPlayerStorageValue(cid,6598754)" bem no inicio, e delete e desabilite dali até o proximo end.

OBS:isso era uma tentativa de proteção para não usar revive em duel mas logo embaixo tem outra proteção que faz o mesmo sem dar possiveis bugs e erros

(do storage 52481).

 

5)vai em data/lib no some functions.lua procure por "function canAttackOther" e substitua toda função por:

function canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/player

if not isCreature(cid) or not isCreature(pid) then return "Cant" end

local master1 = isSummon(cid) and getCreatureMaster(cid) or cid

local master2 = isSummon(pid) and getCreatureMaster(pid) or pid

   

   ----             

   if getPlayerStorageValue(master1, 6598754) ~= "cant" and getPlayerStorageValue(master2, 6598754) ~= "cant" then

      if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then

         if isDuelingAgainst(master1, master2) then   --alterado v1.8

            if isSummon(cid) and isPlayer(pid) then

               return "Cant"

            else

               return "Can"

            end

         end

      end

   end

   ----              pvp system

   if getPlayerStorageValue(cid, 6598754) == "cant" then

      return "Cant"

     else

      return "Can"

   end

    -- if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then

     -- return "Can" 

    -- end

    -- if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then  ---estar em times diferentes

    --  return "Can"

    -- end

   ----

   if ehMonstro(cid) or ehMonstro(pid) then

      return "Can"

   end

   

if getTileInfo(getThingPos(cid)).pvp then

return "Can"

end

return "Cant"

end

 

6)agora em data/lib no Duel System.lua procure por "function doEndDuel" e substitua toda função por:

function doEndDuel(cid, desisto)

if isCreature(cid) then

if getPlayerStorageValue(cid, 52482) ~= -1 then

   t1 = string.explode(getPlayerStorageValue(cid, 52482), ",")

   t2 = string.explode(getPlayerStorageValue(cid, 52483), ",")

end

local invit = getPlayerByName(getPlayerStorageValue(cid, 52485))

if isCreature(invit) then

   table1 = string.explode(getPlayerStorageValue(invit, 52482), ",") 

   table2 = string.explode(getPlayerStorageValue(invit, 52483), ",")

end

if getPlayerStorageValue(cid, 52484) ~= 10 then

   if getPlayerStorageValue(cid, 52482) ~= -1 then

      for a = 1, 3 do

          local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])

          if isCreature(pid) then doCreatureSetSkullType(pid, 0) doRemoveCondition(pid, CONDITION_INFIGHT) end

          if isCreature(sid) then doCreatureSetSkullType(sid, 0) doRemoveCondition(sid, CONDITION_INFIGHT) end 

          for i = 1, #storagesDuel do

              if isCreature(pid) then setPlayerStorageValue(pid, storagesDuel, -1) setPlayerStorageValue(pid, 6598754, "cant") end

              if isCreature(sid) then setPlayerStorageValue(sid, storagesDuel, -1) setPlayerStorageValue(sid, 6598754, "cant") end

          end

      end

   else

       for i = 1, #storagesDuel do

           setPlayerStorageValue(cid, storagesDuel, -1)

           setPlayerStorageValue(cid, 6598754, "cant")

       end

       doCreatureSetSkullType(cid, 0) 

       doRemoveCondition(cid, CONDITION_INFIGHT)

       ---------------------------------   

       if table2 then

          local numero = 0

          for i = 1, #table2 do

              local ppid = getPlayerByName(table2)              

              if not isCreature(ppid) or getPlayerStorageValue(ppid, 52480) ~= -1 then

                 numero = numero+1

              end

          end

          if numero == 0 then doEndDuel(invit) sendMsgToPlayer(invit, 20, "The opponents are give up! Duel is canceled!") end

       end

       --------------------------------

   end

   if desisto then doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE) end

   return true

end 

   for a = 1, #t1 do

       local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])

       removeFromTableDuel(pid, getCreatureName(cid))

       removeFromTableDuel(sid, getCreatureName(cid))

   end 

   

   local t3 = string.explode(getPlayerStorageValue(cid, 52482), ",")

   local t4 = string.explode(getPlayerStorageValue(cid, 52483), ",")

   if (#t3 == 0 and #t4 >= 1) or (#t4 == 0 and #t3 >= 1) then  

      

      for j = 1, (#t3 > 0 and #t3 or #t4) do

          local winner = #t3 > 0 and getPlayerByName(t3[j]) or getPlayerByName(t4[j])

          if isCreature(winner) then

             addEvent(doSendAnimatedText, 500, getThingPosWithDebug(winner), "WIN", COLOR_ELECTRIC) 

             for i = 1, #storagesDuel do

                 setPlayerStorageValue(winner, storagesDuel, -1)

                 setPlayerStorageValue(winner, 6598754, "cant")

             end

             doCreatureSetSkullType(winner, 0)

             doRemoveCondition(winner, CONDITION_INFIGHT)

          end

      end

      addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN)

      for i = 1, #storagesDuel do

          setPlayerStorageValue(cid, storagesDuel, -1)

          setPlayerStorageValue(cid, 6598754, "cant")

      end

      doCreatureSetSkullType(cid, 0)

      doRemoveCondition(cid, CONDITION_INFIGHT)

      

   else 

      for i = 1, #storagesDuel do

          setPlayerStorageValue(cid, storagesDuel, -1)

          setPlayerStorageValue(cid, 6598754, "cant")

      end

      doCreatureSetSkullType(cid, 0)

      doRemoveCondition(cid, CONDITION_INFIGHT)

      if desisto then

         doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE)

      else

         addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN)

      end

   end

end

end

 

7)por ultimo va em data/lib no level system.lua procure pelo storage 6598754 e delete ou desabilite do if ao end assim:

  --  if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then

   --     setPlayerStorageValue(pk, 6598754, 1)                               

   -- elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then

   --     setPlayerStorageValue(pk, 6598755, 1)

   -- end

 

Boa, meus parabéns pela source do script Duel System, agradecemos pela colaboração, irei implementar em meu servidor agora.

Link para o comentário
Compartilhar em outros sites

coloquei a sprite pra otclient e tudo bem, só 1 probleminha ta mostrando o cliente ta mostrando o player com 6 pokes enquanto eles nao tem nemhum oO

criei um char fui la na rattata e logo q meu poke fica trapado o servidor crasha, acho que é pelo sistema do "grrrr"

edit 2: nao, desci sem poke e levei dano ai crashou

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

Em 24/05/2016 at 22:54, Scizorgame disse:

fiz um tutorial enquanto instalava o msvc2010 estou tendo uns problemas com o msvc mas vou postar logo o duelsystem para vocês irem testando, não sei se esta 100%

 

TUTORIAL DUEL SYSTEM BASE BOLZ 2.5

1)vai no config.lua e troque o worldType para pvp e o protectionLevel para 1000 ficando assim: 

    worldType = "pvp"

    protectionLevel = 1000

OBS: Isso vai liberar para que os players possam atacar pelo menos o summon de um dos outros.

 

2)vai em data/creaturescripts no creaturescripts.xml e adicione:

<!-- TV SYSTEM e DUEL SYSTEM -->

    <event type="joinchannel" name="WatchTv" event="script" value="tvsys.lua"/>

    <event type="leavechannel" name="StopWatchingTv" event="script" value="tvsys.lua"/>

    <event type="walk" name="WalkTv" event="script" value="tvsys.lua"/>

    <event type="textedit" name="RecordTv" event="script" value="tvsys.lua"/>

OBS: Apesar de estar como tvsystem tambem é o script responsavel para funcionar os channels do duel(1x1, numero de pokes, etc).

 

3)agora precisamos fazer funcionar para atacar só quando estiver em duel, para isso conto com a colaboração de vocês para me ajudar a relembrar

tudo que eu fiz vou postar o que eu lembro vocês testam e qualquer erro postem de preferencia com o conteudo do script que a distro acusar,

vamos trabalhar encima do storage 6598754, o que acredito eu antes liberava para atacar em duel e agora nos vamos fazer ele bloquear para não atacar

fora do duel va em data/creaturescripts/scripts no login.lua e procure pelo storage 6598754 você vai encontrar algo como:

    if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then

       setPlayerStorageValue(cid, 6598754, -1)

       setPlayerStorageValue(cid, 6598755, -1)

       doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v1.9 \/

       doTeleportThing(cid, posBackPVP, false)

       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

    end

na segunda linha troque o -1 por "cant" e deixe só essa e a 3ª linha, desabilite ou delete as outras linhas ficando:

    --if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then

       setPlayerStorageValue(cid, 6598754, "cant")

       setPlayerStorageValue(cid, 6598755, -1)

       --doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v1.9 \/

       --doTeleportThing(cid, posBackPVP, false)

       --doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

   -- end

ou só:

     setPlayerStorageValue(cid, 6598754, "cant")

     setPlayerStorageValue(cid, 6598755, -1)

 

4)vai em data/actions/scripts no revive.lua e procure por "if getPlayerStorageValue(cid,6598754)" bem no inicio, e delete e desabilite dali até o proximo end.

OBS:isso era uma tentativa de proteção para não usar revive em duel mas logo embaixo tem outra proteção que faz o mesmo sem dar possiveis bugs e erros

(do storage 52481).

 

5)vai em data/lib no some functions.lua procure por "function canAttackOther" e substitua toda função por:

function canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/player

if not isCreature(cid) or not isCreature(pid) then return "Cant" end

local master1 = isSummon(cid) and getCreatureMaster(cid) or cid

local master2 = isSummon(pid) and getCreatureMaster(pid) or pid

   

   ----             

   if getPlayerStorageValue(master1, 6598754) ~= "cant" and getPlayerStorageValue(master2, 6598754) ~= "cant" then

      if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then

         if isDuelingAgainst(master1, master2) then   --alterado v1.8

            if isSummon(cid) and isPlayer(pid) then

               return "Cant"

            else

               return "Can"

            end

         end

      end

   end

   ----              pvp system

   if getPlayerStorageValue(cid, 6598754) == "cant" then

      return "Cant"

     else

      return "Can"

   end

    -- if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then

     -- return "Can" 

    -- end

    -- if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then  ---estar em times diferentes

    --  return "Can"

    -- end

   ----

   if ehMonstro(cid) or ehMonstro(pid) then

      return "Can"

   end

   

if getTileInfo(getThingPos(cid)).pvp then

return "Can"

end

return "Cant"

end

 

6)agora em data/lib no Duel System.lua procure por "function doEndDuel" e substitua toda função por:

function doEndDuel(cid, desisto)

if isCreature(cid) then

if getPlayerStorageValue(cid, 52482) ~= -1 then

   t1 = string.explode(getPlayerStorageValue(cid, 52482), ",")

   t2 = string.explode(getPlayerStorageValue(cid, 52483), ",")

end

local invit = getPlayerByName(getPlayerStorageValue(cid, 52485))

if isCreature(invit) then

   table1 = string.explode(getPlayerStorageValue(invit, 52482), ",") 

   table2 = string.explode(getPlayerStorageValue(invit, 52483), ",")

end

if getPlayerStorageValue(cid, 52484) ~= 10 then

   if getPlayerStorageValue(cid, 52482) ~= -1 then

      for a = 1, 3 do

          local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])

          if isCreature(pid) then doCreatureSetSkullType(pid, 0) doRemoveCondition(pid, CONDITION_INFIGHT) end

          if isCreature(sid) then doCreatureSetSkullType(sid, 0) doRemoveCondition(sid, CONDITION_INFIGHT) end 

          for i = 1, #storagesDuel do

              if isCreature(pid) then setPlayerStorageValue(pid, storagesDuel, -1) setPlayerStorageValue(pid, 6598754, "cant") end

              if isCreature(sid) then setPlayerStorageValue(sid, storagesDuel, -1) setPlayerStorageValue(sid, 6598754, "cant") end

          end

      end

   else

       for i = 1, #storagesDuel do

           setPlayerStorageValue(cid, storagesDuel, -1)

           setPlayerStorageValue(cid, 6598754, "cant")

       end

       doCreatureSetSkullType(cid, 0) 

       doRemoveCondition(cid, CONDITION_INFIGHT)

       ---------------------------------   

       if table2 then

          local numero = 0

          for i = 1, #table2 do

              local ppid = getPlayerByName(table2)              

              if not isCreature(ppid) or getPlayerStorageValue(ppid, 52480) ~= -1 then

                 numero = numero+1

              end

          end

          if numero == 0 then doEndDuel(invit) sendMsgToPlayer(invit, 20, "The opponents are give up! Duel is canceled!") end

       end

       --------------------------------

   end

   if desisto then doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE) end

   return true

end 

   for a = 1, #t1 do

       local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])

       removeFromTableDuel(pid, getCreatureName(cid))

       removeFromTableDuel(sid, getCreatureName(cid))

   end 

   

   local t3 = string.explode(getPlayerStorageValue(cid, 52482), ",")

   local t4 = string.explode(getPlayerStorageValue(cid, 52483), ",")

   if (#t3 == 0 and #t4 >= 1) or (#t4 == 0 and #t3 >= 1) then  

      

      for j = 1, (#t3 > 0 and #t3 or #t4) do

          local winner = #t3 > 0 and getPlayerByName(t3[j]) or getPlayerByName(t4[j])

          if isCreature(winner) then

             addEvent(doSendAnimatedText, 500, getThingPosWithDebug(winner), "WIN", COLOR_ELECTRIC) 

             for i = 1, #storagesDuel do

                 setPlayerStorageValue(winner, storagesDuel, -1)

                 setPlayerStorageValue(winner, 6598754, "cant")

             end

             doCreatureSetSkullType(winner, 0)

             doRemoveCondition(winner, CONDITION_INFIGHT)

          end

      end

      addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN)

      for i = 1, #storagesDuel do

          setPlayerStorageValue(cid, storagesDuel, -1)

          setPlayerStorageValue(cid, 6598754, "cant")

      end

      doCreatureSetSkullType(cid, 0)

      doRemoveCondition(cid, CONDITION_INFIGHT)

      

   else 

      for i = 1, #storagesDuel do

          setPlayerStorageValue(cid, storagesDuel, -1)

          setPlayerStorageValue(cid, 6598754, "cant")

      end

      doCreatureSetSkullType(cid, 0)

      doRemoveCondition(cid, CONDITION_INFIGHT)

      if desisto then

         doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE)

      else

         addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN)

      end

   end

end

end

 

7)por ultimo va em data/lib no level system.lua procure pelo storage 6598754 e delete ou desabilite do if ao end assim:

  --  if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then

   --     setPlayerStorageValue(pk, 6598754, 1)                               

   -- elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then

   --     setPlayerStorageValue(pk, 6598755, 1)

   -- end

 

@Scizorgame , infelizmente está ocorrendo um erro na distro quando vai tentar Duelar. Veja logo abaixo o erro e a Script que está sendo acusada.

 

Erro:

[04/06/2016 12:13:09] [Error - Action Interface]

[04/06/2016 12:13:09] data/actions/scripts/order.lua:onUse

[04/06/2016 12:13:09] Description:

[04/06/2016 12:13:09] data/actions/scripts/order.lua:81: attempt to compare string with number

[04/06/2016 12:13:09] stack traceback:

[04/06/2016 12:13:09]     data/actions/scripts/order.lua:81: in function <data/actions/scripts/order.lua:20>

 

Script:

Spoiler

local skills = specialabilities

local surfborders = {4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663}

local storages = {17000, 63215, 17001, 13008, 5700}   --alterado v1.9 \/

local unfix = {x = 1, y = 1, z = 1}

local txt = {

["rock smash"] = {"break that rock!", "smash that rock!", "destroy that rock!", "smash it!", "break it!", "destroy it!"},

["cut"] = {"cut that bush!", "cut it down!", "cut it off!", "cut off that bush!", "cut down that bush!", "cut that bush down!"},

["move"] = {"move!", "move there!", "go there!", "walk there!"},

["light"] = {"flash!", "light!", "flash this place!", "light up this place!"},

["dig"] = {"open that hole!", "dig that hole!", "open it!", "dig it!"},

["blink"] = {"teleport there!", "blink there!", "blink!", "teleport!"},

["ride"] = {"let me ride you!", "let's ride!", "let me mount you!", "let me get on you!"},

["fly"] = {"let's fly!", "let me get on you!"} ,

["untransform"] = {"go back to normal!", "transform into yourself again!", "stop transformation!"},

["headbutt"] = {"headbutt on three", "headbutt that three!", "headbutt it off"},

["levitate_fly"] = {"let's levitate!", "let me get on you!", "let's scary someone!"},  --alterado v1.8

}

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

    local checkpos = topos

    checkpos.stackpos = 0

    

    if getPlayerStorageValue(cid, 75846) >= 1 then return true end --alterado v1.9

    if getTileThingByPos(checkpos).uid <= 0 then return true end

--------END FLY/RIDE --------

if getCreatureCondition(cid, CONDITION_OUTFIT) and (item2.uid == cid or getRecorderPlayer(topos) == cid) and (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1) then

    if isInArray({460, 11675, 11676, 11677}, getTileInfo(getThingPos(cid)).itemid) then

        doPlayerSendCancel(cid, "You can\'t stop flying at this height!")

        return true

    end

    local item = getPlayerSlotItem(cid, 8):

    local pokemon = getItemAttribute(item.uid, "poke")

    local x = pokes[pokemon]

        if getTileInfo(getThingPos(cid)).itemid >= 4820 and getTileInfo(getThingPos(cid)).itemid <= 4825 then

        doPlayerSendCancel(cid, "You can\'t stop flying above the water!")

        return true

        end

    doSummonMonster(cid, pokemon)

    local pk = getCreatureSummons(cid)[1]

        if not isCreature(pk) then

            pk = doCreateMonster(pokemon, backupPos)

            if not isCreature(pk) then

                doPlayerSendCancel(cid, "You can't stop flying/riding here.")

            return true

            end

            doConvinceCreature(cid, pk)

        end

    doTeleportThing(pk, getThingPos(cid), false)

    doCreatureSetLookDir(pk, getCreatureLookDir(cid))

    adjustStatus(pk, item.uid, true, false, true)

    doPlayerSay(cid, ""..getPokeName(getCreatureSummons(cid)[1])..", let me get down!", 1)

    

    doRegainSpeed(cid)

    

    doRemoveCondition(cid, CONDITION_OUTFIT)

    setPlayerStorageValue(cid, 17000, -1)

    setPlayerStorageValue(cid, 17001, -1)

    

    if useOTClient then

       doUpdateMoves(cid)

       doPlayerSendCancel(cid, '12//,show') --alterado v1.9

    end

return true

end

-----------------------------

local player = getRecorderPlayer(topos)                        --alterado v1.8 \/

-------- DUEL SYSTEM ------------------------

if isPlayer(player) and player ~= cid and getPlayerStorageValue(player, 6598754) <= -1 and getPlayerStorageValue(player, 52480) <= -1 then  

if getPlayerStorageValue(cid, 52480) <= -1 or (getPlayerStorageValue(cid, 52481) >= 1 and getPlayerStorageValue(cid, 52482) ~= -1) then                  

---

for s = 1, #storages do

    if getPlayerStorageValue(cid, storages) >= 1 then

       return doPlayerSendTextMessage(cid, 20, "You can't do that while is Flying, Riding, Surfing, Diving or mount a bike!")

    end

end

if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then

return doPlayerSendTextMessage(cid, 20, "You can't do that while in PVP zone!")

end

if #getCreatureSummons(cid) < 1 then

return doPlayerSendTextMessage(cid, 20, "You need a pokemon to invit someone to duel!")

end

---

if getPlayerStorageValue(cid, 52480) <= -1 then

   doPlayerSetVocation(cid, 7)

   openChannelDialog(cid)   

   setPlayerStorageValue(cid, 52480, 1)

   setPlayerStorageValue(cid, 6598754, 5)           

   setPlayerStorageValue(cid, 52482, getCreatureName(cid)..",")                      

   setPlayerStorageValue(cid, 52483, getCreatureName(player)..",")

   doCreatureSetSkullType(cid, 2)

   doSendAnimatedText(getThingPosWithDebug(cid), "FIRST TEAM", 215)

   return true

elseif getPlayerStorageValue(cid, 52481) >= 1 and getPlayerStorageValue(cid, 52482) ~= -1 then

   local t1 = string.explode(getPlayerStorageValue(cid, 52482), ",")

   local t2 = string.explode(getPlayerStorageValue(cid, 52483), ",")

   

   if (#t1 >= getPlayerStorageValue(cid, 52480) and #t2 >= getPlayerStorageValue(cid, 52480)) or (isInArray(t1, getCreatureName(player)) or isInArray(t2, getCreatureName(player))) then

   return true

   end

   

   local sto2, sto3, name = getPlayerStorageValue(cid, 52482), getPlayerStorageValue(cid, 52483), getCreatureName(player)

   if getPlayerStorageValue(cid, 52480) == 2 then

      setPlayerStorageValue(cid, 52483, sto3.. name..",") --time adversario

      doSendAnimatedText(getThingPosWithDebug(player), "SECOND TEAM", 215)  

   elseif getPlayerStorageValue(cid, 52480) == 3 and #t1 < 3 then

      setPlayerStorageValue(cid, 52482, sto2.. name..",") --time aliado

      doSendAnimatedText(getThingPosWithDebug(player), "FIRST TEAM", 215)

   elseif getPlayerStorageValue(cid, 52480) == 3 and #t1 >= 3 then

      setPlayerStorageValue(cid, 52483, sto3.. name..",") --time adversario

      doSendAnimatedText(getThingPosWithDebug(player), "SECOND TEAM", 215)  

   end  

     

   setPlayerStorageValue(player, 52481, getPlayerStorageValue(cid, 52481))

   setPlayerStorageValue(player, 52485, getCreatureName(cid))

   

   local players, pokes = getPlayerStorageValue(cid, 52480), getPlayerStorageValue(cid, 52481)

   

   local str = {}

   table.insert(str, getCreatureName(cid).." is inviting you to a duel! Use order in him to accept it!\n")

   table.insert(str, "Info Battle: Duel "..players.."x"..players.." - "..pokes.." pokes.")     --alterado v1.9

   doPlayerSendTextMessage(player, 20, table.concat(str))

   return true

end

end

---   

elseif isPlayer(player) and player ~= cid and getPlayerStorageValue(player, 6598754) == 5 and getPlayerStorageValue(player, 52481) >= 1 then

local t1 = string.explode(getPlayerStorageValue(player, 52482), ",")

local t2 = string.explode(getPlayerStorageValue(player, 52483), ",")

---

if not isInArray(t1, getCreatureName(cid)) and not isInArray(t2, getCreatureName(cid)) then

return true

end

---

for s = 1, #storages do

    if getPlayerStorageValue(cid, storages) >= 1 then

       return doPlayerSendTextMessage(cid, 20, "You can't do that while is Flying, Riding, Surfing, Diving or mount a bike!")

    end

end

if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then

return doPlayerSendTextMessage(cid, 20, "You can't do that while in PVP zone!")

end

local pokes = getLivePokeballs(cid, getPlayerSlotItem(cid, 3).uid, true)

if #pokes < getPlayerStorageValue(player, 52481) then

return doPlayerSendTextMessage(cid, 20, "You need atleast ".. getPlayerStorageValue(player, 52481).." pokemons to duel with this person!")

end

if getPlayerStorageValue(cid, 52482) ~= -1 then

return doPlayerSendTextMessage(cid, 20, "You already invit someone to duel!")

end

if #getCreatureSummons(cid) < 1 then

return doPlayerSendTextMessage(cid, 20, "You need a pokemon to accept a duel!")

end

---  

   setPlayerStorageValue(cid, 52480, getPlayerStorageValue(player, 52480))

   setPlayerStorageValue(player, 52484, getPlayerStorageValue(player, 52484)-1)

   if getPlayerStorageValue(player, 52484) == 0 then   

      for a = 1, #t1 do

          local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])

          if not isCreature(pid) or getPlayerStorageValue(pid, 52480) <= -1 then

             removeFromTableDuel(player, t1[a])

          else

             doCreatureSetSkullType(pid, 1)

          end

          if not isCreature(sid) or getPlayerStorageValue(sid, 52480) <= -1 then

             removeFromTableDuel(player, t2[a])

          else

             doCreatureSetSkullType(sid, 1)

          end

      end

      beginDuel(player, 6)

   else

      doCreatureSetSkullType(cid, 2)

   end

   doSendAnimatedText(getThingPos(cid), "BATTLE", COLOR_ELECTRIC)

   return true

   

elseif isPlayer(player) and player == cid and getPlayerStorageValue(player, 52480) >= 1 then

   doEndDuel(cid, true)

   return true

end

------------------------------------------------------------------------------------

if #getCreatureSummons(cid) == 0 then return doPlayerSendCancel(cid, "You need a pokemon to use order!") end

if getCreatureNoMove(getCreatureSummons(cid)[1]) then return true end

markLP(getCreatureSummons(cid)[1], -1)

local marked = getMarkedPos(getCreatureSummons(cid)[1])    --alterado v1.8 \/

if type(marked) == "table" and marked.x == topos.x and marked.y == topos.y then

return true

end

local thisball = getPlayerSlotItem(cid, 8):

local mysum = getCreatureSummons(cid)[1]

local sid = mysum or cid

local maxMoveDist = getDistanceBetween(getThingPos(sid), topos) * 2 + 1

    markPos(mysum, topos)

    markOwnerPos(mysum, getThingPos(cid))

-------- ROCK SMASH ---------

if item2.itemid == 1285 and isInArray(skills["rock smash"], getPokemonName(mysum)) then

    doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["rock smash"][math.random(1, #txt["rock smash"])].."", 1)

    addEvent(goThere, 500, mysum, topos, "rock smash", isCreature(getCreatureTarget(cid)))

return true

end

-----------------------------

-------- HEADBUTT -----------

if item2.itemid == 12591 and getPokemonLevel(mysum) >= 15 then  --alterado v1.6

                  --id do item  arvore normal

doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["headbutt"][math.random(1, #txt["headbutt"])].."", 1)

addEvent(goThere, 500, mysum, topos, "headbutt", isCreature(getCreatureTarget(cid)))

return true

end

-----------------------------

-------- CUT ----------------

if item2.itemid == 2767 and isInArray(skills["cut"], getPokemonName(mysum)) then

    doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["cut"][math.random(1, #txt["cut"])].."", 1)

    addEvent(goThere, 500, mysum, topos, "cut", isCreature(getCreatureTarget(cid)))

return true

end

-----------------------------

-------- TRANSFORM ----------                                                                                  --alterado v1.7

if (getCreatureName(mysum) == "Ditto" or getCreatureName(mysum) == "Shiny Ditto") and isMonster(item2.uid) and pokes[getCreatureName(item2.uid)] then

    if item2.uid == mysum then                                                                 --edited

        if isTransformed(mysum) then

            deTransform(mysum, getItemAttribute(thisball.uid, "transTurn"))

            markPos(mysum, unfix)

            doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["untransform"][math.random(1, #txt["untransform"])].."", 1)

            if useKpdoDlls then

               doUpdateMoves(cid) --alterado v1.9

            end

        return true

        end

    doPlayerSendCancel(cid, "Your ditto is not transformed.")

    markPos(mysum, unfix)

    return true

    end

    if getCreatureName(item2.uid) == "Ditto" or getCreatureName(item2.uid) == "Shiny Ditto" then    --edited transform for shiny ditto

        doPlayerSendCancel(cid, "Your ditto can't transform into another ditto.")

        markPos(mysum, unfix)

    return true

    end

    if getCreatureName(item2.uid) == getPlayerStorageValue(mysum, 1010) then

        doPlayerSendCancel(cid, "Your ditto is already transformed into that pokemon.")

        markPos(mysum, unfix)

    return true

    end

    local cd = getCD(thisball.uid, "trans", 40)

    if cd > 0 then

    doPlayerSendCancel(cid, "Your pokemon is too tired to transform again. Cooldown: ("..getStringmytempo(cd)..")")

    return true

    end

    if getHappiness(mysum) <= 50 then

        doSendMagicEffect(getThingPos(mysum), happinessRate[1].effect)

        markPos(mysum, unfix)

    return true

    end

    local turn = getItemAttribute(thisball.uid, "transTurn")

        if not turn or turn > 10 then

            doItemSetAttribute(thisball.uid, "transTurn", 0)

        else

            doItemSetAttribute(thisball.uid, "transTurn",  turn + 1)

        end

    local time = 140 + 2 * getPokemonLevel(mysum)

    turn = getItemAttribute(thisball.uid, "transTurn")

    markPos(mysum, unfix)

    setPlayerStorageValue(mysum, 1010, getCreatureName(item2.uid))

    doSetCreatureOutfit(mysum, {lookType = getPokemonXMLOutfit(getCreatureName(item2.uid))}, -1)  --alterado v1.8

    addEvent(deTransform, time * 1000, mysum, turn)

    doSendMagicEffect(getThingPos(mysum), 184)

    doCreatureSay(mysum, "TRANSFORM!", TALKTYPE_MONSTER)

    local name = getCreatureName(item2.uid)

    setCD(thisball.uid, "trans", 40)

    doItemSetAttribute(thisball.uid, "transBegin", os.clock())

    doSetItemAttribute(thisball.uid, "transLeft", time)

    doSetItemAttribute(thisball.uid, "transOutfit", getPokemonXMLOutfit(getCreatureName(item2.uid)))  --alterado v1.8

    doSetItemAttribute(thisball.uid, "transName", getCreatureName(item2.uid))

    doFaceCreature(mysum, getThingPos(item2.uid))

    doPlayerSay(cid, ""..getPokeName(mysum)..", transform into "..getArticle(name).." "..name.."!", 1)

    

    if useKpdoDlls then

        doUpdateMoves(cid)  --alterado v1.6

    end

if dittoCopiesStatusToo then

   setPlayerStorageValue(mysum, 1001, dittoBonus*getOffense(item2.uid))

   setPlayerStorageValue(mysum, 1002, dittoBonus*getDefense(item2.uid))

   setPlayerStorageValue(mysum, 1003, getSpeed(item2.uid))

   setPlayerStorageValue(mysum, 1004, dittoBonus*getVitality(item2.uid))

   setPlayerStorageValue(mysum, 1005, dittoBonus*getSpecialAttack(item2.uid))

   ------------------

   local pct = getCreatureHealth(mysum) / getCreatureMaxHealth(mysum)

   local vit = (getVitality(mysum) * getMasterLevel(mysum)) / 100

   setCreatureMaxHealth(mysum, ( vit * HPperVITsummon ))   --alterado v1.6

   doCreatureAddHealth(mysum, pct * vit * HPperVITsummon)

end

return true

end

-----------------------------

-------- LIGHT --------------

if isMonster(item2.uid) and getCreatureMaster(item2.uid) == cid then

    markPos(mysum, unfix)

    if not isInArray(skills["light"], getPokemonName(item2.uid)) then

    doPlayerSendCancel(cid, "Your pokemon can't use flash.")

    return true

    end

    

    local cd = getCD(thisball.uid, "light", 30)

    if cd > 0 then

    doPlayerSendCancel(cid, "Your pokemon is too tired to use flash. Cooldown: ("..getStringmytempo(cd)..")")

    return true

    end

    doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["light"][math.random(1, #txt["light"])].."", 1)

    doCreatureSay(mysum, "FLASH!", TALKTYPE_MONSTER)

    doSendMagicEffect(getThingPos(mysum), 28)

    local size = 5

        size = size + math.floor(getSpecialAttack(mysum) / 60)

        size = size + math.ceil(getPokemonLevel(mysum) / 60)

        if size > 11 then

            size = 11

        end

    doSetCreatureLight(mysum, size, 215, 600*1000)

    local delay = math.floor(30 - getPokemonLevel(mysum) / 4)

        if delay > 0 then

        setCD(thisball.uid, "light", delay)

        end

return true

end  

-----------------------------

-------- DIG ----------------

if isInArray(skills["digholes"], item2.itemid) and isInArray(skills["dig"], getPokemonName(mysum)) then

    doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["dig"][math.random(1, #txt["dig"])].."", 1)

    addEvent(goThere, 500, mysum, topos, "dig", isCreature(getCreatureTarget(cid)))

return true

end

-----------------------------

-------- BLINK / MOVE -------

if not isCreature(item2.uid) and isInArray(skills["blink"], getPokemonName(mysum)) then

    local cd = getCD(thisball.uid, "blink", 30)

    

    if getPlayerStorageValue(mysum, 2365487) ==  1 then

    return true                  --alterado v1.4

    end

    

    if cd > 0 or not canWalkOnPos(topos, false, false, true, true, true) then

        doPlayerSendCancel(cid, "Blink cooldown: ("..getStringmytempo(cd)..")")

        doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["move"][math.random(1, #txt["move"])].."", 1)

        addEvent(goThere, 500, mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)

    return true

    end

    local CD = isShinyName(getCreatureName(mysum)) and 20 or 30   --edited blink

    markPos(mysum, topos)

    markOwnerPos(mysum, getThingPos(cid))

    setCD(thisball.uid, "blink", CD)

    doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["blink"][math.random(1, #txt["blink"])].."", 1)

    doSendDistanceShoot(getThingPos(mysum), topos, 39)

    doSendMagicEffect(getThingPos(mysum), 211)

    doTeleportThing(mysum, topos, false)

    doSendMagicEffect(topos, 134)

    doCreatureSay(mysum, "BLINK!", TALKTYPE_MONSTER)

    goThere(mysum, topos, "blink", isCreature(getCreatureTarget(cid)))  --edited blink

return true

end

-----------------------------  

----START FLY or RIDE or LEVITATE ---------

if (item2.uid == cid or getRecorderPlayer(topos) == cid) and (isInArray(skills["fly"], getPokemonName(mysum)) or isInArray(skills["ride"], getPokemonName(mysum)) or isInArray(skills["levitate_fly"], getPokemonName(mysum))) then

                                                                                                           --alterado v1.8 >>

    if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then

       return doPlayerSendCancel(cid, "You can't do it while in the PVP Zone!")   --alterado v1.7

    end

    

    if #getCreatureSummons(cid) > 1 then         --alterado v1.9

       return doPlayerSendCancel(cid, "You can't do it right now!")

    end

    

    if getPlayerStorageValue(cid, 52480) >= 1 then

       return doPlayerSendCancel(cid, "You can't do it while a duel!")  --alterado v1.6

    end   

    if getPlayerStorageValue(cid, 5700) >= 1 then   --alterado v1.9

       doPlayerSendCancel(cid, "You can't do that while is mount in a bike!")

       return true

    end                                                                 

    

    if getPlayerStorageValue(cid, 22545) >= 1 and (isInArray(skills["fly"], getPokemonName(mysum)) or isInArray(skills["levitate_fly"], getPokemonName(mysum))) then       

       return doPlayerSendCancel(cid, "You can't do that while in the Golden Arena!")                          --alterado v1.8

    end

    

    local pct = getCreatureHealth(mysum) / getCreatureMaxHealth(mysum)

    doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", 1 - pct)

                                                       

    if isInArray(skills["fly"], getPokemonName(mysum)) then

       doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["fly"][math.random(1, #txt["fly"])].."", 1)

       addEvent(goThere, 500, mysum, topos, "fly", isCreature(getCreatureTarget(cid)))

    elseif isInArray(skills["levitate_fly"], getPokemonName(mysum)) then

       doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["levitate_fly"][math.random(1, #txt["levitate_fly"])].."", 1)   --alterado v1.8

       addEvent(goThere, 500, mysum, topos, "fly", isCreature(getCreatureTarget(cid)))

    else

       doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["ride"][math.random(1, #txt["ride"])].."", 1)

       addEvent(goThere, 500, mysum, topos, "ride", isCreature(getCreatureTarget(cid)))

    end

return true

end

-----------------------------

----------------------------------Control Mind--------------------------------------------   alterado v1.5

if isCreature(item2.uid) and ehMonstro(item2.uid) and isInArray(skills["control mind"], getCreatureName(mysum)) and item2.uid ~= mysum then

   if not isCreature(item2.uid) then

   return true

   end

   if isSleeping(mysum) then

      return doPlayerSendCancel(cid, "Your pokemon is sleeping...zZzZ")

   end

   if getTileInfo(getThingPos(cid)).protection or getTileInfo(getThingPos(getCreatureSummons(cid)[1])).protection then

      return doPlayerSendCancel(cid, "You or your pokemon are in Pz zone!")

   end

 

   if #getCreatureSummons(cid) == 2 then

      return doPlayerSendCancel(cid, "You only can control one Pokemon!")

   end

   local cd = getCD(thisball.uid, "control", 120)

   

   if cd > 0 then

      doPlayerSendCancel(cid, "You have to wait "..cd.." segs to use Control Mind again!")

      return true

   end

   

   if getPokemonLevel(item2.uid) >= getPokemonLevel(mysum) then

      return doPlayerSendCancel(cid, "Your pokemon can't control this mind!")

   end

   

   if getPlayerStorageValue(cid, 22545) >= 1 then       --alterado v1.7

      return doPlayerSendCancel(cid, "You can't do that while in the Golden Arena!")

   end

   

local cmed = item2.uid

setCD(thisball.uid, "control", 120)

local gender = getPokemonGender(cmed)

doSendDistanceShoot(getThingPos(mysum), getThingPos(cmed), 39)

--------------

setPlayerStorageValue(cid, 212124, 1)

doConvinceCreature(cid, cmed)

setPlayerStorageValue(cmed, 212123, 1)

doCreatureSay(cid, ""..getCreatureName(mysum)..", control "..string.lower(getCreatureName(cmed)).."'s mind!", 1)

local cmname = getCreatureName(mysum)

local cmpos = getThingPos(mysum)

local pokelife = (getCreatureHealth(mysum) / getCreatureMaxHealth(mysum))

doItemSetAttribute(thisball.uid, "hp", pokelife)

doRemoveCreature(mysum)

local cmzao = doSummonCreature(""..cmname.." cm", cmpos)

doConvinceCreature(cid, cmzao)

setPlayerStorageValue(cid, 888, 1)

if useKpdoDlls then

   doUpdateMoves(cid)

end

local function check(cid, controled, rod)

if isCreature(cid) then

ball2 = getPlayerSlotItem(cid, 8):

   if getPlayerStorageValue(cid, 888) <= 0 then

   return true

   end

   if not isCreature(controled) then

      setPlayerStorageValue(cid, 212124, 0)

      local sum = isCreature(getCreatureSummons(cid)[1]) and getCreatureSummons(cid)[1] or getCreatureSummons(cid)[2]

      local pkcmpos = getThingPos(sum)

      doRemoveCreature(sum)

      local item = getPlayerSlotItem(cid, 8):

      local pk = doSummonCreature(getItemAttribute(item.uid, "poke"), pkcmpos)

      doConvinceCreature(cid, pk)

      doCreatureSetLookDir(getCreatureSummons(cid)[1], 2)

      addEvent(doAdjustWithDelay, 100, cid, pk, true, true, false)

      setPlayerStorageValue(cid, 888, -1)  --alterado v1.7

      cleanCMcds(item.uid)

      registerCreatureEvent(pk, "SummonDeath")  --alterado v1.6

      if useKpdoDlls then

         doUpdateMoves(cid)

      end

      return true

   end

   

   if rod <= 0 then

      --Pokemon controlado

      local cmed2 = getCreatureSummons(cid)[1]

      local poscmed = getThingPos(cmed2)

      local cmeddir = getCreatureLookDir(cmed2)

      local namecmed = getCreatureName(cmed2)

      local gender = getPokemonGender(cmed2)

      local hp, maxHp = getCreatureHealth(getCreatureSummons(cid)[1]), getCreatureMaxHealth(getCreatureSummons(cid)[1])

      doRemoveCreature(getCreatureSummons(cid)[1])

      local back = doCreateMonster(namecmed, poscmed)

      addEvent(doCreatureSetSkullType, 150, back, gender)

      doWildAttackPlayer(back, cid)

      doCreatureSetLookDir(back, cmeddir)

      addEvent(doCreatureAddHealth, 100, back, hp-maxHp)

    

      -- pokemon controlador    

      local mynewpos = getThingPos(getCreatureSummons(cid)[1])

      doRemoveCreature(getCreatureSummons(cid)[1])

      local pk2 = doSummonCreature(getItemAttribute(ball2.uid, "poke"), mynewpos)

      doConvinceCreature(cid, pk2)

      addEvent(doAdjustWithDelay, 100, cid, pk2, true, true, false)

      setPlayerStorageValue(cid, 888, -1) --alterado v1.7

      doCreatureSetLookDir(getCreatureSummons(cid)[1], 2)

      setPlayerStorageValue(cid, 212124, 0)

      cleanCMcds(ball2.uid)

      registerCreatureEvent(pk2, "SummonDeath")  --alterado v1.6

      if useKpdoDlls then

         doUpdateMoves(cid)

      end

   else

       if isInArray({"Haunter", "Gengar", "Shiny Gengar"}, cmname) then

          doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 214)

       else

          doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 220)

       end

   end

end

addEvent(check, 500, cid, controled, rod-1)

end

check(cid, cmed, 40)

return true

end

---------------------------------------------------------------------

-------- MOVE / END ---------

    

    local onlyWater = false

    if isWater(getTileThingByPos(checkpos).itemid) then

        onlyWater = true

        for checkwater = 0, 7 do

            if not isWater(getTileThingByPos(getPosByDir(checkpos, checkwater)).itemid) then

                onlyWater = false

            end

        end

    end

    if onlyWater then

        doPlayerSendCancel(cid, "Destination is not reachable.")

    return true

    end

    doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["move"][math.random(1, #txt["move"])].."", 1)

    

    if isCreature(getCreatureTarget(cid)) then

       goThere(mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)           

    else

       addEvent(goThere, 500, mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)                 

    end    

-----------------------------

return true

end

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...