提取换弹模式

This commit is contained in:
Light_Quanta 2025-05-11 23:17:50 +08:00
parent e0969c6c9b
commit 4286f907e7
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
47 changed files with 46 additions and 282 deletions

View file

@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.init.ModKeyMappings;
import com.atsuishio.superbwarfare.init.ModPerks; import com.atsuishio.superbwarfare.init.ModPerks;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.data.FireMode;
import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.item.gun.data.GunData;
import com.atsuishio.superbwarfare.perk.AmmoPerk; import com.atsuishio.superbwarfare.perk.AmmoPerk;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
@ -113,7 +114,7 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
* 获取武器射速的文本组件 * 获取武器射速的文本组件
*/ */
protected Component getRpmComponent() { protected Component getRpmComponent() {
if (this.stack.getItem() instanceof GunItem gunItem && gunItem.isAutoWeapon(this.stack)) { if (this.stack.getItem() instanceof GunItem && GunData.from(this.stack).getAvailableFireModes().contains(FireMode.AUTO)) {
return Component.translatable("des.superbwarfare.guns.rpm").withStyle(ChatFormatting.GRAY) return Component.translatable("des.superbwarfare.guns.rpm").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(FormatTool.format0D(data.rpm())) .append(Component.literal(FormatTool.format0D(data.rpm()))

View file

@ -197,33 +197,6 @@ public abstract class GunItem extends Item implements CustomRendererItem {
return false; return false;
} }
/**
* 是否使用弹匣换弹
*
* @param stack 武器物品
*/
public boolean isMagazineReload(ItemStack stack) {
return false;
}
/**
* 是否使用弹夹换弹
*
* @param stack 武器物品
*/
public boolean isClipReload(ItemStack stack) {
return false;
}
/**
* 是否是单发装填换弹
*
* @param stack 武器物品
*/
public boolean isIterativeReload(ItemStack stack) {
return false;
}
/** /**
* 开膛待击 * 开膛待击
* *
@ -242,15 +215,6 @@ public abstract class GunItem extends Item implements CustomRendererItem {
return false; return false;
} }
/**
* 武器是否为全自动武器
*
* @param stack 武器物品
*/
public boolean isAutoWeapon(ItemStack stack) {
return false;
}
/** /**
* 武器是否能进行改装 * 武器是否能进行改装
* *

View file

@ -39,6 +39,9 @@ public class DefaultGunData {
@SerializedName("AvailableFireModes") @SerializedName("AvailableFireModes")
public Set<FireMode> availableFireModes = Set.of(FireMode.SEMI); public Set<FireMode> availableFireModes = Set.of(FireMode.SEMI);
@SerializedName("ReloadTypes")
public Set<ReloadType> reloadTypes = Set.of(ReloadType.MAGAZINE);
@SerializedName("BurstAmount") @SerializedName("BurstAmount")
public int burstAmount; public int burstAmount;
@SerializedName("BypassesArmor") @SerializedName("BypassesArmor")

View file

@ -195,6 +195,10 @@ public class GunData {
return defaultGunData().headshot + item.getCustomHeadshot(stack); return defaultGunData().headshot + item.getCustomHeadshot(stack);
} }
public Set<ReloadType> reloadTypes() {
return defaultGunData().reloadTypes;
}
public int defaultNormalReloadTime() { public int defaultNormalReloadTime() {
return defaultGunData().normalReloadTime; return defaultGunData().normalReloadTime;
} }

View file

@ -0,0 +1,12 @@
package com.atsuishio.superbwarfare.item.gun.data;
import com.google.gson.annotations.SerializedName;
public enum ReloadType {
@SerializedName("Magazine")
MAGAZINE,
@SerializedName("Clip")
CLIP,
@SerializedName("Iterative")
ITERATIVE,
}

View file

@ -108,11 +108,6 @@ public class Glock17Item extends GunItem implements GeoItem {
return "GLOCK-17"; return "GLOCK-17";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -110,11 +110,6 @@ public class Glock18Item extends GunItem implements GeoItem {
return "GLOCK-18"; return "GLOCK-18";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -125,11 +120,6 @@ public class Glock18Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean canEjectShell(ItemStack stack) { public boolean canEjectShell(ItemStack stack) {
return true; return true;

View file

@ -110,11 +110,6 @@ public class M1911Item extends GunItem implements GeoItem {
return "M-1911"; return "M-1911";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -107,11 +107,6 @@ public class Mp443Item extends GunItem implements GeoItem {
return "MP-443"; return "MP-443";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -294,11 +294,6 @@ public class Trachelium extends GunItem implements GeoItem {
return "TRACHELIUM"; return "TRACHELIUM";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -155,11 +155,6 @@ public class Ntw20Item extends GunItem implements GeoItem {
return "NTW-20"; return "NTW-20";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -195,11 +195,6 @@ public class JavelinItem extends GunItem implements GeoItem {
return Optional.of(new LauncherImageComponent(pStack)); return Optional.of(new LauncherImageComponent(pStack));
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public String getAmmoDisplayName(GunData data) { public String getAmmoDisplayName(GunData data) {
return "Javelin Missile"; return "Javelin Missile";

View file

@ -103,12 +103,6 @@ public class M79Item extends GunItem implements GeoItem {
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) { public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new LauncherImageComponent(pStack)); return Optional.of(new LauncherImageComponent(pStack));
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public String getAmmoDisplayName(GunData data) { public String getAmmoDisplayName(GunData data) {
return "40mm Grenade"; return "40mm Grenade";

View file

@ -132,11 +132,6 @@ public class RpgItem extends GunItem implements GeoItem {
return Optional.of(new LauncherImageComponent(pStack)); return Optional.of(new LauncherImageComponent(pStack));
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean shootBullet(Player player, GunData data, double spread, boolean zoom) { public boolean shootBullet(Player player, GunData data, double spread, boolean zoom) {
Level level = player.level(); Level level = player.level();

View file

@ -205,11 +205,6 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, EnergyStorag
return new ItemAttributeModifiers(list, true); return new ItemAttributeModifiers(list, true);
} }
@Override
public boolean isIterativeReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean hasMeleeAttack(ItemStack stack) { public boolean hasMeleeAttack(ItemStack stack) {
return true; return true;

View file

@ -92,11 +92,6 @@ public class DevotionItem extends GunItem implements GeoItem {
return "Devotion"; return "Devotion";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -107,11 +102,6 @@ public class DevotionItem extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean canEjectShell(ItemStack stack) { public boolean canEjectShell(ItemStack stack) {
return true; return true;

View file

@ -128,21 +128,11 @@ public class M60Item extends GunItem implements GeoItem {
return "M60"; return "M60";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean canEjectShell(ItemStack stack) { public boolean canEjectShell(ItemStack stack) {
return true; return true;

View file

@ -80,9 +80,4 @@ public class MinigunItem extends GunItem implements GeoItem {
return "M134 MINIGUN"; return "M134 MINIGUN";
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
} }

View file

@ -194,11 +194,6 @@ public class RpkItem extends GunItem implements GeoItem {
return GunData.from(stack).attachment.get(AttachmentType.SCOPE) == 2; return GunData.from(stack).attachment.get(AttachmentType.SCOPE) == 2;
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -209,11 +204,6 @@ public class RpkItem extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -164,11 +164,6 @@ public class AK12Item extends GunItem implements GeoItem {
return "AK-12"; return "AK-12";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -179,11 +174,6 @@ public class AK12Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -172,11 +172,6 @@ public class AK47Item extends GunItem implements GeoItem {
return "AK-47"; return "AK-47";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -187,11 +182,6 @@ public class AK47Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -172,11 +172,6 @@ public class Hk416Item extends GunItem implements GeoItem {
return "HK-416"; return "HK-416";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -187,11 +182,6 @@ public class Hk416Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -87,9 +87,4 @@ public class InsidiousItem extends GunItem implements GeoItem {
public String getGunDisplayName() { public String getGunDisplayName() {
return "INSIDIOUS"; return "INSIDIOUS";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
} }

View file

@ -178,11 +178,6 @@ public class M4Item extends GunItem implements GeoItem {
return "M4A1"; return "M4A1";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -193,11 +188,6 @@ public class M4Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -127,9 +127,4 @@ public class MarlinItem extends GunItem implements GeoItem {
public String getGunDisplayName() { public String getGunDisplayName() {
return "MARLIN-1894"; return "MARLIN-1894";
} }
@Override
public boolean isIterativeReload(ItemStack stack) {
return true;
}
} }

View file

@ -174,11 +174,6 @@ public class Mk14Item extends GunItem implements GeoItem {
return "MK-14"; return "MK-14";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -189,11 +184,6 @@ public class Mk14Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -187,11 +187,6 @@ public class Qbz95Item extends GunItem implements GeoItem {
return "QBZ-95-1"; return "QBZ-95-1";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -202,11 +197,6 @@ public class Qbz95Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -112,11 +112,6 @@ public class SksItem extends GunItem implements GeoItem {
return "SKS"; return "SKS";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -122,11 +122,6 @@ public class Aa12Item extends GunItem implements GeoItem {
return Optional.of(new ShotgunImageComponent(pStack)); return Optional.of(new ShotgunImageComponent(pStack));
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -137,11 +132,6 @@ public class Aa12Item extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean canEjectShell(ItemStack stack) { public boolean canEjectShell(ItemStack stack) {
return true; return true;

View file

@ -124,11 +124,6 @@ public class HomemadeShotgunItem extends GunItem implements GeoItem {
return Optional.of(new ShotgunImageComponent(pStack)); return Optional.of(new ShotgunImageComponent(pStack));
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -137,9 +137,4 @@ public class M870Item extends GunItem implements GeoItem {
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) { public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new ShotgunImageComponent(pStack)); return Optional.of(new ShotgunImageComponent(pStack));
} }
@Override
public boolean isIterativeReload(ItemStack stack) {
return true;
}
} }

View file

@ -155,11 +155,6 @@ public class VectorItem extends GunItem implements GeoItem {
return "VECTOR"; return "VECTOR";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;
@ -170,11 +165,6 @@ public class VectorItem extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isAutoWeapon(ItemStack stack) {
return true;
}
@Override @Override
public boolean isCustomizable(ItemStack stack) { public boolean isCustomizable(ItemStack stack) {
return true; return true;

View file

@ -86,9 +86,4 @@ public class HuntingRifleItem extends GunItem implements GeoItem {
public String getGunDisplayName() { public String getGunDisplayName() {
return "Hunting Rifle"; return "Hunting Rifle";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
} }

View file

@ -136,14 +136,4 @@ public class K98Item extends GunItem implements GeoItem {
public String getGunDisplayName() { public String getGunDisplayName() {
return "KAR-98K"; return "KAR-98K";
} }
@Override
public boolean isClipReload(ItemStack stack) {
return true;
}
@Override
public boolean isIterativeReload(ItemStack stack) {
return true;
}
} }

View file

@ -111,11 +111,6 @@ public class M98bItem extends GunItem implements GeoItem {
return "M98-B"; return "M98-B";
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -134,9 +134,4 @@ public class MosinNagantItem extends GunItem implements GeoItem {
public String getGunDisplayName() { public String getGunDisplayName() {
return "MOSIN NAGANT"; return "MOSIN NAGANT";
} }
@Override
public boolean isIterativeReload(ItemStack stack) {
return true;
}
} }

View file

@ -174,11 +174,6 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
return Optional.of(new SentinelImageComponent(pStack)); return Optional.of(new SentinelImageComponent(pStack));
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -158,11 +158,6 @@ public class SvdItem extends GunItem implements GeoItem {
return true; return true;
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public boolean isOpenBolt(ItemStack stack) { public boolean isOpenBolt(ItemStack stack) {
return true; return true;

View file

@ -154,11 +154,6 @@ public class BocekItem extends GunItem implements GeoItem {
public void onShoot(GunData data, Player player, double spread, boolean zoom) { public void onShoot(GunData data, Player player, double spread, boolean zoom) {
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public void onFireKeyRelease(GunData data, Player player, double power, boolean zoom) { public void onFireKeyRelease(GunData data, Player player, double power, boolean zoom) {
super.onFireKeyRelease(data, player, power, zoom); super.onFireKeyRelease(data, player, power, zoom);

View file

@ -155,11 +155,6 @@ public class TaserItem extends GunItem implements GeoItem, EnergyStorageItem {
return Optional.of(new EnergyImageComponent(pStack)); return Optional.of(new EnergyImageComponent(pStack));
} }
@Override
public boolean isMagazineReload(ItemStack stack) {
return true;
}
@Override @Override
public String getAmmoDisplayName(GunData data) { public String getAmmoDisplayName(GunData data) {
return "Electrode Rod"; return "Electrode Rod";

View file

@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.network.message.send;
import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.item.gun.data.GunData;
import com.atsuishio.superbwarfare.item.gun.data.ReloadType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.codec.StreamCodec;
@ -40,9 +41,10 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
&& data.reload.time() == 0 && data.reload.time() == 0
&& data.bolt.actionTimer.get() == 0 && data.bolt.actionTimer.get() == 0
) { ) {
boolean canSingleReload = gunItem.isIterativeReload(stack); var reloadTypes = data.reloadTypes();
boolean canReload = gunItem.isMagazineReload(stack) && !gunItem.isClipReload(stack); boolean canSingleReload = reloadTypes.contains(ReloadType.ITERATIVE);
boolean clipLoad = data.ammo.get() == 0 && gunItem.isClipReload(stack); boolean canReload = reloadTypes.contains(ReloadType.MAGAZINE) && !reloadTypes.contains(ReloadType.CLIP);
boolean clipLoad = data.ammo.get() == 0 && reloadTypes.contains(ReloadType.CLIP);
// 检查备弹 // 检查备弹
if (!data.hasBackupAmmo(player)) return; if (!data.hasBackupAmmo(player)) return;

View file

@ -15,7 +15,10 @@
"BypassesArmor": 0.2, "BypassesArmor": 0.2,
"SoundRadius": 14, "SoundRadius": 14,
"RPM": 600, "RPM": 600,
"AvailableFireModes": ["Semi", "Auto"], "AvailableFireModes": [
"Semi",
"Auto"
],
"AmmoType": "@RifleAmmo", "AmmoType": "@RifleAmmo",
"AvailablePerks": [ "AvailablePerks": [
"@Ammo", "@Ammo",

View file

@ -9,6 +9,10 @@
"BoltActionTime": 22, "BoltActionTime": 22,
"Weight": 5, "Weight": 5,
"DefaultFireMode": "Auto", "DefaultFireMode": "Auto",
"ReloadTypes": [
"Clip",
"Iterative"
],
"EmptyReloadTime": 59, "EmptyReloadTime": 59,
"PrepareTime": 29, "PrepareTime": 29,
"IterativeTime": 11, "IterativeTime": 11,

View file

@ -8,6 +8,9 @@
"Magazine": 8, "Magazine": 8,
"ProjectileAmount": 12, "ProjectileAmount": 12,
"Weight": 4, "Weight": 4,
"ReloadTypes": [
"Iterative"
],
"PrepareTime": 7, "PrepareTime": 7,
"PrepareLoadTime": 36, "PrepareLoadTime": 36,
"IterativeTime": 16, "IterativeTime": 16,

View file

@ -7,6 +7,9 @@
"Velocity": 38, "Velocity": 38,
"Magazine": 8, "Magazine": 8,
"Weight": 3, "Weight": 3,
"ReloadTypes": [
"Iterative"
],
"PrepareTime": 7, "PrepareTime": 7,
"IterativeTime": 16, "IterativeTime": 16,
"FinishTime": 19, "FinishTime": 19,

View file

@ -7,6 +7,9 @@
"Headshot": 3, "Headshot": 3,
"Velocity": 42, "Velocity": 42,
"Magazine": 5, "Magazine": 5,
"ReloadTypes": [
"Iterative"
],
"BoltActionTime": 22, "BoltActionTime": 22,
"Weight": 5, "Weight": 5,
"PrepareTime": 29, "PrepareTime": 29,

View file

@ -8,6 +8,9 @@
"Velocity": 3.75, "Velocity": 3.75,
"Magazine": 8, "Magazine": 8,
"Weight": 9, "Weight": 9,
"ReloadTypes": [
"Iterative"
],
"PrepareLoadTime": 31, "PrepareLoadTime": 31,
"IterativeTime": 20, "IterativeTime": 20,
"FinishTime": 19, "FinishTime": 19,