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
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
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
----- 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)])
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
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
Pergunta
wevertonvrb 25
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
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
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