From 55f96a8a05273c67641e1ac0e2d01146e4383b71 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 15 Nov 2023 15:26:04 +0800 Subject: [PATCH] 1 --- server/gameserver/hero_agent.cc | 27 +++++++++++++++++++++++++++ server/gameserver/hero_agent.h | 1 + 2 files changed, 28 insertions(+) diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index c793b8fd..6986233a 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -1284,6 +1284,10 @@ int HeroAgent::SearchPickupObj() ( [this, &nearest_obj] (Entity* e, bool& stop) mutable { + if (abandon_pickup_hash_.find(e->GetUniId()) != + abandon_pickup_hash_.end()) { + return; + } if (!nearest_obj) { nearest_obj = e; return; @@ -1302,6 +1306,10 @@ int HeroAgent::SearchPickupObj() ( [this, &nearest_obj] (Creature* e, bool& stop) mutable { + if (abandon_pickup_hash_.find(e->GetUniId()) != + abandon_pickup_hash_.end()) { + return; + } if (!e->IsCar()) { return; } @@ -1365,6 +1373,21 @@ bool HeroAgent::PickupObjIsValid() void HeroAgent::AbandonPickup(int min_time, int max_time) { + if (curr_pickup_obj_.Get()) { + int val = a8::RandEx(min_time, max_time); + int obj_uniid = curr_pickup_obj_.Get()->GetUniId(); + abandon_pickup_hash_[obj_uniid]= obj_uniid; + owner_->room->xtimer.SetTimeoutWpEx + ( + val / FRAME_RATE_MS, + [this, obj_uniid] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + abandon_pickup_hash_.erase(obj_uniid); + } + }, + &owner_->xtimer_attacher); + } curr_pickup_obj_.Reset(); } @@ -1410,8 +1433,12 @@ behaviac::EBTStatus HeroAgent::Pickup() } else { Car* car = curr_pickup_obj_.Get()->AsCar(); owner_->AsHuman()->DoGetOn(car->GetUniId()); + if (owner_->GetCar()) { + owner_->GetCar()->SetAttackDir(owner_->GetAttackDir()); + } } } + AbandonPickup(1000 * 30, 1000 * 60); return behaviac::BT_SUCCESS; }; return StartCoroutine(co); diff --git a/server/gameserver/hero_agent.h b/server/gameserver/hero_agent.h index 1d688712..7bee868c 100644 --- a/server/gameserver/hero_agent.h +++ b/server/gameserver/hero_agent.h @@ -160,4 +160,5 @@ private: int bullet_angle_offset_min_ = 0; int bullet_angle_offset_max_ = 0; long long last_try_search_enemy_frameno_ = 0; + std::map abandon_pickup_hash_; };