Ir para conteúdo
  • 0

order so anda sem target


wevertonvrb

Pergunta

ENTÃO GENTE O ORDER ESTA FUNCIONANDO, POREM SE EU ESTIVER ATACANDO UM POKEMON E QUEIRA USAR O ORDER PARA QUE MEU POKEMON FIQUE DE FRENTE PARA USAR UMA HABILIDADE QUE QUE SO DE DANO EM LINHA RETA ELE NÃO SE MOVE SE EU TENTAR MANDAR PRA LONGE TAMBÉM ELE NÃO SE MOVE

DE TODO MODO SE EU COLOCAR PRA ATACAR O ORDER DEIXA DE FUNCIONAR SE EU QUIZER MOVER TENHO QUE TIRAR O ATACK POR GENTILEZA ME AJUDEM COM ISSO, EXISTEM 2 ARQUIVOS COM NOME ORDER VOU POSTA-LOS

LIB/ORDER

Spoiler

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

if getCreatureCondition(cid, CONDITION_EXHAUST) or isWatchingTv(cid) then return true end
doAddCondition(cid, ordercondition)

local pPos = getThingPos(cid)
      pPos.stackpos = 0
local pos = getThingFromPos(pPos)
      
if isSurf(cid) or isInArray(11756, item2.itemid) or item2.itemid == 11756 or isInArray(11756, pos.itemid) or pos.itemid == 11756 or isInArray({11756, 11675, 11676, 460}, pos.itemid) then
   return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
end

