mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 01:23:51 +00:00
Fix compilation errors from single-player removal
- Fixed corrupted header (removed orphaned code fragment) - Restored NPC callbacks needed for online animations - NpcDeathCallback, NpcRespawnCallback, NpcSwingCallback - These were incorrectly removed as "SP-only" but are used for animations in online mode - Removed calls to deleted methods: - getItemTemplateName, getItemTemplateQuality (used fallback in loot window) - notifyInventoryChanged, notifyEquipmentChanged (SP persistence markers) - Removed hearthstone single-player handling (now uses server) All online features preserved. Code should now compile.
This commit is contained in:
parent
82e59f77f1
commit
8377c640bb
4 changed files with 18 additions and 27 deletions
|
|
@ -236,13 +236,23 @@ public:
|
||||||
const std::vector<AuraSlot>& getPlayerAuras() const { return playerAuras; }
|
const std::vector<AuraSlot>& getPlayerAuras() const { return playerAuras; }
|
||||||
const std::vector<AuraSlot>& getTargetAuras() const { return targetAuras; }
|
const std::vector<AuraSlot>& getTargetAuras() const { return targetAuras; }
|
||||||
|
|
||||||
|
// NPC death callback (for animations)
|
||||||
|
using NpcDeathCallback = std::function<void(uint64_t guid)>;
|
||||||
|
void setNpcDeathCallback(NpcDeathCallback cb) { npcDeathCallback_ = std::move(cb); }
|
||||||
|
|
||||||
|
// NPC respawn callback (health 0 → >0, resets animation to idle)
|
||||||
|
using NpcRespawnCallback = std::function<void(uint64_t guid)>;
|
||||||
|
void setNpcRespawnCallback(NpcRespawnCallback cb) { npcRespawnCallback_ = std::move(cb); }
|
||||||
|
|
||||||
// Melee swing callback (for driving animation/SFX)
|
// Melee swing callback (for driving animation/SFX)
|
||||||
using MeleeSwingCallback = std::function<void()>;
|
using MeleeSwingCallback = std::function<void()>;
|
||||||
void setMeleeSwingCallback(MeleeSwingCallback cb) { meleeSwingCallback_ = std::move(cb); }
|
void setMeleeSwingCallback(MeleeSwingCallback cb) { meleeSwingCallback_ = std::move(cb); }
|
||||||
playerXp_ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// XP tracking (works in both single-player and server modes)
|
// NPC swing callback (plays attack animation on NPC)
|
||||||
|
using NpcSwingCallback = std::function<void(uint64_t guid)>;
|
||||||
|
void setNpcSwingCallback(NpcSwingCallback cb) { npcSwingCallback_ = std::move(cb); }
|
||||||
|
|
||||||
|
// XP tracking
|
||||||
uint32_t getPlayerXp() const { return playerXp_; }
|
uint32_t getPlayerXp() const { return playerXp_; }
|
||||||
uint32_t getPlayerNextLevelXp() const { return playerNextLevelXp_; }
|
uint32_t getPlayerNextLevelXp() const { return playerNextLevelXp_; }
|
||||||
uint32_t getPlayerLevel() const { return serverPlayerLevel_; }
|
uint32_t getPlayerLevel() const { return serverPlayerLevel_; }
|
||||||
|
|
@ -671,7 +681,10 @@ private:
|
||||||
uint32_t serverPlayerLevel_ = 1;
|
uint32_t serverPlayerLevel_ = 1;
|
||||||
static uint32_t xpForLevel(uint32_t level);
|
static uint32_t xpForLevel(uint32_t level);
|
||||||
|
|
||||||
|
NpcDeathCallback npcDeathCallback_;
|
||||||
|
NpcRespawnCallback npcRespawnCallback_;
|
||||||
MeleeSwingCallback meleeSwingCallback_;
|
MeleeSwingCallback meleeSwingCallback_;
|
||||||
|
NpcSwingCallback npcSwingCallback_;
|
||||||
bool playerDead_ = false;
|
bool playerDead_ = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2051,14 +2051,7 @@ void GameHandler::handleSpellHealLog(network::Packet& packet) {
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
void GameHandler::castSpell(uint32_t spellId, uint64_t targetGuid) {
|
void GameHandler::castSpell(uint32_t spellId, uint64_t targetGuid) {
|
||||||
// Hearthstone (8690) — handle locally when no server connection (single-player)
|
// Attack (6603) routes to auto-attack instead of cast
|
||||||
if (spellId == 8690 && hearthstoneCallback) {
|
|
||||||
LOG_INFO("Hearthstone: teleporting home");
|
|
||||||
hearthstoneCallback();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attack (6603) routes to auto-attack instead of cast (works without server)
|
|
||||||
if (spellId == 6603) {
|
if (spellId == 6603) {
|
||||||
uint64_t target = targetGuid != 0 ? targetGuid : this->targetGuid;
|
uint64_t target = targetGuid != 0 ? targetGuid : this->targetGuid;
|
||||||
if (target != 0) {
|
if (target != 0) {
|
||||||
|
|
|
||||||
|
|
@ -154,15 +154,10 @@ void GameScreen::render(game::GameHandler& gameHandler) {
|
||||||
// Character screen (C key toggle handled inside render())
|
// Character screen (C key toggle handled inside render())
|
||||||
inventoryScreen.renderCharacterScreen(gameHandler);
|
inventoryScreen.renderCharacterScreen(gameHandler);
|
||||||
|
|
||||||
if (inventoryScreen.consumeInventoryDirty()) {
|
|
||||||
gameHandler.notifyInventoryChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inventoryScreen.consumeEquipmentDirty() || gameHandler.consumeOnlineEquipmentDirty()) {
|
if (inventoryScreen.consumeEquipmentDirty() || gameHandler.consumeOnlineEquipmentDirty()) {
|
||||||
updateCharacterGeosets(gameHandler.getInventory());
|
updateCharacterGeosets(gameHandler.getInventory());
|
||||||
updateCharacterTextures(gameHandler.getInventory());
|
updateCharacterTextures(gameHandler.getInventory());
|
||||||
core::Application::getInstance().loadEquippedWeapons();
|
core::Application::getInstance().loadEquippedWeapons();
|
||||||
gameHandler.notifyEquipmentChanged();
|
|
||||||
inventoryScreen.markPreviewDirty();
|
inventoryScreen.markPreviewDirty();
|
||||||
// Update renderer weapon type for animation selection
|
// Update renderer weapon type for animation selection
|
||||||
auto* r = core::Application::getInstance().getRenderer();
|
auto* r = core::Application::getInstance().getRenderer();
|
||||||
|
|
@ -2017,14 +2012,7 @@ void GameScreen::renderLootWindow(game::GameHandler& gameHandler) {
|
||||||
itemName = info->name;
|
itemName = info->name;
|
||||||
quality = static_cast<game::ItemQuality>(info->quality);
|
quality = static_cast<game::ItemQuality>(info->quality);
|
||||||
} else {
|
} else {
|
||||||
// Fallback: look up name from item template DB (single-player)
|
itemName = "Item #" + std::to_string(item.itemId);
|
||||||
auto tplName = gameHandler.getItemTemplateName(item.itemId);
|
|
||||||
if (!tplName.empty()) {
|
|
||||||
itemName = tplName;
|
|
||||||
quality = gameHandler.getItemTemplateQuality(item.itemId);
|
|
||||||
} else {
|
|
||||||
itemName = "Item #" + std::to_string(item.itemId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ImVec4 qColor = InventoryScreen::getQualityColor(quality);
|
ImVec4 qColor = InventoryScreen::getQualityColor(quality);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -628,9 +628,6 @@ void InventoryScreen::render(game::Inventory& inventory, uint64_t moneyCopper) {
|
||||||
heldItem = game::ItemDef{};
|
heldItem = game::ItemDef{};
|
||||||
heldSource = HeldSource::NONE;
|
heldSource = HeldSource::NONE;
|
||||||
inventoryDirty = true;
|
inventoryDirty = true;
|
||||||
if (gameHandler_) {
|
|
||||||
gameHandler_->notifyInventoryChanged();
|
|
||||||
}
|
|
||||||
dropItemName_.clear();
|
dropItemName_.clear();
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue