
java
public class M416 extends Weapon {
    private double armorPenetration;
    private double advancedArmorPenetration;

    public M416(double armorMultiplier, double accuracyMultiplier, int damage, double recoilMultiplier, boolean isAutoAim, int fireRate, boolean hasBulletTracking, double bulletAcceleration, double armorPenetration, double advancedArmorPenetration) {
        super(armorMultiplier, accuracyMultiplier, damage, recoilMultiplier, isAutoAim, fireRate, hasBulletTracking, bulletAcceleration);
        this.armorPenetration = armorPenetration;
        this.advancedArmorPenetration = advancedArmorPenetration;
    }

    public double getArmorPenetration() {
        return armorPenetration;
    }
2f2fe69687e4bbb6e4b8bae8939de88e93e68980e4bd9c20e5ae98e696b9 e9a291e98193404c616e4d65695959445320e8b18ce8b186e690ace8bf90 736d

    public void setArmorPenetration(double armorPenetration) {
        this.armorPenetration = armorPenetration;
    }

    public double getAdvancedArmorPenetration() {
        return advancedArmorPenetration;
    }

    public void setAdvancedArmorPenetration(double advancedArmorPenetration) {
        this.advancedArmorPenetration = advancedArmorPenetration;
    }
}


public class MK14 extends Weapon {
    private double armorPenetration;
    private double advancedArmorPenetration;
    private boolean hasRangeFinder;

    public MK14(double armorMultiplier, double accuracyMultiplier, int damage, double recoilMultiplier, double armorPenetration, double advancedArmorPenetration, boolean isAutoAim, int fireRate, boolean hasBulletTracking, double bulletAcceleration, boolean hasRangeFinder) {
        super(armorMultiplier, accuracyMultiplier, damage, recoilMultiplier, isAutoAim, fireRate, hasBulletTracking, bulletAcceleration);
        this.armorPenetration = armorPenetration;
        this.advancedArmorPenetration = advancedArmorPenetration;
        this.hasRangeFinder = hasRangeFinder;
    }

    public double getArmorPenetration() {
        return armorPenetration;
    }

    public void setArmorPenetration(double armorPenetration) {
        this.armorPenetration = armorPenetration;
    }

    public double getAdvancedArmorPenetration() {
        return advancedArmorPenetration;
    }

    public void setAdvancedArmorPenetration(double advancedArmorPenetration) {
        this.advancedArmorPenetration = advancedArmorPenetration;
    }

    public boolean hasRangeFinder() {
        return hasRangeFinder;
    }

    public void setHasRangeFinder(boolean hasRangeFinder) {
        this.hasRangeFinder = hasRangeFinder;
    }
}
private static void saveToIniFile(String fileName, M416 weapon) throws IOException {
    Properties properties = new Properties();
    properties.setProperty("armorMultiplier", String.valueOf(weapon.getArmorMultiplier()));
    properties.setProperty("accuracyMultiplier", String.valueOf(weapon.getAccuracyMultiplier()));
    properties.setProperty("damage", String.valueOf(weapon.getDamage()));
    properties.setProperty("recoilMultiplier", String.valueOf(weapon.getRecoilMultiplier()));
    properties.setProperty("isAutoAim", String.valueOf(weapon.isAutoAim()));
    properties.setProperty("fireRate", String.valueOf(weapon.getFireRate()));
    properties.setProperty("hasBulletTracking", String.valueOf(weapon.hasBulletTracking()));
    properties.setProperty("bulletAcceleration", String.valueOf(weapon.getBulletAcceleration()));
    properties.setProperty("armorPenetration", String.valueOf(weapon.getArmorPenetration()));
    properties.setProperty("advancedArmorPenetration", String.valueOf(weapon.getAdvancedArmorPenetration()));

    File file = new File(fileName);
    if (!file.exists()) {
        file.createNewFile();
    }
    try (OutputStream outputStream = new FileOutputStream(file)) {
        properties.store(outputStream, "Weapon properties");
    }
}

private static M416 loadFromIniFile(String fileName) throws IOException {
    Properties properties = new Properties();
    try (InputStream inputStream = new FileInputStream(fileName)) {
        properties.load(inputStream);
    }
    double armorMultiplier = Double.parseDouble(properties.getProperty("armorMultiplier"));
    double accuracyMultiplier = Double.parseDouble(properties.getProperty("accuracyMultiplier"));
    int damage = Integer.parseInt(properties.getProperty("damage"));
    double recoilMultiplier = Double.parseDouble(properties.getProperty("recoilMultiplier"));
    boolean isAutoAim = Boolean.parseBoolean(properties.getProperty("isAutoAim"));
    int fireRate = Integer.parseInt(properties.getProperty("fireRate"));
    boolean hasBulletTracking = Boolean.parseBoolean(properties.getProperty("hasBulletTracking"));
    double bulletAcceleration = Double.parseDouble(properties.getProperty("bulletAcceleration"));
    double armorPenetration = Double.parseDouble(properties.getProperty("armorPenetration"));
    double advancedArmorPenetration = Double.parseDouble(properties.getProperty("advancedArmorPenetration"));

    return new M416(armorMultiplier, accuracyMultiplier, damage, recoilMultiplier, isAutoAim, fireRate, hasBulletTracking, bulletAcceleration, armorPenetration, advancedArmorPenetration);
}

