mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-03 09:12:26 +00:00
[Bug Fix] Fix Bot Non-Melee Damage Messages (#4038)
# Notes - These were not displaying because bots pass the `attacker && attacker->GetOwner()` check which assumes they're a pet because we weren't confirming it wasn't a bot. # Image
This commit is contained in:
parent
490ed50c9f
commit
24578f6c1e
@ -4436,7 +4436,7 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
//this was done to simplify the code here (since we can only effectively skip one mob on queue)
|
//this was done to simplify the code here (since we can only effectively skip one mob on queue)
|
||||||
eqFilterType filter;
|
eqFilterType filter;
|
||||||
Mob* skip = attacker;
|
Mob* skip = attacker;
|
||||||
if (attacker && attacker->GetOwner()) {
|
if (attacker && attacker->IsPet() && !attacker->IsBot()) {
|
||||||
//attacker is a pet, let pet owners see their pet's damage
|
//attacker is a pet, let pet owners see their pet's damage
|
||||||
Mob* owner = attacker->GetOwner();
|
Mob* owner = attacker->GetOwner();
|
||||||
if (owner && owner->IsClient()) {
|
if (owner && owner->IsClient()) {
|
||||||
@ -4452,22 +4452,23 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
} else {
|
} else {
|
||||||
filter = FilterPetHits;
|
filter = FilterPetHits;
|
||||||
}
|
}
|
||||||
}
|
} else if (damage == -5) {
|
||||||
else if (damage == -5)
|
filter = FilterNone; //cant filter invulnerable
|
||||||
filter = FilterNone; //cant filter invulnerable
|
} else {
|
||||||
else
|
|
||||||
filter = FilterPetMisses;
|
filter = FilterPetMisses;
|
||||||
|
}
|
||||||
|
|
||||||
if (!FromDamageShield)
|
if (!FromDamageShield) {
|
||||||
entity_list.QueueCloseClients(
|
entity_list.QueueCloseClients(
|
||||||
this, /* Sender */
|
attacker, /* Sender */
|
||||||
outapp, /* packet */
|
outapp, /* packet */
|
||||||
false, /* Skip Sender */
|
false, /* Skip Sender */
|
||||||
((IsValidSpell(spell_id)) ? RuleI(Range, SpellMessages) : RuleI(Range, DamageMessages)),
|
((IsValidSpell(spell_id)) ? RuleI(Range, SpellMessages) : RuleI(Range, DamageMessages)),
|
||||||
0, /* don't skip anyone on spell */
|
0, /* don't skip anyone on spell */
|
||||||
true, /* Packet ACK */
|
true, /* Packet ACK */
|
||||||
filter /* eqFilterType filter */
|
filter /* eqFilterType filter */
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4476,13 +4477,32 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
else {
|
else {
|
||||||
//attacker is not a pet, send to the attacker
|
//attacker is not a pet, send to the attacker
|
||||||
//if the attacker is a client, try them with the correct filter
|
//if the attacker is a client, try them with the correct filter
|
||||||
if (attacker && (attacker->IsClient() || attacker->IsBot())) {
|
if (attacker && attacker->IsOfClientBot()) {
|
||||||
if ((IsValidSpell(spell_id) || FromDamageShield) && damage > 0) {
|
if ((IsValidSpell(spell_id) || FromDamageShield) && damage > 0) {
|
||||||
//special crap for spell damage, looks hackish to me
|
//special crap for spell damage, looks hackish to me
|
||||||
char val1[20] = { 0 };
|
char val1[20] = { 0 };
|
||||||
if (FromDamageShield) {
|
if (FromDamageShield) {
|
||||||
if (attacker->CastToClient()->GetFilter(FilterDamageShields) != FilterHide)
|
if (attacker->IsBot()) {
|
||||||
attacker->MessageString(Chat::DamageShield, OTHER_HIT_NONMELEE, GetCleanName(), ConvertArray(damage, val1));
|
Mob* owner = attacker->GetOwner();
|
||||||
|
|
||||||
|
if (owner->CastToClient()->GetFilter(FilterDamageShields) != FilterHide) {
|
||||||
|
owner->MessageString(
|
||||||
|
Chat::DamageShield,
|
||||||
|
OTHER_HIT_NONMELEE,
|
||||||
|
GetCleanName(),
|
||||||
|
ConvertArray(damage, val1)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (attacker->CastToClient()->GetFilter(FilterDamageShields) != FilterHide) {
|
||||||
|
attacker->MessageString(
|
||||||
|
Chat::DamageShield,
|
||||||
|
OTHER_HIT_NONMELEE,
|
||||||
|
GetCleanName(),
|
||||||
|
ConvertArray(damage, val1)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
entity_list.FilteredMessageCloseString(
|
entity_list.FilteredMessageCloseString(
|
||||||
@ -4500,7 +4520,7 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Only try to queue these packets to a client
|
// Only try to queue these packets to a client
|
||||||
else if (attacker && (attacker->IsClient())) {
|
else {
|
||||||
if (damage > 0) {
|
if (damage > 0) {
|
||||||
if (IsValidSpell(spell_id)) {
|
if (IsValidSpell(spell_id)) {
|
||||||
filter = iBuffTic ? FilterDOT : FilterSpellDamage;
|
filter = iBuffTic ? FilterDOT : FilterSpellDamage;
|
||||||
@ -4514,7 +4534,23 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
else
|
else
|
||||||
filter = FilterMyMisses;
|
filter = FilterMyMisses;
|
||||||
|
|
||||||
attacker->CastToClient()->QueuePacket(outapp, true, CLIENT_CONNECTED, filter);
|
if (attacker->IsClient()) {
|
||||||
|
attacker->CastToClient()->QueuePacket(outapp, true, CLIENT_CONNECTED, filter);
|
||||||
|
} else {
|
||||||
|
entity_list.QueueCloseClients(
|
||||||
|
attacker, /* Sender */
|
||||||
|
outapp, /* packet */
|
||||||
|
false, /* Skip Sender */
|
||||||
|
(
|
||||||
|
IsValidSpell(spell_id) ?
|
||||||
|
RuleI(Range, SpellMessages) :
|
||||||
|
RuleI(Range, DamageMessages)
|
||||||
|
),
|
||||||
|
0, /* don't skip anyone on spell */
|
||||||
|
true, /* Packet ACK */
|
||||||
|
filter /* eqFilterType filter */
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user