From aa7309819c5d714589266d406ff1e5a37a3d3d50 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 8 Sep 2021 19:07:26 +0800 Subject: [PATCH] 1 --- server/gameserver/buff.cc | 5 ++++- server/gameserver/creature.cc | 8 +++----- server/gameserver/creature.h | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index fc2a4a7..ff1ca0e 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -361,8 +361,11 @@ void Buff::ProcSprint() Buff* buff = (Buff*)param.sender.GetUserData(); std::set* hited_objects = (std::set*)param.param1.GetUserData(); std::set enemys; - buff->owner->GetHitEnemys(enemys); + buff->owner->GetHitEnemys(enemys, buff->meta->param2); for (auto& enemy : enemys) { + if (enemy->IsEntityType(ET_Car)) { + continue; + } if (hited_objects->find(enemy->GetUniId()) != hited_objects->end()) { hited_objects->insert(enemy->GetUniId()); for (int buff_id : buff->meta->param3_int_list) { diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 476420d..5730fae 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2259,17 +2259,15 @@ void Creature::SetDef(float def) ability.def = def; } -void Creature::GetHitEnemys(std::set& enemys) +void Creature::GetHitEnemys(std::set& enemys, float radius) { room->grid_service->TraverseCreatures (room->GetRoomIdx(), GetGridList(), - [this, &enemys] (Creature* c, bool& stop) + [this, &enemys, radius] (Creature* c, bool& stop) { if (IsProperTarget(c)) { - AabbCollider aabb_box; - c->GetHitAabbBox(aabb_box); - if (!c->dead && TestCollision(room, &aabb_box)) { + if (!c->dead && GetPos().Distance(c->GetPos()) < radius) { enemys.insert(c); } } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 75e0e61..e27a12f 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -224,7 +224,7 @@ class Creature : public MoveableEntity float GetMaxHP(); float GetDef(); void SetDef(float def); - void GetHitEnemys(std::set& enemys); + void GetHitEnemys(std::set& enemys, float radius); bool TryMove(const a8::Vec2& target_pos, a8::Vec2& out_pos); void SetInfiniteBulletMode(); void FindLocation();