This commit is contained in:
aozhiwei 2021-08-06 08:32:50 +00:00
parent 2bd1ebebdb
commit b5840bd56e
3 changed files with 16 additions and 2 deletions

View File

@ -1538,8 +1538,7 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance)
} }
if (HasBuffEffect(kBET_Jump) || if (HasBuffEffect(kBET_Jump) ||
HasBuffEffect(kBET_Fly) || HasBuffEffect(kBET_Fly)) {
HasBuffEffect(kBET_Sprint)) {
return; return;
} }

View File

@ -558,6 +558,7 @@ RoomObstacle* HeroAI::FindObstacleTarget()
for (auto& pair : myself->room->mine_objects) { for (auto& pair : myself->room->mine_objects) {
if (pair.second.Get() && if (pair.second.Get() &&
!pair.second.Get()->sweep_lock &&
!pair.second.Get()->IsDead(myself->room) && !pair.second.Get()->IsDead(myself->room) &&
(pair.second.Get()->meta->sweep_tags & ai_meta->bits_param2) != 0) { (pair.second.Get()->meta->sweep_tags & ai_meta->bits_param2) != 0) {
if (pair.second.Get()->GetTeamId(myself->room) == myself->master.Get()->team_id) { 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) { if (target && target->GetPos().Distance(myself->GetPos()) > ai_meta->int_param1) {
target = nullptr; 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; return target;
} }

View File

@ -16,6 +16,7 @@ class RoomObstacle : public Obstacle
CreatureWeakPtr master; CreatureWeakPtr master;
int real_object_uniid = 0; int real_object_uniid = 0;
std::shared_ptr<Ability> context_ability; std::shared_ptr<Ability> context_ability;
bool sweep_lock = false;
virtual ~RoomObstacle() override; virtual ~RoomObstacle() override;
virtual void Initialize() override; virtual void Initialize() override;