A linha do erro já postei a correção : if #getCreatureSummons(_target) > 0 then
Outra coisa tem uma source ai rolando que tem sua próprio configuração exemplo os métodos abaixo, além disso precisa ajustar o método doDano2 algo assim por causa dele os danos não batem fora que o monstro criado pelo npc não pega os eventos do spaw.lua etc......
doSetMonsterGym(summon, focus)
doSetGym(summon, 1)
doSetAttackGym(summon, focus)
Se tiver o servidor limpo o método passado deve funcionar se tiver o serve cheio de adaptação igual ao que baixei para teste precisa procurar os problemas
https://i.gyazo.com/94b9ef1c0b210078b4577246b934199e.gif
Gente analisem o código.
se o player não tem pokemon se a batalha já esta maior ou igual ao turno 7 se a quantidade do turno e maior do que esta na lista gera a msg, precisam agora ver porque a variável do turno esta loka.
O nosso amigo acima deve a oportunidade de baixar o Skype e juntos eu iria ajudar a colocar 100% mais o cara não fez na boa só sabe postar que tem bug no sistema.
se quiser saber se e a variável que esta se perdendo coloca o código abaixo dentro desse if e passa aqui pra ver, eu não tenho esse servidor de vcs apenas editei o que foi me passado ai vcs tem que ta jeito.
print(challenger_turn) no console vai retornar o que esta nessa variável essa variável inicia = 0, e so altera quanto vc tem pokemon e o npc esta sem ai o npc joga outro pokemon e incrementa essa.
if not hasPokemon(challenger) or challenger_turn >= 7 or challenger_turn > #pokemons then
selfSay("Voce perdeu o duelo! Talvez algum outro momento voce vai me derrotar.")
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
Gostei tb posso fazer um do 0 mas se tem pronto porque perder tempo não é, fadasse oque pensam diz a lenda do Silvio Santos nada se faz tudo se copia, no poketibia todos utilizam as ideias do original importante e ter algo.
Poxa pleno 2020 e ninguém ai joga a solução.
Acima do método doSummonGymPokemon coloque o método abaixo, lembrando esse método esta em lua mais todos seus métodos existem em C++ aonde pode ser escrito em C++ se desejar assim como esta feito nos sources do tfs 1.3 que tenho basta analisar o código abaixo e fazer em C++ se assim desejar.
após colocar o método local se quiser pode adaptar e tb fazer global substituir os método
selfAttackCreature(getCreatureSummons(challenger)[1]) por selfAttackCreature()
No final do método doSummonGymPokemon tb colocar o selfAttackCreature() assim o pokemon já sai atacando sem delay.
E boa sorte na jornada.
function selfAttackCreature()
local function selfAttackCreature()
if #getCreatureSummons(getNpcCid()) > 0 and not isCreature(getCreatureTarget(getCreatureSummons(getNpcCid())[1])) then
local list = getSpectators(getCreaturePosition(getNpcCid()), 7, 7, false)
for i=0, table.getn(list) do
local _target = list[i]
if(_target ~= 0) then
if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then
if #getCreatureSummfighting = falseons(_target) > 0 then
doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 99856201, getNpcCid())
else
fighting = false
end
target = _target
break
end
end
end
end
end
Enfim abaixo exemplo de como esta em C++ não é o completo apenas base vejam o exemplo.
Melhor forma aprende a usar o debug do compilador ou seja aprenda a compilar seu projeto tenta se não conseguir tenta de novo e tenta de novo duvidas problemas abra tópico poste aqui qual versão do jogo qual ferramenta.
Seu erro acima baixa outro dev procure aqui no xtibia uma para compilar a sua source e 'recompila' o projeto.
algo assim.
for a = 1, 2 do
addEvent(function()
if not isCreature(cid) then return true end
doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(target), 3)
doDanoWithProtect(cid, FIREDAMAGE, getThingPosWithDebug(target), waba, min, max, 5)
end, a * 150)
end
Cara porque não cria uma tabela e faz pegar em .lua e depois if, ifelse meu deus assim que ter ajusto e coloco aqui se ja não fazerem antes.
Nenhuma critica apenas evolução.
Sem falar que retirar o getNameDisplacement e um erro furuto vai ver depois quer editar aonde vai ficar a barra para cada pokemon ja era.
Se bem que pensar que isso e ultrapassado ja que vi os desenv da pokexgames falarem que fizeram pelo editor de sprites
Boa noite.
Estou com um problema de loop na minha lista e realmente não sei qual erro estou cometendo.
Faço o loop na lista se não tiver esse player na área ele exclui porem quanto tenho 2 player na área um deles sai dessa área o sistema entra em loop nesse trecho do código.
bool achou = false;
for (Creature* creature : this->blockRespawList) {
SpectatorHashSet listAux;
g_game.map.getSpectators(listAux, this->position, false, true);
for (Creature* creatureAux : listAux) {
if (creatureAux == creature) {
achou = true;
}
}
if (!achou) {
this->removeBlockRespawList(creature);
this->setBlockRespaw(RESPAWN_NONE);
}
}
removeBlockRespawList
auto it = std::find(blockRespawList.begin(), blockRespawList.end(), creature);
if (it != blockRespawList.end()) {
creature->decrementReferenceCounter();
blockRespawList.erase(it);
}
Resolvido pode fechar.
bool achou = false;
auto it = blockRespawList.begin(), end = blockRespawList.end();
while (it != end) {
Creature* creature = *it;
SpectatorHashSet listAux;
g_game.map.getSpectators(listAux, this->position, false, true);
for (Creature* creatureAux : listAux) {
if (creatureAux == creature) {
achou = true;
}
}
if (!achou) {
this->removeBlockRespawList(creature);
this->setBlockRespaw(RESPAWN_NONE);
}
++it;
}
A sua arrogância me enoja, ninguém pôs defeito no seu sistema e se realmente é seu sistema não perderei meu tempo com um arrogante que provavelmente e outro que sabe pouco e diminui os outros pelo pouco que sabe, nesses 6,7 anos +- de xtibia aprendendo, errando e muitas duvidas nunca vi alguém tão arrogante e olha que já passou muitos caras foda aqui.
Não concordo que derruba o servidor, o que pode acontecer e o próprio jogar foder seu próprio cliente, ou então me mostre como derrubou o serve.
g_lua.bindClassMemberFunction<Item>("getName", &Item::getName);