FlamesAdmin 262 Postado Junho 12, 2015 Share Postado Junho 12, 2015 Aeeeee por##, pelejei pelejei pelejei e consegui Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1655546 Compartilhar em outros sites More sharing options...
Soulviling 66 Postado Junho 12, 2015 Autor Share Postado Junho 12, 2015 Aeeeee por##, pelejei pelejei pelejei e consegui Muito bom Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1655573 Compartilhar em outros sites More sharing options...
FlamesAdmin 262 Postado Junho 12, 2015 Share Postado Junho 12, 2015 Só tem uma coisa, a imagem dos pokes nao aparecem na bar, tipo shinys, ja coloquei a imagem deles na pasta onde ta os outros. Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1655586 Compartilhar em outros sites More sharing options...
Soulviling 66 Postado Junho 12, 2015 Autor Share Postado Junho 12, 2015 Tem que colocar o nome na imagem corretamente. Exemplo: Shiny Charizard.png Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1655587 Compartilhar em outros sites More sharing options...
Luga03 332 Postado Junho 17, 2015 Share Postado Junho 17, 2015 (editado) Poderia adaptar minha some functions?? pfv function addPokeToPlayer(cid, pokemon, level, extStr, gender, boost, ball, unique) --alterado v2.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 local level = tonumber(level) and tonumber(level) or pokes[pokemon].level local extra = tonumber(extStr) and tonumber(extStr) or 1 local mypoke = pokes[pokemon] if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, 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 local off = mypoke.offense * level * extra local def = mypoke.defense * level * extra local sp = mypoke.specialattack * level * extra local vit = mypoke.vitality * level * extra local agi = mypoke.agility * level * extra local leveltable = getPokemonExperienceTable(pokemon) doItemSetAttribute(item, "poke", pokemon) doItemSetAttribute(item, "hp", 1) doItemSetAttribute(item, "level", level) doItemSetAttribute(item, "exp", leveltable[level]) doItemSetAttribute(item, "nextlevelexp", leveltable[level+1] - leveltable[level]) doItemSetAttribute(item, "offense", off) doItemSetAttribute(item, "defense", def) doItemSetAttribute(item, "speed", agi) doItemSetAttribute(item, "vitality", vit) doItemSetAttribute(item, "specialattack", sp) 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 local off = mypoke.offense * boost_rate * tonumber(boost) local def = mypoke.defense * boost_rate * tonumber(boost) local agi = mypoke.agility * tonumber(boost) local spatk = mypoke.specialattack * boost_rate * tonumber(boost) local vit = mypoke.vitality * boost_rate * tonumber(boost) doItemSetAttribute(item, "boost", tonumber(boost)) doItemSetAttribute(item, "offense", getItemAttribute(item, "offense") + off) doItemSetAttribute(item, "defense", getItemAttribute(item, "defense") + def) doItemSetAttribute(item, "speed", getItemAttribute(item, "speed") + agi) doItemSetAttribute(item, "specialattack", getItemAttribute(item, "specialattack") + spatk) doItemSetAttribute(item, "vitality", getItemAttribute(item, "vitality") + vit) end if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then doPlayerSendMailByName(getCreatureName(cid), item, 1) sendMsgToPlayer(cid, 27, "[Box] 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].off) else doTransformItem(item, pokeballs[btype].off) 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) if not isCreature(cid) or not tpw or not msg then return true end 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) --alterado v2.8 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 v2.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 v2.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) then return false end if not item then return false end if not num then num = 1 end --alterado v2.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 --alterado v2.3 elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then return horarioComparacao end end return horas[1] --alterado v2.3 end function getTimeDiff(timeDiff) local dateFormat = { {'hour', timeDiff / 60 / 60}, --6% {'min', timeDiff / 60 % 60}, } local out = {} --alterado v2.3 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 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} --- --alterado v2.3 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 v2.5 local str = "cm_move"..c setCD(item, str, 0) end end end function ehNPC(cid) --alterado v2.9 return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid) end function ehMonstro(cid) --alterado v2.9 return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid end --alterado v2.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 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 pos.stackpos = 253 pid = getThingfromPos(pos).uid 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) >= 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 getTileInfo(getThingPos(cid)).pvp then return "Can" end if ehMonstro(cid) and ehMonstro(pid) and not isSummon(cid) and not isSummon(pid) then --alterado v2.9.1 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 v2.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 setPlayerStorageValue(cid, 547888, -1) --alterado v2.8 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 v2.5 functions arrumadas... end end function doRaiseStatus(cid, off, def, agi, time) if not isCreature(cid) then return true end setPlayerStorageValue(cid, 547888, 1) --alterado v2.8 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 v2.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 v2.9 end function isShinyName(name) return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v2.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"}, ["Shiny"] = {ice, "Shiny"}, ["boost"] = {boostStone, "boost"}, --alterado v2.9 } if string then return t[type][2] else return t[type][1] end end function doConvertStoneIdToString(stoneID) local t = { [11453] = "Deeph Sea Scale", [11441] = "Leaf Stone", [11442] = "Water Stone", [11443] = "Dusk Stone", [11444] = "Thunder Stone", [11445] = "Moon Stone", [11446] = "Electirizer", [11447] = "Fire Stone", --alterado v2.6 [11448] = "Magmarizer", [11449] = "Prism Scale", [11450] = "Dubious Disc", [11451] = "Protector", [11452] = "Shiny Stone", [11454] = "Dawn Stone", [12244] = "King's Rock", [12232] = "Metal Coat", [12242] = "Sun Stone", [12417] = "Dragon Scale", [12419] = "Up-Grade", [13031] = "Punch Machine", [13032] = "Kick Machine", [13033] = "Rolling Kick Machine", [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 v2.9 } if t[stoneID] then return t[stoneID] else return "" end end function isStone(id) if id >= 11441 and id <= 11454 then return true end if id == 12618 then --alterado v2.9 return true end if id == 12232 or id == 12242 or id == 12244 or id == 12245 then return true --alterado v2.7 com as stones shinys tb soh pra garantir.. ^^ end if (id >= 1452 and id <= 1478) or id == 12401 or id == 12402 then return true end if (id >= 12403 and id <= 12429) or id == 12430 or id == 12432 then return true end if (id >= 13031 and id <= 13033) or id == 12430 or id == 12432 then return true end return false end function isWater(id) return tonumber(id) and id >= 4820 and id <= 4825 --alterado v2.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 v2.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 str = "He" elseif getPokemonGender(cid) == SEX_FEMALE then str = "She" else str = "It" end local h = getPlayerStorageValue(cid, 1008) if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then str = str.." is very happy with you!" elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then str = str.." is happy." elseif h >= tonumber(getConfigValue('PokemonStageOK')) then str = str.." is unhappy." elseif h >= tonumber(getConfigValue('PokemonStageSad')) then str = str.." is sad." elseif h >= tonumber(getConfigValue('PokemonStageMad')) then str = str.." is mad." else str = str.." is very mad at you!" end return 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, "Ditto") 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") doItemEraseAttribute(p.uid, "boffense") doItemEraseAttribute(p.uid, "bdefense") doItemEraseAttribute(p.uid, "bsattack") doItemEraseAttribute(p.uid, "bagility") 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, "Shiny Ditto") 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") doItemEraseAttribute(p.uid, "boffense") doItemEraseAttribute(p.uid, "bdefense") doItemEraseAttribute(p.uid, "bsattack") doItemEraseAttribute(p.uid, "bagility") end function isTransformed(cid) return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010)) --alterado v2.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 v2.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 v2.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 v2.8 end --////////////////////////////////////////////////////////////////////////////////////////-- if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v2.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) == "Shiny 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_ORANGE_1) doSendMagicEffect(getCreaturePosition(pokemon), effect) doRemoveCreature(pokemon) unLock(pokeball.uid) --alterado v2.8 if useOTClient then doPlayerSendCancel(cid, '12//,hide') --alterado v2.7 end if useKpdoDlls then doUpdateMoves(cid) end end local EFFECTS = { --[OutfitID] = {Effect} ["Magmar"] = 35, --magmar --alterado v2.5 ["Magmortar"] = 35, --magmar ["Jynx"] = 17, --jynx ["Shiny Jynx"] = 17, --shiny jynx ["Shiny Magmar"] = 35, --magmar ["Shiny Magmortar"] = 35, --magmar } 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 v2.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) + pokemonMaxLevelAbovePlayer < getItemAttribute(item.uid, "level") then doPlayerSendCancel(cid, "Your pokemon's level is much higher than yours, you can't use him.") return true end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then --local e = getCreatureMaster(cid) local nameHIT = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke") local hands = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") if nameHIT == "Shiny Hitmonchan" or nameHIT == "Hitmonchan" then if getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") then doSetCreatureOutfit(pk, {lookType = hitmonchans[nameHIT][hands].out}, -1) else doPlayerSendTextMessage(cid, 27, "Contact a GameMaster! Error in passive system! Attribute \"hands\" missing") end end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then --alterado v2.5 markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) --alterado v2.5 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 getCreatureName(pk) == "Shiny 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, "Shiny 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, false, true) doAddPokemonInOwnList(cid, pokemon) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v2.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 v2.8 local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) return false end if look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) return true end if useKpdoDlls then doUpdateMoves(cid) end end function doRegainSpeed(cid) --alterado v2.9 \/ if not isCreature(cid) then return true end local speed = PlayerSpeed if isMonster(cid) then speed = getCreatureBaseSpeed(cid) + getSpeed(cid) * speedRate elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then speed = 200*getPlayerGroupId(cid) end if speed > 1500 then speed = 1500 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 v2.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 v2.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z --alterado v2.6 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 v2.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 --alterado v2.7 if isInArray({"Gengar", "Haunter", "Gastly", "Misdreavus", "Shiny Misdreavus", "Mismagius", "Shiny Mismagius", "Shiny Haunter", "Shiny Gastly", "Shiny Gengar", "Darkrai", "Shuppet", "Banette", "Duskull", "Dusclops", "Dusknoir", "Shiny Duskull", "Shiny Dusclops", "Shiny Dusknoir"}, getCreatureName(cid)) then return true end return false 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 v2.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 v2.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 v2.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 v2.9 end function isSummon(sid) return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid)) --alterado v2.9 end function hasSpaceInContainer(container) --alterado v2.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 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 v2.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 getSmeargleMoveTable(master) local ball = getPlayerSlotItem(master, 8).uid local moves = {} local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"} for x=1, #skts do moves["move"..x] = getItemAttribute(ball, skts[x]) and movestable[getItemAttribute(ball, skts[x])]["move"..x] and movestable[getItemAttribute(ball, skts[x])]["move"..x] ~= -1 and movestable[getItemAttribute(ball, skts[x])]["move"..x] or movestable["Smeargle"]["move"..x] end return moves end function smeargleHaveSpell(cid, spellname) local has = false local moves = getSmeargleMoveTable(cid) local ball = getPlayerSlotItem(cid, 8).uid local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"} for x=1, #skts do if getItemAttribute(ball, skts[x]) and moves["move"..x].name == spellname then has = true break end end return has end o meu é com sistema de lvl no pokémon! Editado Junho 17, 2015 por Zet0N0Murmurouu Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1656482 Compartilhar em outros sites More sharing options...
Wend ll 268 Postado Junho 18, 2015 Share Postado Junho 18, 2015 Como faria para um servidor que tem level system? poderia ajudar? ou até mesmo colocar as partes que precisa colocar no some fuctions no tópico Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1656819 Compartilhar em outros sites More sharing options...
gugu1002 0 Postado Julho 8, 2015 Share Postado Julho 8, 2015 Aqui funcionou. Mais percebi que ao você atacar e trocar o pokemon para outro e depois voltar para o primeiro pokemon ele terá recarregado os ataques antes do tempo do cooldown. (Exemplo : Usei Charizard ataquei e usei Blastoise se eu usar o Charizard de novo) Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1659430 Compartilhar em outros sites More sharing options...
Luga03 332 Postado Julho 12, 2015 Share Postado Julho 12, 2015 manow eu adicionei o sistema e estava funfando 100% mais dai devo ter mexido em alguma coisa que agora n esta funfando olha o erro que dá quando eu tento usar a pokeball para sumonar o poke! [11/07/2015 23:11:40] [Error - Action Interface] [11/07/2015 23:11:40] data/actions/scripts/goback.lua:onUse [11/07/2015 23:11:40] Description: [11/07/2015 23:11:40] data/lib/some functions.lua:1643: attempt to concatenate global 'pokemons' (a nil value) [11/07/2015 23:11:40] stack traceback: [11/07/2015 23:11:40] data/lib/some functions.lua:1643: in function 'sendAllPokemonsBarPoke' [11/07/2015 23:11:40] data/actions/scripts/goback.lua:11: in function <data/actions/scripts/goback.lua:10> Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1659792 Compartilhar em outros sites More sharing options...
caotic 393 Postado Julho 17, 2015 Share Postado Julho 17, 2015 (editado) Aqui funcionou. Mais percebi que ao você atacar e trocar o pokemon para outro e depois voltar para o primeiro pokemon ele terá recarregado os ataques antes do tempo do cooldown. (Exemplo : Usei Charizard ataquei e usei Blastoise se eu usar o Charizard de novo) E um erro muito indagado quando eu fiz o sistema más felizmente ele tem uma solução simples. Antes do pokemon for sumonado basta adicionar: if getCreatureCondition(cid, CONDITION_INFIGHT) == true and #getCreatureSummons(cid) >= 1 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode trocar de pokemon durante a batalha.") return true end Editado Julho 17, 2015 por caotic Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1661150 Compartilhar em outros sites More sharing options...
Avronex 104 Postado Julho 25, 2015 Share Postado Julho 25, 2015 Bom, fui testar hoje e coloquei todas as funções corretamente, mas me ocorre o seguinte erro: [25/07/2015 15:16:14] [Error - TalkAction Interface] [25/07/2015 15:16:14] data/talkactions/scripts/move1.lua:onSay [25/07/2015 15:16:14] Description: [25/07/2015 15:16:14] data/lib/034-exhaustion.lua:144: field 'day' missing in date table [25/07/2015 15:16:14] stack traceback: [25/07/2015 15:16:14] [C]: in function 'time' [25/07/2015 15:16:14] data/lib/034-exhaustion.lua:144: in function 'set' [25/07/2015 15:16:14] data/talkactions/scripts/move1.lua:334: in function <data/talkactions/scripts/move1.lua:37 Alguem poderia me dizer a que ele esta relacionado? Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1662297 Compartilhar em outros sites More sharing options...
Carlos7457 0 Postado Agosto 28, 2015 Share Postado Agosto 28, 2015 (editado) o Meu nao tem essa parte 3. Vá na pasta data\lib\cooldown bar.lua Procure por: endreturn retend function getPlayerPokeballs(cid) --alterado v1.9 \/ local ret = {} local container = 0 if isCreature(cid) then container = getPlayerSlotItem(cid, 3).uid local myball = getPlayerSlotItem(cid, 8) if myball.uid > 0 then table.insert(ret, myball) end else container = cid 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 = getPlayerPokeballs(item.uid) if itemsbag and #itemsbag > 0 then for i = 0, #itemsbag do table.insert(ret, itemsbag) end end elseif isPokeball(item.itemid) then table.insert(ret, item) end end end return ret end function doUpdatePokemonsBar(cid) if not isCreature(cid) then return true end if getPlayerStorageValue(cid, 656494) > 0 then return true end setPlayerStorageValue(cid, 656494, 1000) addEvent(setPlayerStorageValue, 100, cid, 656494, -1) local ret = {} table.insert(ret, "p#,") local balls = getPlayerPokeballs(cid) local times = 0 for a = 1, #balls do local item = balls[a] local hp = math.ceil(getItemAttribute(item.uid, "hp") * 100) local name = getItemAttribute(item.uid, "poke") local port = getPlayerSlotItem(cid, CONST_SLOT_LEGS) if fotos[name] >= 11137 and fotos[name] <= 11387 then times = times + 1 local foto = fotos[name] - 911 doItemSetAttribute(item.uid, "ballorder", times) table.insert(ret, foto..","..name..""..times..","..hp..",") elseif fotos[name] >= 12605 then times = times + 1 local foto = fotos[name] - 1178 --alterado v1.9 doItemSetAttribute(item.uid, "ballorder", times) table.insert(ret, foto..","..name..""..times..","..hp..",") else times = times + 1 local foto = fotos[name] - 928 doItemSetAttribute(item.uid, "ballorder", times) table.insert(ret, foto..","..name..""..times..","..hp..",") end end doPlayerSendCancel(cid, table.concat(ret)) end function getNewMoveTable(table, n) if table == nil or not n then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} return moves[n] or false end function doUpdateMoves(cid) if not isCreature(cid) then return true end local summon = getCreatureSummons(cid)[1] local ret = {} table.insert(ret, "12&,") if not summon then for a = 1, 12 do table.insert(ret, "n/n,") end doPlayerSendCancel(cid, table.concat(ret)) addEvent(doUpdateCooldowns, 100, cid) return true end if isTransformed(summon) then --alterado v1.9 moves = movestable[getPlayerStorageValue(summon, 1010)] else moves = getCreatureName(summon) == "Smeargle" and getSmeargleMoveTable(cid) or movestable[getCreatureName(summon)] end for a = 1, 12 do local b = getNewMoveTable(moves, a) if b then table.insert(ret, (b.name:find("Sketch") and "Sketch" or b.name)..",") else table.insert(ret, "n/n,") end end doPlayerSendCancel(cid, table.concat(ret)) addEvent(doUpdateCooldowns, 100, cid) end function doUpdateCooldowns(cid) if not isCreature(cid) then return true end local a = getPlayerSlotItem(cid, 8) local ret = {} table.insert(ret, "12|,") if a.uid <= 0 or #getCreatureSummons(cid) <= 0 then for cds = 1, 12 do if useOTClient then table.insert(ret, "-1|0,") else table.insert(ret, "-1,") end end doPlayerSendCancel(cid, table.concat(ret)) return true end for cds = 1, 12 do ---- local summon = getCreatureSummons(cid)[1] if summon and getPlayerStorageValue(summon, 212123) >= 1 then cdzin = "cm_move"..cds else cdzin = "move"..cds end ---- if isTransformed(summon) then --alterado v1.9 moves = movestable[getPlayerStorageValue(summon, 1010)] else moves = movestable[getCreatureName(summon)] end local b = getNewMoveTable(moves, cds) if not b then for cds = 1, 12 do if useOTClient then table.insert(ret, "-1|0,") else table.insert(ret, "-1,") end --alterado v1.9 end doPlayerSendCancel(cid, table.concat(ret)) return true end ---- if getCD(a.uid, cdzin) > 0 then if (useOTClient and b) then table.insert(ret, (getCD(a.uid, cdzin)).."|"..(1)..",") else table.insert(ret, (getCD(a.uid, cdzin))..",") end else if (useOTClient and b) then table.insert(ret, "0|"..(1)..",") else table.insert(ret, "0,") end end end doPlayerSendCancel(cid, table.concat(ret)) end function getBallsAttributes(item) local t = {"poke", "gender", "nick", "boost", "happy", "hp", "description", "transBegin", "hunger", "transLeft", "transTurn", "transOutfit", "transName", "trans", "light", "blink", "move1", "move2", "move3", "move4", "move5", "move6", "move7", "move8", "move9", "move10", "move11", "move12", "ballorder", "hands", "aura", "burn", "burndmg", "poison", "poisondmg", "confuse", "sleep", "miss", "missSpell", "missEff", "fear", "fearSkill", "silence", "silenceEff", "stun", "stunEff", "stunSpell", "paralyze", "paralyzeEff", "slow", "slowEff", "leech", "leechdmg", "Buff1", "Buff2", "Buff3", "Buff1skill", "Buff2skill", "Buff3skill", "control", "unique", "task", "lock"} local ret = {} for a = 1, #t do if getItemAttribute(item, t[a]) == "hands" then return end ret[t[a]] = getItemAttribute(item, t[a]) or false end return ret end function doChangeBalls(cid, item1, item2) if not isCreature(cid) then return true end if item1.uid == item2.uid then if #getCreatureSummons(cid) <= 0 then doGoPokemon(cid, getPlayerSlotItem(cid, 8)) else doReturnPokemon(cid, getCreatureSummons(cid)[1], getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect) end return true end if item1.uid > 0 and item2.uid > 0 then local io = getBallsAttributes(item1.uid) local it = getBallsAttributes(item2.uid) for a, b in pairs (io) do if b then doItemSetAttribute(item2.uid, a, b) else doItemEraseAttribute(item2.uid, a) end end for a, b in pairs (it) do if b then doItemSetAttribute(item1.uid, a, b) else doItemEraseAttribute(item1.uid, a) end end local id = item2.itemid doTransformItem(item2.uid, item1.itemid) doTransformItem(item1.uid, id) doGoPokemon(cid, getPlayerSlotItem(cid, 8)) else local id = item2.itemid local b = getBallsAttributes(item2.uid) local a = doPlayerAddItem(cid, 2643, false) for c, d in pairs (b) do if d then doItemSetAttribute(a, c, d) else doItemEraseAttribute(a, c) end end doRemoveItem(item2.uid, 1) doTransformItem(a, id) doGoPokemon(cid, getPlayerSlotItem(cid, 8)) end end Editado Agosto 28, 2015 por Carlos Henrique PxD Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1666870 Compartilhar em outros sites More sharing options...
Sweet Raztaman 0 Postado Setembro 30, 2015 Share Postado Setembro 30, 2015 Boms!! Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1670504 Compartilhar em outros sites More sharing options...
Developer Berg 65 Postado Janeiro 13, 2016 Share Postado Janeiro 13, 2016 (editado) Desculpa reviver o tópico, alguém poderia colocar os códigos na minha some fuction ? toda vez que eu coloco da erro, quando eu clico na poke bar para trocar de poke, o poke some da minha bag, vou deixar aqui a minha some fuction para vcs instalarem, Obg. meu Pda tem level system. function addPokeToPlayer(cid, pokemon, level, extStr, gender, boost, ball, unique) --alterado v2.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 local level = tonumber(level) and tonumber(level) or pokes[pokemon].level local extra = tonumber(extStr) and tonumber(extStr) or 1 local mypoke = pokes[pokemon] if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, 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 local off = mypoke.offense * level * extra local def = mypoke.defense * level * extra local sp = mypoke.specialattack * level * extra local vit = mypoke.vitality * level * extra local agi = mypoke.agility * level * extra local leveltable = getPokemonExperienceTable(pokemon) doItemSetAttribute(item, "poke", pokemon) doItemSetAttribute(item, "hp", 1) doItemSetAttribute(item, "level", level) doItemSetAttribute(item, "exp", leveltable[level]) doItemSetAttribute(item, "nextlevelexp", leveltable[level+1] - leveltable[level]) doItemSetAttribute(item, "offense", off) doItemSetAttribute(item, "defense", def) doItemSetAttribute(item, "speed", agi) doItemSetAttribute(item, "vitality", vit) doItemSetAttribute(item, "specialattack", sp) 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 local off = mypoke.offense * boost_rate * tonumber(boost) local def = mypoke.defense * boost_rate * tonumber(boost) local agi = mypoke.agility * tonumber(boost) local spatk = mypoke.specialattack * boost_rate * tonumber(boost) local vit = mypoke.vitality * boost_rate * tonumber(boost) doItemSetAttribute(item, "boost", tonumber(boost)) doItemSetAttribute(item, "offense", getItemAttribute(item, "offense") + off) doItemSetAttribute(item, "defense", getItemAttribute(item, "defense") + def) doItemSetAttribute(item, "speed", getItemAttribute(item, "speed") + agi) doItemSetAttribute(item, "specialattack", getItemAttribute(item, "specialattack") + spatk) doItemSetAttribute(item, "vitality", getItemAttribute(item, "vitality") + vit) end if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then doPlayerSendMailByName(getCreatureName(cid), item, 1) sendMsgToPlayer(cid, 27, "[Box] 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].off) else doTransformItem(item, pokeballs[btype].off) 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) if not isCreature(cid) or not tpw or not msg then return true end 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) --alterado v2.8 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 v2.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 v2.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) then return false end if not item then return false end if not num then num = 1 end --alterado v2.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 --alterado v2.3 elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then return horarioComparacao end end return horas[1] --alterado v2.3 end function getTimeDiff(timeDiff) local dateFormat = { {'hour', timeDiff / 60 / 60}, --6% {'min', timeDiff / 60 % 60}, } local out = {} --alterado v2.3 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 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} --- --alterado v2.3 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 v2.5 local str = "cm_move"..c setCD(item, str, 0) end end end function ehNPC(cid) --alterado v2.9 return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid) end function ehMonstro(cid) --alterado v2.9 return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid end --alterado v2.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 v2.6.1 end end end 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) == "Shiny Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Shiny Ditto" then if isSummon(cid) then local item = getPlayerSlotItem(getCreatureMaster(cid), 8) doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) --alterado v2.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 pos.stackpos = 253 pid = getThingfromPos(pos).uid 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) >= 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 getTileInfo(getThingPos(cid)).pvp then return "Can" end if ehMonstro(cid) and ehMonstro(pid) and not isSummon(cid) and not isSummon(pid) then --alterado v2.9.1 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 v2.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 setPlayerStorageValue(cid, 547888, -1) --alterado v2.8 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 v2.5 functions arrumadas... end end function doRaiseStatus(cid, off, def, agi, time) if not isCreature(cid) then return true end setPlayerStorageValue(cid, 547888, 1) --alterado v2.8 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 v2.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 v2.9 end function isShinyName(name) return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v2.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"}, ["Shiny"] = {ice, "Shiny"}, ["boost"] = {boostStone, "boost"}, --alterado v2.9 } if string then return t[type][2] else return t[type][1] end end function doConvertStoneIdToString(stoneID) local t = { [11453] = "Deeph Sea Scale", [11441] = "Leaf Stone", [11442] = "Water Stone", [11443] = "Dusk Stone", [11444] = "Thunder Stone", [11445] = "Moon Stone", [11446] = "Electirizer", [11447] = "Fire Stone", --alterado v2.6 [11448] = "Magmarizer", [11449] = "Prism Scale", [11450] = "Dubious Disc", [11451] = "Protector", [11452] = "Shiny Stone", [11454] = "Dawn Stone", [12244] = "King's Rock", [12232] = "Metal Coat", [12242] = "Sun Stone", [12417] = "Dragon Scale", [12419] = "Up-Grade", [13031] = "Punch Machine", [13032] = "Kick Machine", [13033] = "Rolling Kick Machine", [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 v2.9 } if t[stoneID] then return t[stoneID] else return "" end end function isStone(id) if id >= 11441 and id <= 11454 then return true end if id == 12618 then --alterado v2.9 return true end if id == 12232 or id == 12242 or id == 12244 or id == 12245 then return true --alterado v2.7 com as stones shinys tb soh pra garantir.. ^^ end if (id >= 1452 and id <= 1478) or id == 12401 or id == 12402 then return true end if (id >= 12403 and id <= 12429) or id == 12430 or id == 12432 then return true end if (id >= 13031 and id <= 13033) or id == 12430 or id == 12432 then return true end return false end function isWater(id) return tonumber(id) and id >= 4820 and id <= 4825 --alterado v2.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 v2.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 str = "He" elseif getPokemonGender(cid) == SEX_FEMALE then str = "She" else str = "It" end local h = getPlayerStorageValue(cid, 1008) if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then str = str.." is very happy with you!" elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then str = str.." is happy." elseif h >= tonumber(getConfigValue('PokemonStageOK')) then str = str.." is unhappy." elseif h >= tonumber(getConfigValue('PokemonStageSad')) then str = str.." is sad." elseif h >= tonumber(getConfigValue('PokemonStageMad')) then str = str.." is mad." else str = str.." is very mad at you!" end return 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, "Ditto") 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") doItemEraseAttribute(p.uid, "boffense") doItemEraseAttribute(p.uid, "bdefense") doItemEraseAttribute(p.uid, "bsattack") doItemEraseAttribute(p.uid, "bagility") 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, "Shiny Ditto") 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") doItemEraseAttribute(p.uid, "boffense") doItemEraseAttribute(p.uid, "bdefense") doItemEraseAttribute(p.uid, "bsattack") doItemEraseAttribute(p.uid, "bagility") end function isTransformed(cid) return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010)) --alterado v2.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 v2.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 v2.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 v2.8 end --////////////////////////////////////////////////////////////////////////////////////////-- if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v2.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 getCreatureName(pokemon) == "Shiny 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 v2.8 if useOTClient then doPlayerSendCancel(cid, '12//,hide') --alterado v2.7 end if useKpdoDlls then doUpdateMoves(cid) end end local EFFECTS = { --[OutfitID] = {Effect} ["Magmar"] = 35, --magmar --alterado v2.5 ["Magmortar"] = 35, --magmar ["Jynx"] = 17, --jynx ["Shiny Jynx"] = 17, --shiny jynx ["Shiny Magmar"] = 35, --magmar ["Shiny Magmortar"] = 35, --magmar } 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 v2.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) + pokemonMaxLevelAbovePlayer < getItemAttribute(item.uid, "level") then doPlayerSendCancel(cid, "Your pokemon's level is much higher than yours, you can't use him.") return true end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then --local e = getCreatureMaster(cid) local nameHIT = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke") local hands = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") if nameHIT == "Shiny Hitmonchan" or nameHIT == "Hitmonchan" then if getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") then doSetCreatureOutfit(pk, {lookType = hitmonchans[nameHIT][hands].out}, -1) else doPlayerSendTextMessage(cid, 27, "Contact a GameMaster! Error in passive system! Attribute \"hands\" missing") end end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then --alterado v2.5 markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) --alterado v2.5 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 getCreatureName(pk) == "Shiny 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, "Shiny 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, false, true) doAddPokemonInOwnList(cid, pokemon) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v2.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 v2.8 if useKpdoDlls then doUpdateMoves(cid) end end function doRegainSpeed(cid) --alterado v2.9 \/ if not isCreature(cid) then return true end local speed = PlayerSpeed if isMonster(cid) then speed = getCreatureBaseSpeed(cid) + getSpeed(cid) * speedRate elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then speed = 200*getPlayerGroupId(cid) end if speed > 1500 then speed = 1500 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 v2.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 v2.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z --alterado v2.6 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 v2.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 --alterado v2.7 if isInArray({"Gengar", "Haunter", "Gastly", "Misdreavus", "Shiny Misdreavus", "Mismagius", "Shiny Mismagius", "Shiny Haunter", "Shiny Gastly", "Shiny Gengar", "Darkrai", "Shuppet", "Banette", "Duskull", "Dusclops", "Dusknoir", "Shiny Duskull", "Shiny Dusclops", "Shiny Dusknoir"}, getCreatureName(cid)) then return true end return false 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 v2.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 v2.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 v2.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 v2.9 end function isSummon(sid) return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid)) --alterado v2.9 end function hasSpaceInContainer(container) --alterado v2.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 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 v2.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 Editado Janeiro 13, 2016 por ricardoberg Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1681142 Compartilhar em outros sites More sharing options...
samuelitho 1 Postado Setembro 28, 2018 Share Postado Setembro 28, 2018 como0 lo adicciono con lvl system? Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1744166 Compartilhar em outros sites More sharing options...
StrikersBR12 1 Postado Setembro 22, 2019 Share Postado Setembro 22, 2019 Em 15/03/2014 em 19:37, Soulviling disse: Colocando pokebar (a barrinha que troca de pokemon) no seu pda sem level. Se quiser que eu faça com pda com level comentem ai. Mostrar conteúdo oculto PDA SEM LEVEL 1. Vá na pasta data\actions\scripts\goback.lua e embaixo da parte: function onUse(cid, item, frompos, item2, topos) coloque: sendAllPokemonsBarPoke(cid) 2. Vá na pasta data\lib\catch system.lua Procure por: setPlayerStorageValue(cid, 854788, 'done') end e embaixo coloque: sendAllPokemonsBarPoke(cid) 3. Vá na pasta data\lib\cooldown bar.lua Procure por: endreturn retend e embaixo coloque: Mostrar conteúdo oculto function doUpdatePokemonsBar(cid)if not isCreature(cid) then return true endif getPlayerStorageValue(cid, 656494) > 0 thenreturn trueendsetPlayerStorageValue(cid, 656494, 1000)addEvent(setPlayerStorageValue, 100, cid, 656494, -1)local ret = {}table.insert(ret, "p#,")local balls = getPlayerPokeballs(cid)local times = 0for a = 1, #balls do local item = balls[a] local hp = math.ceil(getItemAttribute(item.uid, "hp") * 100) local name = getItemAttribute(item.uid, "poke") local port = getPlayerSlotItem(cid, CONST_SLOT_LEGS) if fotos[name] >= 11137 and fotos[name] <= 11387 then times = times + 1 local foto = fotos[name] - 911 doItemSetAttribute(item.uid, "ballorder", times) table.insert(ret, foto..","..name..""..times..","..hp..",") elseif fotos[name] >= 12605 then times = times + 1 local foto = fotos[name] - 1178 --alterado v1.9 doItemSetAttribute(item.uid, "ballorder", times) table.insert(ret, foto..","..name..""..times..","..hp..",") else times = times + 1 local foto = fotos[name] - 928 doItemSetAttribute(item.uid, "ballorder", times) table.insert(ret, foto..","..name..""..times..","..hp..",") endenddoPlayerSendCancel(cid, table.concat(ret))end 4. Vá na pasta data\lib\some functions.lua Troque por esse: Ocultar conteúdo function addPokeToPlayer(cid, pokemon, boost, gender, ball, unique, level) --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 endsendAllPokemonsBarPoke(cid)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, "level", level and level or 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) endif getPlayerGroupId(cid) > 4 thenlocal shinys = {"Venusaur", "Charizard", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate", "Raichu", "Zubat", "Golbat", "Paras", "Parasect", "Venonat", "Venomoth", "Growlithe", "Arcanine", "Abra", "Alakazam", "Tentacool", "Tentacruel", "Farfetch'd", "Grimer", "Muk", "Gengar", "Onix", "Krabby", "Kingler", "Voltorb", "Electrode", "Cubone", "Marowak", "Hitmonlee", "Hitmonchan", "Tangela", "Horsea", "Seadra", "Scyther", "Jynx", "Electabuzz", "Pinsir", "Magikarp", "Gyarados", "Snorlax", "Dragonair", "Dratini", "Dragonite"}if isInArray(shinys, pokemon) then sendMsgToPlayer(cid, 27, "Transform Poke In Shiny") tranfBallInShiny(item) endendsendAllPokemonsBarPoke(cid)return 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 getPokemonLevelByPokemon(pk)if isSummon(pk) thenlocal cid = getCreatureMaster(pk)if cid thenlocal ball = getPlayerSlotItem(cid, 8)if ball.uid ~= 0 thenreturn getItemAttribute(ball.uid, "level") or 1endendendreturn falseendfunction addValuePokeLevel(level, value)if tonumber(level) thenvalue = value/100value = value*levelreturn valueendreturn falseendfunction 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_NPCSendfunction 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) or ehMonstro(pid) then return "Can" endreturn "Cant"end function stopNow(cid, time) --function q faz o poke/player ficar imovel por um tempoif not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true endlocal function podeMover(cid) --alterado v1.9 \/if isCreature(cid) then mayNotMove(cid, false) endendmayNotMove(cid, true)addEvent(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] = "Ice 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 <= ice thenreturn trueendif id == boostStone then --alterado v1.9return trueendif id == 12232 or id == 12242 or id == 12244 or id == 12245 thenreturn true endif (id >= sfire and id <= searth) or id == 12417 or id == 12419 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) ----------------- 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) doCloseInfoPoke(cid) 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, --magmar --alterado v2.5 ["Magmortar"] = 35, --magmar ["Jynx"] = 17, --jynx ["Shiny Jynx"] = 17, --shiny jynx ["Piloswine"] = 210, --piloswine ["Swinub"] = 210, --swinub}function doGoPokemon(cid, item)sendAllPokemonsBarPoke(cid) 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) if not getItemAttribute(item.uid, "level") then doSetItemAttribute(item.uid, "level", 1) end 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) sendAudio(cid, "006") sendPokeInfo(cid) 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 end --alterado v2.7 if isInArray({"Mismagius", "Dusknoir", "Sableye" , "Shuppet" , "Banette" , "Duskull" , "Dusclops" , "Gengar", "Haunter", "Gastly", "Misdreavus", "Shiny Gengar", "Shiny Abra", "Ghost Marowak"}, getCreatureName(cid)) then return true endreturn falseendfunction 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 createBallByStatus(cid, status, id)slot = getPlayerSlotItem(cid, 8)if slot.uid == 0 thenitem = doPlayerAddItem(cid, id) elseitem = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, id, 1)endsetStatusPokeballByStatusStr(item, status)endfunction getPokemonByName(cid, pokemon)local arraypoke = {}local container = getPlayerSlotItem(cid, 3).uidlocal pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs doname = getItemAttribute(pokeballs[i], "poke") if pokemon == name thentable.insert(arraypoke, pokeballs[i])return arraypoke[1]endendreturn falseendfunction tranfBallInShiny(pokeball)doItemSetAttribute(pokeball, "shiny", "shiny")return trueendfunction getShinyByPokeball(pokeball)local shiny = getItemAttribute(pokeball, "shiny") return shiny == "shiny" and true or falseendfunction getShinyNameByPokeball(pokeball)local shiny = getItemAttribute(pokeball, "shiny") return shiny and "Shiny "..getItemAttribute(pokeball, "poke").."" or getItemAttribute(pokeball, "poke")endfunction setStatusPokeballByStatusStr(pokeball, status)local attr = string.explode(status, ",")local x = {"poke", "hp", "offense", "defense", "speed", "vitality", "specialattack", "happy", "gender", "hands", "description", "fakedesc", "boost", "ball", "defeated", "shiny", "level"}for i =1, #attr dodoItemSetAttribute(pokeball, x[i], attr[i])endendfunction copieAllStatusBalls(pokeball)local x = {"poke", "hp", "offense", "defense", "speed", "vitality", "specialattack", "happy", "gender", "hands", "description", "fakedesc", "boost", "ball", "defeated", "shiny", "level"}str = ""sep = ","for i =1, #x dolocal attr = getItemAttribute(pokeball, x[i]) or 0local t = attr ..sepstr = str..tendreturn str endfunction atualizaPokes(cid)local item = getPlayerSlotItem(cid, 8)if item.uid <= 0 then return true endif not getItemAttribute(item.uid, "poke") thenreturn trueend for i, x in pairs(fotos) doif string.lower(getItemAttribute(item.uid, "poke")) == string.lower(i) thendoTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[i])if useOTClient thendoPlayerSendCancel(cid, '12//,show')endif useKpdoDlls thendoUpdateMoves(cid)endendendendfunction doSendPokemon(cid, pokemon)if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 75846) >= 1 or getPlayerStorageValue(cid, 5700) >= 1 then --alterado v1.9 <<return true endif exhaustion.get(cid, 6666) and exhaustion.get(cid, 6666) > 0 then return true endif #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) endend if #getCreatureSummons(cid) > 0 thent = getPlayerSlotItem(cid, 8)local btype = getPokeballType(t.itemid)local effect = pokeballs[btype].effect or 21 doReturnPokemon(cid, getCreatureSummons(cid)[1], t,effect)endt = getPlayerSlotItem(cid, 8)if t.uid ~= 0 thenpokeslot = getItemAttribute(t.uid, "poke") if pokeslot == pokemon thent = getPlayerSlotItem(cid, 8)doGoPokemon(cid, t)atualizaPokes(cid)return trueendif getPokemonByName(cid, pokemon) thenlocal poke = getPokemonByName(cid, pokemon)local attr = copieAllStatusBalls(t.uid)local id = t.itemiddoRemoveItem(t.uid)local attr2 = copieAllStatusBalls(poke)local id2 = getThing(poke).itemiddoRemoveItem(getPokemonByName(cid, pokemon))createBallByStatus(cid, attr2, id2)createBallByStatus(cid, attr, id)t = getPlayerSlotItem(cid, 8)doGoPokemon(cid, t)atualizaPokes(cid)return trueendendif getPokemonByName(cid, pokemon) thenlocal id = getThing(getPokemonByName(cid, pokemon)).itemidlocal attr = copieAllStatusBalls(getPokemonByName(cid, pokemon))doRemoveItem(getPokemonByName(cid, pokemon))createBallByStatus(cid, attr, id)t = getPlayerSlotItem(cid, 8)doGoPokemon(cid, t)atualizaPokes(cid)return trueendreturn falseendfunction sendPokeInfo(cid)local activeimg = truelocal poke = getPlayerSlotItem(cid, 8)local pokeslot = getItemAttribute(poke.uid, "poke") local pokeboost = getItemAttribute(poke.uid, "boost") or 0local pokehappy = getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) or 1 doPlayerSendCancel(cid, "NewInfo/"..pokeslot.."/"..pokeboost.."/"..pokehappy.."")if activeimg thenlocal img = "ShowPoke/"doPlayerSendCancel(cid, img..pokeslot)endendfunction sendAudio(cid, audio)local function getSpectatorsFromArea(fromPosition, toPosition, multifloor) local lenght = ((math.max(fromPosition.x, toPosition.x) - math.min(fromPosition.x, toPosition.x)) * 0.5) + 1 local width = ((math.max(fromPosition.y, toPosition.y) - math.min(fromPosition.y, toPosition.y)) * 0.5) + 1 if multifloor == true then local ret = {} for f = math.min(fromPosition.z, toPosition.z), math.max(fromPosition.z, toPosition.z) do local tmp = getSpectators({x = math.min(fromPosition.x, toPosition.x) + lenght, y = math.min(fromPosition.y, toPosition.y) + width, z = f}, lenght, width, false) for k = 1, #tmp dotable.insert(ret, tmp[k])end end return ret end return getSpectators({x = math.min(fromPosition.x, toPosition.x) + lenght, y = math.min(fromPosition.y, toPosition.y) + width, z = fromPosition.z}, lenght, width, false)endlocal pos = getThingPos(cid)local pos = getThingPos(cid)local t = 5local pos1 = {x = pos.x-t, y = pos.y-t, z = pos.z}local pos2 = {x = pos.x+t, y = pos.y+t, z = pos.z}for _, pid in pairs(getSpectatorsFromArea(pos1, pos2, true)) doif isPlayer(pid) thendoPlayerSendCancel(pid, "Audio "..audio.."")endendendfunction doShowSelectChar(cid)doPlayerSendCancel(cid, "ShowChar")endfunction doCloseSelectChar(cid)doPlayerSendCancel(cid, "CloseChar")endfunction doShowLookPlayer(cid, target, msg)doPlayerSendCancel(cid, "ShowLook/"..getPlayerStorageValue(target, 21121).."/"..msg.."")endfunction doCloseInfoPoke(cid)local activeimg = truedoPlayerSendCancel(cid, "InfoClosed")if activeimg thenlocal close = "ClosePoke"doPlayerSendCancel(cid, close)endendfunction sendAllPokemonsBarPoke(cid)local container = getPlayerSlotItem(cid, 3).uidlocal pokes = "Pokebar"local t = getPlayerSlotItem(cid, 8)if t.uid ~= 0 thenpokeslot = getItemAttribute(t.uid, "poke") pokes = pokes.."/"..pokeslot..""endlocal pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs dopokemons = getItemAttribute(pokeballs[i], "poke") pokes = pokes.."/"..pokemons..""enddoPlayerSendCancel(cid, pokes)endfunction addLevelAllpokes(cid, levelup)local container = getPlayerSlotItem(cid, 3).uidlocal pokes = "Parabens seus pokemons subiram de level"local msg = ""x = falselocal t = getPlayerSlotItem(cid, 8)local pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs dopokemons = getItemAttribute(pokeballs[i], "poke") local level = getItemAttribute(pokeballs[i], "level") and getItemAttribute(pokeballs[i], "level") or 1local up = level+levelupdoItemSetAttribute(pokeballs[i], "level", up)msg = msg..pokemons.." Subiu para o level "..up.."\n"x = trueendif t.uid ~= 0 thenpokeslot = getItemAttribute(t.uid, "poke") local level = getItemAttribute(t.uid, "level") and getItemAttribute(t.uid, "level") or 1local up = level+levelupdoItemSetAttribute(t.uid, "level", up)msg = msg..pokeslot.." Subiu para o level "..up.."\n"endreturn doPlayerSendTextMessage(cid, 27, msg.."------------------------------------")end 5. Vá na pasta data\talkactions\talkactions.xml Coloque essa tag: <talkaction words="/poke" case-sensitive="no" event="script" value="poke.lua"/> depois crie um data\talkactions\scripts\poke.lua Ocultar conteúdo function onSay(cid, words, param)local cfg = {exhausted = 5, -- Time you are exhausted in seconds.storage = 5858, -- Storage used for "exhaust."exp = 2.0 -- this means 2x more experence then default}if(getPlayerStorageValue(cid, cfg.storage) > os.time() and getPlayerStorageValue(cid, cfg.storage) < 100+os.time()) thendoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait another " .. getPlayerStorageValue(cid, cfg.storage) - os.time() .. ' second' .. ((getPlayerStorageValue(cid, cfg.storage) - os.time()) == 1 and "" or "s") .. " to use new pokemon.")elseif doSendPokemon(cid, param) thensendAllPokemonsBarPoke(cid)setPlayerStorageValue(cid, cfg.storage, os.time() + cfg.exhausted)return trueenddoPlayerSendTextMessage(cid, 27, "Sua barra esta desatualizada")sendAllPokemonsBarPoke(cid)endreturn trueend Coloque o game_barpoke dentro da pasta modules. Download: www.mediafire.com/download/8bavucwof24bkxv/game_barpoke.rar Créditos: Soulviling Caotic http://prntscr.com/p9a15z Link para o comentário https://xtibia.com/forum/topic/230109-pokebar-para-pda/page/4/#findComment-1753822 Compartilhar em outros sites More sharing options...
Posts Recomendados