diff --git a/nampower/game.hpp b/nampower/game.hpp index 1fd1bed..b6dcc77 100644 --- a/nampower/game.hpp +++ b/nampower/game.hpp @@ -1441,6 +1441,8 @@ namespace game { AURA_CAST_ON_SELF = 560, AURA_CAST_ON_OTHER = 561, + + SPELL_SENDING_EVENT = 562, }; enum TypeMask { diff --git a/nampower/main.cpp b/nampower/main.cpp index 53f1932..b6fb9cc 100644 --- a/nampower/main.cpp +++ b/nampower/main.cpp @@ -1318,6 +1318,9 @@ namespace Nampower { char SPELL_DAMAGE_EVENT_OTHER[] = "SPELL_DAMAGE_EVENT_OTHER"; addCustomEvent(game::SPELL_DAMAGE_EVENT_OTHER, SPELL_DAMAGE_EVENT_OTHER); + char SPELL_SENDING_EVENT[] = "SPELL_SENDING_EVENT"; + addCustomEvent(game::SPELL_SENDING_EVENT, SPELL_SENDING_EVENT); + char DEBUFF_ADDED_SELF[] = "DEBUFF_ADDED_SELF"; addCustomEvent(game::DEBUFF_ADDED_SELF, DEBUFF_ADDED_SELF); diff --git a/nampower/spellcast.cpp b/nampower/spellcast.cpp index ff93c67..354e476 100644 --- a/nampower/spellcast.cpp +++ b/nampower/spellcast.cpp @@ -344,6 +344,21 @@ namespace Nampower { delete[] guidStr; } + void + TriggerSpellSendingEvent(uint32_t spellId, std::uint64_t guid) { + char format[] = "%d%s"; + char *guidStr = new char[21]; // 2 for 0x prefix, 18 for the number, and 1 for '\0' + std::snprintf(guidStr, 21, "0x%016llX", static_cast(guid)); + + ((int (__cdecl *)(int, char *, uint32_t, char *)) Offsets::SignalEventParam)( + game::SPELL_SENDING_EVENT, // SPELL_SENDING_EVENT event we are adding + format, + spellId, + guidStr); + + delete[] guidStr; + } + void clearCastingSpell() { // clearing current casting spell id if needed // this prevents client from failing to cast spells without a casttime @@ -1047,6 +1062,13 @@ namespace Nampower { } void SendCastHook(hadesmem::PatchDetourBase *detour, game::SpellCast *cast, char unk) { + + if (cast != nullptr && cast->itemTarget == 0 && cast->caster == game::ClntObjMgrGetActivePlayerGuid()) { + const auto guid = cast->unitTarget; + const auto spellId = cast->spellId; + TriggerSpellSendingEvent(spellId, guid); + } + auto const sendCast = detour->GetTrampolineT(); sendCast(cast, unk);