From eb02525d363ac4677078b6518087df51b349c14e Mon Sep 17 00:00:00 2001 From: Aeadoin <109764533+Aeadoin@users.noreply.github.com> Date: Wed, 12 Oct 2022 21:39:53 -0400 Subject: [PATCH] [Feature] Add Support for "Show Mine Only" Filters (#2484) * [Feature] Add Support for "Show Mine Only" Filters * Added "Show Mine Only" support for HoTs * remove this-> as it's implied. --- common/eq_constants.h | 2 +- zone/attack.cpp | 12 +++++++----- zone/client.cpp | 9 +++------ zone/effects.cpp | 6 +++--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/common/eq_constants.h b/common/eq_constants.h index 4f3c89f7a..3b06001dd 100644 --- a/common/eq_constants.h +++ b/common/eq_constants.h @@ -718,7 +718,7 @@ typedef enum { FilterPetMisses = 21, //0=show, 1=hide FilterFocusEffects = 22, //0=show, 1=hide FilterPetSpells = 23, //0=show, 1=hide - FilterHealOverTime = 24, //0=show, 1=hide + FilterHealOverTime = 24, //0=show, 1=mine only, 2=hide FilterUnknown25 = 25, FilterUnknown26 = 26, FilterUnknown27 = 27, diff --git a/zone/attack.cpp b/zone/attack.cpp index 789ef95d5..734cb1b68 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -4050,12 +4050,14 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons attacker->MessageString(Chat::DamageShield, OTHER_HIT_NONMELEE, GetCleanName(), ConvertArray(damage, val1)); } else { - entity_list.MessageCloseString( - this, /* Sender */ - true, /* Skip Sender */ + entity_list.FilteredMessageCloseString( + attacker, /* Sender */ + false, /* Sender is attacker, so do not skip */ RuleI(Range, SpellMessages), Chat::NonMelee, /* 283 */ + FilterSpellDamage, /* FilterType: 13 */ HIT_NON_MELEE, /* %1 hit %2 for %3 points of non-melee damage. */ + 0, attacker->GetCleanName(), /* Message1 */ GetCleanName(), /* Message2 */ ConvertArray(damage, val1) /* Message3 */ @@ -4215,7 +4217,7 @@ void Mob::HealDamage(uint64 amount, Mob *caster, uint16 spell_id) // message to target if (IsClient() && caster != this) { if (CastToClient()->ClientVersionBit() & EQ::versions::maskSoFAndLater) - FilteredMessageString(this, Chat::NonMelee, FilterHealOverTime, + FilteredMessageString(caster, Chat::NonMelee, FilterHealOverTime, HOT_HEALED_OTHER, caster->GetCleanName(), itoa(acthealed), spells[spell_id].name); else @@ -4231,7 +4233,7 @@ void Mob::HealDamage(uint64 amount, Mob *caster, uint16 spell_id) YOU_HEAL, GetCleanName(), itoa(acthealed)); } } - else { + else if (CastToClient()->GetFilter(FilterHealOverTime) != (FilterShowSelfOnly || FilterHide)) { Message(Chat::NonMelee, "You have been healed for %d points of damage.", acthealed); } } diff --git a/zone/client.cpp b/zone/client.cpp index 9bc6dd5b3..d4a771612 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -3156,10 +3156,9 @@ void Client::ServerFilter(SetServerFilter_Struct* filter){ if (ClientVersionBit() & EQ::versions::maskSoDAndLater) { if (filter->filters[FilterHealOverTime] == 0) ClientFilters[FilterHealOverTime] = FilterShow; - // This is called 'Show Mine Only' in the clients, but functions the same as show - // so instead of apply special logic, just set to show + // This is called 'Show Mine Only' in the clients else if (filter->filters[FilterHealOverTime] == 1) - ClientFilters[FilterHealOverTime] = FilterShow; + ClientFilters[FilterHealOverTime] = FilterShowSelfOnly; else ClientFilters[FilterHealOverTime] = FilterHide; } else { @@ -3277,14 +3276,12 @@ bool Client::FilteredMessageCheck(Mob *sender, eqFilterType filter) else if (mode == FilterHide) return false; - if (!sender && mode == FilterHide) { + if (sender != this && (mode == FilterHide || mode == FilterShowSelfOnly)) { return false; } else if (sender) { if (this == sender) { if (mode == FilterHide) // don't need to check others return false; - } else if (mode == FilterShowSelfOnly) { // we know sender isn't us - return false; } else if (mode == FilterShowGroupOnly) { Group *g = GetGroup(); Raid *r = GetRaid(); diff --git a/zone/effects.cpp b/zone/effects.cpp index 0a87237e7..82353aa46 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -123,9 +123,9 @@ int64 Mob::GetActSpellDamage(uint16 spell_id, int64 value, Mob* target) { else if (IsNPC() && CastToNPC()->GetSpellScale()) value = int64(static_cast(value) * CastToNPC()->GetSpellScale() / 100.0f); - entity_list.MessageCloseString( - this, true, 100, Chat::SpellCrit, - OTHER_CRIT_BLAST, GetName(), itoa(-value)); + entity_list.FilteredMessageCloseString( + this, true, 100, Chat::SpellCrit, FilterSpellCrits, + OTHER_CRIT_BLAST, 0, GetName(), itoa(-value)); if (IsClient()) MessageString(Chat::SpellCrit, YOU_CRIT_BLAST, itoa(-value));