Ir para conteúdo

[Encerrado] Resolvido - Troquei De Server =)


zedarosquinha

Posts Recomendados

Troquei de server, pois o PDA - Slicer editado pelo Poke Tibia Word ta meio bugado,

 

obrigado a todos.

 

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

 

Oi pessoal.

 

Eu to com um probleminha no meu servidor.

 

Bom, eu queria que todos os players, independente de lvl, andassem na mesma velocidade.

 

Até ai ta resolvido, daí quando upava o player ficava rápido de novo, só perdia a velocidade quando logava,

 

dai voltava ao normal.

 

Ai coloquei um script que concerta isso aqui do fórum, ou seja, quando ele upa não aumenta mais a velocidade.

 

Mas ainda tenho outro problema que não acho em lugar algum.

 

Quando o player da fly/ride/surf, ele anda na velocidade do pokemon, até ai blza, mas quando desmonta,

 

o player continua rápido e só volta ao normal logando novamente.

 

Eu queria que ao desmontar ele voltasse a ficar normal, no meu caso SPEED 200.

 

O Pokemon que estou usando se eu não me engano é o PDA by Slicer (Poké tibia word)

 

Vlw Abraços

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

Boa tarde Dino, obrigado pela ajuda.

 

Então, eu já mexi aí, tá em 200.

 

O player anda a essa velocidade, o problema é quando ele monta em algum pokemon

e depois desmonta, parece que o player fica com a velocidade do pokemon e não volta para

o normal, que é 200.

Link para o comentário
Compartilhar em outros sites

Então, quando ela da ride/fly/surf a velocidade é aumentada, mas quando ele desce a velocidade não volta ao normal, ele continua rápido, só volta ao normal quando ele sai do jogo e volta.

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

intaum... vc altero algum script relacionado a creaturescript, surf, fly ou ride?

seu PDA eh do Slicer atualizado e sem alteração?

é dificil saber corrigir sem saber do erro, intaum passa os arquivos order.lua na pasta data/actions e order.lua na pasta data/lib... e coloque: (mais tire os pontos . ) [.spoiler][.quote]POSTE AQUI SEUS ARQUIVOS[./quote][./spoiler]

Link para o comentário
Compartilhar em outros sites

Blza, aqui está o order do actions:

 

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

if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

doRemoveCondition(cid, CONDITION_PARALYZE)

addEvent(doAddCondition, 10, cid, paralizeArea) --alterado v2.4

end

 

if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

doRemoveCondition(cid, CONDITION_PARALYZE)

addEvent(doAddCondition, 10, cid, paralizeArea2) --alterado v2.5

end

doRegainSpeed(cid)

 

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 then

---

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

---

doPlayerSetVocation(cid, 8)

openChannelDialog(cid)

setPlayerStorageValue(cid, 52480, 1)

setPlayerStorageValue(cid, 6598754, 5) --alterado v1.6 duel system

setPlayerStorageValue(cid, 52482, getCreatureName(item2.uid))

setPlayerStorageValue(cid, 52483, 0)

doPlayerSendTextMessage(item2.uid, 20, getCreatureName(cid).." is inviting you to a duel! Use order in him to accept it! You have 40segs to accept the invit.")

doCreatureSetSkullType(cid, 2)

addEvent(endInviting, 40000, cid)

return true

 

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

---

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

---

local function begin(cid, pid, n)

if not isCreature(cid) or not isCreature(pid) then return true end

if n == 0 then

setPlayerStorageValue(cid, 6598754, 10)

setPlayerStorageValue(cid, 52482, getCreatureName(pid))

doSendAnimatedText(getThingPosWithDebug(cid), "START", 215)

doSendAnimatedText(getThingPosWithDebug(pid), "START", 215)

return true

else

doSendAnimatedText(getThingPosWithDebug(cid), ""..n.."!", 215)

n = n-1

end

addEvent(begin, 1000, cid, pid, n)

end

---

