MA
pedido

Mana e vida em porcentagem 100/100

Por MathhCunha, 30 de dez. de 2013 em Scripts

12
6.1k
MathhCunhaM
30 de dezembro de 2013 às 23:06

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 Dezembro 30 por MathhCunha

WatersonW
31 de dezembro de 2013 às 02:00

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

MathhCunhaM
31 de dezembro de 2013 às 02:19

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.

ZarussZ
31 de dezembro de 2013 às 14:31

E na sources, eu vi isso ae em um outro forum so nao lembro qual =/ vo ve se acho aqui se eu acha posto aqui.

Nu77N
31 de dezembro de 2013 às 15:11

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 Dezembro 31 por SUJA

zipter98Z
31 de dezembro de 2013 às 15:21
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 Dezembro 31 por zipter98

Nu77N
31 de dezembro de 2013 às 15:32

Já arrumei, obrigado zipter.

MathhCunhaM
31 de dezembro de 2013 às 23:56

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.

Nu77N
01 de janeiro de 2014 às 01:01

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 Janeiro 1 por SUJA

MathhCunhaM
01 de janeiro de 2014 às 14:33

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 Janeiro 1 por MathhCunha

zipter98Z
01 de janeiro de 2014 às 16:19

Bom, suponho que então, dúvida sanada. Sobre o aumento de level máximo, peço que faça outro tópico com tal pedido.

 

Sanado, movido.

4 anos depois...
06 de agosto de 2018 às 01:19

eu fiz esse mesmo procedimento tudo certo, mais certo reset a vida vida 100 e mana 65k as vezes mana 100 e vida 65k