Ir para conteúdo
  • 0

attempt to perform arithmetic on a nil value, Bug Ordem System, Fly e Ride não funcionam


julyana

Pergunta

 

ola galera estava adaptando um source em um poketibia, e depois de adaptada, o fly nao funcionou, ai mexi um pouco no ordem sistem e resolvi algum bugs mas nao conseguir arrumar este da distro

[Error - Action Interface]
In a timer event called from:
data/actions/scripts/order.lua:onUse
Description:
data/lib/order.lua:130: attempt to perform arithmetic on a nil value
stack traceback:
        data/lib/order.lua:130: in function 'walkTo'
        data/lib/order.lua:478: in function <data/lib/order.lua:370>
 

como posso encontrar um solução?

 

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 v2.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 = getDirectionTo(getThingPos(cid), finalpos)
    --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
    function getNextStepDelay(cid, dir)    return 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 recheck(sid, skill, pos)
    if not isCreature(sid) then return end
    local cid = getCreatureMaster(sid)

    if skill == "cut" then

        local item = getTileItemById(pos, 2767)
        doCreatureSay(sid, "CUT!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 141)
        doTransformItem(item.uid, 6216)
            local function growBush()
            doTransformItem(getTileItemById(pos, 6216).uid, 2767)
            end
        addEvent(growBush, intervalToRegrowBushAndStones * 1000)

    elseif skill == "harvest" then

        local item = getTileItemById(pos, 10916)
        doCreatureSay(sid, "HARVEST!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 141)
        doTransformItem(item.uid, 10912)
            local function growBush()
            doTransformItem(getTileItemById(pos, 10912).uid, 10916)
            end
        addEvent(growBush, choose(1, 2, 3, 5) * 60 * 1000)
local items = {13365, 13366, 13367, 13368, 13369, 13370, 13371}
doPlayerAddItem(cid, items[math.random(#items)])


    elseif skill == "rock smash" then

        local item = getTileItemById(pos, 1285)
        doCreatureSay(sid, "ROCK SMASH!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 118)
        doTransformItem(item.uid, 3610)
            local function growRock()
            doTransformItem(getTileItemById(pos, 3610).uid, 1285)
            end
        addEvent(growRock, intervalToRegrowBushAndStones * 1000)
        
    elseif skill == "mining" then

        local item = getTileItemById(pos, 8633)
        doCreatureSay(sid, "MINING!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 118)
        doTransformItem(item.uid, 8637)
            local function growRock()
            doTransformItem(getTileItemById(pos, 8637).uid, 8633)
            end
        addEvent(growRock, choose(15, 20, 25, 30) * 60 * 1000)
local items = {11441,11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,13031,13032,13033,12244,12245,12232,12242,12417,12419}
doPlayerAddItem(cid, items[math.random(#items)])

        
    elseif skill == "headbutt" then   --alterado v2.6
    
    local master = getCreatureMaster(sid)
    local array = {}                           
    local lvl = {25, 40, 60, 80, 1000} --lvls

    for i = 1, #lvl do
        if getPlayerLevel(master) <= lvl then
           array = headbutt[lvl]
           break
        end
    end 
    local rand = array[math.random(#array)]
    for j = 1, rand[2] do
        local poke = doCreateMonster(rand[1], getClosestFreeTile(sid, pos))
        doSetMonsterPassive(poke)               
        doWildAttackPlayer(poke, master) 
    end
    local item = getTileItemById(pos, 12591)    --id do item   arvore normal
    doCreatureSay(sid, "HEADBUTT!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 118)
    doTransformItem(item.uid, 12592)  --id do item   arvore quebrada
    local function growHead()
          doTransformItem(getTileItemById(pos, 12592).uid, 12591) --id do item  arvore quebrada, arvore normal
    end
    addEvent(growHead, choose(5, 10, 20, 30) * 60 * 1000)   --o tempo pra arvore voltar ao normal varia de 5~30min

    elseif skill == "dig" then

        local item = getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})
        doCreatureSay(sid, "DIG!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 3)
        doTransformItem(item.uid, item.itemid+1)
            local function closeHole()
            doTransformItem(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).uid, item.itemid)
            end
        addEvent(closeHole, intervalToRegrowBushAndStones * 1000)
    
    elseif skill == "fly" then
        local pokemon = flys[getPokemonName(getCreatureSummons(cid)[1])]
        doPlayerSendTextMessage(cid, 27, "Type \"up\" or \"h1\" to fly/levitate higher and \"down\" or \"h2\" to fly/levitate lower.") --alterado v2.8
        doChangeSpeed(cid, -getCreatureSpeed(cid))
        local speed = 500 + PlayerSpeed/5 + getSpeed(sid) * 6 * speedRate
        doChangeSpeed(cid, speed)
        setPlayerStorageValue(cid, 54844, speed)
        doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1)
        doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1]))
        doRemoveCreature(getCreatureSummons(cid)[1])
        setPlayerStorageValue(cid, 17000, 1)
        if getCreatureOutfit(cid).lookType == 667 or getCreatureOutfit(cid).lookType == 999 then
           markPosEff(cid, getThingPos(cid))
           sendMovementEffect(cid, 136, getThingPos(cid))     --edited efeito quando anda com o porygon
        end
        local item = getPlayerSlotItem(cid, ? --alteraod v2.8
        if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then  
           sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])              --alterado v2.8
        end
        
        if useOTClient then
           doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
        end
    return true

    elseif skill == "ride" then
    
        local pokemon = rides[getPokemonName(getCreatureSummons(cid)[1])]
        doChangeSpeed(cid, -getCreatureSpeed(cid))
        local speed = 150 + PlayerSpeed + getSpeed(sid) * 5 * speedRate
        doChangeSpeed(cid, speed)
        setPlayerStorageValue(cid, 54844, speed)
        doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1)
        doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1]))
        doRemoveCreature(getCreatureSummons(cid)[1])
        setPlayerStorageValue(cid, 17001, 1)
        local item = getPlayerSlotItem(cid, ? --alteraod v2.8
        if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then   
           sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
        end
        
        if useOTClient then
           doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
        end

    return true
    end

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

    addEvent(recheck, 120, sid)
end

function goThere(sid, thepos, skill, target, rept)
    if not isCreature(sid) then return true end
    if getCreatureNoMove(sid) or isSleeping(sid) or isParalyze(sid) then return true end            --alterado v2.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
        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

 

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

3 respostass a esta questão

Posts Recomendados

  • 0
Em 07/01/2020 em 00:37, julyana disse:

 

ola galera estava adaptando um source em um poketibia, e depois de adaptada, o fly nao funcionou, ai mexi um pouco no ordem sistem e resolvi algum bugs mas nao conseguir arrumar este da distro

[Error - Action Interface]
In a timer event called from:
data/actions/scripts/order.lua:onUse
Description:
data/lib/order.lua:130: attempt to perform arithmetic on a nil value
stack traceback:
        data/lib/order.lua:130: in function 'walkTo'
        data/lib/order.lua:478: in function <data/lib/order.lua:370>
 

como posso encontrar um solução?

 

  Mostrar conteúdo oculto

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 v2.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 = getDirectionTo(getThingPos(cid), finalpos)
    --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
    function getNextStepDelay(cid, dir)    return 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 recheck(sid, skill, pos)
    if not isCreature(sid) then return end
    local cid = getCreatureMaster(sid)

    if skill == "cut" then

        local item = getTileItemById(pos, 2767)
        doCreatureSay(sid, "CUT!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 141)
        doTransformItem(item.uid, 6216)
            local function growBush()
            doTransformItem(getTileItemById(pos, 6216).uid, 2767)
            end
        addEvent(growBush, intervalToRegrowBushAndStones * 1000)

    elseif skill == "harvest" then

        local item = getTileItemById(pos, 10916)
        doCreatureSay(sid, "HARVEST!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 141)
        doTransformItem(item.uid, 10912)
            local function growBush()
            doTransformItem(getTileItemById(pos, 10912).uid, 10916)
            end
        addEvent(growBush, choose(1, 2, 3, 5) * 60 * 1000)
local items = {13365, 13366, 13367, 13368, 13369, 13370, 13371}
doPlayerAddItem(cid, items[math.random(#items)])


    elseif skill == "rock smash" then

        local item = getTileItemById(pos, 1285)
        doCreatureSay(sid, "ROCK SMASH!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 118)
        doTransformItem(item.uid, 3610)
            local function growRock()
            doTransformItem(getTileItemById(pos, 3610).uid, 1285)
            end
        addEvent(growRock, intervalToRegrowBushAndStones * 1000)
        
    elseif skill == "mining" then

        local item = getTileItemById(pos, 8633)
        doCreatureSay(sid, "MINING!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 118)
        doTransformItem(item.uid, 8637)
            local function growRock()
            doTransformItem(getTileItemById(pos, 8637).uid, 8633)
            end
        addEvent(growRock, choose(15, 20, 25, 30) * 60 * 1000)
local items = {11441,11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,13031,13032,13033,12244,12245,12232,12242,12417,12419}
doPlayerAddItem(cid, items[math.random(#items)])

        
    elseif skill == "headbutt" then   --alterado v2.6
    
    local master = getCreatureMaster(sid)
    local array = {}                           
    local lvl = {25, 40, 60, 80, 1000} --lvls

    for i = 1, #lvl do
        if getPlayerLevel(master) <= lvl then
           array = headbutt[lvl]
           break
        end
    end 
    local rand = array[math.random(#array)]
    for j = 1, rand[2] do
        local poke = doCreateMonster(rand[1], getClosestFreeTile(sid, pos))
        doSetMonsterPassive(poke)               
        doWildAttackPlayer(poke, master) 
    end
    local item = getTileItemById(pos, 12591)    --id do item   arvore normal
    doCreatureSay(sid, "HEADBUTT!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 118)
    doTransformItem(item.uid, 12592)  --id do item   arvore quebrada
    local function growHead()
          doTransformItem(getTileItemById(pos, 12592).uid, 12591) --id do item  arvore quebrada, arvore normal
    end
    addEvent(growHead, choose(5, 10, 20, 30) * 60 * 1000)   --o tempo pra arvore voltar ao normal varia de 5~30min

    elseif skill == "dig" then

        local item = getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})
        doCreatureSay(sid, "DIG!", TALKTYPE_MONSTER)
        markPos(sid, {x=1,y=1,z=7})
        doFaceCreature(sid, pos)
        doSendMagicEffect(getThingPos(item.uid), 3)
        doTransformItem(item.uid, item.itemid+1)
            local function closeHole()
            doTransformItem(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).uid, item.itemid)
            end
        addEvent(closeHole, intervalToRegrowBushAndStones * 1000)
    
    elseif skill == "fly" then
        local pokemon = flys[getPokemonName(getCreatureSummons(cid)[1])]
        doPlayerSendTextMessage(cid, 27, "Type \"up\" or \"h1\" to fly/levitate higher and \"down\" or \"h2\" to fly/levitate lower.") --alterado v2.8
        doChangeSpeed(cid, -getCreatureSpeed(cid))
        local speed = 500 + PlayerSpeed/5 + getSpeed(sid) * 6 * speedRate
        doChangeSpeed(cid, speed)
        setPlayerStorageValue(cid, 54844, speed)
        doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1)
        doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1]))
        doRemoveCreature(getCreatureSummons(cid)[1])
        setPlayerStorageValue(cid, 17000, 1)
        if getCreatureOutfit(cid).lookType == 667 or getCreatureOutfit(cid).lookType == 999 then
           markPosEff(cid, getThingPos(cid))
           sendMovementEffect(cid, 136, getThingPos(cid))     --edited efeito quando anda com o porygon
        end
        local item = getPlayerSlotItem(cid, ? --alteraod v2.8
        if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then  
           sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])              --alterado v2.8
        end
        
        if useOTClient then
           doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
        end
    return true

    elseif skill == "ride" then
    
        local pokemon = rides[getPokemonName(getCreatureSummons(cid)[1])]
        doChangeSpeed(cid, -getCreatureSpeed(cid))
        local speed = 150 + PlayerSpeed + getSpeed(sid) * 5 * speedRate
        doChangeSpeed(cid, speed)
        setPlayerStorageValue(cid, 54844, speed)
        doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1)
        doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1]))
        doRemoveCreature(getCreatureSummons(cid)[1])
        setPlayerStorageValue(cid, 17001, 1)
        local item = getPlayerSlotItem(cid, ? --alteraod v2.8
        if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then   
           sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
        end
        
        if useOTClient then
           doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
        end

    return true
    end

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

    addEvent(recheck, 120, sid)
end

function goThere(sid, thepos, skill, target, rept)
    if not isCreature(sid) then return true end
    if getCreatureNoMove(sid) or isSleeping(sid) or isParalyze(sid) then return true end            --alterado v2.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
        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

 

entre em contato comigo via pm vou ajudar!

Link para o comentário
Compartilhar em outros sites

  • 0

Eu acredito que essa função deveria estar fazendo alguma coisa, porém ela não está:

function getNextStepDelay(cid, dir) return end

troque todo o código por isso:

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 v2.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 = getDirectionTo(getThingPos(cid), finalpos)
  --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
    function getNextStepDelay(cid, dir)
      return 1
    end
    local tempo = (getNextStepDelay(cid, dir) * ratedelaywalk)
    doPushCreature(cid, dir, 1, tempo)
    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 recheck(sid, skill, pos)
  if not isCreature(sid) then return end
  local cid = getCreatureMaster(sid)

  if skill == "cut" then

    local item = getTileItemById(pos, 2767)
    doCreatureSay(sid, "CUT!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 141)
    doTransformItem(item.uid, 6216)
    local function growBush()
      doTransformItem(getTileItemById(pos, 6216).uid, 2767)
    end
    addEvent(growBush, intervalToRegrowBushAndStones * 1000)

  elseif skill == "harvest" then

    local item = getTileItemById(pos, 10916)
    doCreatureSay(sid, "HARVEST!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 141)
    doTransformItem(item.uid, 10912)
    local function growBush()
      doTransformItem(getTileItemById(pos, 10912).uid, 10916)
    end
    addEvent(growBush, choose(1, 2, 3, 5) * 60 * 1000)
    local items = {13365, 13366, 13367, 13368, 13369, 13370, 13371}
    doPlayerAddItem(cid, items[math.random(#items)])


  elseif skill == "rock smash" then

    local item = getTileItemById(pos, 1285)
    doCreatureSay(sid, "ROCK SMASH!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 118)
    doTransformItem(item.uid, 3610)
    local function growRock()
      doTransformItem(getTileItemById(pos, 3610).uid, 1285)
    end
    addEvent(growRock, intervalToRegrowBushAndStones * 1000)

  elseif skill == "mining" then

    local item = getTileItemById(pos, 8633)
    doCreatureSay(sid, "MINING!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 118)
    doTransformItem(item.uid, 8637)
    local function growRock()
      doTransformItem(getTileItemById(pos, 8637).uid, 8633)
    end
    addEvent(growRock, choose(15, 20, 25, 30) * 60 * 1000)
    local items = {11441,11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,13031,13032,13033,12244,12245,12232,12242,12417,12419}
    doPlayerAddItem(cid, items[math.random(#items)])


  elseif skill == "headbutt" then   --alterado v2.6

    local master = getCreatureMaster(sid)
    local array = {}
    local lvl = {25, 40, 60, 80, 1000} --lvls

    for i = 1, #lvl do
      if getPlayerLevel(master) <= lvl then
        array = headbutt[lvl]
        break
      end
    end
    local rand = array[math.random(#array)]
    for j = 1, rand[2] do
      local poke = doCreateMonster(rand[1], getClosestFreeTile(sid, pos))
      doSetMonsterPassive(poke)
      doWildAttackPlayer(poke, master)
    end
    local item = getTileItemById(pos, 12591)    --id do item   arvore normal
    doCreatureSay(sid, "HEADBUTT!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 118)
    doTransformItem(item.uid, 12592)  --id do item   arvore quebrada
    local function growHead()
      doTransformItem(getTileItemById(pos, 12592).uid, 12591) --id do item  arvore quebrada, arvore normal
    end
    addEvent(growHead, choose(5, 10, 20, 30) * 60 * 1000)   --o tempo pra arvore voltar ao normal varia de 5~30min

  elseif skill == "dig" then

    local item = getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})
    doCreatureSay(sid, "DIG!", TALKTYPE_MONSTER)
    markPos(sid, {x=1,y=1,z=7})
    doFaceCreature(sid, pos)
    doSendMagicEffect(getThingPos(item.uid), 3)
    doTransformItem(item.uid, item.itemid+1)
    local function closeHole()
      doTransformItem(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).uid, item.itemid)
    end
    addEvent(closeHole, intervalToRegrowBushAndStones * 1000)

  elseif skill == "fly" then
    local pokemon = flys[getPokemonName(getCreatureSummons(cid)[1])]
    doPlayerSendTextMessage(cid, 27, "Type \"up\" or \"h1\" to fly/levitate higher and \"down\" or \"h2\" to fly/levitate lower.") --alterado v2.8
    doChangeSpeed(cid, -getCreatureSpeed(cid))
    local speed = 500 + PlayerSpeed/5 + getSpeed(sid) * 6 * speedRate
    doChangeSpeed(cid, speed)
    setPlayerStorageValue(cid, 54844, speed)
    doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1)
    doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1]))
    doRemoveCreature(getCreatureSummons(cid)[1])
    setPlayerStorageValue(cid, 17000, 1)
    if getCreatureOutfit(cid).lookType == 667 or getCreatureOutfit(cid).lookType == 999 then
      markPosEff(cid, getThingPos(cid))
      sendMovementEffect(cid, 136, getThingPos(cid))     --edited efeito quando anda com o porygon
    end
    local item = getPlayerSlotItem(cid, ? --alteraod v2.8
    if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then
      sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])              --alterado v2.8
    end

    if useOTClient then
      doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
    end
    return true

  elseif skill == "ride" then

    local pokemon = rides[getPokemonName(getCreatureSummons(cid)[1])]
    doChangeSpeed(cid, -getCreatureSpeed(cid))
    local speed = 150 + PlayerSpeed + getSpeed(sid) * 5 * speedRate
    doChangeSpeed(cid, speed)
    setPlayerStorageValue(cid, 54844, speed)
    doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1)
    doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1]))
    doRemoveCreature(getCreatureSummons(cid)[1])
    setPlayerStorageValue(cid, 17001, 1)
    local item = getPlayerSlotItem(cid, ? --alteraod v2.8
    if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then
      sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
    end

    if useOTClient then
      doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
    end

    return true
  end

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

  addEvent(recheck, 120, sid)
end

function goThere(sid, thepos, skill, target, rept)
  if not isCreature(sid) then return true end
  if getCreatureNoMove(sid) or isSleeping(sid) or isParalyze(sid) then return true end            --alterado v2.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
    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

Teste e informe os resultados.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

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