From 57decc7d0d7a4a38399baefb0cfaba64a156454f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 27 Mar 2023 10:58:16 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/hold_shield.cc | 16 ++++++++++++++++ .../buff/select_target_with_self_pos.cc | 12 +++++++++++- server/gameserver/creature.cc | 2 ++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/server/gameserver/buff/hold_shield.cc b/server/gameserver/buff/hold_shield.cc index 3211aaba..9d1b14bf 100644 --- a/server/gameserver/buff/hold_shield.cc +++ b/server/gameserver/buff/hold_shield.cc @@ -1,5 +1,9 @@ #include "precompile.h" +#include +#include +#include + #include "buff/hold_shield.h" #include "skill.h" @@ -36,6 +40,18 @@ void HoldShieldBuff::Activate() std::set enemys; owner->GetHitEnemys(enemys, owner->GetPos().ToGlmVec3(), check_distance_); for (auto& enemy : enemys) { + float distance = owner->GetPos().Distance2D2(enemy->GetPos()); + float angle = 0.0f; + if (distance > 0.0001f) { + angle = GlmHelper::CalcAngle + (owner->GetAttackDir(), + enemy->GetPos().ToGlmVec3() - owner->GetPos().ToGlmVec3()); + } + float angle2 = glm::radians(180.0f) / 2.0f / A8_PI; + if (std::abs(angle) > angle2) { + continue; + } + auto itr = hited_objects.find(enemy->GetUniId()); if (itr != hited_objects.end()) { if (owner->room->GetFrameNo() - itr->second < diff --git a/server/gameserver/buff/select_target_with_self_pos.cc b/server/gameserver/buff/select_target_with_self_pos.cc index 67fbf273..2674f5d4 100644 --- a/server/gameserver/buff/select_target_with_self_pos.cc +++ b/server/gameserver/buff/select_target_with_self_pos.cc @@ -1,5 +1,9 @@ #include "precompile.h" +#include +#include +#include + #include "buff/select_target_with_self_pos.h" #include "creature.h" @@ -15,7 +19,13 @@ void SelectTargetWithSelfPosBuff::Activate() ( [this, &targets] (Creature* c, bool& stop) { - if (owner->GetPos().Distance2D2(c->GetPos()) < hold_param3_) { + float distance = owner->GetPos().Distance2D2(c->GetPos()); + float angle = 0.0f; + if (distance > 0.0001f) { + angle = GlmHelper::CalcAngle(owner->GetAttackDir(), + c->GetPos().ToGlmVec3() - owner->GetPos().ToGlmVec3()); + } + if (distance < hold_param3_ && std::abs(angle) <= glm::radians(hold_param4_) / 2.0f / A8_PI) { switch (meta->_int_buff_param1) { case kBST_All: { diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 5b18aab6..2040bfd1 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1987,9 +1987,11 @@ bool Creature::ReceiveExplosionDmg(Explosion* explosion) void Creature::CheckAbilityUsed() { if (ability_.use_count() > 1) { + #if 0 std::shared_ptr old_val = ability_; ability_ = std::make_shared(GetWeakPtrRef()); *ability_.get() = *(old_val.get()); + #endif } }