mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 17:43:52 +00:00
Fix vendor: correct CMSG_BUY_ITEM field order (slot before itemId), handle buy failures, show token costs; remove level-up test button (animation triggers on real level-up)
This commit is contained in:
parent
b441452dcb
commit
60ebb4dc3f
3 changed files with 35 additions and 19 deletions
|
|
@ -1219,7 +1219,24 @@ void GameHandler::handlePacket(network::Packet& packet) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Opcode::SMSG_BUY_FAILED:
|
case Opcode::SMSG_BUY_FAILED: {
|
||||||
|
// vendorGuid(8) + itemId(4) + errorCode(1)
|
||||||
|
if (packet.getSize() - packet.getReadPos() >= 13) {
|
||||||
|
/*uint64_t vendorGuid =*/ packet.readUInt64();
|
||||||
|
/*uint32_t itemId =*/ packet.readUInt32();
|
||||||
|
uint8_t errCode = packet.readUInt8();
|
||||||
|
const char* msg = "Purchase failed.";
|
||||||
|
switch (errCode) {
|
||||||
|
case 2: msg = "You don't have enough money."; break;
|
||||||
|
case 4: msg = "Seller is too far away."; break;
|
||||||
|
case 5: msg = "That item is sold out."; break;
|
||||||
|
case 6: msg = "You can't carry any more items."; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
addSystemChatMessage(msg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case Opcode::MSG_RAID_TARGET_UPDATE:
|
case Opcode::MSG_RAID_TARGET_UPDATE:
|
||||||
break;
|
break;
|
||||||
case Opcode::SMSG_GAMEOBJECT_QUERY_RESPONSE:
|
case Opcode::SMSG_GAMEOBJECT_QUERY_RESPONSE:
|
||||||
|
|
|
||||||
|
|
@ -3056,8 +3056,8 @@ network::Packet ListInventoryPacket::build(uint64_t npcGuid) {
|
||||||
network::Packet BuyItemPacket::build(uint64_t vendorGuid, uint32_t itemId, uint32_t slot, uint32_t count) {
|
network::Packet BuyItemPacket::build(uint64_t vendorGuid, uint32_t itemId, uint32_t slot, uint32_t count) {
|
||||||
network::Packet packet(wireOpcode(Opcode::CMSG_BUY_ITEM));
|
network::Packet packet(wireOpcode(Opcode::CMSG_BUY_ITEM));
|
||||||
packet.writeUInt64(vendorGuid);
|
packet.writeUInt64(vendorGuid);
|
||||||
packet.writeUInt32(itemId);
|
packet.writeUInt32(slot); // vendor slot (1-based position in vendor list)
|
||||||
packet.writeUInt32(slot);
|
packet.writeUInt32(itemId); // item entry
|
||||||
packet.writeUInt32(count);
|
packet.writeUInt32(count);
|
||||||
packet.writeUInt8(0); // bag slot (0 = find any available bag slot)
|
packet.writeUInt8(0); // bag slot (0 = find any available bag slot)
|
||||||
return packet;
|
return packet;
|
||||||
|
|
|
||||||
|
|
@ -4813,13 +4813,21 @@ void GameScreen::renderVendorWindow(game::GameHandler& gameHandler) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::TableSetColumnIndex(1);
|
ImGui::TableSetColumnIndex(1);
|
||||||
uint32_t g = item.buyPrice / 10000;
|
if (item.extendedCost != 0 && item.buyPrice == 0) {
|
||||||
uint32_t s = (item.buyPrice / 100) % 100;
|
ImGui::TextColored(ImVec4(0.4f, 0.8f, 1.0f, 1.0f), "[Tokens]");
|
||||||
uint32_t c = item.buyPrice % 100;
|
} else {
|
||||||
bool canAfford = money >= item.buyPrice;
|
uint32_t g = item.buyPrice / 10000;
|
||||||
if (!canAfford) ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.3f, 0.3f, 1.0f));
|
uint32_t s = (item.buyPrice / 100) % 100;
|
||||||
ImGui::Text("%ug %us %uc", g, s, c);
|
uint32_t c = item.buyPrice % 100;
|
||||||
if (!canAfford) ImGui::PopStyleColor();
|
bool canAfford = money >= item.buyPrice;
|
||||||
|
if (!canAfford) ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.3f, 0.3f, 1.0f));
|
||||||
|
ImGui::Text("%ug %us %uc", g, s, c);
|
||||||
|
if (!canAfford) ImGui::PopStyleColor();
|
||||||
|
if (item.extendedCost != 0) {
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::TextColored(ImVec4(0.4f, 0.8f, 1.0f, 1.0f), "[+Tokens]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::TableSetColumnIndex(2);
|
ImGui::TableSetColumnIndex(2);
|
||||||
if (item.maxCount < 0) {
|
if (item.maxCount < 0) {
|
||||||
|
|
@ -5144,15 +5152,6 @@ void GameScreen::renderEscapeMenu() {
|
||||||
showEscapeMenu = false;
|
showEscapeMenu = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Spacing();
|
|
||||||
if (ImGui::Button("Test: Level Up", ImVec2(-1, 0))) {
|
|
||||||
uint32_t lvl = 1;
|
|
||||||
if (auto* gh = core::Application::getInstance().getGameHandler()) {
|
|
||||||
lvl = gh->getPlayerLevel();
|
|
||||||
}
|
|
||||||
triggerDing(lvl > 0 ? lvl : 1);
|
|
||||||
showEscapeMenu = false;
|
|
||||||
}
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 10.0f));
|
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 10.0f));
|
||||||
if (ImGui::Button("Back to Game", ImVec2(-1, 0))) {
|
if (ImGui::Button("Back to Game", ImVec2(-1, 0))) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue