SUMEKAZEKI
ADM Custom Rook
- Joined
- Sep 10, 2016
- Messages
- 39
- Reaction score
- 4
Hello, i have problem wiith store in game. Look on gif
C++:
void ProtocolGame::sendStoreError(StoreError_t errorType, const std::string& message) {
NetworkMessage msg;
msg.addByte(0xE0);
msg.addByte(errorType);
msg.addString(message);
writeToOutputBuffer(msg);
}
void ProtocolGame::requestPurchaseData(uint32_t offerId, StoreOfferType_t offerType) {
NetworkMessage msg;
msg.addByte(0xE1);
msg.add<uint32_t>(offerId);
msg.addByte(offerType);
writeToOutputBuffer(msg);
}
void ProtocolGame::sendCoinBalance() {
NetworkMessage msg;
msg.addByte(0xF2); // updating balance
msg.addByte(0x01);
msg.addByte(0xDF); // coins balance
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<uint16_t>(g_store->getCategories().size());
for (auto& category : g_store->getCategories()) {
msg.addString(category.getName());
msg.addString(category.getDescription());
msg.addByte(category.getCategoryState());
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.getOfferState());
std::string reason = "";
bool enabled = g_store->executeOnRender(player, &offer, reason);
msg.addByte(!enabled);
if (!enabled) {
msg.addString(reason + "\n");
}
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());
}
}
writeToOutputBuffer(msg);
}
void ProtocolGame::sendStoreHistory(uint32_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<uint32_t>(page);
int pages = storeHistory.size() / entriesPerPage + ((storeHistory.size() % entriesPerPage) > 0 ? 1 : 0);
msg.add<uint32_t>(pages);
msg.addByte((storeHistory.size() > entriesPerPage) ? entriesPerPage : storeHistory.size());
size_t count = 0;
for (const auto& entry : storeHistory) {
if (count++ >= entriesPerPage) {
break;
}
msg.add<uint32_t>(entry.timestamp);
msg.addByte(STORE_OFFERTYPE_OTHER); // offer 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);
}