Jump to content

Olá Tibiano! Notamos que você está com um adblocker ligado... 

Nós promovemos servidores dentro da comunidade, para que eles tenham visibilidade.

Por favor, nos ajude a continuar promovendo esses servidores. Adicione nosso domínio na whitelist de seu adblocker, ok? :)

Fawkzz12

Campones
  • Content Count

    56
  • Joined

  • Last visited

  • xPoints

    0 [ Donate ]

About Fawkzz12

Informações

  • Forma que conheci o xTibia
    Sites de Busca
  • Sou
    OT-Admin

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Como consigo fazer doação no site Otservlist de vocês.. Não consigo entrar em contato, queria promover meu servidor
  2. Fawkzz12

    Erro Distro

    ele faz sozinho isso mano kkk local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:addModule(FocusModule:new())
  3. quando eu deslogo com o icone no slot, ele volta a ficar pokebola, oque faço?
  4. Fawkzz12

    Erro Distro

    Esse erro fica dando assim fica sobrecarregando a distro e dando lag no servidor
  5. Viu, eu adicionei novos pokes mas a barra de skill fica bugada, ela não abre totalmente, teria como eu usar outro cliente ou usar outra barra de skill, tipo a dos clientes atuais ?
  6. Fawkzz12

    Pokemon Não Ataca

    Reputado amigo, obrigado !!!
  7. Fawkzz12

    Pokemon Não Ataca

    local combats = { [PSYCHICDAMAGE] = {cor = COLOR_PSYCHIC}, [GRASSDAMAGE] = {cor = COLOR_GRASS}, [POISONEDDAMAGE] = {cor = COLOR_GRASS}, [FIREDAMAGE] = {cor = COLOR_FIRE2}, [BURNEDDAMAGE] = {cor = COLOR_BURN}, [WATERDAMAGE] = {cor = COLOR_WATER}, [ICEDAMAGE] = {cor = COLOR_ICE}, [NORMALDAMAGE] = {cor = COLOR_NORMAL}, [FLYDAMAGE] = {cor = COLOR_FLYING}, [GHOSTDAMAGE] = {cor = COLOR_GHOST}, [GROUNDDAMAGE] = {cor = COLOR_GROUND}, [ELECTRICDAMAGE] = {cor = COLOR_ELECTRIC}, [ROCKDAMAGE] = {cor = COLOR_ROCK}, [BUGDAMAGE] = {cor = COLOR_BUG}, [FIGHTDAMAGE] = {cor = COLOR_FIGHTING}, [DRAGONDAMAGE] = {cor = COLOR_DRAGON}, [POISONDAMAGE] = {cor = COLOR_POISON}, [DARKDAMAGE] = {cor = COLOR_DARK}, [STEELDAMAGE] = {cor = COLOR_STEEL}, [MIRACLEDAMAGE] = {cor = COLOR_PSYCHIC}, [DARK_EYEDAMAGE] = {cor = COLOR_GHOST}, [SEED_BOMBDAMAGE] = {cor = COLOR_GRASS}, [SACREDDAMAGE] = {cor = COLOR_FIRE2}, [MUDBOMBDAMAGE] = {cor = COLOR_GROUND}, --alterado v1.9 } local function sendPlayerDmgMsg(cid, text) if not isCreature(cid) then return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, text) end local races = { [4] = {cor = COLOR_FIRE2}, [6] = {cor = COLOR_WATER}, [7] = {cor = COLOR_NORMAL}, [8] = {cor = COLOR_FIRE2}, [9] = {cor = COLOR_FIGHTING}, [10] = {cor = COLOR_FLYING}, [11] = {cor = COLOR_GRASS}, [12] = {cor = COLOR_POISON}, [13] = {cor = COLOR_ELECTRIC}, [14] = {cor = COLOR_GROUND}, [15] = {cor = COLOR_PSYCHIC}, [16] = {cor = COLOR_ROCK}, [17] = {cor = COLOR_ICE}, [18] = {cor = COLOR_BUG}, [19] = {cor = COLOR_DRAGON}, [20] = {cor = COLOR_GHOST}, [21] = {cor = COLOR_STEEL}, [22] = {cor = COLOR_DARK}, [1] = {cor = 180}, [2] = {cor = 180}, [3] = {cor = 180}, [5] = {cor = 180}, } local damages = {GROUNDDAMAGE, ELECTRICDAMAGE, ROCKDAMAGE, FLYDAMAGE, BUGDAMAGE, FIGHTINGDAMAGE, DRAGONDAMAGE, POISONDAMAGE, DARKDAMAGE, STEELDAMAGE} local fixdmgs = {PSYCHICDAMAGE, COMBAT_PHYSICALDAMAGE, GRASSDAMAGE, FIREDAMAGE, WATERDAMAGE, ICEDAMAGE, NORMALDAMAGE, GHOSTDAMAGE} local ignored = {POISONEDDAMAGE, BURNEDDAMAGE} local cannotkill = {BURNEDDAMAGE, POISONEDDAMAGE} function onStatsChange(cid, attacker, type, combat, value) if combat == FLYSYSTEMDAMAGE then return false end if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end -- TV if not isCreature(attacker) then if not isInArray(fixdamages, combat) and combats[combat] then doSendAnimatedText(getThingPos(cid), value, combats[combat].cor) end return true end local damageCombat = combat -------------------------------------------------- if type == STATSCHANGE_HEALTHGAIN then if cid == attacker then return true end if isSummon(cid) and isSummon(attacker) and canAttackOther(cid, attacker) == "Cant" then return false end return true end -------------------------------------------------- if isMonster(cid) then local valor = value if not pokes[getCreatureName(cid)] and damageCombat == COMBAT_PHYSICALDAMAGE then valor = getOffense(attacker) * playerDamageReduction doCreatureAddHealth(cid, -math.abs(valor), 3, races[7].cor) return false elseif not pokes[getCreatureName(cid)] and damageCombat ~= COMBAT_PHYSICALDAMAGE then doCreatureAddHealth(cid, -math.abs(valor), 3, combats[damageCombat].cor) return false end end -------------------------------------------------- if isPlayer(attacker) then local valor = value if valor > getCreatureHealth(cid) then valor = getCreatureHealth(cid) end if combat == COMBAT_PHYSICALDAMAGE then return false end if combat == PHYSICALDAMAGE then doSendMagicEffect(getThingPos(cid), 3) doSendAnimatedText(getThingPos(cid), valor, races[getMonsterInfo(getCreatureName(cid)).race].cor) end if combats[damageCombat] and not isInArray(fixdmgs, damageCombat) then doSendAnimatedText(getThingPos(cid), valor, combats[damageCombat].cor) end if #getCreatureSummons(attacker) >= 1 and not isInArray({POISONEDDAMAGE, BURNEDDAMAGE}, combat) then doPlayerSendTextMessage(attacker, MESSAGE_STATUS_DEFAULT, "Your "..getPokeName(getCreatureSummons(attacker)[1]).." dealt "..valor.." damage to "..getSomeoneDescription(cid)..".") end return true end -------------------------------------------------- if isPlayer(cid) and #getCreatureSummons(cid) >= 1 and type == STATSCHANGE_HEALTHLOSS then return false end -------------------------------------------------- if isPlayer(cid) and #getCreatureSummons(cid) <= 0 and type == STATSCHANGE_HEALTHLOSS then if isSummon(attacker) or isPlayer(attacker) then if canAttackOther(cid, attacker) == "Cant" then return false end end local valor = 0 if combat == COMBAT_PHYSICALDAMAGE then valor = getOffense(attacker) else valor = getSpecialAttack(attacker) end valor = valor * playerDamageReduction valor = valor * math.random(83, 117) / 100 if valor >= getCreatureHealth(cid) then valor = getCreatureHealth(cid) end valor = math.floor(valor) if valor >= getCreatureHealth(cid) then if getPlayerStorageValue(cid, 6598754) >= 1 or getPlayerStorageValue(cid, 6598755) >= 1 then setPlayerStorageValue(cid, 6598754, -1) setPlayerStorageValue(cid, 6598755, -1) doSendAnimatedText(getCreaturePosition(cid),"LOOSE",math.random(1,255)) doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE,"Voce agora tem "..(getPlayerStorageValue(cid,19998) + 1).." LOSE SCORES.") setPlayerStorageValue(cid,19998,getPlayerStorageValue(cid,19998)+1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, posBackPVP, false) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) setPlayerStorageValue(getCreatureMaster(attacker),19999,getPlayerStorageValue(getCreatureMaster(attacker),19999)+1) doPlayerSendTextMessage(getCreatureMaster(attacker),MESSAGE_EVENT_ORANGE,"Voce agora tem "..(getPlayerStorageValue(getCreatureMaster(attacker),19999) + 1).." WIN SCORES.") doSendAnimatedText(getCreaturePosition(cid),"WIINN",math.random(1,255)) end if getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then doRemoveCondition(cid, CONDITION_OUTFIT) setPlayerStorageValue(cid, 17000, 0) setPlayerStorageValue(cid, 17001, 0) setPlayerStorageValue(cid, 63215, -1) doChangeSpeed(cid, PlayerSpeed) local item = getPlayerSlotItem(cid, 8) local btype = getPokeballType(item.itemid) if #getCreatureSummons(cid) <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) end end end if getPlayerStorageValue(cid, 22545) == 1 then if getGlobalStorageValue(22550) == 1 then doPlayerSendTextMessage(cid, 20, "You are the last survivor of the golden arena! Take your reward!") doPlayerAddItem(cid, 2152, getPlayerStorageValue(cid, 22551)*2) setPlayerStorageValue(cid, 22545, -1) doTeleportThing(cid, getClosestFreeTile(cid, getClosestFreeTile(cid, posBackGolden)), false) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid)) setPlayerRecordWaves(cid) endGoldenArena() return false --alterado v1.8 else setGlobalStorageValue(22550, getGlobalStorageValue(22550)-1) setPlayerStorageValue(cid, 22545, -1) doTeleportThing(cid, getClosestFreeTile(cid, posBackGolden), false) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid)) setPlayerRecordWaves(cid) return true end end if getPlayerStorageValue(cid, 98796) >= 1 then setPlayerStorageValue(cid, 98796, -1) setPlayerStorageValue(cid, 98797, -1) --alterado v1.8 doTeleportThing(cid, SafariOut, false) doSendMagicEffect(getThingPos(cid), 21) doPlayerSendTextMessage(cid, 27, "You die in the saffari... Best luck in the next time!") return false --alterado v1.8 end local corpse = doCreateItem(3058, 1, getThingPos(cid)) doDecayItem(corpse) doItemSetAttribute(corpse, "pName", getCreatureName(cid)) --alterado v1.7 coloca corpse quando o player morre! doItemSetAttribute(corpse, "attacker", getCreatureName(attacker)) doItemSetAttribute(corpse, "article", getPlayerSex(cid) == 0 and "She" or "He") if getPlayerStorageValue(cid, Agatha.stoIni) >= 1 and getPlayerStorageValue(cid, Agatha.stoIni) <= 10 then setPlayerStorageValue(cid, Agatha.stoIni, -1) setPlayerStorageValue(cid, Agatha.stoRec, -1) setPlayerStorageValue(cid, Agatha.stoPer, -1) setPlayerStorageValue(cid, Agatha.stoEni, -1) --alterado v1.9 agatha quest setPlayerStorageValue(cid, Agatha.stoRes, -1) end end doCreatureAddHealth(cid, -valor, 3, 180) if not isPlayer(cid) then addEvent(sendPlayerDmgMsg, 5, cid, "You lost "..valor.." hitpoints due to an attack from "..getSomeoneDescription(attacker)..".") end return false end -------------------------------------------------- if isMonster(attacker) and getPlayerStorageValue(attacker, 201) ~= -1 then if isPlayer(cid) then return false end if getPlayerStorageValue(getCreatureMaster(cid), ginasios[getPlayerStorageValue(attacker, 201)].storage) ~= 1 then return false end end -------------------------------------------------- if isMonster(cid) and getPlayerStorageValue(cid, 201) ~= -1 then if getPlayerStorageValue(getCreatureMaster(attacker), ginasios[getPlayerStorageValue(cid, 201)].storage) ~= 1 then return false end end -------------------------------------------------- if not isSummon(cid) and not isSummon(attacker) then return false end -------------------------------------------------- --------------------REFLECT----------------------- if getPlayerStorageValue(cid, 21099) >= 1 and combat ~= COMBAT_PHYSICALDAMAGE then if not isInArray({"Team Claw", "Team Slice"}, getPlayerStorageValue(attacker, 21102)) then doSendMagicEffect(getThingPosWithDebug(cid), 135) doSendAnimatedText(getThingPosWithDebug(cid), "REFLECT", COLOR_GRASS) addEvent(docastspell, 100, cid, getPlayerStorageValue(attacker, 21102)) if getCreatureName(cid) == "Wobbuffet" then doRemoveCondition(cid, CONDITION_OUTFIT) end setPlayerStorageValue(cid, 21099, -1) setPlayerStorageValue(cid, 21100, 1) setPlayerStorageValue(cid, 21101, attacker) setPlayerStorageValue(cid, 21103, getTableMove(attacker, getPlayerStorageValue(attacker, 21102)).f) setPlayerStorageValue(cid, 21104, getCreatureOutfit(attacker).lookType) return false end end ------------------------------------------------- local multiplier = 1 if isCreature(cid) then poketype1 = pokes[getCreatureName(cid)].type poketype2 = pokes[getCreatureName(cid)].type2 end if not poketype1 or not poketype2 then return false end if getCreatureCondition(cid, CONDITION_INVISIBLE) then return false end if damageCombat ~= COMBAT_PHYSICALDAMAGE and not isInArray(ignored, damageCombat) then if isInArray(effectiveness[damageCombat].super, poketype1) then multiplier = multiplier + 0.5 end if isInArray(effectiveness[damageCombat].super, poketype2) then multiplier = multiplier + 0.5 end if isInArray(effectiveness[damageCombat].weak, poketype1) then multiplier = multiplier - 0.25 end if isInArray(effectiveness[damageCombat].weak, poketype2) then multiplier = multiplier - 0.25 end if isInArray(effectiveness[damageCombat].non, poketype1) or isInArray(effectiveness[damageCombat].non, poketype2) then if isInArray(specialabilities["foresight"], getCreatureName(attacker)) then multiplier = 0.5 end --alterado v1.6 end elseif combat == COMBAT_PHYSICALDAMAGE then if isGhostPokemon(cid) then if not isInArray(specialabilities["foresight"], getCreatureName(attacker)) then --passiva Foresight!! doSendMagicEffect(getThingPos(cid), 3) return false end end local cd = getPlayerStorageValue(attacker, conds["Miss"]) local cd2 = getPlayerStorageValue(attacker, conds["Confusion"]) local cd3 = getPlayerStorageValue(attacker, conds["Stun"]) if cd >= 0 or cd2 >= 0 or cd3 >= 0 then if math.random(1, 100) > 50 then doSendMagicEffect(getThingPos(cid), 211) doSendAnimatedText(getThingPos(attacker), "MISS", 215) return false end end end -------------------------------------------------- local valor = value if multiplier == 1.5 and poketype2 == "no type" then multiplier = 2 elseif multiplier == 1.5 and poketype2 ~= "no type" then multiplier = 1.75 elseif multiplier == 1.25 then multiplier = 1 end -------------------------------------------------- if isSummon(cid) and isSummon(attacker) then if getCreatureMaster(cid) == getCreatureMaster(attacker) then return false end if canAttackOther(cid, attacker) == "Cant" then return false end end valor = valor * multiplier if isSummon(attacker) then valor = valor * getHappinessRate(attacker) else valor = valor * summonReduction end valor = math.floor(valor) if combat == COMBAT_PHYSICALDAMAGE then local value = getOffense(attacker) > 1000 and 3 or 2 block = 1 - (getDefense(cid) / (getOffense(attacker) + getDefense(cid))) --alterado v1.9 testem essa nova formula plzzz '--' valor = (getOffense(attacker)/value) * block if valor <= 0 then valor = math.random(5, 10) --alterado v1.9 end if isInArray(specialabilities["counter"], getCreatureName(cid)) then if math.random(1, 100) <= 10 then doCreatureAddHealth(attacker, -valor, 3, 180) valor = 0 doSendAnimatedText(getThingPosWithDebug(cid), "COUNTER", 215) end end else valor = valor / getDefense(cid) end -------------------------Edited CLAN SYSTEM----------------------------------- if isSummon(attacker) and getPlayerStorageValue(getCreatureMaster(attacker), 86228) >= 1 then valor = valor*getClanPorcent(getCreatureMaster(attacker), combat, "atk") elseif isSummon(cid) and getPlayerStorageValue(getCreatureMaster(cid), 86228) >= 1 then valor = valor - (valor*getClanPorcent(getCreatureMaster(cid), combat, "def", pokes[getCreatureName(cid)].type, pokes[getCreatureName(cid)].type2)) end ----------------------------------------------------------------------- ---------------------- FEAR / ROAR ------------------------------------ if getPlayerStorageValue(attacker, conds["Fear"]) >= 1 then return true end -------------------------------------------------------------------------- if damageCombat ~= COMBAT_PHYSICALDAMAGE and not isInArray(ignored, damageCombat) then if isInArray(effectiveness[damageCombat].non, poketype1) or isInArray(effectiveness[damageCombat].non, poketype2) then if not isInArray(specialabilities["foresight"], getCreatureName(attacker)) then valor = valor * 0 end end end if damageCombat == GROUNDDAMAGE then if isInArray(specialabilities["levitate"], getCreatureName(cid)) then valor = 0 end end ----------------------------------------------------------------------------- local p = getThingPos(cid) if p.x == 1 and p.y == 1 and p.z == 10 then return false end if getPlayerStorageValue(cid, 9658783) == 1 then return false --imune end ----------------------------------------------------------------------------- --------------- FIGHT MODE ----------------------- if useOTClient then if isSummon(cid) then local master = getCreatureMaster(cid) if getPlayerStorageValue(master, 248759) == 1 then valor = valor * 1.1 elseif getPlayerStorageValue(master, 248759) == 3 then valor = valor * 0.9 end end if isSummon(attacker) then local master = getCreatureMaster(attacker) if getPlayerStorageValue(master, 248759) == 1 then valor = valor * 1.1 elseif getPlayerStorageValue(master, 248759) == 3 then valor = valor * 0.9 end end end ----------------------------------------------------------------------------- if valor >= getCreatureHealth(cid) then if isInArray(cannotKill, combat) and isPlayer(cid) then valor = getCreatureHealth(cid) - 1 else valor = getCreatureHealth(cid) end end valor = math.floor(valor) ------------------ SKILLs Q CURAM O ATTACKER --------------------------------- local function doHeal(cid, amount) if (getCreatureHealth(cid) + amount) >= getCreatureMaxHealth(cid) then amount = math.abs(getCreatureHealth(cid)-getCreatureMaxHealth(cid)) end if getCreatureHealth(cid) ~= getCreatureMaxHealth(cid) then doCreatureAddHealth(cid, amount) doSendAnimatedText(getThingPosWithDebug(cid), "+"..amount.."", 65) end end if damageCombat == PSYCHICDAMAGE or damageCombat == MIRACLEDAMAGE then if getPlayerStorageValue(attacker, 95487) >= 1 then doHeal(attacker, valor) setPlayerStorageValue(attacker, 95487, -1) end elseif damageCombat == SEED_BOMBDAMAGE then doHeal(attacker, valor) end -------------------------------------------- ----------SACRED FIRE----------------------- if combat == SACREDDAMAGE and not ehNPC(cid) then local ret = {} ret.id = cid ret.cd = 9 ret.check = getPlayerStorageValue(cid, conds["Silence"]) ret.eff = 39 ret.cond = "Silence" doCondition2(ret) elseif combat == MUDBOMBDAMAGE and not ehNPC(cid) then local ret = {} ret.id = cid ret.cd = 9 ret.eff = 34 ret.check = getPlayerStorageValue(cid, conds["Miss"]) ret.spell = "Mud Bomb" --alterado v1.9 ret.cond = "Miss" doCondition2(ret) end --------------------------------------------- --------------Passiva Lifesteal Clobat------------ if combat == COMBAT_PHYSICALDAMAGE then if getCreatureName(attacker) == "Crobat" then doCreatureAddHealth(attacker, math.floor(valor)) doSendAnimatedText(getThingPos(attacker), "+ "..math.floor(valor), 30) end end -------------------------------------------- valor = math.abs(valor) --alterado v1.9 if isSummon(attacker) then if combat == COMBAT_PHYSICALDAMAGE then doTargetCombatHealth(getCreatureMaster(attacker), cid, PHYSICALDAMAGE, -valor, -valor, 255) addEvent(doDoubleHit, 1000, attacker, cid, valor, races) else doTargetCombatHealth(getCreatureMaster(attacker), cid, damageCombat, -valor, -valor, 255) end else if combat ~= COMBAT_PHYSICALDAMAGE then doCreatureAddHealth(cid, -valor, 3, combats[damageCombat].cor) else doCreatureAddHealth(cid, -valor, 3, races[getMonsterInfo(getCreatureName(cid)).race].cor) addEvent(doDoubleHit, 1000, attacker, cid, valor, races) end if isSummon(cid) and valor ~= 0 then addEvent(sendPlayerDmgMsg, 5, getCreatureMaster(cid), "Your "..getCreatureName(cid).." lost "..valor.." hitpoints due to an attack from "..getSomeoneDescription(attacker)..".") end end if damageCombat == FIREDAMAGE and not isBurning(cid) then local ret = {} ret.id = cid ret.cd = math.random(5, 12) ret.check = getPlayerStorageValue(cid, conds["Burn"]) ret.damage = isSummon(attacker) and getMasterLevel(attacker)+getPokemonBoost(attacker) or getPokemonLevel(attacker) ret.cond = "Burn" doCondition2(ret) elseif damageCombat == POISONDAMAGE and not isPoisoned(cid) then local ret = {} ret.id = cid ret.cd = math.random(6, 15) ret.check = getPlayerStorageValue(cid, conds["Poison"]) local lvl = isSummon(attacker) and getMasterLevel(attacker) or getPokemonLevel(attacker) ret.damage = math.floor((getPokemonLevel(attacker)+lvl)/2) ret.cond = "Poison" doCondition2(ret) end --[[---------------CD BAR----------------------- if isSummon(cid) then doCreatureExecuteTalkAction(getCreatureMaster(cid), "/pokeread") end ]] ------------------------------------POTIONS------------------------------------------- if isSummon(cid) and type == STATSCHANGE_HEALTHLOSS then if getPlayerStorageValue(cid, 173) >= 1 then if damageCombat ~= BURNEDDAMAGE and damageCombat ~= POISONEDDAMAGE then setPlayerStorageValue(cid, 173, -1) doSendAnimatedText(getThingPos(cid), "Lost Heal", 144) end end end ----------------------------------------PASSIVAS------------------------------------- -------------------------------------------Counter Helix------------------------------------ if passivesChances["Helix"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Helix"][getCreatureName(cid)] then docastspell(cid, "Counter Helix") end -------------------------------------------Lava Counter/Electricity---------------------------- if passivesChances["Fire_Thunder"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Fire_Thunder"][getCreatureName(cid)] then docastspell(cid, "Lava-Electricity") end ---------------------------------------Stunning Confusion----------------------------------------- if passivesChances["Stunning"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Stunning"][getCreatureName(cid)] then docastspell(cid, "Stunning Confusion") end -----------------------------------------Groundshock----------------------------------- if passivesChances["Groundshock"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Groundshock"][getCreatureName(cid)] then docastspell(cid, "Groundshock") end --------------------------------------Electric Charge--------------------------------------------- if passivesChances["Electric Charge"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Electric Charge"][getCreatureName(cid)] then docastspell(cid, "Electric Charge", 0, 0) end -------------------------------------Melody------------------------------------ if passivesChances["Melody"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Melody"][getCreatureName(cid)] then docastspell(cid, "Melody") end ------------------------------------- Dragon Fury / Fury --------------------------------------- if passivesChances["Dragon Fury"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Dragon Fury"][getCreatureName(cid)] then docastspell(cid, "Dragon Fury", 0, 0) end ------------------------------------- Mega Drain --------------------------------------- if passivesChances["Mega Drain"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Mega Drain"][getCreatureName(cid)] then docastspell(cid, "Mega Drain") end ------------------------------------- Spores Reaction --------------------------------------- if passivesChances["Spores Reaction"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Spores Reaction"][getCreatureName(cid)] then docastspell(cid, "Spores Reaction") end ------------------------------------ Amnesia ---------------------------------------- if passivesChances["Amnesia"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Amnesia"][getCreatureName(cid)] then docastspell(cid, "Amnesia", 0, 0) end ----------------------------------- Zen Mind ----------------------------------------- if passivesChances["Zen Mind"][getCreatureName(cid)] and isWithCondition(cid) and math.random(1, 100) <= passivesChances["Zen Mind"][getCreatureName(cid)] then docastspell(cid, "Zen Mind", 0, 0) end ---------------------------------- Mirror Coat --------------------------------------- if passivesChances["Mirror Coat"][getCreatureName(cid)] and math.random(1, 100) <= passivesChances["Mirror Coat"][getCreatureName(cid)] then docastspell(cid, "Mirror Coat", 0, 0) end --------------------------------- Illusion ----------------------------------------- return false end function getVitalityByMaster(cid) if not isCreature(cid) then return 0 end local ball = getPlayerSlotItem(cid, 8).uid if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end return pokes[getItemAttribute(ball, 'poke')].vitality * (getPlayerLevel(cid) + (getItemAttribute(ball, 'boost') or 0)) end function onPokeHealthChange(cid, zerar) if not isCreature(cid) then return true end if zerar then doPlayerSendCancel(cid, '#ph#,0,0') end local ball = getPlayerSlotItem(cid, 8).uid if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end if #getCreatureSummons(cid) >= 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 local pokemon = getCreatureSummons(cid)[1] local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon)) doItemSetAttribute(ball, "hp", pokelife) end local rd = 1 - (tonumber(getItemAttribute(ball, "hp"))) local maxHp = HPperVITsummon * getVitalityByMaster(cid) local hp = maxHp -(maxHp * rd) doPlayerSendCancel(cid, '#ph#,'.. math.floor(hp) ..','.. math.floor(maxHp)) end function doOTCSendPokemonHealth(cid) local ball = getPlayerSlotItem(cid, CONST_SLOT_FEET) local pokemon = getCreatureSummons(cid) if not ball.uid or ball.uid <= 1 then return doSendPlayerExtendedOpcode(cid, 122, "0|0") end if #pokemon >= 1 then return doSendPlayerExtendedOpcode(cid, 122, getCreatureHealth(pokemon[1]).."|"..getCreatureMaxHealth(pokemon[1])) end end function addPokeToPlayer(cid, pokemon, boost, gender, ball, unique) --alterado v1.9 \/ peguem ele todo... local genders = { ["male"] = 4, ["female"] = 3, [1] = 4, [0] = 3, [4] = 4, [3] = 3, } if not isCreature(cid) then return false end local pokemon = doCorrectString(pokemon) if not pokes[pokemon] then return false end local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon) local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal" local happy = 250 local ballid = 11826 if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then item = doCreateItemEx(ballid-1) else item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) end if not item then return false end doItemSetAttribute(item, "poke", pokemon) doItemSetAttribute(item, "hp", 1) doItemSetAttribute(item, "happy", happy) doItemSetAttribute(item, "gender", GENDER) doSetItemAttribute(item, "hands", 0) doItemSetAttribute(item, "description", "Contains a "..pokemon..".") doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") doItemSetAttribute(item, "tadport", fotos[pokemon]) if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then doItemSetAttribute(item, "boost", boost) end if unique then doItemSetAttribute(item, "unique", getCreatureName(cid)) end if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then doPlayerSendMailByName(getCreatureName(cid), item, 1) sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.") end if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then doTransformItem(item, pokeballs["shiny"..btype].on) else doTransformItem(item, pokeballs[btype].on) end return true end --------------------------- function unLock(ball) if not ball or ball <= 0 then return false end if getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then local vipTime = getItemAttribute(ball, "lock") local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) if days <= 0 then doItemEraseAttribute(ball, "lock") doItemEraseAttribute(ball, "unique") return true end end return false end function getGuildMembersOnline(GuildId) local players = {} for _, pid in pairs(getPlayersOnline()) do if getPlayerGuildId(pid) == tonumber(GuildId) then table.insert(players, pid) end end --by Vodkart return #players > 0 and players or false end function getGuildMembers(GuildId) local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");") if (query:getID() ~= -1) then repeat table.insert(players,query:getDataString("name")) until not query:next() --by Vodkart query:free() end return #players > 0 and players or false end --/////////////////////////////////////////////////////////////////////////////////--- function sendMsgToPlayer(cid, tpw, msg) --alterado v1.7 \/\/\/ if not isCreature(cid) or not tpw or not msg then return true end return doPlayerSendTextMessage(cid, tpw, msg) end function getPlayerDesc(cid, thing, TV) if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" end local pos = getThingPos(thing) local ocup = youAre[getPlayerGroupId(thing)] local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)] local name = thing == cid and "yourself" or getCreatureName(thing) local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is") local str = {} table.insert(str, "You see "..name..". "..art.." ") if youAre[getPlayerGroupId(thing)] then table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".") else table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".") end if getPlayerGuildId(thing) > 0 then table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".") end if TV then table.insert(str, " "..art.." watching TV.") end table.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or "")) return table.concat(str) end ------------------------------------------------------------------------------------------------- /\/\ function getLivePokeballs(cid, container, duel) if not isCreature(cid) then return {} end if not isContainer(container) then return {} end local items = {} --- local ballSlot = getPlayerSlotItem(cid, 8) if ballSlot.uid ~= 0 then for a, b in pairs (pokeballs) do if ballSlot.itemid == b.on or ballSlot.itemid == b.use then if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then table.insert(items, ballSlot.uid) --alterado v1.8 elseif not duel then table.insert(items, ballSlot.uid) end end end end --- if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getPokeballsInContainer(item.uid) for i=0, #itemsbag do if not isInArray(items, itemsbag[i]) then table.insert(items, itemsbag[i]) end end elseif isPokeball(item.itemid) then for a, b in pairs (pokeballs) do if item.itemid == b.on then if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then table.insert(items, item.uid) --alterado v1.8 elseif not duel then table.insert(items, item.uid) end end end end end end return items end function addItemInFreeBag(container, item, num) if not isContainer(container) or not item then return false end if not num or num <= 0 then num = 1 end --alterado v1.6.1 if getContainerSize(container) < getContainerCap(container) then return doAddContainerItem(container, item, num) else for slot = 0, (getContainerSize(container)-1) do local container2 = getContainerItem(container, slot) if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then return doAddContainerItem(container2.uid, item, num) end end end return false end ------------------------------------------------------------------------------------------------------ function pokeHaveReflect(cid) if not isCreature(cid) then return false end local table = getTableMove(cid, "Reflect") if table and table.name then --alterado v1.6 return true end return false end ------------------------------------------------------------------------------------------------------ function nextHorario(cid) horarioAtual = os.date("%X") horario = string.explode(horarioAtual, ":") for i = 1, #horas do horarioComparacao = horas[i] horarioComp = string.explode(horarioComparacao, ":") --------------- if tonumber(horarioComp[1]) > tonumber(horario[1]) then return horarioComparacao elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then return horarioComparacao end end return horas[1] end function getTimeDiff(timeDiff) local dateFormat = { {'hour', timeDiff / 60 / 60}, --6% {'min', timeDiff / 60 % 60}, } local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > -1) then table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) end end if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then return "seconds" end return table.concat(out) end function getTimeDiff2(timeDiff) local dateFormat = { {'hour', timeDiff / 60 / 60}, --6% {'min', timeDiff / 60 % 60}, {'sec', timeDiff % 60}, } local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) end end return table.concat(out) end function showTimeDiff(timeComp) local b = string.explode(os.date("%X"), ":") local c = string.explode(timeComp, ":") --- local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y") local hAtual, mAtual = tonumber(b[1]), tonumber(b[2]) local hComp, mComp = tonumber(c[1]), tonumber(c[2]) --- local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual} local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp} --- comparacao = t1-t if hComp < hAtual then v = os.time{year= y, month= m, day= d, hour= 24, min= 0} v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0} comparacao = (v-t)+(t1-v2) end return getTimeDiff(comparacao) end ------------------------------------------------------------------------- function cleanCMcds(item) if item ~= 0 then for c = 1, 15 do --alterado v1.5 local str = "cm_move"..c setCD(item, str, 0) end end end function ehNPC(cid) --alterado v1.9 return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid) end function ehMonstro(cid) --alterado v1.9 return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS 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) == "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 end function doDisapear(cid) --Faz um pokemon ficar invisivel if not isCreature(cid) then return true end doCreatureAddCondition(cid, permanentinvisible) doCreatureSetHideHealth(cid, true) doSetCreatureOutfit(cid, {lookType = 2}, -1) end function hasTile(pos) --Verifica se tem TILE na pos pos.stackpos = 0 if getTileThingByPos(pos).itemid >= 1 then return true end return false end function getThingFromPosWithProtect(pos) --Pega uma creatura numa posiçao com proteçoes if hasTile(pos) then if isCreature(getRecorderCreature(pos)) then return getRecorderCreature(pos) else pos.stackpos = 253 pid = getThingfromPos(pos).uid end else pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uid end return pid end function getTileThingWithProtect(pos) --Pega um TILE com proteçoes if hasTile(pos) then pos.stackpos = 0 pid = getTileThingByPos(pos) else pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0}) end return pid end function canAttackOther(cid, pid) --Function q verifica se um poke/player pode atacar outro poke/player if not isCreature(cid) or not isCreature(pid) then return "Cant" end local master1 = isSummon(cid) and getCreatureMaster(cid) or cid local master2 = isSummon(pid) and getCreatureMaster(pid) or pid ---- if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then if isDuelingAgainst(master1, master2) then --alterado v1.8 if isSummon(cid) and isPlayer(pid) then return "Cant" else return "Can" end end end end ---- pvp system if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then return "Can" end if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then ---estar em times diferentes return "Can" end ---- if ehMonstro(cid) or ehMonstro(pid) then return "Can" end if getTileInfo(getThingPos(cid)).pvp then return "Can" end return "Cant" end function stopNow(cid, time) --function q faz o poke/player ficar imovel por um tempo if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end local function podeMover(cid) --alterado v1.9 \/ if isCreature(cid) then mayNotMove(cid, false) end end mayNotMove(cid, true) addEvent(podeMover, time, cid) end function doReduceStatus(cid, off, def, agi) --reduz os status if not isCreature(cid) then return true end local A = getOffense(cid) local B = getDefense(cid) local C = getSpeed(cid) if off > 0 then setPlayerStorageValue(cid, 1001, A - off) end if def > 0 then setPlayerStorageValue(cid, 1002, B - def) end if agi > 0 then setPlayerStorageValue(cid, 1003, C - agi) if getCreatureSpeed(cid) ~= 0 then doRegainSpeed(cid) end --alterado v1.5 functions arrumadas... end end function doRaiseStatus(cid, off, def, agi, time) if not isCreature(cid) then return true end local A = getOffense(cid) local B = getDefense(cid) local C = getSpeed(cid) if off > 0 then setPlayerStorageValue(cid, 1001, A * off) end if def > 0 then setPlayerStorageValue(cid, 1002, B * def) end if agi > 0 then setPlayerStorageValue(cid, 1003, C + agi) if getCreatureSpeed(cid) ~= 0 then doRegainSpeed(cid) end end local D = getOffense(cid) local E = getDefense(cid) local F = getSpeed(cid) --------------------------- local G = D - A local H = E - B local I = F - C addEvent(doReduceStatus, time*1000, cid, G, H, I) end function BackTeam(cid) if isCreature(cid) then local summon = getCreatureSummons(cid) --alterado v1.6 for i = 2, #summon do doSendMagicEffect(getThingPos(summon[i]), 211) doRemoveCreature(summon[i]) end setPlayerStorageValue(cid, 637501, -1) end end function choose(...) -- by mock local arg = {...} return arg[math.random(1,#arg)] end function AddPremium(cid, days) local function removerPlayer(cid) if isCreature(cid) then doRemoveCreature(cid) end end db.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";") doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.") addEvent(removerPlayer, 5*1000, cid) return TRUE end function isShiny(cid) return isCreature(cid) and string.find(getCreatureName(cid), "Shiny") --alterado v1.9 end function isShinyName(name) return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9 end function 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"}, ["shiny"] = {shiny, "shiny"}, ["boost"] = {boostStone, "boost"}, --alterado v1.9 } if string then return t[type][2] else return t[type][1] end end function doConvertStoneIdToString(stoneID) local t = { [11453] = "Heart Stone", [11441] = "Leaf Stone", [11442] = "Water Stone", [11443] = "Venom Stone", [11444] = "Thunder Stone", [11445] = "Rock Stone", [11446] = "Punch Stone", [11447] = "Fire Stone", --alterado v1.6 [11448] = "Cocoon Stone", [11449] = "Crystal Stone", [11450] = "Darkess Stone", [11451] = "Earth Stone", [11452] = "Enigma Stone", [11454] = "Shiny 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 Shiny Stone", [12409] = "Shiny Thunder Stone", [12410] = "Shiny Crystal Stone", [12411] = "Shiny Cocoon Stone", [12412] = "Shiny Darkness Stone", [12413] = "Shiny Punch Stone", [12414] = "Shiny Earth Stone", [boostStone] = "Boost Stone", --alterado v1.9 } if t[stoneID] then return t[stoneID] else return "" end end function isStone(id) if id >= leaf and id <= shiny then return true end if id == boostStone then --alterado v1.9 return true end if id == 12232 or id == 12242 or id == 12244 or id == 12245 then return true end if (id >= sfire and id <= searth) or id == 12417 or id == 12419 then return true end return false end function isWater(id) return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9 end function getTopCorpse(position) local pos = position for n = 1, 255 do pos.stackpos = n local item = getTileThingByPos(pos) if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then return getTileThingByPos(pos) end end return null end bpslot = CONST_SLOT_BACKPACK function hasPokemon(cid) if not isCreature(cid) then return false end if getCreatureMana(cid) <= 0 then return false end if #getCreatureSummons(cid) >= 1 then return true end local item = getPlayerSlotItem(cid, CONST_SLOT_FEET) local bp = getPlayerSlotItem(cid, bpslot) for a, b in pairs (pokeballs) do if item.itemid == b.on or item.itemid == b.use then return true --alterado v1.4 end if #getItemsInContainerById(bp.uid, b.on) >= 1 then return true end end return false end function isNpcSummon(cid) return isNpc(getCreatureMaster(cid)) end function getPokemonHappinessDescription(cid) if not isCreature(cid) then return true end local str = {} if getPokemonGender(cid) == SEX_MALE then table.insert(str, "He") elseif getPokemonGender(cid) == SEX_FEMALE then table.insert(str, "She") else table.insert(str, "It") end local h = getPlayerStorageValue(cid, 1008) if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then table.insert(str, " is very happy with you!") elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then table.insert(str, " is happy.") elseif h >= tonumber(getConfigValue('PokemonStageOK')) then table.insert(str, " is unhappy.") elseif h >= tonumber(getConfigValue('PokemonStageSad')) then table.insert(str, " is sad.") elseif h >= tonumber(getConfigValue('PokemonStageMad')) then table.insert(str, " is mad.") else table.insert(str, " is very mad at you!") end return table.concat(str) end function doSetItemAttribute(item, key, value) doItemSetAttribute(item, key, value) end function deTransform(cid, check) if not isCreature(cid) then return true end local m = getCreatureMaster(cid) local p = getPlayerSlotItem(m, 8) if getItemAttribute(p.uid, "transTurn") ~= check then return true end setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto") --edited doRemoveCondition(cid, CONDITION_OUTFIT) doSendMagicEffect(getThingPos(cid), 184) doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER) doItemSetAttribute(p.uid, "transBegin", 0) doItemSetAttribute(p.uid, "transLeft", 0) doItemEraseAttribute(p.uid, "transName") adjustStatus(cid, p.uid, true, true, true) end function isTransformed(cid) return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010)) --alterado v1.9 end function doSendFlareEffect(pos) local random = {28, 29, 79} doSendMagicEffect(pos, random[math.random(1, 3)]) end function isDay() local a = getWorldTime() if a >= 360 and a < 1080 then return true end return false end function doPlayerSendTextWindow(cid, p1, p2) if not isCreature(cid) then return true end local item = 460 local text = "" if type(p1) == "string" then doShowTextDialog(cid, item, p1) else doShowTextDialog(cid, p1, p2) end end function getClockString(tw) local a = getWorldTime() local b = a / 60 local hours = math.floor(b) local minut = a - (60 * hours) if not tw then if hours < 10 then hours = "0"..hours.."" end if minut < 10 then minut = "0"..minut.."" end return hours..":"..minut else local sm = "a.m" if hours >= 12 then hours = hours - 12 sm = "p.m" end if hours < 10 then hours = "0"..hours.."" end if minut < 10 then minut = "0"..minut.."" end return hours..":"..minut.." "..sm end end function doCorrectPokemonName(poke) return doCorrectString(poke) end function doCorrectString(str) local name = str:explode(" ") --alterado v1.9 local final = {} for _, s in ipairs(name) do table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower()) end return table.concat(final, (name[2] and " " or "")) end function getHappinessRate(cid) if not isCreature(cid) then return 1 end local a = getPlayerStorageValue(cid, 1008) if a == -1 then return 1 end if a >= getConfigValue('PokemonStageVeryHappy') then return happinessRate[5].rate elseif a >= getConfigValue('PokemonStageHappy') then return happinessRate[4].rate elseif a >= getConfigValue('PokemonStageOK') then return happinessRate[3].rate elseif a >= getConfigValue('PokemonStageSad') then return happinessRate[2].rate else return happinessRate[1].rate end return 1 end function doBodyPush(cid, target, go, pos) if not isCreature(cid) or not isCreature(target) then doRegainSpeed(cid) doRegainSpeed(target) return true end if go then local a = getThingPos(cid) doChangeSpeed(cid, -getCreatureSpeed(cid)) if not isPlayer(target) then doChangeSpeed(target, -getCreatureSpeed(target)) end doChangeSpeed(cid, 800) doTeleportThing(cid, getThingPos(target)) doChangeSpeed(cid, -800) addEvent(doBodyPush, 350, cid, target, false, a) else doChangeSpeed(cid, 800) doTeleportThing(cid, pos) doRegainSpeed(cid) doRegainSpeed(target) end end function doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo) --////////////////////////////////////////////////////////////////////////////////////////-- checkDuel(cid) --alterado v1.6 duel system --////////////////////////////////////////////////////////////////////////////////////////-- if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!") --alterado v1.8 end --////////////////////////////////////////////////////////////////////////////////////////-- if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) end end ----------------- local edit = true if not pokeball then pokeball = getPlayerSlotItem(cid, 8) end if blockevo then edit = false doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.") end local happy = getPlayerStorageValue(pokemon, 1008) local hunger = getPlayerStorageValue(pokemon, 1009) local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon)) if edit then doItemSetAttribute(pokeball.uid, "happy", happy) doItemSetAttribute(pokeball.uid, "hunger", hunger) doItemSetAttribute(pokeball.uid, "hp", pokelife) end if getCreatureName(pokemon) == "Ditto" then if isTransformed(pokemon) then local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin")) doItemSetAttribute(pokeball.uid, "transLeft", left) end end if hideeffects then doRemoveCreature(pokemon) return true end local pokename = getPokeName(pokemon) local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename) if getCreatureCondition(cid, CONDITION_INFIGHT) then if isCreature(getCreatureTarget(cid)) then doItemSetAttribute(pokeball.uid, "happy", happy - 5) else doItemSetAttribute(pokeball.uid, "happy", happy - 2) end end doTransformItem(pokeball.uid, pokeball.itemid-1) doCreatureSay(cid, mbk, TALKTYPE_MONSTER) doSendMagicEffect(getCreaturePosition(pokemon), effect) doRemoveCreature(pokemon) unLock(pokeball.uid) --alterado v1.8 if useOTClient then doPlayerSendCancel(cid, '12//,hide') --alterado v1.7 end if useKpdoDlls then doUpdateMoves(cid) end end local EFFECTS = { --[OutfitID] = {Effect} ["Magmar"] = 35, --alterado v1.5 ["Jynx"] = 17, ["Shiny Jynx"] = 17, ["Piloswine"] = 205, --alterado v1.8 ["Swinub"] = 205, } function doGoPokemon(cid, item) if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then return true end --------------------------------------------------------------- local ballName = getItemAttribute(item.uid, "poke") btype = getPokeballType(item.itemid) local effect = pokeballs[btype].effect if not effect then effect = 21 end ----------------------------------------------------------------- if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then doPlayerSendCancel(cid, "You must put your pokeball in the correct place!") return TRUE end local thishp = getItemAttribute(item.uid, "hp") if thishp <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local pokemon = getItemAttribute(item.uid, "poke") if not pokes[pokemon] then return true end ----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto --------------------------------- if not isInArray({5, 6}, getPlayerGroupId(cid)) then local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid) --alterado v1.9 \/ local low = {} local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"} if #balls >= 1 then for _, uid in ipairs(balls) do local nome = getItemAttribute(uid, "poke") if not isInArray(lowPokes, pokemon) and nome == pokemon then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!") else if nome == pokemon then table.insert(low, nome) end end end end if #low >= 3 then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!") end end --------------------------------------------------------------------------------------------------------------------------------------------------- local x = pokes[pokemon] local boosts = getItemAttribute(item.uid, "boost") or 0 if getPlayerLevel(cid) < (x.level + boosts) then --alterado v1.8 \/ doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.") return true end -------------------------------------------------------------------------------------- shinysClan = { ["Shiny Fearow"] = {4, "Wingeon"}, ["Shiny Flareon"] = {1, "Volcanic"}, ["Shiny Vaporeon"] = {2, "Seavel"}, ["Shiny Jolteon"] = {9, "Raibolt"}, ["Shiny Hypno"] = {7, "Psycraft"}, ["Shiny Golem"] = {3, "Orebound"}, ["Shiny Vileplume"] = {8, "Naturia"}, ["Shiny Nidoking"] = {5, "Malefic"}, ["Shiny Hitmontop"] = {6, "Gardestrike"}, } if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9 if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!") return true elseif getPlayerStorageValue(cid, 862281) ~= 5 then doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!") return true end end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then --alterado v1.8 \/ if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then if not getItemAttribute(item.uid, "hands") then doSetItemAttribute(item.uid, "hands", 0) end local hands = getItemAttribute(item.uid, "hands") doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1) end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) end -------------------------------------------------------------------------- if getCreatureName(pk) == "Ditto" then local left = getItemAttribute(item.uid, "transLeft") local name = getItemAttribute(item.uid, "transName") if left and left > 0 then setPlayerStorageValue(pk, 1010, name) doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn")) doItemSetAttribute(item.uid, "transBegin", os.clock()) else setPlayerStorageValue(pk, 1010, "Ditto") end end if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end doCreatureSetLookDir(pk, 2) adjustStatus(pk, item.uid, true, true, true) doAddPokemonInOwnList(cid, pokemon) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v1.7 local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename) doCreatureSay(cid, mgo, TALKTYPE_MONSTER) doSendMagicEffect(getCreaturePosition(pk), effect) unLock(item.uid) --alterado v1.8 if useKpdoDlls then doUpdateMoves(cid) end end function doRegainSpeed(cid) --alterado v1.9 \/ if not isCreature(cid) then return true end local speed = PlayerSpeed if isMonster(cid) then speed = getSpeed(cid) elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then speed = 200*getPlayerGroupId(cid) end doChangeSpeed(cid, -getCreatureSpeed(cid)) if getCreatureCondition(cid, CONDITION_PARALYZE) == true then doRemoveCondition(cid, CONDITION_PARALYZE) addEvent(doAddCondition, 10, cid, paralizeArea2) end doChangeSpeed(cid, speed) return speed end function isPosEqualPos(pos1, pos2, checkstackpos) if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then return false end if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then return false end return true end function getRandomGenderByName(name) local rate = newpokedex[name] if not rate then return 0 end rate = rate.gender if rate == 0 then gender = 3 elseif rate == 1000 then gender = 4 elseif rate == -1 then gender = 0 elseif math.random(1, 1000) <= rate then gender = 4 else gender = 3 end return gender end function getRecorderPlayer(pos, cid) local ret = 0 if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z for a = 0, 255 do s.stackpos = a local b = getTileThingByPos(s).uid if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then ret = b end end return ret end function getRecorderCreature(pos, cid) local ret = 0 if cid and isPosEqual(getThingPos(cid), pos) then --alterado v1.9 return cid end local s = {} s.x = pos.x s.y = pos.y s.z = pos.z for a = 0, 255 do s.stackpos = a local b = getTileThingByPos(s).uid if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then ret = b end end return ret end function doCreatureSetOutfit(cid, outfit, time) doSetCreatureOutfit(cid, outfit, time) end function doMagicalFlower(cid, away) if not isCreature(cid) then return true end for x = -3, 3 do for y = -3, 3 do local a = getThingPos(cid) a.x = a.x + x a.y = a.y + y if away then doSendDistanceShoot(a, getThingPos(cid), 21) else doSendDistanceShoot(getThingPos(cid), a, 21) end end end end function isItemPokeball(item) --alterado v1.9 \/ if not item then return false end for a, b in pairs (pokeballs) do if isInArray(b.all, item) then return true end end return false end function isPokeball(item) return isItemPokeball(item) end --/\ function getPokeballType(id) for a, b in pairs (pokeballs) do if isInArray(b.all, id) then return a end end return "none" end randomdiagonaldir = { [NORTHEAST] = {NORTH, EAST}, [SOUTHEAST] = {SOUTH, EAST}, [NORTHWEST] = {NORTH, WEST}, [SOUTHWEST] = {SOUTH, WEST}} function doFaceOpposite(cid) local a = getCreatureLookDir(cid) local d = { [NORTH] = SOUTH, [SOUTH] = NORTH, [EAST] = WEST, [WEST] = EAST, [NORTHEAST] = SOUTHWEST, [NORTHWEST] = SOUTHEAST, [SOUTHEAST] = NORTHWEST, [SOUTHWEST] = NORTHEAST} doCreatureSetLookDir(cid, d[a]) end function doFaceRandom(cid) local a = getCreatureLookDir(cid) local d = { [NORTH] = {SOUTH, WEST, EAST}, [SOUTH] = {NORTH, WEST, EAST}, [WEST] = {SOUTH, NORTH, EAST}, [EAST] = {SOUTH, WEST, NORTH}} doChangeSpeed(cid, 1) doCreatureSetLookDir(cid, d[a][math.random(1, 3)]) doChangeSpeed(cid, -1) end function getFaceOpposite(dir) local d = { [NORTH] = SOUTH, [SOUTH] = NORTH, [EAST] = WEST, [WEST] = EAST, [NORTHEAST] = SOUTHWEST, [NORTHWEST] = SOUTHEAST, [SOUTHEAST] = NORTHWEST, [SOUTHWEST] = NORTHEAST} return d[dir] end function getResistance(cid, combat) if isPlayer(cid) then return false end local poketype1 = pokes[getCreatureName(cid)].type local poketype2 = pokes[getCreatureName(cid)].type2 local multiplier = 1 if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then multiplier = multiplier * 2 end if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then multiplier = multiplier * 2 end if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then multiplier = multiplier * 0.5 end if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then multiplier = multiplier * 0.5 end if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then multiplier = multiplier * 0 end if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then multiplier = multiplier * 0 end if multiplier == 0.25 then multiplier = 0.5 elseif multiplier == 4 then multiplier = 2 end return multiplier end function getCreatureDirectionToTarget(cid, target, ranged) if not isCreature(cid) then return true end if not isCreature(target) then return getCreatureLookDir(cid) end local dirs = { [NORTHEAST] = {NORTH, EAST}, [SOUTHEAST] = {SOUTH, EAST}, [NORTHWEST] = {NORTH, WEST}, [SOUTHWEST] = {SOUTH, WEST}} local x = getDirectionTo(getThingPos(cid), getThingPos(target), false) if x <= 3 then return x else local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x) local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y) if xdistance > ydistance then return dirs[x][2] elseif ydistance > xdistance then return dirs[x][1] elseif isInArray(dirs[x], getCreatureLookDir(cid)) then return getCreatureLookDir(cid) else return dirs[x][math.random(1, 2)] end end end function getSomeoneDescription(cid) if isPlayer(cid) then return getPlayerNameDescription(cid) end return getMonsterInfo(getCreatureName(cid)).description end function isGhostPokemon(cid) if not isCreature(cid) then return false end local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"} return isInArray(ghosts, getCreatureName(cid)) end function updateGhostWalk(cid) if not isCreature(cid) then return false end local pos = getThingPos(cid) pos.x = pos.x + 1 pos.y = pos.y + 1 local ret = getThingPos(cid) doTeleportThing(cid, pos, false) doTeleportThing(cid, ret, false) return true end function doRemoveElementFromTable(t, e) local ret = {} for a = 1, #t do if t[a] ~= e then table.insert(ret, t[a]) end end return ret end function doFaceCreature(sid, pos) if not isCreature(sid) then return true end if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end local ret = 0 local ld = getCreatureLookDir(sid) local dir = getDirectionTo(getThingPos(sid), pos) local al = { [NORTHEAST] = {NORTH, EAST}, [NORTHWEST] = {NORTH, WEST}, [SOUTHEAST] = {SOUTH, EAST}, [SOUTHWEST] = {SOUTH, WEST}} if dir >= 4 and isInArray(al[dir], ld) then return true end doChangeSpeed(sid, 1) if dir == 4 then ret = math.random(2, 3) elseif dir == 5 then ret = math.random(1, 2) elseif dir == 6 then local dirs = {0, 3} ret = dirs[math.random(1, 2)] elseif dir == 7 then ret = math.random(0, 1) else ret = getDirectionTo(getThingPos(sid), pos) end doCreatureSetLookDir(sid, ret) doChangeSpeed(sid, -1) return true end function doCreatureAddCondition(cid, condition) if not isCreature(cid) then return true end doAddCondition(cid, condition) end function doCreatureRemoveCondition(cid, condition) if not isCreature(cid) then return true end doRemoveCondition(cid, condition) end function setCD(item, tipo, tempo) if not tempo or not tonumber(tempo) then doItemEraseAttribute(item, tipo) return true end doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."") return tempo + os.time() end function getCD(item, tipo, limite) if not getItemAttribute(item, tipo) then return 0 end local string = getItemAttribute(item, tipo):gsub("cd:", "") local number = tonumber(string) - os.time() if number <= 0 then return 0 end if limite and limite < number then return 0 end return number end function doSendMoveEffect(cid, target, effect) if not isCreature(cid) or not isCreature(target) then return true end doSendDistanceShoot(getThingPos(cid), getThingPos(target), effect) return true end function doSetItemActionId(uid, actionid) doItemSetAttribute(uid, "aid", actionid) return true end function threeNumbers(number) if number <= 9 then return "00"..number.."" elseif number <= 99 then return "0"..number.."" end return ""..number.."" end function isBr(cid) if getPlayerStorageValue(cid, 105505) ~= -1 then return true end return false end function isBeingUsed(ball) if not ball then return false end for a, b in pairs (pokeballs) do --alterado v1.9 if b.use == ball then return true end end return false end function doRemoveTile(pos)-- Script by mock pos.stackpos = 0 local sqm = getTileThingByPos(pos) doRemoveItem(sqm.uid,1) end function doCreateTile(id,pos) -- By mock doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE) doCreateItem(id,1,pos) end function hasSqm(pos) local f = getTileThingByPos(pos) if f.itemid ~= 0 and f.itemid ~= 1 then return true end return false end function getPosDirs(p, dir) -- By MatheusMkalo return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z} end function canWalkOnPos(pos, creature, pz, water, sqm, proj) if not pos then return false end if not pos.x then return false end if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false end local n = not proj and 3 or 2 --alterado v1.6 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function canWalkOnPos2(pos, creature, pz, water, sqm, proj) --alterado v1.6 if not pos then return false end if not pos.x then return false end if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false end --[[local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i --edited pra retirar um bug.. ;x local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then --edited if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end ]] return true end function getFreeTile(pos, cid) if canWalkOnPos(pos, true, false, true, true, false) then return pos end local positions = {} for a = 0, 7 do if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then table.insert(positions, pos) end end if #positions >= 1 then if isCreature(cid) then local range = 1000 local ret = getThingPos(cid) for b = 1, #positions do if getDistanceBetween(getThingPos(cid), positions[b]) < range then ret = positions[b] range = getDistanceBetween(getThingPos(cid), positions[b]) end end return ret else return positions[math.random(#positions)] end end return getThingPos(cid) end function isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function isPlayerSummon(cid, uid) return getCreatureMaster(uid) == cid --alterado v1.9 end function isSummon(sid) return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid)) --alterado v1.9 end function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function getPokeballsInContainer(container) -- Function By Kydrai if not isContainer(container) then return {} end local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getPokeballsInContainer(item.uid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end elseif isPokeball(item.itemid) then table.insert(items, item.uid) end end end return items end function getItensUniquesInContainer(container) --alterado v1.6 if not isContainer(container) then return {} end local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItensUniquesInContainer(item.uid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end elseif getItemAttribute(item.uid, "unique") then table.insert(items, item) end end end return items end function hasSpaceInContainer(container) --alterado v1.6 if not isContainer(container) then return false end if getContainerSize(container) < getContainerCap(container) then return true end for slot = 0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then if hasSpaceInContainer(item.uid) then return true end end end return false end function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid) local piles = 0 if #item > 0 then for i,x in pairs(item) do if getThing(x).type < 100 then local it = getThing(x) doTransformItem(it.uid, itemid, it.type+quant) if it.type+quant > 100 then doPlayerAddItem(cid, itemid, it.type+quant-100) end else piles = piles+1 end end else return doPlayerAddItem(cid, itemid, quant) end if piles == #item then doPlayerAddItem(cid, itemid, quant) end end function getDirectionToWalk(p1, pos2) local dir = NORTH local pos1 = getCreaturePosition(p1) if(pos1.x > pos2.x) then dir = WEST if(pos1.y > pos2.y) then dir = NORTHWEST elseif(pos1.y < pos2.y) then dir = SOUTHWEST end elseif(pos1.x < pos2.x) then dir = EAST if(pos1.y > pos2.y) then dir = NORTHEAST elseif(pos1.y < pos2.y) then dir = SOUTHEAST end else if(pos1.y > pos2.y) then dir = NORTH elseif(pos1.y < pos2.y) then dir = SOUTH end end return dir end function getNextStepDelay(cid, dir) return tonumber(398) end function createBallByStatus(cid, status, id) slot = getPlayerSlotItem(cid, 8) if slot.uid == 0 then item = doPlayerAddItem(cid, id) else item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, id, 1) end setStatusPokeballByStatusStr(item, status) end function getPokemonByName(cid, pokemon) local arraypoke = {} local container = getPlayerSlotItem(cid, 3).uid local pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs do name = getItemAttribute(pokeballs[i], "poke") if pokemon == name then table.insert(arraypoke, pokeballs[i]) return arraypoke[1] end end return false end function tranfBallInShiny(pokeball) doItemSetAttribute(pokeball, "shiny", "shiny") return true end function getShinyByPokeball(pokeball) local shiny = getItemAttribute(pokeball, "shiny") return shiny == "shiny" and true or false end function getShinyNameByPokeball(pokeball) local shiny = getItemAttribute(pokeball, "shiny") return shiny and "Shiny "..getItemAttribute(pokeball, "poke").."" or getItemAttribute(pokeball, "poke") end function 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"} for i =1, #attr do doItemSetAttribute(pokeball, x[i], attr[i]) end end function copieAllStatusBalls(pokeball) local x = {"poke", "hp", "offense", "defense", "speed", "vitality", "specialattack", "happy", "gender", "hands", "description", "fakedesc", "boost", "ball", "defeated", "shiny"} str = "" sep = "," for i =1, #x do local attr = getItemAttribute(pokeball, x[i]) or 0 local t = attr ..sep str = str..t end return str end function atualizaPokes(cid) local item = getPlayerSlotItem(cid, 8) if item.uid <= 0 then return true end if not getItemAttribute(item.uid, "poke") then return true end for i, x in pairs(fotos) do if string.lower(getItemAttribute(item.uid, "poke")) == string.lower(i) then doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[i]) if useOTClient then doPlayerSendCancel(cid, '12//,show') end if useKpdoDlls then doUpdateMoves(cid) end end end end function 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 end if exhaustion.get(cid, 6666) and exhaustion.get(cid, 6666) > 0 then return true end if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) end end if #getCreatureSummons(cid) > 0 then t = getPlayerSlotItem(cid, 8) local btype = getPokeballType(t.itemid) local effect = pokeballs[btype].effect or 21 doReturnPokemon(cid, getCreatureSummons(cid)[1], t,effect) end t = getPlayerSlotItem(cid, 8) if t.uid ~= 0 then pokeslot = getItemAttribute(t.uid, "poke") if pokeslot == pokemon then t = getPlayerSlotItem(cid, 8) doGoPokemon(cid, t) atualizaPokes(cid) return true end if getPokemonByName(cid, pokemon) then local poke = getPokemonByName(cid, pokemon) local attr = copieAllStatusBalls(t.uid) local id = t.itemid doRemoveItem(t.uid) local attr2 = copieAllStatusBalls(poke) local id2 = getThing(poke).itemid doRemoveItem(getPokemonByName(cid, pokemon)) createBallByStatus(cid, attr2, id2) createBallByStatus(cid, attr, id) t = getPlayerSlotItem(cid, 8) doGoPokemon(cid, t) atualizaPokes(cid) return true end end if getPokemonByName(cid, pokemon) then local id = getThing(getPokemonByName(cid, pokemon)).itemid local attr = copieAllStatusBalls(getPokemonByName(cid, pokemon)) doRemoveItem(getPokemonByName(cid, pokemon)) createBallByStatus(cid, attr, id) t = getPlayerSlotItem(cid, 8) doGoPokemon(cid, t) atualizaPokes(cid) return true end return false end function sendPokeInfo(cid) local activeimg = true local poke = getPlayerSlotItem(cid, 8) local pokeslot = getItemAttribute(poke.uid, "poke") local pokeboost = getItemAttribute(poke.uid, "boost") or 0 local pokehappy = getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) or 1 doPlayerSendCancel(cid, "NewInfo/"..pokeslot.."/"..pokeboost.."/"..pokehappy.."") if activeimg then local img = "ShowPoke/" doPlayerSendCancel(cid, img..pokeslot) end end function doShowSelectChar(cid) doPlayerSendCancel(cid, "ShowChar") end function doCloseSelectChar(cid) doPlayerSendCancel(cid, "CloseChar") end function doShowLookPlayer(cid, target, msg) doPlayerSendCancel(cid, "ShowLook/"..getPlayerStorageValue(target, 21121).."/"..msg.."") end function doCloseInfoPoke(cid) local activeimg = true doPlayerSendCancel(cid, "InfoClosed") if activeimg then local close = "ClosePoke" doPlayerSendCancel(cid, close) end end function sendAllPokemonsBarPoke(cid) local container = getPlayerSlotItem(cid, 3).uid local pokes = "Pokebar" local t = getPlayerSlotItem(cid, 8) if t.uid ~= 0 then pokeslot = getItemAttribute(t.uid, "poke") pokes = pokes.."/"..pokeslot.."" end local pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs do pokemons = getItemAttribute(pokeballs[i], "poke") pokes = pokes.."/"..pokemons.."" end doPlayerSendCancel(cid, pokes) end function isPlayerOnline(uid) return isInArray(getPlayersOnline(), uid) end function doRevivePokemon(cid, pokemon) if getPlayerItemCount(cid, 12344) <= 0 then return doPlayerSendCancel(cid, "Voce nao tem nenhum revive.") end local cooldownMoves = { ["Selfdestruct"] = 30, ["Selfdestruction"] = 30, } local balls = getPokeballsInContainerNew(getPlayerSlotItem(cid, 3).uid) if isPokeball(getPlayerSlotItem(cid, CONST_SLOT_FEET).itemid) then table.insert(balls, getPlayerSlotItem(cid, CONST_SLOT_FEET)) end for i =1, #balls do local ball = balls[i] -- print("Pokemon: "..pokemon.." attrpoke> "..(getItemAttribute(ball.uid, "poke") or "sempoke").." attrnick> "..(getItemAttribute(ball.uid, "nick") or "sem nick")) if getItemAttribute(ball.uid, "poke") == pokemon or getItemAttribute(ball.uid, "nick") == pokemon then -- print("IGUAL") for type, index in pairs(pokeballs) do -- print(index.on.." / "..index.off) if ball.itemid == index.on or ball.itemid == index.off then -- print("revive") doTransformItem(ball.uid, index.on) doSetItemAttribute(ball.uid, "hp", 1) local name = getItemAttribute(ball.uid, "poke") for c = 1, 15 do local str = "move"..c local move = movestable[name][str]; move = move and cooldownMoves[move.name] setCD(ball.uid, str, move or 0) end setCD(ball.uid, "control", 0) setCD(ball.uid, "blink", 0) --alterado v1.6 doSendMagicEffect(getThingPos(cid), 13) doPlayerRemoveItem(cid, 12344, 1) doCureBallStatus(ball.uid, "all") doUpdatePokemonsBar(cid) cleanBuffs2(ball.uid) --alterado v1.5 return end end end end end function getPokeballsInContainerNew(container) 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 = getPokeballsInContainerNew(item.uid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end elseif isPokeball(item.itemid) then table.insert(items, item) end end end return items end um logo após o outro
  8. Fawkzz12

    Pokemon Não Ataca

    [21/12/2019 21:04:52] [Error - CreatureScript Interface] [21/12/2019 21:04:52] datapack/creaturescripts/scripts/exp2.0.lua:onStatsChange [21/12/2019 21:04:52] Description: [21/12/2019 21:04:52] datapack/lib/some functions.lua:764: attempt to index global 'happinessRate' (a nil value) [21/12/2019 21:04:52] stack traceback: [21/12/2019 21:04:52] datapack/lib/some functions.lua:764: in function 'getHappinessRate' [21/12/2019 21:04:52] datapack/creaturescripts/scripts/exp2.0.lua:344: in function <datapack/creaturescripts/scripts/exp2.0.lua:63>
  9. Fawkzz12

    Pokemon Não Ataca

    é o seguinte, baixei um servidor de poketibia, mas quando criam uma conta, e vao caçar, eles conseguem dar target no pokemon, os ataques saem, mas não da dano, e os pokemons que estão em target não ataca o pokemon do player
  10. Fawkzz12

    Login.lua Erro

    deu certo mano, muito obrigado, unica coisa é que ele agora fica com a outfit normal e nao de fly kkk mas ja quebrou um galho.. reputado
  11. Fawkzz12

    Login.lua Erro

    o player carrega infinitamente, mas o char dele loga e desloga e ele n sai da tela de carregamento Erro [14/04/2019 04:56:24] [Error - CreatureScript Interface] [14/04/2019 04:56:24] data/creaturescripts/scripts/login.lua:onLogin [14/04/2019 04:56:24] Description: [14/04/2019 04:56:24] data/creaturescripts/scripts/login.lua:139: attempt to index field '?' (a number value) [14/04/2019 04:56:24] stack traceback: [14/04/2019 04:56:24] data/creaturescripts/scripts/login.lua:139: in function <data/creaturescripts/scripts/login.lua:6> [14/04/2019 04:56:24] Sad Gelasco has logged out.
  12. Fawkzz12

    Login.lua Erro

    nao deu certo, mostra o mesmo erro, na linha 136
  13. Fawkzz12

    Login.lua Erro

    como pode ver ali dentro, não tem nada com "?" na linha 138
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...