Ir para conteúdo

[Encerrado] (Bug) Poketibia


BrunooMaciell

Posts Recomendados

Estou com um bug no meu serve !!

 

Bug

 

[25/11/2012 14:38:18] [Error - CreatureScript Interface]

[25/11/2012 14:38:18] In a timer event called from:

[25/11/2012 14:38:18] data/creaturescripts/scripts/exp2.0.lua:onStatsChange

[25/11/2012 14:38:18] Description:

[25/11/2012 14:38:18] data/lib/032-position.lua:195: attempt to index global 'signal' (a nil value)

[25/11/2012 14:38:18] stack traceback:

[25/11/2012 14:38:18] data/lib/032-position.lua:195: in function 'getPosfromArea'

[25/11/2012 14:38:18] data/lib/newStatusSyst.lua:804: in function <data/lib/newStatusSyst.lua:801>

 

 

Agora fala no bug exp2.0 ou no da lib vou posta os dois ^^

 

Exp2.0

 

local combats = { --alterado v1.6 \/

[PSYCHICDAMAGE] = {cor = COLOR_PSYCHIC},

[GRASSDAMAGE] = {cor = COLOR_GRASS},

[POISONEDDAMAGE] = {cor = COLOR_GRASS},

[FIREDAMAGE] = {cor = COLOR_FIRE2},

[bURNEDDAMAGE] = {cor = COLOR_BURN},

[WATERDAMAGE] = {cor = COLOR_WATER},

[iCEDAMAGE] = {cor = COLOR_ICE},

[NORMALDAMAGE] = {cor = COLOR_NORMAL},

[FLYDAMAGE] = {cor = COLOR_FLYING},

[GHOSTDAMAGE] = {cor = COLOR_GHOST},

[GROUNDDAMAGE] = {cor = COLOR_GROUND},

[ELECTRICDAMAGE] = {cor = COLOR_ELECTRIC},

[ROCKDAMAGE] = {cor = COLOR_ROCK},

[bUGDAMAGE] = {cor = COLOR_BUG},

[FIGHTDAMAGE] = {cor = COLOR_FIGHTING},

[DRAGONDAMAGE] = {cor = COLOR_DRAGON},

[POISONDAMAGE] = {cor = COLOR_POISON},

[DARKDAMAGE] = {cor = COLOR_DARK},

[sTEELDAMAGE] = {cor = COLOR_STEEL},

[MIRACLEDAMAGE] = {cor = COLOR_PSYCHIC},

[DARK_EYEDAMAGE] = {cor = COLOR_GHOST},

[sEED_BOMBDAMAGE] = {cor = COLOR_GRASS},

[sACREDDAMAGE] = {cor = COLOR_FIRE2},

}

--alterado v1.5 tabelas agora estao em lib/configuration.lua

local function sendPlayerDmgMsg(cid, text)

if not isCreature(cid) then return true end

doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, text)

end

local races = {

[4] = {cor = COLOR_FIRE2},

[6] = {cor = COLOR_WATER},

[7] = {cor = COLOR_NORMAL},

[8] = {cor = COLOR_FIRE2},

[9] = {cor = COLOR_FIGHTING},

[10] = {cor = COLOR_FLYING},

[11] = {cor = COLOR_GRASS},

[12] = {cor = COLOR_POISON},

[13] = {cor = COLOR_ELECTRIC},

[14] = {cor = COLOR_GROUND},

[15] = {cor = COLOR_PSYCHIC},

[16] = {cor = COLOR_ROCK},

[17] = {cor = COLOR_ICE},

[18] = {cor = COLOR_BUG},

[19] = {cor = COLOR_DRAGON},

[20] = {cor = COLOR_GHOST},

[21] = {cor = COLOR_STEEL},

[22] = {cor = COLOR_DARK},

[1] = {cor = 180},

[2] = {cor = 180},

[3] = {cor = 180},

[5] = {cor = 180},

}

local damages = {GROUNDDAMAGE, ELECTRICDAMAGE, ROCKDAMAGE, FLYDAMAGE, BUGDAMAGE, FIGHTINGDAMAGE, DRAGONDAMAGE, POISONDAMAGE, DARKDAMAGE, STEELDAMAGE}

local fixdmgs = {PSYCHICDAMAGE, COMBAT_PHYSICALDAMAGE, GRASSDAMAGE, FIREDAMAGE, WATERDAMAGE, ICEDAMAGE, NORMALDAMAGE, GHOSTDAMAGE}

local ignored = {POISONEDDAMAGE, BURNEDDAMAGE} --alterado v1.6

local cannotkill = {BURNEDDAMAGE, POISONEDDAMAGE}

function onStatsChange(cid, attacker, type, combat, value)

if combat == FLYSYSTEMDAMAGE then return false end

if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end -- TV

if not isCreature(attacker) then --alterado v1.5 cid == attacker

if not isInArray(fixdamages, combat) and combats[combat] then

doSendAnimatedText(getThingPos(cid), value, combats[combat].cor)

end

return true

end

local damageCombat = combat

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

--alterado v1.6 retirado os combats sleep_powder e poison_powder daki!

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

if type == STATSCHANGE_HEALTHGAIN then

if cid == attacker then

return true

end

if isSummon(cid) and isSummon(attacker) and canAttackOther(cid, attacker) == "Cant" then

return false

end

return true

end

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

if isMonster(cid) then

local valor = value

if not pokes[getCreatureName(cid)] and damageCombat == COMBAT_PHYSICALDAMAGE then

valor = getOffense(attacker) * playerDamageReduction

doCreatureAddHealth(cid, -math.abs(valor), 3, races[7].cor) --alterado v1.6 dano nos npcs

return false

elseif not pokes[getCreatureName(cid)] and damageCombat ~= COMBAT_PHYSICALDAMAGE then

doCreatureAddHealth(cid, -math.abs(valor), 3, combats[damageCombat].cor)

return false

end

end

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

if isPlayer(attacker) then

local valor = value

if valor > getCreatureHealth(cid) then

valor = getCreatureHealth(cid)

end

if combat == COMBAT_PHYSICALDAMAGE then

return false

end

if combat == PHYSICALDAMAGE then

doSendMagicEffect(getThingPos(cid), 3)

doSendAnimatedText(getThingPos(cid), valor, races[getMonsterInfo(getCreatureName(cid)).race].cor)

end

if combats[damageCombat] and not isInArray(fixdmgs, damageCombat) then

doSendAnimatedText(getThingPos(cid), valor, combats[damageCombat].cor)

end

if #getCreatureSummons(attacker) >= 1 and not isInArray({POISONEDDAMAGE, BURNEDDAMAGE}, combat) then

doPlayerSendTextMessage(attacker, MESSAGE_STATUS_DEFAULT, "Your "..getPokeName(getCreatureSummons(attacker)[1]).." dealt "..valor.." damage to "..getSomeoneDescription(cid)..".")

end

return true

end

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

if isPlayer(cid) and #getCreatureSummons(cid) >= 1 and type == STATSCHANGE_HEALTHLOSS then

return false

end

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

if isPlayer(cid) and #getCreatureSummons(cid) <= 0 and type == STATSCHANGE_HEALTHLOSS then

if isSummon(attacker) or isPlayer(attacker) then

if canAttackOther(cid, attacker) == "Cant" then return false end

end

local valor = 0

if combat == COMBAT_PHYSICALDAMAGE then

valor = getOffense(attacker)

else

valor = getSpecialAttack(attacker)

end

valor = valor * playerDamageReduction

valor = valor * math.random(83, 117) / 100

if valor >= getCreatureHealth(cid) then

valor = getCreatureHealth(cid)

end

valor = math.floor(valor)

if valor >= getCreatureHealth(cid) then

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

setPlayerStorageValue(cid, 6598754, -1)

setPlayerStorageValue(cid, 6598755, -1)

doRemoveCondition(cid, CONDITION_OUTFIT) --alterado v1.7

doTeleportThing(cid, posBackPVP, false) --pos pra onde o player vai ser teleportado quando morrer no pvp! configurar no lib/configuration.lua!!

doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

return true

end

if getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then

doRemoveCondition(cid, CONDITION_OUTFIT)

setPlayerStorageValue(cid, 17000, 0)

setPlayerStorageValue(cid, 17001, 0)

setPlayerStorageValue(cid, 63215, -1)

doChangeSpeed(cid, PlayerSpeed)

local item = getPlayerSlotItem(cid, 8)

local btype = getPokeballType(item.itemid)

if #getCreatureSummons(cid) <= 0 then

if isInArray(pokeballs[btype].all, item.itemid) then

doTransformItem(item.uid, pokeballs[btype].off)

doItemSetAttribute(item.uid, "hp", 0)

end

end

end

------------Edited Golden Arena------------------ --alterado v1.7 \/\/

if getPlayerStorageValue(cid, 22545) == 1 then

if getGlobalStorageValue(22550) == 1 then

doPlayerSendTextMessage(cid, 20, "You are the last survivor of the golden arena! Take your reward!")

doPlayerAddItem(cid, 2152, getPlayerStorageValue(cid, 22551)*20) --recompensa, a storage ali eh qnts waves o player guento!

setPlayerStorageValue(cid, 22545, -1)

doTeleportThing(cid, getClosestFreeTile(cid, getClosestFreeTile(cid, posBackGolden)), false)

doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid))

setPlayerRecordWaves(cid)

endGoldenArena()

return true

else

setGlobalStorageValue(22550, getGlobalStorageValue(22550)-1)

setPlayerStorageValue(cid, 22545, -1)

doTeleportThing(cid, getClosestFreeTile(cid, posBackGolden), false)

doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid))

setPlayerRecordWaves(cid)

return true

end

end

------------------------------------------- /\/\

---

local corpse = doCreateItem(3058, 1, getThingPos(cid))

doDecayItem(corpse)

doItemSetAttribute(corpse, "pName", getCreatureName(cid)) --alterado v1.7 coloca corpse quando o player morre!

doItemSetAttribute(corpse, "attacker", getCreatureName(attacker))

doItemSetAttribute(corpse, "article", getPlayerSex(cid) == 0 and "She" or "He")

---

end

doCreatureAddHealth(cid, -valor, 3, 180)

if not isPlayer(cid) then

addEvent(sendPlayerDmgMsg, 5, cid, "You lost "..valor.." hitpoints due to an attack from "..getSomeoneDescription(attacker)..".")

end

return false

end

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

if isMonster(attacker) and getPlayerStorageValue(attacker, 201) ~= -1 then

if isPlayer(cid) then

return false

end

if getPlayerStorageValue(getCreatureMaster(cid), ginasios[getPlayerStorageValue(attacker, 201)].storage) ~= 1 then

return false

end

end

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

if isMonster(cid) and getPlayerStorageValue(cid, 201) ~= -1 then

if getPlayerStorageValue(getCreatureMaster(attacker), ginasios[getPlayerStorageValue(cid, 201)].storage) ~= 1 then

return false

end

end

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

if ehMonstro(cid) and ehMonstro(attacker) then

return false --edited monstro nao atacar monstro

end

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

--------------------REFLECT-----------------------

if getPlayerStorageValue(cid, 21099) >= 1 and combat ~= COMBAT_PHYSICALDAMAGE then

if not isInArray({"Team Claw", "Team Slice"}, getPlayerStorageValue(attacker, 21102)) then

doSendMagicEffect(getThingPosWithDebug(cid), 135)

doSendAnimatedText(getThingPosWithDebug(cid), "REFLECT", COLOR_GRASS)

addEvent(docastspell, 100, cid, getPlayerStorageValue(attacker, 21102))

if getCreatureName(cid) == "Wobbuffet" then

doRemoveCondition(cid, CONDITION_OUTFIT)

end

setPlayerStorageValue(cid, 21099, -1) --alterado v1.6

setPlayerStorageValue(cid, 21100, 1)

setPlayerStorageValue(cid, 21101, attacker)

setPlayerStorageValue(cid, 21103, getTableMove(attacker, getPlayerStorageValue(attacker, 21102)).f)

setPlayerStorageValue(cid, 21104, getCreatureOutfit(attacker).lookType)

return false

end

end

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

local multiplier = 1

if isCreature(cid) then

poketype1 = pokes[getCreatureName(cid)].type --alterado v1.6

poketype2 = pokes[getCreatureName(cid)].type2

end

if not poketype1 or not poketype2 then return false end --alterado v1.6

 

if getCreatureCondition(cid, CONDITION_INVISIBLE) then

return false

end

if damageCombat ~= COMBAT_PHYSICALDAMAGE and not isInArray(ignored, damageCombat) then

if isInArray(effectiveness[damageCombat].super, poketype1) then

multiplier = multiplier + 0.5

end

if isInArray(effectiveness[damageCombat].super, poketype2) then

multiplier = multiplier + 0.5

end

if isInArray(effectiveness[damageCombat].weak, poketype1) then --Edited effetivenes = pxg... ;p

multiplier = multiplier - 0.25

end

if isInArray(effectiveness[damageCombat].weak, poketype2) then

multiplier = multiplier - 0.25

end

if isInArray(effectiveness[damageCombat].non, poketype1) or isInArray(effectiveness[damageCombat].non, poketype2) then

if isInArray(specialabilities["foresight"], getCreatureName(attacker)) then --alterado v1.5

multiplier = 0.5

end --alterado v1.6

end

elseif combat == COMBAT_PHYSICALDAMAGE then

if isGhostPokemon(cid) then --alterado v1.3

if not isInArray(specialabilities["foresight"], getCreatureName(attacker)) then --passiva Foresight!!

doSendMagicEffect(getThingPos(cid), 3)

return false

end

end

local cd = getPlayerStorageValue(attacker, conds["Miss"])

local cd2 = getPlayerStorageValue(attacker, conds["Confusion"])

local cd3 = getPlayerStorageValue(attacker, conds["Stun"])

if cd >= 0 or cd2 >= 0 or cd3 >= 0 then

if math.random(1, 100) > 50 then --Edited miss system -- 50% chance de da miss no atk fisico

doSendMagicEffect(getThingPos(cid), 211)

doSendAnimatedText(getThingPos(attacker), "MISS", 215) --alterado v1.5

return false

end

end

end

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

local valor = value

if multiplier == 1.5 and poketype2 == "no type" then

multiplier = 2 --alterado v1.6

elseif multiplier == 1.5 and poketype2 ~= "no type" then

multiplier = 1.75

elseif multiplier == 1.25 then --edited effetivines = pxg

multiplier = 1

end

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

if isSummon(cid) and isSummon(attacker) then

if getCreatureMaster(cid) == getCreatureMaster(attacker) then

return false

end

if canAttackOther(cid, attacker) == "Cant" then

return false

end

end

valor = valor * multiplier

if isSummon(attacker) then

valor = valor * getHappinessRate(attacker)

else

valor = valor * summonReduction

end

valor = math.floor(valor)

 

if combat == COMBAT_PHYSICALDAMAGE then

block = 1 - (getDefense(cid) / (getOffense(attacker) + getDefense(cid)))

valor = getOffense(attacker) * block

 

if isInArray(specialabilities["counter"], getCreatureName(cid)) then

if math.random(1, 100) <= 10 then

doCreatureAddHealth(attacker, -valor, 3, 180) --alterado v1.5

valor = 0

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

end

end

 

else

valor = valor / getDefense(cid)

end

 

-------------------------Edited CLAN SYSTEM-----------------------------------

if isSummon(attacker) and getPlayerStorageValue(getCreatureMaster(attacker), 86228) >= 1 then

valor = valor*getClanPorcent(getCreatureMaster(attacker), combat, "atk") --alterado v1.3

elseif isSummon(cid) and getPlayerStorageValue(getCreatureMaster(cid), 86228) >= 1 then

valor = valor - (valor*getClanPorcent(getCreatureMaster(cid), combat, "def", pokes[getCreatureName(cid)].type, pokes[getCreatureName(cid)].type2))

end

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

---------------------- FEAR / ROAR ------------------------------------

if getPlayerStorageValue(attacker, conds["Fear"]) >= 1 then --alterado!!

return true

end

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

if damageCombat ~= COMBAT_PHYSICALDAMAGE and not isInArray(ignored, damageCombat) then

if isInArray(effectiveness[damageCombat].non, poketype1) or isInArray(effectiveness[damageCombat].non, poketype2) then

if not isInArray(specialabilities["foresight"], getCreatureName(attacker)) then --alterado v1.6

valor = valor * 0 --alterado v1.5

end

end

end

if damageCombat == GROUNDDAMAGE then

if isInArray(specialabilities["levitate"], getCreatureName(cid)) then

valor = 0 --alterado v1.5

end

end

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

local p = getThingPos(cid)

if p.x == 1 and p.y == 1 and p.z == 10 then

return false

end

if getPlayerStorageValue(cid, 9658783) == 1 then

return false --imune

end

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

--------------- FIGHT MODE -----------------------

if useOTClient then

if isSummon(cid) then --alterado v1.7 soh funciona com o OTClient q eu disponibilizei...

local master = getCreatureMaster(cid)

if getPlayerStorageValue(master, 248759) == 1 then

valor = valor * 1.1 --ta aumentando 10% de dano/def e diminuindo 10% de dano/def

elseif getPlayerStorageValue(master, 248759) == 3 then

valor = valor * 0.9

end

end

if isSummon(attacker) then

local master = getCreatureMaster(attacker)

if getPlayerStorageValue(master, 248759) == 1 then

valor = valor * 1.1

elseif getPlayerStorageValue(master, 248759) == 3 then

valor = valor * 0.9

end

end

end

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

if valor >= getCreatureHealth(cid) then

if isInArray(cannotKill, combat) and isPlayer(cid) then

valor = getCreatureHealth(cid) - 1

else

valor = getCreatureHealth(cid)

end

end

valor = math.floor(valor) --alterado v1.6

 

------------------ SKILLs Q CURAM O ATTACKER ---------------------------------

local function doHeal(cid, amount)

if (getCreatureHealth(cid) + amount) >= getCreatureMaxHealth(cid) then

amount = math.abs(getCreatureHealth(cid)-getCreatureMaxHealth(cid))

end

if getCreatureHealth(cid) ~= getCreatureMaxHealth(cid) then --alterado v1.6

doCreatureAddHealth(cid, amount)

doSendAnimatedText(getThingPosWithDebug(cid), "+"..amount.."", 65)

end

