Adding new event for sending spell

This commit is contained in:
Mats391
2025-12-31 10:13:29 +01:00
parent 69e0b07944
commit b0bf8c8812
3 changed files with 27 additions and 0 deletions
+2
View File
@@ -1441,6 +1441,8 @@ namespace game {
AURA_CAST_ON_SELF = 560,
AURA_CAST_ON_OTHER = 561,
SPELL_SENDING_EVENT = 562,
};
enum TypeMask {
+3
View File
@@ -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);
+22
View File
@@ -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<unsigned long long>(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<SendCastT>();
sendCast(cast, unk);