• 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!

Remove Soul Points from Client (Hexeditor)

Terotrificy

Veteran OT User
Joined
Oct 18, 2020
Messages
401
Solutions
13
Reaction score
254
Location
Santiago, Chile.
Hi, i'm trying to edit the client 7.72 to use it in a server 7.4 style, that's the reason i'm trying to remove the Soul Points from the client Inventory. So far, i managed to remove the "Soul" word, but i don't know where is located the amount of points displayed in the client.
 
Hi, i'm trying to edit the client 7.72 to use it in a server 7.4 style, that's the reason i'm trying to remove the Soul Points from the client Inventory. So far, i managed to remove the "Soul" word, but i don't know where is located the amount of points displayed in the client.
the amount is being send by server so u can just force server to send nothing altough i recommend using otclientv8.
 
the amount is being send by server so u can just force server to send nothing altough i recommend using otclientv8.
Thank you. I already tried to use otclientv8, but it's not compatible with my distribution, too many glitchesl although is a very good client for the other distros. Do you have a clue where can i manage it in the server-side?
 
Thank you. I already tried to use otclientv8, but it's not compatible with my distribution, too many glitchesl although is a very good client for the other distros. Do you have a clue where can i manage it in the server-side?
what was your problem was it that you could not connect?
 
what was your problem was it that you could not connect?
No, it just have packets problems i think, reversed iterators in objects (for example, when i move a coin that is above a book, i move the book instead), bugs when opening doors ( black sqms), etc. It's just not compatible with my distro and i rather use my own otclient i designed (the 7.72 otclient) or the tibia client. At the momment, i am trying with the tibia client, that's why i need to remove the soul points.
 
