Ir para conteúdo
  • Cadastre-se

Problema na barra de Life e Mana


Posts Recomendados

Olá, um amigo está montando um servidor e estou tentando ajudá-lo a resolver os problemas....
Sou leigo no asssunto, mas pesquiso para encontrar respostas...
Pesquisei muito antes de chegar aqui, e só cheguei porque não encontrei respostas.
O problema é que a barra de vida e de mana, está mostrando por porcentagem 100life/100mana
E a gente quer aquela contagem normal, tipo level 8 185life/35mana 

Se alguem puder ajudar, ele falou algo sobre source.
E está no Linux.
 

Esse é meu primeiro post no fórum, caso tenha postado no lugar errado apenas mova para o lugar certo, por favor.
Desde já agradeço.
Kradula,
Um abraço!

P.s: engraçado só achei gente querendo mudar do normal pra porcentagem, o meu caso é o contrário.😝

Link para o post
Compartilhar em outros sites
2 minutos atrás, Kradula disse:

E a gente quer aquela contagem normal, tipo level 8 185life/35mana 

https://tibiaking.com/forums/topic/55507-resolvidopedido-hp-mp-por-porcentagem/
só ver como ta o script na source, e fazer ao contraio, modificando o script de que faz a contagem pelo script padrão.

Link para o post
Compartilhar em outros sites
  • Sub-Admin

Só reverter o processo...


Em protocolgame.cpp procure por:

 

msg->put<uint16_t>(player->getHealth());

msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));

 

Substitua

:

if (player->getPlayerInfo(PLAYERINFO_MAXHEALTH) > 0)
    {
        msg->put<uint16_t>(uint16_t(player->getHealth() * 100 / player->getPlayerInfo(PLAYERINFO_MAXHEALTH)));
        msg->put<uint16_t>(100);
    }
    else
    {
        msg->put<uint16_t>(0);
        msg->put<uint16_t>(0);  
    }


Mude Para:

 

if (player->getPlayerInfo(PLAYERINFO_MAXHEALTH) > 0)
{
    msg->put<uint16_t>(player->getHealth());
    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
}
else
{
    msg->put<uint16_t>(0);
    msg->put<uint16_t>(0);
}

 

 

Depois procure por:

msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MANA));

msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA));

 

Substitua:


 if (player->getPlayerInfo(PLAYERINFO_MAXMANA) > 0)
    {
        msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MANA) * 100 / player->getPlayerInfo(PLAYERINFO_MAXMANA));
        msg->put<uint16_t>(100);
    }
    else
    {
        msg->put<uint16_t>(0);
        msg->put<uint16_t>(0);
    }

 

 

Muda Para:

 

 

if (player->getPlayerInfo(PLAYERINFO_MAXMANA) > 0)
{
    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MANA));
    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA));
}
else
{
    msg->put<uint16_t>(0);
    msg->put<uint16_t>(0);
}
 

 

Agora é só compilar sua sourcer

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

Olá, obrigado pelos feedbacks...
mas a principio o que mandou procurar no protocolgame.cpp não achou...
detalhe: a versão do Tibia é a 8.6

Ele procurou tudo q falava de maxhealth e mana e o resultado foi esse:

 

