Ir para conteúdo

[Duvida] Order Pokétibia


RafaKimura

Posts Recomendados

Boa maninhos ,

Minha Order está bugada , primeiro o pokémon fica travado ao andar . O order ao ser usado parece que não reconhece a árvore e fica apenas como ordem de movimento e não para o uso de headbutt (como se não houvesse árvore )

 

Arquivo Order.lua

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 queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2)
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 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 == "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 == "headbutt" then
local monsters = {"Ekans", "Pidgey", "Caterpie", "Spearow", "Pidgeotto", "Paras", "Weedle", "Taillow", "Illumise", "Nincada", "Volbeat", "Pineco", "Cascoon", "Silcoon", "Anorith", "Yanma"}
doCreateMonster(monsters[math.random(#monsters)], getPlayerPosition(cid))
local item = getTileItemById(pos, 2706)
doCreatureSay(sid, "HEADBUTT!", TALKTYPE_MONSTER)
markPos(sid, {x=1,y=1,z=7})
doFaceCreature(sid, pos)
doSendMagicEffect(getThingPos(item.uid), 119)
doTransformItem(item.uid, 2705)
local function growHead()
doTransformItem(getTileItemById(pos, 2705).uid, 2706)
end
addEvent(growHead, intervalToRegrowBushAndStones * 5000)
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 higher and \"down\" or \"h2\" to fly lower.")
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)
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)
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 getCreatureHideHealth(sid) or isSleeping(sid) then return true end
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
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

Link para o comentário
Compartilhar em outros sites

Tente trocar por esse

 

 

local skills = specialabilities