setPlayerStorageValue(cid, 52480, 1)

setPlayerStorageValue(getRecorderPlayer(topos), 52483, 1)

if getPlayerStorageValue(cid, 52481) <= -1 and getPlayerStorageValue(item2.uid, 52481) >= 0 then

setPlayerStorageValue(cid, 52481, getPlayerStorageValue(item2.uid, 52481))

end

doCreatureSetSkullType(cid, 1)

doCreatureSetSkullType(item2.uid, 1)

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

begin(cid, item2.uid, 6)

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 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) 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, "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, 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 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))) then

 

--if not isPremium(cid) then

--doPlayerSendCancel(cid, "Only premium members are allowed to fly or ride.")

--return true

--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!") --alterado v2.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

 

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

 

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

cleanCMcds(item.uid)

registerCreatureEvent(pk, "SummonDeath") --alterado v2.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 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, 0)

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

setPlayerStorageValue(cid, 212124, 0)

cleanCMcds(ball2.uid)

registerCreatureEvent(pk2, "SummonDeath") --alterado v2.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

 

 

E aqui está o order do LIB:

 

local dirpref = {

[1] = {[NORTH] = {[1] = {NORTH}, [2] = {EAST, WEST}, [3] = {NORTHEAST, NORTHWEST}},

[EAST] = {[1] = {EAST}, [2] = {NORTH, SOUTH}, [3] = {NORTHEAST, SOUTHEAST}},

[sOUTH] = {[1] = {SOUTH}, [2] = {EAST, WEST}, [3] = {SOUTHEAST, SOUTHWEST}},

[WEST] = {[1] = {WEST}, [2] = {SOUTH, NORTH}, [3] = {NORTHWEST, SOUTHWEST}},

[NORTHEAST] = {[1] = {NORTH, EAST}, [2] = {NORTHEAST}, [3] = {SOUTH, WEST}},

[sOUTHEAST] = {[1] = {SOUTH, EAST}, [2] = {SOUTHEAST}, [3] = {NORTH, WEST}},

[sOUTHWEST] = {[1] = {SOUTH, WEST}, [2] = {SOUTHWEST}, [3] = {NORTH, EAST}},

[NORTHWEST] = {[1] = {NORTH, WEST}, [2] = {NORTHWEST}, [3] = {EAST, SOUTH}}},

[2] = {[NORTH] = {[1] = {NORTH}, [2] = {WEST, EAST}, [3] = {NORTHWEST, NORTHEAST}},

[EAST] = {[1] = {EAST}, [2] = {SOUTH, NORTH}, [3] = {SOUTHEAST, NORTHEAST}},

[sOUTH] = {[1] = {SOUTH}, [2] = {WEST, EAST}, [3] = {SOUTHWEST, SOUTHEAST}},

[WEST] = {[1] = {WEST}, [2] = {NORTH, SOUTH}, [3] = {SOUTHWEST, NORTHWEST}},

[NORTHEAST] = {[1] = {EAST, NORTH}, [2] = {NORTHEAST}, [3] = {WEST, SOUTH}},

[sOUTHEAST] = {[1] = {EAST, SOUTH}, [2] = {SOUTHEAST}, [3] = {WEST, NORTH}},

[sOUTHWEST] = {[1] = {WEST, SOUTH}, [2] = {SOUTHWEST}, [3] = {EAST, NORTH}},

[NORTHWEST] = {[1] = {WEST, NORTH}, [2] = {NORTHWEST}, [3] = {SOUTH, EAST}}},

}

 

function doPushCreature(uid,direction,distance,time)

if isCreature(uid) == TRUE then

local rand = (2*math.random(0,1))-1

local rand2 = math.random(-1,0)

if direction == 0 then

signal = {0,rand,-rand,rand,-rand,0,-1,-1,-1,0,0,0}

elseif direction == 1 then

signal = {1,1,1,0,0,0,0,rand,-rand,rand,-rand,0}