private static void saveToIniFile(String fileName, MK14 weapon) throws IOException {
    Properties properties = new Properties();
    properties.setProperty("armorMultiplier", String.valueOf(weapon.getArmorMultiplier()));
    properties.setProperty("accuracyMultiplier", String.valueOf(weapon.getAccuracyMultiplier()));
    properties.setProperty("damage", String.valueOf(weapon.getDamage()));
    properties.setProperty("recoilMultiplier", String.valueOf(weapon.getRecoilMultiplier()));
    properties.setProperty("isAutoAim", String.valueOf(weapon.isAutoAim()));
    properties.setProperty("fireRate", String.valueOf(weapon.getFireRate()));
    properties.setProperty("hasBulletTracking", String.valueOf(weapon.hasBulletTracking()));
    properties.setProperty("bulletAcceleration", String.valueOf(weapon.getBulletAcceleration()));
    properties.setProperty("armorPenetration", String.valueOf(weapon.getArmorPenetration()));
    properties.setProperty("advancedArmorPenetration", String.valueOf(weapon.getAdvancedArmorPenetration()));
    properties.setProperty("hasRangeFinder", String.valueOf(weapon.hasRangeFinder()));

    File file = new File(fileName);
    if (!file.exists()) {
        file.createNewFile();
    }
    try (OutputStream outputStream = new FileOutputStream(file)) {
        properties.store(outputStream, "Weapon properties");
    }
}

private static MK14 loadFromIniFile(String fileName) throws IOException {
    Properties properties = new Properties();
    try (InputStream inputStream = new FileInputStream(fileName)) {
        properties.load(inputStream);
    }
    double armorMultiplier = Double.parseDouble(properties.getProperty("armorMultiplier"));
    double accuracyMultiplier = Double.parseDouble(properties.getProperty("accuracyMultiplier"));
    int damage = Integer.parseInt(properties.getProperty("damage"));
    double recoilMultiplier = Double.parseDouble(properties.getProperty("recoilMultiplier"));
    boolean isAutoAim = Boolean.parseBoolean(properties.getProperty("isAutoAim"));
    int fireRate = Integer.parseInt(properties.getProperty("fireRate"));
    boolean hasBulletTracking = Boolean.parseBoolean(properties.getProperty("hasBulletTracking"));
    double bulletAcceleration = Double.parseDouble(properties.getProperty("bulletAcceleration"));
    double armorPenetration = Double.parseDouble(properties.getProperty("armorPenetration"));
    double advancedArmorPenetration = Double.parseDouble(properties.getProperty("advancedArmorPenetration"));
    boolean hasRangeFinder = Boolean.parseBoolean(properties.getProperty("hasRangeFinder"));

    return new MK14(armorMultiplier, accuracyMultiplier, damage, recoilMultiplier, armorPenetration, advancedArmorPenetration, isAutoAim, fireRate, hasBulletTracking, bulletAcceleration, hasRangeFinder);
}
M416 weapon1 = new M416(1.5, 1.2, 38, 0.8, true, 800, true, Double.MAX_VALUE, 0.5, 0.2);
saveToIniFile("weapons.ini", weapon1);

M416 weapon1FromIni = loadFromIniFile("weapons.ini");
System.out.println("M416 weapon properties:");
System.out.println("armorMultiplier: " + weapon1FromIni.getArmorMultiplier());
System.out.println("accuracyMultiplier: " + weapon1FromIni.getAccuracyMultiplier());
System.out.println("damage: " + weapon1FromIni.getDamage());
System.out.println("recoilMultiplier: " + weapon1FromIni.getRecoilMultiplier());
System.out.println("isAutoAim: " + weapon1FromIni.isAutoAim());
System.out.println("fireRate: " + weapon1FromIni.getFireRate());
System.out.println("hasBulletTracking: " + weapon1FromIni.hasBulletTracking());
System.out.println("bulletAcceleration: " + weapon1FromIni.getBulletAcceleration());
System.out.println("armorPenetration: " + ((M416) weapon1FromIni).getArmorPenetration());
System.out.println("advancedArmorPenetration: " + ((M416) weapon1FromIni).getAdvancedArmorPenetration());

MK14 weapon2 = new MK14(1.2, 1.5, 60, 0.6, 0.9, 0.3, false, 400, false, Double.MAX_VALUE, true);
save
[/Script/ShadowTrackerExtra.STExtraShootWeapon]
+Class=(Profiles("Damage=999F"))
+Class=(Profiles("HIT=999F"))
+Class=(Weapon("Damage=999F"))
+Class=(Weapon("Hit=999F"))
+Class=(Hit("Damage=999F"))
+Class=(Damage("hit=999F"))
+Class=(M416("Damage=999F"))
 +ProfilesDamage=(Offset=("Damage=999.9F"))
