From 19de0307b2bdf8cb7ab6043dbb0e4c5cea0ec0e9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 1 Sep 2023 10:51:00 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 4 +++- server/gameserver/creature.cc | 10 +++++----- server/gameserver/creature.h | 2 +- server/gameserver/virtualbullet.cc | 4 +++- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 86ebd418..e053441c 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -878,7 +878,9 @@ void Bullet::GetHitCreatures(BulletCheckResult& result) [this, &result] (Creature* c, bool& stop) { bool no_teammate = IsFlyHook(); - if (sender.Get()->IsProperTarget(c, no_teammate)) { + long long ignore_buff_effects = 0; + a8::SetBitFlag(ignore_buff_effects, kBET_Hide); + if (sender.Get()->IsProperTarget(c, no_teammate, ignore_buff_effects)) { if (gun_meta->ispenetrate() && hit_objects_.find(c->GetUniId()) != hit_objects_.end()) { //穿人 diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 5dec515c..f1a6f6d1 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1206,7 +1206,7 @@ void Creature::ResetAction() } } -bool Creature::IsProperTarget(Creature* target, bool no_teammate) +bool Creature::IsProperTarget(Creature* target, bool no_teammate, long long ignore_buff_effects) { if (target->dead) { return false; @@ -1220,11 +1220,11 @@ bool Creature::IsProperTarget(Creature* target, bool no_teammate) if (target->IsInvincible()) { return false; } - #if 0 - if (target->HasBuffEffect(kBET_Hide)) { - return false; + if (!a8::HasBitFlag(ignore_buff_effects, kBET_Hide)) { + if (target->HasBuffEffect(kBET_Hide)) { + return false; + } } - #endif if (target->HasBuffEffect(kBET_Driver)) { return false; } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 49b4e2a0..33a0e014 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -215,7 +215,7 @@ class Creature : public MoveableEntity void RemoveEffects(std::vector effect_uniids); void ClearEffect(); - bool IsProperTarget(Creature* target, bool no_teammate = false); + bool IsProperTarget(Creature* target, bool no_teammate = false, long long ignore_buff_effects = 0); bool IsEnemy(Creature* target); virtual void SelectSkillTargets(Skill* skill, const Position& target_pos, diff --git a/server/gameserver/virtualbullet.cc b/server/gameserver/virtualbullet.cc index 0102ad0e..5c2a1cba 100644 --- a/server/gameserver/virtualbullet.cc +++ b/server/gameserver/virtualbullet.cc @@ -257,7 +257,9 @@ void VirtualBullet::GetHitCreatures(BulletCheckResult& result) [this, &result] (Creature* c, bool& stop) { bool no_teammate = false; - if (sender.Get()->IsProperTarget(c, no_teammate)) { + long long ignore_buff_effects = 0; + a8::SetBitFlag(ignore_buff_effects, kBET_Hide); + if (sender.Get()->IsProperTarget(c, no_teammate, ignore_buff_effects)) { if (gun_meta->ispenetrate() && hit_objects_.find(c->GetUniId()) != hit_objects_.end()) { //穿人