Ir para conteúdo
  • 0

Mana e vida em porcentagem 100/100


MathhCunha

Pergunta

Olá,


Olha ja entrei em alguns ots e vi isso nele, e gostei muito.


Eu gostaria que mostra-se o tanto de mana em porcentagem



Exemplo : Tenho 10000 mana, só que mostraria : 100


Tenho 5000 vida, só que mostraria : 100


035e.png



Igual a da imagem, só que na verdade eu teria vida e mana iguais as citadas ali em cima.



Ip do server : rebhigh.prots.eu


Versão : 8.6


De uma olhada neste server que você vai poder entender melhor.


Vou tenta gravar um vídeo e posta aqui para ajudar mais.



Obrigado


Editado por MathhCunha
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Eu saberia até fazer se fosse pelo OtClient, só que pela imagem é do client normal do Tibia então to por fora;

Sim, e pelo o proprio Tibia. Eu ja vi em uns 3 servers americanos e um brasileiro vai incrementar isso no server. So que sabe, o dono nao ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0

Então, primeiramente encontre essa função em protocolgame.cpp:

void ProtocolGame::AddPlayerStats(NetworkMessage& msg)

Troque essas linha:

    msg->AddU16(player->getHealth());
    msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));

por:

    msg->AddU16((uint16_t)std::ceil((float)player->getHealth() * 100 / std::max(player->getMaxHealth(), 1)));
    msg->AddU16(100);

depois essas:

    msg->AddU16(player->getPlayerInfo(PLAYERINFO_MANA));
    msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA));

por:

    msg->AddU16((uint16_t)std::ceil((float)player->getMana() * 100 / std::max(player->getMaxMana(), 1)));
    msg->AddU16(100);

Agora apenas compile.

Editado por SUJA
Link para o comentário
Compartilhar em outros sites

  • 0
Suja, só por observação (eu não sei absolutamente nada de programação): na parte substituída de HP, não faltou um parênteses? Digo, tendo como base a parte de mana, devendo ser (uint16_t)std, e não (uint16_tstd?

OBS: Como eu já disse, não sei nada de programação. Talvez eu esteja errado.



msg->AddU16((uint16_t)std::ceil((float)player->getHealth() * 100 / std::max(player->getMaxHealth(), 1)));

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Então, primeiramente encontre essa função em protocolgame.cpp:

void ProtocolGame::AddPlayerStats(NetworkMessage& msg)

Troque essas linha:

    msg->AddU16(player->getHealth());
    msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));

por:

    msg->AddU16((uint16_t)std::ceil((float)player->getHealth() * 100 / std::max(player->getMaxHealth(), 1)));
    msg->AddU16(100);

depois essas:

    msg->AddU16(player->getPlayerInfo(PLAYERINFO_MANA));
    msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA));

por:

    msg->AddU16((uint16_t)std::ceil((float)player->getMana() * 100 / std::max(player->getMaxMana(), 1)));
    msg->AddU16(100);

Agora apenas compile.

@SUJA Valeu pela ajudar. Me ajudou bastante. Eu sei que este topico e pra VIDA E MANA em porcentagem. Mais você poderia me ajudar a aumentar o level maximo?

 

 

Suja, só por observação (eu não sei absolutamente nada de programação): na parte substituída de HP, não faltou um parênteses? Digo, tendo como base a parte de mana, devendo ser (uint16_t)std, e não (uint16_tstd?
OBS: Como eu já disse, não sei nada de programação. Talvez eu esteja errado.
msg->AddU16((uint16_t)std::ceil((float)player->getHealth() * 100 / std::max(player->getMaxHealth(), 1)));

 

@zipter98 Valeu por ver o erro e informar ao SUJA. se não fosse você eu teria colocar o errado e teria bugado o meu server. :)

Já arrumei, obrigado zipter.

@SUJA, ta dando erro na hora de compilar.

#msg->AddU16((uint16_t)std::ceil((float)player->getHealth() * 100 / std::max(player->getMaxHealth(), 1)));

 

Ta dando erro nesta parte ai.

Link para o comentário
Compartilhar em outros sites

  • 0

Seria mais fácil se você postasse o erro, mas... Tenta isso:

 

para health:

msg->addU16((uint16_t)std::ceil((float)player->getHealth() * 100 / std::max(player->getPlayerInfo(PLAYERINFO_MAXHEALTH), 1)));

para mana:

msg->addU16((uint16_t)std::ceil((float)player->getPlayerInfo(PLAYERINFO_MANA) * 100 / std::max(player->getPlayerInfo(PLAYERINFO_MAXMANA), 1)));

PS: Sobre o aumento do level é totalmente impossível, já que você usa o client da cip... Pois o client precisa receber a mesma integer que é enviado do server.

Editado por SUJA
Link para o comentário
Compartilhar em outros sites

  • 0

Seria mais fácil se você postasse o erro, mas... Tenta isso:

 

para health:

msg->addU16((uint16_t)std::ceil((float)player->getHealth() * 100 / std::max(player->getPlayerInfo(PLAYERINFO_MAXHEALTH), 1)));

para mana:

msg->addU16((uint16_t)std::ceil((float)player->getPlayerInfo(PLAYERINFO_MANA) * 100 / std::max(player->getPlayerInfo(PLAYERINFO_MAXMANA), 1)));

PS: Sobre o aumento do level é totalmente impossível, já que você usa o client da cip... Pois o client precisa receber a mesma integer que é enviado do server.

Já Arrumei o a health e mana bar. Mais Mesmo Assim Obrigado. Olha o negocio de aumentar o level, eu jogava um server que podia ir ate level 2kk. E ele não possuía client próprio, usava o próprio client da cip.

Editado por MathhCunha
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...