function getPokemonHealth(name)
if not pokes[string.lower(name)] then return false end
return getMonsterInfo(string.lower(name)).healthMax
end
function adjustWildPoke(cid, optionalLevel)
if not isCreature(cid) then return true end
if isSummon(cid) then return true end
if getPlayerStorageValue(cid, 154585) ~= 1 then
doSendMagicEffect(getThingPos(cid), 21)
end
local nick = doCorrectString(getCreatureName(cid))
local level = getPokemonWildLevelByName(nick)
local levelreducido = level
if level >= 200 then
levelreducido = 200
end
if not pokes[nick] then return false end -- rever isto
setPlayerStorageValue(cid, 1000, level) --alterado v1.8
setPlayerStorageValue(cid, 1001, (pokes[nick].offense*(levelreducido/10)) / 3.5)
setPlayerStorageValue(cid, 1002, pokes[nick].defense * ((levelreducido/100)+1) )
setPlayerStorageValue(cid, 1003, pokes[nick].agility)
setPlayerStorageValue(cid, 1004, pokes[nick].vitality * level)
setPlayerStorageValue(cid, 1005, pokes[nick].specialattack)
if getPlayerStorageValue(cid, 1002) >50 then
setPlayerStorageValue(cid, 1002, 50)
end
doRegainSpeed(cid) --alterado!
local pokeLifeMin = (pokes[nick].life + (pokes[nick].vitality * (pokes[nick].wildLvl)) * 15)
setCreatureMaxHealth(cid, pokeLifeMin) -- perfeita formula, os pokemons "ruins" só precisam de ajustes no pokemonStatus, tabela vitality.
doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
end
function adjustStatus(pk, item, health, dittoLife, conditions, isPassiva)
if not isCreature(pk) then return true end
-- Defense --
local heldBonusAttack = 1
local heldBonusDefense = 1
local heldBonusSpeed = 1
local heldBonusVitality = 1
local heldx = getItemAttribute(item, "xHeldItem")
if heldx then
local heldName, heldTier = string.explode(heldx, "|")[1], string.explode(heldx, "|")[2]
if heldName == "X-Attack" then
heldBonusAttack = heldAttack[tonumber(heldTier)]
end
if heldName == "X-Defense" then
heldBonusDefense = heldDefense[tonumber(heldTier)]
end
if heldName == "X-Haste" then
heldBonusSpeed = heldHaste[tonumber(heldTier)]
end
if heldName == "X-Vitality" then
heldBonusVitality = heldVitality[tonumber(heldTier)]
end
end
local nick = getItemAttribute(item, "poke")
local dittostat = 1
if isInArray({"ditto", "shiny ditto"}, nick) then
if getItemAttribute(item, "copyName") then
nick = getItemAttribute(item, "copyName")
dittostat = 0.7
end
end
local offense = pokes[nick].offense
if pokes[nick].offense <=0 then --alterado v1.7
doCreatureSay(cid, string.upper(spell).."!", TALKTYPE_MONSTER)
offense = 7
end
local statmultiplier = getItemAttribute(item, "multiplier")
local pb = getItemAttribute(item, "level")
local masterLevel = pb
local clanatt = getClanBonusAtt(getCreatureMaster(pk), pokes[getCreatureName(pk)].type, pokes[getCreatureName(pk)].type2)
local specialat = (((pokes[nick].specialattack * heldBonusAttack) * (masterLevel + getPokemonBoost(pk)))*dittostat ) * statmultiplier
if clanatt == nil then --- METODO POR SI SE BUGEA EL CLAN
clanatt = 0
else
clanatt = specialat * clanatt
end--- METODO POR SI SE BUGEA EL CLAN
local porcentajeclandef = getClanBonusDef(getCreatureMaster(pk), pokes[getCreatureName(pk)].type, pokes[getCreatureName(pk)].type2)
if porcentajeclandef == nil then --- METODO POR SI SE BUGEA EL CLAN
porcentajeclandef = 0
end--- METODO POR SI SE BUGEA EL CLAN
local defensareal = (pokes[nick].defense * heldBonusDefense * ((getPokemonBoost(pk)+masterLevel)/100 +1))
local defensaclan = (defensareal * porcentajeclandef)
local defensavisual = (pokes[nick].defense * heldBonusDefense * ((getPokemonBoost(pk)+masterLevel)/100 +1))*statmultiplier
porcentajeclandef = defensavisual * porcentajeclandef
setPlayerStorageValue(pk, 1001, (offense*(masterLevel/10)) * heldBonusAttack)
setPlayerStorageValue(pk, 1002, (defensareal + defensaclan) *statmultiplier)
setPlayerStorageValue(pk, 1003, pokes[nick].agility + heldBonusSpeed)
setPlayerStorageValue(pk, 1004, pokes[nick].vitality * (getMasterLevel(pk) + getPokemonBoost(pk)))
setPlayerStorageValue(pk, 1005, pokes[nick].specialattack * heldBonusAttack)
doItemSetAttribute(item, "def", defensavisual + porcentajeclandef)
if getPlayerStorageValue(pk, 1002) >50 then
setPlayerStorageValue(pk, 1002, 50)
doItemSetAttribute(item, "def", 50)
end
local boost = getPokemonBoost(pk)
doItemSetAttribute(item, "spatt", specialat+clanatt)
doItemSetAttribute(item, "clanatt", clanatt)
doItemSetAttribute(item, "clandef", porcentajeclandef)
local life_boost = 100 * getPokemonBoost(pk)
local pokeLifeMin = pokes[nick].life
local boost = getPokemonBoost(pk)
local life = (pokeLifeMin + (pokes[nick].vitality * (masterLevel + boost)) * 20.0) * (heldBonusVitality / 100 + 1)
life = (life * dittostat)*statmultiplier
local clanhp = getClanBonusDef(getCreatureMaster(pk), pokes[getCreatureName(pk)].type, pokes[getCreatureName(pk)].type2)
if clanhp == nil then --- METODO POR SI SE BUGEA EL CLAN
clanhp = 0
end--- METODO POR SI SE BUGEA EL CLAN
clanhp = life * clanhp
doItemSetAttribute(item, "hp", life + clanhp)
doItemSetAttribute(item, "clanhp",clanhp)
--if getItemAttribute(item, "initialKit") then
-- life = getBallMaxHealthUnique(cid, item)
--end
setCreatureMaxHealth(pk, life + clanhp) -- perfeita formula, os pokemons "ruins" só precisam de ajustes no pokemonStatus, tabela vitality.
local hpToDraw = not isPassiva and getItemAttribute(item, "hpToDraw") or 0
if(not hpToDraw)then
doItemSetAttribute(item, "hpToDraw", 0)
end
if type(dittoLife) == "number" then
hpToDraw = dittoLife
end
doCreatureAddHealth(pk, getCreatureMaxHealth(pk))
if hpToDraw > getCreatureHealth(pk) then
hpToDraw = getCreatureHealth(pk)-1
end
doCreatureAddHealth(pk, -hpToDraw)
setBallHealth(item, getCreatureHealth(pk), getCreatureMaxHealth(pk))
local cid = getCreatureMaster(pk)
doSendLifePokeToOTC(cid)
--doRegainSpeed(cid)
if isGhostPokemon(pk) then
setPlayerStorageValue(pk, 8981, 1)
updateGhostWalk(pk)
end
if getItemAttribute(item, "nick") then
nick = getItemAttribute(item, "nick")
end
setPlayerStorageValue(pk, 1007, nick)
if not getItemAttribute(item, "happy") then
doItemSetAttribute(item, "happy", 120)
end
if not getItemAttribute(item, "hunger") then
doItemSetAttribute(item, "hunger", 5)
end
local happy = getItemAttribute(item, "happy")
if happy < 0 then
happy = 1
end
setPlayerStorageValue(pk, 1008, happy)
local hunger = getItemAttribute(item, "hunger")
setPlayerStorageValue(pk, 1009, hunger)
if isSummon(pk) and conditions then
local burn = getItemAttribute(item, "burn")
if burn and burn >= 0 then
local ret = {id = pk, cd = burn, check = false, damage = getItemAttribute(item, "burndmg"), cond = "Burn"}
addEvent(doCondition2, 3500, ret)
end
local poison = getItemAttribute(item, "poison")
if poison and poison >= 0 then
local ret = {id = pk, cd = poison, check = false, damage = getItemAttribute(item, "poisondmg"), cond = "Poison"}
addEvent(doCondition2, 1500, ret)
end
local confuse = getItemAttribute(item, "confuse")
if confuse and confuse >= 0 then
local ret = {id = pk, cd = confuse, check = false, cond = "Confusion"}
addEvent(doCondition2, 1200, ret)
end
local sleep = getItemAttribute(item, "sleep")
if sleep and sleep >= 0 then
local ret = {id = pk, cd = sleep, check = false, first = true, cond = "Sleep"}
doCondition2(ret)
end
local miss = getItemAttribute(item, "miss")
if miss and miss >= 0 then
local ret = {id = pk, cd = miss, eff = getItemAttribute(item, "missEff"), check = false, spell = getItemAttribute(item, "missSpell"), cond = "Miss"}
doCondition2(ret)
end
local fear = getItemAttribute(item, "fear")
if fear and fear >= 0 then
local ret = {id = pk, cd = fear, check = false, skill = getItemAttribute(item, "fearSkill"), cond = "Fear"}
doCondition2(ret)
end
local silence = getItemAttribute(item, "silence")
if silence and silence >= 0 then
local ret = {id = pk, cd = silence, eff = getItemAttribute(item, "silenceEff"), check = false, cond = "Silence"}
doCondition2(ret)
end
local stun = getItemAttribute(item, "stun")
if stun and stun >= 0 then
local ret = {id = pk, cd = stun, eff = getItemAttribute(item, "stunEff"), check = false, spell = getItemAttribute(item, "stunSpell"), cond = "Stun"}
doCondition2(ret)
end
local paralyze = getItemAttribute(item, "paralyze")
if paralyze and paralyze >= 0 then
local ret = {id = pk, cd = paralyze, eff = getItemAttribute(item, "paralyzeEff"), check = false, first = true, cond = "Paralyze"}
doCondition2(ret)
end
local slow = getItemAttribute(item, "slow")
if slow and slow >= 0 then
local ret = {id = pk, cd = slow, eff = getItemAttribute(item, "slowEff"), check = false, first = true, cond = "Slow"}
doCondition2(ret)
end
local leech = getItemAttribute(item, "leech")
if leech and leech >= 0 then
local ret = {id = pk, cd = leech, attacker = 0, check = false, damage = getItemAttribute(item, "leechdmg"), cond = "Leech"}
doCondition2(ret)
end
for i = 1, 3 do
local buff = getItemAttribute(item, "Buff"..i)
if buff and buff >= 0 then
local ret = {id = pk, cd = buff, eff = getItemAttribute(item, "Buff"..i.."eff"), check = false,
buff = getItemAttribute(item, "Buff"..i.."skill"), first = true, attr = "Buff"..i}
doCondition2(ret)
end
end
end
--alterado v1.9
if getItemAttribute(item, "boost") and getItemAttribute(item, "boost") >= 50 and getItemAttribute(item, "aura") then
sendAuraEffect(pk, auraSyst[getItemAttribute(item, "aura")])
end
if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then
setPlayerStorageValue(pk, 6598754, 1)
elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then
setPlayerStorageValue(pk, 6598755, 1)
end
return true
end
function getPokemonXMLOutfit(name) --alterado v1.9 \/
local path = "data/monster/pokes/Shiny/"..name..".xml"
local tpw = io.type(io.open(path))
if not tpw then
path = "data/monster/pokes/geracao 2/"..name..".xml"
tpw = io.type(io.open(path))
end
if not tpw then
path = "data/monster/pokes/geracao 1/"..name..".xml"
tpw = io.type(io.open(path))
end
if not tpw then
path = "data/monster/pokes/"..name..".xml"
tpw = io.type(io.open(path))
end
if not tpw then
return print("[getPokemonXMLOutfit] Poke with name: "..name.." ins't in any paste on monster/pokes/") and 2
end
local arq = io.open(path, "a+")
local txt = arq:read("*all")
arq:close()
local a, b = txt:find('look type="(.-)"')
txt = string.sub(txt, a + 11, b - 1)
return tonumber(txt)
end
function getNPCXMLLOOKDIR(name) --alterado v1.9 \/
local path = name
local tpw = io.type(io.open(path))
if not tpw then
return false
end
local arq = io.open(path, "a+")
local txt = arq:read("*all")
arq:close()
local a, b = txt:find('lookdir="(.-)"')
txt = string.sub(txt, a + 9, b - 1)
return tonumber(txt)
end
function doEvolutionOutfit(cid, oldout, outfit)
if not isCreature(cid) then return true end
if getCreatureOutfit(cid).lookType == oldout then
doSetCreatureOutfit(cid, {lookType = outfit}, -1)
else
doSetCreatureOutfit(cid, {lookType = oldout}, -1)
end
end
function doSendEvolutionEffect(cid, pos, evolution, turn, ssj, evolve, f, h)
if not isCreature(cid) then
doSendAnimatedText(pos, "CANCEL", 215)
return true
end
if evolve then
doEvolvePokemon(getCreatureMaster(cid), {uid = cid}, evolution, 0, 0)
return true
end
doSendMagicEffect(pos, 18)
if ssj then
sendSSJEffect(evo)
end
doEvolutionOutfit(cid, f, h)
addEvent(doSendEvolutionEffect, math.pow(1900, turn/20), cid, getThingPos(cid), evolution, turn - 1, turn == 19, turn == 2, f, h)
end
function sendSSJEffect(cid)
if not isCreature(cid) then return true end
local pos1 = getThingPos(cid)
local pos2 = getThingPos(cid)
pos2.x = pos2.x + math.random(-1, 1)
pos2.y = pos2.y - math.random(1, 2)
doSendDistanceShoot(pos1, pos2, 37)
addEvent(sendSSJEffect, 45, cid)
end
function sendFinishEvolutionEffect(cid, alternate)
if not isCreature(cid) then return true end
local pos1 = getThingPos(cid)
if alternate then
local pos = {
[1] = {-2, 0},
[2] = {-1, -1},
[3] = {0, -2},
[4] = {1, -1},
[5] = {2, 0},
[6] = {1, 1},
[7] = {0, 2},
[8] = {-1, 1}}
for a = 1, 8 do
local pos2 = getThingPos(cid)
pos2.x = pos2.x + pos[a][1]
pos2.y = pos2.y + pos[a][2]
local pos = getThingPos(cid)
doSendDistanceShoot(pos2, pos, 37)
addEvent(doSendDistanceShoot, 300, pos, pos2, 37)
end
else
for a = 0, 3 do
doSendDistanceShoot(pos1, getPosByDir(pos1, a), 37)
end
for a = 4, 7 do
addEvent(doSendDistanceShoot, 600, pos1, getPosByDir(pos1, a), 37)
end
end
end
function doEvolvePokemon(cid, item2, theevo, stone1, stone2)
if not isCreature(cid) then return true end
if not pokes[theevo] or not pokes[theevo].offense then
doReturnPokemon(cid, item2.uid, getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect, false, true)
return true
end
local owner = getCreatureMaster(item2.uid)
local pokeball = getPlayerSlotItem(cid, 8)
local description = "Contains a "..theevo.."."
local nick = getItemAttribute(pokeball.uid, "nick")
doItemSetAttribute(pokeball.uid, "poke", theevo)
doItemSetAttribute(pokeball.uid, "description", "Contains a "..theevo..".")
doPlayerSendTextMessage(cid, 27, "Congratulations! Your "..getPokeName(item2.uid).." evolved into a "..theevo.."!")
doSendMagicEffect(getThingPos(item2.uid), 18)
doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo])
doSendMagicEffect(getThingPos(cid), 173)
local oldpos = getThingPos(item2.uid)
local oldlod = getCreatureLookDir(item2.uid)
doRemoveCreature(item2.uid)
if not nick then
nick = theevo
end
local levelin = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "level")
pokeSourceCode = doCreateMonsterNick(cid, theevo, nick.."["..levelin.."]", getThingPos(cid), true)
if not pokeSourceCode then
doSendMsg(cid, "Erro. Comunique esse codigo ao GM. [31121994]")
return true
end
local pk = getCreatureSummons(cid)[1]
doTeleportThing(pk, oldpos, false)
doCreatureSetLookDir(pk, oldlod)
sendFinishEvolutionEffect(pk, true)
addEvent(sendFinishEvolutionEffect, 550, pk, true)
addEvent(sendFinishEvolutionEffect, 1050, pk)
doPlayerRemoveItem(cid, stone1, 1)
doPlayerRemoveItem(cid, stone2, 1)
doAddPokemonInOwnList(cid, theevo)
adjustStatus(pk, pokeball.uid, true, false)
if useKpdoDlls then
doUpdateMoves(cid)
end
end
function doMathDecimal(number, casas)
if math.floor(number) == number then return number end
local c = casas and casas + 1 or 3
for a = 0, 10 do
if math.floor(number) < math.pow(10, a) then
local str = string.sub(""..number.."", 1, a + c)
return tonumber(str)
end
end
return number
end
function doAdjustWithDelay(cid, pk, health, vit, status)
if isCreature(cid) then
adjustStatus(pk, getPlayerSlotItem(cid, 8).uid, health, vir, status)
end
end
function getOffense(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1001))
end
function getDefense(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1002))
end
function getSpeed(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1003))
end
function getVitality(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1004))
end
function getSpecialAttack(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1005))
end
function getHappiness(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1008))
end
function getSpecialDefense(cid)
if not isCreature(cid) then return 0 end
return getSpecialAttack(cid) * 0.85 + getDefense(cid) * 0.2
end
function getPokemonLevel(cid, dex)
if not isCreature(cid) or not pokes[getCreatureName(cid)] then return 0 end
if not dex then --alterado v1.9
if ehMonstro(cid) and getPlayerStorageValue(cid, 1000) > 0 then
return getPlayerStorageValue(cid, 1000)
elseif ehMonstro(cid) then
return pokes[getCreatureName(cid)].wildLvl
end
end
return pokes[getCreatureName(cid)].level
end
function getPokemonLevelByName(name)
return pokes[name] and pokes[name].level or 0 --alterado v1.9
end
function getPokemonWildLevelByName(name)
return pokes[name] and pokes[name].wildLvl or 0 --alterado v1.9
end
function getMasterLevel(poke)
if not isSummon(poke) then return 0 end
return getPlayerLevel(getCreatureMaster(poke))
end
function getPokemonBoost(poke)
if not isSummon(poke) then return 0 end
return getItemAttribute(getPlayerSlotItem(getCreatureMaster(poke), 8).uid, "boost") or 0
end
function getPokeballBoost(ball)
if not isPokeball(ball.itemid) then return 0 end --alterado v1.8
return getItemAttribute(ball.uid, "boost") or 0
end
function getPokeName(cid)
if not isSummon(cid) then return getCreatureName(cid) end
if getCreatureName(cid) == "Evolution" then return getPlayerStorageValue(cid, 1007) end
local item = getPlayerSlotItem(getCreatureMaster(cid), 8)
if getItemAttribute(item.uid, "nick") then
return getItemAttribute(item.uid, "nick")
end
if string.find(tostring(getCreatureName(cid)), "Shiny") then
local newName = tostring(getCreatureName(cid)):match("Shiny (.*)")
return newName
end
return getCreatureName(cid)
end
function getPokeballName(item, truename)
if not truename and getItemAttribute(item, "nick") then
return getItemAttribute(item, "nick")
end
return getItemAttribute(item, "poke")
end
function getPokemonName(cid)
return getCreatureName(cid)
end
function getPokemonGender(cid) --alterado v1.9
return getCreatureSkullType(cid)
end
function setPokemonGender(cid, gender)
if isCreature(cid) and gender then --alterado v1.8
doCreatureSetSkullType(cid, gender)
return true
end
return false
end
function getWildPokemonExp(cid)
return getMonsterInfo(getCreatureName(cid)).experience
end
Serwis wykorzystuje pliki cookies w celach statystycznych oraz funkcjonalnych. Korzystanie z witryny oznacza zgodę na ich zapis i odczyt wg ustawień przeglądarki.