elseif direction == 2 then

signal = {0,rand,-rand,rand,-rand,0,1,1,1,0,0,0}

 

elseif direction == 3 then

 

signal = {-1,-1,-1,0,0,0,0,rand,-rand,rand,-rand,0}

 

elseif direction == 4 then

 

signal = {-1,rand2,(-rand2)-1,0,1,rand2+1,rand2,0}

 

elseif direction == 5 then

 

signal = {1,-rand2,-((-rand2)-1),0,1,rand2+1,rand2,0}

 

elseif direction == 6 then

 

signal = {-1,rand2,(-rand2)-1,0,-1,(-rand2)-1,rand2,0}

 

else

 

signal = {1,-rand2,-((-rand2)-1),0,-1,(-rand2)-1,rand2,0}

 

end

 

local pos = getThingPos(uid)

 

nsig = #signal

 

nvar = 0

 

 

 

repeat

 

nvar = nvar+1

 

newpos = {x=pos.x+(signal[nvar]),y=pos.y+(signal[(nsig/2)+nvar]),z=pos.z}

 

newtile = {x=newpos.x,y=newpos.y,z=newpos.z,stackpos=0}

 

until getTileThingByPos(newtile).uid ~= 0 and hasProperty(getTileThingByPos(newtile).uid,3) == FALSE and canWalkOnPos(newtile, true, false, true, true, false) and queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2)

--alterado v2.5

 

 

if distance == nil or distance == 1 then

 

doTeleportThing(uid,newpos,TRUE)

 

else

 

distance = distance-1

 

doTeleportThing(uid,newpos,TRUE)

 

if time ~= nil then

 

addEvent(doPushCreature,time,uid,direction,distance,time)

 

else

 

addEvent(doPushCreature,500,uid,direction,distance,500)

 

end

 

end

 

end

 

end

 

function doComparePosition(pos1, pos2)

if pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z then

return true

end

return false

end

 

function walkTo(cid, direction, finalp, useExtraMoveOrder)

if not isCreature(cid) then return true end

 

doChangeSpeed(cid, 5)

local x = getThingPos(cid)

local ratedelaywalk = 1

local finalpos = {x = finalp.x, y = finalp.y, z = finalp.z}

 

if not canWalkOnPos(finalpos, false, false, true, true, true) then

finalpos = getClosestFreeTile(cid, finalpos)

end

 

if not finalpos then

return false

end

 

local dir = 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 --alterado v2.6

 

local master = getCreatureMaster(sid)

local array = {}

local lvl = {25, 40, 60, 80, 1000} --lvls

 

for i = 1, #lvl do

if getPlayerLevel(master) <= lvl then

array = headbutt[lvl]

break

end

end

local rand = array[math.random(#array)]

for j = 1, rand[2] do

local poke = doCreateMonster(rand[1], getClosestFreeTile(sid, pos))

doSetMonsterPassive(poke)

doWildAttackPlayer(poke, master)

end

local item = getTileItemById(pos, 12591) --id do item arvore normal

doCreatureSay(sid, "HEADBUTT!", TALKTYPE_MONSTER)

markPos(sid, {x=1,y=1,z=7})

doFaceCreature(sid, pos)

doSendMagicEffect(getThingPos(item.uid), 118)

doTransformItem(item.uid, 12592) --id do item arvore quebrada

local function growHead()

doTransformItem(getTileItemById(pos, 12592).uid, 12591) --id do item arvore quebrada, arvore normal

end

addEvent(growHead, choose(5, 10, 20, 30) * 60 * 1000) --o tempo pra arvore voltar ao normal varia de 5~30min

 

elseif skill == "dig" then

 

local item = getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})

doCreatureSay(sid, "DIG!", TALKTYPE_MONSTER)

markPos(sid, {x=1,y=1,z=7})

doFaceCreature(sid, pos)

doSendMagicEffect(getThingPos(item.uid), 3)

doTransformItem(item.uid, item.itemid+1)

