From e47bcdd6465d4f696eacebae5cd254d28251dca7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 18 Jun 2021 13:54:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=BA=E7=94=B2=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/creature.cc | 2 +- server/gameserver/frameevent.cc | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index feb658f..4c8c6a8 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1394,7 +1394,7 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance) AutoLoadingBullet(); } last_shot_frameno_ = room->GetFrameNo(); - if (!need_sync_active_player && IsPlayer()) { + if ((IsPlayer() || IsCar())) { room->frame_event.AddBulletNumChg(GetWeakPtrRef()); room->frame_event.AddWeaponAmmoChg(GetWeakPtrRef()); } diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index 189ae64..32ae729 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -142,10 +142,17 @@ void FrameEvent::AddExplosionEx(CreatureWeakPtr& sender, int item_id, a8::Vec2 b void FrameEvent::AddBulletNumChg(CreatureWeakPtr& sender) { + chged_bullet_nums_.push_back(sender); + int idx = chged_bullet_nums_.size() - 1; if (sender.Get()->IsHuman()) { - chged_bullet_nums_.push_back(sender); - int idx = chged_bullet_nums_.size() - 1; - ((Human*)sender.Get())->chged_bullet_nums_.push_back(idx); + sender.Get()->AsHuman()->chged_bullet_nums_.push_back(idx); + } else { + sender.Get()->TraverseAllLayerHumanList + ( + [idx] (Human* hum, bool& stop) + { + hum->chged_bullet_nums_.push_back(idx); + }); } } @@ -211,7 +218,7 @@ void FrameEvent::AddHpChg(CreatureWeakPtr& sender) void FrameEvent::AddWeaponAmmoChg(CreatureWeakPtr& sender) { - if (sender.Get()->GetCurrWeapon() && sender.Get()->IsHuman()) { + if (sender.Get()->GetCurrWeapon()) { chged_weapon_ammo_.push_back ( std::make_tuple(sender, @@ -220,7 +227,16 @@ void FrameEvent::AddWeaponAmmoChg(CreatureWeakPtr& sender) ) ); int idx = chged_weapon_ammo_.size() - 1; - sender.Get()->AsHuman()->chged_weapon_ammo_.push_back(idx); + if (sender.Get()->IsHuman()) { + sender.Get()->AsHuman()->chged_weapon_ammo_.push_back(idx); + } else { + sender.Get()->TraverseAllLayerHumanList + ( + [idx] (Human* hum, bool& stop) + { + hum->chged_weapon_ammo_.push_back(idx); + }); + } } }