No, it just have packets problems i think, reversed iterators in objects (for example, when i move a coin that is above a book, i move the book instead), bugs when opening doors ( black sqms), etc. It's just not compatible with my distro and i rather use my own otclient i designed (the 7.72 otclient) or the tibia client. At the momment, i am trying with the tibia client, that's why i need to remove the soul points.
so you want 7.72? here is all
protocolgame packets i think
C++:
if(player->isAccountManager())
    {
        switch(recvbyte)
        {
            case 0x14:
                parseLogout(msg);
                break;

            case 0x96:
                parseSay(msg);
                break;

            case 0x1E:
                parseReceivePing(msg);
                break;

            case 0xC9:
                parseUpdateTile(msg);
                break;

            case 0xE8:
                parseDebugAssert(msg);
                break;

            case 0xA1:
                parseCancelTarget(msg);
                break;

            default:
                parseCancelWalk(msg);
                break;
        }
    }
    else
    {
        switch(recvbyte)
        {
            case 0x14: // logout
                parseLogout(msg);
                break;

            case 0x1E: // keep alive / ping response
                parseReceivePing(msg);
                break;

            case 0x64: // move with steps
                parseAutoWalk(msg);
                break;

            case 0x65: // move north
            case 0x66: // move east
            case 0x67: // move south
            case 0x68: // move west
                parseMove(msg, (Direction)(recvbyte - 0x65));
                break;

            case 0x69: // stop-autowalk
                addGameTask(&Game::playerStopAutoWalk, player->getID());
                break;

            case 0x6A:
                parseMove(msg, NORTHEAST);
                break;

            case 0x6B:
                parseMove(msg, SOUTHEAST);
                break;

            case 0x6C:
                parseMove(msg, SOUTHWEST);
                break;

            case 0x6D:
                parseMove(msg, NORTHWEST);
                break;

            case 0x6F: // turn north
            case 0x70: // turn east
            case 0x71: // turn south
            case 0x72: // turn west
                parseTurn(msg, (Direction)(recvbyte - 0x6F));
                break;

            case 0x78: // throw item
                parseThrow(msg);
                break;

            case 0x7D: // Request trade
                parseRequestTrade(msg);
                break;

            case 0x7E: // Look at an item in trade
                parseLookInTrade(msg);
                break;

            case 0x7F: // Accept trade
                parseAcceptTrade(msg);
                break;

            case 0x80: // close/cancel trade
                parseCloseTrade();
                break;

            case 0x82: // use item
                parseUseItem(msg);
                break;

            case 0x83: // use item
                parseUseItemEx(msg);
                break;

            case 0x84: // battle window
                parseBattleWindow(msg);
                break;

            case 0x85: //rotate item
                parseRotateItem(msg);
                break;

            case 0x87: // close container
                parseCloseContainer(msg);
                break;

            case 0x88: //"up-arrow" - container
                parseUpArrowContainer(msg);
                break;

            case 0x89:
                parseTextWindow(msg);
                break;

            case 0x8A:
                parseHouseWindow(msg);
                break;

            case 0x8C:
                parseLookAt(msg);
                break;

            case 0x8D:
                parseLookInBattleList(msg);
                break;

            case 0x96: // say something
                parseSay(msg);
                break;

            case 0x97: // request channels
                parseGetChannels(msg);
                break;

            case 0x98: // open channel
                parseOpenChannel(msg);
                break;

            case 0x99: // close channel
                parseCloseChannel(msg);
                break;

            case 0x9A: // open priv
                parseOpenPrivate(msg);
                break;

            case 0x9B: //process report
                parseProcessRuleViolation(msg);
                break;

            case 0x9C: //gm closes report
                parseCloseRuleViolation(msg);
                break;

            case 0x9D: //player cancels report
                parseCancelRuleViolation(msg);
                break;

            case 0xA0: // set attack and follow mode
                parseFightModes(msg);
                break;

            case 0xA1: // attack
                parseAttack(msg);
                break;

            case 0xA2: //follow
                parseFollow(msg);
                break;

            case 0xA3: // invite party
                parseInviteToParty(msg);
                break;

            case 0xA4: // join party
                parseJoinParty(msg);
                break;

            case 0xA5: // revoke party
                parseRevokePartyInvite(msg);
                break;

            case 0xA6: // pass leadership
                parsePassPartyLeadership(msg);
                break;

            case 0xA7: // leave party
                parseLeaveParty(msg);
                break;

            case 0xAA:
                parseCreatePrivateChannel(msg);
                break;

            case 0xAB:
                parseChannelInvite(msg);
                break;

            case 0xAC:
                parseChannelExclude(msg);
                break;

            case 0xBE: // cancel move
                parseCancelMove(msg);
                break;

            case 0xC9: //client request to resend the tile
                parseUpdateTile(msg);
                break;

            case 0xCA: //client request to resend the container (happens when you store more than container maxsize)
                parseUpdateContainer(msg);
                break;

            case 0xD2: // request outfit
                if((!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges) || !g_config.getBool(
                    ConfigManager::DISABLE_OUTFITS_PRIVILEGED)) && (g_config.getBool(ConfigManager::ALLOW_CHANGEOUTFIT)
                    || g_config.getBool(ConfigManager::ALLOW_CHANGECOLORS)))
                    parseRequestOutfit(msg);
                break;

            case 0xD3: // set outfit
                if((!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges) || !g_config.getBool(ConfigManager::DISABLE_OUTFITS_PRIVILEGED))
                    && (g_config.getBool(ConfigManager::ALLOW_CHANGECOLORS) || g_config.getBool(ConfigManager::ALLOW_CHANGEOUTFIT)))
                    parseSetOutfit(msg);
                break;

                break;
            case 0xDC:
                parseAddVip(msg);
                break;

            case 0xDD:
                parseRemoveVip(msg);
                break;

            case 0xE6:
                parseBugReport(msg);
                break;

            case 0xE7:
                parseViolationWindow(msg);
                break;

            case 0xE8:
                parseDebugAssert(msg);
                break;

            default:
            {      
                 bool success = false;          
            if(g_config.getBool(ConfigManager::BAN_UNKNOWN_BYTES))
                {
                    if(!player || player->isRemoved())
                    return;

                    Account account = IOLoginData::getInstance()->loadAccount(player->getAccount(), true);
                       
                       if(IOBan::getInstance()->addAccountBanishment(account.number, -1, 19, ACTION_DELETION, "using unoffical software.", 0, player->guid))
                    {
                    success = true;
                    }

                if (success) {
                    // Broadcast the Botter
                    /*std::stringstream ss;
                    ss << "[SYSTEM] Player: " << player->getName() << " has been detected using unofficial software to play.";
                    g_game.broadcastMessage(ss.str(), MSG_STATUS_WARNING);
                    */
                    Scheduler::getInstance().addEvent(createSchedulerTask(1000, boost::bind(&Game::kickPlayer, &g_game, player->getID(), false)));
                   }
                }
            }

        }
    }

i had to change them too

but anyways i think u need to remove that
C++:
msg->put<char>(player->getPlayerInfo(PLAYERINFO_SOUL));
 
Thank you mate!
Post automatically merged:

Bump. It didn't work, tibia client crashes because it doesn't find the packets. Anyone know how to remove soul from tibia client 7.72?
 
Last edited:
TFS 1.0+
In protocolgame.cpp find:
void ProtocolGame::AddPlayerStats(NetworkMessage& msg)
then change:
msg.addByte(player->getSoul());
to for example
msg.addByte(0x90);
0x90 is hexadecimal format. It will display always 144. I'd suggest you to convert displaying numbers to empty string or completely remove it from the client but i have no idea how. u need to talk with the guys from Tibiantis, they have done it.

more info:
 
i beleive we need to set some breakpoints to stop reading the bytes by client. can use ollydbg, im still dealing with it, when i make client 7.4 on 7.72i will upload it
 
Back
Top