From 3611c08daf22788ba51cbe7ccb28c2cb69948008 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 1 Mar 2023 19:05:20 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/sprint.cc | 30 ++++++++++++++++++++++++++---- server/gameserver/collision.cc | 8 ++++++-- server/gameserver/creature.cc | 2 +- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/server/gameserver/buff/sprint.cc b/server/gameserver/buff/sprint.cc index dd8bbfff..bfe2c8fc 100644 --- a/server/gameserver/buff/sprint.cc +++ b/server/gameserver/buff/sprint.cc @@ -8,6 +8,7 @@ #include "room.h" #include "human.h" #include "ability.h" +#include "collision.h" #include "mt/Buff.h" #include "mt/Skill.h" @@ -153,8 +154,8 @@ void SprintBuff::Check(Position& pre_pos, Position& src_pos, std::mapGetUniId()); if (itr != hited_objects.end()) { - if ((owner->room->GetFrameNo() - itr->second) * FRAME_RATE_MS < - meta->_int_buff_param5) { + if (owner->room->GetFrameNo() - itr->second < + meta->_int_buff_param5 * SERVER_FRAME_RATE) { continue; } } @@ -194,7 +195,7 @@ void SprintBuff::Check(Position& pre_pos, Position& src_pos, std::map_buff_param3_int_list) { - enemy->TryAddBuff(owner, buff_id); + enemy->TryAddBuff(owner, buff_id, skill_meta); } if (skill_meta) { switch (skill_meta->GetMagicId()) { @@ -249,4 +250,25 @@ void SprintBuff::ProcXiongHun() { owner->TryAddBuff(owner, 209016); owner->GetAbility()->DelSpeedAddition(skill_meta->_number_meta->_float_speed); + owner->room->grid_service->TraverseCreatures + (owner->room->GetRoomIdx(), + owner->GetGridList(), + [this] (Creature* c, bool& stop) + { + if (c->dead) { + return; + } + if (!owner->IsProperTarget(c)) { + return; + } + if (Collision::CheckCC(owner, + skill_meta->_number_meta->_float_range3, + c, + c->GetHitRadius())) { + c->TryAddBuffAndSetTime(owner, + kVertigoEffectBuffId, + skill_meta->_number_meta->_float_time * SERVER_FRAME_RATE); + } + } + ); } diff --git a/server/gameserver/collision.cc b/server/gameserver/collision.cc index 50f6d86c..f8e211ce 100644 --- a/server/gameserver/collision.cc +++ b/server/gameserver/collision.cc @@ -27,9 +27,13 @@ bool Collision::CheckCC(Creature* a, Creature* b) return false; } -bool Collision::CheckCC(Creature* a, float radius, Creature* b, float radis) +bool Collision::CheckCC(Creature* a, float a_radius, Creature* b, float b_radius) { - return false; + return a8::IntersectCylinderCylinder + ( + a->GetPos().ToGlmVec3(), a_radius, 10, + b->GetPos().ToGlmVec3(), b_radius, 10 + ); } bool Collision::CheckCB(Creature* c, Obstacle* b) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 933c2250..bbfebabe 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1820,7 +1820,7 @@ void Creature::GetHitEnemys(std::set& enemys, const glm::vec3 center, [this, &enemys, center, radius, &min_distance] (Creature* c, bool& stop) { if (IsProperTarget(c)) { - float distance = GetPos().DistanceGlmVec3(center); + float distance = c->GetPos().DistanceGlmVec3(center); min_distance = std::min(min_distance, distance); if (distance < radius) { enemys.insert(c);