• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

C++ store debbug

Sigoles

Discord: @sigoles
Joined
Nov 20, 2015
Messages
1,209
Solutions
2
Reaction score
154
Hello what changes (bytes and more) need to use store shop in C++?

My is debbuging, code:

Code:
void ProtocolGame::sendCoinBalance()
{
    NetworkMessage msg;
    msg.addByte(0xF2);
    msg.addByte(0x01);

    msg.addByte(0xDF);
    msg.addByte(0x01);

    msg.add<uint32_t>(player->coinBalance); //total coins
    msg.add<uint32_t>(player->coinBalance); //transferable coins

    writeToOutputBuffer(msg);
}

void ProtocolGame::updateCoinBalance()
{
    NetworkMessage msg;
    msg.addByte(0xF2);
    msg.addByte(0x00);

    writeToOutputBuffer(msg);

    g_dispatcher.addTask(
        createTask(std::bind([](ProtocolGame_ptr client) {
            auto coinBalance = IOAccount::getCoinBalance(client->player->getAccount());
            client->player->coinBalance = coinBalance;

            client->sendCoinBalance();
        }, getThis()))
    );
}

void ProtocolGame::sendStore()
{
    NetworkMessage msg;
    msg.addByte(0xFB);

    msg.addByte(0x00);
    //msg.add<uint32_t>(player->coinBalance);
    //msg.add<uint32_t>(player->coinBalance);

    msg.add<uint16_t>(g_store->getCategories().size());
    for (auto& category : g_store->getCategories()) {
        msg.addString(category.getName());
        msg.addString(category.getDescription());

        msg.addByte(category.getIcons().size());
        for (const auto& icon : category.getIcons()) {
            msg.addString(icon);
        }

        msg.addString(category.getParent());
    }   

    writeToOutputBuffer(msg);   

    updateCoinBalance();
}

void ProtocolGame::sendStoreOffers(StoreCategory& category)
{
    NetworkMessage msg;
    msg.addByte(0xFC);

    msg.addString(category.getName());
    
    msg.add<uint16_t>(category.getOffers().size());
    for (auto& offer : category.getOffers()) {
        msg.add<uint32_t>(offer.getId());
        msg.addString(offer.getName());
        msg.addString(offer.getDescription());

        msg.add<uint32_t>(offer.getPrice());
        msg.addByte(offer.getState());
        msg.addByte(!g_store->executeOnRender(player, &offer));

        msg.addByte(offer.getIcons().size());
        for (const auto& icon : offer.getIcons()) {
            msg.addString(icon);
        }

        msg.add<uint16_t>(offer.getSubOffers().size());
        for (auto& subOffer : offer.getSubOffers()) {
            msg.addString(subOffer.getName());
            msg.addString(subOffer.getDescription());

            msg.addByte(subOffer.getIcons().size());
            for (const auto& icon : subOffer.getIcons()) {
                msg.addString(icon);
            }

            msg.addString(subOffer.getParent()); //serviceType
        }
    }

    writeToOutputBuffer(msg);
}

void ProtocolGame::sendStoreHistory(uint16_t page, uint32_t entriesPerPage)
{
    // dispatcher thread
    std::vector<StoreTransaction> storeHistory;
    g_store->getTransactionHistory(player->getAccount(), page, entriesPerPage, storeHistory);

    if (storeHistory.size() == 0) {
        return sendStoreError(STORE_ERROR_HISTORY, "No entries yet.");
    }

    NetworkMessage msg;
    msg.addByte(0xFD);

    msg.add<uint16_t>(page);
    msg.addByte((storeHistory.size() > entriesPerPage) ? 0x01 : 0x00);

    uint8_t entries = std::min<uint8_t>(entriesPerPage, static_cast<uint32_t>(storeHistory.size()));
    msg.addByte(entries);
    size_t count = 0;
    for (const auto& entry : storeHistory) {
        if (count++ == entriesPerPage) {
            break;
        }

        msg.add<uint32_t>(entry.timestamp);
        msg.addByte(0x00); // product type
        msg.add<int32_t>(entry.coins);
        msg.addString(entry.description);
    }

    writeToOutputBuffer(msg);
}

void ProtocolGame::sendStorePurchaseCompleted(const std::string& message)
{
    NetworkMessage msg;
    msg.addByte(0xFE);
    
    msg.addByte(0x00);
    msg.addString(message);
    msg.add<uint32_t>(player->coinBalance);
    msg.add<uint32_t>(player->coinBalance);

    writeToOutputBuffer(msg);
}
 

Similar threads

Back
Top