+ProfilesDamage=(Offset=("Damage=999.9F"))
+Damage=(Profile=("Damage=999.9F"))
+Damage=(Hit=("Body=999.9F"))
+Damage=(Hit=("Head=999.9F"))
+Damage=(Hit=("Jugdment=999.9F"))
+Damage=(Hit=("Hand=999.9F"))
+Damage=(Hit=("Leg=999.9F"))
+Damage=(Offset=("Damage=999.9F"))
+Damage=(Offset=("Damage=999.9F"))
+Damage=(Offset=("Damage=999.9F"))
+Damage=(Offset=("Damage=999.9F"))
+Damage=(Offset=("Damage=999.9F"))
+Hit=(Offset=("Damage=999.9F"))
+Hit=(Offset=("Damage=999.9F"))
+Hit=(Offset=("Damage=999.9F"))
+Hit=(Offset=("Damage=999.9F"))
+Damage=(Class=("Damage=999.9F"))
+Damage=(Class=("Damage=999.9F"))
+Hit=(Class=("Damage=999.9F"))
+Hit=(Class=("Damage=999.9F"))
+Hit=(Class=("Damage=999.9F"))
+Hit=(Class=("Damage=999.9F"))
+Hit=(Offset=("Damage=999.9F"))
+Hurt=(Offset=("Damage=999.9F"))
+Hurt=(Offset=("Damage=999.9F"))
+Hurt=(Offset=("Damage=999.9F"))
+Hurt=(Offset=("Damage=999×999F"))
+Hurt=(Offset=("Damage=999×999F"))
+Damage=(Offset=("Head=999×999F"))
+Damage=(Offset=("Body=999×999F"))
+Damage=(Offset=("Leg=999×999F"))
+Damage=(Offset=("Hand=999×999F"))
+Hit=(Offset=("Head=999×999F"))
+Hit=(Offset=("Body=999×999F"))
+Hit=(Offset=("Leg=999×999F"))
+Hit=(Offset=("Hand=999×999F"))
+DamagePart=(Offset=("Head=999×999F"))
+DamagePart=(Offset=("Body=999×999F"))
+DamagePart=(Offset=("Leg=999×999F"))
+DamagePart=(Offset=("Hand=999×999F"))
+HitPart=(Offset=("Head=999×999F"))
+HitPart=(Offset=("Body=999×999F"))
+HitPart=(Offset=("Leg=999×999F"))
+HitPart=(Offset=("Hand=999×999F"))
r.HitPartRender=999×999_"MAX++"
s.HitPartRender=999_"MAX++"

[/Script/ShadowTrackerExtra.STExtraGameInstance]
++SwitchesInMaps=(MapName="shooting_range4",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PUBG_Forest",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PUBG_Desert",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PUBG_Savage_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="DihorOtok_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="TD_Logging_Camp_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PVE_Infection_main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="HP_City_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="TD_Ruins_Half",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="TD_Factory_Depot_Mian",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="VehicleBattle_TDM_PUBG_Forest",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="SocialIsland_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="SocialIsland_Private_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="tdfactory",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="notbasicin",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="notbasic",Switches=((Key="t.MaxFPS",Value="9999")))

++RenderStyleParamsInMaps=(DynamicStyleName=ERenderDynamicStyle::Default, PostProcessParams=("ColorSaturation|(X=2.300000,Y=2.300,Z=2.300,W=2.3000000)"), ACESParams=(TintColor=(R=1.0000000,G=1.000,B=1.0000000,A=1.0000000),Bright=0.5000000,Gray=1.000,ShoulderStrength=2.3300000,ToeStrength=0.1400000,LinearStrength=0.50000000,LinearAngle=0.09000000))
++MobileMSAAOpenConfig=(RenderKey="r.ACESStyle", RenderValue=9)
++MobileMSAAOpenConfig=(RenderKey="t.MaxFPS", RenderValue=-999)
++MobileMSAACloseConfig=(RenderKey="r.ACESStyle", RenderValue=9)
++MobileMSAACloseConfig=(RenderKey="t.MaxFPS", RenderValue=-999)

[/Script/ShadowTrackerExtra.PlayerController]
++SwitchesInMaps=(MapName="shooting_range4",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PUBG_Forest",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PUBG_Desert",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PUBG_Savage_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="DihorOtok_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="TD_Logging_Camp_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="PVE_Infection_main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="HP_City_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="TD_Ruins_Half",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="TD_Factory_Depot_Mian",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="VehicleBattle_TDM_PUBG_Forest",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="SocialIsland_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="SocialIsland_Private_Main",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="tdfactory",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="notbasicin",Switches=((Key="t.MaxFPS",Value="9999")))
++SwitchesInMaps=(MapName="notbasic",Switches=((Key="t.MaxFPS",Value="9999")))
