Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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) --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 icons[pokemon] then
- id = icons[pokemon].on
- else
- id = pokeballs[btype].on
- end
- if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
- item = doCreateItemEx(id)
- else
- item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, id, 1)
- end
- if not item then return false end
- doItemSetAttribute(item, "poke", pokemon)
- doItemSetAttribute(item, "hp", 1)
- doItemSetAttribute(item, "happy", happy)
- --doItemSetAttribute(item, "-1", GENDER)
- doSetItemAttribute(item, "hands", 0)
- doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
- doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".")
- doItemSetAttribute(item, "defeated", "no")
- doItemSetAttribute(item, "ball", btype)
- 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
- doTransformItem(item, id)
- 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 isLegendaryPokemon(name)
- if name == nil then return false end
- if isInArray({"Mewtwo", "Mew", "Articuno", "Zapdos", "Moltres", "Lugia", "Ho-oh", "Celebi", "Entei", "Raikou", "Suicune", "Darkrai", "Cresselia", "Heatran", "Latios", "Latias", "Manaphy", "Phione", "Uxie", "Mesprit", "Azelf", "Regice", "Registeel", "Regirock", "Regigigas", "Groudon", "Rayquaza", "Kyogre", "Jirachi", "Deoxys", "Shaymin", "Giratina", "Dialga", "Palkia", "Mega Rayquaza", "Arceus"}, name) then
- return true
- end
- return false
- end
- function isFossilPokemon(name)
- if name == nil then return false end
- if isInArray({"Aerodactyl", "Kabuto", "Kabutops", "Omanyte", "Omastar"}, name) then
- return true
- end
- return false
- end
- function isMegaPokemon(name)
- if name == nil then return false end
- if isInArray({"Mega Hoopa"}, name) then
- return true
- end
- return 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 hasProfession(thing) then -- Profession System
- str = str.."\n"..getPlayerSex(thing) == 0 and "She" or "He" .." is a "..getProfessionName(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, 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
- 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[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"))
- 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)
- local eh = false
- if not isSummon(cid) and not ehNPC(cid) and not isPlayer(cid) then
- eh = true
- end
- return eh
- 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)
- 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[i]), 211)
- doRemoveCreature(summon[i])
- 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 isMega(cid)
- return isCreature(cid) and string.find(getCreatureName(cid), "Mega") --alterado v1.9
- end
- function isMegaName(name)
- return tostring(name) and string.find(doCorrectString(name), "Mega") --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"},
- ["ancient"] = {ancient, "ancient"},
- ["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] = "Ice Stone",
- [12244] = "Ancient Stone",
- [12232] = "Metal 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 == 12232 or id == 12244 or id == 12244 or id == 12245 then
- return true
- end
- if (id >= sfire and id <= searth) or id == 12417 or id == 12419 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, 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)
- 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, 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)
- end
- end
- local EFFECTS = {
- --[OutfitID] = {Effect}
- ["Magmar"] = 35, --alterado v1.5
- ["Shiny Magmar"] = 35,
- ["Magby"] = 35,
- ["Jynx"] = 17,
- ["Smoochum"] = 17,
- ["Shiny Jynx"] = 17,
- ["Piloswine"] = 205, --alterado v1.8
- ["Swinub"] = 205,
- ["Stantler"] = 205,
- ["Shiny Stantler"] = 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"},
- ["Shiny Metagross"] = {9, "Ironhead"},
- }
- 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 getThingPos(cid).x == pos.x and getThingPos(cid).y == pos.y then
- 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
- if item >= 12861 and item <= 13781 then
- return true
- end
- if item >= 13797 and item <= 13823 then
- return true
- end
- if item >= 10975 and item <= 10977 then
- return true
- end
- if item >= 13836 and item <= 13850 then
- return true
- end
- if item >= 13851 and item <= 13856 then
- return true
- end
- if item >= 13859 and item <= 13861 then
- return true
- end
- if item >= 13902 and item <= 13904 then
- return true
- end
- if item >= 13919 and item <= 13930 then
- return true
- end
- end
- return false
- end
- function isPokeball(item)
- if not item then return false end
- for a, b in pairs (pokeballs) do
- if isInArray(b.all, item) then return true end
- if item >= 12861 and item <= 13781 then
- return true
- end
- if item >= 13797 and item <= 13823 then
- return true
- end
- if item >= 10975 and item <= 10977 then
- return true
- end
- if item >= 13836 and item <= 13856 then
- return true
- end
- end
- return false
- 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[b]) < range then
- ret = positions[b]
- range = getDistanceBetween(getThingPos(cid), positions[b])
- 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[i])
- 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[i])
- 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[i])
- 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 doPlayerSendCancel2(cid, msg)
- if not isCreature(cid) then return false end
- if isPlayer(cid) then
- return doPlayerSendCancel(cid, msg)
- end
- return false
- end
- function getStonePrice(id)
- if not isStone(id) then return 0 end
- comumStone = {20886,}
- if isInArray(comumStone, id) then
- return 5000
- else
- return 10000
- end
- return 0
- end
- function getPokemonPrice(item)
- if not pokes[getItemAttribute(item, "poke")] then return 0 end
- stoneprice = 0
- price = 0
- name = getItemAttribute(item, "poke")
- boost = getItemAttribute(item, "boost") or 0
- if boost >= 1 then
- stoneid = doConvertTypeToId(pokes[name].type)
- stoneprice = getStonePrice(stoneid) * boost
- end
- price = pokePrice[name] or pokes[name].level * 150
- price = stoneprice + price
- return price
- end
- function getPokeTotalPriceInContainer(container)
- balls = getPokeballsInContainer(container)
- stoneprice = 0
- prices = {}
- if #balls >= 1 then
- for i = 1, #balls do
- if pokes[getItemAttribute(balls[i], "poke")] then
- name = getItemAttribute(balls[i], "poke")
- boost = getItemAttribute(balls[i], "boost") or 0
- if boost >= 1 then
- stoneid = doConvertTypeToId(pokes[name].type)
- stoneprice = getStonePrice(stoneid) * boost
- end
- price = pokePrice[name] or pokes[name].level * 150
- price = stoneprice + price
- else
- price = 0
- end
- table.insert(prices, math.floor(price))
- end
- end
- price1 = 0
- price2 = 0
- price3 = 0
- price4 = 0
- price5 = 0
- price6 = 0
- if #prices == 6 then
- price1 = prices[1]
- price2 = prices[2]
- price3 = prices[3]
- price4 = prices[4]
- price5 = prices[5]
- price6 = prices[6]
- elseif #prices == 5 then
- price1 = prices[1]
- price2 = prices[2]
- price3 = prices[3]
- price4 = prices[4]
- price5 = prices[5]
- elseif #prices == 4 then
- price1 = prices[1]
- price2 = prices[2]
- price3 = prices[3]
- price4 = prices[4]
- elseif #prices == 3 then
- price1 = prices[1]
- price2 = prices[2]
- price3 = prices[3]
- elseif #prices == 2 then
- price1 = prices[1]
- price2 = prices[2]
- elseif #prices == 1 then
- price1 = prices[1]
- end
- pricetotal = price1 + price2 + price3 + price4 + price5 + price6
- return math.floor(pricetotal)
- 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 getPlayerInArea(fromPos, toPos) -- by jhon992
- local online = getPlayersOnline()
- local players = {}
- for i=1, #online do
- if isInArea(getPlayerPosition(online[i]), fromPos, toPos) then
- players[#players+1] = online[i]
- end
- end
- return players
- end
- function isPlayerOnline(uid)
- return isInArray(getPlayersOnline(), uid)
- end
- function doRegenerateWithY(cid, sid)
- if isPlayerOnline(cid) then
- local ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)
- local Tiers = {
- [1] = {bonus = Regen1},
- [2] = {bonus = Regen2},
- [3] = {bonus = Regen3},
- [4] = {bonus = Regen4},
- [5] = {bonus = Regen5},
- [6] = {bonus = Regen6},
- [7] = {bonus = Regen7},
- }
- 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
- function doCureWithY(cid, sid)
- if isPlayerOnline(cid) then
- local ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)
- local Tiers = {
- [8] = {chance = Cure1},
- [9] = {chance = Cure2},
- [10] = {chance = Cure3},
- [11] = {chance = Cure4},
- [12] = {chance = Cure5},
- [13] = {chance = Cure6},
- [14] = {chance = Cure7},
- }
- local Tier = getItemAttribute(ball.uid, "heldy")
- if isPlayer(cid) and #getCreatureSummons(cid) > 0 and Tier then
- if Tier > 7 and Tier < 15 then
- if math.random(1,100) <= Tiers[Tier].chance then
- doCureStatus(sid, "all")
- doSendMagicEffect(getThingPosWithDebug(sid), 14)
- end
- addEvent(doCureWithY, 1000, cid, sid)
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment