Ir para conteúdo

[Encerrado] [Duvida] Headbutt


victormoaz

Posts Recomendados

Estou com um problema no meu Headbutt...

 

Eu uso o order na arvore... O pokemon vai ate ela, a msg aparece... mas não aparece os pokemons nem muda o id da arvore...

 

Alguem sabe o que pode ser?

 

obs.: não dá erro no console.

Link para o comentário
Compartilhar em outros sites

cleba

mano como q tu me poe um char lvl 1000+?

clr q vai da problema.. se tu ver na lib/configuration.lua na tabela headbutt vai ver q o ultimo valor eh 1000

[1000] = {{"Forretress", 3}, {"Noctowl", 2}, {"Xatu", 2}, {"Yanma", 4}, {"Beedrill", 6}, {"Furret", 6}},

botei isso para vir esses pokes pra qlqr outro lvl acima de 80... mas nunca pensei q alguem ia por lvl 1000 num char u,U

 

@topic

n me diga q tas tentando com um char lvl 1000+ tb neh? ou com um poke com lvl menor q 15...

Link para o comentário
Compartilhar em outros sites

Não... char lvl 180.... Pokemon usado, venusaur!

 

ORDER:

 

 

 

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"] = {"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 v1.6

}

 

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 --------

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 v1.7

 

doRemoveCondition(cid, CONDITION_OUTFIT)

setPlayerStorageValue(cid, 17000, -1)

setPlayerStorageValue(cid, 17001, -1)

 

return true

end

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

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

if isPlayer(item2.uid) and (item2.uid ~= cid or getRecorderPlayer(topos) ~= cid) and getPlayerStorageValue(item2.uid, 6598754) <= -1 and getPlayerStorageValue(item2.uid, 52480) <= -1 and getCreatureOutfit(item2.uid).lookType ~= 814 then

---

if getPlayerStorageValue(cid, 52480) >= 1 then --alterado v1.6.1

return doPlayerSendTextMessage(cid, 20, "You already invited somebody to duel or already is dueling with somebody")

end

local storages = {17000, 63215, 17001, 13008, 5700}

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 player = getRecorderPlayer(topos) --alterado v1.6.1

doPlayerSetVocation(cid, 51)

openChannelDialog(cid)

setPlayerStorageValue(cid, 52480, 1)

setPlayerStorageValue(cid, 6598754, 5)

setPlayerStorageValue(cid, 52482, getCreatureName(player)) --alterado v1.6.1

setPlayerStorageValue(cid, 52483, 0)

doCreatureSetSkullType(cid, 2)

return true

 

elseif isPlayer(item2.uid) and (item2.uid ~= cid or getRecorderPlayer(topos) ~= cid) and getPlayerStorageValue(item2.uid, 6598754) == 5 and getCreatureOutfit(item2.uid).lookType ~= 814 then

---

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

return true --alterado v1.6.1

end

if getPlayerStorageValue(cid, 52480) >= 1 then

return doPlayerSendTextMessage(cid, 20, "You already invited somebody to duel or already is dueling with somebody")

end

local storages = {17000, 63215, 17001, 13008, 5700}

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

--- --alterado v1.6.1 funçao agora em lib/some function.lua

 

local player = getRecorderPlayer(topos) --alterado v1.6.1

setPlayerStorageValue(cid, 52480, 1)

setPlayerStorageValue(player, 52483, 1) --alterado v1.6.1

doCreatureSetSkullType(cid, 1)

doCreatureSetSkullType(player, 1) --alterado v1.6.1

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

beginDuel(cid, player, 6) --alterado v1.6.1

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 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

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

 

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

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

--id do item arvore normal

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

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

 

return true

end

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

 

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

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

 

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

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

 

return true

end

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

 

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

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

if item2.uid == mysum then --edited

if isTransformed(mysum) then

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

markPos(mysum, unfix)

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

return true

end

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

markPos(mysum, unfix)

return true

end

 

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

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

markPos(mysum, unfix)

return true

end

 

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

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

markPos(mysum, unfix)

return true

end

 

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

 

if cd > 0 then

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

return true

end

 

if getHappiness(mysum) <= 50 then

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

markPos(mysum, unfix)

return true

end

 

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

 

if not turn or turn > 10 then

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

else

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

end

 

local time = 140 + 2 * getPokemonLevel(mysum)

 

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

 

markPos(mysum, unfix)

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

doSetCreatureOutfit(mysum, 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)..", transform into "..getArticle(name).." "..name.."!", 1)

 

if useKpdoDlls then

doUpdateMoves(cid) --alterado v1.6

end

 

if dittoCopiesStatusToo then

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

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

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

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

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

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

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

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

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

doCreatureAddHealth(mysum, pct * vit * HPperVITsummon)

end

 

return true

end

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

 

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

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

 

markPos(mysum, unfix)

 

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

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

return true

end

 

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

 

if cd > 0 then

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

return true

end

 

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

doCreatureSay(mysum, "FLASH!", TALKTYPE_MONSTER)

doSendMagicEffect(getThingPos(mysum), 28)

 

local size = 5

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

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

 

