From 82f1bdbdc800a9da98fb002c9463bee9ab0347a7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Oct 2021 16:53:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=90=E5=BC=B9=E5=90=8E?= =?UTF-8?q?=E5=9D=90=E5=8A=9B=E5=92=8C=E6=B6=88=E8=80=97=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/creature.cc | 33 ++++++++++++++++++++------------- server/gameserver/human.cc | 7 ++++++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index d6c40c7..cee317d 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -41,24 +41,31 @@ static void InternalCreateBullet(BulletInfo& bullet_info) if (c->downed) { return; } - if (c->GetCurrWeapon()->weapon_idx == 0) { - return; - } - if (c->GetCurrWeapon()->meta->i->bullet_consume_type() == kBulletConsumeMulti) { - if (c->GetCurrWeapon()->ammo <= 0) { + if (bullet_info.delay_time <= 0) { + if (c->GetCurrWeapon()->weapon_idx == 0) { return; } - --c->GetCurrWeapon()->ammo; - } - if (bullet_info.delay_time <= 0) { + if (c->GetCurrWeapon()->meta->i->bullet_consume_type() == kBulletConsumeMulti) { + if (c->GetCurrWeapon()->ammo <= 0) { + return; + } + --c->GetCurrWeapon()->ammo; + if (c->GetCurrWeapon()->ammo <= 0) { + c->AutoLoadingBullet(); + } + if ((c->IsPlayer() || c->IsCar())) { + c->room->frame_event.AddBulletNumChg(c->GetWeakPtrRef()); + c->room->frame_event.AddWeaponAmmoChg(c->GetWeakPtrRef()); + } + } + if (bullet_info.recoil_force > 0) { + c->DoRecoilForce(bullet_info.recoil_force); + bullet_info.bullet_born_pos = bullet_info.bullet_born_pos - + (bullet_info.bullet_dir * bullet_info.recoil_force); + } int bullet_uniid = 0; if (MetaMgr::Instance()->prebattle_can_use_skill || !(c->HasBuffEffect(kBET_Jump) || c->HasBuffEffect(kBET_Fly))) { - if (bullet_info.recoil_force > 0) { - c->DoRecoilForce(bullet_info.recoil_force); - bullet_info.bullet_born_pos = bullet_info.bullet_born_pos - - (bullet_info.bullet_dir * bullet_info.recoil_force); - } bullet_uniid = c->room->CreateBullet (c, c->shot_passenger, diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 50782d2..1b328c9 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1574,7 +1574,12 @@ void Human::_UpdateSpecMove() void Human::_UpdateMove(int speed) { - if (!HasBuffEffect(kBET_Vertigo)) { + if (HasBuffEffect(kBET_Vertigo)) { + if (!HasBuffEffect(kBET_Recoil)) { + return; + } + } + { a8::UnSetBitFlag(status, CS_Collisioning); do { int distance = std::min(5, speed);