diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 17f826e..dae7bf8 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -118,7 +118,13 @@ void Player::UpdateShot() if (series_shot_frames > 4) { shot_hold = false; series_shot_frames = 0; - Shot(); + if (last_shot_frameno_ == 0 || + ( + (room->frame_no - last_shot_frameno_) * (1000 / SERVER_FRAME_RATE)) > + curr_weapon->meta->i->fire_rate() + ) { + Shot(); + } } } } @@ -388,6 +394,7 @@ void Player::Shot() } break; } + last_shot_frameno_ = room->frame_no; need_sync_active_player = true; } diff --git a/server/gameserver/player.h b/server/gameserver/player.h index d82030e..1a97bd5 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -97,6 +97,7 @@ class Player : public Human private: int send_update_msg_times = 0; + long long last_shot_frameno_ = 0; cs::SMUpdate* update_msg = nullptr; long long last_sync_gas_frameno = 0; void MakeUpdateMsg();