Boa noite galera,
Estou a alguns dias tentando resolver um problema que tive com o OTC: ao usar a função doCreatureSetHideHealth simplesmente o player trava e não consegue fazer nada até o hidehealth ser desfeito.
Isso ocorre porque, na source do OTC, a declaração de morte é feita baseada em porcentagem de vida e essa inexiste quando o hideHealth é acionado, somente a vida total e a vida máxima é que continuam com valores relevantes.
Então, o OTC simplesmente te considera como um morto vivo quando você usa hideHealth e você não pode realizar nenhuma ação no jogo a não ser deslogar.
Após alguns dias fuçando consegui finalmente resolver o problema e vim compartilhar a solução com vocês.
1) Na source do seu OTC vá em creatures.cpp.
Crie as funções abaixo:
double Creature::getLocalPlayerHealth()
{
return g_game.getLocalPlayer()->getHealth();
}
bool Creature::isDead()
{
if (!isLocalPlayer()) return m_healthPercent <= 0;
double m_health = getLocalPlayerHealth();
return m_health <= 0;
}
Substitua:
if(m_healthPercent < 1) // creature is dead
return;
por
if(m_healthPercent < 1) // creature is dead
if (!isLocalPlayer()) return;
2) Vá em creature.h e troque a declaração da função isDead() por:
bool isDead();
3) Em game.cpp troque a função proccessDeath por:
void Game::processDeath(int deathType, int penality)
{
if (m_localPlayer->getHealth() > 0){
m_dead = true;
m_localPlayer->stopWalk();
g_lua.callGlobalField("g_game", "onDeath", deathType, penality);
}
}
Pronto, o seu OTC agora suporta a função doCreatureSetHideHealth (e de bônus você consegue enxergar o seu player com uma barra preta e seu nome, apesar dos outros não te verem).
Bom é simples, mas útil espero que ajude.
Abraços,