local function closeHole()

doTransformItem(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).uid, item.itemid)

end

addEvent(closeHole, intervalToRegrowBushAndStones * 1000)

 

elseif skill == "fly" then

 

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

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) then return true end

if getCreatureNoMove(sid) or isSleeping(sid) or isParalyze(sid) then return true end --alterado v2.6

if thepos.x ~= getMarkedPos(sid).x or thepos.y ~= getMarkedPos(sid).y then return true end

if isCreature(getCreatureTarget(getCreatureMaster(sid))) and target == false or (rept and rept <= 0) then

doRegainSpeed(sid)

markPos(sid, {x=1,y=1,z=7})

return true

end

 

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

 

local currentPos = getThingPos(getCreatureMaster(sid))

local summonPos = getThingPos(sid)

local masterPos = getCreatureLastPosition(sid)

 

if (getThingPos(sid).x == getThingPos(getCreatureMaster(sid)).x and getThingPos(sid).y == getThingPos(getCreatureMaster(sid)).y) or (currentPos.x == masterPos.x and currentPos.y == masterPos.y) then

recheck(sid, skill, thepos)

return true

end

 

if currentPos.x == thepos.x and currentPos.y == thepos.y then

if getDirectionTo(getThingPos(sid), getThingPos(getCreatureMaster(sid))) <= 3 then

doRegainSpeed(sid)

local ndelay = getNextStepDelay(sid, 0)

doTeleportThing(sid, thepos, true)

doChangeSpeed(sid, -getCreatureSpeed(sid))

markPos(sid, getThingPos(getCreatureMaster(sid)))

addEvent(goThere, ndelay, sid, getMarkedPos(sid), skill, target)

else

doChangeSpeed(sid, - getCreatureSpeed(sid))

doRegainSpeed(sid)

markPos(sid, getThingPos(getCreatureMaster(sid)))

local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly")

doChangeSpeed(sid, - getCreatureSpeed(sid))

addEvent(goThere, x, sid, getMarkedPos(sid), skill, target)

end

return true

else

markPos(sid, getThingPos(getCreatureMaster(sid)))

doChangeSpeed(sid, - getCreatureSpeed(sid))

doRegainSpeed(sid)

local ndelay = getNextStepDelay(sid, 0)

if getDirectionTo(getThingPos(sid), getMarkedPos(sid)) >= 4 then

local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly")

else

doTeleportThing(sid, getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid))))

end

doChangeSpeed(sid, - getCreatureSpeed(sid))

addEvent(goThere, x and x or ndelay, sid, getMarkedPos(sid), skill, target)

return true

end

 

addEvent(recheck, 350, sid, skill, thepos)

return true

end

 

if getThingPos(sid).x == getMarkedPos(sid).x and getThingPos(sid).y == getMarkedPos(sid).y then

if isCreature(getCreatureTarget(sid)) then

doFaceCreature(sid, getThingPos(getCreatureTarget(sid)))

end

if skill == "blink" then

doChangeSpeed(sid, - getCreatureSpeed(sid)) --edited blink

end

addEvent(recheck, 350, sid, skill, thepos)

return true

end

 

if (getOwnerPos(sid).x ~= getThingPos(getCreatureMaster(sid)).x or getOwnerPos(sid).y ~= getThingPos(getCreatureMaster(sid)).y) and isCreature(getCreatureTarget(getCreatureMaster(sid))) == false and skill == "move" then

doRegainSpeed(sid)

markPos(sid, {x=1,y=1,z=7})

return true

end

 

doRegainSpeed(sid)

 

local holeid = thepos

holeid.stackpos = 0

holeid = getTileThingByPos(holeid).itemid

 

if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 and (not isWalkable(getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid))), true, false, false, true) or isInArray(specialabilities["digholes"], holeid)) then

if isGhostPokemon(sid) and getPlayerStorageValue(getCreatureMaster(sid), 990) <= 0 then

