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,