-
Recently Browsing 0 members
No registered users viewing this page.
Administrador | Diretor | Coordenador | Moderador | Suporter | Estagiário | Herói -
Similar Content
-
By dso15
Estava tentando compilar o client psoul e aparentemente o que me limita são esses 2 arquivos que impedem o jogo de abrir
crypt.cpp
crypt.h
eles estão dentro da pasta framework
aparentemente ele tem duas chaves criptografadas porem não tenho a minima ideia de como resolver
-
By dso15
OLA A TODOS FAREI UM TUTORIAL COMPLETO EM RELAÇÃO A BASE PSOUL, POIS TEM MUITA GENTE PERGUNTANDO COMO EU FIZ O SITE FUNCIONAR, ESSA É A PARE SIMPLES MAS VAMOS LA.
PRIMEIRO VC FAZ O DOWNLOAD DA BASE QUE SE ENCONTRA AQUI.
PokeAimar (Level System) 8.54 2020 (Com Sources) - Alternative Tibia Servers - xTibia - Sua comunidade de Otserv e Tibia
VOU FAZER TUDO RELATIVO AO PSOUL, NO CASO SITE E ETC.
O SITE DO PSOUL ESTÁ EM OUTRO SITE NAO SEI SE POSSO POSTAR O LINK AQUI
PRA FAZER O SITE FUNCIONAR VC PRECISA USAR O PHP 5.6 EU PARTICULARMENTE USO XAMPP
QUE SE ENCONTRA AQUI
XAMPP
SCAN: VirusTotal
BLZ, FEITO ISSO VAMOS CONFIGURAR O SERVER
VÁ NA PASTA DO SERVER ABRA O CONFIG.LUA
ACHE
sqlDatabase = "genesis"
MUDER PARA
sqlDatabase = "server"
ACHE encryptionType = "sha256"
MUNDE PARA encryptionType = "sha1"
AGORA VÁ EM C:\xampp\htdocs E COLOQUE O SITE LA
DEPOIS VÁ EM C:\xampp\htdocs\app\Config\database.php
ACHE 'database' => 'genesis', //'data',
MUDE PARA 'database' => 'server', //'data',
DEPOIS VÁ EM C:\xampp\htdocs\app\Config\email.php
ACHE
MUDE PARA
AGORA VÁ EM C:\xampp\htdocs\app\Config\core.php
ACHE Configure::write('Security.type', 'sha256');
MUNDE PARA Configure::write('Security.type', 'sha1');
FEITO ISSO ABRA O PAINEL DE CONTROLE DO XAMPP E LIGUE AS DUAS PRIMEIRAS OPÇOES
APOS ISSO CLIQUE EM admin DA PARTE DO mysql
ELE VAI TE LEVAR PRA CÁ
BAIXEM ESSA DATABASE --- BD_Zot.zip
SCAN VirusTotal
VÁ EM NOVO E CRIE UM BANCO DE DADOS COM O NOME server E USE A OPÇÃO colação ELA É A PRIMEIRA
AGORA VÁ EM IMPORTAR E SELECIONE A DATABASE QUE VC BAIXOU
APOS IMPORTAR
VÁ NO PAINEL DE CONTROLE DO XAMPP E LIGUE O apache APOS ISSO CLIQUE EM admin DA PARTE DO apache
ISSO VAI TE LEVAR PARA O SITE
AGORA CRIE SUA CONTA LIGUE O SERVIDOR E JOGUE
QUANDO VC LIGAR O SERVIDOR ELE VAI CRIAR ALGUMAS DATABASE ALTOMATICAMENTE ISSO É NORMAL
NA PROXIMA VEZ QUE LIGAR NAO VAI CRIAR MAIS
PRA VC QUE QUER APENAS JOGAR O TUTORIAL FINALIZA AQUI, AGORA PRA ADMS CONTINUA
-----------------------------------------------------------------------------------------------------------------------------
COMPILAR SOURCE
LEMBRANDO QUE AS SOURCES TEM QUE SER A DO POKEAIMAR POIS ELE É BASE PSOUL
PARA COMPILAR A SOURCE VC PRECISA BAIXAR O DEV
QUE SE ENCONTRA AQUI BAIXE DE ACORDO COM A VERSÃO DO SEU WINDOWS 32 OU 64 BITS
32 BITS
SCAN VirusTotal
64 BITS
SCAN VirusTotal
FEITO ISSO BAIXE O OPENSSL
QUE SE ENCOTRA AQUI
OPEN SSL
SCAN: VirusTotal
AGORA ABRA SUA SOURCE NA PASTA DA SUA SOURCE
EM Source Server\dev-cpp\obj APAGUE TUDO DENTRO DA OBJ
E EM Source Server\dev-cpp APAGUE O .EXE QUE ESTÁ LÁ
APOS FEITO ISSO ABRA O DEV E VÁ EM tools --> package manager
E INSTALE O OPENSSL QUE VC BAIXOU
AGORA ABRA SUA SOURCE E VA EM otserv.cpp
PROCURE POR
else if(encryptionType == "sha256")
{
g_config.setNumber(ConfigManager::ENCRYPTION, ENCRYPTION_SHA256);
std::cout << "> Using SHA256 encryption" << std::endl;
}
DEPOIS APAGUE E SALVE O ARQUIVO
AGORA E SO COMPILAR E SER FELIZ
-----------------------------------------------------------------------------------------------
SOBRE COMPILAR O OTC
ESTOU SEGUINDO ESSE TUTORIAL
O CLIENT COMPILA POREM QUANDO VOU ABRIR DA ESSE ERRO
ESTOU TENTANDO ACHAR UMA SOULUÇÃO
CASO ALGUEM PRECISE DE AJUDA COMENTA AI OU ME CHAMA NO WHATSZAPP NÃO TENHO MUITO CONHECIMENTO MAS JA SEI ALGO: (65) 998157796
-----------------------------------------------------------------------------------------------
BASICAMENTE A DATA PACK QUE EU USO E A CORIGIDA PELO JAIRKEVICK ESSA *ESTÁ NO TOPO DO TOPICO*:
O CLIENT QUE USO É DO AIMAR ESSE *NO DOWLOAD NORMAL*:
O SITE QUE USO ESTÁ POSTADO EM OUTRO SITE SE ME DERREM PERMISSÃO POSTO O LINK
A SOURCE QUE USO É A DO POKEAIMAR ESSA *NO DOWLOAD NORMAL*:
-----------------------------------------------------------------------------------------------
SE ALGUEM CONSEGUIR COMPILAR O OTCLIENT COMENTA AI!
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
NÃO QUERO NENHUM CREDITO POR ISSO APENAS QUERO AJUDAR A COMUNIDADE QUE ATÉ O MOMENTO SE MOSTROU BEM INDIVIDUALISTA EM RELAÇÃO A ESTÁ BASE
-----------------------------------------------------------------------------------------------
-
By Slytherin
Bom dia, Boa tarde e boa noite. Tipo, eu baixei a base Psoul do @Jair Kevick. e ela esta me complicando. tipo ela pede para usa o PHP 5.6.40 e dai tudo bem, quando coloca abre o http://localhost/ e o http://localhost/phpmyadmin/ , dai quando inicia o servidor ele instala umas tabelas e quando fui olhar o http://localhost/phpmyadmin/ da esse erro https://ibb.co/tbtybyK <('-'<). Ou seja ele esta pedindo para que eu mude a versão do PHP para 7.1.3, e dai quando eu mudo ele abre o http://localhost/phpmyadmin/ porem o http://localhost/ para de funciona https://ibb.co/6sRknPT.
-
By gristony
Boa noite pessoal, quero convidá-los para conhecer um pouco sobre o nosso projeto “Pokemon Online SVKE”, para quem não lembra ou não chegou a conhecer, o poke svke foi o primeiro servidor de poketibia e fez muito sucesso em 2010, ele foi fechado e vendido alguns meses depois para a atual PokexGames, estamos falando de 10 anos de updates constantes no game, se distanciar cada vez mais do seu antecessor svke, para quem quer relembrar os velhos tempos, sentir aquela adrenalina e nostalgia que com o passar dos anos foi perdida ou quer conhecer como era o primeiro poketibia raiz que existiu, então fiquem ligados que o nosso objetivo é trazer as origens mais profundas do svke, já estamos à algum tempo trabalhando para deixar tudo o mais semelhante possível, para que cada momento em game, seja nostálgico para o jogador, se você ficou interessado por favor dê uma passada no nosso site, e nossas redes sociais no Discord e Facebook. Venham trazer de volta esse passado glorioso e se divertir de verdade.
OBS: Open Beta daqui a pouquinho fiquem de olho no discord iremos colocar o client lá e assim que sair irei editar aqui tbm.
Website: http://www.pokesvke.com
Discord: https://discord.gg/8bsVGzb8jZ
Facebook: https://www.facebook.com/PokemonOnlineSVKE
-
Question
thloko 1
Fala ae galera, tudo bem ?
Gostaria de permitir o uso da habilidade do pokemon como Surf, ride, fly, apenas se o player tiver passado de determinado ginásio, vinculando assim o uso da abilidade com a insígnia adiquirida. Retirando o vip como obrigatório.
Alguém sabe onde consigo adicionar o script ou mesmo a linha de checagem (acho que é o mais provável) para que isso seja possível ?
Acredito que eu tenha que add a checagem no script abaixo.
local holes = {[468] = 469, [481] = 482, [483] = 484, [7932] = 7933, [8579] = 8585}
local grasses = {[2782] = 2781, [3985] = 3984}
local debris = 1336
local POKEMON_FAST_MOUNT_CONDITION = createConditionObject(CONDITION_HASTE, 999, -1, CONDITION_SUBID.HASTE.FAST_MOUNT)
setConditionParam(POKEMON_FAST_MOUNT_CONDITION, CONDITION_PARAM_SPEED, 120)
-- Abilities Speed START
RIDE_SPEED = {
["Ponyta"] = 120,
["Rapidash"] = 140,
["Doduo"] = 120,
["Dodrio"] = 140,
["Arcanine"] = 140,
["Ninetales"] = 140,
["Onix"] = 130,
["Tauros"] = 140,
["Rhyhorn"] = 130,
["Venusaur"] = 120,
-- 2nd Gen
["Bayleef"] = 120,
["Meganium"] = 140,
["Mareep"] = 120,
["Girafarig"] = 130,
["Steelix"] = 140,
["Piloswine"] = 130,
["Houndoom"] = 140,
["Stantler"] = 130,
-- 3rd Gen
["Metagross"] = 130,
["Manectric"] = 140,
["Absol"] = 130,
["Lairon"] = 120,
["Aggron"] = 120,
["Shelgon"] = 120,
["Camerupt"] = 110,
["Mightyena"] = 120,
["Torkoal"] = 100,
}
local tmp = table.deepcopy(RIDE_SPEED)
for name, speed in pairs(RIDE_SPEED) do
tmp[string.concat("Shiny ", name)] = speed
end
RIDE_SPEED = tmp
RIDE_SPEED_CONDITIONS = {}
for name, speed in pairs(RIDE_SPEED) do
RIDE_SPEED_CONDITIONS[name] = {}
RIDE_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(RIDE_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))
RIDE_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(RIDE_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(RIDE_SPEED)
RIDE_SPEED = nil
FLY_SPEED = {
-- 1st Gen
["Pidgeot"] = 180,
["Fearow"] = 180,
["Charizard"] = 190,
["Dragonite"] = 190,
["Aerodactyl"] = 190,
["Zapdos"] = 200,
["Moltres"] = 200,
["Articuno"] = 200,
["Mew"] = 220,
["Mewtwo"] = 220,
["Porygon"] = 190,
["Farfetchd"] = 180,
["Dragonair"] = 190,
-- 2nd Gen
["Noctowl"] = 180,
["Crobat"] = 190,
["Xatu"] = 180,
["Heracross"] = 180,
["Skarmory"] = 180,
["Porygon2"] = 190,
-- 3rd Gen
["Altaria"] = 180,
["Flygon"] = 190,
["Latias"] = 200,
["Latios"] = 200,
["Pelipper"] = 170,
["Rayquaza"] = 200,
["Salamence"] = 190,
["Swablu"] = 180,
["Swellow"] = 200,
["Tropius"] = 180,
["Vibrava"] = 190,
["Wingull"] = 180,
}
local tmp = table.deepcopy(FLY_SPEED)
for name, speed in pairs(FLY_SPEED) do
tmp[string.concat("Shiny ", name)] = speed
end
FLY_SPEED = tmp
FLY_SPEED_CONDITIONS = {}
for name, speed in pairs(FLY_SPEED) do
FLY_SPEED_CONDITIONS[name] = {}
FLY_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(FLY_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))
FLY_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(FLY_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(FLY_SPEED)
FLY_SPEED = nil
LEVITATE_SPEED = {
-- 1st Gen
["Gengar"] = 190,
-- Shiny
--["Shiny Gengar"] = 190,
}
local tmp = table.deepcopy(LEVITATE_SPEED)
for name, speed in pairs(LEVITATE_SPEED) do
tmp[string.concat("Shiny ", name)] = speed
end
LEVITATE_SPEED = tmp
LEVITATE_SPEED_CONDITIONS = {}
for name, speed in pairs(LEVITATE_SPEED) do
LEVITATE_SPEED_CONDITIONS[name] = {}
LEVITATE_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(LEVITATE_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))
LEVITATE_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(LEVITATE_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(LEVITATE_SPEED)
LEVITATE_SPEED = nil
SURF_SPEED = {
-- 1st Gen
["Squirtle"] = 180,
["Wartortle"] = 190,
["Blastoise"] = 200,
["Poliwag"] = 160,
["Poliwhirl"] = 190,
["Poliwrath"] = 200,
["Goldeen"] = 180,
["Seaking"] = 190,
["Tentacool"] = 180,
["Tentacruel"] = 200,
["Staryu"] = 180,
["Starmie"] = 190,
["Dewgong"] = 190,
["Lapras"] = 190,
["Gyarados"] = 200,
["Omastar"] = 190,
["Kabutops"] = 200,
["Vaporeon"] = 190,
["Seadra"] = 190,
["Golduck"] = 190,
["Snorlax"] = 180,
-- 2nd Gen
["Totodile"] = 180,
["Croconaw"] = 190,
["Feraligatr"] = 200,
["Marill"] = 160,
["Azumarill"] = 190,
["Politoed"] = 200,
["Wooper"] = 160,
["Quagsire"] = 190,
["Octillery"] = 190,
["Mantine"] = 190,
["Kingdra"] = 200,
-- 3rd Gen
["Aggron"] = 160,
["Azurill"] = 160,
["Barboach"] = 170,
["Carvanha"] = 170,
["Clamperl"] = 170,
["Corphish"] = 170,
["Crawdaunt"] = 190,
["Feebas"] = 170,
["Gorebyss"] = 190,
["Hariyama"] = 160,
["Huntail"] = 190,
["Kyogre"] = 200,
["Latias"] = 200,
["Latios"] = 200,
["Linoone"] = 160,
["Lombre"] = 170,
["Lotad"] = 160,
["Ludicolo"] = 180,
["Luvdisc"] = 170,
["Makuhita"] = 160,
["Marshtomp"] = 180,
["Milotic"] = 190,
["Mudkip"] = 170,
["Pelipper"] = 180,
["Rayquaza"] = 200,
["Relicanth"] = 170,
["Sealeo"] = 170,
["Sharpedo"] = 190,
["Spheal"] = 160,
["Swampert"] = 170,
["Wailmer"] = 160,
["Wailord"] = 170,
["Walrein"] = 170,
["Zigzagoon"] = 160,
["Whiscash"] = 180,
}
local tmp = table.deepcopy(SURF_SPEED)
for name, speed in pairs(SURF_SPEED) do
tmp[string.concat("Shiny ", name)] = speed
end
SURF_SPEED = tmp
SURF_SPEED_CONDITIONS = {}
for name, speed in pairs(SURF_SPEED) do
SURF_SPEED_CONDITIONS[name] = {}
SURF_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(SURF_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))
SURF_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(SURF_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(SURF_SPEED)
SURF_SPEED = nil
DIVE_SPEED = {
-- 1st Gen
["Squirtle"] = 160,
["Wartortle"] = 170,
["Blastoise"] = 180,
["Poliwag"] = 160,
["Poliwhirl"] = 170,
["Poliwrath"] = 180,
["Goldeen"] = 160,
["Seaking"] = 170,
["Tentacool"] = 160,
["Tentacruel"] = 180,
["Staryu"] = 160,
["Starmie"] = 170,
["Dewgong"] = 170,
["Lapras"] = 170,
["Gyarados"] = 180,
["Omastar"] = 170,
["Kabutops"] = 180,
["Vaporeon"] = 170,
["Seadra"] = 170,
["Golduck"] = 170,
-- 2nd Gen
["Totodile"] = 160,
["Croconaw"] = 170,
["Feraligatr"] = 180,
["Marill"] = 140,
["Azumarill"] = 170,
["Politoed"] = 180,
["Wooper"] = 140,
["Quagsire"] = 170,
["Octillery"] = 170,
["Mantine"] = 170,
["Kingdra"] = 180,
-- 3rd Gen
["Carvanha"] = 170,
["Clamperl"] = 170,
["Crawdaunt"] = 190,
["Feebas"] = 170,
["Gorebyss"] = 190,
["Huntail"] = 190,
["Kyogre"] = 200,
["Lombre"] = 170,
["Ludicolo"] = 180,
["Luvdisc"] = 170,
["Marshtomp"] = 180,
["Milotic"] = 190,
["Rayquaza"] = 200,
["Relicanth"] = 170,
["Sealeo"] = 170,
["Sharpedo"] = 190,
["Spheal"] = 160,
["Swampert"] = 170,
["Wailmer"] = 160,
["Wailord"] = 170,
["Walrein"] = 170,
["Whiscash"] = 180,
}
local tmp = table.deepcopy(DIVE_SPEED)
for name, speed in pairs(DIVE_SPEED) do
tmp[string.concat("Shiny ", name)] = speed
end
DIVE_SPEED = tmp
DIVE_SPEED_CONDITIONS = {}
for name, speed in pairs(DIVE_SPEED) do
DIVE_SPEED_CONDITIONS[name] = {}
DIVE_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(DIVE_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))
DIVE_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
setConditionParam(DIVE_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(DIVE_SPEED)
DIVE_SPEED = nil
function getAbilitySpeedCondition(cid)
if (isFlying(cid)) then
local name = getPlayerPokemonName(cid, true)
return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.FLY_SPEED) and
(FLY_SPEED_CONDITIONS[name] and FLY_SPEED_CONDITIONS[name].mastery or nil) or
(FLY_SPEED_CONDITIONS[name] and FLY_SPEED_CONDITIONS[name].default or nil)
elseif (isLevitating(cid)) then
local name = getPlayerPokemonName(cid, true)
return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.LEVITATE_SPEED) and
(LEVITATE_SPEED_CONDITIONS[name] and LEVITATE_SPEED_CONDITIONS[name].mastery or nil) or
(LEVITATE_SPEED_CONDITIONS[name] and LEVITATE_SPEED_CONDITIONS[name].default or nil)
elseif (isRiding(cid)) then
local name = getPlayerPokemonName(cid, true)
return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.RIDE_SPEED) and
(RIDE_SPEED_CONDITIONS[name] and RIDE_SPEED_CONDITIONS[name].mastery or nil) or
(RIDE_SPEED_CONDITIONS[name] and RIDE_SPEED_CONDITIONS[name].default or nil)
elseif (isSurfing(cid)) then
local name = getPlayerPokemonName(cid, true)
return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.SURF_SPEED) and
(SURF_SPEED_CONDITIONS[name] and SURF_SPEED_CONDITIONS[name].mastery or nil) or
(SURF_SPEED_CONDITIONS[name] and SURF_SPEED_CONDITIONS[name].default or nil)
elseif (isDiving(cid)) then
local name = getPlayerPokemonName(cid, true)
return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.DIVE_SPEED) and
(DIVE_SPEED_CONDITIONS[name] and DIVE_SPEED_CONDITIONS[name].mastery or nil) or
(DIVE_SPEED_CONDITIONS[name] and DIVE_SPEED_CONDITIONS[name].default or nil)
end
return nil
end
-- Abilities Speed END
local function checkRide(cid, pokemon, playerPosition, ticks)
if (isCreature(cid) and isCreature(pokemon)) then
local toPosition = getCreaturePosition(cid)
if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
doBallSaveStats(pokemon, getPlayerBall(cid).uid)
doRemoveCreature(pokemon)
setRidingStatus(cid, true)
setPlayerVulnerable(cid, true)
doPlayerUpdateOutfit(cid)
setCreatureMaxMana(cid, 0)
doPlayerAddMana(cid, -getCreatureMana(cid), false)
elseif (ticks > 1) then
doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
addEvent(checkRide, 500, cid, pokemon, playerPosition, ticks - 1)
end
end
end
end
function ride(cid)
local toPosition = getCreaturePosition(cid)
local pokemon = getPlayerPokemon(cid)
local targetPos = getPositionAdjacent(pokemon, toPosition, true)
local pos = getCreaturePosition(pokemon)
if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
(targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos))) then
doCreatureSay(cid, string.format(__L(cid, "%s , let's ride!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
if (targetPos) then
doCreatureWalkToPosition(pokemon, targetPos)
end
checkRide(cid, pokemon, toPosition, 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
function deRide(cid)
if (doPokemonCall(cid, getPlayerBall(cid))) then
doPlayerRemoveAbilitySpeedCondition(cid)
end
end
local function checkFly(cid, pokemon, playerPosition, ticks)
if (isCreature(cid) and isCreature(pokemon)) then
local toPosition = getCreaturePosition(cid)
if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
local name = getPokemonReferenceName(pokemon)
doBallSaveStats(pokemon, getPlayerBall(cid).uid)
doRemoveCreature(pokemon)
setFlyingStatus(cid, true)
setPlayerVulnerable(cid, true)
doPlayerUpdateOutfit(cid)
setCreatureMaxMana(cid, 0)
doPlayerAddMana(cid, -getCreatureMana(cid), false)
if (name == "Porygon") then
doSendMagicEffect(getCreaturePosition(cid), EFFECT_BIG_PORYGON)
end
elseif (ticks > 1) then
doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
addEvent(checkFly, 500, cid, pokemon, playerPosition, ticks - 1)
end
end
end
end
function fly(cid)
local toPosition = getCreaturePosition(cid)
local pokemon = getPlayerPokemon(cid)
local targetPos = getPositionAdjacent(pokemon, toPosition, true)
local pos = getCreaturePosition(pokemon)
if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
(targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos))) then
doCreatureSay(cid, string.format(__L(cid, "%s, let's fly!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
if (targetPos) then
doCreatureWalkToPosition(pokemon, targetPos)
end
checkFly(cid, pokemon, toPosition, 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
function deFly(cid)
if (doPokemonCall(cid, getPlayerBall(cid))) then
doPlayerRemoveAbilitySpeedCondition(cid)
end
end
local function checkSurf(cid, pokemon, newPosition, playerPosition, ticks)
if (isCreature(cid) and isCreature(pokemon)) then
local toPosition = getCreaturePosition(cid)
if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
doTeleportThing(cid, newPosition, false)
doCreatureSay(cid, string.format(__L(cid, "%s, let's surf!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doBallSaveStats(pokemon, getPlayerBall(cid).uid)
doRemoveCreature(pokemon)
setSurfingStatus(cid, true)
setPlayerVulnerable(cid, true)
doPlayerUpdateOutfit(cid)
setCreatureMaxMana(cid, 0)
doPlayerAddMana(cid, -getCreatureMana(cid), false)
elseif (ticks > 1) then
doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
addEvent(checkSurf, 500, cid, pokemon, newPosition, playerPosition, ticks - 1)
end
end
end
end
function surf(cid, newPosition, toPosition)
if (not toPosition) then -- When called by Oxygen Mask
toPosition = getCreaturePosition(cid)
end
local pokemon = getPlayerPokemon(cid)
local targetPos = getPositionAdjacent(pokemon, toPosition, true)
local pos = getCreaturePosition(pokemon)
if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
(targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos))) then
doCreatureSay(cid, string.format(__L(cid, "%s, let's surf!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
if (targetPos) then
doCreatureWalkToPosition(pokemon, targetPos)
end
checkSurf(cid, pokemon, newPosition, getPlayerPosition(cid), 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
function deSurf(cid, newPosition)
local oldPos = getCreaturePosition(cid)
doTeleportThing(cid, newPosition, false)
if (doPokemonCall(cid, getPlayerBall(cid))) then
doPlayerRemoveAbilitySpeedCondition(cid)
else
doTeleportThing(cid, oldPos, false)
end
end
local function checkDive(cid, pokemon, playerPosition, ticks)
if (isCreature(cid) and isCreature(pokemon)) then
local toPosition = getCreaturePosition(cid)
if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
doBallSaveStats(pokemon, getPlayerBall(cid).uid)
doRemoveCreature(pokemon)
setDivingStatus(cid, true)
setSurfingStatus(cid, false)
setPlayerVulnerable(cid, true)
doPlayerUpdateOutfit(cid)
setCreatureMaxMana(cid, 0)
doPlayerAddMana(cid, -getCreatureMana(cid), false)
elseif (ticks > 1) then
doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
addEvent(checkDive, 500, cid, pokemon, playerPosition, ticks - 1)
end
end
end
end
function dive(cid)
if (isPokemonOnline(cid)) then
local toPosition = getCreaturePosition(cid)
local pokemon = getPlayerPokemon(cid)
local targetPos = getPositionAdjacent(pokemon, toPosition, true)
local pos = getCreaturePosition(pokemon)
if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
(targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos))) then
doCreatureSay(cid, string.format(__L(cid, "%s, let's dive!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
if (targetPos) then
doCreatureWalkToPosition(pokemon, targetPos)
end
checkDive(cid, pokemon, toPosition, 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
else
setDivingStatus(cid, true)
setSurfingStatus(cid, false)
setPlayerVulnerable(cid, true)
doPlayerUpdateOutfit(cid)
setCreatureMaxMana(cid, 0)
doPlayerAddMana(cid, -getCreatureMana(cid), false)
end
end
function deDive(cid)
doPlayerRemoveAbilitySpeedCondition(cid)
doPokemonCall(cid, getPlayerBall(cid))
end
function light(cid)
local pokemon = getPlayerPokemon(cid)
doCreatureSay(cid, string.format(__L(cid, "%s, turn on the lights!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doAddCondition(pokemon, lightCondition)
doSendMagicEffect(getCreaturePosition(pokemon), EFFECT_GREEN_BUFF)
end
function deLight(cid)
local pokemon = getPlayerPokemon(cid)
doCreatureSay(cid, string.format(__L(cid, "%s, turn off the lights!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doRemoveCondition(pokemon, CONDITION_LIGHT)
doSendMagicEffect(getCreaturePosition(pokemon), EFFECT_GREEN_BUFF)
end
local function checkDig(cid, itemEx, toPosition, ticks)
if (isCreature(cid)) then
if (getDistanceBetween(getCreaturePosition(cid), toPosition) < 2) then
local cidPos = getCreaturePosition(cid)
doCreatureSetLookDirection(cid, getDirectionTo(cidPos, toPosition))
itemEx.uid = getTileItemById(toPosition, itemEx.itemid).uid
doTransformItem(itemEx.uid, holes[itemEx.itemid])
doDecayItem(itemEx.uid)
doSendDistanceShoot(cidPos, toPosition, PROJECTILE_GRAVEL)
doSendMagicEffect(toPosition, EFFECT_SCRATCH)
doCreatureWalkToPosition(cid, getCreaturePosition(cid)) -- Stop Walk
elseif (ticks > 1) then
addEvent(checkDig, 500, cid, itemEx, toPosition, ticks - 1)
end
end
end
function dig(cid, itemEx, toPosition)
local pokemon = getPlayerPokemon(cid)
local pos = getCreaturePosition(pokemon)
local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
getPositionAdjacent(pokemon, toPosition, true))
if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos)) then
doCreatureSay(cid, string.format(__L(cid, "%s, dig it!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doCreatureWalkToPosition(pokemon, targetPos)
checkDig(pokemon, itemEx, toPosition, 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
local function checkCut(cid, itemEx, toPosition, ticks)
if (isCreature(cid)) then
if (getDistanceBetween(getCreaturePosition(cid), toPosition) < 2) then
doCreatureSetLookDirection(cid, getDirectionTo(getCreaturePosition(cid), toPosition))
itemEx.uid = getTileItemById(toPosition, itemEx.itemid).uid
doTransformItem(itemEx.uid, grasses[itemEx.itemid])
doDecayItem(itemEx.uid)
doSendMagicEffect(toPosition, EFFECT_SCRATCH)
PokemonAbility.afterCut(getCreatureMaster(cid), cid, toPosition)
elseif (ticks > 1) then
addEvent(checkCut, 500, cid, itemEx, toPosition, ticks - 1)
end
end
end
function cut(cid, itemEx, toPosition)
local pokemon = getPlayerPokemon(cid)
local pos = getCreaturePosition(pokemon)
local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
getPositionAdjacent(pokemon, toPosition, true))
if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos)) then
doCreatureSay(cid, string.format(__L(cid, "%s, cut it!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doCreatureWalkToPosition(pokemon, targetPos)
checkCut(pokemon, itemEx, toPosition, 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
local function checkRockSmash(cid, itemEx, toPosition, ticks)
if (isCreature(cid)) then
if (getDistanceBetween(getCreaturePosition(cid), toPosition) < 2) then
local a = getTileItemById(toPosition, itemEx.itemid).uid
local createDebris = true
while (a ~= nil and a > 0) do
if (itemEx.itemid == 18742) then -- Ice Pillar
doCreateItem(18741, 1, toPosition) -- Ice Block
createDebris = false
addEvent(function(pos) doCreateItem(18742, 1, pos) end, 60000, toPosition) -- Re-create Ice Pillar
elseif (itemEx.itemid == 23563) then -- Closed door Kanto Main 10
local positions = {
{x = 5026, y = 489, z = 7},
{x = 5026, y = 490, z = 7}
}
for k, v in pairs(positions) do
if (getSamePosition(toPosition, v)) then
doRemoveItem(getTileItemById({x = 5026, y = 491, z = 7}, 20230).uid)
doCreateItem(20133, 1, {x = 5026, y = 491, z = 7}) -- Open Door
createDebris = false
addEvent(function()
doRemoveItem(getTileItemById({x = 5026, y = 491, z = 7}, 20133).uid)
doCreateItem(20230, 1, {x = 5026, y = 491, z = 7}) -- Open Door
end, 60 * 1000)
end
end
break
end
doRemoveItem(a)
a = getTileItemById(toPosition, itemEx.itemid).uid
end
local cidPos = getCreaturePosition(cid)
doCreatureSetLookDirection(cid, getDirectionTo(cidPos, toPosition))
doSendDistanceShoot(cidPos, toPosition, PROJECTILE_GRAVEL)
doSendMagicEffect(toPosition, EFFECT_EARTH_EXPLOSION)
if (createDebris) then
doDecayItem(doCreateItem(debris, 1, toPosition))
end
PokemonAbility.afterRockSmash(getCreatureMaster(cid), cid, toPosition)
elseif (ticks > 1) then
addEvent(checkRockSmash, 500, cid, itemEx, toPosition, ticks - 1)
end
end
end
function rockSmash(cid, itemEx, toPosition)
local pokemon = getPlayerPokemon(cid)
local pos = getCreaturePosition(pokemon)
local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
getPositionAdjacent(pokemon, toPosition, true))
if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos)) then
doCreatureSay(cid, string.format(__L(cid, "%s, smash it!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doCreatureWalkToPosition(pokemon, targetPos)
checkRockSmash(pokemon, itemEx, toPosition, 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
--[[
local HEADBUTT_KANTO = {
{skill = 0, pokemons = {"Caterpie", "Weedle"}},
{skill = 15, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow"}},
{skill = 30, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod"}},
{skill = 45, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat"}},
{skill = 60, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey"}},
{skill = 80, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute"}},
{skill = 100, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto"}},
{skill = 130, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree"}},
{skill = 160, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat"}},
{skill = 200, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth"}},
{skill = 230, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth", "Pinsir"}},
{skill = 260, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth", "Pinsir", "Farfetchd"}},
{skill = 300, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth", "Pinsir", "Farfetchd", "Scyther"}},
}
local HEADBUTT_ORANGE_ARCHIPELAGO = {
{skill = 0, pokemons = {"Caterpie", "Weedle"}},
{skill = 15, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot"}},
{skill = 30, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak"}},
{skill = 45, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat"}},
{skill = 60, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom"}},
{skill = 80, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma"}},
{skill = 100, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto"}},
{skill = 130, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree"}},
{skill = 160, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian"}},
{skill = 200, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados"}},
{skill = 230, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados", "Pineco"}},
{skill = 260, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados", "Pineco", "Heracross"}},
{skill = 300, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados", "Pineco", "Heracross", "Forretress"}},
}
local SHINY_CHANCE = getConfigValue("shinyAppearChance")
local HEADBUTT_EXHAUST_CONDITION = createConditionObject(CONDITION_EXHAUST, 12 * 1000, false, CONDITION_SUBID.EXHAUST.ABILITYHEADBUTT)
local function getPlayerHeadbuttablePokemons(cid)
local playerSkill = getPlayerSkill(cid, PLAYER_SKILL_HEADBUTTING)
local pokemon_by_skill = getPlayerInsideOrangeArchipelago(cid) and HEADBUTT_ORANGE_ARCHIPELAGO
or HEADBUTT_KANTO
for i = #pokemon_by_skill, 1, -1 do
if (pokemon_by_skill[i].skill <= playerSkill) then
return pokemon_by_skill[i].pokemons
end
end
end
local function checkHeadbutt(cid, itemEx, toPosition, ticks)
if (isCreature(cid)) then
if (getDistanceBetween(getCreaturePosition(cid), toPosition) == 1) then
local master = getCreatureMaster(cid)
local headbuttSkill = getPlayerSkillLevel(master, PLAYER_SKILL_HEADBUTTING)
local cidPos = getCreaturePosition(cid)
itemEx.uid = getTileItemById(toPosition, itemEx.itemid).uid
doTransformItem(itemEx.uid, itemEx.itemid + 1)
doDecayItem(itemEx.uid)
doCreatureSetLookDirection(cid, getDirectionTo(getCreaturePosition(cid), toPosition))
doSendMagicEffect(cidPos, EFFECT_CONFUSE_STARS)
doSendMagicEffect(toPosition, EFFECT_TREE_FALLING_LEAVES)
doSendDistanceShoot(cidPos, toPosition, PROJECTILE_GRAVEL)
doPlayerSendTextMessage(master, MESSAGE_STATUS_CONSOLE_BLUE, "You find something!")
doSendMagicEffect(cidPos, EFFECT_EMOTION_EXCLAMATION)
local headbuttablePokemons = getPlayerHeadbuttablePokemons(master)
local randomHeadbuttablePokemon = headbuttablePokemons[math.random(1, #headbuttablePokemons)]
local amount, i = math.ceil((headbuttSkill + 1) / 75)
if (randomHeadbuttablePokemon == "Scyther" or randomHeadbuttablePokemon == "Pinsir" or randomHeadbuttablePokemon == "Farfetchd") then
amount = 1
end
local amount = getRandom(1, amount)
if (amount > 4) then
amount = 4
end
if (HEADBUTT_KANTO[#HEADBUTT_KANTO].skill > getPlayerSkill(master, PLAYER_SKILL_HEADBUTTING)) then
doPlayerAddSkillTry(master, PLAYER_SKILL_HEADBUTTING, math.ceil(30 / (headbuttSkill + 1)))
end
for i = 1, amount do
local pokemonName = randomHeadbuttablePokemon
if (getRandom(0, SHINY_CHANCE) == 0) then
pokemonName = getMonsterInfo(pokemonName).shiny
end
local pokemon = doSummonCreature(pokemonName, getCreaturePosition(cid))
addEvent(doRemoveCreature, 3 * 60 * 1000, pokemon, true, false) -- remove creature after 2 min, force remove and dont show error
setMonsterUniqueTarget(pokemon, master)
end
elseif (ticks > 1) then
addEvent(checkHeadbutt, 1000, cid, itemEx, toPosition, ticks - 1)
end
end
end
function headbutt(cid, itemEx, toPosition)
local pokemon = getPlayerPokemon(cid)
if (getCreatureCondition(pokemon, CONDITION_EXHAUST, 5)) then
doPlayerSendCancel(cid, "Your Pokemon is exhaust.")
return
end
local pos = getCreaturePosition(pokemon)
local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
getPositionAdjacent(pokemon, toPosition, true))
if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos)) then
doCreatureSay(cid, getCreatureNickname(pokemon) .. ", headbutt it!", TALKTYPE_MONSTER)
doCreatureWalkToPosition(pokemon, targetPos)
checkHeadbutt(pokemon, itemEx, toPosition, 20)
doAddCondition(pokemon, HEADBUTT_EXHAUST_CONDITION)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
]]
function blink(cid, toPosition)
local pokemon = getPlayerPokemon(cid)
local pokemonPosition = getCreaturePosition(pokemon)
doCreatureSay(cid, string.format(__L(cid, "%s, blink!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doTeleportThing(pokemon, toPosition, false)
doSendMagicEffect(pokemonPosition, EFFECT_TELEPORT_TWO)
doSendMagicEffect(toPosition, EFFECT_TELEPORT_TWO)
doCreatureSetStorage(cid, playersStorages.blink, os.time())
doPlayerSendPokemonStatusAdd(cid, 17393, (doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.BLINK_COOLDOWN) and 7 or 10))
end
-- TRANSFORM
local TRANSFORM_EXHAUST_CONDITION = createConditionObject(CONDITION_EXHAUST, 20 * 60 * 1000 + 1, false, CONDITION_SUBID.EXHAUST.ABILITYTRANSFORM)
--[[local function deTransform(cid, outfit, baseSpeed)
if(isCreature(cid)) then
local master = getCreatureMaster(cid)
doCreatureChangeOutfit(cid, outfit)
setCreatureBaseSpeed(cid, baseSpeed)
doSendMagicEffect(getCreaturePosition(cid), EFFECT_DITTO_TRANSFORM)
doCreatureSetStorage(cid, pokemonsStorages.transform, EMPTY_STORAGE)
doPlayerUpdatePokemonIcons(master, getCreatureName(cid))
setBallCurrentTransform(getPlayerBall(master).uid, nil)
end
end]]
function doAbilitieTransform(cid, pokemon, target, targetName, afterDismount)
if (getCreatureCondition(pokemon, CONDITION_EXHAUST, 6)) then
doPlayerSendCancel(cid, "Your Pokemon is exhaust.")
elseif (target and getMonsterSpecialAbility(target) == POKEMON_SPECIAL_ABILITY_IDS.SUMMI) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
else
if (not targetName) then
targetName = getCreatureName(target)
end
if (not afterDismount) then
if (getPokemonBlockTransform(targetName)) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
return
end
if (target and getMonsterLevel(pokemon) < getMonsterLevel(target)) then
doPlayerSendCancel(cid, "Your Pokemon cannot transform into a higher level Pokemon.")
return
end
if (getPokemonEvolveLevel(targetName) > getMonsterLevel(pokemon)) then
doPlayerSendCancel(cid, string.format(__L(cid, "Your Pokemon need at least level %s to transform into that Pokemon."), getPokemonEvolveLevel(targetName)))
return
end
local reqEnergy
if (isShinyName(targetName)) then
reqEnergy = math.ceil(getPokemonMaxEnergy(pokemon) * 0.4)
else
reqEnergy = math.ceil(getPokemonMaxEnergy(pokemon) * 0.3)
end
if (getPokemonEnergy(pokemon) < reqEnergy) then
doPlayerSendCancel(cid, string.format(__L(cid, "Your Pokemon need at least %s energy to transform into this Pokemon."), reqEnergy))
return
end
doPokemonAddEnergy(pokemon, -reqEnergy)
end
local ball = getPlayerBall(cid)
doPlayerUpdatePokemonIcons(cid, targetName, true)
doCreatureSetStorage(pokemon, pokemonsStorages.transform, targetName)
doCreatureChangeOutfit(pokemon, getMonsterInfo(targetName).outfit)
setCreatureBaseSpeed(pokemon, getMonsterInfo(targetName).baseSpeed)
if (not afterDismount) then
doSendMagicEffect(getCreaturePosition(pokemon), EFFECT_DITTO_TRANSFORM)
doCreatureSay(cid, string.format(__L(cid, "%s, transform!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
doAddCondition(pokemon, TRANSFORM_EXHAUST_CONDITION)
doBallSaveTransformMemory(ball.uid, targetName)
setBallCurrentTransform(ball.uid, targetName)
end
end
end
local function checkLevitate(cid, pokemon, playerPosition, ticks)
if (isCreature(cid) and isCreature(pokemon)) then
local toPosition = getCreaturePosition(cid)
if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
doBallSaveStats(pokemon, getPlayerBall(cid).uid)
doRemoveCreature(pokemon)
setLevitatingStatus(cid, true)
setPlayerVulnerable(cid, true)
doPlayerUpdateOutfit(cid)
setCreatureMaxMana(cid, 0)
doPlayerAddMana(cid, -getCreatureMana(cid), false)
elseif (ticks > 1) then
doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
addEvent(checkLevitate, 500, cid, pokemon, playerPosition, ticks - 1)
end
end
end
end
function levitate(cid)
local toPosition = getCreaturePosition(cid)
local pokemon = getPlayerPokemon(cid)
local targetPos = getPositionAdjacent(pokemon, toPosition, true)
local pos = getCreaturePosition(pokemon)
if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
(targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
getPathToEx(pokemon, targetPos))) then
doCreatureSay(cid, string.format(__L(cid, "%s, let's levitate!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
if (targetPos) then
doCreatureWalkToPosition(pokemon, targetPos)
end
checkLevitate(cid, pokemon, toPosition, 20)
else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
end
end
function deLevitate(cid)
if (doPokemonCall(cid, getPlayerBall(cid))) then
doPlayerRemoveAbilitySpeedCondition(cid)
end
end
Se puderem da uma força, agradeço.
Abraço !
Edited by thlokoLink to post
Share on other sites
7 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now