diff --git a/zone/attack.cpp b/zone/attack.cpp index ff9ec7c8d..31410aa0f 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -2324,8 +2324,11 @@ void NPC::Damage(Mob* other, int64 damage, uint16 spell_id, EQ::skills::SkillTyp //handle EVENT_ATTACK. Resets after we have not been attacked for 12 seconds if (attacked_timer.Check()) { - LogCombat("Triggering EVENT_ATTACK due to attack by [{}]", other ? other->GetName() : "nullptr"); - parse->EventNPC(EVENT_ATTACK, this, other, "", 0); + if (parse->HasQuestSub(GetNPCTypeID(), EVENT_ATTACK)) { + LogCombat("Triggering EVENT_ATTACK due to attack by [{}]", other ? other->GetName() : "nullptr"); + + parse->EventNPC(EVENT_ATTACK, this, other, "", 0); + } } attacked_timer.Start(CombatEventTimer_expire); @@ -3025,8 +3028,12 @@ void Mob::AddToHateList(Mob* other, int64 hate /*= 0*/, int64 damage /*= 0*/, bo } if (!wasengaged) { - if (IsNPC() && other->IsClient() && other->CastToClient()) - parse->EventNPC(EVENT_AGGRO, CastToNPC(), other, "", 0); + if (IsNPC() && other->IsClient() && other->CastToClient()) { + if (parse->HasQuestSub(GetNPCTypeID(), EVENT_AGGRO)) { + parse->EventNPC(EVENT_AGGRO, CastToNPC(), other, "", 0); + } + } + AI_Event_Engaged(other, iYellForHelp); } } diff --git a/zone/bot.cpp b/zone/bot.cpp index dfc4ea20e..23a117c84 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -5340,9 +5340,12 @@ void Bot::Damage(Mob *from, int64 damage, uint16 spell_id, EQ::skills::SkillType spell_id = SPELL_UNKNOWN; //handle EVENT_ATTACK. Resets after we have not been attacked for 12 seconds - if(attacked_timer.Check()) { - LogCombat("Triggering EVENT_ATTACK due to attack by [{}]", from->GetName()); - parse->EventBot(EVENT_ATTACK, this, from, "", 0); + if (attacked_timer.Check()) { + if (parse->BotHasQuestSub(EVENT_ATTACK)) { + LogCombat("Triggering EVENT_ATTACK due to attack by [{}]", from->GetName()); + + parse->EventBot(EVENT_ATTACK, this, from, "", 0); + } } attacked_timer.Start(CombatEventTimer_expire); diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 6fd4199cd..b78b5ecfe 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1923,7 +1923,10 @@ void Mob::AI_Event_Engaged(Mob *attacker, bool yell_for_help) //if the target dies before it goes off if (attacker->GetHP() > 0) { if (!CastToNPC()->GetCombatEvent() && GetHP() > 0) { - parse->EventNPC(EVENT_COMBAT, CastToNPC(), attacker, "1", 0); + if (parse->HasQuestSub(GetNPCTypeID(), EVENT_COMBAT)) { + parse->EventNPC(EVENT_COMBAT, CastToNPC(), attacker, "1", 0); + } + auto emote_id = GetEmoteID(); if (emote_id) { CastToNPC()->DoNPCEmote(EQ::constants::EmoteEventTypes::EnterCombat, emoteid); @@ -1938,7 +1941,9 @@ void Mob::AI_Event_Engaged(Mob *attacker, bool yell_for_help) } if (IsBot()) { - parse->EventBot(EVENT_COMBAT, CastToBot(), attacker, "1", 0); + if (parse->BotHasQuestSub(EVENT_COMBAT)) { + parse->EventBot(EVENT_COMBAT, CastToBot(), attacker, "1", 0); + } } } @@ -1966,7 +1971,11 @@ void Mob::AI_Event_NoLongerEngaged() { if (CastToNPC()->GetCombatEvent() && GetHP() > 0) { if (entity_list.GetNPCByID(GetID())) { auto emote_id = CastToNPC()->GetEmoteID(); - parse->EventNPC(EVENT_COMBAT, CastToNPC(), nullptr, "0", 0); + + if (parse->HasQuestSub(GetNPCTypeID(), EVENT_COMBAT)) { + parse->EventNPC(EVENT_COMBAT, CastToNPC(), nullptr, "0", 0); + } + if (emote_id) { CastToNPC()->DoNPCEmote(EQ::constants::EmoteEventTypes::LeaveCombat, emoteid); } @@ -1976,7 +1985,9 @@ void Mob::AI_Event_NoLongerEngaged() { } } } else if (IsBot()) { - parse->EventBot(EVENT_COMBAT, CastToBot(), nullptr, "0", 0); + if (parse->BotHasQuestSub(EVENT_COMBAT)) { + parse->EventBot(EVENT_COMBAT, CastToBot(), nullptr, "0", 0); + } } }