local todir = getDirectionTo(getThingPos(sid), getMarkedPos(sid))

if todir <= 3 then

doTeleportThing(sid, getMarkedPos(sid), true)

else

local gotopos = getPosByDir(getThingPos(sid), dirpref[math.random(1, 2)][todir][1][math.random(1, 2)])

doTeleportThing(sid, gotopos, true)

addEvent(goThere, getNextStepDelay(sid, 0), sid, getMarkedPos(sid), skill, target)

return true

end

end

doFaceCreature(sid, getMarkedPos(sid))

addEvent(recheck, 180, sid, skill, thepos)

doChangeSpeed(sid, - getCreatureSpeed(sid))

return true

end

 

local ret = 0

if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 then

ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or isGhostPokemon(sid))

if not tonumber(ret) then

doFaceCreature(sid, getMarkedPos(sid))

addEvent(recheck, 180, sid, skill, thepos)

doChangeSpeed(sid, - getCreatureSpeed(sid))

return true

end

else

ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or not isGhostPokemon(sid))-- and isSightClear(getThingPos(sid), getMarkedPos(sid), false)))

end

 

if not tonumber(ret) then

doPlayerSendCancel(getCreatureMaster(sid), "Destination is not reachable.")

markPos(sid, {x=1,y=1,z=7})

return true

end

 

doChangeSpeed(sid, - getCreatureSpeed(sid))

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

 

end

 

 

vlw

Link para o comentário
Compartilhar em outros sites

Uso esse pda sim.

 

E não fiz modificações que comprometessem isso.

 

O que fiz, foi add esse script:

http://www.xtibia.com/forum/topic/180758-creature-event-todos-os-player-na-mesma-velocidade/

 

E mudar no data/lib/configuration o playerspeed para 200

 

espero que descubra o que ta acontecendo.

 

E também não aparece erro nenhum no server quando uso o ride...

 

vlww

Link para o comentário
Compartilhar em outros sites

vc n precisa desse sistema no PDA, ele jah vem com isso... no configuration.lua (data/lib) jah tem >>> PlayerSpeed = 200 soh altera ali q ao lvl up, ride/fly/surf sempre vai fica com speed 200 ¬¬

Link para o comentário
Compartilhar em outros sites

Bom, refiz o teste, tirei esse script de velocidade e mantive o playerspeed em 200.

 

Abri o servidor, criei conta nova, criei char novo, upei ele um bom tanto e ele permaneceu na mesma velocidade (ótimo).

 

Dai peguei um pokemon normal e dei fly nele (porygon), sai voando com ele numa velocidade mais alta do que tava caminhando

 

até ai normal, blza.

 

mas quando tirei o fly, o char ainda continuava andando rapidão, e eu quero que quando eu tirar o fly/ride/surf o player volte a andar lerdo,

 

como estava antes de dar o fly.....

 

abrass vlw

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

ñ sei quantos scripts vc modificou ou colocou novo... mais baixa dinovo o servidor e tenta dinovo... isso ñ eh nada normal de acontece e tem MILHARES de possibilidades...

Link para o comentário
Compartilhar em outros sites

Pois é, pior q não mexi em mais nada....

 

Tem o arquivo do order dentro do data/lib

 

na parte que diz speed, ou getcreaturespeed e etc,

 

será que não ta faltando alguma parte dizendo que após deve voltar a speed normal????

 

se puder olhar pra mim ou me ajudar a pensar em alguma solução.

 

Eu já não entendo bulhufa....

 

Vo ver tbm de abrir outro server do mesmo pda sem qualquer modficação minha pra ver se isso acontece assim mesmo.

 

 

vlw abraço

 

local dirpref = {

[1] = {[NORTH] = {[1] = {NORTH}, [2] = {EAST, WEST}, [3] = {NORTHEAST, NORTHWEST}},

[EAST] = {[1] = {EAST}, [2] = {NORTH, SOUTH}, [3] = {NORTHEAST, SOUTHEAST}},

[sOUTH] = {[1] = {SOUTH}, [2] = {EAST, WEST}, [3] = {SOUTHEAST, SOUTHWEST}},

[WEST] = {[1] = {WEST}, [2] = {SOUTH, NORTH}, [3] = {NORTHWEST, SOUTHWEST}},

[NORTHEAST] = {[1] = {NORTH, EAST}, [2] = {NORTHEAST}, [3] = {SOUTH, WEST}},

[sOUTHEAST] = {[1] = {SOUTH, EAST}, [2] = {SOUTHEAST}, [3] = {NORTH, WEST}},

[sOUTHWEST] = {[1] = {SOUTH, WEST}, [2] = {SOUTHWEST}, [3] = {NORTH, EAST}},

[NORTHWEST] = {[1] = {NORTH, WEST}, [2] = {NORTHWEST}, [3] = {EAST, SOUTH}}},

[2] = {[NORTH] = {[1] = {NORTH}, [2] = {WEST, EAST}, [3] = {NORTHWEST, NORTHEAST}},

[EAST] = {[1] = {EAST}, [2] = {SOUTH, NORTH}, [3] = {SOUTHEAST, NORTHEAST}},

[sOUTH] = {[1] = {SOUTH}, [2] = {WEST, EAST}, [3] = {SOUTHWEST, SOUTHEAST}},

[WEST] = {[1] = {WEST}, [2] = {NORTH, SOUTH}, [3] = {SOUTHWEST, NORTHWEST}},

[NORTHEAST] = {[1] = {EAST, NORTH}, [2] = {NORTHEAST}, [3] = {WEST, SOUTH}},

[sOUTHEAST] = {[1] = {EAST, SOUTH}, [2] = {SOUTHEAST}, [3] = {WEST, NORTH}},

[sOUTHWEST] = {[1] = {WEST, SOUTH}, [2] = {SOUTHWEST}, [3] = {EAST, NORTH}},

[NORTHWEST] = {[1] = {WEST, NORTH}, [2] = {NORTHWEST}, [3] = {SOUTH, EAST}}},

}

 

function doPushCreature(uid,direction,distance,time)

if isCreature(uid) == TRUE then

local rand = (2*math.random(0,1))-1

local rand2 = math.random(-1,0)

if direction == 0 then

signal = {0,rand,-rand,rand,-rand,0,-1,-1,-1,0,0,0}

elseif direction == 1 then

signal = {1,1,1,0,0,0,0,rand,-rand,rand,-rand,0}

elseif direction == 2 then

signal = {0,rand,-rand,rand,-rand,0,1,1,1,0,0,0}

 

elseif direction == 3 then

 

signal = {-1,-1,-1,0,0,0,0,rand,-rand,rand,-rand,0}

 

elseif direction == 4 then

 

signal = {-1,rand2,(-rand2)-1,0,1,rand2+1,rand2,0}

 

elseif direction == 5 then

 

signal = {1,-rand2,-((-rand2)-1),0,1,rand2+1,rand2,0}

 

elseif direction == 6 then

 

signal = {-1,rand2,(-rand2)-1,0,-1,(-rand2)-1,rand2,0}

 

else

 

signal = {1,-rand2,-((-rand2)-1),0,-1,(-rand2)-1,rand2,0}

 

end

 

local pos = getThingPos(uid)

 

nsig = #signal

 

nvar = 0

 

 

 

repeat

 

nvar = nvar+1

 

newpos = {x=pos.x+(signal[nvar]),y=pos.y+(signal[(nsig/2)+nvar]),z=pos.z}

 

newtile = {x=newpos.x,y=newpos.y,z=newpos.z,stackpos=0}

 

until getTileThingByPos(newtile).uid ~= 0 and hasProperty(getTileThingByPos(newtile).uid,3) == FALSE and canWalkOnPos(newtile, true, false, true, true, false) and queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2)

--alterado v2.5

 

 

if distance == nil or distance == 1 then

 

doTeleportThing(uid,newpos,TRUE)

 

else

 

distance = distance-1

 

doTeleportThing(uid,newpos,TRUE)

 

if time ~= nil then

 

addEvent(doPushCreature,time,uid,direction,distance,time)

 

else

 

addEvent(doPushCreature,500,uid,direction,distance,500)

 

end

 

end

 

end

 

end

 

function doComparePosition(pos1, pos2)

if pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z then

return true

end

return false

end

 

function walkTo(cid, direction, finalp, useExtraMoveOrder)

if not isCreature(cid) then return true end

 

doChangeSpeed(cid, 5)

local x = getThingPos(cid)

local ratedelaywalk = 1

local finalpos = {x = finalp.x, y = finalp.y, z = finalp.z}

 

if not canWalkOnPos(finalpos, false, false, true, true, true) then

finalpos = getClosestFreeTile(cid, finalpos)

end

 

if not finalpos then

return false

end

 

local dir = 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 --alterado v2.6

 

local master = getCreatureMaster(sid)

local array = {}

local lvl = {25, 40, 60, 80, 1000} --lvls

 

for i = 1, #lvl do

if getPlayerLevel(master) <= lvl then

array = headbutt[lvl]

break

end

end

local rand = array[math.random(#array)]

for j = 1, rand[2] do

local poke = doCreateMonster(rand[1], getClosestFreeTile(sid, pos))

doSetMonsterPassive(poke)

doWildAttackPlayer(poke, master)

end

local item = getTileItemById(pos, 12591) --id do item arvore normal

doCreatureSay(sid, "HEADBUTT!", TALKTYPE_MONSTER)

markPos(sid, {x=1,y=1,z=7})

doFaceCreature(sid, pos)

doSendMagicEffect(getThingPos(item.uid), 118)

doTransformItem(item.uid, 12592) --id do item arvore quebrada

local function growHead()

doTransformItem(getTileItemById(pos, 12592).uid, 12591) --id do item arvore quebrada, arvore normal

end

addEvent(growHead, choose(5, 10, 20, 30) * 60 * 1000) --o tempo pra arvore voltar ao normal varia de 5~30min

 

elseif skill == "dig" then

 

local item = getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})

doCreatureSay(sid, "DIG!", TALKTYPE_MONSTER)

markPos(sid, {x=1,y=1,z=7})

doFaceCreature(sid, pos)

doSendMagicEffect(getThingPos(item.uid), 3)

doTransformItem(item.uid, item.itemid+1)

local function closeHole()

doTransformItem(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).uid, item.itemid)

end

addEvent(closeHole, intervalToRegrowBushAndStones * 1000)

 

elseif skill == "fly" then

 

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

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) then return true end

if getCreatureNoMove(sid) or isSleeping(sid) or isParalyze(sid) then return true end --alterado v2.6

if thepos.x ~= getMarkedPos(sid).x or thepos.y ~= getMarkedPos(sid).y then return true end

if isCreature(getCreatureTarget(getCreatureMaster(sid))) and target == false or (rept and rept <= 0) then

doRegainSpeed(sid)

markPos(sid, {x=1,y=1,z=7})

return true

end

 

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

 

local currentPos = getThingPos(getCreatureMaster(sid))

local summonPos = getThingPos(sid)

local masterPos = getCreatureLastPosition(sid)

 

if (getThingPos(sid).x == getThingPos(getCreatureMaster(sid)).x and getThingPos(sid).y == getThingPos(getCreatureMaster(sid)).y) or (currentPos.x == masterPos.x and currentPos.y == masterPos.y) then

recheck(sid, skill, thepos)

return true

end

 

if currentPos.x == thepos.x and currentPos.y == thepos.y then

if getDirectionTo(getThingPos(sid), getThingPos(getCreatureMaster(sid))) <= 3 then

doRegainSpeed(sid)

local ndelay = getNextStepDelay(sid, 0)

doTeleportThing(sid, thepos, true)

doChangeSpeed(sid, -getCreatureSpeed(sid))

markPos(sid, getThingPos(getCreatureMaster(sid)))

addEvent(goThere, ndelay, sid, getMarkedPos(sid), skill, target)

else

doChangeSpeed(sid, - getCreatureSpeed(sid))

doRegainSpeed(sid)

markPos(sid, getThingPos(getCreatureMaster(sid)))

local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly")

doChangeSpeed(sid, - getCreatureSpeed(sid))

addEvent(goThere, x, sid, getMarkedPos(sid), skill, target)

end

return true

else

markPos(sid, getThingPos(getCreatureMaster(sid)))

doChangeSpeed(sid, - getCreatureSpeed(sid))

doRegainSpeed(sid)

local ndelay = getNextStepDelay(sid, 0)

if getDirectionTo(getThingPos(sid), getMarkedPos(sid)) >= 4 then

local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly")

else

doTeleportThing(sid, getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid))))

end

doChangeSpeed(sid, - getCreatureSpeed(sid))

addEvent(goThere, x and x or ndelay, sid, getMarkedPos(sid), skill, target)

return true

end

 

addEvent(recheck, 350, sid, skill, thepos)

return true

end

 

if getThingPos(sid).x == getMarkedPos(sid).x and getThingPos(sid).y == getMarkedPos(sid).y then

if isCreature(getCreatureTarget(sid)) then

doFaceCreature(sid, getThingPos(getCreatureTarget(sid)))

end

if skill == "blink" then

doChangeSpeed(sid, - getCreatureSpeed(sid)) --edited blink

end

addEvent(recheck, 350, sid, skill, thepos)

return true

end

 

if (getOwnerPos(sid).x ~= getThingPos(getCreatureMaster(sid)).x or getOwnerPos(sid).y ~= getThingPos(getCreatureMaster(sid)).y) and isCreature(getCreatureTarget(getCreatureMaster(sid))) == false and skill == "move" then

doRegainSpeed(sid)

markPos(sid, {x=1,y=1,z=7})

return true

end

 

doRegainSpeed(sid)

 

local holeid = thepos

holeid.stackpos = 0

holeid = getTileThingByPos(holeid).itemid

 

if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 and (not isWalkable(getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid))), true, false, false, true) or isInArray(specialabilities["digholes"], holeid)) then

if isGhostPokemon(sid) and getPlayerStorageValue(getCreatureMaster(sid), 990) <= 0 then

local todir = getDirectionTo(getThingPos(sid), getMarkedPos(sid))

if todir <= 3 then

doTeleportThing(sid, getMarkedPos(sid), true)

else

local gotopos = getPosByDir(getThingPos(sid), dirpref[math.random(1, 2)][todir][1][math.random(1, 2)])

doTeleportThing(sid, gotopos, true)

addEvent(goThere, getNextStepDelay(sid, 0), sid, getMarkedPos(sid), skill, target)

return true

end

end

doFaceCreature(sid, getMarkedPos(sid))

addEvent(recheck, 180, sid, skill, thepos)

doChangeSpeed(sid, - getCreatureSpeed(sid))

return true

end

 

local ret = 0

if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 then

ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or isGhostPokemon(sid))

if not tonumber(ret) then

doFaceCreature(sid, getMarkedPos(sid))

addEvent(recheck, 180, sid, skill, thepos)

doChangeSpeed(sid, - getCreatureSpeed(sid))

return true

end

else

ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or not isGhostPokemon(sid))-- and isSightClear(getThingPos(sid), getMarkedPos(sid), false)))

end

 

if not tonumber(ret) then

doPlayerSendCancel(getCreatureMaster(sid), "Destination is not reachable.")

markPos(sid, {x=1,y=1,z=7})

return true

end

 

doChangeSpeed(sid, - getCreatureSpeed(sid))

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

 

end

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...