if size > 11 then

size = 11

end

 

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

 

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

if delay > 0 then

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

end

 

return true

end

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

 

 

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

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

 

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

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

 

return true

end

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

 

 

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

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

 

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

 

if getPlayerStorageValue(mysum, 2365487) == 1 then

return true --alterado v1.4

end

 

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

 

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

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

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

 

return true

end

 

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

 

markPos(mysum, topos)

markOwnerPos(mysum, getThingPos(cid))

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

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

doSendDistanceShoot(getThingPos(mysum), topos, 39)

doSendMagicEffect(getThingPos(mysum), 211)

doTeleportThing(mysum, topos, false)

doSendMagicEffect(topos, 134)

doCreatureSay(mysum, "BLINK!", TALKTYPE_MONSTER)

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

 

return true

end

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

 

 

----START 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, "Only premium members are allowed to fly or ride.")

--return true

--end

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

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

end

 

if getPlayerStorageValue(cid, 212124) >= 1 then --alterado v1.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!") --alterado v1.6

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)) then --alterado v1.4

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)))

else

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

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

end

 

return true

end

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

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

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

if not isCreature(item2.uid) then

return true

end

 

if isSleeping(mysum) then

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

end

 

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

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

end

 

if #getCreatureSummons(cid) == 2 then

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

end

 

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

 

if cd > 0 then

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

return true

end

 

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

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

end

 

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

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

end

 

local cmed = item2.uid

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

local gender = getPokemonGender(cmed)

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

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

setPlayerStorageValue(cid, 212124, 1)

doConvinceCreature(cid, cmed)

setPlayerStorageValue(cmed, 212123, 1)

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

 

local cmname = getCreatureName(mysum)

local cmpos = getThingPos(mysum)

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

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

doRemoveCreature(mysum)

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

doConvinceCreature(cid, cmzao)

setPlayerStorageValue(cid, 888, 1)

if useKpdoDlls then

doUpdateMoves(cid)

end

 

local function check(cid, controled, rod)

if isCreature(cid) then

ball2 = getPlayerSlotItem(cid, 8)

if getPlayerStorageValue(cid, 888) <= 0 then

return true

end

if not isCreature(controled) then

setPlayerStorageValue(cid, 212124, 0)

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

local pkcmpos = getThingPos(sum)

doRemoveCreature(sum)

local item = getPlayerSlotItem(cid, 8)

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

doConvinceCreature(cid, pk)

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

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

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

cleanCMcds(item.uid)

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

if useKpdoDlls then

doUpdateMoves(cid)

end

return true

end

 

if rod <= 0 then

--Pokemon controlado

local cmed2 = getCreatureSummons(cid)[1]

local poscmed = getThingPos(cmed2)

local cmeddir = getCreatureLookDir(cmed2)

local namecmed = getCreatureName(cmed2)

local gender = getPokemonGender(cmed2)

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

doRemoveCreature(getCreatureSummons(cid)[1])

local back = doCreateMonster(namecmed, poscmed)

addEvent(doCreatureSetSkullType, 150, back, gender)

doWildAttackPlayer(back, cid)

doCreatureSetLookDir(back, cmeddir)

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

 

-- pokemon controlador

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

doRemoveCreature(getCreatureSummons(cid)[1])

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

doConvinceCreature(cid, pk2)

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

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

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

setPlayerStorageValue(cid, 212124, 0)

cleanCMcds(ball2.uid)

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

if useKpdoDlls then

doUpdateMoves(cid)

end

else

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

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

else

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

end

end

end

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

end

 

check(cid, cmed, 40)

return true

end

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

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

 

local onlyWater = false

 

if isWater(getTileThingByPos(checkpos).itemid) then

onlyWater = true

for checkwater = 0, 7 do

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

onlyWater = false

end

end

end

 

if onlyWater then

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

return true

end

 

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

 

if isCreature(getCreatureTarget(cid)) then

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

else

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

end

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

 

return true

end

 

 

Link para o comentário
Compartilhar em outros sites

O meu e o dele deve ser o mesmo, até pq esse aque tenho ele que fez '-'

 

 

 

 

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(1, 2, 2, 3) * 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 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)

--sendMovementEffect(cid, 19, getThingPos(cid))

 

 

--if getPlayerStorageValue(cid, 17000) >= 1 then --alterado v1.6

-- doSendMagicEffect(getThingPos(cid), eff)

--end

--addEvent(sendAuraEffect, 300, cid, eff)

 

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

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) 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

O meu e o dele deve ser o mesmo, até pq esse aque tenho ele que fez '-'

 

 

 

 

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(1, 2, 2, 3) * 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 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)

--sendMovementEffect(cid, 19, getThingPos(cid))

 

 

--if getPlayerStorageValue(cid, 17000) >= 1 then --alterado v1.6

-- doSendMagicEffect(getThingPos(cid), eff)

--end

--addEvent(sendAuraEffect, 300, cid, eff)

 

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

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) 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

 

 

 

Resolveu vlw.. Rep+

Link para o comentário
Compartilhar em outros sites

  • 5 years later...
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

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