From b5840bd56edf917e0d780888043dc6e8c0f3adb8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 6 Aug 2021 08:32:50 +0000 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 3 +-- server/gameserver/hero.ai.cc | 14 ++++++++++++++ server/gameserver/roomobstacle.h | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index de522bc..2bd8964 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1538,8 +1538,7 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance) } if (HasBuffEffect(kBET_Jump) || - HasBuffEffect(kBET_Fly) || - HasBuffEffect(kBET_Sprint)) { + HasBuffEffect(kBET_Fly)) { return; } diff --git a/server/gameserver/hero.ai.cc b/server/gameserver/hero.ai.cc index 36a05c2..50869bd 100644 --- a/server/gameserver/hero.ai.cc +++ b/server/gameserver/hero.ai.cc @@ -558,6 +558,7 @@ RoomObstacle* HeroAI::FindObstacleTarget() for (auto& pair : myself->room->mine_objects) { if (pair.second.Get() && + !pair.second.Get()->sweep_lock && !pair.second.Get()->IsDead(myself->room) && (pair.second.Get()->meta->sweep_tags & ai_meta->bits_param2) != 0) { if (pair.second.Get()->GetTeamId(myself->room) == myself->master.Get()->team_id) { @@ -576,6 +577,19 @@ RoomObstacle* HeroAI::FindObstacleTarget() if (target && target->GetPos().Distance(myself->GetPos()) > ai_meta->int_param1) { target = nullptr; } + if (target) { + target->sweep_lock = true; + myself->room->xtimer.AddDeadLineTimerAndAttach + ( + SERVER_FRAME_RATE * 2, + a8::XParams(), + [] (const a8::XParams& param) + { + RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData(); + obstacle->sweep_lock = false; + }, + &target->xtimer_attacher.timer_list_); + } return target; } diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index d2adc2c..46b7551 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -16,6 +16,7 @@ class RoomObstacle : public Obstacle CreatureWeakPtr master; int real_object_uniid = 0; std::shared_ptr context_ability; + bool sweep_lock = false; virtual ~RoomObstacle() override; virtual void Initialize() override;