From d08fc79ffa63620fdea86441f09365df248ed116 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 6 May 2019 16:23:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=90=E5=BC=B9=E8=B6=8A?= =?UTF-8?q?=E7=95=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 8 ++++++++ server/gameserver/player.cc | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 7cf9c1e..38c3b3e 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -161,6 +161,14 @@ void Human::Shot(Vector2D& target_dir) #if 1 float fly_distance = 5; #endif + for (auto& tuple : curr_weapon->meta->bullet_born_offset) { + Vector2D bullet_born_offset = Vector2D(std::get<0>(tuple), std::get<1>(tuple)); + bullet_born_offset.Rotate(attack_dir.CalcAngle(Vector2D::UP)); + Vector2D bullet_born_pos = pos + bullet_born_offset; + if (room->OverBorder(bullet_born_pos, 0)) { + return; + } + } room->frame_event.AddShot(this); for (auto& tuple : curr_weapon->meta->bullet_born_offset) { Vector2D bullet_born_offset = Vector2D(std::get<0>(tuple), std::get<1>(tuple)); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 4159388..4afa8f1 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -438,11 +438,19 @@ void Player::Shot() return; } - room->frame_event.AddShot(this); if (room->gas_data.gas_mode != GasInactive && !a8::HasBitFlag(status, HS_Fly) && !a8::HasBitFlag(status, HS_Jump) ) { + for (auto& tuple : curr_weapon->meta->bullet_born_offset) { + Vector2D bullet_born_offset = Vector2D(std::get<0>(tuple), std::get<1>(tuple)); + bullet_born_offset.Rotate(attack_dir.CalcAngle(Vector2D::UP)); + Vector2D bullet_born_pos = pos + bullet_born_offset; + if (room->OverBorder(bullet_born_pos, 0)) { + return; + } + } + room->frame_event.AddShot(this); for (auto& tuple : curr_weapon->meta->bullet_born_offset) { Vector2D bullet_born_offset = Vector2D(std::get<0>(tuple), std::get<1>(tuple)); bullet_born_offset.Rotate(attack_dir.CalcAngle(Vector2D::UP)); @@ -456,6 +464,8 @@ void Player::Shot() room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance); room->CreateBullet(this, curr_weapon->meta, bullet_born_pos, bullet_dir, fly_distance); } + } else { + return; } if (curr_weapon->weapon_idx != 0) { --curr_weapon->ammo;