This commit is contained in:
aozhiwei 2023-03-01 19:05:20 +08:00
parent e8f951e4d5
commit 3611c08daf
3 changed files with 33 additions and 7 deletions

View File

@ -8,6 +8,7 @@
#include "room.h" #include "room.h"
#include "human.h" #include "human.h"
#include "ability.h" #include "ability.h"
#include "collision.h"
#include "mt/Buff.h" #include "mt/Buff.h"
#include "mt/Skill.h" #include "mt/Skill.h"
@ -153,8 +154,8 @@ void SprintBuff::Check(Position& pre_pos, Position& src_pos, std::map<int, long
} }
}, },
&xtimer_attacher); &xtimer_attacher);
return;
} }
return;
} }
break; break;
default: default:
@ -179,8 +180,8 @@ void SprintBuff::Check(Position& pre_pos, Position& src_pos, std::map<int, long
} }
auto itr = hited_objects.find(enemy->GetUniId()); auto itr = hited_objects.find(enemy->GetUniId());
if (itr != hited_objects.end()) { if (itr != hited_objects.end()) {
if ((owner->room->GetFrameNo() - itr->second) * FRAME_RATE_MS < if (owner->room->GetFrameNo() - itr->second <
meta->_int_buff_param5) { meta->_int_buff_param5 * SERVER_FRAME_RATE) {
continue; continue;
} }
} }
@ -194,7 +195,7 @@ void SprintBuff::Check(Position& pre_pos, Position& src_pos, std::map<int, long
void SprintBuff::OnEnemyHit(Creature* enemy) void SprintBuff::OnEnemyHit(Creature* enemy)
{ {
for (int buff_id : meta->_buff_param3_int_list) { for (int buff_id : meta->_buff_param3_int_list) {
enemy->TryAddBuff(owner, buff_id); enemy->TryAddBuff(owner, buff_id, skill_meta);
} }
if (skill_meta) { if (skill_meta) {
switch (skill_meta->GetMagicId()) { switch (skill_meta->GetMagicId()) {
@ -249,4 +250,25 @@ void SprintBuff::ProcXiongHun()
{ {
owner->TryAddBuff(owner, 209016); owner->TryAddBuff(owner, 209016);
owner->GetAbility()->DelSpeedAddition(skill_meta->_number_meta->_float_speed); 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);
}
}
);
} }

View File

@ -27,9 +27,13 @@ bool Collision::CheckCC(Creature* a, Creature* b)
return false; 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) bool Collision::CheckCB(Creature* c, Obstacle* b)

View File

@ -1820,7 +1820,7 @@ void Creature::GetHitEnemys(std::set<Creature*>& enemys, const glm::vec3 center,
[this, &enemys, center, radius, &min_distance] (Creature* c, bool& stop) [this, &enemys, center, radius, &min_distance] (Creature* c, bool& stop)
{ {
if (IsProperTarget(c)) { if (IsProperTarget(c)) {
float distance = GetPos().DistanceGlmVec3(center); float distance = c->GetPos().DistanceGlmVec3(center);
min_distance = std::min(min_distance, distance); min_distance = std::min(min_distance, distance);
if (distance < radius) { if (distance < radius) {
enemys.insert(c); enemys.insert(c);