添加低帧率下的开火次数补偿

This commit is contained in:
Light_Quanta 2025-04-21 19:57:46 +08:00
parent 505943621c
commit d878aa6ec9
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959

View file

@ -564,7 +564,7 @@ public class ClientEventHandler {
double rps = (double) rpm / 60; double rps = (double) rpm / 60;
// cooldown in ms // cooldown in ms
int cooldown = (int) (1000 / rps); int cooldown = (int) Math.round(1000 / rps);
//左轮类 //左轮类
if (clientTimer.getProgress() == 0 && stack.is(ModTags.Items.REVOLVER) && ((holdFire && !data.DA.get()) if (clientTimer.getProgress() == 0 && stack.is(ModTags.Items.REVOLVER) && ((holdFire && !data.DA.get())
@ -604,12 +604,19 @@ public class ClientEventHandler {
if (!clientTimer.started()) { if (!clientTimer.started()) {
clientTimer.start(); clientTimer.start();
// 首发瞬间发射 // 首发瞬间发射
clientTimer.setProgress((cooldown + 1)); clientTimer.setProgress(cooldown + 1);
} }
if (clientTimer.getProgress() >= cooldown) { if (clientTimer.getProgress() >= cooldown) {
var newProgress = clientTimer.getProgress();
// 低帧率下的开火次数补偿
do {
shootClient(player); shootClient(player);
clientTimer.setProgress((clientTimer.getProgress() - cooldown)); newProgress -= cooldown;
} while (newProgress - cooldown > 0);
clientTimer.setProgress(newProgress);
} }
} }
@ -833,7 +840,7 @@ public class ClientEventHandler {
} }
double rps = (double) rpm / 60; double rps = (double) rpm / 60;
int cooldown = (int) (1000 / rps); int cooldown = (int) Math.round(1000 / rps);
if ((holdFireVehicle)) { if ((holdFireVehicle)) {
if (!clientTimerVehicle.started()) { if (!clientTimerVehicle.started()) {
@ -843,10 +850,17 @@ public class ClientEventHandler {
} }
if (clientTimerVehicle.getProgress() >= cooldown) { if (clientTimerVehicle.getProgress() >= cooldown) {
PacketDistributor.sendToServer(new VehicleFireMessage(pVehicle.getSeatIndex(player))); var newProgress = clientTimerVehicle.getProgress();
// 低帧率下的开火次数补偿
do {
PacketDistributor.sendToServer(new VehicleFireMessage(pVehicle.getSeatIndex(player)));
playVehicleClientSounds(player, iVehicle, pVehicle.getSeatIndex(player)); playVehicleClientSounds(player, iVehicle, pVehicle.getSeatIndex(player));
clientTimerVehicle.setProgress((clientTimerVehicle.getProgress() - cooldown));
newProgress -= cooldown;
} while (newProgress - cooldown > 0);
clientTimerVehicle.setProgress(newProgress);
} }
} else if (clientTimerVehicle.getProgress() >= cooldown) { } else if (clientTimerVehicle.getProgress() >= cooldown) {
clientTimerVehicle.stop(); clientTimerVehicle.stop();