• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

TFS 0.X [TFS 0.3.6][OTX2] Change level table to experience after client limit

middley

New Member
Joined
Oct 2, 2019
Messages
40
Reaction score
4
Good evening, while looking for a solution to the problem related to displaying the level above 65535, I found a certain code, I will enter it in bbcode below. After adding it - it actually changes the lines after the limit, but there is a problem with the level progress bar and the display of mana in percentage, what am I doing wrong? what is missing? I am using OTXServer2 under protocol 7.6. Thank you for all your help

Code :
C++:
void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg)
{
    msg->put<char>(0xA0);
    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);
    }

    msg->put<uint16_t>(int32_t(player->getFreeCapacity()));

    if (player->getLevel() >=0xFFFF)  {
        msg->put<uint32_t>(player->getPlayerInfo(PLAYERINFO_LEVEL));
        msg->put<uint16_t>(0);
            } else {

    if(player->getExperience() > 0x7FFFFFFF) {
    msg->put<uint32_t>(0x7FFFFFFF);
    } else {
    msg->put<uint32_t>(player->getExperience());
    }
    msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_LEVEL));
    }
    
    
    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);
    }
    
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVEL));
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
    #ifdef _MULTIPLATFORM76
    msg->put<char>(player->getPlayerInfo(PLAYERINFO_SOUL));
    #endif
}
 
The exp in tibia is cumulative meaning each level up exp doesnt reset back to 0.
This means that horribly high levels will eventually be out of accessible variable type (e.g. you would reach amount of experience that even uint_128t wouldnt be able to store).

The situation described above might be happening to you. I suggest calming down with levels lol.
 
Back
Top