end

 

if damageCombat == PSYCHICDAMAGE or damageCombat == MIRACLEDAMAGE then

if getPlayerStorageValue(attacker, 95487) >= 1 then

doHeal(attacker, valor)

setPlayerStorageValue(attacker, 95487, -1) --alterado v1.6

end

elseif damageCombat == SEED_BOMBDAMAGE then

doHeal(attacker, valor)

end

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

----------SACRED FIRE-----------------------

if combat == SACREDDAMAGE and not ehNPC(cid) then --alterado v1.6

local ret = {}

ret.id = cid

ret.cd = 9

ret.check = getPlayerStorageValue(cid, conds["Silence"])

ret.eff = 39

ret.cond = "Silence"

doCondition2(ret)

end

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

--------------Passiva Lifesteal Clobat------------

if combat == COMBAT_PHYSICALDAMAGE then

if getCreatureName(attacker) == "Crobat" then --alterado v1.4

doCreatureAddHealth(attacker, math.floor(valor))

doSendAnimatedText(getThingPos(attacker), "+ "..math.floor(valor), 30)

end

end

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

if isSummon(attacker) then

if combat == COMBAT_PHYSICALDAMAGE then

doTargetCombatHealth(getCreatureMaster(attacker), cid, PHYSICALDAMAGE, -valor, -valor, 255)

addEvent(doDoubleHit, 1000, attacker, cid, valor, races) --alterado v1.6

else

doTargetCombatHealth(getCreatureMaster(attacker), cid, damageCombat, -valor, -valor, 255)

end

else

if combat ~= COMBAT_PHYSICALDAMAGE then

doCreatureAddHealth(cid, -math.abs(valor), 3, combats[damageCombat].cor)

else

doCreatureAddHealth(cid, -math.abs(valor), 3, races[getMonsterInfo(getCreatureName(cid)).race].cor)

addEvent(doDoubleHit, 1000, attacker, cid, valor, races) --alterado v1.6

end

if isSummon(cid) and valor ~= 0 then

addEvent(sendPlayerDmgMsg, 5, getCreatureMaster(cid), "Your "..getCreatureName(cid).." lost "..valor.." hitpoints due to an attack from "..getSomeoneDescription(attacker)..".")

end

end

 

if damageCombat == FIREDAMAGE and not isBurning(cid) then

local ret = {}

ret.id = cid

ret.cd = math.random(5, 12)

ret.check = getPlayerStorageValue(cid, conds["Burn"])

ret.damage = isSummon(attacker) and getMasterLevel(attacker)+getPokemonBoost(attacker) or getPokemonLevel(attacker)

ret.cond = "Burn"

 

doCondition2(ret)

elseif damageCombat == POISONDAMAGE and not isPoisoned(cid) then

local ret = {}

ret.id = cid

ret.cd = math.random(6, 15)

ret.check = getPlayerStorageValue(cid, conds["Poison"])

local lvl = isSummon(attacker) and getMasterLevel(attacker) or getPokemonLevel(attacker)

ret.damage = math.floor((getPokemonLevel(attacker)+lvl)/2)

ret.cond = "Poison"

 

doCondition2(ret)

end

------------------------------------POTIONS-------------------------------------------

if isSummon(cid) and type == STATSCHANGE_HEALTHLOSS then

if getPlayerStorageValue(cid, 173) >= 1 then

if damageCombat ~= BURNEDDAMAGE and damageCombat ~= POISONEDDAMAGE then

setPlayerStorageValue(cid, 173, -1) --alterado v1.6

doSendAnimatedText(getThingPos(cid), "Lost Heal", 144)

end

end

end

----------------------------------------PASSIVAS------------------------------------- --alterado v1.7 \/

-------------------------------------------Counter Helix------------------------------------