local surfborders = {4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663}
local storages = {17000, 63215, 17001, 13008, 5700} --alterado v2.9 \/
local unfix = {x = 1, y = 1, z = 1}
local txt = {
["rock smash"] = {"break that rock!", "smash that rock!", "destroy that rock!", "smash it!", "break it!", "destroy it!"},
["cut"] = {"cut that bush!", "cut it down!", "cut it off!", "cut off that bush!", "cut down that bush!", "cut that bush down!"},
["move"] = {"move!", "move there!", "go there!", "walk there!"},
["light"] = {"flash!", "light!", "flash this place!", "light up this place!"},
["dig"] = {"open that hole!", "dig that hole!", "open it!", "dig it!"},
["blink"] = {"teleport there!", "blink there!", "blink!", "teleport!"},
["ride"] = {"let me ride you!", "let's ride!", "let me mount you!", "let me get on you!"},
["fly"] = {"let's fly!", "let me get on you!"} ,
["untransform"] = {"go back to normal!", "transform into yourself again!", "stop transformation!"},
["headbutt"] = {"headbutt on three", "headbutt that three!", "headbutt it off"}, --alterado v2.6
["levitate_fly"] = {"let's levitate!", "let me get on you!", "let's scary someone!"}, --alterado v2.8
}
function onUse(cid, item, frompos, item2, topos)
local checkpos = topos
checkpos.stackpos = 0
if getPlayerStorageValue(cid, 75846) >= 1 then return true end --alterado v2.9
if getTileThingByPos(checkpos).uid <= 0 then return true end
--------END FLY/RIDE --------
if getCreatureCondition(cid, CONDITION_OUTFIT) and (item2.uid == cid or getRecorderPlayer(topos) == cid) and (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1) then
if isInArray({460, 11675, 11676, 11677}, getTileInfo(getThingPos(cid)).itemid) then
doPlayerSendCancel(cid, "You can\'t stop flying at this height!")
return true
end
local item = getPlayerSlotItem(cid, 8)
local pokemon = getItemAttribute(item.uid, "poke")
local x = pokes[pokemon]
if getTileInfo(getThingPos(cid)).itemid >= 4820 and getTileInfo(getThingPos(cid)).itemid <= 4825 then
doPlayerSendCancel(cid, "You can\'t stop flying above the water!")
return true
end
doSummonMonster(cid, pokemon)
local pk = getCreatureSummons(cid)[1]
if not isCreature(pk) then
pk = doCreateMonster(pokemon, backupPos)
if not isCreature(pk) then
doPlayerSendCancel(cid, "You can't stop flying/riding here.")
return true
end
doConvinceCreature(cid, pk)
end
doTeleportThing(pk, getThingPos(cid), false)
doCreatureSetLookDir(pk, getCreatureLookDir(cid))
adjustStatus(pk, item.uid, true, false, true)
doPlayerSay(cid, ""..getPokeName(getCreatureSummons(cid)[1])..", let me get down!", 1)
doRegainSpeed(cid) --alterado v2.7
doRemoveCondition(cid, CONDITION_OUTFIT)
setPlayerStorageValue(cid, 17000, -1)
setPlayerStorageValue(cid, 17001, -1)
if useOTClient then
doUpdateMoves(cid)
doPlayerSendCancel(cid, '12//,show')--alterado v2.9
end
return true
end
-----------------------------
local player = getRecorderPlayer(topos) --alterado v2.8 \/
-------- DUEL SYSTEM ------------------------
if isPlayer(player) and player ~= cid and getPlayerStorageValue(player, 6598754) <= -1 and getPlayerStorageValue(player, 52480) <= -1 then
if getPlayerStorageValue(cid, 52480) <= -1 or (getPlayerStorageValue(cid, 52481) >= 1 and getPlayerStorageValue(cid, 52482) ~= -1) then
---
for s = 1, #storages do
if getPlayerStorageValue(cid, storages) >= 1 then
return doPlayerSendTextMessage(cid, 20, "You can't do that while is Flying, Riding, Surfing, Diving or mount a bike!")
end
end
if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then
return doPlayerSendTextMessage(cid, 20, "You can't do that while in PVP zone!")
end
if #getCreatureSummons(cid) < 1 then
return doPlayerSendTextMessage(cid, 20, "You need a pokemon to invit someone to duel!")
end
---
if getPlayerStorageValue(cid, 52480) <= -1 then
doPlayerSetVocation(cid, 7)
openChannelDialog(cid)
setPlayerStorageValue(cid, 52480, 1)
setPlayerStorageValue(cid, 6598754, 5)
setPlayerStorageValue(cid, 52482, getCreatureName(cid)..",")
setPlayerStorageValue(cid, 52483, getCreatureName(player)..",")
doCreatureSetSkullType(cid, 2)
doSendAnimatedText(getThingPosWithDebug(cid), "FIRST TEAM", 215)
return true
elseif getPlayerStorageValue(cid, 52481) >= 1 and getPlayerStorageValue(cid, 52482) ~= -1 then
local t1 = string.explode(getPlayerStorageValue(cid, 52482), ",")
local t2 = string.explode(getPlayerStorageValue(cid, 52483), ",")
if (#t1 >= getPlayerStorageValue(cid, 52480) and #t2 >= getPlayerStorageValue(cid, 52480)) or (isInArray(t1, getCreatureName(player)) or isInArray(t2, getCreatureName(player))) then
return true
end
local sto2, sto3, name = getPlayerStorageValue(cid, 52482), getPlayerStorageValue(cid, 52483), getCreatureName(player)
if getPlayerStorageValue(cid, 52480) == 2 then
setPlayerStorageValue(cid, 52483, sto3.. name..",") --time adversario
doSendAnimatedText(getThingPosWithDebug(player), "SECOND TEAM", 215)
elseif getPlayerStorageValue(cid, 52480) == 3 and #t1 < 3 then
setPlayerStorageValue(cid, 52482, sto2.. name..",") --time aliado
doSendAnimatedText(getThingPosWithDebug(player), "FIRST TEAM", 215)
elseif getPlayerStorageValue(cid, 52480) == 3 and #t1 >= 3 then
setPlayerStorageValue(cid, 52483, sto3.. name..",") --time adversario
doSendAnimatedText(getThingPosWithDebug(player), "SECOND TEAM", 215)
end
setPlayerStorageValue(player, 52481, getPlayerStorageValue(cid, 52481))
setPlayerStorageValue(player, 52485, getCreatureName(cid))
local players, pokes = getPlayerStorageValue(cid, 52480), getPlayerStorageValue(cid, 52481) --alterado v1.9 \/
local str = {}
table.insert(str, getCreatureName(cid).." is inviting you to a duel! Use order in him to accept it!\n")
table.insert(str, "Info Battle: Duel "..players.."x"..players.." - "..pokes.." pokes.")
doPlayerSendTextMessage(player, 20, table.concat(str))
return true
end
end
---
elseif isPlayer(player) and player ~= cid and getPlayerStorageValue(player, 6598754) == 5 and getPlayerStorageValue(player, 52481) >= 1 then
local t1 = string.explode(getPlayerStorageValue(player, 52482), ",")
local t2 = string.explode(getPlayerStorageValue(player, 52483), ",")
---
if not isInArray(t1, getCreatureName(cid)) and not isInArray(t2, getCreatureName(cid)) then
return true
end
---
for s = 1, #storages do
if getPlayerStorageValue(cid, storages) >= 1 then
return doPlayerSendTextMessage(cid, 20, "You can't do that while is Flying, Riding, Surfing, Diving or mount a bike!")
end
end
if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then
return doPlayerSendTextMessage(cid, 20, "You can't do that while in PVP zone!")
end
local pokes = getLivePokeballs(cid, getPlayerSlotItem(cid, 3).uid, true)
if #pokes < getPlayerStorageValue(player, 52481) then
return doPlayerSendTextMessage(cid, 20, "You need atleast ".. getPlayerStorageValue(player, 52481).." pokemons to duel with this person!")
end
if getPlayerStorageValue(cid, 52482) ~= -1 then
return doPlayerSendTextMessage(cid, 20, "You already invit someone to duel!")
end
if #getCreatureSummons(cid) < 1 then
return doPlayerSendTextMessage(cid, 20, "You need a pokemon to accept a duel!")
end
---
setPlayerStorageValue(cid, 52480, getPlayerStorageValue(player, 52480))
setPlayerStorageValue(player, 52484, getPlayerStorageValue(player, 52484)-1)
if getPlayerStorageValue(player, 52484) == 0 then
for a = 1, #t1 do
local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a])
if not isCreature(pid) or getPlayerStorageValue(pid, 52480) <= -1 then
removeFromTableDuel(player, t1[a])
else
doCreatureSetSkullType(pid, 1)
end
if not isCreature(sid) or getPlayerStorageValue(sid, 52480) <= -1 then
removeFromTableDuel(player, t2[a])
else
doCreatureSetSkullType(sid, 1)
end
end
beginDuel(player, 6)
else
doCreatureSetSkullType(cid, 2)
end
doSendAnimatedText(getThingPos(cid), "BATTLE", COLOR_ELECTRIC)
return true
elseif isPlayer(player) and player == cid and getPlayerStorageValue(player, 52480) >= 1 then
doEndDuel(cid, true)
return true
end
------------------------------------------------------------------------------------
if #getCreatureSummons(cid) == 0 then return doPlayerSendCancel(cid, "You need a pokemon to use order!") end
if getCreatureNoMove(getCreatureSummons(cid)[1]) then return true end
markLP(getCreatureSummons(cid)[1], -1)
if getMarkedPos(getCreatureSummons(cid)[1]).x == topos.x and getMarkedPos(getCreatureSummons(cid)[1]).y == topos.y then
return true
end
local thisball = getPlayerSlotItem(cid, 8)
local mysum = getCreatureSummons(cid)[1]
local sid = mysum or cid
local maxMoveDist = getDistanceBetween(getThingPos(sid), topos) * 2 + 1
markPos(mysum, topos)
markOwnerPos(mysum, getThingPos(cid))
-------- ROCK SMASH ---------
if item2.itemid == 1285 and isInArray(skills["rock smash"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["rock smash"][math.random(1, #txt["rock smash"])].."", 1)
addEvent(goThere, 500, mysum, topos, "rock smash", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
-------- HEADBUTT -----------
if item2.itemid == 12591 and getPokemonLevel(mysum) >= 15 then --alterado v2.6
--id do item arvore normal
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["headbutt"][math.random(1, #txt["headbutt"])].."", 1)
addEvent(goThere, 500, mysum, topos, "headbutt", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
-------- CUT ----------------
if item2.itemid == 2767 and isInArray(skills["cut"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["cut"][math.random(1, #txt["cut"])].."", 1)
addEvent(goThere, 500, mysum, topos, "cut", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
-------- TRANSFORM ----------
if getCreatureName(mysum) == "Ditto" and isMonster(item2.uid) and pokes[getCreatureName(item2.uid)] then --alterado v2.7
if item2.uid == mysum then
if isTransformed(mysum) then
deTransform(mysum, getItemAttribute(thisball.uid, "transTurn"))
markPos(mysum, unfix)
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["untransform"][math.random(1, #txt["untransform"])].."", 1)
if useKpdoDlls then
doUpdateMoves(cid) --alterado v2.9
end
return true
end
doPlayerSendCancel(cid, "Your ditto is not transformed.")
markPos(mysum, unfix)
return true
end
if getCreatureName(item2.uid) == "Ditto" then
doPlayerSendCancel(cid, "Your ditto can't transform into another ditto.")
markPos(mysum, unfix)
return true
end
if getCreatureName(item2.uid) == getPlayerStorageValue(mysum, 1010) then
doPlayerSendCancel(cid, "Your ditto is already transformed into that pokemon.")
markPos(mysum, unfix)
return true
end
local cd = getCD(thisball.uid, "trans", 40)
if cd > 0 then
doPlayerSendCancel(cid, "Your pokemon is too tired to transform again. Cooldown: ("..getStringmytempo(cd)..")")
return true
end
if getHappiness(mysum) <= 50 then
doSendMagicEffect(getThingPos(mysum), happinessRate[1].effect)
markPos(mysum, unfix)
return true
end
local turn = getItemAttribute(thisball.uid, "transTurn")
if not turn or turn > 10 then
doItemSetAttribute(thisball.uid, "transTurn", 0)
else
doItemSetAttribute(thisball.uid, "transTurn", turn + 1)
end
local time = 140 + 2 * getPokemonLevel(mysum)
turn = getItemAttribute(thisball.uid, "transTurn")
markPos(mysum, unfix)
setPlayerStorageValue(mysum, 1010, getCreatureName(item2.uid))
doSetCreatureOutfit(mysum, {lookType = getPokemonXMLOutfit(getCreatureName(item2.uid))}, -1) --alterado v2.8
addEvent(deTransform, time * 1000, mysum, turn)
doSendMagicEffect(getThingPos(mysum), 184)
doCreatureSay(mysum, "TRANSFORM!", TALKTYPE_MONSTER)
local name = getCreatureName(item2.uid)
setCD(thisball.uid, "trans", 40)
doItemSetAttribute(thisball.uid, "transBegin", os.clock())
doSetItemAttribute(thisball.uid, "transLeft", time)
doSetItemAttribute(thisball.uid, "transOutfit", getPokemonXMLOutfit(getCreatureName(item2.uid))) --alterado v2.8
doSetItemAttribute(thisball.uid, "transName", getCreatureName(item2.uid))
doFaceCreature(mysum, getThingPos(item2.uid))
doPlayerSay(cid, ""..getPokeName(mysum)..", transform into "..getArticle(name).." "..name.."!", 1)
if useKpdoDlls then
doUpdateMoves(cid) --alterado v2.6
end
if dittoCopiesStatusToo then
doSetItemAttribute(thisball.uid, "boffense", dittoBonus * getOffense(item2.uid))
doSetItemAttribute(thisball.uid, "bdefense", dittoBonus * getDefense(item2.uid))
doSetItemAttribute(thisball.uid, "bsattack", dittoBonus * getSpecialAttack(item2.uid))
doSetItemAttribute(thisball.uid, "bagility", dittoBonus * getSpeed(item2.uid))
adjustStatus(mysum, thisball.uid)
end
return true
end
-----------------------------
-------- LIGHT --------------
if isMonster(item2.uid) and getCreatureMaster(item2.uid) == cid then
markPos(mysum, unfix)
if not isInArray(skills["light"], getPokemonName(item2.uid)) then
doPlayerSendCancel(cid, "Your pokemon can't use flash.")
return true
end
local cd = getCD(thisball.uid, "light", 30)
if cd > 0 then
doPlayerSendCancel(cid, "Your pokemon is too tired to use flash. Cooldown: ("..getStringmytempo(cd)..")")
return true
end
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["light"][math.random(1, #txt["light"])].."", 1)
doCreatureSay(mysum, "FLASH!", TALKTYPE_MONSTER)
doSendMagicEffect(getThingPos(mysum), 28)
local size = 5
size = size + math.floor(getSpecialAttack(mysum) / 60)
size = size + math.ceil(getPokemonLevel(mysum) / 60)
if size > 11 then
size = 11
end
doSetCreatureLight(mysum, size, 215, 600*1000)
local delay = math.floor(30 - getPokemonLevel(mysum) / 4)
if delay > 0 then
setCD(thisball.uid, "light", delay)
end
return true
end
-----------------------------
-------- DIG ----------------
if isInArray(skills["digholes"], item2.itemid) and isInArray(skills["dig"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["dig"][math.random(1, #txt["dig"])].."", 1)
addEvent(goThere, 500, mysum, topos, "dig", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
-------- BLINK / MOVE -------
if not isCreature(item2.uid) and isInArray(skills["blink"], getPokemonName(mysum)) then
local cd = getCD(thisball.uid, "blink", 30)
if getPlayerStorageValue(mysum, 2365487) == 1 then
return true --alterado v2.4
end
if cd > 0 or not canWalkOnPos(topos, false, false, true, true, true) then
doPlayerSendCancel(cid, "Blink cooldown: ("..getStringmytempo(cd)..")")
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["move"][math.random(1, #txt["move"])].."", 1)
addEvent(goThere, 500, mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)
return true
end
local CD = isShinyName(getCreatureName(mysum)) and 20 or 30 --edited blink
markPos(mysum, topos)
markOwnerPos(mysum, getThingPos(cid))
setCD(thisball.uid, "blink", CD)
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["blink"][math.random(1, #txt["blink"])].."", 1)
doSendDistanceShoot(getThingPos(mysum), topos, 39)
doSendMagicEffect(getThingPos(mysum), 211)
doTeleportThing(mysum, topos, false)
doSendMagicEffect(topos, 134)
doCreatureSay(mysum, "BLINK!", TALKTYPE_MONSTER)
goThere(mysum, topos, "blink", isCreature(getCreatureTarget(cid))) --edited blink
return true
end
-----------------------------
----START FLYorRIDE ---------
if (item2.uid == cid or getRecorderPlayer(topos) == cid) and (isInArray(skills["fly"], getPokemonName(mysum)) or isInArray(skills["ride"], getPokemonName(mysum)) or isInArray(skills["levitate_fly"], getPokemonName(mysum))) then
if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then
return doPlayerSendCancel(cid, "You can't do it while in the PVP Zone!") --alterado v2.7
end
if getPlayerStorageValue(cid, 212124) >= 1 then --alterado v2.6
return doPlayerSendCancel(cid, "You can't do it with a pokemon with mind controlled!")
end
if getPlayerStorageValue(cid, 52480) >= 1 then
return doPlayerSendCancel(cid, "You can't do it while a duel!")
end
if getPlayerStorageValue(cid, 5700) == 1 then
doPlayerSendCancel(cid, "You can't do that while is mount in a bike!") --edited proteçao pra bike
return true
end
if getPlayerStorageValue(cid, 22545) >= 1 and (isInArray(skills["fly"], getPokemonName(mysum)) or isInArray(skills["levitate_fly"], getPokemonName(mysum))) then
return doPlayerSendCancel(cid, "You can't do that while in the Golden Arena!")
end
local pct = getCreatureHealth(mysum) / getCreatureMaxHealth(mysum)
doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", 1 - pct)
if isInArray(skills["fly"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["fly"][math.random(1, #txt["fly"])].."", 1)
addEvent(goThere, 500, mysum, topos, "fly", isCreature(getCreatureTarget(cid)))
elseif isInArray(skills["levitate_fly"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["levitate_fly"][math.random(1, #txt["levitate_fly"])].."", 1)
addEvent(goThere, 500, mysum, topos, "fly", isCreature(getCreatureTarget(cid)))
else
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["ride"][math.random(1, #txt["ride"])].."", 1)
addEvent(goThere, 500, mysum, topos, "ride", isCreature(getCreatureTarget(cid)))
end
return true
end
----------------------------------Control Mind--------------------------------------------
if isCreature(item2.uid) and ehMonstro(item2.uid) and isInArray(skills["control mind"], getCreatureName(mysum)) and item2.uid ~= mysum then
if not isCreature(item2.uid) then
return true
end
if isSleeping(mysum) then
return doPlayerSendCancel(cid, "Your pokemon is sleeping...zZzZ")
end
if getTileInfo(getThingPos(cid)).protection or getTileInfo(getThingPos(getCreatureSummons(cid)[1])).protection then
return doPlayerSendCancel(cid, "You or your pokemon are in Pz zone!")
end
if #getCreatureSummons(cid) == 2 then
return doPlayerSendCancel(cid, "You only can control one Pokemon!")
end
local cd = getCD(thisball.uid, "control", 120)
if cd > 0 then
doPlayerSendCancel(cid, "You have to wait "..cd.." segs to use Control Mind again!")
return true
end
if getPokemonLevel(item2.uid) >= getPokemonLevel(mysum) then
return doPlayerSendCancel(cid, "Your pokemon can't control this mind!")
end
if getPlayerStorageValue(cid, 22545) >= 1 then --alterado v2.7
return doPlayerSendCancel(cid, "You can't do that while in the Golden Arena!")
end
local cmed = item2.uid
setCD(thisball.uid, "control", 120)
doSendDistanceShoot(getThingPos(mysum), getThingPos(cmed), 39)
--------------
setPlayerStorageValue(cid, 212124, 1)
doConvinceCreature(cid, cmed)
setPlayerStorageValue(cmed, 212123, 1)
doCreatureSay(cid, ""..getCreatureName(mysum)..", control "..string.lower(getCreatureName(cmed)).."'s mind!", 1)
local cmname = getCreatureName(mysum)
local cmpos = getThingPos(mysum)
local pokelife = (getCreatureHealth(mysum) / getCreatureMaxHealth(mysum))
doItemSetAttribute(thisball.uid, "hp", pokelife)
doRemoveCreature(mysum)
local cmzao = doSummonCreature(""..cmname.." cm", cmpos)
doConvinceCreature(cid, cmzao)
setPlayerStorageValue(cid, 888, 1)
if useKpdoDlls then
doUpdateMoves(cid)
end
local function check(cid, controled, rod)
if isCreature(cid) then
ball2 = getPlayerSlotItem(cid, 8)
if getPlayerStorageValue(cid, 888) <= 0 then
return true
end
if not isCreature(controled) then
setPlayerStorageValue(cid, 212124, 0)
local sum = isCreature(getCreatureSummons(cid)[1]) and getCreatureSummons(cid)[1] or getCreatureSummons(cid)[2]
local pkcmpos = getThingPos(sum)
doRemoveCreature(sum)
local item = getPlayerSlotItem(cid, 8)
local pk = doSummonCreature(getItemAttribute(item.uid, "poke"), pkcmpos)
doConvinceCreature(cid, pk)
doCreatureSetLookDir(getCreatureSummons(cid)[1], 2)
addEvent(doAdjustWithDelay, 100, cid, pk, true, true, false)
setPlayerStorageValue(cid, 888, -1)
cleanCMcds(item.uid)
registerCreatureEvent(pk, "SummonDeath")
if useKpdoDlls then
doUpdateMoves(cid)
end
return true
end
if rod <= 0 then
--Pokemon controlado
local cmed2 = getCreatureSummons(cid)[1]
local poscmed = getThingPos(cmed2)
local cmeddir = getCreatureLookDir(cmed2)
local namecmed = getCreatureName(cmed2)
local gender = getPokemonGender(cmed2)
local level = getWildPokemonLevel(cmed2)
local hp, maxHp = getCreatureHealth(getCreatureSummons(cid)[1]), getCreatureMaxHealth(getCreatureSummons(cid)[1])
doRemoveCreature(getCreatureSummons(cid)[1])
local back = doCreateMonster(namecmed, poscmed)
addEvent(doCreatureSetSkullType, 150, back, gender)
addEvent(setWildPokemonLevel, 150, back, level)
doWildAttackPlayer(back, cid)
doCreatureSetLookDir(back, cmeddir)
addEvent(doCreatureAddHealth, 100, back, hp-maxHp)
-- pokemon controlador
local mynewpos = getThingPos(getCreatureSummons(cid)[1])
doRemoveCreature(getCreatureSummons(cid)[1])
local pk2 = doSummonCreature(getItemAttribute(ball2.uid, "poke"), mynewpos)
doConvinceCreature(cid, pk2)
addEvent(doAdjustWithDelay, 100, cid, pk2, true, true, false)
setPlayerStorageValue(cid, 888, -1) --alterado v2.7
doCreatureSetLookDir(getCreatureSummons(cid)[1], 2)
setPlayerStorageValue(cid, 212124, 0)
cleanCMcds(ball2.uid)
registerCreatureEvent(pk2, "SummonDeath")
if useKpdoDlls then
doUpdateMoves(cid)
end
else
if isInArray({"Haunter", "Gengar", "Shiny Gengar"}, cmname) then
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 214)
else
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 220)
end
end
end
addEvent(check, 500, cid, controled, rod-1)
end
check(cid, cmed, 40)
return true
end
---------------------------------------------------------------------
-------- MOVE / END ---------
local onlyWater = false
if isWater(getTileThingByPos(checkpos).itemid) then
onlyWater = true
for checkwater = 0, 7 do
if not isWater(getTileThingByPos(getPosByDir(checkpos, checkwater)).itemid) then
onlyWater = false
end
end
end
if onlyWater then
doPlayerSendCancel(cid, "Destination is not reachable.")
return true
end
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["move"][math.random(1, #txt["move"])].."", 1)
if isCreature(getCreatureTarget(cid)) then
goThere(mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)
else
addEvent(goThere, 500, mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)
end
-----------------------------
return true
end

Link para o comentário
Compartilhar em outros sites

Ata obg zipter então tenta esse qui cara

 

 

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 recheck(sid, skill, pos)
if not isCreature(sid) or not isCreature(getCreatureMaster(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 == "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 == "headbutt" then --alterado v1.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
if not isPremium(cid) then
doPlayerSendCancel(cid, "Only premium members are allowed to fly.")
return true
end
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 v1.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, 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 v1.8
end
if useOTClient then
doPlayerSendCancel(cid, '12//,hide') --alterado v1.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, 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 v1.8
end
if useOTClient then
doPlayerSendCancel(cid, '12//,hide') --alterado v1.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) 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

Não funcionou não e.e

 

Aqui está a order do Action .

 

 

local skills = specialabilities

local surfborders = {4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663}
local txt = {
["rock smash"] = {"Quebre esta pedra!!", "Mova esta pedra!!", "Destrua esta pedra!!", "quebre isso!", "grrrr!", "destrua isso!!"},
["cut"] = {"Corte isso!"},
["move"] = {"mova-se!!", "vai ali!", "Fique ai!"},
["light"] = {"aqui esta meio escuro, vai uma luz ae!!"},
["dig"] = {"abra isso!"},
["blink"] = {"teleporte!"},
["ride"] = {"Ride!!", "Ride!", "deixe-me montar em você!"},
["fly"] = {"Let's Fly GOGO!"} ,
["untransform"] = {"Transforme em você novamente!"},
}
-- NAME OUTFIT SPEED
local flys = {
["Moltres"] = {229, 2300}, -- moltres
["Articuno"] = {230, 2100}, -- artic
["Zapdos"] = {224, 2600}, -- zapdos
["Mew"] = {232, 2200}, -- 1000
["Mewtwo"] = {233, 2200},-- two
["Dragonite"] = {221, 1300},-- nite
["Pidgeot"] = {222, 900}, -- geot
["Fearow"] = {226, 800}, -- fearow
["Aerodactyl"] = {227, 1100}, -- aero
["Charizard"] = {216, 1000}, -- chari
["Porygon"] = {316, 600}, -- porygon
}
function onUse(cid, item, frompos, item2, topos)
local checkpos = topos
checkpos.stackpos = 0
if getTileThingByPos(checkpos).uid <= 0 then return true end
--------END FLY/RIDE --------
local premium = false
if not isPremium(cid) then
doPlayerSendCancel(cid, "Vc nao é premium, Vaza.")
return true
end
if getCreatureCondition(cid, CONDITION_OUTFIT) and (item2.uid == cid or getRecorderPlayer(topos) == cid) and (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1) then
if isInArray({460, 11675, 11676, 11677}, getTileInfo(getThingPos(cid)).itemid) then
doPlayerSendCancel(cid, "Você não pode parar de voar nesta altura, senão você cai!!")
return true
end
local item = getPlayerSlotItem(cid, 8)
local pokemon = getItemAttribute(item.uid, "poke")
local x = pokes[pokemon]
if getTileInfo(getThingPos(cid)).itemid >= 4820 and getTileInfo(getThingPos(cid)).itemid <= 4825 then
doPlayerSendCancel(cid, "Você não pode parar de voar sobre a água!")
return true
end
doSummonMonster(cid, pokemon)
local pk = getCreatureSummons(cid)[1]
if not isCreature(pk) then
pk = doCreateMonster(pokemon, backupPos)
if not isCreature(pk) then
doPlayerSendCancel(cid, "Você não pode parar de voar ou montar aqui.")
return true
end
doConvinceCreature(cid, pk)
end
doTeleportThing(pk, getThingPos(cid), false)
doCreatureSetLookDir(pk, getCreatureLookDir(cid))
adjustStatus(pk, item.uid, true, false, true)
doPlayerSay(cid, ""..getPokeName(getCreatureSummons(cid)[1])..", quero decer!", 1)
doChangeSpeed(cid, - getCreatureSpeed(cid))
doChangeSpeed(cid, PlayerSpeed)
doRemoveCondition(cid, CONDITION_OUTFIT)
setPlayerStorageValue(cid, 17000, -1)
setPlayerStorageValue(cid, 17001, -1)
return true
end
-----------------------------
if #getCreatureSummons(cid) == 0 then return doPlayerSendCancel(cid, "Você precisa de um pokemon para usar o order!") end
if getCreatureNoMove(getCreatureSummons(cid)[1]) then return true end
markLP(getCreatureSummons(cid)[1], -1)
if getMarkedPos(getCreatureSummons(cid)[1]).x == topos.x and getMarkedPos(getCreatureSummons(cid)[1]).y == topos.y then
return true
end
local unfix = {x = 1, y = 1, z = 1}
local thisball = getPlayerSlotItem(cid, 8)
local mysum = getCreatureSummons(cid)[1]
local sid = mysum or cid
local maxMoveDist = getDistanceBetween(getThingPos(sid), topos) * 2 + 1
markPos(mysum, topos)
markOwnerPos(mysum, getThingPos(cid))
-------- ROCK SMASH ---------
if item2.itemid == 1285 and isInArray(skills["rock smash"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["rock smash"][math.random(1, #txt["rock smash"])].."", 1)
addEvent(goThere, 500, mysum, topos, "rock smash", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
-------- CUT ----------------
if item2.itemid == 2767 and isInArray(skills["cut"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["cut"][math.random(1, #txt["cut"])].."", 1)
addEvent(goThere, 500, mysum, topos, "cut", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
-------- TRANSFORM ----------
if getCreatureName(mysum) == "Ditto" and isMonster(item2.uid) then
if item2.uid == mysum then
if isTransformed(mysum) then
deTransform(mysum, getItemAttribute(thisball.uid, "transTurn"))
markPos(mysum, unfix)
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["untransform"][math.random(1, #txt["untransform"])].."", 1)
return true
end
doPlayerSendCancel(cid, "Seu ditto não esta transformado.")
markPos(mysum, unfix)
return true
end
if getCreatureName(item2.uid) == "Ditto" then
doPlayerSendCancel(cid, "Seu Ditto não pode se transformar em outro Ditto!")
markPos(mysum, unfix)
return true
end
if getCreatureName(item2.uid) == getPlayerStorageValue(mysum, 1010) then
doPlayerSendCancel(cid, "Seu Ditto já esta transformado.")
markPos(mysum, unfix)
return true
end
local cd = getCD(thisball.uid, "trans", 40)
if cd > 0 then
doPlayerSendCancel(cid, "Seu Ditto esta muito cançado para realizar esta ação! Cooldown: ("..getStringmytempo(cd)..")")
return true
end
if getHappiness(mysum) <= 50 then
doSendMagicEffect(getThingPos(mysum), happinessRate[1].effect)
markPos(mysum, unfix)
return true
end
local turn = getItemAttribute(thisball.uid, "transTurn")
if not turn or turn > 10 then
doItemSetAttribute(thisball.uid, "transTurn", 0)
else
doItemSetAttribute(thisball.uid, "transTurn", turn + 1)
end
local time = 140 + 2 * getPokemonLevel(mysum)
turn = getItemAttribute(thisball.uid, "transTurn")
markPos(mysum, unfix)
setPlayerStorageValue(mysum, 1010, getCreatureName(item2.uid))
doSetCreatureOutfit(mysum, getCreatureOutfit(item2.uid), -1)
addEvent(deTransform, time * 1000, mysum, turn)
doSendMagicEffect(getThingPos(mysum), 184)
doCreatureSay(mysum, "TRANSFORM!", TALKTYPE_MONSTER)
local name = getCreatureName(item2.uid)
setCD(thisball.uid, "trans", 40)
doItemSetAttribute(thisball.uid, "transBegin", os.clock())
doSetItemAttribute(thisball.uid, "transLeft", time)
doSetItemAttribute(thisball.uid, "transOutfit", getCreatureOutfit(item2.uid).lookType)
doSetItemAttribute(thisball.uid, "transName", getCreatureName(item2.uid))
doFaceCreature(mysum, getThingPos(item2.uid))
doPlayerSay(cid, ""..getPokeName(mysum)..", transforme-se em um "..getArticle(name).." "..name.."!", 1)
if dittoCopiesStatusToo then
doSetItemAttribute(thisball.uid, "boffense", dittoBonus * getOffense(item2.uid))
doSetItemAttribute(thisball.uid, "bdefense", dittoBonus * getDefense(item2.uid))
doSetItemAttribute(thisball.uid, "bsattack", dittoBonus * getSpecialAttack(item2.uid))
doSetItemAttribute(thisball.uid, "bagility", dittoBonus * getSpeed(item2.uid))
adjustStatus(mysum, thisball.uid)
end
return true
end
-----------------------------
-------- TRANSFORM ----------
if getCreatureName(mysum) == "Shiny Ditto" and isMonster(item2.uid) then
if item2.uid == mysum then
if isTransformed(mysum) then
deTransform(mysum, getItemAttribute(thisball.uid, "transTurn"))
markPos(mysum, unfix)
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["untransform"][math.random(1, #txt["untransform"])].."", 1)
return true
end
doPlayerSendCancel(cid, "Seu Shiny ditto não esta transformado.")
markPos(mysum, unfix)
return true
end
if getCreatureName(item2.uid) == "Shiny Ditto" then
doPlayerSendCancel(cid, "Seu Shiny Ditto não pode se transformar em outro Ditto!")
markPos(mysum, unfix)
return true
end
if getCreatureName(item2.uid) == getPlayerStorageValue(mysum, 1010) then
doPlayerSendCancel(cid, "Seu Shiny Ditto já esta transformado.")
markPos(mysum, unfix)
return true
end
local cd = getCD(thisball.uid, "trans", 40)
if cd > 0 then
doPlayerSendCancel(cid, "Seu Shiny Ditto esta muito cançado para realizar esta ação! Cooldown: ("..getStringmytempo(cd)..")")
return true
end
if getHappiness(mysum) <= 50 then
doSendMagicEffect(getThingPos(mysum), happinessRate[1].effect)
markPos(mysum, unfix)
return true
end
local turn = getItemAttribute(thisball.uid, "transTurn")
if not turn or turn > 10 then
doItemSetAttribute(thisball.uid, "transTurn", 0)
else
doItemSetAttribute(thisball.uid, "transTurn", turn + 1)
end
local time = 140 + 2 * getPokemonLevel(mysum)
turn = getItemAttribute(thisball.uid, "transTurn")
markPos(mysum, unfix)
setPlayerStorageValue(mysum, 1010, getCreatureName(item2.uid))
doSetCreatureOutfit(mysum, getCreatureOutfit(item2.uid), -1)
addEvent(deTransform, time * 1000, mysum, turn)
doSendMagicEffect(getThingPos(mysum), 184)
doCreatureSay(mysum, "TRANSFORM!", TALKTYPE_MONSTER)
local name = getCreatureName(item2.uid)
setCD(thisball.uid, "trans", 40)
doItemSetAttribute(thisball.uid, "transBegin", os.clock())
doSetItemAttribute(thisball.uid, "transLeft", time)
doSetItemAttribute(thisball.uid, "transOutfit", getCreatureOutfit(item2.uid).lookType)
doSetItemAttribute(thisball.uid, "transName", getCreatureName(item2.uid))
doFaceCreature(mysum, getThingPos(item2.uid))
doPlayerSay(cid, ""..getPokeName(mysum)..", transforme-se em um "..getArticle(name).." "..name.."!", 1)
if dittoCopiesStatusToo then
doSetItemAttribute(thisball.uid, "boffense", dittoBonus * getOffense(item2.uid))
doSetItemAttribute(thisball.uid, "bdefense", dittoBonus * getDefense(item2.uid))
doSetItemAttribute(thisball.uid, "bsattack", dittoBonus * getSpecialAttack(item2.uid))
doSetItemAttribute(thisball.uid, "bagility", dittoBonus * getSpeed(item2.uid))
adjustStatus(mysum, thisball.uid)
end
return true
end
-----------------------------
-------- LIGHT --------------
if isMonster(item2.uid) and getCreatureMaster(item2.uid) == cid then
markPos(mysum, unfix)
if not isInArray(skills["light"], getPokemonName(item2.uid)) then
doPlayerSendCancel(cid, "Seu pokemon não tem a habilidade Flash.")
return true
end
local cd = getCD(thisball.uid, "light", 30)
if cd > 0 then
doPlayerSendCancel(cid, "Seu pokemon esta muito cansado para realizar esta ação novamente. Cooldown: ("..getStringmytempo(cd)..")")
return true
end
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["light"][math.random(1, #txt["light"])].."", 1)
doCreatureSay(mysum, "FLASH!", TALKTYPE_MONSTER)
doSendMagicEffect(getThingPos(mysum), 28)
local size = 5
size = size + math.floor(getSpecialAttack(mysum) / 60)
size = size + math.ceil(getPokemonLevel(mysum) / 60)
if size > 11 then
size = 11
end
doSetCreatureLight(mysum, size, 215, 600*1000)
local delay = math.floor(30 - getPokemonLevel(mysum) / 4)
if delay > 0 then
setCD(thisball.uid, "light", delay)
end
return true
end
-----------------------------
-------- DIG ----------------
if isInArray(skills["digholes"], item2.itemid) and isInArray(skills["dig"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["dig"][math.random(1, #txt["dig"])].."", 1)
addEvent(goThere, 500, mysum, topos, "dig", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
-------- BLINK / MOVE -------
if not isCreature(item2.uid) and isInArray(skills["blink"], getPokemonName(mysum)) then
local cd = getCD(thisball.uid, "blink", 170)
if cd > 0 or not canWalkOnPos(topos, false, false, true, true, true) then
doPlayerSendCancel(cid, "Blink cooldown: ("..getStringmytempo(cd)..")")
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["move"][math.random(1, #txt["move"])].."", 1)
addEvent(goThere, 500, mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)
return true
end
local distance = getDistanceBetween(getThingPos(mysum), topos)
markPos(mysum, unfix)
setCD(thisball.uid, "blink", distance * 12)
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["blink"][math.random(1, #txt["blink"])].."", 1)
doSendDistanceShoot(getThingPos(mysum), topos, 39)
doSendMagicEffect(getThingPos(mysum), 211)
doTeleportThing(mysum, topos, false)
doSendMagicEffect(topos, 134)
doCreatureSay(mysum, "BLINK!", TALKTYPE_MONSTER)
goThere(mysum, topos, "move", isCreature(getCreatureTarget(cid)))
return true
end
-----------------------------
----START FLYorRIDE ---------
if (item2.uid == cid or getRecorderPlayer(topos) == cid) and (isInArray(skills["fly"], getPokemonName(mysum)) or isInArray(skills["ride"], getPokemonName(mysum))) then
--if not isPremium(cid) then
--doPlayerSendCancel(cid, "Apenas pessoas premium podem voar ou montar.")
--return true
--end
local pct = getCreatureHealth(mysum) / getCreatureMaxHealth(mysum)
doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", 1 - pct)
if isInArray(skills["fly"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["fly"][math.random(1, #txt["fly"])].."", 1)
addEvent(goThere, 500, mysum, topos, "fly", isCreature(getCreatureTarget(cid)))
else
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["ride"][math.random(1, #txt["ride"])].."", 1)
addEvent(goThere, 500, mysum, topos, "ride", isCreature(getCreatureTarget(cid)))
end
return true
end
-----------------------------
-------- MOVE / END ---------
local onlyWater = false
if isWater(getTileThingByPos(checkpos).itemid) then
onlyWater = true
for checkwater = 0, 7 do
if not isWater(getTileThingByPos(getPosByDir(checkpos, checkwater)).itemid) then
onlyWater = false
end
end
end
if onlyWater then
doPlayerSendCancel(cid, "")
return true
end
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["move"][math.random(1, #txt["move"])].."", 1)
if isCreature(getCreatureTarget(cid)) then
goThere(mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)
else
addEvent(goThere, 500, mysum, topos, "move", isCreature(getCreatureTarget(cid)), maxMoveDist)
end
return true
end
-----------------------------

Assim , a habilidade headbutt não funciona e os pokes só andam travando quando uso move '-' parece que os membros estão congelados
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...