void ProtocolGame::AddPlayerStats(NetworkMessage &msg) {
    msg.addByte(0xA0);

    if (oldProtocol) {
        msg.add<uint16_t>(std::min<int32_t>(player->getHealth(), std::numeric_limits<uint16_t>::max()));
        msg.add<uint16_t>(std::min<int32_t>(player->getMaxHealth(), std::numeric_limits<uint16_t>::max()));
    } else {
        msg.add<uint32_t>(std::min<int32_t>(player->getHealth(), std::numeric_limits<uint16_t>::max()));
        msg.add<uint32_t>(std::min<int32_t>(player->getMaxHealth(), std::numeric_limits<uint16_t>::max()));
    }
if (!oldProtocol) {
        msg.add<uint32_t>(std::min<int32_t>(player->getMana(), std::numeric_limits<uint16_t>::max()));
        msg.add<uint32_t>(std::min<int32_t>(player->getMaxMana(), std::numeric_limits<uint16_t>::max()));
    } else {
        msg.add<uint16_t>(std::min<int32_t>(player->getMana(), std::numeric_limits<uint16_t>::max()));
        msg.add<uint16_t>(std::min<int32_t>(player->getMaxMana(), std::numeric_limits<uint16_t>::max()));

msg.add<uint32_t>(std::min<int32_t>(player->getHealth(), std::numeric_limits<uint16_t>::max()));
    msg.add<uint32_t>(std::min<int32_t>(player->getMaxHealth(), std::numeric_limits<uint16_t>::max()));
    msg.add<uint32_t>(std::min<int32_t>(player->getMana(), std::numeric_limits<uint16_t>::max()));
    msg.add<uint32_t>(std::min<int32_t>(player->getMaxMana(), std::numeric_limits<uint16_t>::max()));
NetworkMessage msg;
    msg.addByte(0x8C);
    msg.add<uint32_t>(cid);
    msg.addByte(std::min<uint8_t>(100, healthPercent));
    writeToOutputBuffer(msg);
NetworkMessage msg;
    msg.addByte(0x8B);
    msg.add<uint32_t>(cid);
    msg.addByte(11); // mana percent
    msg.addByte(std::min<uint8_t>(100, manaPercent));
    writeToOutputBuffer(msg);

Link para o post
Compartilhar em outros sites

Procure:

Citar

void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg)




Subistitua:

Citar

void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg)
{
    msg->put<char>(0xA0);
    if (player->getPlayerInfo(PLAYERINFO_MAXHEALTH) > 0)
    {
        float f_h_percent = (float) player->getHealth()  / player->getPlayerInfo(PLAYERINFO_MAXHEALTH);
        uint16_t h_percent = f_h_percent * 100;
        msg->put<uint16_t>(h_percent);
        msg->put<uint16_t>(100);
    }
    else
    {
        msg->put<uint16_t>(0);
        msg->put<uint16_t>(0);  
    }
    
    msg->put<uint32_t>(uint32_t(player->getFreeCapacity() * 100));
    uint64_t experience = player->getExperience();

    if(experience > 0x7FFFFFFF) // client debugs after 2,147,483,647 exp
        msg->put<uint32_t>(0x7FFFFFFF);
    else
        msg->put<uint32_t>(experience);

    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_LEVEL));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
    
    if (player->getPlayerInfo(PLAYERINFO_MAXMANA) > 0)
    {    
        float f_m_percent = (float) player->getPlayerInfo(PLAYERINFO_MANA) /  (float) player->getPlayerInfo(PLAYERINFO_MAXMANA);
        uint16_t m_percent = f_m_percent * 100;
        msg->put<uint16_t>(m_percent);
        msg->put<uint16_t>(100);
    }
    else
    {
        msg->put<uint16_t>(0);
        msg->put<uint16_t>(0);
    }
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVEL));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_SOUL));
    msg->put<uint16_t>(player->getStaminaMinutes());
}

 

Por esse:

Citar

void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg)
{
    msg->put<char>(0xA0);
    msg->put<uint16_t>(player->getHealth());
    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
    msg->put<uint32_t>(uint32_t(player->getFreeCapacity() * 100));
    uint64_t experience = player->getExperience();
    if(experience > 0x7FFFFFFF) // client debugs after 2,147,483,647 exp
        msg->put<uint32_t>(0x7FFFFFFF);
    else
        msg->put<uint32_t>(experience);

    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_LEVEL));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MANA));
    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVEL));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_SOUL));
    msg->put<uint16_t>(player->getStaminaMinutes());
}


Salve e copile !
 

aaaaaa.png

bbbb.png

Editado por Doidodepeda
qs (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo