mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 17:43:52 +00:00
Add spell impact sounds for player-targeted spells and improve achievement messages
- Play SpellSoundManager::playImpact() with correct school when the player is hit by another unit's spell (SMSG_SPELL_GO hitTargets check) - Show achievement name in SMSG_SERVER_FIRST_ACHIEVEMENT notifications using the already-loaded achievementNameCache_ - playImpact was fully implemented but never called; now wired up
This commit is contained in:
parent
63c8dfa304
commit
e56d3ca7de
1 changed files with 30 additions and 4 deletions
|
|
@ -4545,10 +4545,18 @@ void GameHandler::handlePacket(network::Packet& packet) {
|
||||||
if (packet.getSize() - packet.getReadPos() >= 12) {
|
if (packet.getSize() - packet.getReadPos() >= 12) {
|
||||||
/*uint64_t guid =*/ packet.readUInt64();
|
/*uint64_t guid =*/ packet.readUInt64();
|
||||||
uint32_t achievementId = packet.readUInt32();
|
uint32_t achievementId = packet.readUInt32();
|
||||||
char buf[192];
|
loadAchievementNameCache();
|
||||||
std::snprintf(buf, sizeof(buf),
|
auto nit = achievementNameCache_.find(achievementId);
|
||||||
"%s is the first on the realm to earn achievement #%u!",
|
char buf[256];
|
||||||
charName.c_str(), achievementId);
|
if (nit != achievementNameCache_.end() && !nit->second.empty()) {
|
||||||
|
std::snprintf(buf, sizeof(buf),
|
||||||
|
"%s is the first on the realm to earn: %s!",
|
||||||
|
charName.c_str(), nit->second.c_str());
|
||||||
|
} else {
|
||||||
|
std::snprintf(buf, sizeof(buf),
|
||||||
|
"%s is the first on the realm to earn achievement #%u!",
|
||||||
|
charName.c_str(), achievementId);
|
||||||
|
}
|
||||||
addSystemChatMessage(buf);
|
addSystemChatMessage(buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -12169,6 +12177,24 @@ void GameHandler::handleSpellGo(network::Packet& packet) {
|
||||||
currentCastSpellId = 0;
|
currentCastSpellId = 0;
|
||||||
castTimeRemaining = 0.0f;
|
castTimeRemaining = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Play impact sound when player is hit by any spell (from self or others)
|
||||||
|
bool playerIsHit = false;
|
||||||
|
for (const auto& tgt : data.hitTargets) {
|
||||||
|
if (tgt == playerGuid) { playerIsHit = true; break; }
|
||||||
|
}
|
||||||
|
if (playerIsHit && data.casterUnit != playerGuid) {
|
||||||
|
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
||||||
|
if (auto* ssm = renderer->getSpellSoundManager()) {
|
||||||
|
loadSpellNameCache();
|
||||||
|
auto it = spellNameCache_.find(data.spellId);
|
||||||
|
auto school = (it != spellNameCache_.end() && it->second.schoolMask)
|
||||||
|
? schoolMaskToMagicSchool(it->second.schoolMask)
|
||||||
|
: audio::SpellSoundManager::MagicSchool::ARCANE;
|
||||||
|
ssm->playImpact(school, audio::SpellSoundManager::SpellPower::MEDIUM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameHandler::handleSpellCooldown(network::Packet& packet) {
|
void GameHandler::handleSpellCooldown(network::Packet& packet) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue