Assim que eu chegar em casa e vou avaliar o arquivo lua, poderia dizer qual é a base só por curiosidade?
Atenciosamente
Prometheus X
Por kaleudd, 10 de dez. de 2016 em Resolvidos
info
Grupo: Artesão
Registrado: 06/11/16
Posts: 146
Reputação: +58
Gênero: Masculino

Assim que eu chegar em casa e vou avaliar o arquivo lua, poderia dizer qual é a base só por curiosidade?
Atenciosamente
Prometheus X
Agora, Prometheus X disse:Assim que eu chegar em casa e vou avaliar o arquivo lua, poderia dizer qual é a base só por curiosidade?
Atenciosamente
Prometheus X
bom dia,a base pode ser levada como pda,pois as funções são as mesmas,com source obviamente e.e
Editado Dezembro 10 por kaleudd
info
Grupo: Artesão
Registrado: 06/11/16
Posts: 146
Reputação: +58
Gênero: Masculino

2 minutos atrás, kaleudd disse:bom dia,a base pode ser levada como pda,pois as funções são as mesmas.
PDA Adaptado?
info
Grupo: Cavaleiro
Registrado: 22/07/16
Posts: 189
Reputação: +27
Gênero: Masculino

3 minutos atrás, Prometheus X disse:PDA Adaptado?
Cyan open sorce ?
postado por ban alguma coisa ?
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

local function playerAddExp(cid, exp)local Tiers = {[71] = {bonus = Exp1},}local ball = getPlayerSlotItem(cid, 8)local Tier = getItemAttribute(ball.uid, "heldx")if Tier and Tier > 70 and Tier < 78 thendoPlayerAddExp(cid, math.floor(exp * Tiers[Tier].bonus)) doSendAnimatedText(getThingPos(cid), exp * Tiers[Tier].bonus, 215)elsedoPlayerAddExp(cid, exp) doSendAnimatedText(getThingPos(cid), exp, 215)endendfunction onDeath(cid, corpse, deathList) if isSummon(cid) or not deathList or getCreatureName(cid) == "Evolution" then return true end --alterado v1.8 -------------Edited Golden Arena------------------------- --alterado v1.7 \/\/ if getPlayerStorageValue(cid, 22546) == 1 then setGlobalStorageValue(22548, getGlobalStorageValue(22548)-1) if corpse.itemid ~= 0 then doItemSetAttribute(corpse.uid, "golden", 1) end --alterado v1.8 end if getPlayerStorageValue(cid, 22546) == 1 and getGlobalStorageValue(22548) == 0 then local wave = getGlobalStorageValue(22547) for _, sid in ipairs(getPlayersOnline()) do if isPlayer(sid) and getPlayerStorageValue(sid, 22545) == 1 then if getGlobalStorageValue(22547) < #wavesGolden+1 then doPlayerSendTextMessage(sid, 20, "Wave "..wave.." will begin in "..timeToWaves.."seconds!") doPlayerSendTextMessage(sid, 28, "Wave "..wave.." will begin in "..timeToWaves.."seconds!") addEvent(creaturesInGolden, 100, GoldenUpper, GoldenLower, false, true, true) addEvent(doWave, timeToWaves*1000) elseif getGlobalStorageValue(22547) == #wavesGolden+1 then doPlayerSendTextMessage(sid, 20, "You have win the golden arena! Take your reward!") doPlayerAddItem(sid, 2152, getPlayerStorageValue(sid, 22551)*2) --premio setPlayerStorageValue(sid, 22545, -1) doTeleportThing(sid, getClosestFreeTile(sid, posBackGolden), false) setPlayerRecordWaves(sid) end end end if getGlobalStorageValue(22547) == #wavesGolden+1 then endGoldenArena() end end --------------------------------------------------- /\/\ local givenexp = getWildPokemonExp(cid) if givenexp > 0 thenfor a = 1, #deathList dolocal pk = deathList[a]---local list = getSpectators(getThingPosWithDebug(pk), 30, 30, false)if isCreature(pk) then local expTotal = math.floor(playerExperienceRate * givenexp) local party = getPartyMembers(pk) if isInParty(pk) and getPlayerStorageValue(pk, 4875498) <= -1 then expTotal = math.floor(expTotal/#party) --alterado v1.6.1 for i = 1, #party do if isInArray(list, party) then playerAddExp(party, expTotal) end end else playerAddExp(pk, expTotal) end endendend if isNpcSummon(cid) then local master = getCreatureMaster(cid) doSendMagicEffect(getThingPos(cid), getPlayerStorageValue(cid, 10000)) doCreatureSay(master, getPlayerStorageValue(cid, 10001), 1) doRemoveCreature(cid) return false endif corpse.itemid ~= 0 then --alterado v1.8 doItemSetAttribute(corpse.uid, "level", getPokemonLevel(cid)) doItemSetAttribute(corpse.uid, "gender", getPokemonGender(cid)) endreturn trueend
Agora, Deadpool disse:local function playerAddExp(cid, exp)local Tiers = {[71] = {bonus = Exp1},}local ball = getPlayerSlotItem(cid, 8)local Tier = getItemAttribute(ball.uid, "heldx")if Tier and Tier > 70 and Tier < 78 thendoPlayerAddExp(cid, math.floor(exp * Tiers[Tier].bonus)) doSendAnimatedText(getThingPos(cid), exp * Tiers[Tier].bonus, 215)elsedoPlayerAddExp(cid, exp) doSendAnimatedText(getThingPos(cid), exp, 215)endendfunction onDeath(cid, corpse, deathList) if isSummon(cid) or not deathList or getCreatureName(cid) == "Evolution" then return true end --alterado v1.8 -------------Edited Golden Arena------------------------- --alterado v1.7 \/\/ if getPlayerStorageValue(cid, 22546) == 1 then setGlobalStorageValue(22548, getGlobalStorageValue(22548)-1) if corpse.itemid ~= 0 then doItemSetAttribute(corpse.uid, "golden", 1) end --alterado v1.8 end if getPlayerStorageValue(cid, 22546) == 1 and getGlobalStorageValue(22548) == 0 then local wave = getGlobalStorageValue(22547) for _, sid in ipairs(getPlayersOnline()) do if isPlayer(sid) and getPlayerStorageValue(sid, 22545) == 1 then if getGlobalStorageValue(22547) < #wavesGolden+1 then doPlayerSendTextMessage(sid, 20, "Wave "..wave.." will begin in "..timeToWaves.."seconds!") doPlayerSendTextMessage(sid, 28, "Wave "..wave.." will begin in "..timeToWaves.."seconds!") addEvent(creaturesInGolden, 100, GoldenUpper, GoldenLower, false, true, true) addEvent(doWave, timeToWaves*1000) elseif getGlobalStorageValue(22547) == #wavesGolden+1 then doPlayerSendTextMessage(sid, 20, "You have win the golden arena! Take your reward!") doPlayerAddItem(sid, 2152, getPlayerStorageValue(sid, 22551)*2) --premio setPlayerStorageValue(sid, 22545, -1) doTeleportThing(sid, getClosestFreeTile(sid, posBackGolden), false) setPlayerRecordWaves(sid) end end end if getGlobalStorageValue(22547) == #wavesGolden+1 then endGoldenArena() end end --------------------------------------------------- /\/\ local givenexp = getWildPokemonExp(cid) if givenexp > 0 thenfor a = 1, #deathList dolocal pk = deathList[a]---local list = getSpectators(getThingPosWithDebug(pk), 30, 30, false)if isCreature(pk) then local expTotal = math.floor(playerExperienceRate * givenexp) local party = getPartyMembers(pk) if isInParty(pk) and getPlayerStorageValue(pk, 4875498) <= -1 then expTotal = math.floor(expTotal/#party) --alterado v1.6.1 for i = 1, #party do if isInArray(list, party) then playerAddExp(party, expTotal) end end else playerAddExp(pk, expTotal) end endendend if isNpcSummon(cid) then local master = getCreatureMaster(cid) doSendMagicEffect(getThingPos(cid), getPlayerStorageValue(cid, 10000)) doCreatureSay(master, getPlayerStorageValue(cid, 10001), 1) doRemoveCreature(cid) return false endif corpse.itemid ~= 0 then --alterado v1.8 doItemSetAttribute(corpse.uid, "level", getPokemonLevel(cid)) doItemSetAttribute(corpse.uid, "gender", getPokemonGender(cid)) endreturn trueend
otimo como sempre,funcionou direitinho,só de um errinho em dropstone:
local effect = 173 --by brun123 --alterado v1.9 \/
local function func(cid, position, corpseid, effect)
if not isCreature(cid) then return true end
local corpse = getTileItemById(position, corpseid).uid
if corpse <= 1 then return end
if not isContainer(corpse) then return true end
for slot = 0, (getContainerSize(corpse)-1) do
local item = getContainerItem(corpse, slot)
if item.uid <= 1 then return end
if isStone(item.itemid) then
return doSendMagicEffect(getThingPos(cid), effect)
end
end
end
function onKill(cid, target, lastHit)
if not ehMonstro(target) then return true end
local corpse = getMonsterInfo(getCreatureName(target)).lookCorpse
addEvent(func, 5, getCreatureSummons(cid)[1], getThingPos(target), corpse, effect)
return true
end
segue a print:
o erro surge após matar um pokémon que ira dropar a stone eu axo.
meu data/creaturescripts/dropstone.lua:
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

esse erro ai é pq, em data/lib abre o somefunctions e procura por isto:
function isStone(id)
Bem, configura suas stones nessa função.. E posta o seu some functions pra eu dá uma olhada..
1 minuto atrás, Deadpool disse:esse erro ai é pq, em data/lib abre o somefunctions e procura por isto:
function isStone(id)Bem, configura suas stones nessa função.. E posta o seu some functions pra eu dá uma olhada..
configurei as stones
segue somefunctions.lua
function getStringOfTaskArray(array)
if type(array) ~= 'table' or not next(array) then return "" end
local result = {}
for _, value in ipairs(array) do
local thing, num = (type(value[1]) == 'string' and value[1] or getItemNameById(value[1])), value[2]
table.insert(result, (_ == 1 and "" or ", ")..num.." "..thing..(num == 1 and "" or "s"))
end
result[#result] = " and"..(result[#result]:sub(2,#result[#result]))
return table.concat(result)
end
function getVitalityByMaster(cid)
if not isCreature(cid) then return 0 end
local ball = getPlayerSlotItem(cid, 8).uid
if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end
return pokes[getItemAttribute(ball, 'poke')].vitality * (getPlayerLevel(cid) + (getItemAttribute(ball, 'boost') or 0))
end
function onPokeHealthChange(cid, zerar)
if not isCreature(cid) then return true end
if zerar then doPlayerSendCancel(cid, '#ph#,0,0') end
local ball = getPlayerSlotItem(cid, 8).uid
if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end
if #getCreatureSummons(cid) >= 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6
local pokemon = getCreatureSummons(cid)[1]
local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))
doItemSetAttribute(ball, "hp", pokelife)
end
local rd = 1 - (tonumber(getItemAttribute(ball, "hp")))
local maxHp = HPperVITsummon * getVitalityByMaster(cid)
local hp = maxHp -(maxHp * rd)
doPlayerSendCancel(cid, '#ph#,'.. math.floor(hp) ..','.. math.floor(maxHp))
end
function addPokeToPlayer(cid, pokemon, boost, gender, ball, unique) --alterado v1.9 \/ peguem ele todo...
local genders = {
["male"] = 4,
["female"] = 3,
[1] = 4,
[0] = 3,
[4] = 4,
[3] = 3,
}
if not isCreature(cid) then return false end
local pokemon = doCorrectString(pokemon)
if not pokes[pokemon] then return false end
local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon)
local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
local happy = 250
if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
item = doCreateItemEx(11826)
else
item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1)
end
if not item then return false end
doItemSetAttribute(item, "poke", pokemon)
doItemSetAttribute(item, "hp", 1)
doItemSetAttribute(item, "happy", happy)
doItemSetAttribute(item, "gender", GENDER)
doSetItemAttribute(item, "hands", 0)
doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".")
if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then
doItemSetAttribute(item, "boost", boost)
end
if unique then
doItemSetAttribute(item, "unique", getCreatureName(cid))
end
if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
doPlayerSendMailByName(getCreatureName(cid), item, 1)
sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.")
end
if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then
doTransformItem(item, pokeballs["shiny"..btype].on)
else
doTransformItem(item, pokeballs[btype].on)
end
return true
end
---------------------------
function unLock(ball)
if not ball or ball <= 0 then return false end
if getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then
local vipTime = getItemAttribute(ball, "lock")
local timeNow = os.time()
local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60))
if days <= 0 then
doItemEraseAttribute(ball, "lock")
doItemEraseAttribute(ball, "unique")
return true
end
end
return false
end
function getGuildMembersOnline(GuildId)
local players = {}
for _, pid in pairs(getPlayersOnline()) do
if getPlayerGuildId(pid) == tonumber(GuildId) then
table.insert(players, pid)
end
end --by Vodkart
return #players > 0 and players or false
end
function getGuildMembers(GuildId)
local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");")
if (query:getID() ~= -1) then
repeat
table.insert(players,query:getDataString("name"))
until not query:next() --by Vodkart
query:free()
end
return #players > 0 and players or false
end
--/////////////////////////////////////////////////////////////////////////////////---
function sendMsgToPlayer(cid, tpw, msg) --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end
function getPlayerDesc(cid, thing, TV)
if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" end
local pos = getThingPos(thing)
local ocup = youAre[getPlayerGroupId(thing)]
local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]
local name = thing == cid and "yourself" or getCreatureName(thing)
local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is")
local str = {}
table.insert(str, "You see "..name..". "..art.." ")
if youAre[getPlayerGroupId(thing)] then
table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".")
else
table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".")
end
if getPlayerGuildId(thing) > 0 then
table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")
end
if TV then
table.insert(str, " "..art.." watching TV.")
end
table.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or ""))
return table.concat(str)
end
------------------------------------------------------------------------------------------------- /\/\
function getLivePokeballs(cid, container, duel)
if not isCreature(cid) then return {} end
if not isContainer(container) then return {} end
local items = {}
---
local ballSlot = getPlayerSlotItem(cid, ![]()
if ballSlot.uid ~= 0 then
for a, b in pairs (pokeballs) do
if ballSlot.itemid == b.on or ballSlot.itemid == b.use then
if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then
table.insert(items, ballSlot.uid) --alterado v1.8
elseif not duel then
table.insert(items, ballSlot.uid)
end
end
end
end
---
if isContainer(container) and getContainerSize(container) > 0 then
for slot=0, (getContainerSize(container)-1) do
local item = getContainerItem(container, slot)
if isContainer(item.uid) then
local itemsbag = getPokeballsInContainer(item.uid)
for i=0, #itemsbag do
if not isInArray(items, itemsbag) then
table.insert(items, itemsbag)
end
end
elseif isPokeball(item.itemid) then
for a, b in pairs (pokeballs) do
if item.itemid == b.on then
if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then
table.insert(items, item.uid) --alterado v1.8
elseif not duel then
table.insert(items, item.uid)
end
end
end
end
end
end
return items
end
function addItemInFreeBag(container, item, num)
if not isContainer(container) or not item then return false end
if not num or num <= 0 then num = 1 end --alterado v1.6.1
if getContainerSize(container) < getContainerCap(container) then
return doAddContainerItem(container, item, num)
else
for slot = 0, (getContainerSize(container)-1) do
local container2 = getContainerItem(container, slot)
if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then
return doAddContainerItem(container2.uid, item, num)
end
end
end
return false
end
------------------------------------------------------------------------------------------------------
function pokeHaveReflect(cid)
if not isCreature(cid) then return false end
local table = getTableMove(cid, "Reflect")
if table and table.name then --alterado v1.6
return true
end
return false
end
------------------------------------------------------------------------------------------------------
function nextHorario(cid)
horarioAtual = os.date("%X")
horario = string.explode(horarioAtual, ":")
for i = 1, #horas do
horarioComparacao = horas
horarioComp = string.explode(horarioComparacao, ":")
---------------
if tonumber(horarioComp[1]) > tonumber(horario[1]) then
return horarioComparacao
elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
return horarioComparacao
end
end
return horas[1]
end
function getTimeDiff(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
}
local out = {}
for k, t in ipairs(dateFormat) do
local v = math.floor(t[2])
if(v > -1) then
table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
end
end
if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then
return "seconds"
end
return table.concat(out)
end
function getTimeDiff2(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
{'sec', timeDiff % 60},
}
local out = {}
for k, t in ipairs(dateFormat) do
local v = math.floor(t[2])
if(v > 0) then
table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
end
end
return table.concat(out)
end
function showTimeDiff(timeComp)
local b = string.explode(os.date("%X"), ":")
local c = string.explode(timeComp, ":")
---
local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y")
local hAtual, mAtual = tonumber(b[1]), tonumber(b[2])
local hComp, mComp = tonumber(c[1]), tonumber(c[2])
---
local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual}
local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp}
---
comparacao = t1-t
if hComp < hAtual then
v = os.time{year= y, month= m, day= d, hour= 24, min= 0}
v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0}
comparacao = (v-t)+(t1-v2)
end
return getTimeDiff(comparacao)
end
-------------------------------------------------------------------------
function cleanCMcds(item)
if item ~= 0 then
for c = 1, 15 do --alterado v1.5
local str = "cm_move"..c
setCD(item, str, 0)
end
end
end
function ehNPC(cid) --alterado v1.9
return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)
end
function ehMonstro(cid) --alterado v1.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end --alterado v1.9.1 /\
function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel...
if not isCreature(cid) then return true end
doRemoveCondition(cid, CONDITION_INVISIBLE)
doRemoveCondition(cid, CONDITION_OUTFIT)
doCreatureSetHideHealth(cid, false)
if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then
if isSummon(cid) then
local item = getPlayerSlotItem(getCreatureMaster(cid), ![]()
doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) --alterado v1.6.1
end
end
end
function doDisapear(cid) --Faz um pokemon ficar invisivel
if not isCreature(cid) then return true end
doCreatureAddCondition(cid, permanentinvisible)
doCreatureSetHideHealth(cid, true)
doSetCreatureOutfit(cid, {lookType = 2}, -1)
end
function hasTile(pos) --Verifica se tem TILE na pos
pos.stackpos = 0
if getTileThingByPos(pos).itemid >= 1 then
return true
end
return false
end
function getThingFromPosWithProtect(pos) --Pega uma creatura numa posiçao com proteçoes
if hasTile(pos) then
if isCreature(getRecorderCreature(pos)) then
return getRecorderCreature(pos)
else
pos.stackpos = 253
pid = getThingfromPos(pos).uid
end
else
pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uid
end
return pid
end
function getTileThingWithProtect(pos) --Pega um TILE com proteçoes
if hasTile(pos) then
pos.stackpos = 0
pid = getTileThingByPos(pos)
else
pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})
end
return pid
end
function canAttackOther(cid, pid) --Function q verifica se um poke/player pode atacar outro poke/player
if not isCreature(cid) or not isCreature(pid) then return "Cant" end
local master1 = isSummon(cid) and getCreatureMaster(cid) or cid
local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
----
if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then
if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then
if isDuelingAgainst(master1, master2) then --alterado v1.8
if isSummon(cid) and isPlayer(pid) then
return "Cant"
else
return "Can"
end
end
end
end
---- pvp system
if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then
return "Can"
end
if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then ---estar em times diferentes
return "Can"
end
----
if ehMonstro(cid) and ehMonstro(pid) then
return "Can"
end
return "Cant"
end
function stopNow(cid, time)
if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end
--alterado v1.9.1 \/
local function podeMover(cid)
if isPlayer(cid) then
mayNotMove(cid, false)
elseif isCreature(cid) then
doRegainSpeed(cid)
end
end
if isPlayer(cid) then mayNotMove(cid, true) else doChangeSpeed(cid, -getCreatureSpeed(cid)) end
addEvent(podeMover, time, cid)
end
function doReduceStatus(cid, off, def, agi) --reduz os status
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)
if off > 0 then
setPlayerStorageValue(cid, 1001, A - off)
end
if def > 0 then
setPlayerStorageValue(cid, 1002, B - def)
end
if agi > 0 then
setPlayerStorageValue(cid, 1003, C - agi)
if getCreatureSpeed(cid) ~= 0 then
doRegainSpeed(cid)
end --alterado v1.5 functions arrumadas...
end
end
function doRaiseStatus(cid, off, def, agi, time)
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)
if off > 0 then
setPlayerStorageValue(cid, 1001, A * off)
end
if def > 0 then
setPlayerStorageValue(cid, 1002, B * def)
end
if agi > 0 then
setPlayerStorageValue(cid, 1003, C + agi)
if getCreatureSpeed(cid) ~= 0 then
doRegainSpeed(cid)
end
end
local D = getOffense(cid)
local E = getDefense(cid)
local F = getSpeed(cid)
---------------------------
local G = D - A
local H = E - B
local I = F - C
addEvent(doReduceStatus, time*1000, cid, G, H, I)
end
function BackTeam(cid)
if isCreature(cid) then
local summon = getCreatureSummons(cid) --alterado v1.6
for i = 2, #summon do
doSendMagicEffect(getThingPos(summon), 211)
doRemoveCreature(summon)
end
setPlayerStorageValue(cid, 637501, -1)
end
end
function choose(...) -- by mock
local arg = {...}
return arg[math.random(1,#arg)]
end
function AddPremium(cid, days)
local function removerPlayer(cid)
if isCreature(cid) then
doRemoveCreature(cid)
end
end
db.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.")
addEvent(removerPlayer, 5*1000, cid)
return TRUE
end
function isShiny(cid)
return isCreature(cid) and string.find(getCreatureName(cid), "Shiny") --alterado v1.9
end
function isShinyName(name)
return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9
end
function doConvertTypeToStone(type, string)
local t = {
["fly"] = {heart, "heart"},
["flying"] = {heart, "heart"},
["normal"] = {heart, "heart"},
["fire"] = {fire, "fire"},
["grass"] = {leaf, "leaf"},
["leaf"] = {leaf, "leaf"},
["water"] = {water, "water"},
["poison"] = {venom, "venom"},
["venom"] = {venom, "venom"},
["electric"] = {thunder, "thunder"},
["thunder"] = {thunder, "thunder"},
["rock"] = {rock, "rock"},
["fight"] = {punch, "punch"},
["fighting"] = {punch, "punch"},
["bug"] = {coccon, "coccon"},
["dragon"] = {crystal, "crystal"},
["dark"] = {dark, "dark"},
["ghost"] = {dark, "dark"},
["ground"] = {earth, "earth"},
["earth"] = {earth, "earth"},
["psychic"] = {enigma, "enigma"},
["steel"] = {metal, "metal"},
["metal"] = {metal, "metal"},
["ice"] = {ice, "ice"},
["boost"] = {boostStone, "boost"}, --alterado v1.9
}
if string then
return t[type][2]
else
return t[type][1]
end
end
function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone",
[11447] = "Fire Stone", --alterado v1.6
[11448] = "Cocoon Stone",
[11449] = "Crystal Stone",
[11450] = "Darkess Stone",
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ancient Stone",
[12244] = "King's Rock",
[12232] = "Metal Stone",
[12242] = "Sun Stone",
[12401] = "Shiny Fire Stone",
[12402] = "Shiny Water Stone",
[12403] = "Shiny Leaf Stone",
[12404] = "Shiny Heart Stone",
[12405] = "Shiny Enigma Stone",
[12406] = "Shiny Rock Stone",
[12407] = "Shiny Venom Stone",
[12408] = "Shiny Ice Stone",
[12409] = "Shiny Thunder Stone",
[12410] = "Shiny Crystal Stone",
[12411] = "Shiny Cocoon Stone",
[12412] = "Shiny Darkness Stone",
[12413] = "Shiny Punch Stone",
[12414] = "Shiny Earth Stone",
[boostStone] = "Boost Stone", --alterado v1.9
}
if t[stoneID] then
return t[stoneID]
else
return ""
end
end
function isStone(id)
if id >= leaf and id <= ice then
return true
end
if id == boostStone then --alterado v1.9
return true
end
if id == 11453 or id == 11452 or id == 11454 or id == 12242 then
return true
end
if (id >= sfire and id <= searth) or id == 12401 or id == 12414 then
return true
end
return false
end
function isWater(id)
return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9
end
function getTopCorpse(position)
local pos = position
for n = 1, 255 do
pos.stackpos = n
local item = getTileThingByPos(pos)
if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then
return getTileThingByPos(pos)
end
end
return null
end
bpslot = CONST_SLOT_BACKPACK
function hasPokemon(cid)
if not isCreature(cid) then return false end
if getCreatureMana(cid) <= 0 then return false end
if #getCreatureSummons(cid) >= 1 then return true end
local item = getPlayerSlotItem(cid, CONST_SLOT_FEET)
local bp = getPlayerSlotItem(cid, bpslot)
for a, b in pairs (pokeballs) do
if item.itemid == b.on or item.itemid == b.use then
return true --alterado v1.4
end
if #getItemsInContainerById(bp.uid, b.on) >= 1 then
return true
end
end
return false
end
function isNpcSummon(cid)
return isNpc(getCreatureMaster(cid))
end
function getPokemonHappinessDescription(cid)
if not isCreature(cid) then return true end
local str = {}
if getPokemonGender(cid) == SEX_MALE then
table.insert(str, "He")
elseif getPokemonGender(cid) == SEX_FEMALE then
table.insert(str, "She")
else
table.insert(str, "It")
end
local h = getPlayerStorageValue(cid, 1008)
if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then
table.insert(str, " is very happy with you!")
elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then
table.insert(str, " is happy.")
elseif h >= tonumber(getConfigValue('PokemonStageOK')) then
table.insert(str, " is unhappy.")
elseif h >= tonumber(getConfigValue('PokemonStageSad')) then
table.insert(str, " is sad.")
elseif h >= tonumber(getConfigValue('PokemonStageMad')) then
table.insert(str, " is mad.")
else
table.insert(str, " is very mad at you!")
end
return table.concat(str)
end
function doSetItemAttribute(item, key, value)
doItemSetAttribute(item, key, value)
end
function deTransform(cid, check)
if not isCreature(cid) then return true end
local m = getCreatureMaster(cid)
local p = getPlayerSlotItem(m, ![]()
if getItemAttribute(p.uid, "transTurn") ~= check then return true end
setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto") --edited
doRemoveCondition(cid, CONDITION_OUTFIT)
doSendMagicEffect(getThingPos(cid), 184)
doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER)
doItemSetAttribute(p.uid, "transBegin", 0)
doItemSetAttribute(p.uid, "transLeft", 0)
doItemEraseAttribute(p.uid, "transName")
adjustStatus(cid, p.uid, true, true, true)
end
function isTransformed(cid)
return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010)) --alterado v1.9
end
function doSendFlareEffect(pos)
local random = {28, 29, 79}
doSendMagicEffect(pos, random[math.random(1, 3)])
end
function isDay()
local a = getWorldTime()
if a >= 360 and a < 1080 then
return true
end
return false
end
function doPlayerSendTextWindow(cid, p1, p2)
if not isCreature(cid) then return true end
local item = 460
local text = ""
if type(p1) == "string" then
doShowTextDialog(cid, item, p1)
else
doShowTextDialog(cid, p1, p2)
end
end
function getClockString(tw)
local a = getWorldTime()
local b = a / 60
local hours = math.floor(b)
local minut = a - (60 * hours)
if not tw then
if hours < 10 then
hours = "0"..hours..""
end
if minut < 10 then
minut = "0"..minut..""
end
return hours..":"..minut
else
local sm = "a.m"
if hours >= 12 then
hours = hours - 12
sm = "p.m"
end
if hours < 10 then
hours = "0"..hours..""
end
if minut < 10 then
minut = "0"..minut..""
end
return hours..":"..minut.." "..sm
end
end
function doCorrectPokemonName(poke)
return doCorrectString(poke)
end
function doCorrectString(str)
local name = str:explode(" ") --alterado v1.9
local final = {}
for _, s in ipairs(name) do
table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())
end
return table.concat(final, (name[2] and " " or ""))
end
function getHappinessRate(cid)
if not isCreature(cid) then return 1 end
local a = getPlayerStorageValue(cid, 1008)
if a == -1 then return 1 end
if a >= getConfigValue('PokemonStageVeryHappy') then
return happinessRate[5].rate
elseif a >= getConfigValue('PokemonStageHappy') then
return happinessRate[4].rate
elseif a >= getConfigValue('PokemonStageOK') then
return happinessRate[3].rate
elseif a >= getConfigValue('PokemonStageSad') then
return happinessRate[2].rate
else
return happinessRate[1].rate
end
return 1
end
function doBodyPush(cid, target, go, pos)
if not isCreature(cid) or not isCreature(target) then
doRegainSpeed(cid)
doRegainSpeed(target)
return true
end
if go then
local a = getThingPos(cid)
doChangeSpeed(cid, -getCreatureSpeed(cid))
if not isPlayer(target) then
doChangeSpeed(target, -getCreatureSpeed(target))
end
doChangeSpeed(cid, 800)
doTeleportThing(cid, getThingPos(target))
doChangeSpeed(cid, -800)
addEvent(doBodyPush, 350, cid, target, false, a)
else
doChangeSpeed(cid, 800)
doTeleportThing(cid, pos)
doRegainSpeed(cid)
doRegainSpeed(target)
end
end
function doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo)
--////////////////////////////////////////////////////////////////////////////////////////--
checkDuel(cid) --alterado v1.6 duel system
--////////////////////////////////////////////////////////////////////////////////////////--
if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then
return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!") --alterado v1.8
end
--////////////////////////////////////////////////////////////////////////////////////////--
if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6
if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then
BackTeam(cid)
end
end
-----------------
local edit = true
if not pokeball then
pokeball = getPlayerSlotItem(cid, ![]()
end
if blockevo then
edit = false
doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.")
end
local happy = getPlayerStorageValue(pokemon, 1008)
local hunger = getPlayerStorageValue(pokemon, 1009)
local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))
if edit then
doItemSetAttribute(pokeball.uid, "happy", happy)
doItemSetAttribute(pokeball.uid, "hunger", hunger)
doItemSetAttribute(pokeball.uid, "hp", pokelife)
end
if getCreatureName(pokemon) == "Ditto" then
if isTransformed(pokemon) then
local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin"))
doItemSetAttribute(pokeball.uid, "transLeft", left)
end
end
if hideeffects then
doRemoveCreature(pokemon)
return true
end
local pokename = getPokeName(pokemon)
local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename)
if getCreatureCondition(cid, CONDITION_INFIGHT) then
if isCreature(getCreatureTarget(cid)) then
doItemSetAttribute(pokeball.uid, "happy", happy - 5)
else
doItemSetAttribute(pokeball.uid, "happy", happy - 2)
end
end
doTransformItem(pokeball.uid, pokeball.itemid-1)
doCreatureSay(cid, mbk, TALKTYPE_SAY)
doSendMagicEffect(getCreaturePosition(pokemon), effect)
doRemoveCreature(pokemon)
unLock(pokeball.uid) --alterado v1.8
if useOTClient then
doPlayerSendCancel(cid, '12//,hide') --alterado v1.7
end
if useKpdoDlls then
doUpdateMoves(cid)
end
end
local EFFECTS = {
--[OutfitID] = {Effect}
["Magmar"] = 35, --alterado v1.5
["Jynx"] = 17,
["Shiny Jynx"] = 17,
["Piloswine"] = 205, --alterado v1.8
["Swinub"] = 205,
}
function doGoPokemon(cid, item)
if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then
return true
end
---------------------------------------------------------------
local ballName = getItemAttribute(item.uid, "poke")
btype = getPokeballType(item.itemid)
local effect = pokeballs[btype].effect
if not effect then
effect = 21
end
-----------------------------------------------------------------
if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
doPlayerSendCancel(cid, "You must put your pokeball in the correct place!")
return TRUE
end
local thishp = getItemAttribute(item.uid, "hp")
if thishp <= 0 then
if isInArray(pokeballs[btype].all, item.itemid) then
doTransformItem(item.uid, pokeballs[btype].off)
doItemSetAttribute(item.uid, "hp", 0)
doPlayerSendCancel(cid, "This pokemon is fainted.")
return true
end
end
local pokemon = getItemAttribute(item.uid, "poke")
if not pokes[pokemon] then
return true
end
----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------
if not isInArray({5, 6}, getPlayerGroupId(cid)) then
local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid) --alterado v1.9 \/
local low = {}
local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"}
if #balls >= 1 then
for _, uid in ipairs(balls) do
local nome = getItemAttribute(uid, "poke")
if not isInArray(lowPokes, pokemon) and nome == pokemon then
return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!")
else
if nome == pokemon then
table.insert(low, nome)
end
end
end
end
if #low >= 3 then
return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")
end
end
---------------------------------------------------------------------------------------------------------------------------------------------------
local x = pokes[pokemon]
local boosts = getItemAttribute(item.uid, "boost") or 0
if getPlayerLevel(cid) < (x.level + boosts) then --alterado v1.8 \/
doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.")
return true
end
--------------------------------------------------------------------------------------
shinysClan = {
["Shiny Fearow"] = {4, "Wingeon"},
["Shiny Flareon"] = {1, "Volcanic"},
["Shiny Vaporeon"] = {2, "Seavel"},
["Shiny Jolteon"] = {9, "Raibolt"},
["Shiny Hypno"] = {7, "Psycraft"},
["Shiny Golem"] = {3, "Orebound"},
["Shiny Vileplume"] = {8, "Naturia"},
["Shiny Nidoking"] = {5, "Malefic"},
["Shiny Hitmontop"] = {6, "Gardestrike"},
}
if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9
if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then
doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!")
return true
elseif getPlayerStorageValue(cid, 862281) ~= 5 then
doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!")
return true
end
end
--------------------------------------------------------------------------------------
doSummonMonster(cid, pokemon)
local pk = getCreatureSummons(cid)[1]
if not isCreature(pk) then return true end
------------------------passiva hitmonchan------------------------------
if isSummon(pk) then --alterado v1.8 \/
if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then
if not getItemAttribute(item.uid, "hands") then
doSetItemAttribute(item.uid, "hands", 0)
end
local hands = getItemAttribute(item.uid, "hands")
doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1)
end
end
-------------------------------------------------------------------------
---------movement magmar, jynx-------------
if EFFECTS[getCreatureName(pk)] then
markPosEff(pk, getThingPos(pk))
sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk))
end
--------------------------------------------------------------------------
if getCreatureName(pk) == "Ditto" then
local left = getItemAttribute(item.uid, "transLeft")
local name = getItemAttribute(item.uid, "transName")
if left and left > 0 then
setPlayerStorageValue(pk, 1010, name)
doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)
addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn"))
doItemSetAttribute(item.uid, "transBegin", os.clock())
else
setPlayerStorageValue(pk, 1010, "Ditto")
end
end
if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end
doCreatureSetLookDir(pk, 2)
adjustStatus(pk, item.uid, true, true, true)
doAddPokemonInOwnList(cid, pokemon)
doTransformItem(item.uid, item.itemid+1)
local pokename = getPokeName(pk) --alterado v1.7
local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename)
doCreatureSay(cid, mgo, TALKTYPE_SAY)
doSendMagicEffect(getCreaturePosition(pk), effect)
unLock(item.uid) --alterado v1.8
if useKpdoDlls then
doUpdateMoves(cid)
end
end
function doRegainSpeed(cid) --alterado v1.9 \/
if not isCreature(cid) then return true end
local speed = PlayerSpeed
if isMonster(cid) then
speed = getSpeed(cid)
elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
speed = 200*getPlayerGroupId(cid)
end
doChangeSpeed(cid, -getCreatureSpeed(cid))
if getCreatureCondition(cid, CONDITION_PARALYZE) == true then
doRemoveCondition(cid, CONDITION_PARALYZE)
addEvent(doAddCondition, 10, cid, paralizeArea2)
end
doChangeSpeed(cid, speed)
return speed
end
function isPosEqualPos(pos1, pos2, checkstackpos)
if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then
return false
end
if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then
return false
end
return true
end
function getRandomGenderByName(name)
local rate = newpokedex[name]
if not rate then return 0 end
rate = rate.gender
if rate == 0 then
gender = 3
elseif rate == 1000 then
gender = 4
elseif rate == -1 then
gender = 0
elseif math.random(1, 1000) <= rate then
gender = 4
else
gender = 3
end
return gender
end
function getRecorderPlayer(pos, cid)
local ret = 0
if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9
return cid
end
local s = {}
s.x = pos.x
s.y = pos.y
s.z = pos.z
for a = 0, 255 do
s.stackpos = a
local b = getTileThingByPos(s).uid
if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then
ret = b
end
end
return ret
end
function getRecorderCreature(pos, cid)
local ret = 0
if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9
return cid
end
local s = {}
s.x = pos.x
s.y = pos.y
s.z = pos.z
for a = 0, 255 do
s.stackpos = a
local b = getTileThingByPos(s).uid
if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then
ret = b
end
end
return ret
end
function doCreatureSetOutfit(cid, outfit, time)
doSetCreatureOutfit(cid, outfit, time)
end
function doMagicalFlower(cid, away)
if not isCreature(cid) then return true end
for x = -3, 3 do
for y = -3, 3 do
local a = getThingPos(cid)
a.x = a.x + x
a.y = a.y + y
if away then
doSendDistanceShoot(a, getThingPos(cid), 21)
else
doSendDistanceShoot(getThingPos(cid), a, 21)
end
end
end
end
function isItemPokeball(item) --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
if isInArray(b.all, item) then return true end
end
return false
end
function isPokeball(item)
return isItemPokeball(item)
end --/\
function getPokeballType(id)
for a, b in pairs (pokeballs) do
if isInArray(b.all, id) then
return a
end
end
return "none"
end
randomdiagonaldir = {
[NORTHEAST] = {NORTH, EAST},
[sOUTHEAST] = {SOUTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[sOUTHWEST] = {SOUTH, WEST}}
function doFaceOpposite(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = SOUTH,
[sOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[sOUTHEAST] = NORTHWEST,
[sOUTHWEST] = NORTHEAST}
doCreatureSetLookDir(cid, d[a])
end
function doFaceRandom(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = {SOUTH, WEST, EAST},
[sOUTH] = {NORTH, WEST, EAST},
[WEST] = {SOUTH, NORTH, EAST},
[EAST] = {SOUTH, WEST, NORTH}}
doChangeSpeed(cid, 1)
doCreatureSetLookDir(cid, d[a][math.random(1, 3)])
doChangeSpeed(cid, -1)
end
function getFaceOpposite(dir)
local d = {
[NORTH] = SOUTH,
[sOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[sOUTHEAST] = NORTHWEST,
[sOUTHWEST] = NORTHEAST}
return d[dir]
end
function getResistance(cid, combat)
if isPlayer(cid) then return false end
local poketype1 = pokes[getCreatureName(cid)].type
local poketype2 = pokes[getCreatureName(cid)].type2
local multiplier = 1
if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then
multiplier = multiplier * 2
end
if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then
multiplier = multiplier * 2
end
if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then
multiplier = multiplier * 0.5
end
if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then
multiplier = multiplier * 0.5
end
if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then
multiplier = multiplier * 0
end
if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then
multiplier = multiplier * 0
end
if multiplier == 0.25 then
multiplier = 0.5
elseif multiplier == 4 then
multiplier = 2
end
return multiplier
end
function getCreatureDirectionToTarget(cid, target, ranged)
if not isCreature(cid) then return true end
if not isCreature(target) then return getCreatureLookDir(cid) end
local dirs = {
[NORTHEAST] = {NORTH, EAST},
[sOUTHEAST] = {SOUTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[sOUTHWEST] = {SOUTH, WEST}}
local x = getDirectionTo(getThingPos(cid), getThingPos(target), false)
if x <= 3 then return x
else
local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x)
local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y)
if xdistance > ydistance then
return dirs[x][2]
elseif ydistance > xdistance then
return dirs[x][1]
elseif isInArray(dirs[x], getCreatureLookDir(cid)) then
return getCreatureLookDir(cid)
else
return dirs[x][math.random(1, 2)]
end
end
end
function getSomeoneDescription(cid)
if isPlayer(cid) then return getPlayerNameDescription(cid) end
return getMonsterInfo(getCreatureName(cid)).description
end
function isGhostPokemon(cid)
if not isCreature(cid) then return false end
local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end
function updateGhostWalk(cid)
if not isCreature(cid) then return false end
local pos = getThingPos(cid)
pos.x = pos.x + 1
pos.y = pos.y + 1
local ret = getThingPos(cid)
doTeleportThing(cid, pos, false)
doTeleportThing(cid, ret, false)
return true
end
function doRemoveElementFromTable(t, e)
local ret = {}
for a = 1, #t do
if t[a] ~= e then
table.insert(ret, t[a])
end
end
return ret
end
function doFaceCreature(sid, pos)
if not isCreature(sid) then return true end
if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end
local ret = 0
local ld = getCreatureLookDir(sid)
local dir = getDirectionTo(getThingPos(sid), pos)
local al = {
[NORTHEAST] = {NORTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[sOUTHEAST] = {SOUTH, EAST},
[sOUTHWEST] = {SOUTH, WEST}}
if dir >= 4 and isInArray(al[dir], ld) then return true end
doChangeSpeed(sid, 1)
if dir == 4 then
ret = math.random(2, 3)
elseif dir == 5 then
ret = math.random(1, 2)
elseif dir == 6 then
local dirs = {0, 3}
ret = dirs[math.random(1, 2)]
elseif dir == 7 then
ret = math.random(0, 1)
else
ret = getDirectionTo(getThingPos(sid), pos)
end
doCreatureSetLookDir(sid, ret)
doChangeSpeed(sid, -1)
return true
end
function doCreatureAddCondition(cid, condition)
if not isCreature(cid) then return true end
doAddCondition(cid, condition)
end
function doCreatureRemoveCondition(cid, condition)
if not isCreature(cid) then return true end
doRemoveCondition(cid, condition)
end
function setCD(item, tipo, tempo)
if not tempo or not tonumber(tempo) then
doItemEraseAttribute(item, tipo)
return true
end
doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")
return tempo + os.time()
end
function getCD(item, tipo, limite)
if not getItemAttribute(item, tipo) then
return 0
end
local string = getItemAttribute(item, tipo):gsub("cd:", "")
local number = tonumber(string) - os.time()
if number <= 0 then
return 0
end
if limite and limite < number then
return 0
end
return number
end
function doSendMoveEffect(cid, target, effect)
if not isCreature(cid) or not isCreature(target) then return true end
doSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)
return true
end
function doSetItemActionId(uid, actionid)
doItemSetAttribute(uid, "aid", actionid)
return true
end
function threeNumbers(number)
if number <= 9 then
return "00"..number..""
elseif number <= 99 then
return "0"..number..""
end
return ""..number..""
end
function isBr(cid)
if getPlayerStorageValue(cid, 105505) ~= -1 then
return true
end
return false
end
function isBeingUsed(ball)
if not ball then return false end
for a, b in pairs (pokeballs) do --alterado v1.9
if b.use == ball then return true end
end
return false
end
function doRemoveTile(pos)-- Script by mock
pos.stackpos = 0
local sqm = getTileThingByPos(pos)
doRemoveItem(sqm.uid,1)
end
function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
doCreateItem(id,1,pos)
end
function hasSqm(pos)
local f = getTileThingByPos(pos)
if f.itemid ~= 0 and f.itemid ~= 1 then
return true
end
return false
end
function getPosDirs(p, dir) -- By MatheusMkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function canWalkOnPos(pos, creature, pz, water, sqm, proj)
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
local n = not proj and 3 or 2 --alterado v1.6
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end
function canWalkOnPos2(pos, creature, pz, water, sqm, proj) --alterado v1.6
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
--[[local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i --edited pra retirar um bug.. ;x
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end ]]
return true
end
function getFreeTile(pos, cid)
if canWalkOnPos(pos, true, false, true, true, false) then
return pos
end
local positions = {}
for a = 0, 7 do
if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
table.insert(positions, pos)
end
end
if #positions >= 1 then
if isCreature(cid) then
local range = 1000
local ret = getThingPos(cid)
for b = 1, #positions do
if getDistanceBetween(getThingPos(cid), positions) < range then
ret = positions
range = getDistanceBetween(getThingPos(cid), positions)
end
end
return ret
else
return positions[math.random(#positions)]
end
end
return getThingPos(cid)
end
function isWalkable(pos, creature, proj, pz, water)-- by Nord
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false, true end
local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and not isCreature(tile.uid) then
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end
function isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid --alterado v1.9
end
function isSummon(sid)
return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid)) --alterado v1.9
end
function getItemsInContainerById(container, itemid) -- Function By Kydrai
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
for slot=0, (getContainerSize(container)-1) do
local item = getContainerItem(container, slot)
if isContainer(item.uid) then
local itemsbag = getItemsInContainerById(item.uid, itemid)
for i=0, #itemsbag do
table.insert(items, itemsbag)
end
else
if itemid == item.itemid then
table.insert(items, item.uid)
end
end
end
end
return items
end
function getPokeballsInContainer(container) -- Function By Kydrai
if not isContainer(container) then return {} end
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
for slot=0, (getContainerSize(container)-1) do
local item = getContainerItem(container, slot)
if isContainer(item.uid) then
local itemsbag = getPokeballsInContainer(item.uid)
for i=0, #itemsbag do
table.insert(items, itemsbag)
end
elseif isPokeball(item.itemid) then
table.insert(items, item.uid)
end
end
end
return items
end
function getItensUniquesInContainer(container) --alterado v1.6
if not isContainer(container) then return {} end
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
for slot=0, (getContainerSize(container)-1) do
local item = getContainerItem(container, slot)
if isContainer(item.uid) then
local itemsbag = getItensUniquesInContainer(item.uid)
for i=0, #itemsbag do
table.insert(items, itemsbag)
end
elseif getItemAttribute(item.uid, "unique") then
table.insert(items, item)
end
end
end
return items
end
function hasSpaceInContainer(container) --alterado v1.6
if not isContainer(container) then return false end
if getContainerSize(container) < getContainerCap(container) then return true end
for slot = 0, (getContainerSize(container)-1) do
local item = getContainerItem(container, slot)
if isContainer(item.uid) then
if hasSpaceInContainer(item.uid) then
return true
end
end
end
return false
end
function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
for i,x in pairs(item) do
if getThing(x).type < 100 then
local it = getThing(x)
doTransformItem(it.uid, itemid, it.type+quant)
if it.type+quant > 100 then
doPlayerAddItem(cid, itemid, it.type+quant-100)
end
else
piles = piles+1
end
end
else
return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
doPlayerAddItem(cid, itemid, quant)
end
end
function isPlayerOnline(uid)
return isInArray(getPlayersOnline(), uid)
end
function doRegenerateWithY(cid, sid)
if isPlayerOnline(cid) then
local ball = getPlayerSlotItem(cid,
or getPlayerSlotItem(getCreatureMaster(cid), ![]()
local Tiers = {
[1] = {bonus = Regen1},
}
if isPlayer(cid) and #getCreatureSummons(cid) > 0 then
local Tier = getItemAttribute(ball.uid, "heldy")
if Tier and Tier > 0 and Tier < 8 then
if not getCreatureCondition(cid, CONDITION_INFIGHT) then
if getCreatureHealth(sid) < getCreatureMaxHealth(sid) then
addEvent(function() doCreatureAddHealth(sid,Tiers[Tier].bonus) doSendAnimatedText(getThingPos(sid), "+ "..Tiers[Tier].bonus, 30) end, 0)
end
addEvent(doRegenerateWithY, 1000, cid, sid)
else
addEvent(doRegenerateWithY, 1000, cid, sid)
end
end
end
end
end
peguei como referencia a tabela da função
function doConvertStoneIdToString(stoneID)
se poder conferir se ficou certo,pq eu vi e os id do item.xml e batem certinho com o da tebela citada.
Editado Dezembro 10 por kaleudd
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

O erro continua? A linha do erro aqui, não bate com a linha do some functions asduashd..
Agora, Deadpool disse:O erro continua? A linha do erro aqui, não bate com a linha do some functions asduashd..
sim,agora ele dropo a stone normal talz,porem o mesmo erro continua
e percebi agr,todo pokemon que eu mato mesmo não drope stone,causa esse erro na distro,porem dropa loot e stone normalmente
Editado Dezembro 10 por kaleudd
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

você comentou a linha das stones que nao possue no seu servidor? manda o arquivo some functions pra mim, pelo face, pq o seu veio bugado.
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

tá explicado asudhus, você tirou ice stone do sv?
function getStringOfTaskArray(array) if type(array) ~= 'table' or not next(array) then return "" end local result = {} for _, value in ipairs(array) do local thing, num = (type(value[1]) == 'string' and value[1] or getItemNameById(value[1])), value[2] table.insert(result, (_ == 1 and "" or ", ")..num.." "..thing..(num == 1 and "" or "s")) end result[#result] = " and"..(result[#result]:sub(2,#result[#result])) return table.concat(result)endfunction getVitalityByMaster(cid)if not isCreature(cid) then return 0 endlocal ball = getPlayerSlotItem(cid, 8).uidif not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end return pokes[getItemAttribute(ball, 'poke')].vitality * (getPlayerLevel(cid) + (getItemAttribute(ball, 'boost') or 0))endfunction onPokeHealthChange(cid, zerar) if not isCreature(cid) then return true end if zerar then doPlayerSendCancel(cid, '#ph#,0,0') end local ball = getPlayerSlotItem(cid, 8).uid if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end if #getCreatureSummons(cid) >= 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 local pokemon = getCreatureSummons(cid)[1] local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon)) doItemSetAttribute(ball, "hp", pokelife) end local rd = 1 - (tonumber(getItemAttribute(ball, "hp"))) local maxHp = HPperVITsummon * getVitalityByMaster(cid) local hp = maxHp -(maxHp * rd) doPlayerSendCancel(cid, '#ph#,'.. math.floor(hp) ..','.. math.floor(maxHp))endfunction addPokeToPlayer(cid, pokemon, boost, gender, ball, unique) --alterado v1.9 \/ peguem ele todo...local genders = {["male"] = 4,["female"] = 3,[1] = 4,[0] = 3,[4] = 4,[3] = 3,}if not isCreature(cid) then return false endlocal pokemon = doCorrectString(pokemon)if not pokes[pokemon] then return false end local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon) local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal" local happy = 250 if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then item = doCreateItemEx(11826) else item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1) end if not item then return false end doItemSetAttribute(item, "poke", pokemon) doItemSetAttribute(item, "hp", 1) doItemSetAttribute(item, "happy", happy) doItemSetAttribute(item, "gender", GENDER) doSetItemAttribute(item, "hands", 0) doItemSetAttribute(item, "description", "Contains a "..pokemon..".") doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then doItemSetAttribute(item, "boost", boost) end if unique then doItemSetAttribute(item, "unique", getCreatureName(cid)) end if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then doPlayerSendMailByName(getCreatureName(cid), item, 1) sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.") end if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then doTransformItem(item, pokeballs["shiny"..btype].on) else doTransformItem(item, pokeballs[btype].on) endreturn trueend ---------------------------function unLock(ball) if not ball or ball <= 0 then return false endif getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then local vipTime = getItemAttribute(ball, "lock") local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) if days <= 0 then doItemEraseAttribute(ball, "lock") doItemEraseAttribute(ball, "unique") return true endendreturn falseendfunction getGuildMembersOnline(GuildId)local players = {}for _, pid in pairs(getPlayersOnline()) do if getPlayerGuildId(pid) == tonumber(GuildId) then table.insert(players, pid) endend --by Vodkartreturn #players > 0 and players or falseendfunction getGuildMembers(GuildId)local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");")if (query:getID() ~= -1) then repeat table.insert(players,query:getDataString("name")) until not query:next() --by Vodkart query:free()endreturn #players > 0 and players or falseend --/////////////////////////////////////////////////////////////////////////////////---function sendMsgToPlayer(cid, tpw, msg) --alterado v1.7 \/\/\/if not isCreature(cid) or not tpw or not msg then return true endreturn doPlayerSendTextMessage(cid, tpw, msg)endfunction getPlayerDesc(cid, thing, TV)if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" endlocal pos = getThingPos(thing)local ocup = youAre[getPlayerGroupId(thing)]local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]local name = thing == cid and "yourself" or getCreatureName(thing) local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is") local str = {}table.insert(str, "You see "..name..". "..art.." ")if youAre[getPlayerGroupId(thing)] then table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".") else table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".")endif getPlayerGuildId(thing) > 0 then table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")endif TV then table.insert(str, " "..art.." watching TV.")endtable.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or "")) return table.concat(str) end------------------------------------------------------------------------------------------------- /\/\function getLivePokeballs(cid, container, duel) if not isCreature(cid) then return {} end if not isContainer(container) then return {} end local items = {} --- local ballSlot = getPlayerSlotItem(cid, 8) if ballSlot.uid ~= 0 then for a, b in pairs (pokeballs) do if ballSlot.itemid == b.on or ballSlot.itemid == b.use then if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then table.insert(items, ballSlot.uid) --alterado v1.8 elseif not duel then table.insert(items, ballSlot.uid) end end end end --- if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getPokeballsInContainer(item.uid) for i=0, #itemsbag do if not isInArray(items, itemsbag[i]) then table.insert(items, itemsbag[i]) end end elseif isPokeball(item.itemid) then for a, b in pairs (pokeballs) do if item.itemid == b.on then if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then table.insert(items, item.uid) --alterado v1.8 elseif not duel then table.insert(items, item.uid) end end end end end endreturn itemsendfunction addItemInFreeBag(container, item, num)if not isContainer(container) or not item then return false end if not num or num <= 0 then num = 1 end --alterado v1.6.1if getContainerSize(container) < getContainerCap(container) then return doAddContainerItem(container, item, num)else for slot = 0, (getContainerSize(container)-1) do local container2 = getContainerItem(container, slot) if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then return doAddContainerItem(container2.uid, item, num) end endendreturn falseend------------------------------------------------------------------------------------------------------function pokeHaveReflect(cid)if not isCreature(cid) then return false endlocal table = getTableMove(cid, "Reflect")if table and table.name then --alterado v1.6 return true endreturn falseend------------------------------------------------------------------------------------------------------function nextHorario(cid) horarioAtual = os.date("%X") horario = string.explode(horarioAtual, ":") for i = 1, #horas do horarioComparacao = horas[i] horarioComp = string.explode(horarioComparacao, ":") --------------- if tonumber(horarioComp[1]) > tonumber(horario[1]) then return horarioComparacao elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then return horarioComparacao end end return horas[1] end function getTimeDiff(timeDiff)local dateFormat = {{'hour', timeDiff / 60 / 60}, --6%{'min', timeDiff / 60 % 60},}local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > -1) then table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) endendif tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then return "seconds"endreturn table.concat(out)endfunction getTimeDiff2(timeDiff)local dateFormat = {{'hour', timeDiff / 60 / 60}, --6%{'min', timeDiff / 60 % 60},{'sec', timeDiff % 60},}local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) endendreturn table.concat(out)end function showTimeDiff(timeComp)local b = string.explode(os.date("%X"), ":")local c = string.explode(timeComp, ":") --- local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y") local hAtual, mAtual = tonumber(b[1]), tonumber(b[2]) local hComp, mComp = tonumber(c[1]), tonumber(c[2]) --- local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual} local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp} --- comparacao = t1-t if hComp < hAtual then v = os.time{year= y, month= m, day= d, hour= 24, min= 0} v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0} comparacao = (v-t)+(t1-v2) endreturn getTimeDiff(comparacao)end-------------------------------------------------------------------------function cleanCMcds(item)if item ~= 0 then for c = 1, 15 do --alterado v1.5 local str = "cm_move"..c setCD(item, str, 0) endendendfunction ehNPC(cid) --alterado v1.9return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)endfunction ehMonstro(cid) --alterado v1.9return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cidend --alterado v1.9.1 /\function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel...if not isCreature(cid) then return true end doRemoveCondition(cid, CONDITION_INVISIBLE) doRemoveCondition(cid, CONDITION_OUTFIT) doCreatureSetHideHealth(cid, false) 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 end endfunction doDisapear(cid) --Faz um pokemon ficar invisivelif not isCreature(cid) then return true enddoCreatureAddCondition(cid, permanentinvisible)doCreatureSetHideHealth(cid, true)doSetCreatureOutfit(cid, {lookType = 2}, -1)endfunction hasTile(pos) --Verifica se tem TILE na pospos.stackpos = 0if getTileThingByPos(pos).itemid >= 1 then return trueendreturn falseendfunction getThingFromPosWithProtect(pos) --Pega uma creatura numa posiçao com proteçoesif hasTile(pos) then if isCreature(getRecorderCreature(pos)) then return getRecorderCreature(pos) else pos.stackpos = 253 pid = getThingfromPos(pos).uid endelse pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uidendreturn pidendfunction getTileThingWithProtect(pos) --Pega um TILE com proteçoesif hasTile(pos) thenpos.stackpos = 0 pid = getTileThingByPos(pos)else pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})endreturn pidendfunction canAttackOther(cid, pid) --Function q verifica se um poke/player pode atacar outro poke/playerif not isCreature(cid) or not isCreature(pid) then return "Cant" endlocal master1 = isSummon(cid) and getCreatureMaster(cid) or cidlocal master2 = isSummon(pid) and getCreatureMaster(pid) or pid ---- if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then if isDuelingAgainst(master1, master2) then --alterado v1.8 if isSummon(cid) and isPlayer(pid) then return "Cant" else return "Can" end end end end ---- pvp system if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then return "Can" end if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then ---estar em times diferentes return "Can" end ---- if ehMonstro(cid) and ehMonstro(pid) then return "Can" endreturn "Cant"end function stopNow(cid, time) if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end --alterado v1.9.1 \/local function podeMover(cid) if isPlayer(cid) then mayNotMove(cid, false) elseif isCreature(cid) then doRegainSpeed(cid) endendif isPlayer(cid) then mayNotMove(cid, true) else doChangeSpeed(cid, -getCreatureSpeed(cid)) endaddEvent(podeMover, time, cid)endfunction doReduceStatus(cid, off, def, agi) --reduz os statusif not isCreature(cid) then return true endlocal A = getOffense(cid)local B = getDefense(cid)local C = getSpeed(cid)if off > 0 then setPlayerStorageValue(cid, 1001, A - off)endif def > 0 then setPlayerStorageValue(cid, 1002, B - def)endif agi > 0 then setPlayerStorageValue(cid, 1003, C - agi) if getCreatureSpeed(cid) ~= 0 then doRegainSpeed(cid) end --alterado v1.5 functions arrumadas...endendfunction doRaiseStatus(cid, off, def, agi, time) if not isCreature(cid) then return true endlocal A = getOffense(cid)local B = getDefense(cid)local C = getSpeed(cid)if off > 0 then setPlayerStorageValue(cid, 1001, A * off)endif def > 0 then setPlayerStorageValue(cid, 1002, B * def)endif agi > 0 then setPlayerStorageValue(cid, 1003, C + agi) if getCreatureSpeed(cid) ~= 0 then doRegainSpeed(cid) endendlocal D = getOffense(cid)local E = getDefense(cid)local F = getSpeed(cid)---------------------------local G = D - Alocal H = E - Blocal I = F - CaddEvent(doReduceStatus, time*1000, cid, G, H, I)endfunction BackTeam(cid) if isCreature(cid) then local summon = getCreatureSummons(cid) --alterado v1.6 for i = 2, #summon do doSendMagicEffect(getThingPos(summon[i]), 211) doRemoveCreature(summon[i]) end setPlayerStorageValue(cid, 637501, -1) end end function choose(...) -- by mock local arg = {...} return arg[math.random(1,#arg)]endfunction AddPremium(cid, days)local function removerPlayer(cid)if isCreature(cid) then doRemoveCreature(cid)endenddb.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.") addEvent(removerPlayer, 5*1000, cid) return TRUEendfunction isShiny(cid) return isCreature(cid) and string.find(getCreatureName(cid), "Shiny") --alterado v1.9endfunction isShinyName(name) return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9endfunction doConvertTypeToStone(type, string)local t = {["fly"] = {heart, "heart"},["flying"] = {heart, "heart"},["normal"] = {heart, "heart"},["fire"] = {fire, "fire"},["grass"] = {leaf, "leaf"},["leaf"] = {leaf, "leaf"},["water"] = {water, "water"},["poison"] = {venom, "venom"},["venom"] = {venom, "venom"},["electric"] = {thunder, "thunder"},["thunder"] = {thunder, "thunder"},["rock"] = {rock, "rock"},["fight"] = {punch, "punch"},["fighting"] = {punch, "punch"},["bug"] = {coccon, "coccon"},["dragon"] = {crystal, "crystal"},["dark"] = {dark, "dark"},["ghost"] = {dark, "dark"},["ground"] = {earth, "earth"},["earth"] = {earth, "earth"},["psychic"] = {enigma, "enigma"},["steel"] = {metal, "metal"},["metal"] = {metal, "metal"},["ice"] = {ice, "ice"},["boost"] = {boostStone, "boost"}, --alterado v1.9}if string thenreturn t[type][2]elsereturn t[type][1]endendfunction doConvertStoneIdToString(stoneID)local t = {[11453] = "Heart Stone",[11441] = "Leaf Stone",[11442] = "Water Stone",[11443] = "Venom Stone",[11444] = "Thunder Stone",[11445] = "Rock Stone",[11446] = "Punch Stone", [11447] = "Fire Stone", --alterado v1.6[11448] = "Cocoon Stone", [11449] = "Crystal Stone",[11450] = "Darkess Stone", [11451] = "Earth Stone",[11452] = "Enigma Stone",[11454] = "Ancient Stone", [12244] = "King's Rock",[12232] = "Metal Stone",[12242] = "Sun Stone",[12401] = "Shiny Fire Stone",[12402] = "Shiny Water Stone",[12403] = "Shiny Leaf Stone",[12404] = "Shiny Heart Stone",[12405] = "Shiny Enigma Stone",[12406] = "Shiny Rock Stone",[12407] = "Shiny Venom Stone", [12408] = "Shiny Ice Stone",[12409] = "Shiny Thunder Stone",[12410] = "Shiny Crystal Stone",[12411] = "Shiny Cocoon Stone",[12412] = "Shiny Darkness Stone",[12413] = "Shiny Punch Stone",[12414] = "Shiny Earth Stone",[boostStone] = "Boost Stone", --alterado v1.9}if t[stoneID] thenreturn t[stoneID]elsereturn ""endendfunction isStone(id)if id >= leaf and id <= Ancient thenreturn trueendif id == boostStone then --alterado v1.9return trueendif id == 11453 or id == 11452 or id == 11454 or id == 12242 thenreturn true endif (id >= sfire and id <= searth) or id == 12401 or id == 12414 thenreturn true endreturn falseendfunction isWater(id)return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9endfunction getTopCorpse(position)local pos = positionfor n = 1, 255 do pos.stackpos = n local item = getTileThingByPos(pos) if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then return getTileThingByPos(pos) endendreturn nullendbpslot = CONST_SLOT_BACKPACKfunction hasPokemon(cid) if not isCreature(cid) then return false end if getCreatureMana(cid) <= 0 then return false end if #getCreatureSummons(cid) >= 1 then return true end local item = getPlayerSlotItem(cid, CONST_SLOT_FEET) local bp = getPlayerSlotItem(cid, bpslot) for a, b in pairs (pokeballs) do if item.itemid == b.on or item.itemid == b.use then return true --alterado v1.4 end if #getItemsInContainerById(bp.uid, b.on) >= 1 then return true end endreturn falseendfunction isNpcSummon(cid)return isNpc(getCreatureMaster(cid))endfunction getPokemonHappinessDescription(cid) if not isCreature(cid) then return true end local str = {} if getPokemonGender(cid) == SEX_MALE then table.insert(str, "He") elseif getPokemonGender(cid) == SEX_FEMALE then table.insert(str, "She") else table.insert(str, "It") end local h = getPlayerStorageValue(cid, 1008) if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then table.insert(str, " is very happy with you!") elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then table.insert(str, " is happy.") elseif h >= tonumber(getConfigValue('PokemonStageOK')) then table.insert(str, " is unhappy.") elseif h >= tonumber(getConfigValue('PokemonStageSad')) then table.insert(str, " is sad.") elseif h >= tonumber(getConfigValue('PokemonStageMad')) then table.insert(str, " is mad.") else table.insert(str, " is very mad at you!") endreturn table.concat(str)endfunction doSetItemAttribute(item, key, value)doItemSetAttribute(item, key, value)endfunction deTransform(cid, check) if not isCreature(cid) then return true end local m = getCreatureMaster(cid) local p = getPlayerSlotItem(m, 8) if getItemAttribute(p.uid, "transTurn") ~= check then return true end setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto") --edited doRemoveCondition(cid, CONDITION_OUTFIT) doSendMagicEffect(getThingPos(cid), 184) doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER) doItemSetAttribute(p.uid, "transBegin", 0) doItemSetAttribute(p.uid, "transLeft", 0) doItemEraseAttribute(p.uid, "transName") adjustStatus(cid, p.uid, true, true, true)endfunction isTransformed(cid)return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010)) --alterado v1.9endfunction doSendFlareEffect(pos) local random = {28, 29, 79} doSendMagicEffect(pos, random[math.random(1, 3)])endfunction isDay() local a = getWorldTime() if a >= 360 and a < 1080 then return true endreturn falseendfunction doPlayerSendTextWindow(cid, p1, p2) if not isCreature(cid) then return true end local item = 460 local text = "" if type(p1) == "string" then doShowTextDialog(cid, item, p1) else doShowTextDialog(cid, p1, p2) endendfunction getClockString(tw) local a = getWorldTime() local b = a / 60 local hours = math.floor(b) local minut = a - (60 * hours) if not tw then if hours < 10 then hours = "0"..hours.."" end if minut < 10 then minut = "0"..minut.."" end return hours..":"..minut else local sm = "a.m" if hours >= 12 then hours = hours - 12 sm = "p.m" end if hours < 10 then hours = "0"..hours.."" end if minut < 10 then minut = "0"..minut.."" end return hours..":"..minut.." "..sm endendfunction doCorrectPokemonName(poke)return doCorrectString(poke)endfunction doCorrectString(str)local name = str:explode(" ") --alterado v1.9local final = {}for _, s in ipairs(name) do table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())endreturn table.concat(final, (name[2] and " " or ""))end function getHappinessRate(cid) if not isCreature(cid) then return 1 end local a = getPlayerStorageValue(cid, 1008) if a == -1 then return 1 end if a >= getConfigValue('PokemonStageVeryHappy') then return happinessRate[5].rate elseif a >= getConfigValue('PokemonStageHappy') then return happinessRate[4].rate elseif a >= getConfigValue('PokemonStageOK') then return happinessRate[3].rate elseif a >= getConfigValue('PokemonStageSad') then return happinessRate[2].rate else return happinessRate[1].rate endreturn 1endfunction doBodyPush(cid, target, go, pos) if not isCreature(cid) or not isCreature(target) then doRegainSpeed(cid) doRegainSpeed(target) return true end if go then local a = getThingPos(cid) doChangeSpeed(cid, -getCreatureSpeed(cid)) if not isPlayer(target) then doChangeSpeed(target, -getCreatureSpeed(target)) end doChangeSpeed(cid, 800) doTeleportThing(cid, getThingPos(target)) doChangeSpeed(cid, -800) addEvent(doBodyPush, 350, cid, target, false, a) else doChangeSpeed(cid, 800) doTeleportThing(cid, pos) doRegainSpeed(cid) doRegainSpeed(target) endendfunction doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo) --////////////////////////////////////////////////////////////////////////////////////////-- checkDuel(cid) --alterado v1.6 duel system --////////////////////////////////////////////////////////////////////////////////////////-- if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!") --alterado v1.8 end --////////////////////////////////////////////////////////////////////////////////////////-- if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) end end ----------------- local edit = true if not pokeball then pokeball = getPlayerSlotItem(cid, 8) end if blockevo then edit = false doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.") end local happy = getPlayerStorageValue(pokemon, 1008) local hunger = getPlayerStorageValue(pokemon, 1009) local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon)) if edit then doItemSetAttribute(pokeball.uid, "happy", happy) doItemSetAttribute(pokeball.uid, "hunger", hunger) doItemSetAttribute(pokeball.uid, "hp", pokelife) end if getCreatureName(pokemon) == "Ditto" then if isTransformed(pokemon) then local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin")) doItemSetAttribute(pokeball.uid, "transLeft", left) end end if hideeffects then doRemoveCreature(pokemon) return true end local pokename = getPokeName(pokemon) local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename) if getCreatureCondition(cid, CONDITION_INFIGHT) then if isCreature(getCreatureTarget(cid)) then doItemSetAttribute(pokeball.uid, "happy", happy - 5) else doItemSetAttribute(pokeball.uid, "happy", happy - 2) end end doTransformItem(pokeball.uid, pokeball.itemid-1) doCreatureSay(cid, mbk, TALKTYPE_SAY) doSendMagicEffect(getCreaturePosition(pokemon), effect) doRemoveCreature(pokemon) unLock(pokeball.uid) --alterado v1.8 if useOTClient then doPlayerSendCancel(cid, '12//,hide') --alterado v1.7 end if useKpdoDlls then doUpdateMoves(cid) endendlocal EFFECTS = { --[OutfitID] = {Effect} ["Magmar"] = 35, --alterado v1.5 ["Jynx"] = 17, ["Shiny Jynx"] = 17, ["Piloswine"] = 205, --alterado v1.8 ["Swinub"] = 205, }function doGoPokemon(cid, item) if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then return true end---------------------------------------------------------------local ballName = getItemAttribute(item.uid, "poke") btype = getPokeballType(item.itemid) local effect = pokeballs[btype].effect if not effect then effect = 21 end----------------------------------------------------------------- if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then doPlayerSendCancel(cid, "You must put your pokeball in the correct place!") return TRUE end local thishp = getItemAttribute(item.uid, "hp") if thishp <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local pokemon = getItemAttribute(item.uid, "poke") if not pokes[pokemon] then return true end----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------if not isInArray({5, 6}, getPlayerGroupId(cid)) then local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid) --alterado v1.9 \/ local low = {} local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"} if #balls >= 1 then for _, uid in ipairs(balls) do local nome = getItemAttribute(uid, "poke") if not isInArray(lowPokes, pokemon) and nome == pokemon then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!") else if nome == pokemon then table.insert(low, nome) end end end endif #low >= 3 then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")end end--------------------------------------------------------------------------------------------------------------------------------------------------- local x = pokes[pokemon] local boosts = getItemAttribute(item.uid, "boost") or 0 if getPlayerLevel(cid) < (x.level + boosts) then --alterado v1.8 \/ doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.") return true end -------------------------------------------------------------------------------------- shinysClan = { ["Shiny Fearow"] = {4, "Wingeon"}, ["Shiny Flareon"] = {1, "Volcanic"}, ["Shiny Vaporeon"] = {2, "Seavel"}, ["Shiny Jolteon"] = {9, "Raibolt"}, ["Shiny Hypno"] = {7, "Psycraft"}, ["Shiny Golem"] = {3, "Orebound"}, ["Shiny Vileplume"] = {8, "Naturia"}, ["Shiny Nidoking"] = {5, "Malefic"}, ["Shiny Hitmontop"] = {6, "Gardestrike"}, } if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9 if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!") return true elseif getPlayerStorageValue(cid, 862281) ~= 5 then doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!") return true end end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then --alterado v1.8 \/ if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then if not getItemAttribute(item.uid, "hands") then doSetItemAttribute(item.uid, "hands", 0) end local hands = getItemAttribute(item.uid, "hands") doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1) end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) end -------------------------------------------------------------------------- if getCreatureName(pk) == "Ditto" then local left = getItemAttribute(item.uid, "transLeft") local name = getItemAttribute(item.uid, "transName") if left and left > 0 then setPlayerStorageValue(pk, 1010, name) doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn")) doItemSetAttribute(item.uid, "transBegin", os.clock()) else setPlayerStorageValue(pk, 1010, "Ditto") end end if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end doCreatureSetLookDir(pk, 2) adjustStatus(pk, item.uid, true, true, true) doAddPokemonInOwnList(cid, pokemon) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v1.7 local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename) doCreatureSay(cid, mgo, TALKTYPE_SAY) doSendMagicEffect(getCreaturePosition(pk), effect) unLock(item.uid) --alterado v1.8 if useKpdoDlls then doUpdateMoves(cid) endendfunction doRegainSpeed(cid) --alterado v1.9 \/if not isCreature(cid) then return true end local speed = PlayerSpeed if isMonster(cid) then speed = getSpeed(cid) elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then speed = 200*getPlayerGroupId(cid) end doChangeSpeed(cid, -getCreatureSpeed(cid)) if getCreatureCondition(cid, CONDITION_PARALYZE) == true then doRemoveCondition(cid, CONDITION_PARALYZE) addEvent(doAddCondition, 10, cid, paralizeArea2) end doChangeSpeed(cid, speed)return speedendfunction isPosEqualPos(pos1, pos2, checkstackpos) if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then return false end if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then return false endreturn trueendfunction getRandomGenderByName(name)local rate = newpokedex[name] if not rate then return 0 end rate = rate.gender if rate == 0 then gender = 3 elseif rate == 1000 then gender = 4 elseif rate == -1 then gender = 0 elseif math.random(1, 1000) <= rate then gender = 4 else gender = 3 endreturn genderendfunction getRecorderPlayer(pos, cid) local ret = 0 if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z for a = 0, 255 do s.stackpos = a local b = getTileThingByPos(s).uid if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then ret = b end endreturn retendfunction getRecorderCreature(pos, cid) local ret = 0 if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z for a = 0, 255 do s.stackpos = a local b = getTileThingByPos(s).uid if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then ret = b end endreturn retendfunction doCreatureSetOutfit(cid, outfit, time) doSetCreatureOutfit(cid, outfit, time)endfunction doMagicalFlower(cid, away) if not isCreature(cid) then return true end for x = -3, 3 do for y = -3, 3 do local a = getThingPos(cid) a.x = a.x + x a.y = a.y + y if away then doSendDistanceShoot(a, getThingPos(cid), 21) else doSendDistanceShoot(getThingPos(cid), a, 21) end end endend function isItemPokeball(item) --alterado v1.9 \/if not item then return false endfor a, b in pairs (pokeballs) do if isInArray(b.all, item) then return true endendreturn falseendfunction isPokeball(item)return isItemPokeball(item)end --/\function getPokeballType(id) for a, b in pairs (pokeballs) do if isInArray(b.all, id) then return a end endreturn "none"endrandomdiagonaldir = {[NORTHEAST] = {NORTH, EAST},[sOUTHEAST] = {SOUTH, EAST},[NORTHWEST] = {NORTH, WEST},[sOUTHWEST] = {SOUTH, WEST}}function doFaceOpposite(cid)local a = getCreatureLookDir(cid)local d = {[NORTH] = SOUTH,[sOUTH] = NORTH,[EAST] = WEST,[WEST] = EAST,[NORTHEAST] = SOUTHWEST,[NORTHWEST] = SOUTHEAST,[sOUTHEAST] = NORTHWEST,[sOUTHWEST] = NORTHEAST}doCreatureSetLookDir(cid, d[a])endfunction doFaceRandom(cid)local a = getCreatureLookDir(cid)local d = {[NORTH] = {SOUTH, WEST, EAST},[sOUTH] = {NORTH, WEST, EAST},[WEST] = {SOUTH, NORTH, EAST},[EAST] = {SOUTH, WEST, NORTH}}doChangeSpeed(cid, 1)doCreatureSetLookDir(cid, d[a][math.random(1, 3)])doChangeSpeed(cid, -1)endfunction getFaceOpposite(dir)local d = {[NORTH] = SOUTH,[sOUTH] = NORTH,[EAST] = WEST,[WEST] = EAST,[NORTHEAST] = SOUTHWEST,[NORTHWEST] = SOUTHEAST,[sOUTHEAST] = NORTHWEST,[sOUTHWEST] = NORTHEAST}return d[dir]endfunction getResistance(cid, combat) if isPlayer(cid) then return false endlocal poketype1 = pokes[getCreatureName(cid)].typelocal poketype2 = pokes[getCreatureName(cid)].type2local multiplier = 1 if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then multiplier = multiplier * 2 end if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then multiplier = multiplier * 2 end if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then multiplier = multiplier * 0.5 end if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then multiplier = multiplier * 0.5 end if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then multiplier = multiplier * 0 end if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then multiplier = multiplier * 0 end if multiplier == 0.25 then multiplier = 0.5 elseif multiplier == 4 then multiplier = 2 endreturn multiplierendfunction getCreatureDirectionToTarget(cid, target, ranged) if not isCreature(cid) then return true end if not isCreature(target) then return getCreatureLookDir(cid) end local dirs = { [NORTHEAST] = {NORTH, EAST}, [sOUTHEAST] = {SOUTH, EAST}, [NORTHWEST] = {NORTH, WEST}, [sOUTHWEST] = {SOUTH, WEST}} local x = getDirectionTo(getThingPos(cid), getThingPos(target), false) if x <= 3 then return x else local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x) local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y) if xdistance > ydistance then return dirs[x][2] elseif ydistance > xdistance then return dirs[x][1] elseif isInArray(dirs[x], getCreatureLookDir(cid)) then return getCreatureLookDir(cid) else return dirs[x][math.random(1, 2)] end endendfunction getSomeoneDescription(cid) if isPlayer(cid) then return getPlayerNameDescription(cid) endreturn getMonsterInfo(getCreatureName(cid)).descriptionend function isGhostPokemon(cid)if not isCreature(cid) then return false endlocal ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}return isInArray(ghosts, getCreatureName(cid))endfunction updateGhostWalk(cid) if not isCreature(cid) then return false end local pos = getThingPos(cid) pos.x = pos.x + 1 pos.y = pos.y + 1 local ret = getThingPos(cid) doTeleportThing(cid, pos, false) doTeleportThing(cid, ret, false)return trueendfunction doRemoveElementFromTable(t, e) local ret = {} for a = 1, #t do if t[a] ~= e then table.insert(ret, t[a]) end endreturn retendfunction doFaceCreature(sid, pos)if not isCreature(sid) then return true end if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end local ret = 0 local ld = getCreatureLookDir(sid) local dir = getDirectionTo(getThingPos(sid), pos) local al = { [NORTHEAST] = {NORTH, EAST}, [NORTHWEST] = {NORTH, WEST}, [sOUTHEAST] = {SOUTH, EAST}, [sOUTHWEST] = {SOUTH, WEST}} if dir >= 4 and isInArray(al[dir], ld) then return true end doChangeSpeed(sid, 1) if dir == 4 then ret = math.random(2, 3) elseif dir == 5 then ret = math.random(1, 2) elseif dir == 6 then local dirs = {0, 3} ret = dirs[math.random(1, 2)] elseif dir == 7 then ret = math.random(0, 1) else ret = getDirectionTo(getThingPos(sid), pos) enddoCreatureSetLookDir(sid, ret)doChangeSpeed(sid, -1)return trueendfunction doCreatureAddCondition(cid, condition)if not isCreature(cid) then return true enddoAddCondition(cid, condition)endfunction doCreatureRemoveCondition(cid, condition)if not isCreature(cid) then return true enddoRemoveCondition(cid, condition)endfunction setCD(item, tipo, tempo) if not tempo or not tonumber(tempo) then doItemEraseAttribute(item, tipo) return true end doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")return tempo + os.time()endfunction getCD(item, tipo, limite) if not getItemAttribute(item, tipo) then return 0 end local string = getItemAttribute(item, tipo):gsub("cd:", "") local number = tonumber(string) - os.time() if number <= 0 then return 0 end if limite and limite < number then return 0 endreturn numberendfunction doSendMoveEffect(cid, target, effect)if not isCreature(cid) or not isCreature(target) then return true enddoSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)return trueendfunction doSetItemActionId(uid, actionid)doItemSetAttribute(uid, "aid", actionid)return trueendfunction threeNumbers(number) if number <= 9 then return "00"..number.."" elseif number <= 99 then return "0"..number.."" endreturn ""..number..""endfunction isBr(cid)if getPlayerStorageValue(cid, 105505) ~= -1 thenreturn trueendreturn falseendfunction isBeingUsed(ball) if not ball then return false endfor a, b in pairs (pokeballs) do --alterado v1.9 if b.use == ball then return true endendreturn falseendfunction doRemoveTile(pos)-- Script by mockpos.stackpos = 0local sqm = getTileThingByPos(pos)doRemoveItem(sqm.uid,1)endfunction doCreateTile(id,pos) -- By mockdoAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)doCreateItem(id,1,pos)endfunction hasSqm(pos)local f = getTileThingByPos(pos)if f.itemid ~= 0 and f.itemid ~= 1 thenreturn trueendreturn falseendfunction getPosDirs(p, dir) -- By MatheusMkaloreturn dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}endfunction canWalkOnPos(pos, creature, pz, water, sqm, proj)if not pos then return false endif not pos.x then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false endif isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false endif getTopCreature(pos).uid > 0 and creature then return false endif getTileInfo(pos).protection and pz then return false end local n = not proj and 3 or 2 --alterado v1.6 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return trueendfunction canWalkOnPos2(pos, creature, pz, water, sqm, proj) --alterado v1.6if not pos then return false endif not pos.x then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false endif isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false endif getTopCreature(pos).uid > 0 and creature then return false endif getTileInfo(pos).protection and pz then return false end --[[local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i --edited pra retirar um bug.. ;x local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end ]] return trueendfunction getFreeTile(pos, cid) if canWalkOnPos(pos, true, false, true, true, false) then return pos end local positions = {} for a = 0, 7 do if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then table.insert(positions, pos) end end if #positions >= 1 then if isCreature(cid) then local range = 1000 local ret = getThingPos(cid) for b = 1, #positions do if getDistanceBetween(getThingPos(cid), positions[b]) < range then ret = positions[b] range = getDistanceBetween(getThingPos(cid), positions[b]) end end return ret else return positions[math.random(#positions)] end endreturn getThingPos(cid)endfunction isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return trueendfunction isPlayerSummon(cid, uid)return getCreatureMaster(uid) == cid --alterado v1.9endfunction isSummon(sid)return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid)) --alterado v1.9end function getItemsInContainerById(container, itemid) -- Function By Kydrailocal items = {}if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end endendreturn itemsendfunction getPokeballsInContainer(container) -- Function By Kydrai if not isContainer(container) then return {} end local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getPokeballsInContainer(item.uid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end elseif isPokeball(item.itemid) then table.insert(items, item.uid) end end endreturn itemsendfunction getItensUniquesInContainer(container) --alterado v1.6if not isContainer(container) then return {} endlocal items = {}if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItensUniquesInContainer(item.uid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end elseif getItemAttribute(item.uid, "unique") then table.insert(items, item) end endendreturn itemsendfunction hasSpaceInContainer(container) --alterado v1.6if not isContainer(container) then return false endif getContainerSize(container) < getContainerCap(container) then return true endfor slot = 0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then if hasSpaceInContainer(item.uid) then return true end endendreturn falseendfunction doPlayerAddItemStacking(cid, itemid, quant) -- by mkalolocal item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)local piles = 0if #item > 0 then for i,x in pairs(item) do if getThing(x).type < 100 then local it = getThing(x) doTransformItem(it.uid, itemid, it.type+quant) if it.type+quant > 100 then doPlayerAddItem(cid, itemid, it.type+quant-100) end else piles = piles+1 end endelse return doPlayerAddItem(cid, itemid, quant)endif piles == #item then doPlayerAddItem(cid, itemid, quant)endendfunction isPlayerOnline(uid) return isInArray(getPlayersOnline(), uid)endfunction doRegenerateWithY(cid, sid)if isPlayerOnline(cid) thenlocal ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)local Tiers = {[1] = {bonus = Regen1},}if isPlayer(cid) and #getCreatureSummons(cid) > 0 thenlocal Tier = getItemAttribute(ball.uid, "heldy")if Tier and Tier > 0 and Tier < 8 thenif not getCreatureCondition(cid, CONDITION_INFIGHT) thenif getCreatureHealth(sid) < getCreatureMaxHealth(sid) thenaddEvent(function() doCreatureAddHealth(sid,Tiers[Tier].bonus) doSendAnimatedText(getThingPos(sid), "+ "..Tiers[Tier].bonus, 30) end, 0)endaddEvent(doRegenerateWithY, 1000, cid, sid) elseaddEvent(doRegenerateWithY, 1000, cid, sid)endend endend end
Agora, Deadpool disse:tá explicado asudhus, você tirou ice stone do sv?
function getStringOfTaskArray(array) if type(array) ~= 'table' or not next(array) then return "" end local result = {} for _, value in ipairs(array) do local thing, num = (type(value[1]) == 'string' and value[1] or getItemNameById(value[1])), value[2] table.insert(result, (_ == 1 and "" or ", ")..num.." "..thing..(num == 1 and "" or "s")) end result[#result] = " and"..(result[#result]:sub(2,#result[#result])) return table.concat(result)endfunction getVitalityByMaster(cid)if not isCreature(cid) then return 0 endlocal ball = getPlayerSlotItem(cid, 8).uidif not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end return pokes[getItemAttribute(ball, 'poke')].vitality * (getPlayerLevel(cid) + (getItemAttribute(ball, 'boost') or 0))endfunction onPokeHealthChange(cid, zerar) if not isCreature(cid) then return true end if zerar then doPlayerSendCancel(cid, '#ph#,0,0') end local ball = getPlayerSlotItem(cid, 8).uid if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end if #getCreatureSummons(cid) >= 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 local pokemon = getCreatureSummons(cid)[1] local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon)) doItemSetAttribute(ball, "hp", pokelife) end local rd = 1 - (tonumber(getItemAttribute(ball, "hp"))) local maxHp = HPperVITsummon * getVitalityByMaster(cid) local hp = maxHp -(maxHp * rd) doPlayerSendCancel(cid, '#ph#,'.. math.floor(hp) ..','.. math.floor(maxHp))endfunction addPokeToPlayer(cid, pokemon, boost, gender, ball, unique) --alterado v1.9 \/ peguem ele todo...local genders = {["male"] = 4,["female"] = 3,[1] = 4,[0] = 3,[4] = 4,[3] = 3,}if not isCreature(cid) then return false endlocal pokemon = doCorrectString(pokemon)if not pokes[pokemon] then return false end local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon) local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal" local happy = 250 if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then item = doCreateItemEx(11826) else item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1) end if not item then return false end doItemSetAttribute(item, "poke", pokemon) doItemSetAttribute(item, "hp", 1) doItemSetAttribute(item, "happy", happy) doItemSetAttribute(item, "gender", GENDER) doSetItemAttribute(item, "hands", 0) doItemSetAttribute(item, "description", "Contains a "..pokemon..".") doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then doItemSetAttribute(item, "boost", boost) end if unique then doItemSetAttribute(item, "unique", getCreatureName(cid)) end if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then doPlayerSendMailByName(getCreatureName(cid), item, 1) sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.") end if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then doTransformItem(item, pokeballs["shiny"..btype].on) else doTransformItem(item, pokeballs[btype].on) endreturn trueend ---------------------------function unLock(ball) if not ball or ball <= 0 then return false endif getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then local vipTime = getItemAttribute(ball, "lock") local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) if days <= 0 then doItemEraseAttribute(ball, "lock") doItemEraseAttribute(ball, "unique") return true endendreturn falseendfunction getGuildMembersOnline(GuildId)local players = {}for _, pid in pairs(getPlayersOnline()) do if getPlayerGuildId(pid) == tonumber(GuildId) then table.insert(players, pid) endend --by Vodkartreturn #players > 0 and players or falseendfunction getGuildMembers(GuildId)local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");")if (query:getID() ~= -1) then repeat table.insert(players,query:getDataString("name")) until not query:next() --by Vodkart query:free()endreturn #players > 0 and players or falseend --/////////////////////////////////////////////////////////////////////////////////---function sendMsgToPlayer(cid, tpw, msg) --alterado v1.7 \/\/\/if not isCreature(cid) or not tpw or not msg then return true endreturn doPlayerSendTextMessage(cid, tpw, msg)endfunction getPlayerDesc(cid, thing, TV)if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" endlocal pos = getThingPos(thing)local ocup = youAre[getPlayerGroupId(thing)]local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]local name = thing == cid and "yourself" or getCreatureName(thing) local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is") local str = {}table.insert(str, "You see "..name..". "..art.." ")if youAre[getPlayerGroupId(thing)] then table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".") else table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".")endif getPlayerGuildId(thing) > 0 then table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")endif TV then table.insert(str, " "..art.." watching TV.")endtable.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or "")) return table.concat(str) end------------------------------------------------------------------------------------------------- /\/\function getLivePokeballs(cid, container, duel) if not isCreature(cid) then return {} end if not isContainer(container) then return {} end local items = {} --- local ballSlot = getPlayerSlotItem(cid, 8) if ballSlot.uid ~= 0 then for a, b in pairs (pokeballs) do if ballSlot.itemid == b.on or ballSlot.itemid == b.use then if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then table.insert(items, ballSlot.uid) --alterado v1.8 elseif not duel then table.insert(items, ballSlot.uid) end end end end --- if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getPokeballsInContainer(item.uid) for i=0, #itemsbag do if not isInArray(items, itemsbag[i]) then table.insert(items, itemsbag[i]) end end elseif isPokeball(item.itemid) then for a, b in pairs (pokeballs) do if item.itemid == b.on then if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then table.insert(items, item.uid) --alterado v1.8 elseif not duel then table.insert(items, item.uid) end end end end end endreturn itemsendfunction addItemInFreeBag(container, item, num)if not isContainer(container) or not item then return false end if not num or num <= 0 then num = 1 end --alterado v1.6.1if getContainerSize(container) < getContainerCap(container) then return doAddContainerItem(container, item, num)else for slot = 0, (getContainerSize(container)-1) do local container2 = getContainerItem(container, slot) if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then return doAddContainerItem(container2.uid, item, num) end endendreturn falseend------------------------------------------------------------------------------------------------------function pokeHaveReflect(cid)if not isCreature(cid) then return false endlocal table = getTableMove(cid, "Reflect")if table and table.name then --alterado v1.6 return true endreturn falseend------------------------------------------------------------------------------------------------------function nextHorario(cid) horarioAtual = os.date("%X") horario = string.explode(horarioAtual, ":") for i = 1, #horas do horarioComparacao = horas[i] horarioComp = string.explode(horarioComparacao, ":") --------------- if tonumber(horarioComp[1]) > tonumber(horario[1]) then return horarioComparacao elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then return horarioComparacao end end return horas[1] end function getTimeDiff(timeDiff)local dateFormat = {{'hour', timeDiff / 60 / 60}, --6%{'min', timeDiff / 60 % 60},}local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > -1) then table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) endendif tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then return "seconds"endreturn table.concat(out)endfunction getTimeDiff2(timeDiff)local dateFormat = {{'hour', timeDiff / 60 / 60}, --6%{'min', timeDiff / 60 % 60},{'sec', timeDiff % 60},}local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) endendreturn table.concat(out)end function showTimeDiff(timeComp)local b = string.explode(os.date("%X"), ":")local c = string.explode(timeComp, ":") --- local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y") local hAtual, mAtual = tonumber(b[1]), tonumber(b[2]) local hComp, mComp = tonumber(c[1]), tonumber(c[2]) --- local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual} local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp} --- comparacao = t1-t if hComp < hAtual then v = os.time{year= y, month= m, day= d, hour= 24, min= 0} v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0} comparacao = (v-t)+(t1-v2) endreturn getTimeDiff(comparacao)end-------------------------------------------------------------------------function cleanCMcds(item)if item ~= 0 then for c = 1, 15 do --alterado v1.5 local str = "cm_move"..c setCD(item, str, 0) endendendfunction ehNPC(cid) --alterado v1.9return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)endfunction ehMonstro(cid) --alterado v1.9return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cidend --alterado v1.9.1 /\function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel...if not isCreature(cid) then return true end doRemoveCondition(cid, CONDITION_INVISIBLE) doRemoveCondition(cid, CONDITION_OUTFIT) doCreatureSetHideHealth(cid, false) 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 end endfunction doDisapear(cid) --Faz um pokemon ficar invisivelif not isCreature(cid) then return true enddoCreatureAddCondition(cid, permanentinvisible)doCreatureSetHideHealth(cid, true)doSetCreatureOutfit(cid, {lookType = 2}, -1)endfunction hasTile(pos) --Verifica se tem TILE na pospos.stackpos = 0if getTileThingByPos(pos).itemid >= 1 then return trueendreturn falseendfunction getThingFromPosWithProtect(pos) --Pega uma creatura numa posiçao com proteçoesif hasTile(pos) then if isCreature(getRecorderCreature(pos)) then return getRecorderCreature(pos) else pos.stackpos = 253 pid = getThingfromPos(pos).uid endelse pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uidendreturn pidendfunction getTileThingWithProtect(pos) --Pega um TILE com proteçoesif hasTile(pos) thenpos.stackpos = 0 pid = getTileThingByPos(pos)else pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})endreturn pidendfunction canAttackOther(cid, pid) --Function q verifica se um poke/player pode atacar outro poke/playerif not isCreature(cid) or not isCreature(pid) then return "Cant" endlocal master1 = isSummon(cid) and getCreatureMaster(cid) or cidlocal master2 = isSummon(pid) and getCreatureMaster(pid) or pid ---- if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then if isDuelingAgainst(master1, master2) then --alterado v1.8 if isSummon(cid) and isPlayer(pid) then return "Cant" else return "Can" end end end end ---- pvp system if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then return "Can" end if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then ---estar em times diferentes return "Can" end ---- if ehMonstro(cid) and ehMonstro(pid) then return "Can" endreturn "Cant"end function stopNow(cid, time) if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end --alterado v1.9.1 \/local function podeMover(cid) if isPlayer(cid) then mayNotMove(cid, false) elseif isCreature(cid) then doRegainSpeed(cid) endendif isPlayer(cid) then mayNotMove(cid, true) else doChangeSpeed(cid, -getCreatureSpeed(cid)) endaddEvent(podeMover, time, cid)endfunction doReduceStatus(cid, off, def, agi) --reduz os statusif not isCreature(cid) then return true endlocal A = getOffense(cid)local B = getDefense(cid)local C = getSpeed(cid)if off > 0 then setPlayerStorageValue(cid, 1001, A - off)endif def > 0 then setPlayerStorageValue(cid, 1002, B - def)endif agi > 0 then setPlayerStorageValue(cid, 1003, C - agi) if getCreatureSpeed(cid) ~= 0 then doRegainSpeed(cid) end --alterado v1.5 functions arrumadas...endendfunction doRaiseStatus(cid, off, def, agi, time) if not isCreature(cid) then return true endlocal A = getOffense(cid)local B = getDefense(cid)local C = getSpeed(cid)if off > 0 then setPlayerStorageValue(cid, 1001, A * off)endif def > 0 then setPlayerStorageValue(cid, 1002, B * def)endif agi > 0 then setPlayerStorageValue(cid, 1003, C + agi) if getCreatureSpeed(cid) ~= 0 then doRegainSpeed(cid) endendlocal D = getOffense(cid)local E = getDefense(cid)local F = getSpeed(cid)---------------------------local G = D - Alocal H = E - Blocal I = F - CaddEvent(doReduceStatus, time*1000, cid, G, H, I)endfunction BackTeam(cid) if isCreature(cid) then local summon = getCreatureSummons(cid) --alterado v1.6 for i = 2, #summon do doSendMagicEffect(getThingPos(summon[i]), 211) doRemoveCreature(summon[i]) end setPlayerStorageValue(cid, 637501, -1) end end function choose(...) -- by mock local arg = {...} return arg[math.random(1,#arg)]endfunction AddPremium(cid, days)local function removerPlayer(cid)if isCreature(cid) then doRemoveCreature(cid)endenddb.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.") addEvent(removerPlayer, 5*1000, cid) return TRUEendfunction isShiny(cid) return isCreature(cid) and string.find(getCreatureName(cid), "Shiny") --alterado v1.9endfunction isShinyName(name) return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9endfunction doConvertTypeToStone(type, string)local t = {["fly"] = {heart, "heart"},["flying"] = {heart, "heart"},["normal"] = {heart, "heart"},["fire"] = {fire, "fire"},["grass"] = {leaf, "leaf"},["leaf"] = {leaf, "leaf"},["water"] = {water, "water"},["poison"] = {venom, "venom"},["venom"] = {venom, "venom"},["electric"] = {thunder, "thunder"},["thunder"] = {thunder, "thunder"},["rock"] = {rock, "rock"},["fight"] = {punch, "punch"},["fighting"] = {punch, "punch"},["bug"] = {coccon, "coccon"},["dragon"] = {crystal, "crystal"},["dark"] = {dark, "dark"},["ghost"] = {dark, "dark"},["ground"] = {earth, "earth"},["earth"] = {earth, "earth"},["psychic"] = {enigma, "enigma"},["steel"] = {metal, "metal"},["metal"] = {metal, "metal"},["ice"] = {ice, "ice"},["boost"] = {boostStone, "boost"}, --alterado v1.9}if string thenreturn t[type][2]elsereturn t[type][1]endendfunction doConvertStoneIdToString(stoneID)local t = {[11453] = "Heart Stone",[11441] = "Leaf Stone",[11442] = "Water Stone",[11443] = "Venom Stone",[11444] = "Thunder Stone",[11445] = "Rock Stone",[11446] = "Punch Stone", [11447] = "Fire Stone", --alterado v1.6[11448] = "Cocoon Stone", [11449] = "Crystal Stone",[11450] = "Darkess Stone", [11451] = "Earth Stone",[11452] = "Enigma Stone",[11454] = "Ancient Stone", [12244] = "King's Rock",[12232] = "Metal Stone",[12242] = "Sun Stone",[12401] = "Shiny Fire Stone",[12402] = "Shiny Water Stone",[12403] = "Shiny Leaf Stone",[12404] = "Shiny Heart Stone",[12405] = "Shiny Enigma Stone",[12406] = "Shiny Rock Stone",[12407] = "Shiny Venom Stone", [12408] = "Shiny Ice Stone",[12409] = "Shiny Thunder Stone",[12410] = "Shiny Crystal Stone",[12411] = "Shiny Cocoon Stone",[12412] = "Shiny Darkness Stone",[12413] = "Shiny Punch Stone",[12414] = "Shiny Earth Stone",[boostStone] = "Boost Stone", --alterado v1.9}if t[stoneID] thenreturn t[stoneID]elsereturn ""endendfunction isStone(id)if id >= leaf and id <= Ancient thenreturn trueendif id == boostStone then --alterado v1.9return trueendif id == 11453 or id == 11452 or id == 11454 or id == 12242 thenreturn true endif (id >= sfire and id <= searth) or id == 12401 or id == 12414 thenreturn true endreturn falseendfunction isWater(id)return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9endfunction getTopCorpse(position)local pos = positionfor n = 1, 255 do pos.stackpos = n local item = getTileThingByPos(pos) if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then return getTileThingByPos(pos) endendreturn nullendbpslot = CONST_SLOT_BACKPACKfunction hasPokemon(cid) if not isCreature(cid) then return false end if getCreatureMana(cid) <= 0 then return false end if #getCreatureSummons(cid) >= 1 then return true end local item = getPlayerSlotItem(cid, CONST_SLOT_FEET) local bp = getPlayerSlotItem(cid, bpslot) for a, b in pairs (pokeballs) do if item.itemid == b.on or item.itemid == b.use then return true --alterado v1.4 end if #getItemsInContainerById(bp.uid, b.on) >= 1 then return true end endreturn falseendfunction isNpcSummon(cid)return isNpc(getCreatureMaster(cid))endfunction getPokemonHappinessDescription(cid) if not isCreature(cid) then return true end local str = {} if getPokemonGender(cid) == SEX_MALE then table.insert(str, "He") elseif getPokemonGender(cid) == SEX_FEMALE then table.insert(str, "She") else table.insert(str, "It") end local h = getPlayerStorageValue(cid, 1008) if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then table.insert(str, " is very happy with you!") elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then table.insert(str, " is happy.") elseif h >= tonumber(getConfigValue('PokemonStageOK')) then table.insert(str, " is unhappy.") elseif h >= tonumber(getConfigValue('PokemonStageSad')) then table.insert(str, " is sad.") elseif h >= tonumber(getConfigValue('PokemonStageMad')) then table.insert(str, " is mad.") else table.insert(str, " is very mad at you!") endreturn table.concat(str)endfunction doSetItemAttribute(item, key, value)doItemSetAttribute(item, key, value)endfunction deTransform(cid, check) if not isCreature(cid) then return true end local m = getCreatureMaster(cid) local p = getPlayerSlotItem(m, 8) if getItemAttribute(p.uid, "transTurn") ~= check then return true end setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto") --edited doRemoveCondition(cid, CONDITION_OUTFIT) doSendMagicEffect(getThingPos(cid), 184) doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER) doItemSetAttribute(p.uid, "transBegin", 0) doItemSetAttribute(p.uid, "transLeft", 0) doItemEraseAttribute(p.uid, "transName") adjustStatus(cid, p.uid, true, true, true)endfunction isTransformed(cid)return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010)) --alterado v1.9endfunction doSendFlareEffect(pos) local random = {28, 29, 79} doSendMagicEffect(pos, random[math.random(1, 3)])endfunction isDay() local a = getWorldTime() if a >= 360 and a < 1080 then return true endreturn falseendfunction doPlayerSendTextWindow(cid, p1, p2) if not isCreature(cid) then return true end local item = 460 local text = "" if type(p1) == "string" then doShowTextDialog(cid, item, p1) else doShowTextDialog(cid, p1, p2) endendfunction getClockString(tw) local a = getWorldTime() local b = a / 60 local hours = math.floor(b) local minut = a - (60 * hours) if not tw then if hours < 10 then hours = "0"..hours.."" end if minut < 10 then minut = "0"..minut.."" end return hours..":"..minut else local sm = "a.m" if hours >= 12 then hours = hours - 12 sm = "p.m" end if hours < 10 then hours = "0"..hours.."" end if minut < 10 then minut = "0"..minut.."" end return hours..":"..minut.." "..sm endendfunction doCorrectPokemonName(poke)return doCorrectString(poke)endfunction doCorrectString(str)local name = str:explode(" ") --alterado v1.9local final = {}for _, s in ipairs(name) do table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())endreturn table.concat(final, (name[2] and " " or ""))end function getHappinessRate(cid) if not isCreature(cid) then return 1 end local a = getPlayerStorageValue(cid, 1008) if a == -1 then return 1 end if a >= getConfigValue('PokemonStageVeryHappy') then return happinessRate[5].rate elseif a >= getConfigValue('PokemonStageHappy') then return happinessRate[4].rate elseif a >= getConfigValue('PokemonStageOK') then return happinessRate[3].rate elseif a >= getConfigValue('PokemonStageSad') then return happinessRate[2].rate else return happinessRate[1].rate endreturn 1endfunction doBodyPush(cid, target, go, pos) if not isCreature(cid) or not isCreature(target) then doRegainSpeed(cid) doRegainSpeed(target) return true end if go then local a = getThingPos(cid) doChangeSpeed(cid, -getCreatureSpeed(cid)) if not isPlayer(target) then doChangeSpeed(target, -getCreatureSpeed(target)) end doChangeSpeed(cid, 800) doTeleportThing(cid, getThingPos(target)) doChangeSpeed(cid, -800) addEvent(doBodyPush, 350, cid, target, false, a) else doChangeSpeed(cid, 800) doTeleportThing(cid, pos) doRegainSpeed(cid) doRegainSpeed(target) endendfunction doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo) --////////////////////////////////////////////////////////////////////////////////////////-- checkDuel(cid) --alterado v1.6 duel system --////////////////////////////////////////////////////////////////////////////////////////-- if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!") --alterado v1.8 end --////////////////////////////////////////////////////////////////////////////////////////-- if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) end end ----------------- local edit = true if not pokeball then pokeball = getPlayerSlotItem(cid, 8) end if blockevo then edit = false doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.") end local happy = getPlayerStorageValue(pokemon, 1008) local hunger = getPlayerStorageValue(pokemon, 1009) local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon)) if edit then doItemSetAttribute(pokeball.uid, "happy", happy) doItemSetAttribute(pokeball.uid, "hunger", hunger) doItemSetAttribute(pokeball.uid, "hp", pokelife) end if getCreatureName(pokemon) == "Ditto" then if isTransformed(pokemon) then local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin")) doItemSetAttribute(pokeball.uid, "transLeft", left) end end if hideeffects then doRemoveCreature(pokemon) return true end local pokename = getPokeName(pokemon) local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename) if getCreatureCondition(cid, CONDITION_INFIGHT) then if isCreature(getCreatureTarget(cid)) then doItemSetAttribute(pokeball.uid, "happy", happy - 5) else doItemSetAttribute(pokeball.uid, "happy", happy - 2) end end doTransformItem(pokeball.uid, pokeball.itemid-1) doCreatureSay(cid, mbk, TALKTYPE_SAY) doSendMagicEffect(getCreaturePosition(pokemon), effect) doRemoveCreature(pokemon) unLock(pokeball.uid) --alterado v1.8 if useOTClient then doPlayerSendCancel(cid, '12//,hide') --alterado v1.7 end if useKpdoDlls then doUpdateMoves(cid) endendlocal EFFECTS = { --[OutfitID] = {Effect} ["Magmar"] = 35, --alterado v1.5 ["Jynx"] = 17, ["Shiny Jynx"] = 17, ["Piloswine"] = 205, --alterado v1.8 ["Swinub"] = 205, }function doGoPokemon(cid, item) if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then return true end---------------------------------------------------------------local ballName = getItemAttribute(item.uid, "poke") btype = getPokeballType(item.itemid) local effect = pokeballs[btype].effect if not effect then effect = 21 end----------------------------------------------------------------- if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then doPlayerSendCancel(cid, "You must put your pokeball in the correct place!") return TRUE end local thishp = getItemAttribute(item.uid, "hp") if thishp <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local pokemon = getItemAttribute(item.uid, "poke") if not pokes[pokemon] then return true end----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------if not isInArray({5, 6}, getPlayerGroupId(cid)) then local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid) --alterado v1.9 \/ local low = {} local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"} if #balls >= 1 then for _, uid in ipairs(balls) do local nome = getItemAttribute(uid, "poke") if not isInArray(lowPokes, pokemon) and nome == pokemon then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!") else if nome == pokemon then table.insert(low, nome) end end end endif #low >= 3 then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")end end--------------------------------------------------------------------------------------------------------------------------------------------------- local x = pokes[pokemon] local boosts = getItemAttribute(item.uid, "boost") or 0 if getPlayerLevel(cid) < (x.level + boosts) then --alterado v1.8 \/ doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.") return true end -------------------------------------------------------------------------------------- shinysClan = { ["Shiny Fearow"] = {4, "Wingeon"}, ["Shiny Flareon"] = {1, "Volcanic"}, ["Shiny Vaporeon"] = {2, "Seavel"}, ["Shiny Jolteon"] = {9, "Raibolt"}, ["Shiny Hypno"] = {7, "Psycraft"}, ["Shiny Golem"] = {3, "Orebound"}, ["Shiny Vileplume"] = {8, "Naturia"}, ["Shiny Nidoking"] = {5, "Malefic"}, ["Shiny Hitmontop"] = {6, "Gardestrike"}, } if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9 if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!") return true elseif getPlayerStorageValue(cid, 862281) ~= 5 then doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!") return true end end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then --alterado v1.8 \/ if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then if not getItemAttribute(item.uid, "hands") then doSetItemAttribute(item.uid, "hands", 0) end local hands = getItemAttribute(item.uid, "hands") doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1) end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) end -------------------------------------------------------------------------- if getCreatureName(pk) == "Ditto" then local left = getItemAttribute(item.uid, "transLeft") local name = getItemAttribute(item.uid, "transName") if left and left > 0 then setPlayerStorageValue(pk, 1010, name) doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn")) doItemSetAttribute(item.uid, "transBegin", os.clock()) else setPlayerStorageValue(pk, 1010, "Ditto") end end if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end doCreatureSetLookDir(pk, 2) adjustStatus(pk, item.uid, true, true, true) doAddPokemonInOwnList(cid, pokemon) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v1.7 local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename) doCreatureSay(cid, mgo, TALKTYPE_SAY) doSendMagicEffect(getCreaturePosition(pk), effect) unLock(item.uid) --alterado v1.8 if useKpdoDlls then doUpdateMoves(cid) endendfunction doRegainSpeed(cid) --alterado v1.9 \/if not isCreature(cid) then return true end local speed = PlayerSpeed if isMonster(cid) then speed = getSpeed(cid) elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then speed = 200*getPlayerGroupId(cid) end doChangeSpeed(cid, -getCreatureSpeed(cid)) if getCreatureCondition(cid, CONDITION_PARALYZE) == true then doRemoveCondition(cid, CONDITION_PARALYZE) addEvent(doAddCondition, 10, cid, paralizeArea2) end doChangeSpeed(cid, speed)return speedendfunction isPosEqualPos(pos1, pos2, checkstackpos) if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then return false end if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then return false endreturn trueendfunction getRandomGenderByName(name)local rate = newpokedex[name] if not rate then return 0 end rate = rate.gender if rate == 0 then gender = 3 elseif rate == 1000 then gender = 4 elseif rate == -1 then gender = 0 elseif math.random(1, 1000) <= rate then gender = 4 else gender = 3 endreturn genderendfunction getRecorderPlayer(pos, cid) local ret = 0 if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z for a = 0, 255 do s.stackpos = a local b = getTileThingByPos(s).uid if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then ret = b end endreturn retendfunction getRecorderCreature(pos, cid) local ret = 0 if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z for a = 0, 255 do s.stackpos = a local b = getTileThingByPos(s).uid if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then ret = b end endreturn retendfunction doCreatureSetOutfit(cid, outfit, time) doSetCreatureOutfit(cid, outfit, time)endfunction doMagicalFlower(cid, away) if not isCreature(cid) then return true end for x = -3, 3 do for y = -3, 3 do local a = getThingPos(cid) a.x = a.x + x a.y = a.y + y if away then doSendDistanceShoot(a, getThingPos(cid), 21) else doSendDistanceShoot(getThingPos(cid), a, 21) end end endend function isItemPokeball(item) --alterado v1.9 \/if not item then return false endfor a, b in pairs (pokeballs) do if isInArray(b.all, item) then return true endendreturn falseendfunction isPokeball(item)return isItemPokeball(item)end --/\function getPokeballType(id) for a, b in pairs (pokeballs) do if isInArray(b.all, id) then return a end endreturn "none"endrandomdiagonaldir = {[NORTHEAST] = {NORTH, EAST},[sOUTHEAST] = {SOUTH, EAST},[NORTHWEST] = {NORTH, WEST},[sOUTHWEST] = {SOUTH, WEST}}function doFaceOpposite(cid)local a = getCreatureLookDir(cid)local d = {[NORTH] = SOUTH,[sOUTH] = NORTH,[EAST] = WEST,[WEST] = EAST,[NORTHEAST] = SOUTHWEST,[NORTHWEST] = SOUTHEAST,[sOUTHEAST] = NORTHWEST,[sOUTHWEST] = NORTHEAST}doCreatureSetLookDir(cid, d[a])endfunction doFaceRandom(cid)local a = getCreatureLookDir(cid)local d = {[NORTH] = {SOUTH, WEST, EAST},[sOUTH] = {NORTH, WEST, EAST},[WEST] = {SOUTH, NORTH, EAST},[EAST] = {SOUTH, WEST, NORTH}}doChangeSpeed(cid, 1)doCreatureSetLookDir(cid, d[a][math.random(1, 3)])doChangeSpeed(cid, -1)endfunction getFaceOpposite(dir)local d = {[NORTH] = SOUTH,[sOUTH] = NORTH,[EAST] = WEST,[WEST] = EAST,[NORTHEAST] = SOUTHWEST,[NORTHWEST] = SOUTHEAST,[sOUTHEAST] = NORTHWEST,[sOUTHWEST] = NORTHEAST}return d[dir]endfunction getResistance(cid, combat) if isPlayer(cid) then return false endlocal poketype1 = pokes[getCreatureName(cid)].typelocal poketype2 = pokes[getCreatureName(cid)].type2local multiplier = 1 if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then multiplier = multiplier * 2 end if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then multiplier = multiplier * 2 end if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then multiplier = multiplier * 0.5 end if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then multiplier = multiplier * 0.5 end if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then multiplier = multiplier * 0 end if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then multiplier = multiplier * 0 end if multiplier == 0.25 then multiplier = 0.5 elseif multiplier == 4 then multiplier = 2 endreturn multiplierendfunction getCreatureDirectionToTarget(cid, target, ranged) if not isCreature(cid) then return true end if not isCreature(target) then return getCreatureLookDir(cid) end local dirs = { [NORTHEAST] = {NORTH, EAST}, [sOUTHEAST] = {SOUTH, EAST}, [NORTHWEST] = {NORTH, WEST}, [sOUTHWEST] = {SOUTH, WEST}} local x = getDirectionTo(getThingPos(cid), getThingPos(target), false) if x <= 3 then return x else local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x) local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y) if xdistance > ydistance then return dirs[x][2] elseif ydistance > xdistance then return dirs[x][1] elseif isInArray(dirs[x], getCreatureLookDir(cid)) then return getCreatureLookDir(cid) else return dirs[x][math.random(1, 2)] end endendfunction getSomeoneDescription(cid) if isPlayer(cid) then return getPlayerNameDescription(cid) endreturn getMonsterInfo(getCreatureName(cid)).descriptionend function isGhostPokemon(cid)if not isCreature(cid) then return false endlocal ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}return isInArray(ghosts, getCreatureName(cid))endfunction updateGhostWalk(cid) if not isCreature(cid) then return false end local pos = getThingPos(cid) pos.x = pos.x + 1 pos.y = pos.y + 1 local ret = getThingPos(cid) doTeleportThing(cid, pos, false) doTeleportThing(cid, ret, false)return trueendfunction doRemoveElementFromTable(t, e) local ret = {} for a = 1, #t do if t[a] ~= e then table.insert(ret, t[a]) end endreturn retendfunction doFaceCreature(sid, pos)if not isCreature(sid) then return true end if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end local ret = 0 local ld = getCreatureLookDir(sid) local dir = getDirectionTo(getThingPos(sid), pos) local al = { [NORTHEAST] = {NORTH, EAST}, [NORTHWEST] = {NORTH, WEST}, [sOUTHEAST] = {SOUTH, EAST}, [sOUTHWEST] = {SOUTH, WEST}} if dir >= 4 and isInArray(al[dir], ld) then return true end doChangeSpeed(sid, 1) if dir == 4 then ret = math.random(2, 3) elseif dir == 5 then ret = math.random(1, 2) elseif dir == 6 then local dirs = {0, 3} ret = dirs[math.random(1, 2)] elseif dir == 7 then ret = math.random(0, 1) else ret = getDirectionTo(getThingPos(sid), pos) enddoCreatureSetLookDir(sid, ret)doChangeSpeed(sid, -1)return trueendfunction doCreatureAddCondition(cid, condition)if not isCreature(cid) then return true enddoAddCondition(cid, condition)endfunction doCreatureRemoveCondition(cid, condition)if not isCreature(cid) then return true enddoRemoveCondition(cid, condition)endfunction setCD(item, tipo, tempo) if not tempo or not tonumber(tempo) then doItemEraseAttribute(item, tipo) return true end doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")return tempo + os.time()endfunction getCD(item, tipo, limite) if not getItemAttribute(item, tipo) then return 0 end local string = getItemAttribute(item, tipo):gsub("cd:", "") local number = tonumber(string) - os.time() if number <= 0 then return 0 end if limite and limite < number then return 0 endreturn numberendfunction doSendMoveEffect(cid, target, effect)if not isCreature(cid) or not isCreature(target) then return true enddoSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)return trueendfunction doSetItemActionId(uid, actionid)doItemSetAttribute(uid, "aid", actionid)return trueendfunction threeNumbers(number) if number <= 9 then return "00"..number.."" elseif number <= 99 then return "0"..number.."" endreturn ""..number..""endfunction isBr(cid)if getPlayerStorageValue(cid, 105505) ~= -1 thenreturn trueendreturn falseendfunction isBeingUsed(ball) if not ball then return false endfor a, b in pairs (pokeballs) do --alterado v1.9 if b.use == ball then return true endendreturn falseendfunction doRemoveTile(pos)-- Script by mockpos.stackpos = 0local sqm = getTileThingByPos(pos)doRemoveItem(sqm.uid,1)endfunction doCreateTile(id,pos) -- By mockdoAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)doCreateItem(id,1,pos)endfunction hasSqm(pos)local f = getTileThingByPos(pos)if f.itemid ~= 0 and f.itemid ~= 1 thenreturn trueendreturn falseendfunction getPosDirs(p, dir) -- By MatheusMkaloreturn dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}endfunction canWalkOnPos(pos, creature, pz, water, sqm, proj)if not pos then return false endif not pos.x then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false endif isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false endif getTopCreature(pos).uid > 0 and creature then return false endif getTileInfo(pos).protection and pz then return false end local n = not proj and 3 or 2 --alterado v1.6 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return trueendfunction canWalkOnPos2(pos, creature, pz, water, sqm, proj) --alterado v1.6if not pos then return false endif not pos.x then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false endif isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false endif getTopCreature(pos).uid > 0 and creature then return false endif getTileInfo(pos).protection and pz then return false end --[[local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i --edited pra retirar um bug.. ;x local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end ]] return trueendfunction getFreeTile(pos, cid) if canWalkOnPos(pos, true, false, true, true, false) then return pos end local positions = {} for a = 0, 7 do if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then table.insert(positions, pos) end end if #positions >= 1 then if isCreature(cid) then local range = 1000 local ret = getThingPos(cid) for b = 1, #positions do if getDistanceBetween(getThingPos(cid), positions[b]) < range then ret = positions[b] range = getDistanceBetween(getThingPos(cid), positions[b]) end end return ret else return positions[math.random(#positions)] end endreturn getThingPos(cid)endfunction isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return trueendfunction isPlayerSummon(cid, uid)return getCreatureMaster(uid) == cid --alterado v1.9endfunction isSummon(sid)return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid)) --alterado v1.9end function getItemsInContainerById(container, itemid) -- Function By Kydrailocal items = {}if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end endendreturn itemsendfunction getPokeballsInContainer(container) -- Function By Kydrai if not isContainer(container) then return {} end local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getPokeballsInContainer(item.uid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end elseif isPokeball(item.itemid) then table.insert(items, item.uid) end end endreturn itemsendfunction getItensUniquesInContainer(container) --alterado v1.6if not isContainer(container) then return {} endlocal items = {}if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItensUniquesInContainer(item.uid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end elseif getItemAttribute(item.uid, "unique") then table.insert(items, item) end endendreturn itemsendfunction hasSpaceInContainer(container) --alterado v1.6if not isContainer(container) then return false endif getContainerSize(container) < getContainerCap(container) then return true endfor slot = 0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then if hasSpaceInContainer(item.uid) then return true end endendreturn falseendfunction doPlayerAddItemStacking(cid, itemid, quant) -- by mkalolocal item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)local piles = 0if #item > 0 then for i,x in pairs(item) do if getThing(x).type < 100 then local it = getThing(x) doTransformItem(it.uid, itemid, it.type+quant) if it.type+quant > 100 then doPlayerAddItem(cid, itemid, it.type+quant-100) end else piles = piles+1 end endelse return doPlayerAddItem(cid, itemid, quant)endif piles == #item then doPlayerAddItem(cid, itemid, quant)endendfunction isPlayerOnline(uid) return isInArray(getPlayersOnline(), uid)endfunction doRegenerateWithY(cid, sid)if isPlayerOnline(cid) thenlocal ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)local Tiers = {[1] = {bonus = Regen1},}if isPlayer(cid) and #getCreatureSummons(cid) > 0 thenlocal Tier = getItemAttribute(ball.uid, "heldy")if Tier and Tier > 0 and Tier < 8 thenif not getCreatureCondition(cid, CONDITION_INFIGHT) thenif getCreatureHealth(sid) < getCreatureMaxHealth(sid) thenaddEvent(function() doCreatureAddHealth(sid,Tiers[Tier].bonus) doSendAnimatedText(getThingPos(sid), "+ "..Tiers[Tier].bonus, 30) end, 0)endaddEvent(doRegenerateWithY, 1000, cid, sid) elseaddEvent(doRegenerateWithY, 1000, cid, sid)endend endend end
poderia upar o some aqui? pois não consigo copiar ele
info
Grupo: Conde
Registrado: 15/06/15
Posts: 729
Reputação: +200
estou com um problema na função função getDamageMapPercent para ser mais direto,o erro causa após o player matar um pokémon selvagem,após matalo o não apareçe o corpse do pokémon ele simplismente desapareçe ao matalo,e causa esse erro na distro:
manjo muito pouco de source,e to apanhando para isto,obrigado.
pokeexp;lua:
local function playerAddExp(cid, exp)
local Tiers = {
[71] = {bonus = Exp1},
}
local ball = getPlayerSlotItem(cid,
local Tier = getItemAttribute(ball.uid, "heldx")
if Tier and Tier > 70 and Tier < 78 then
doPlayerAddExp(cid, math.floor(exp * Tiers[Tier].bonus))
doSendAnimatedText(getThingPos(cid), exp * Tiers[Tier].bonus, 215)
else
doPlayerAddExp(cid, exp)
doSendAnimatedText(getThingPos(cid), exp, 215)
end
end
function onDeath(cid, corpse, deathList)
if isSummon(cid) or not deathList or getCreatureName(cid) == "Evolution" then return true end --alterado v1.8
-------------Edited Golden Arena------------------------- --alterado v1.7 \/\/
if getPlayerStorageValue(cid, 22546) == 1 then
setGlobalStorageValue(22548, getGlobalStorageValue(22548)-1)
if corpse.itemid ~= 0 then doItemSetAttribute(corpse.uid, "golden", 1) end --alterado v1.8
end
if getPlayerStorageValue(cid, 22546) == 1 and getGlobalStorageValue(22548) == 0 then
local wave = getGlobalStorageValue(22547)
for _, sid in ipairs(getPlayersOnline()) do
if isPlayer(sid) and getPlayerStorageValue(sid, 22545) == 1 then
if getGlobalStorageValue(22547) < #wavesGolden+1 then
doPlayerSendTextMessage(sid, 20, "Wave "..wave.." will begin in "..timeToWaves.."seconds!")
doPlayerSendTextMessage(sid, 28, "Wave "..wave.." will begin in "..timeToWaves.."seconds!")
addEvent(creaturesInGolden, 100, GoldenUpper, GoldenLower, false, true, true)
addEvent(doWave, timeToWaves*1000)
elseif getGlobalStorageValue(22547) == #wavesGolden+1 then
doPlayerSendTextMessage(sid, 20, "You have win the golden arena! Take your reward!")
doPlayerAddItem(sid, 2152, getPlayerStorageValue(sid, 22551)*2) --premio
setPlayerStorageValue(sid, 22545, -1)
doTeleportThing(sid, getClosestFreeTile(sid, posBackGolden), false)
setPlayerRecordWaves(sid)
end
end
end
if getGlobalStorageValue(22547) == #wavesGolden+1 then
endGoldenArena()
end
end
--------------------------------------------------- /\/\
local givenexp = getWildPokemonExp(cid)
if givenexp > 0 then
for a = 1, #deathList do
local pk = deathList[a]
---
local list = getSpectators(getThingPosWithDebug(pk), 30, 30, false)
if isCreature(pk) then
local expTotal = math.floor(playerExperienceRate * givenexp * getDamageMapPercent(pk, cid))
local party = getPartyMembers(pk)
if isInParty(pk) and getPlayerStorageValue(pk, 4875498) <= -1 then
expTotal = math.floor(expTotal/#party) --alterado v1.6.1
for i = 1, #party do
if isInArray(list, party) then
playerAddExp(party, expTotal)
end
end
else
playerAddExp(pk, expTotal)
end
end
end
end
if isNpcSummon(cid) then
local master = getCreatureMaster(cid)
doSendMagicEffect(getThingPos(cid), getPlayerStorageValue(cid, 10000))
doCreatureSay(master, getPlayerStorageValue(cid, 10001), 1)
doRemoveCreature(cid)
return false
end
if corpse.itemid ~= 0 then --alterado v1.8
doItemSetAttribute(corpse.uid, "level", getPokemonLevel(cid))
doItemSetAttribute(corpse.uid, "gender", getPokemonGender(cid))
end
return true
end
Editado Dezembro 10 por kaleudd