SK

[OTC] Adaptando seu OTC para aceitar a função doCreatureSetHideHealth

Por Skulls, 11 de fev. de 2016 em Tutoriais de Clients

19
5.5k
SkullsS
11 de fevereiro de 2016 às 02:11

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,

CaronteC
13 de fevereiro de 2016 às 11:57

Pô muito bom @@Skulls, tá trazendo conteúdos bem legais, continue assim :D

com certeza irei usar quando começar a trabalhar com OTClient.

FurabioF
13 de fevereiro de 2016 às 12:48

Belo tutorial, parabéns Skulls.

SkullsS
15 de fevereiro de 2016 às 08:48

Pô muito bom @@Skulls, tá trazendo conteúdos bem legais, continue assim :D

com certeza irei usar quando começar a trabalhar com OTClient.

Obrigado! Começa sim, te abre um leque enorme de possibilidades!

 

Belo tutorial, parabéns Skulls.

Obrigado!

AberosA
15 de fevereiro de 2016 às 15:31

@Skulls

Parabens pelo conteudo!

Editado Fevereiro 15 por Aberos

SkullsS
15 de fevereiro de 2016 às 17:11

@Skulls

Parabens pelo conteudo!

Obrigado! Vou aprendendo, ai trago coisas mais complexas mais pra frente! :p

SirarckenS
15 de fevereiro de 2016 às 17:25

Cara ,fico impressionado vocês são muito fodas ,parabéns.

AberosA
15 de fevereiro de 2016 às 17:29

Obrigado! Vou aprendendo, ai trago coisas mais complexas mais pra frente! :p

Qualquer coisa man e so chamar q eu ajudo com oq eu souber

SkullsS
17 de fevereiro de 2016 às 12:53

Qualquer coisa man e so chamar q eu ajudo com oq eu souber

O cara muito obrigado, pode deixar que precisando vou te amolar sim :p

1 mês depois...
PsyMcKenzieP
28 de março de 2016 às 14:16

O que isso faz? Tem alguma imagem?

SkullsS
04 de abril de 2016 às 00:05

O que isso faz? Tem alguma imagem?

Não, pois na verdade é só um bug fix. Existe uma função no TFS chamada creatureHideHealth que faz com que a vida da criatura não apareça e que funciona bem para cipclient. Porém, o OTC para de responder quando usado com ela e só volta quando a vida da criatura voltar a aparecer. Isso pq ele considera que o player estava morto e, portanto, não responde a suas ações. Esse tópico resolve esse problema e torna o hidehealth funcional para otc.

PsyMcKenzieP
04 de abril de 2016 às 00:15

Não, pois na verdade é só um bug fix. Existe uma função no TFS chamada creatureHideHealth que faz com que a vida da criatura não apareça e que funciona bem para cipclient. Porém, o OTC para de responder quando usado com ela e só volta quando a vida da criatura voltar a aparecer. Isso pq ele considera que o player estava morto e, portanto, não responde a suas ações. Esse tópico resolve esse problema e torna o hidehealth funcional para otc.

 

Ah sim, agora eu entendi, parabéns cara!

 

Saberia me dizer por que os mods que baixo, nenhum funciona? Apenas um "funcionou", mas tem um erro e por isso não funcionou.

SkullsS
04 de abril de 2016 às 00:21

 

Ah sim, agora eu entendi, parabéns cara!

 

Saberia me dizer por que os mods que baixo, nenhum funciona? Apenas um "funcionou", mas tem um erro e por isso não funcionou.

Bom, tem N fatores que podem fazer o mod não funcionar. É muito dificil dizer, ainda mais cada mod comportando de um jeito diferente. Apresentam algum erro ou algum comportamento diferente ou simplesmente não dão sinal de vida?

PsyMcKenzieP
04 de abril de 2016 às 00:25

Bom, tem N fatores que podem fazer o mod não funcionar. É muito dificil dizer, ainda mais cada mod comportando de um jeito diferente. Apresentam algum erro ou algum comportamento diferente ou simplesmente não dão sinal de vida?

Simplesmente não da sinal de vida, nem erro da kkk

SkullsS
04 de abril de 2016 às 00:28

Piores erros de se diagnosticar é os que não acontecem nada =/