void ProtocolGame::AddPlayerStats(NetworkMessage* msg)
{
msg->AddByte(0xA0);
msg->AddU16(player->getHealth());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
msg->AddU16((int32_t)player->getFreeCapacity());
if (player->getLevel() >= 0xFFFF) {
msg->AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddU16(0);
} else {
if(player->getExperience() > 0x7FFFFFFF) {
msg->AddU32(0x7FFFFFFF);
} else {
msg->AddU32(player->getExperience());
}
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
}
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16(player->getMana())...
void ProtocolGame::AddPlayerStats(NetworkMessage& msg)
msg.add<uint64_t>(player->getExperience());
msg.add<uint16_t>(player->getLevel());
if (player->getLevel() >= std::numeric_limits<uint16_t>::max()) {
msg.add<uint64_t>(player->getLevel());
msg.add<uint16_t>(0);
} else {
msg.add<uint64_t>(player->getExperience());
msg.add<uint16_t>(player->getLevel())
}
i've found this but i don't know what to change :/ ?What I think you want is this:
Since the level is maxed out at 65k and experience can go higher, you want to show the level of the character on the experience bar instead. That way if the player is level 70k it will still show but on the experience bar.
That could be achieved by this:
on your protocolgame search for the funciton
Code:void ProtocolGame::AddPlayerStats(NetworkMessage& msg)
there are two lines like this:
Code:msg.add<uint64_t>(player->getExperience()); msg.add<uint16_t>(player->getLevel());
Change it to:
Code:if (player->getLevel() >= std::numeric_limits<uint16_t>::max()) { msg.add<uint64_t>(player->getLevel()); msg.add<uint16_t>(0); } else { msg.add<uint64_t>(player->getExperience()); msg.add<uint16_t>(player->getLevel()) }
What this will do:
If the player level is below 65k it'll show as usual, experience and level separeted, if its higher than 65k it'll show the real level on the experience bar and the level will be shown as 0 (zero)
void ProtocolGame::AddPlayerStats(NetworkMessage* msg)
{
msg->AddByte(0xA0);
msg->AddU16(player->getHealth());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
msg->AddU16((int32_t)player->getFreeCapacity());
#ifdef __ROGIER_HIGHLEVELS__
if(player->getLevel() >= 350)
msg->AddU32(0);
else
msg->AddU32(player->getExperience());
#else
msg->AddU32(player->getExperience());
if(player->getPlayerInfo(PLAYERINFO_LEVEL) > 65535)
msg->AddU16(0);
else
#endif //__ROGIER_HIGHLEVELS__
here you arePost the whole function so I can help you.
void ProtocolGame::AddPlayerStats(NetworkMessage* msg)
{
msg->AddByte(0xA0);
msg->AddU16(player->getHealth());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
msg->AddU16((int32_t)player->getFreeCapacity());
#ifdef __ROGIER_HIGHLEVELS__
if(player->getLevel() >= 350)
msg->AddU32(0);
else
msg->AddU32(player->getExperience());
#else
msg->AddU32(player->getExperience());
if(player->getPlayerInfo(PLAYERINFO_LEVEL) > 65535)
msg->AddU16(0);
else
#endif //__ROGIER_HIGHLEVELS__
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16(player->getMana());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA));
msg->AddByte(player->getMagicLevel());
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->AddU16(3360); //stamina(minutes) //3360 max?
}
void ProtocolGame::AddPlayerStats(NetworkMessage* msg)
{
msg->AddByte(0xA0);
msg->AddU16(player->getHealth());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
msg->AddU16((int32_t)player->getFreeCapacity());
if(player->getLevel() >= 65535) {
msg->AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddU16(0);
} else {
msg->AddU32(player->getExperience());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
}
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16(player->getMana());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA));
msg->AddByte(player->getMagicLevel());
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->AddU16(3360); //stamina(minutes) //3360 max?
}
while viewing my skills i take debugC++:void ProtocolGame::AddPlayerStats(NetworkMessage* msg) { msg->AddByte(0xA0); msg->AddU16(player->getHealth()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH)); msg->AddU16((int32_t)player->getFreeCapacity()); if(player->getLevel() >= 65535) { msg->AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL)); msg->AddU16(0); } else { msg->AddU32(player->getExperience()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL)); } msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT)); msg->AddU16(player->getMana()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA)); msg->AddByte(player->getMagicLevel()); msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT)); msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL)); msg->AddU16(3360); //stamina(minutes) //3360 max? }
void ProtocolGame::AddPlayerStats(NetworkMessage* msg)
{
msg->AddByte(0xA0);
msg->AddU16(player->getHealth());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
msg->AddU16((int32_t)player->getFreeCapacity());
if(player->getLevel() >= 65535) {
msg->AddU32((int32_t)player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddU16(0);
} else {
msg->AddU32(player->getExperience());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
}
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16(player->getMana());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA));
msg->AddByte(player->getMagicLevel());
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->AddU16(3360); //stamina(minutes) //3360 max?
}
while log into server i take debugtry this
C++:void ProtocolGame::AddPlayerStats(NetworkMessage* msg) { msg->AddByte(0xA0); msg->AddU16(player->getHealth()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH)); msg->AddU16((int32_t)player->getFreeCapacity()); if(player->getLevel() >= 65535) { msg->AddU32((int32_t)player->getPlayerInfo(PLAYERINFO_LEVEL)); msg->AddU16(0); } else { msg->AddU32(player->getExperience()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL)); } msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT)); msg->AddU16(player->getMana()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA)); msg->AddByte(player->getMagicLevel()); msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT)); msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL)); msg->AddU16(3360); //stamina(minutes) //3360 max? }
look this code worked well level in character is 18,488 and the exp is 1,211,685,040What level is the character you are testing it with?
void ProtocolGame::AddPlayerStats(NetworkMessage* msg)
{
msg->AddByte(0xA0);
msg->AddU16(player->getHealth());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
msg->AddU16((int32_t)player->getFreeCapacity());
if(player->getLevel() >= 65535) {
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddU16(0);
} else {
msg->AddU16(player->getExperience());
msg->AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL));
}
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16(player->getMana());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA));
msg->AddByte(player->getMagicLevel());
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->AddU16(3360); //stamina(minutes) //3360 max?
}
void ProtocolGame::AddPlayerStats(NetworkMessage* msg)
{
msg->AddByte(0xA0);
msg->AddU16(player->getHealth());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH));
msg->AddU16((int32_t)player->getFreeCapacity());
if (player->getLevel() >= 0xFFFF) {
msg->AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddU16(0);
} else {
if(player->getExperience() > 0x7FFFFFFF) {
msg->AddU32(0x7FFFFFFF);
} else {
msg->AddU32(player->getExperience());
}
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
}
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16(player->getMana());
msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA));
msg->AddByte(player->getMagicLevel());
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->AddU16(3360); //stamina(minutes) //3360 max?
}
workkeeeeed ty i love you as fuck !! thank you <3This should work fine.
C++:void ProtocolGame::AddPlayerStats(NetworkMessage* msg) { msg->AddByte(0xA0); msg->AddU16(player->getHealth()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH)); msg->AddU16((int32_t)player->getFreeCapacity()); if (player->getLevel() >= 0xFFFF) { msg->AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL)); msg->AddU16(0); } else { if(player->getExperience() > 0x7FFFFFFF) { msg->AddU32(0x7FFFFFFF); } else { msg->AddU32(player->getExperience()); } msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL)); } msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT)); msg->AddU16(player->getMana()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA)); msg->AddByte(player->getMagicLevel()); msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT)); msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL)); msg->AddU16(3360); //stamina(minutes) //3360 max? }
do you have any idea how to put max level?This should work fine.
C++:void ProtocolGame::AddPlayerStats(NetworkMessage* msg) { msg->AddByte(0xA0); msg->AddU16(player->getHealth()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXHEALTH)); msg->AddU16((int32_t)player->getFreeCapacity()); if (player->getLevel() >= 0xFFFF) { msg->AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL)); msg->AddU16(0); } else { if(player->getExperience() > 0x7FFFFFFF) { msg->AddU32(0x7FFFFFFF); } else { msg->AddU32(player->getExperience()); } msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL)); } msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT)); msg->AddU16(player->getMana()); msg->AddU16(player->getPlayerInfo(PLAYERINFO_MAXMANA)); msg->AddByte(player->getMagicLevel()); msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT)); msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL)); msg->AddU16(3360); //stamina(minutes) //3360 max? }
What do you mean by that? Max level for what? Where?do you have any idea how to put max level?
by the way i have this at player.hWhat do you mean by that? Max level for what? Where?
static uint64_t getExpForLevel(int32_t level)
{
return (uint64_t)std::ceil((double)(50 * level * level * level)/3 - (100 * level * level) + ((850 * level) / 3) - 200);
}
static uint64_t getExpForLevel(uint32_t lv)
{
if(lv > 777777)
return 0;
static std::map<uint32_t, uint64_t> cache;
lv--;
std::map<uint32_t, uint64_t>::iterator it = cache.find(lv);
if(it != cache.end())
return it->second;
uint64_t exp = ((50ULL * (lv+1ULL) / 3ULL - 100ULL) * (lv+1ULL) + 850ULL / 3ULL) * (lv+1ULL) - 200ULL;
cache[lv] = exp;
return exp;
}