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:
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);
}