mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-26 15:37:16 +00:00
more target validation for bots to prevent pets from getting hit with AEs and pets trying to attack invalid targets
This commit is contained in:
+19
-2
@@ -745,10 +745,27 @@ bool Mob::IsAttackAllowed(Mob *target, bool isSpellAttack)
|
|||||||
// can't damage own pet (applies to everthing)
|
// can't damage own pet (applies to everthing)
|
||||||
Mob *target_owner = target->GetOwner();
|
Mob *target_owner = target->GetOwner();
|
||||||
Mob *our_owner = GetOwner();
|
Mob *our_owner = GetOwner();
|
||||||
if(target_owner && target_owner == this)
|
Mob* target_ultimate_owner = target->GetUltimateOwner();
|
||||||
|
Mob* our_ultimate_owner = GetUltimateOwner();
|
||||||
|
|
||||||
|
if (target_owner && target_owner == this) {
|
||||||
return false;
|
return false;
|
||||||
else if(our_owner && our_owner == target)
|
}
|
||||||
|
else if (
|
||||||
|
IsBot() && target_ultimate_owner &&
|
||||||
|
(
|
||||||
|
(target_ultimate_owner == our_ultimate_owner) ||
|
||||||
|
(target_ultimate_owner->IsOfClientBot())
|
||||||
|
)
|
||||||
|
) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
else if (our_owner && our_owner == target) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (IsBot() && our_ultimate_owner && our_ultimate_owner == target) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// invalidate for swarm pets for later on if their owner is a corpse
|
// invalidate for swarm pets for later on if their owner is a corpse
|
||||||
if (IsNPC() && CastToNPC()->GetSwarmInfo() && our_owner &&
|
if (IsNPC() && CastToNPC()->GetSwarmInfo() && our_owner &&
|
||||||
|
|||||||
@@ -2116,6 +2116,13 @@ void Bot::AI_Process()
|
|||||||
|
|
||||||
// TARGET VALIDATION
|
// TARGET VALIDATION
|
||||||
if (!IsValidTarget(bot_owner, leash_owner, lo_distance, leash_distance, tar, tar_distance)) {
|
if (!IsValidTarget(bot_owner, leash_owner, lo_distance, leash_distance, tar, tar_distance)) {
|
||||||
|
if (HasPet()) {
|
||||||
|
if (tar && GetPet()->GetTarget() && GetPet()->GetTarget() == tar) {
|
||||||
|
GetPet()->WipeHateList();
|
||||||
|
GetPet()->SetTarget(nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user