if item2.uid == cid then -- demound poke
    if isPlayer(item2.uid) and isInDuel(item2.uid) then
       return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
    end
   if isRiderOrFlyOrSurf(cid) then 
      local ball = getPlayerSlotItem(cid, ?
            doGoPokemonInOrder(cid, ball, false)
            doRemoveCondition(cid, CONDITION_OUTFIT)
            doPlayerSay(cid, getCreatureNick(getCreatureSummons(cid)[1]) .. orderTalks["downability"].talks[math.random(#orderTalks["downability"].talks)])
            
            doRegainSpeed(cid)
            
            setPlayerStorageValue(cid, orderTalks["ride"].storage, -1)
            setPlayerStorageValue(cid, orderTalks["fly"].storage, -1)
            doPlayerSendCancel(cid, '12//,show')
      return true
   end
end
--- ride/fly retirada


if isRiderOrFlyOrSurf(cid) then
   return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
end
   
if #getCreatureSummons(cid) == 0 then
  return doPlayerSendCancel(cid, "Você precisa de um pokemon para usar o order.")
end
    
local poke = getCreatureSummons(cid)[1]
local pokeName = getCreatureNick(poke)
local habilidades = getPokemonSkills(getCreatureName(poke))  
  
if item2.uid == cid then

   if isFight(cid) then  -- Edição pra ficar igual pxg.. nao dar fly ou ride com fight
       setMoveSummon(cid, false)
       addEvent(doMovePokeToPos, 5, poke, getThingPos(cid))
       return true 
   end 
   
   if isMega(poke) then
     return doPlayerSendCancel(cid, "Pokemons megas não tem habilidades de fly/ride.")
   end
 
    local pb = getPlayerSlotItem(cid, 8).uid
    
    if flyAdd then
        if getItemAttribute(pb, "addon") > 1 then
            doSetCreatureOutfit(pk, {lookType = getItemAttribute (pb, "addon")}, -1)
        end
    elseif rideAdd then
        if getItemAttribute(pb, "addon") > 1 then
            doSetCreatureOutfit(pk, {lookType = getItemAttribute (pb, "addon")}, -1)
        end
    end
   
    if isPlayer(item2.uid) and (isInDuel(item2.uid) or getCreatureSkullType(item2.uid) == SKULL_WHITE or getCreatureSkullType(item2.uid) == 1 or getCreatureSkullType(item2.uid) == 2) then
       return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
    end
   
   if not (getThingPos(poke) or getThingPos(item2.uid)) then -- correção de um erro.
      return true
   end
   local dist = getDistanceBetween(getThingPos(poke), getThingPos(item2.uid))   
   --- ride
   if string.find(habilidades, "ride") then
      doPlayerSay(cid, pokeName..orderTalks["ride"].talks[math.random(#orderTalks["ride"].talks)])
      
      if dist == 1 then
        doUp(cid, poke, "ride")
      return true
      end
      
      setMoveSummon(cid, false)
      addEvent(doMovePokeToPos, 200, poke, topos)
      setPlayerStorageValue(poke, orderTalks["ride"].storage, 1)
      
   elseif string.find(habilidades, "fly") or string.find(habilidades, "levitate") then
   
       if string.find(habilidades, "levitate") then
          doPlayerSay(cid, pokeName..orderTalks["levitate"].talks[math.random(#orderTalks["levitate"].talks)])
       else
          doPlayerSay(cid, pokeName..orderTalks["fly"].talks[math.random(#orderTalks["fly"].talks)])
       end
       
       if dist == 1 then
        doUp(cid, poke, "fly")
       return true
       end
       
      setMoveSummon(cid, false)
      addEvent(doMovePokeToPos, 200, poke, topos)
      setPlayerStorageValue(poke, orderTalks["fly"].storage, 1)
   end  
----------------- Ditto ----------------- 
elseif isMonster(item2.uid) and isInArray({"Shiny Ditto", "Ditto"}, getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke"))  then
       local listaproibidos = {"Mew", "Mewtwo"}
       if isInArray(listaproibidos, getCreatureName(item2.uid)) then 
            doSendMsg(cid, "Seu ditto não pode se transformar nesse pokemon.")
         return true
       end  
       
       if isPlayer(item2.uid) and isInDuel(item2.uid) then
         return doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
       end
       
       local listaproibidos = {"Mew", "Mewtwo", "groudon", "suicune", "raiko", "entei", "moltres", "articuno", "zapdos", "rayquaza"}
       if isInArray(listaproibidos, getCreatureName(item2.uid)) then 
            doSendMsg(cid, "Seu ditto não pode se transformar nesse pokemon.")
         return true
       end
       
       if isPlayerSummon(cid, item2.uid) and isInArray({"Shiny Ditto", "Ditto"}, getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")) and not isInArray({"Shiny Ditto", "Ditto"}, getItemAttribute(getPlayerSlotItem(cid, 8).uid, "copyName")) then 
       
          doCopyPokemon(poke, getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke"), true)
          doPlayerSay(cid, getCreatureNick(getCreatureSummons(cid)[1])..", reverta-se.")
          return true
          
       elseif not isPlayerSummon(cid, item2.uid) and getPokeName(item2.uid) ~= getPokeName(poke) then    

        if isSummon(item2.uid) then
           if getPlayerSlotItem(getCreatureMaster(item2.uid), 8).uid ~= 0 and isInArray({"Shiny Ditto", "Ditto"}, getItemAttribute(getPlayerSlotItem(getCreatureMaster(item2.uid), 8).uid, "poke")) then
              doSendMsg(cid, "Você não pode fazer uma copia de um outro ditto.")
              return true 
           end
        end
           
       local thingName = doCorrectString(getCreatureName(item2.uid))
                if pokes[thingName].level > getPlayerLevel(cid) then
                    doSendMsg(cid, "Você não tem level para copiar este pokémon.")
                    return true 
                end
                 doCopyPokemon(poke, thingName, true)
                 return true 
                 
       end
                 
      
----------------- Mover ----------------- 
elseif not isCreature(item2.uid) then
    
    setMoveSummon(cid, false)
    doEreaseUsingOrder(poke)
    local oldTopos = getThingPos(item2.uid)
    local oldTopos_2 = topos
    local x, y = 0, 0
         
    if (topos.x - getThingPos(poke).x)  > 0 then
       topos.x = topos.x +1
    elseif (topos.x - getThingPos(poke).x)  < 0 then
       topos.x = topos.x -1
    end
    if (topos.y - getThingPos(poke).y)  > 0 then
       topos.y = topos.y +1    
    elseif (topos.y - getThingPos(poke).y)  < 0 then
       topos.y = topos.y -1
    end  
    
    
    
    setPlayerStorageValue(poke, 505, getThingPos(cid).x)
    setPlayerStorageValue(poke, 506, getThingPos(cid).y)
    
    addEvent(doMovePokeToPos, 5, poke, topos)
    doWalkAgain(poke)
    
    
    ----- Edições dig/cut/rock smash/headbutt/blink
    local buracos = {468, 481, 483} 
    local arvores = {2767, 2768}    
    local pedras = {1285, 3634, 3632, 3667}  
    local headbutt = {2707}   

    if item2.uid == 0 then return true end
    local pos = getThingPos(item2.uid)
    local dist = getDistanceBetween(getThingPos(poke), getThingPos(item2.uid)) 
    
       
       
          if isInArray(buracos, item2.itemid) then   ----------------------- DIG
          
             if not string.find(habilidades, "dig") then
                return doPlayerSendCancel(cid, "Esse pokemon não tem a habilidade de cavar.")
             end
             
             doMarkedPos(poke, getThingPos(item2.uid))
             doEreaseUsingOrder(cid)
             setPlayerStorageValue(poke, orderTalks["dig"].storage, 1)
             setMoveSummon(cid, false)
             if dist == 1 then
                recheck(poke, "cut", getThingPos(item2.uid))
             else 
                addEvent(doMovePokeToPos, 200, poke, topos)
             end
             doPlayerSay(cid, getCreatureNick(poke)..orderTalks["dig"].talks[math.random(#orderTalks["dig"].talks)])
             
             return true
          elseif isInArray(arvores, item2.itemid) then   ----------------------- CUT
          
             if not string.find(habilidades, "cut") then
                return doPlayerSendCancel(cid, "Esse pokemon não tem a habilidade de cortar.")
             end
             
                doMarkedPos(poke, getThingPos(item2.uid))
                doEreaseUsingOrder(cid)
                setPlayerStorageValue(poke, orderTalks["cut"].storage, 1)
                setMoveSummon(cid, false)
                if dist == 1 then
                  addEvent(recheck, (1000 - (2.3*getCreatureSpeed(poke))) * dist, poke, "cut", getThingPos(item2.uid))
                else 
                  addEvent(doMovePokeToPos, 200, poke, topos)
                end
                doPlayerSay(cid, getCreatureNick(poke)..orderTalks["cut"].talks[math.random(#orderTalks["cut"].talks)])
                return true
          elseif isInArray(pedras, item2.itemid) then   ----------------------- ROCK
          
             if not string.find(habilidades, "rock smash") then
                return doPlayerSendCancel(cid, "Esse pokemon não tem a habilidade de quebrar.")
             end
             
             local pos = getThingPos(item2.uid)
                doMarkedPos(poke, getThingPos(item2.uid))
                doEreaseUsingOrder(cid)
                setPlayerStorageValue(poke, orderTalks["rock"].storage, 1)
                setMoveSummon(cid, false)
                if dist == 1 then
                  addEvent(recheck, (1000 - (2.3*getCreatureSpeed(poke))) * dist, poke, "rock", getThingPos(item2.uid))
                else 
                  addEvent(doMovePokeToPos, 200, poke, topos)
                end
                doPlayerSay(cid, getCreatureNick(poke)..orderTalks["rock"].talks[math.random(#orderTalks["rock"].talks)])
                return true
                
          elseif isInArray(headbutt, item2.itemid) then   ----------------------- HEAD
          
             if not string.find(habilidades, "headbutt") then
                return doPlayerSendCancel(cid, "Esse pokemon nao tem a habilidade de balancar Arvores.")
             end
             
            local pos = getThingPos(item2.uid)
                doMarkedPos(poke, getThingPos(item2.uid))
                doEreaseUsingOrder(cid)
                setPlayerStorageValue(poke, orderTalks["headbutt"].storage, 1)
                setMoveSummon(cid, false)
                if dist <= 1 then
                  addEvent(recheck, (1000 - (2.3*getCreatureSpeed(poke))) * dist, poke, "headbutt", getThingPos(item2.uid))
                else 
                  addEvent(doMovePokeToPos, 200, poke, topos)
                end
                doPlayerSay(cid, getCreatureNick(poke)..orderTalks["headbutt"].talks[math.random(#orderTalks["headbutt"].talks)])
                
             return true
          end
          
          if string.find(habilidades, "blink") then
                  if os.time() < getPlayerStorageValue(poke, storages.blink) and not isGod(cid) then
                     doPlayerSay(cid, getCreatureNick(poke)..orderTalks["move"].talks[math.random(#orderTalks["move"].talks)])
                     return true
                  elseif (getCreatureSkullType(cid) == SKULL_WHITE or isInDuel(cid)) and getTileInfo(getThingPos(item2.uid)).protection then 
                     doSendMsg(cid, "Você não pode usar blink em protection zone quando está em duelo.")
                     return true
                  end
                       setPlayerStorageValue(poke, storages.blink, os.time()+7)
                       doSendMagicEffect(getThingPos(poke), 134)  
                       doTeleportThing(poke, getThingPos(item2.uid), false)
                       doSendMagicEffect(getThingPos(poke), 134)
                       doPlayerSay(cid, getCreatureNick(poke)..orderTalks["blink"].talks[math.random(#orderTalks["blink"].talks)])
          
              return true
          end
         
         doPlayerSay(cid, getCreatureNick(poke)..orderTalks["move"].talks[math.random(#orderTalks["move"].talks)])
    
end    
    return true
end

function isGhost(cid)
local hab = getPokemonSkills(string.lower(getPokeName(cid)))
   if string.find(hab, "ghost")  then
      return true
   end
  return false
end
 

 

 

ACTIONS/ORDER

Spoiler

function doPushCreatureTo(uid, direction, distance, speed)   --//doPushCreature(creature,getPlayerLookDir(cid))
-- Desenvolvido por Dokmos 30/01/2009
-- Apoio Dinastias
local pos = getThingPos(uid)
local PARAM = {{1}, {500}}
local DIRECTION = {
{{0,0},{6,7},{1,3}}, {{1,1},{5,7},{0,2}}, {{2,2},{4,5},{1,3}}, {{3,3},{4,6},{0,2}},
{{4,4},{2,3}}, {{5,5}, {1,2}}, {{6,6},{0,1}}, {{7,7},{0,3}}
}
table.insert(PARAM[1], distance)
table.insert(PARAM[2], speed)

        for dvar = 1, #DIRECTION[direction+1] do
        rand = math.random(2)
        d = DIRECTION[direction+1][dvar][rand]
        dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.abs(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))}
        newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z}
                if  (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end
        rand = (math.fmod(rand,2)+1)
        d = DIRECTION[direction+1][dvar][rand]
        dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.abs(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))}
        newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z}
                if  (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end
                if (dvar == #DIRECTION[direction+1]) then
                newtile = pos
                end
        end
        
        doTeleportThing(uid, newtile, true)
        if (PARAM[1][#PARAM[1]] > 1) then
        addEvent(doPushCreature, PARAM[2][#PARAM[2]], uid, direction, (distance-1), speed)
        end     
end
--///////////////////////////////////////////////////////////////////////////////////////////////////////--
local dirpref = {
[1] =  {[NORTH] = {[1] = {NORTH}, [2] = {EAST, WEST}, [3] = {NORTHEAST, NORTHWEST}},
    [EAST] = {[1] = {EAST}, [2] = {NORTH, SOUTH}, [3] = {NORTHEAST, SOUTHEAST}},
    [SOUTH] = {[1] = {SOUTH}, [2] = {EAST, WEST}, [3] = {SOUTHEAST, SOUTHWEST}},
    [WEST] = {[1] = {WEST}, [2] = {SOUTH, NORTH}, [3] = {NORTHWEST, SOUTHWEST}},
    [NORTHEAST] = {[1] = {NORTH, EAST}, [2] = {NORTHEAST}, [3] = {SOUTH, WEST}},
    [SOUTHEAST] = {[1] = {SOUTH, EAST}, [2] = {SOUTHEAST}, [3] = {NORTH, WEST}},
    [SOUTHWEST] = {[1] = {SOUTH, WEST}, [2] = {SOUTHWEST}, [3] = {NORTH, EAST}},
    [NORTHWEST] = {[1] = {NORTH, WEST}, [2] = {NORTHWEST}, [3] = {EAST, SOUTH}}},
[2] =  {[NORTH] = {[1] = {NORTH}, [2] = {WEST, EAST}, [3] = {NORTHWEST, NORTHEAST}},
    [EAST] = {[1] = {EAST}, [2] = {SOUTH, NORTH}, [3] = {SOUTHEAST, NORTHEAST}},
    [SOUTH] = {[1] = {SOUTH}, [2] = {WEST, EAST}, [3] = {SOUTHWEST, SOUTHEAST}},
    [WEST] = {[1] = {WEST}, [2] = {NORTH, SOUTH}, [3] = {SOUTHWEST, NORTHWEST}},
    [NORTHEAST] = {[1] = {EAST, NORTH}, [2] = {NORTHEAST}, [3] = {WEST, SOUTH}},
    [SOUTHEAST] = {[1] = {EAST, SOUTH}, [2] = {SOUTHEAST}, [3] = {WEST, NORTH}},
    [SOUTHWEST] = {[1] = {WEST, SOUTH}, [2] = {SOUTHWEST}, [3] = {EAST, NORTH}},
    [NORTHWEST] = {[1] = {WEST, NORTH}, [2] = {NORTHWEST}, [3] = {SOUTH, EAST}}},
}

function doPushCreature(uid,direction,distance,time)
   if isCreature(uid) == TRUE then
      local rand = (2*math.random(0,1))-1
      local rand2 = math.random(-1,0)
      if direction == 0 then
         signal = {0,rand,-rand,rand,-rand,0,-1,-1,-1,0,0,0}
      elseif direction == 1 then
         signal = {1,1,1,0,0,0,0,rand,-rand,rand,-rand,0}
      elseif direction == 2 then
         signal = {0,rand,-rand,rand,-rand,0,1,1,1,0,0,0}
      elseif direction == 3 then
         signal = {-1,-1,-1,0,0,0,0,rand,-rand,rand,-rand,0}
      elseif direction == 4 then
         signal = {-1,rand2,(-rand2)-1,0,1,rand2+1,rand2,0}
      elseif direction == 5 then
         signal = {1,-rand2,-((-rand2)-1),0,1,rand2+1,rand2,0}
      elseif direction == 6 then
         signal = {-1,rand2,(-rand2)-1,0,-1,(-rand2)-1,rand2,0}
      else
         signal = {1,-rand2,-((-rand2)-1),0,-1,(-rand2)-1,rand2,0}
      end
      local pos = getThingPos(uid)
      nsig = #signal
      nvar = 0

      repeat
         nvar = nvar+1
         newpos = {x=pos.x+(signal[nvar]),y=pos.y+(signal[(nsig/2)+nvar]),z=pos.z}
         newtile = {x=newpos.x,y=newpos.y,z=newpos.z,stackpos=0}
      until getTileThingByPos(newtile).uid ~= 0 and hasProperty(getTileThingByPos(newtile).uid,3) == FALSE and canWalkOnPos(newtile, true, false, true, true, false) and queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2)
                                                                                                                   --alterado v1.5
      if distance == nil or distance == 1 then
         doTeleportThing(uid,newpos,TRUE)   
      else
         distance = distance-1
         doTeleportThing(uid,newpos,TRUE)
         if time ~= nil then
            addEvent(doPushCreature,time,uid,direction,distance,time)
         else
            addEvent(doPushCreature,500,uid,direction,distance,500)
         end       
      end
   end  
end

function doComparePosition(pos1, pos2)
    if pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z then
    return true
    end
return false
end

function walkTo(cid, direction, finalp, useExtraMoveOrder)
    if not isCreature(cid) then return true end

    doChangeSpeed(cid, 5)
    local x = getThingPos(cid)
    local ratedelaywalk = 1
    local finalpos = {x = finalp.x, y = finalp.y, z = finalp.z}

        if not canWalkOnPos(finalpos, false, false, true, true, true) then
            finalpos = getClosestFreeTile(cid, finalpos)
        end

        if not finalpos then
        return false
        end

    local dir = getDirectionToWalk(cid, finalpos, 2, 0, 0, false, true, 300)
    if dir and tonumber(dir) ~= nil and tonumber(dir) >= 0 and tonumber(dir) <= 7 then
        if dir >= 4 then
            ratedelaywalk = 0.4
        end
        doPushCreature(cid, dir, 1, getNextStepDelay(cid, dir) * ratedelaywalk)
        return getNextStepDelay(cid, dir) * ratedelaywalk
    elseif useExtraMoveOrder then

local random = math.random(1, 2)

    for ta = 1, 3 do
        for tb = 1, #dirpref[random][direction][ta] do
            local y = getPosByDir(getThingPos(cid), dirpref[random][direction][ta][tb])
            local w = getCreatureLP(cid)
            local z = getDirectionTo(y, getThingPos(cid)) -- direção q vai marcar
            local j = getDirectionTo(getThingPos(cid), y) -- direção q ele vai
            if canWalkOnPos(y, true, false, true, true, true) and w ~= j then
                if dirpref[random][direction][ta][tb] >= 4 then
                    ratedelaywalk = 0.5
                end
                doPushCreature(cid, dirpref[random][direction][ta][tb], 1, getNextStepDelay(cid, dirpref[random][direction][ta][tb]) * ratedelaywalk)
                markLP(cid, z)
            return getNextStepDelay(cid, dirpref[random][direction][ta][tb]) * ratedelaywalk
            end
        end
    end
    end
return false
end

function getCreatureLP(cid)
return getPlayerStorageValue(cid, 197)
end

function markLP(cid, dir)
setPlayerStorageValue(cid, 197, dir)
end

function markPos(sid, pos)
if not isCreature(sid) then return end
setPlayerStorageValue(sid, 145, pos.x)
setPlayerStorageValue(sid, 146, pos.y)
setPlayerStorageValue(sid, 147, pos.z)
end

function markFlyingPos(sid, pos)
if not isCreature(sid) then return end
setPlayerStorageValue(sid, 33145, pos.x)
setPlayerStorageValue(sid, 33146, pos.y)
setPlayerStorageValue(sid, 33147, pos.z)
end

function getFlyingMarkedPos(sid)
if not isCreature(sid) then return end
local xx = getPlayerStorageValue(sid, 33145)
local yy = getPlayerStorageValue(sid, 33146)
local zz = getPlayerStorageValue(sid, 33147)
return {x = xx, y = yy, z = zz, stackpos = 0}
end

function getMarkedPos(sid)
if not isCreature(sid) then return end
local xx = getPlayerStorageValue(sid, 145)
local yy = getPlayerStorageValue(sid, 146)
local zz = getPlayerStorageValue(sid, 147)
return {x = xx, y = yy, z = zz}
end

function getOwnerPos(sid)
if not isCreature(sid) then return end
local xx = getPlayerStorageValue(sid, 148)
local yy = getPlayerStorageValue(sid, 149)
local zz = getPlayerStorageValue(sid, 150)
return {x = xx, y = yy, z = zz}
end

function markOwnerPos(sid, pos)
if not isCreature(sid) then return end
setPlayerStorageValue(sid, 148, pos.x)
setPlayerStorageValue(sid, 149, pos.y)
setPlayerStorageValue(sid, 150, pos.z)
end

function goThere(sid, thepos, skill, target, rept)
    if not isCreature(sid) or not isCreature(getCreatureMaster(sid)) then return true end
    if getCreatureNoMove(sid) or isSleeping(sid) or isParalyze(sid) then return true end            --alterado v1.6
    if thepos.x ~= getMarkedPos(sid).x or thepos.y ~= getMarkedPos(sid).y then return true end
    if isCreature(getCreatureTarget(getCreatureMaster(sid))) and target == false or (rept and rept <= 0) then
        doRegainSpeed(sid)
        markPos(sid, {x=1,y=1,z=7})
    return true
    end    

if (skill == "ride" or skill == "fly") and getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 then

    local currentPos = getThingPos(getCreatureMaster(sid))
    local summonPos = getThingPos(sid)
    local masterPos = getCreatureLastPosition(sid)

    if (getThingPos(sid).x == getThingPos(getCreatureMaster(sid)).x and getThingPos(sid).y == getThingPos(getCreatureMaster(sid)).y) or (currentPos.x == masterPos.x and currentPos.y == masterPos.y) then
    recheck(sid, skill, thepos)
    return true
    end

    if currentPos.x == thepos.x and currentPos.y == thepos.y then
        if getDirectionTo(getThingPos(sid), getThingPos(getCreatureMaster(sid))) <= 3 then
            doRegainSpeed(sid)
            local ndelay = getNextStepDelay(sid, 0)
            doTeleportThing(sid, thepos, true)
            doChangeSpeed(sid, -getCreatureSpeed(sid))
            markPos(sid, getThingPos(getCreatureMaster(sid)))
            addEvent(goThere, ndelay, sid, getMarkedPos(sid), skill, target)
        else
            doChangeSpeed(sid, - getCreatureSpeed(sid))
            doRegainSpeed(sid)
            markPos(sid, getThingPos(getCreatureMaster(sid)))
            local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly")
            doChangeSpeed(sid, - getCreatureSpeed(sid))
            addEvent(goThere, x, sid, getMarkedPos(sid), skill, target)
            end
    return true
    else
        markPos(sid, getThingPos(getCreatureMaster(sid)))
        doChangeSpeed(sid, - getCreatureSpeed(sid))
        doRegainSpeed(sid)
        local ndelay = getNextStepDelay(sid, 0)
            if getDirectionTo(getThingPos(sid), getMarkedPos(sid)) >= 4 then
                local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly")
            else
                doTeleportThing(sid, getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid))))
            end
        doChangeSpeed(sid, - getCreatureSpeed(sid))
        addEvent(goThere, x and x or ndelay, sid, getMarkedPos(sid), skill, target)
    return true
    end

addEvent(recheck, 350, sid, skill, thepos)
return true
end

if getThingPos(sid).x == getMarkedPos(sid).x and getThingPos(sid).y == getMarkedPos(sid).y then
    if isCreature(getCreatureTarget(sid)) then
    doFaceCreature(sid, getThingPos(getCreatureTarget(sid)))
    end
    if skill == "blink" then
       doChangeSpeed(sid, - getCreatureSpeed(sid))   --edited blink
    end
addEvent(recheck, 350, sid, skill, thepos)
return true
end

if (getOwnerPos(sid).x ~= getThingPos(getCreatureMaster(sid)).x or getOwnerPos(sid).y ~= getThingPos(getCreatureMaster(sid)).y) and isCreature(getCreatureTarget(getCreatureMaster(sid))) == false and skill == "move" then
doRegainSpeed(sid)
markPos(sid, {x=1,y=1,z=7})
return true
end

doRegainSpeed(sid)

local holeid = thepos
holeid.stackpos = 0
holeid = getTileThingByPos(holeid).itemid

if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 and (not isWalkable(getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid))), true, false, false, true) or isInArray(specialabilities["digholes"], holeid)) then
    if isGhostPokemon(sid) and getPlayerStorageValue(getCreatureMaster(sid), 990) <= 0 then
        local todir = getDirectionTo(getThingPos(sid), getMarkedPos(sid))
        if todir <= 3 then
            doTeleportThing(sid, getMarkedPos(sid), true)
        else
            local gotopos = getPosByDir(getThingPos(sid), dirpref[math.random(1, 2)][todir][1][math.random(1, 2)])
            doTeleportThing(sid, gotopos, true)
            addEvent(goThere, getNextStepDelay(sid, 0), sid, getMarkedPos(sid), skill, target)
            return true
        end
    end
doFaceCreature(sid, getMarkedPos(sid))
addEvent(recheck, 180, sid, skill, thepos)
doChangeSpeed(sid, - getCreatureSpeed(sid))
return true
end    

local ret = 0
    if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 then
        ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or isGhostPokemon(sid))
        if not tonumber(ret) then
            doFaceCreature(sid, getMarkedPos(sid))
            addEvent(recheck, 180, sid, skill, thepos)
            doChangeSpeed(sid, - getCreatureSpeed(sid))
        return true
        end
    else                                                                                                                          --alterado 
        ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or not isGhostPokemon(sid))-- and isSightClear(getThingPos(sid), getMarkedPos(sid), false)))
    end

if not tonumber(ret) then
doPlayerSendCancel(getCreatureMaster(sid), "Destination is not reachable.")
markPos(sid, {x=1,y=1,z=7})
return true
end

doChangeSpeed(sid, - getCreatureSpeed(sid))
addEvent(goThere, tonumber(ret), sid, getMarkedPos(sid), skill, target, rept and rept - 1 or 22)
end

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...