if passivesChances["Helix"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Helix"][getCreatureName(cid)] then

docastspell(cid, "Counter Helix")

end

-------------------------------------------Lava Counter/Electricity----------------------------

if passivesChances["Fire_Thunder"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Fire_Thunder"][getCreatureName(cid)] then

docastspell(cid, "Lava-Electricity")

end

---------------------------------------Stunning Confusion-----------------------------------------

if passivesChances["Stunning"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Stunning"][getCreatureName(cid)] then

docastspell(cid, "Stunning Confusion")

end

-----------------------------------------Groundshock-----------------------------------

if passivesChances["Groundshock"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Groundshock"][getCreatureName(cid)] then

docastspell(cid, "Groundshock")

end

--------------------------------------Electric Charge---------------------------------------------

if passivesChances["Electric Charge"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Electric Charge"][getCreatureName(cid)] then

docastspell(cid, "Electric Charge", 0, 0)

end

-------------------------------------Melody------------------------------------

if passivesChances["Melody"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Melody"][getCreatureName(cid)] then

docastspell(cid, "Melody")

end

------------------------------------- Dragon Fury / Fury ---------------------------------------

if passivesChances["Dragon Fury"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Dragon Fury"][getCreatureName(cid)] then

docastspell(cid, "Dragon Fury", 0, 0)

end

------------------------------------- Mega Drain ---------------------------------------

if passivesChances["Mega Drain"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Mega Drain"][getCreatureName(cid)] then

docastspell(cid, "Mega Drain")

end

------------------------------------- Spores Reaction ---------------------------------------

if passivesChances["Spores Reaction"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Spores Reaction"][getCreatureName(cid)] then

docastspell(cid, "Spores Reaction")

end

------------------------------------ Amnesia ----------------------------------------

if passivesChances["Amnesia"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Amnesia"][getCreatureName(cid)] then

docastspell(cid, "Amnesia", 0, 0)

end

----------------------------------- Zen Mind -----------------------------------------

if passivesChances["Zen Mind"][getCreatureName(cid)] and isWithCondition(cid) and math.random(1, 100) <= passivesChances["Zen Mind"][getCreatureName(cid)] then

docastspell(cid, "Zen Mind", 0, 0)

end

---------------------------------- Mirror Coat ---------------------------------------

if passivesChances["Mirror Coat"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Mirror Coat"][getCreatureName(cid)] then

docastspell(cid, "Mirror Coat", 0, 0)

end

--------------------------------- Illusion -----------------------------------------

return false

end

 

 

 

Agora ...

 

newStatusSyst.lua

 

conds = {

["Slow"] = 3890,

["Confusion"] = 3891,

["Burn"] = 3892,

["Poison"] = 3893,

["Fear"] = 3894,

["Stun"] = 3895,

["Paralyze"] = 3896, --alterado v1.6 \/ peguem o script todo!

["Leech"] = 3897,

["Buff1"] = 3898,

["Buff2"] = 3899,

["Buff3"] = 3900,

["Miss"] = 32659,

["Silence"] = 32698,

["Sleep"] = 98271,

}

injuries2 = {

[1] = {n = "slow", m = 3890},

[2] = {n = "confuse", m = 3891},

[3] = {n = "burn", m = 3892},

[4] = {n = "poison", m = 3893},

[5] = {n = "fear", m = 3894},

[6] = {n = "stun", m = 3895},

[7] = {n = "paralyze", m = 3896},

[8] = {n = "leech", m = 3897},

[9] = {n = "Buff1", m = 3898},

[10] = {n = "Buff2", m = 3899},

[11] = {n = "Buff3", m = 3900},

[12] = {n = "miss", m = 32659},

[13] = {n = "silence", m = 32698},

[14] = {n = "sleep", m = 98271},

}

Buffs = {

[1] = {"Buff1", 3898},

[2] = {"Buff2", 3899},

[3] = {"Buff3", 3900},

}

paralizeArea2 = createConditionObject(CONDITION_PARALYZE)

setConditionParam(paralizeArea2, CONDITION_PARAM_TICKS, 50000)

setConditionFormula(paralizeArea2, -0.63, -0.63, -0.63, -0.63)

local roardirections = {

[NORTH] = {SOUTH},

[sOUTH] = {NORTH},

[WEST] = {EAST}, --edited sistema de roar

[EAST] = {WEST}}

function doSendSleepEffect(cid)

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

doSendMagicEffect(getThingPos(cid), 32)

addEvent(doSendSleepEffect, 1500, cid)

end

local outFurys = {

["Shiny Charizard"] = {outFury = 1073},

["Shiny Blastoise"] = {outFury = 1074},

}

local outImune = {

["Camouflage"] = 1445,

["Acid Armor"] = 1453,

["Iron Defense"] = 1401,

["Minimize"] = 1455,

["Future Sight"] = 1446,

}

 

local function transBack(cid)

if isCreature(cid) then

if getPlayerStorageValue(cid, 974848) >= 1 then

setPlayerStorageValue(cid, 974848, 0)

doRemoveCondition(cid, CONDITION_OUTFIT)

end

end

end

function doCondition2(ret)

--

function doMiss2(cid, cd, eff, check, spell)

local stg = conds["Miss"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, 21100) >= 1 and getPlayerStorageValue(cid, stg) <= -1 then return true end --alterado v1.6 reflect

if not canDoMiss(cid, spell) then return true end

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "miss", a)

doItemSetAttribute(item.uid, "missEff", eff)

doItemSetAttribute(item.uid, "missSpell", spell)

end

 

if a <= -1 then

setPlayerStorageValue(cid, stg, -1)

return true

end

 

doSendMagicEffect(getThingPos(cid), eff)

addEvent(doMiss2, 1000, cid, -1, eff, a, spell)

end

function doSilence2(cid, cd, eff, check)

local stg = conds["Silence"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "silence", a)

doItemSetAttribute(item.uid, "silenceEff", eff)

end

 

if a <= -1 then

setPlayerStorageValue(cid, stg, -1)

return true

end

 

doSendMagicEffect(getThingPos(cid), eff)

addEvent(doSilence2, 1000, cid, -1, eff, a)

end

function doSlow2(cid, cd, eff, check, first)

local stg = conds["Slow"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "slow", a)

doItemSetAttribute(item.uid, "slowEff", eff)

end

 

if a <= -1 then

doRemoveCondition(cid, CONDITION_PARALYZE)

if not isSleeping(cid) and not isParalyze(cid) then

addEvent(doRegainSpeed, 50, cid) --alterado

end

setPlayerStorageValue(cid, stg, -1)

return true

end

 

if first then

doAddCondition(cid, paralizeArea2)

end

 

doSendMagicEffect(getThingPos(cid), eff)

addEvent(doSlow2, 1000, cid, -1, eff, a)

end

function doConfusion2(cid, cd, check)

local stg = conds["Confusion"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "confuse", a)

end

 

if a <= -1 then

if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

doRemoveCondition(cid, CONDITION_PARALYZE)

addEvent(doAddCondition, 10, cid, paralizeArea2)

end

if not isSleeping(cid) and not isParalyze(cid) then

doRegainSpeed(cid) --alterado

end

setPlayerStorageValue(cid, stg, -1)

return true

end

 

if math.random(1, 6) >= 4 then

doSendMagicEffect(getThingPos(cid), 31)

end

local isTarget = isSummon(cid) and getCreatureTarget(getCreatureMaster(cid)) or getCreatureTarget(cid)

if isCreature(isTarget) and not isSleeping(cid) and not isParalyze(cid) and getPlayerStorageValue(cid, 654878) <= 0 then --alterado v1.6

doChangeSpeed(cid, -getCreatureSpeed(cid))

doChangeSpeed(cid, 100)

doPushCreature(cid, math.random(0, 3), 1, 0) --alterado v1.6

doChangeSpeed(cid, -100)

end

local pos = getThingPos(cid)

addEvent(doSendMagicEffect, math.random(0, 450), pos, 31)

 

addEvent(doConfusion2, 1000, cid, -1, a)

end

function doBurn2(cid, cd, check, damage)

local stg = conds["Burn"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

 

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "burn", a)

doItemSetAttribute(item.uid, "burndmg", damage)

end

 

if a <= -1 then

setPlayerStorageValue(cid, stg, -1)

return true

end

 

doCreatureAddHealth(cid, -damage, 15, COLOR_BURN)

addEvent(doBurn2, 3500, cid, -1, a, damage)

end

function doPoison2(cid, cd, check, damage)

local stg = conds["Poison"]

if not isCreature(cid) then return true end --is creature?

----------

if isSummon(cid) or ehMonstro(cid) and pokes[getCreatureName(cid)] then --alterado v1.6

local type = pokes[getCreatureName(cid)].type

local type2 = pokes[getCreatureName(cid)].type2

if isInArray({"poison", "steel"}, type) or isInArray({"poison", "steel"}, type2) then

return true

end

end

---------

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

 

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "poison", a)

doItemSetAttribute(item.uid, "poisondmg", damage)

end

 

if a <= -1 or getCreatureHealth(cid) == 1 then

setPlayerStorageValue(cid, stg, -1)

return true

end

 

local dano = getCreatureHealth(cid)-damage <= 0 and getCreatureHealth(cid)-1 or damage

doCreatureAddHealth(cid, -dano, 8, COLOR_GRASS)

 

addEvent(doPoison2, 1500, cid, -1, a, damage)

end

function doFear2(cid, cd, check, skill)

local stg = conds["Fear"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "fear", a)

doItemSetAttribute(item.uid, "fearSkill", skill)

end

 

if a <= -1 then

if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

doRemoveCondition(cid, CONDITION_PARALYZE)

addEvent(doAddCondition, 10, cid, paralizeArea2)

end

if not isSleeping(cid) and not isParalyze(cid) then

doRegainSpeed(cid) --alterado

end

setPlayerStorageValue(cid, stg, -1)

return true

end

 

if skill == "Roar" then

eff = 244

else --edited Roar

eff = 139

end

 

if math.random(1, 6) >= 4 then

doSendMagicEffect(getThingPos(cid), eff)

end

local isTarget = isSummon(cid) and getCreatureTarget(getCreatureMaster(cid)) or getCreatureTarget(cid)

if isCreature(isTarget) and not isSleeping(cid) and not isParalyze(cid) and getPlayerStorageValue(cid, 654878) <= 0 then --alterado v1.6

local dir = getCreatureDirectionToTarget(cid, isTarget)

doChangeSpeed(cid, -getCreatureSpeed(cid))

doChangeSpeed(cid, 100)

doPushCreature(cid, roardirections[dir][1], 1, 0) --alterado v1.6

doChangeSpeed(cid, -100)

end

local pos = getThingPos(cid)

addEvent(doSendMagicEffect, math.random(0, 450), pos, eff)

 

addEvent(doFear2, 1000, cid, -1, a, skill)

end

function doStun2(cid, cd, eff, check, spell)

local stg = conds["Stun"]

if not isCreature(cid) then return true end --is creature?

if not canDoMiss(cid, spell) then return true end

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "stun", a)

doItemSetAttribute(item.uid, "stunEff", eff)

doItemSetAttribute(item.uid, "stunSpell", spell)

end

 

if a <= -1 then

doRemoveCondition(cid, CONDITION_PARALYZE)

if not isSleeping(cid) and not isParalyze(cid) then

addEvent(doRegainSpeed, 50, cid) --alterado

end

setPlayerStorageValue(cid, stg, -1)

return true

end

 

if getCreatureCondition(cid, CONDITION_PARALYZE) == false then

doAddCondition(cid, paralizeArea2)

end

doSendMagicEffect(getThingPos(cid), eff)

addEvent(doStun2, 1000, cid, -1, eff, a, spell)

end

function doParalyze2(cid, cd, eff, check, first)

local stg = conds["Paralyze"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "paralyze", a)

doItemSetAttribute(item.uid, "paralyzeEff", eff)

end

 

if a <= -1 then

if isPlayer(cid) then

if not isSleeping(cid) then --alterado

mayNotMove(cid, false)

end

else

if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

doRemoveCondition(cid, CONDITION_PARALYZE)

addEvent(doAddCondition, 10, cid, paralizeArea2)

end

if not isSleeping(cid) then

doRegainSpeed(cid) --alterado

end

end

setPlayerStorageValue(cid, stg, -1)

return true

end

 

if isPlayer(cid) then

mayNotMove(cid, true)

else --alterado v1.6

doChangeSpeed(cid, -2000)

end

doSendMagicEffect(getThingPos(cid), eff)

addEvent(doParalyze2, 1000, cid, -1, eff, a, false)

end

function doSleep2(cid, cd, check, first)

local stg = conds["Sleep"]

if not isCreature(cid) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not isSleeping(cid) then

addEvent(doSendSleepEffect, 500, cid)

end

 

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "sleep", a)

end

 

if a <= -1 then

if not isPlayer(cid) then

local dittoStg = getPlayerStorageValue(cid, 1010)

if getCreatureName(cid) == "Ditto" and isSummon(cid) and tostring(dittoStg) and dittoStg ~= "Ditto" then

doSetCreatureOutfit(cid, {lookType = getItemAttribute(getPlayerSlotItem(getCreatureMaster(cid), 8).uid, "transOutfit")}, -1)

else

doRemoveCondition(cid, CONDITION_OUTFIT)

end

if getPlayerStorageValue(cid, 625877) ~= -1 then

doSetCreatureOutfit(cid, {lookType = getPlayerStorageValue(cid, 625877)}, -1) --alterado v1.6

end

end

if isPlayer(cid) then

if not isParalyze(cid) then

mayNotMove(cid, false) --alterado

end

else

if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

doRemoveCondition(cid, CONDITION_PARALYZE)

addEvent(doAddCondition, 10, cid, paralizeArea2)

end

if not isParalyze(cid) then

doRegainSpeed(cid) --alterado

end

end

setPlayerStorageValue(cid, stg, -1)

return true

end

 

if first then

if getCreatureName(cid) == "Ursaring" and getCreatureCondition(cid, CONDITION_OUTFIT) == true then

 

elseif not isPlayer(cid) then

if isInArray({604, 605, 1015, 1016, 1183, 1184}, getCreatureOutfit(cid).lookType) then

Info = 0 --alterado v1.6

else

Info = getMonsterInfo(getCreatureName(cid)).lookCorpse

end

local look = getCreatureOutfit(cid)

---------

local dittoStg = getPlayerStorageValue(cid, 1010)

if getCreatureName(cid) == "Ditto" and isSummon(cid) and tostring(dittoStg) and dittoStg ~= "Ditto" then

local InfoDitto = getMonsterInfo(tostring(dittoStg)).lookCorpse

if InfoDitto ~= 0 and look.lookType ~= 0 then

doSetCreatureOutfit(cid, {lookType = 0, lookTypeEx = getMonsterInfo(tostring(dittoStg)).lookCorpse}, -1)

end

else

if getCreatureName(cid) == "Shiny Golem" and getCreatureOutfit(cid).lookType == 1403 then

doRemoveCondition(cid, CONDITION_OUTFIT)

elseif Info ~= 0 and look.lookType ~= 0 then

doSetCreatureOutfit(cid, {lookType = 0, lookTypeEx = getMonsterInfo(getCreatureName(cid)).lookCorpse}, -1)

end

end

end

end

--alterado v1.6

if isPlayer(cid) then

mayNotMove(cid, true)

else

doChangeSpeed(cid, -getCreatureSpeed(cid))

end

addEvent(doSleep2, 1000, cid, -1, a, false)

end

function doLeech2(cid, attacker, cd, check, damage)

local stg = conds["Leech"]

if not isCreature(cid) then return true end --is creature?

if attacker ~= 0 and not isCreature(attacker) then return true end --is creature?

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

 

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, "leech", a)

doItemSetAttribute(item.uid, "leechdmg", damage)

end

 

if a <= -1 then

setPlayerStorageValue(cid, stg, -1)

return true

end

 

local life = getCreatureHealth(cid)

------

doCreatureAddHealth(cid, -damage)

doSendAnimatedText(getThingPos(cid), "-"..damage.."", 144)

doSendMagicEffect(getThingPos(cid), 45)

------

local newlife = life - getCreatureHealth(cid)

if newlife >= 1 and attacker ~= 0 then

doSendMagicEffect(getThingPos(attacker), 14)

doCreatureAddHealth(attacker, newlife)

doSendAnimatedText(getThingPos(attacker), "+"..newlife.."", 32)

end

addEvent(doLeech2, 2000, cid, attacker, -1, a, damage)

end

function doBuff2(cid, cd, eff, check, buff, first, attr)

if not isCreature(cid) then return true end --is creature?

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

local atributo = attr and attr or ""

if first and atributo == "" then

for i = 1, 3 do

if getPlayerStorageValue(cid, Buffs[2]) <= 0 then

atributo = Buffs[1]

break

end

end

end

if atributo == "" then return true end

if ehMonstro(cid) then atributo = "Buff1" end

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

local stg = conds[atributo]

if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end --n usar 2x

if not check and getPlayerStorageValue(cid, stg) >= 1 then

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

else

setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

end

 

local a = getPlayerStorageValue(cid, stg)

 

if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doItemSetAttribute(item.uid, atributo, a)

doItemSetAttribute(item.uid, atributo.."eff", eff)

doItemSetAttribute(item.uid, atributo.."skill", buff)

end

 

if a <= -1 then --alterado v1.6

if isInArray({"Future Sight", "Camouflage", "Acid Armor", "Iron Defense", "Minimize", "Bug Fighter", "Ancient Fury"}, buff) then

if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then

if isSummon(cid) then

local item = getPlayerSlotItem(getCreatureMaster(cid), 8)

doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) --alterado v1.6.1

end

elseif not isSleeping(cid) then

doRemoveCondition(cid, CONDITION_OUTFIT)

end

setPlayerStorageValue(cid, 9658783, -1)

setPlayerStorageValue(cid, 625877, -1) --alterado v1.6

end

if isInArray({"Strafe", "Agility", "Ancient Fury", "War Dog", "Fighter Spirit", "Furious Legs", "Ultimate Champion", "Bug Fighter"}, buff) then

setPlayerStorageValue(cid, 374896, -1) --alterado v1.6

end

setPlayerStorageValue(cid, stg, -1)

return true

end

 

doSendMagicEffect(getThingPos(cid), eff)

 

if first then

if buff == "Strafe" or buff == "Agility" then

setPlayerStorageValue(cid, 374896, 1) --velo atk --alterado v1.6

doRaiseStatus(cid, 0, 0, 100, a)

elseif buff == "Tailwind" then

doRaiseStatus(cid, 0, 0, 200, a)

elseif buff == "Rage" then

doRaiseStatus(cid, 2, 0, 0, a)

elseif buff == "Harden" then

doRaiseStatus(cid, 0, 2, 0, a)

elseif buff == "Calm Mind" then

doRaiseStatus(cid, 0, 2, 0, a)

elseif buff == "Ancient Fury" then

doSetCreatureOutfit(cid, {lookType = outFurys[getCreatureName(cid)].outFury}, a*1000)

setPlayerStorageValue(cid, 374896, 1) --velo atk

if getCreatureName(cid) == "Shiny Charizard" then

doRaiseStatus(cid, 2, 0, 0, a) --atk melee --alterado v1.6

else

doRaiseStatus(cid, 0, 2, 0, a) --def

end

setPlayerStorageValue(cid, 625877, outFurys[getCreatureName(cid)].outFury) --alterado v1.6

elseif buff == "War Dog" then

doRaiseStatus(cid, 1.5, 1.5, 0, a)

setPlayerStorageValue(cid, 374896, 1) --velo atk

elseif buff == "Rest" then

doSleep2(cid, cd, getPlayerStorageValue(cid, conds["Sleep"]), true)

doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

elseif isInArray({"Fighter Spirit", "Furious Legs", "Ultimate Champion"}, buff) then

doRaiseStatus(cid, 1.5, 0, 0, a) --atk melee --alterado v1.6

setPlayerStorageValue(cid, 374896, 1) --velo atk

addEvent(setPlayerStorageValue, a*1000, cid, 465987, -1)

elseif isInArray({"Future Sight", "Camouflage", "Acid Armor", "Iron Defense", "Minimize"}, buff) then

doSetCreatureOutfit(cid, {lookType = outImune[buff]}, -1)

setPlayerStorageValue(cid, 9658783, 1)

setPlayerStorageValue(cid, 625877, outImune[buff]) --alterado v1.6

elseif buff == "Bug Fighter" then

setPlayerStorageValue(cid, 374896, 1) --velo atk --alterado v1.6

doRaiseStatus(cid, 1.5, 1.5, 100, a)

doSetCreatureOutfit(cid, {lookType = 1448}, a*1000)

setPlayerStorageValue(cid, 625877, 1448) --alterado v1.6

end

end

addEvent(doBuff2, 1000, cid, -1, eff, a, buff, false, atributo)

end

 

if ret.buff and ret.buff ~= "" then

doBuff2(ret.id, ret.cd, ret.eff, ret.check, ret.buff, ret.first, (ret.attr and ret.attr or false))

end

if isSummon(ret.id) and getPokemonBoost(ret.id) ~= 0 and math.random(1, 100) <= getPokemonBoost(ret.id) then --sistema "pegou no boost"

if ret.cond and not isInArray({"Poison", "Burn", "Leech", "Fear"}, ret.cond) then --alterado v1.6

doSendMagicEffect(getThingPosWithDebug(ret.id), 114)

return true

end

end

if ret.cond and ret.cond == "Miss" then

doMiss2(ret.id, ret.cd, ret.eff, ret.check, ret.spell)

elseif ret.cond and ret.cond == "Silence" then

doSilence2(ret.id, ret.cd, ret.eff, ret.check)

elseif ret.cond and ret.cond == "Slow" then

doSlow2(ret.id, ret.cd, ret.eff, ret.check, ret.first)

elseif ret.cond and ret.cond == "Confusion" then

doConfusion2(ret.id, ret.cd, ret.check)

elseif ret.cond and ret.cond == "Burn" then

doBurn2(ret.id, ret.cd, ret.check, ret.damage)

elseif ret.cond and ret.cond == "Poison" then

doPoison2(ret.id, ret.cd, ret.check, ret.damage)

elseif ret.cond and ret.cond == "Fear" then

doFear2(ret.id, ret.cd, ret.check, ret.skill)

elseif ret.cond and ret.cond == "Stun" then

doStun2(ret.id, ret.cd, ret.eff, ret.check, ret.spell)

elseif ret.cond and ret.cond == "Paralyze" then

doParalyze2(ret.id, ret.cd, ret.eff, ret.check, ret.first)

elseif ret.cond and ret.cond == "Sleep" then

doSleep2(ret.id, ret.cd, ret.check, ret.first)

elseif ret.cond and ret.cond == "Leech" then

doLeech2(ret.id, ret.attacker, ret.cd, ret.check, ret.damage)

end

end

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

function cleanBuffs2(item)

if item ~= 0 then

for i = 1, 3 do

doItemEraseAttribute(item, Buffs[1])

doItemEraseAttribute(item, Buffs[1].."eff")

doItemEraseAttribute(item, Buffs[1].."skill")

end

end

end

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

function doCureStatus(cid, type, playerballs)

if not isCreature(cid) then return true end

if playerballs and isPlayer(cid) then

local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK)

local mb = getPlayerSlotItem(cid, 8)

if isPokeball(mb.itemid) then

if not type or type == "all" then

for b = 1, #injuries2 do

doItemSetAttribute(mb.uid, ""..injuries2.n.."", -1)

end

else

doItemSetAttribute(mb.uid, ""..type.."", -1)

end

end

for bname, balls in pairs (pokeballs) do

for times = 1,3 do

local items = getItemsInContainerById(bp.uid, balls.all[times])

for _, uid in pairs(items) do

if not type or type == "all" then

for b = 1, #injuries2 do

doItemSetAttribute(uid, ""..injuries2.n.."", -1)

end

else

doItemSetAttribute(uid, ""..type.."", -1)

end

end

end

end

end

if type == "all" then

for a = 1, #injuries2 do

setPlayerStorageValue(cid, injuries2[a].m, -1)

end

return true

end

for a, b in pairs (injuries2) do

if b.n == type then

setPlayerStorageValue(cid, b.m, -1)

end

end

end

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

function isWithCondition(cid)

for i = 1, #injuries2 do

if getPlayerStorageValue(cid, injuries2.m) >= 1 then

return true

end

end

return false

end

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

function doCureBallStatus(item, type)

if not type or type == "all" then

for b = 1, #injuries2 do

doItemSetAttribute(item, ""..injuries2.n.."", -1)

end

else

doItemSetAttribute(item, ""..type.."", -1)

end

end

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

function isBurning(cid)

if not isCreature(cid) then return false end

if getPlayerStorageValue(cid, conds["Burn"]) >= 0 then return true end

return false

end

function isPoisoned(cid)

if not isCreature(cid) then return false end

if getPlayerStorageValue(cid, conds["Poison"]) >= 0 then return true end

return false

end

function isSilence(cid)

if not isCreature(cid) then return false end

if getPlayerStorageValue(cid, conds["Silence"]) >= 0 then return true end

return false

end

function isParalyze(cid)

if not isCreature(cid) then return false end

if getPlayerStorageValue(cid, conds["Paralyze"]) >= 0 then return true end

return false

end

 

function isSleeping(cid)

if not isCreature(cid) then return false end

if getPlayerStorageValue(cid, conds["Sleep"]) >= 0 then return true end

return false

end

function isWithFear(cid)

if not isCreature(cid) then return false end

if getPlayerStorageValue(cid, conds["Fear"]) >= 0 then return true end

return false

end

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

function doMoveInArea2(cid, eff, area, element, min, max, spell, ret)

if not isCreature(cid) then return true end

if spell and spell == "Mud Bomb" then

pos = getPosfromArea(getMasterTarget(cid), area)

else

pos = getPosfromArea(cid, area)

end

setPlayerStorageValue(cid, 21101, -1) --alterado v1.6

 

local skills = {"Skull Bash", "Gust", "Water Pulse", "Stick Throw", "Overheat", "Toxic", "Take Down", "Gyro Ball"} --alterado v1.7

local n = 0

local l = 0

while n < #pos do

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

n = n+1

thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253}

local pid = getThingFromPosWithProtect(thing)

----

if pid ~= cid then

if spell and isInArray(skills, spell) then

if spell == "Stick Throw" then

addEvent(sendEffWithProtect, l*300, cid, pos[n], eff)

addEvent(sendMoveBack, 1200, cid, pos, eff, min, max)

addEvent(doMoveDano2, l*300, cid, pid, element, min, max, ret, spell) --alterado v1.6

elseif spell and spell == "Gyro Ball" then --alterado v1.7

pos[n].x = pos[n].x+1

addEvent(sendEffWithProtect, l*200, cid, pos[n], eff)

addEvent(doMoveDano2, l*200, cid, pid, element, min, max, ret, spell)

else

addEvent(sendEffWithProtect, l*200, cid, pos[n], eff)

addEvent(doMoveDano2, l*200, cid, pid, element, min, max, ret, spell) --alterado v1.6

end

elseif spell and spell == "Epicenter" then

local random = math.random(50, 500)

addEvent(sendEffWithProtect, random, cid, pos[n], eff)

addEvent(doDanoWithProtect, random, cid, GROUNDDAMAGE, pos[n], crusher, -min, -max, 255)

elseif spell and spell == "Shadowave" then

posi = {x=pos[n].x, y=pos[n].y+1, z=pos[n].z}

sendEffWithProtect(cid, posi, eff)

doMoveDano2(cid, pid, element, min, max, ret, spell) --alterado v1.6

elseif spell and spell == "Surf" then

addEvent(sendEffWithProtect, math.random(50, 500), cid, pos[n], eff)

addEvent(doMoveDano2, 400, cid, pid, element, min, max, ret, spell) --alterado v1.6

elseif spell and spell == "Sand Attack" then

addEvent(sendEffWithProtect, n*200, cid, pos[n], eff)

addEvent(doMoveDano2, n*200, cid, pid, element, min, max, ret, spell) --alterado v1.6

elseif spell and (spell == "Muddy Water" or spell == "Venom Motion") then

local arr = {

[1] = 0, [2] = 0, [3] = 0, [4] = 200, [5] = 200, [6] = 200, [7] = 400, [8] = 400, [9] = 400, [10] = 600, [11] = 600,

[12] = 600, [13] = 800, [14] = 800, [15] = 800

}

local time = {0, 200, 400, 600, 800}

 

addEvent(sendEffWithProtect, arr[n], cid, pos[n], eff)

addEvent(doMoveDano2, arr[n], cid, pid, element, min, max, ret, spell)

elseif spell and (spell == "Inferno" or spell == "Fissure") then

addEvent(sendEffWithProtect, math.random(0, 500), cid, pos[n], eff)

addEvent(doMoveDano2, math.random(0, 500), cid, pid, element, min, max, ret, spell)

else

sendEffWithProtect(cid, pos[n], eff)

doMoveDano2(cid, pid, element, min, max, ret, spell)

end

end

l = l+1

end

end

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

function doMoveDano2(cid, pid, element, min, max, ret, spell)

if isCreature(pid) and isCreature(cid) and cid ~= pid then

if isNpcSummon(pid) and getCreatureTarget(pid) ~= cid then

return true --alterado v1.6

end

if ehNPC(pid) then return true end

---

local canAtk = true --alterado v1.6

if getPlayerStorageValue(pid, 21099) >= 1 then

doSendMagicEffect(getThingPosWithDebug(pid), 135)

doSendAnimatedText(getThingPosWithDebug(pid), "REFLECT", COLOR_GRASS)

addEvent(docastspell, 100, pid, spell)

if getCreatureName(pid) == "Wobbuffet" then

doRemoveCondition(pid, CONDITION_OUTFIT)

end

canAtk = false

setPlayerStorageValue(pid, 21099, -1)

setPlayerStorageValue(pid, 21100, 1)

setPlayerStorageValue(pid, 21101, cid)

setPlayerStorageValue(pid, 21103, getTableMove(cid, getPlayerStorageValue(cid, 21102)).f)

end

---

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isSummon(cid) and (ehMonstro(pid) or (isSummon(pid) and canAttackOther(cid, pid) == "Can") or (isPlayer(pid) and canAttackOther(cid, pid) == "Can" and #getCreatureSummons(pid) <= 0)) and pid ~= cid then

if canAtk then --alterado v1.6

if ret and ret.cond then

ret.id = pid

ret.check = getPlayerStorageValue(pid, conds[ret.cond])

doCondition2(ret)

end

if spell == "Selfdestruct" then

if getPlayerStorageValue(pid, 9658783) <= 0 then

doSendAnimatedText(getThingPosWithDebug(pid), "-"..max.."", COLOR_NORMAL)

doCreatureAddHealth(pid, -max) --alterado v1.6

end

else

doTargetCombatHealth(cid, pid, element, -(math.abs(min)), -(math.abs(max)), 255)

end

end

elseif ehMonstro(cid) and (isSummon(pid) or (isPlayer(pid) and #getCreatureSummons(pid) <= 0)) and pid ~= cid then

if canAtk then --alterado v1.6

if ret and ret.cond then

ret.id = pid

ret.check = getPlayerStorageValue(pid, conds[ret.cond])

doCondition2(ret)

end

if spell == "Selfdestruct" then

if getPlayerStorageValue(pid, 9658783) <= 0 then

doSendAnimatedText(getThingPosWithDebug(pid), "-"..max.."", COLOR_NORMAL)

doCreatureAddHealth(pid, -max) --alterado v1.6

end

else

doTargetCombatHealth(cid, pid, element, -(math.abs(min)), -(math.abs(max)), 255)

end

end

elseif isPlayer(cid) and ehMonstro(pid) and pid ~= cid then

if canAtk then --alterado v1.6

if ret and ret.cond then

ret.id = pid

ret.check = getPlayerStorageValue(pid, conds[ret.cond])

doCondition2(ret)

end

if spell == "Selfdestruct" then

if getPlayerStorageValue(pid, 9658783) <= 0 then

doSendAnimatedText(getThingPosWithDebug(pid), "-"..max.."", COLOR_NORMAL)

doCreatureAddHealth(pid, -max) --alterado v1.6

end

else

doTargetCombatHealth(cid, pid, element, -(math.abs(min)), -(math.abs(max)), 255)

end

end

end

end

end

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

function sendEffWithProtect(cid, pos, eff) --Manda algum magic effect com proteçoes

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

local checkpos = pos

checkpos.stackpos = 0

if not hasTile(checkpos) then

return true

end

if not canWalkOnPos2(pos, false, true, false, true, false) then --alterado v1.6

return true

end

doSendMagicEffect(pos, eff)

end

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

function getThingPosWithDebug(what)

if not isCreature(what) or getCreatureHealth(what) <= 0 then

return {x = 1, y = 1, z = 10}

end

return getThingPos(what)

end

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

function doDanoWithProtect(cid, element, pos, area, min, max, eff) --Da dano com proteçoes

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

doAreaCombatHealth(cid, element, pos, area, -(math.abs(min)), -(math.abs(max)), eff)

end

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

function doDanoWithProtectWithDelay(cid, target, element, min, max, eff, area)

const_distance_delay = 56

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if target ~= 0 and isCreature(target) and not area then

delay = getDistanceBetween(getThingPosWithDebug(cid), getThingPosWithDebug(target)) * const_distance_delay

addEvent(doDanoWithProtect, delay, cid, element, getThingPosWithDebug(target), 0, min, max, eff)

return true

end

addEvent(doDanoWithProtect, 200, cid, element, getThingPosWithDebug(target), area, min, max, eff)

end

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

function sendDistanceShootWithProtect(cid, frompos, topos, eff) --Manda um efeito de distancia com proteçoes

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

doSendDistanceShoot(frompos, topos, eff)

end

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

function sendMoveBack(cid, pos, eff, min, max) --Manda o Atk do farfetchd de volta...

local m = #pos+1

for i = 1, #pos do

if not isCreature(cid) then return true end

---

m = m-1

thing = {x=pos[m].x,y=pos[m].y,z=pos[m].z,stackpos=253}

local pid = getThingFromPosWithProtect(thing)

addEvent(doMoveDano2, i*200, cid, pid, FLYINGDAMAGE, min/4, max/4)

addEvent(sendEffWithProtect, i*200, cid, pos[m], eff) --alterado v1.3

--

end

end

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

function upEffect(cid, effDis)

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

pos = getThingPos(cid)

frompos = {x = pos.x+1, y = pos.y, z = pos.z}

frompos.x = pos.x - math.random(4, 7)

frompos.y = pos.y - math.random(5, 8)

doSendDistanceShoot(getThingPos(cid), frompos, effDis)

end

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

function fall(cid, master, element, effDis, effArea) --Function pra jogar efeitos pra cima e cair depois... tpw falling rocks e blizzard

if isCreature(cid) then

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

pos = getThingPos(cid)

pos.x = pos.x + math.random(-4,4)

pos.y = pos.y + math.random(-4,4)

if isMonster(cid) or isPlayer(cid) then

frompos = {x = pos.x+1, y = pos.y, z = pos.z}

elseif isSummon(cid) then

frompos = getThingPos(master)

end

frompos.x = pos.x - 7

frompos.y = pos.y - 6

if effDis ~= -1 then --alterado!

doSendDistanceShoot(frompos, pos, effDis)

end

doAreaCombatHealth(cid, element, pos, 0, 0, 0, effArea)

end

end

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

function canDoMiss(cid, nameAtk) --alterado v1.5

local atkTerra = {"Sand Attack", "Mud Shot", "Mud Bomb", "Stomp", "Crusher Stomp", "Mud Slap", "Sand Tomb"} --alterado v1.7

local atkElectric = {"Electric Storm", "Thunder Wave", "Thunder", "Electricity", "Wild Charge"} --alterado v1.7

if not isCreature(cid) then return false end

if isPlayer(cid) then return true end

if not pokes[getCreatureName(cid)] then return true end

if isInArray(atkTerra, nameAtk) then

if (pokes[getCreatureName(cid)].type == "flying") or (pokes[getCreatureName(cid)].type2 == "flying") or isInArray(specialabilities["levitate"], getCreatureName(cid)) then

return false

end

elseif isInArray(atkElectric, nameAtk) then

if (pokes[getCreatureName(cid)].type == "ground") or (pokes[getCreatureName(cid)].type2 == "ground") then

return false

end

end

return true

end

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

function doMoveInAreaMulti(cid, effDis, effMagic, areaEff, areaDano, element, min, max, ret) --alterado v1.7

if not isCreature(cid) then return true end

local pos = getPosfromArea(cid, areaEff)

local pos2 = getPosfromArea(cid, areaDano)

local n = 0

while n < #pos2 do

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

n = n+1

thing = {x=pos2[n].x,y=pos2[n].y,z=pos2[n].z,stackpos=253}

if n < #pos then

addEvent(sendDistanceShootWithProtect, 50, cid, getThingPos(cid), pos[n], effDis) --39

addEvent(sendEffWithProtect, 100, cid, pos[n], effMagic) -- 112

--- --alterado v1.6.1

if math.random(1, 2) == 2 then

addEvent(sendDistanceShootWithProtect, 450, cid, getThingPos(cid), pos[n], effDis) --550

addEvent(sendEffWithProtect, 550, cid, pos[n], effMagic) -- 650

end

end

local pid = getThingFromPosWithProtect(thing)

if isCreature(pid) then

if not ret then ret = {} end --alterado v1.7

doMoveDano2(cid, pid, element, min, max, ret, getPlayerStorageValue(cid, 21102))

end

end

end

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

function doDoubleHit(cid, pid, valor, races) --alterado v1.6

if isCreature(cid) and isCreature(pid) then

if getPlayerStorageValue(cid, 374896) >= 1 then

if getMasterTarget(cid) == pid then

if isInArray({"Kadabra", "Alakazam", "Mew", "Shiny Abra", "Shiny Alakazam"}, getCreatureName(cid)) then

doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(pid), 39)

end

if isSummon(cid) then

doTargetCombatHealth(getCreatureMaster(cid), pid, PHYSICALDAMAGE, -math.abs(valor), -math.abs(valor), 255)

else

doCreatureAddHealth(pid, -math.abs(valor), 3, races[getMonsterInfo(getCreatureName(pid)).race].cor)

end

end

end

end

end

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

function doDanoInTarget(cid, target, combat, min, max, eff) --alterado v1.7

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

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

doTargetCombatHealth(cid, target, combat, -math.abs(min), -math.abs(max), eff)

end

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

function doDanoInTargetWithDelay(cid, target, combat, min, max, eff) --alterado v1.7

const_distance_delay = 56

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

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

local delay = getDistanceBetween(getThingPosWithDebug(cid), getThingPosWithDebug(target)) * const_distance_delay

addEvent(doDanoInTarget, delay, cid, target, combat, min, max, eff)

end

 

 

 

Rep+++

Link para o comentário
Compartilhar em outros sites

Aqui

 

 

function getCreatureInRange(type, fromPos, toPos)

--alterado v1.7

local types = {

["player"] = isPlayer,

["monster"] = ehMonstro,

["npc"] = ehNPC,

["creature"] = isCreature

}

local tmp = {}

 

local type = types[type]

if(not type) then

print('[getCreatureInRange]>> Unknow type')

return false

end

 

local thing = nil

for x = fromPos.x, toPos.x do

for y = fromPos.y, toPos.y do

for z = fromPos.z, toPos.z do

for s = 1, 253 do

local position = {x = x, y = y, z = z, stackpos = s}

thing = getTileThingByPos(position)

if(type(thing.uid) == true) then

table.insert(tmp, thing.uid)

end

end

end

end

end

return tmp

end

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

function doRemoveItemFromPos(position, itemid, count)

local item = getTileItemById(position, itemid)

if(item.uid ~= 0)then

return doRemoveItem(item.uid, count or -1)

end

return false

end

function isInRange(position, fromPosition, toPosition)

return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)

end

function getDistanceBetween(fromPosition, toPosition)

local x, y = math.abs(fromPosition.x - toPosition.x), math.abs(fromPosition.y - toPosition.y)

local diff = math.max(x, y)

if(fromPosition.z ~= toPosition.z) then

diff = diff + 9 + 6

end

return diff

end

function getDirectionTo(pos1, pos2)

local dir = NORTH

if(pos1.x > pos2.x) then

dir = WEST

if(pos1.y > pos2.y) then

dir = NORTHWEST

elseif(pos1.y < pos2.y) then

dir = SOUTHWEST

end

elseif(pos1.x < pos2.x) then

dir = EAST

if(pos1.y > pos2.y) then

dir = NORTHEAST

elseif(pos1.y < pos2.y) then

dir = SOUTHEAST

end

else

if(pos1.y > pos2.y) then

dir = NORTH

elseif(pos1.y < pos2.y) then

dir = SOUTH

end

end

return dir

end

function getCreatureLookPosition(cid)

return getPosByDir(getThingPos(cid), getCreatureLookDirection(cid))

end

function getPositionByDirection(pos, direction, size)

local n = size or 1

local position = {}

position.x = pos.x

position.y = pos.y

position.z = pos.z

if pos.stackpos then

position.stackpos = pos.stackpos

end

if(direction == NORTH) then

position.y = position.y - n

elseif(direction == SOUTH) then

position.y = position.y + n

elseif(direction == WEST) then

position.x = position.x - n

elseif(direction == EAST) then

position.x = position.x + n

elseif(direction == NORTHWEST) then

position.y = position.y - n

position.x = position.x - n

elseif(direction == NORTHEAST) then

position.y = position.y - n

position.x = position.x + n

elseif(direction == SOUTHWEST) then

position.y = position.y + n

position.x = position.x - n

elseif(direction == SOUTHEAST) then

position.y = position.y + n

position.x = position.x + n

end

return position

end

function doComparePositions(position, positionEx)

return position.x == positionEx.x and position.y == positionEx.y and position.z == positionEx.z

end

function getArea(position, x, y)

local t = {}

for i = (position.x - x), (position.x + x) do

for j = (position.y - y), (position.y + y) do

table.insert(t, {x = i, y = j, z = position.z})

end

end

return t

end

function checkAreaUid(pos, area, showP, showM) -- By Wantedzin(Perdigs)

local creaturesList = {}

local center = {}

center.y = math.floor(#area/2)+1

for y = 1, #area do

for x = 1, #area[y] do

local number = area[y][x]

if number > 0 then

center.x = math.floor(table.getn(area[y])/2)+1

local pos = getTopCreature {x = pos.x + x - center.x, y = pos.y + y - center.y, z = pos.z, stackpos = STACKPOS_TOP_CREATURE}

if (pos.type == 1 and showP == 1) or (pos.type == 2 and showM == 1) then

table.insert(creaturesList, pos.uid)

end

end

end

end

return creaturesList

end

------------------ Function getPosfromArea(cid,area) by Dokmos ------------------

function getPosfromArea(cid,area)

icenter = math.floor(table.getn(area)/2)+1

jcenter = math.floor(table.getn(area[1])/2)+1

center = area[icenter]

ivar = table.getn(area)

jvar = table.getn(area[1])

i = table.getn(area)^2

j = table.getn(area[1])^2

local mydir = isCreature(getMasterTarget(cid)) and getCreatureDirectionToTarget(cid, getMasterTarget(cid)) or getCreatureLookDir(cid)

setPlayerStorageValue(cid, 21101, -1) --alterado v1.6

if center[jcenter] == 3 then

if mydir == 0 then

signal = {-1,1,1,2}

elseif mydir == 1 then

signal = {1,-1,2,1}

elseif mydir == 2 then

signal = {1,-1,1,2}

elseif mydir == 3 then

signal = {-1,1,2,1}

end

else

signal = {-1,1,1,2}

end

POSITIONS = {}

P = 0

 

repeat

pvar = {0,0}

I = area[ivar]

J = I[jvar]

i = i-1

j = j-1

if J == 1 then

if jvar < jcenter then

pvar[signal[3]] = signal[1]*math.abs((jcenter-jvar))

elseif jvar > jcenter then

pvar[signal[3]] = signal[2]*math.abs((jcenter-jvar))

end

 

if ivar < icenter then

pvar[signal[4]] = signal[1]*math.abs((icenter-ivar))

elseif ivar > icenter then

pvar[signal[4]] = signal[2]*math.abs((icenter-ivar))

end

end

if jvar > 1 then

jvar = (jvar-1)

elseif ivar > 1 then

jvar = table.getn(area[1])

ivar = (ivar-1)

end

local pos = getThingPos(cid)

local areapos = {x=pos.x+(pvar[1]),y=pos.y+(pvar[2]),z=pos.z}

if pos.x ~= areapos.x or pos.y ~= areapos.y then

P = P+1

POSITIONS[P] = areapos

end

 

until i <= 0 and j <= 0

return POSITIONS

end

 

Link para o comentário
Compartilhar em outros sites

Pega o meu 032-position.lua e ve se da erro ainda:

 

 

function getCreatureInRange(type, fromPos, toPos)

 

--alterado v1.7

local types = {

["player"] = isPlayer,

["monster"] = ehMonstro,

["npc"] = ehNPC,

["creature"] = isCreature

}

local tmp = {}

 

local type = types[type]

if(not type) then

print('[getCreatureInRange]>> Unknow type')

return false

end

 

local thing = nil

for x = fromPos.x, toPos.x do

for y = fromPos.y, toPos.y do

for z = fromPos.z, toPos.z do

for s = 1, 253 do

local position = {x = x, y = y, z = z, stackpos = s}

thing = getTileThingByPos(position)

if(type(thing.uid) == true) then

table.insert(tmp, thing.uid)

end

end

end

end

end

return tmp

end

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

function doRemoveItemFromPos(position, itemid, count)

local item = getTileItemById(position, itemid)

if(item.uid ~= 0)then

return doRemoveItem(item.uid, count or -1)

end

return false

end

 

function isInRange(position, fromPosition, toPosition)

return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)

end

 

function getDistanceBetween(fromPosition, toPosition)

local x, y = math.abs(fromPosition.x - toPosition.x), math.abs(fromPosition.y - toPosition.y)

local diff = math.max(x, y)

if(fromPosition.z ~= toPosition.z) then

diff = diff + 9 + 6

end

 

return diff

end

 

function getDirectionTo(pos1, pos2)

local dir = NORTH

if(pos1.x > pos2.x) then

dir = WEST

if(pos1.y > pos2.y) then

dir = NORTHWEST

elseif(pos1.y < pos2.y) then

dir = SOUTHWEST

end

elseif(pos1.x < pos2.x) then

dir = EAST

if(pos1.y > pos2.y) then

dir = NORTHEAST

elseif(pos1.y < pos2.y) then

dir = SOUTHEAST

end

else

if(pos1.y > pos2.y) then

dir = NORTH

elseif(pos1.y < pos2.y) then

dir = SOUTH

end

end

 

return dir

end

 

function getCreatureLookPosition(cid)

return getPosByDir(getThingPos(cid), getCreatureLookDirection(cid))

end

 

function getPositionByDirection(pos, direction, size)

local n = size or 1

local position = {}

position.x = pos.x

position.y = pos.y

position.z = pos.z

if pos.stackpos then

position.stackpos = pos.stackpos

end

if(direction == NORTH) then

position.y = position.y - n

elseif(direction == SOUTH) then

position.y = position.y + n

elseif(direction == WEST) then

position.x = position.x - n

elseif(direction == EAST) then

position.x = position.x + n

elseif(direction == NORTHWEST) then

position.y = position.y - n

position.x = position.x - n

elseif(direction == NORTHEAST) then

position.y = position.y - n

position.x = position.x + n

elseif(direction == SOUTHWEST) then

position.y = position.y + n

position.x = position.x - n

elseif(direction == SOUTHEAST) then

position.y = position.y + n

position.x = position.x + n

end

 

return position

end

 

function doComparePositions(position, positionEx)

return position.x == positionEx.x and position.y == positionEx.y and position.z == positionEx.z

end

 

function getArea(position, x, y)

local t = {}

for i = (position.x - x), (position.x + x) do

for j = (position.y - y), (position.y + y) do

table.insert(t, {x = i, y = j, z = position.z})

end

end

 

return t

end

 

function checkAreaUid(pos, area, showP, showM) -- By Wantedzin(Perdigs)

local creaturesList = {}

local center = {}

center.y = math.floor(#area/2)+1

for y = 1, #area do

for x = 1, #area[y] do

local number = area[y][x]

if number > 0 then

center.x = math.floor(table.getn(area[y])/2)+1

local pos = getTopCreature {x = pos.x + x - center.x, y = pos.y + y - center.y, z = pos.z, stackpos = STACKPOS_TOP_CREATURE}

if (pos.type == 1 and showP == 1) or (pos.type == 2 and showM == 1) then

table.insert(creaturesList, pos.uid)

end

end

end

end

return creaturesList

end

 

------------------ Function getPosfromArea(cid,area) by Dokmos ------------------

function getPosfromArea(cid,area)

icenter = math.floor(table.getn(area)/2)+1

jcenter = math.floor(table.getn(area[1])/2)+1

center = area[icenter]

ivar = table.getn(area)

jvar = table.getn(area[1])

i = table.getn(area)^2

j = table.getn(area[1])^2

 

local mydir = isCreature(getMasterTarget(cid)) and getCreatureDirectionToTarget(cid, getMasterTarget(cid)) or getCreatureLookDir(cid)

setPlayerStorageValue(cid, 21101, -1) --alterado v1.6

 

if center[jcenter] == 3 then

if mydir == 0 then

signal = {-1,1,1,2}

elseif mydir == 1 then

signal = {1,-1,2,1}

elseif mydir == 2 then

signal = {1,-1,1,2}

elseif mydir == 3 then

signal = {-1,1,2,1}

end

else

signal = {-1,1,1,2}

end

 

POSITIONS = {}

P = 0

 

repeat

pvar = {0,0}

I = area[ivar]

J = I[jvar]

i = i-1

j = j-1

if J == 1 then

if jvar < jcenter then

pvar[signal[3]] = signal[1]*math.abs((jcenter-jvar))

elseif jvar > jcenter then

pvar[signal[3]] = signal[2]*math.abs((jcenter-jvar))

end

 

if ivar < icenter then

pvar[signal[4]] = signal[1]*math.abs((icenter-ivar))

elseif ivar > icenter then

pvar[signal[4]] = signal[2]*math.abs((icenter-ivar))

end

end

if jvar > 1 then

jvar = (jvar-1)

elseif ivar > 1 then

jvar = table.getn(area[1])

ivar = (ivar-1)

end

local pos = getThingPos(cid)

local areapos = {x=pos.x+(pvar[1]),y=pos.y+(pvar[2]),z=pos.z}

 

if pos.x ~= areapos.x or pos.y ~= areapos.y then

P = P+1

POSITIONS[P] = areapos

end

 

until i <= 0 and j <= 0

 

return POSITIONS

end

 

 

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.
×
×
  • Criar Novo...