diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalAimingSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalAimingSettings.cs new file mode 100644 index 00000000..17263ea8 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalAimingSettings.cs @@ -0,0 +1,312 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalAimingSettings in the client, this record should match that +/// +public record BotGlobalAimingSettings +{ + [JsonPropertyName("MAX_AIM_PRECICING")] + public float MaxAimPrecicing { get; set; } + + [JsonPropertyName("BETTER_PRECICING_COEF")] + public float BetterPrecicingCoef { get; set; } + + [JsonPropertyName("RECLC_Y_DIST")] + public float ReclcYDist { get; set; } + + [JsonPropertyName("RECALC_DIST")] + public float RecalcDist { get; set; } + + [JsonPropertyName("RECALC_SQR_DIST")] + public float RecalcSqrDist { get; set; } + + [JsonPropertyName("COEF_FROM_COVER")] + public float CoefFromCover { get; set; } + + [JsonPropertyName("PANIC_COEF")] + public float PanicCoef { get; set; } + + [JsonPropertyName("PANIC_ACCURATY_COEF")] + public float PanicAccuratyCoef { get; set; } + + [JsonPropertyName("HARD_AIM")] + public float HardAim { get; set; } + + [JsonPropertyName("HARD_AIM_CHANCE_100")] + public int HardAimChance100 { get; set; } + + [JsonPropertyName("PANIC_TIME")] + public float PanicTime { get; set; } + + [JsonPropertyName("RECALC_MUST_TIME")] + public int RecalcMustTime { get; set; } + + [JsonPropertyName("RECALC_MUST_TIME_MIN")] + public int RecalcMustTimeMin { get; set; } + + [JsonPropertyName("RECALC_MUST_TIME_MAX")] + public int RecalcMustTimeMax { get; set; } + + [JsonPropertyName("DAMAGE_PANIC_TIME")] + public float DamagePanicTime { get; set; } + + [JsonPropertyName("DANGER_UP_POINT")] + public float DangerUpPoint { get; set; } + + [JsonPropertyName("MAX_AIMING_UPGRADE_BY_TIME")] + public float MaxAimingUpgradeByTime { get; set; } + + [JsonPropertyName("DAMAGE_TO_DISCARD_AIM_0_100")] + public float DamageToDiscardAim0100 { get; set; } + + [JsonPropertyName("MIN_TIME_DISCARD_AIM_SEC")] + public float MinTimeDiscardAimSec { get; set; } + + [JsonPropertyName("MAX_TIME_DISCARD_AIM_SEC")] + public float MaxTimeDiscardAimSec { get; set; } + + [JsonPropertyName("XZ_COEF")] + public float XzCoef { get; set; } + + [JsonPropertyName("XZ_COEF_STATIONARY_BULLET")] + public float XzCoefStationaryBullet { get; set; } + + [JsonPropertyName("XZ_COEF_STATIONARY_GRENADE")] + public float XzCoefStationaryGrenade { get; set; } + + [JsonPropertyName("SHOOT_TO_CHANGE_PRIORITY")] + public int ShootToChangePriority { get; set; } + + [JsonPropertyName("BOTTOM_COEF")] + public float BottomCoef { get; set; } + + [JsonPropertyName("FIRST_CONTACT_ADD_SEC")] + public float FirstContactAddSec { get; set; } + + [JsonPropertyName("FIRST_CONTACT_ADD_CHANCE_100")] + public float FirstContactAddChance100 { get; set; } + + [JsonPropertyName("BASE_HIT_AFFECTION_DELAY_SEC")] + public float BaseHitAffectionDelaySec { get; set; } + + [JsonPropertyName("BASE_HIT_AFFECTION_MIN_ANG")] + public float BaseHitAffectionMinAng { get; set; } + + [JsonPropertyName("BASE_HIT_AFFECTION_MAX_ANG")] + public float BaseHitAffectionMaxAng { get; set; } + + [JsonPropertyName("BASE_SHIEF")] + public float BaseShief { get; set; } + + [JsonPropertyName("BASE_SHIEF_STATIONARY_BULLET")] + public float BaseShiefStationaryBullet { get; set; } + + [JsonPropertyName("BASE_SHIEF_STATIONARY_GRENADE")] + public float BaseShiefStationaryGrenade { get; set; } + + [JsonPropertyName("SCATTERING_HAVE_DAMAGE_COEF")] + public float ScatteringHaveDamageCoef { get; set; } + + [JsonPropertyName("SCATTERING_DIST_MODIF")] + public float ScatteringDistModif { get; set; } + + [JsonPropertyName("SCATTERING_DIST_MODIF_CLOSE")] + public float ScatteringDistModifClose { get; set; } + + [JsonPropertyName("AIMING_TYPE")] + public int AimingType { get; set; } + + [JsonPropertyName("DIST_TO_SHOOT_TO_CENTER")] + public float DistToShootToCenter { get; set; } + + [JsonPropertyName("DIST_TO_SHOOT_NO_OFFSET")] + public float DistToShootNoOffset { get; set; } + + [JsonPropertyName("SHPERE_FRIENDY_FIRE_SIZE")] + public float ShpereFriendyFireSize { get; set; } + + [JsonPropertyName("COEF_IF_MOVE")] + public float CoefIfMove { get; set; } + + [JsonPropertyName("TIME_COEF_IF_MOVE")] + public float TimeCoefIfMove { get; set; } + + [JsonPropertyName("BOT_MOVE_IF_DELTA")] + public float BotMoveIfDelta { get; set; } + + [JsonPropertyName("NEXT_SHOT_MISS_CHANCE_100")] + public float NextShotMissChance100 { get; set; } + + [JsonPropertyName("NEXT_SHOT_MISS_Y_OFFSET")] + public float NextShotMissYOffset { get; set; } + + [JsonPropertyName("ANYTIME_LIGHT_WHEN_AIM_100")] + public float AnytimeLightWhenAim100 { get; set; } + + [JsonPropertyName("ANY_PART_SHOOT_TIME")] + public float AnyPartShootTime { get; set; } + + [JsonPropertyName("WEAPON_ROOT_OFFSET")] + public float WeaponRootOffset { get; set; } + + [JsonPropertyName("MIN_DAMAGE_TO_GET_HIT_AFFETS")] + public float MinDamageToGetHitAffets { get; set; } + + [JsonPropertyName("MAX_AIM_TIME")] + public float MaxAimTime { get; set; } + + [JsonPropertyName("OFFSET_RECAL_ANYWAY_TIME")] + public float OffsetRecalAnywayTime { get; set; } + + [JsonPropertyName("Y_TOP_OFFSET_COEF")] + public float YTopOffsetCoef { get; set; } + + [JsonPropertyName("Y_BOTTOM_OFFSET_COEF")] + public float YBottomOffsetCoef { get; set; } + + [JsonPropertyName("STATIONARY_LEAVE_HALF_DEGREE")] + public float StationaryLeaveHalfDegree { get; set; } + + [JsonPropertyName("BAD_SHOOTS_MIN")] + public int BadShootsMin { get; set; } + + [JsonPropertyName("BAD_SHOOTS_MAX")] + public int BadShootsMax { get; set; } + + [JsonPropertyName("BAD_SHOOTS_OFFSET")] + public float BadShootsOffset { get; set; } + + [JsonPropertyName("BAD_SHOOTS_MAIN_COEF")] + public float BadShootsMainCoef { get; set; } + + [JsonPropertyName("START_TIME_COEF")] + public float StartTimeCoef { get; set; } + + [JsonPropertyName("AIMING_ON_WAY")] + public float AimingOnWay { get; set; } + + [JsonPropertyName("FIRST_CONTACT_HARD_TO_SEE_MISS_SHOOTS_DISTANCE")] + public float FirstContactHardToSeeMissShootsDistance { get; set; } + + [JsonPropertyName("FIRST_CONTACT_HARD_TO_SEE_MISS_SHOOTS_COUNT")] + public int FirstContactHardToSeeMissShootsCount { get; set; } + + [JsonPropertyName("MISS_FIRST_SOOTS")] + public int MissFirstSoots { get; set; } + + [JsonPropertyName("MISS_ON_START")] + public int MissOnStart { get; set; } + + [JsonPropertyName("MISS_DIST")] + public float MissDist { get; set; } + + [JsonPropertyName("UnderbarrelLauncherAiming")] + public required BotUnderbarrelLauncherAimingSettings UnderbarrelLauncherAiming { get; set; } +} + +/// +/// See BotUnderbarrelLauncherAimingSettings in the client, this record should match that +/// +public record BotUnderbarrelLauncherAimingSettings +{ + [JsonPropertyName("AIMING_ON_WAY")] + public float AimingOnWay { get; set; } + + [JsonPropertyName("ANYTIME_LIGHT_WHEN_AIM_100")] + public float AnytimeLightWhenAim100 { get; set; } + + [JsonPropertyName("BAD_SHOOTS_MIN")] + public int BadShootsMin { get; set; } + + [JsonPropertyName("BAD_SHOOTS_MAX")] + public int BadShootsMax { get; set; } + + [JsonPropertyName("START_TIME_COEF")] + public float StartTimeCoef { get; set; } + + [JsonPropertyName("DAMAGE_TO_DISCARD_AIM_0_100")] + public float DamageToDiscardAim0100 { get; set; } + + [JsonPropertyName("MIN_TIME_DISCARD_AIM_SEC")] + public float MinTimeDiscardAimSec { get; set; } + + [JsonPropertyName("MAX_TIME_DISCARD_AIM_SEC")] + public float MaxTimeDiscardAimSec { get; set; } + + [JsonPropertyName("MAX_AIM_PRECICING")] + public float MaxAimPrecicing { get; set; } + + [JsonPropertyName("MAX_AIMING_UPGRADE_BY_TIME")] + public float MaxAimingUpgradeByTime { get; set; } + + [JsonPropertyName("BOT_MOVE_IF_DELTA")] + public float BotMoveIfDelta { get; set; } + + [JsonPropertyName("PANIC_TIME")] + public float PanicTime { get; set; } + + [JsonPropertyName("RECALC_MUST_TIME_MIN")] + public int RecalcMustTimeMin { get; set; } + + [JsonPropertyName("RECALC_MUST_TIME_MAX")] + public int RecalcMustTimeMax { get; set; } + + [JsonPropertyName("RECLC_Y_DIST")] + public float ReclcYDist { get; set; } + + [JsonPropertyName("RECALC_SQR_DIST")] + public float RecalcSqrDist { get; set; } + + [JsonPropertyName("TIME_COEF_IF_MOVE")] + public float TimeCoefIfMove { get; set; } + + [JsonPropertyName("PANIC_COEF")] + public float PanicCoef { get; set; } + + [JsonPropertyName("COEF_FROM_COVER")] + public float CoefFromCover { get; set; } + + [JsonPropertyName("BOTTOM_COEF")] + public float BottomCoef { get; set; } + + [JsonPropertyName("MAX_AIM_TIME")] + public float MaxAimTime { get; set; } + + [JsonPropertyName("SCATTERING_DIST_MODIF")] + public float ScatteringDistModif { get; set; } + + [JsonPropertyName("SCATTERING_DIST_MODIF_CLOSE")] + public float ScatteringDistModifClose { get; set; } + + [JsonPropertyName("DIST_TO_SHOOT_NO_OFFSET")] + public float DistToShootNoOffset { get; set; } + + [JsonPropertyName("PANIC_ACCURATY_COEF")] + public float PanicAccuratyCoef { get; set; } + + [JsonPropertyName("HARD_AIM")] + public float HardAim { get; set; } + + [JsonPropertyName("COEF_IF_MOVE")] + public float CoefIfMove { get; set; } + + [JsonPropertyName("Y_TOP_OFFSET_COEF")] + public float YTopOffsetCoef { get; set; } + + [JsonPropertyName("Y_BOTTOM_OFFSET_COEF")] + public float YBottomOffsetCoef { get; set; } + + [JsonPropertyName("NEXT_SHOT_MISS_Y_OFFSET")] + public float NextShotMissYOffset { get; set; } + + [JsonPropertyName("BAD_SHOOTS_OFFSET")] + public float BadShootsOffset { get; set; } + + [JsonPropertyName("BAD_SHOOTS_MAIN_COEF")] + public float BadShootsMainCoef { get; set; } + + [JsonPropertyName("OFFSET_RECAL_ANYWAY_TIME")] + public float OffsetRecalAnywayTime { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalCoreSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalCoreSettings.cs new file mode 100644 index 00000000..3b8bca6e --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalCoreSettings.cs @@ -0,0 +1,60 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See GClass611 (To be remapped to BotGlobalsCoreSettingsClass) in the client, this record should match that +/// +public record BotGlobalCoreSettings +{ + [JsonPropertyName("VisibleAngle")] + public float VisibleAngle { get; set; } + + [JsonPropertyName("VisibleDistance")] + public float VisibleDistance { get; set; } + + [JsonPropertyName("GainSightCoef")] + public float GainSightCoef { get; set; } + + [JsonPropertyName("ScatteringPerMeter")] + public float ScatteringPerMeter { get; set; } + + [JsonPropertyName("ScatteringClosePerMeter")] + public float ScatteringClosePerMeter { get; set; } + + [JsonPropertyName("DamageCoeff")] + public float DamageCoeff { get; set; } + + [JsonPropertyName("HearingSense")] + public float HearingSense { get; set; } + + [JsonPropertyName("CanRun")] + public bool CanRun { get; set; } + + [JsonPropertyName("CanGrenade")] + public bool CanGrenade { get; set; } + + [JsonPropertyName("AimingType")] + public EAimingType AimingType { get; set; } + + [JsonPropertyName("PistolFireDistancePref")] + public float PistolFireDistancePref { get; set; } + + [JsonPropertyName("ShotgunFireDistancePref")] + public float ShotgunFireDistancePref { get; set; } + + [JsonPropertyName("RifleFireDistancePref")] + public float RifleFireDistancePref { get; set; } + + [JsonPropertyName("AccuratySpeed")] + public float AccuratySpeed { get; set; } + + [JsonPropertyName("WaitInCoverBetweenShotsSec")] + public float WaitInCoverBetweenShotsSec { get; set; } + + public enum EAimingType + { + normal, + regular, + } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalLayData.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalLayData.cs new file mode 100644 index 00000000..73503802 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalLayData.cs @@ -0,0 +1,93 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Common.Tables; + +/// +/// See BotGlobalLayData in the client, this record should match that +/// +public record BotGlobalLayData +{ + [JsonPropertyName("CHECK_SHOOT_WHEN_LAYING")] + public bool CheckShootWhenLaying { get; set; } + + [JsonPropertyName("DELTA_LAY_CHECK")] + public float DeltaLayCheck { get; set; } + + [JsonPropertyName("DELTA_GETUP")] + public float DeltaGetup { get; set; } + + [JsonPropertyName("DELTA_AFTER_GETUP")] + public float DeltaAfterGetup { get; set; } + + [JsonPropertyName("CLEAR_POINTS_OF_SCARE_SEC")] + public float ClearPointsOfScareSec { get; set; } + + [JsonPropertyName("MAX_LAY_TIME")] + public float MaxLayTime { get; set; } + + [JsonPropertyName("DELTA_WANT_LAY_CHECL_SEC")] + public float DeltaWantLayCheckSec { get; set; } + + [JsonPropertyName("ATTACK_LAY_CHANCE")] + public float AttackLayChance { get; set; } + + [JsonPropertyName("DIST_TO_COVER_TO_LAY")] + public float DistToCoverToLay { get; set; } + + [JsonPropertyName("DIST_TO_COVER_TO_LAY_SQRT")] + public float DistToCoverToLaySqrt { get; set; } + + [JsonPropertyName("DIST_GRASS_TERRAIN_SQRT")] + public float DistGrassTerrainSqrt { get; set; } + + [JsonPropertyName("DIST_ENEMY_NULL_DANGER_LAY")] + public float DistEnemyNullDangerLay { get; set; } + + [JsonPropertyName("DIST_ENEMY_NULL_DANGER_LAY_SQRT")] + public float DistEnemyNullDangerLaySqrt { get; set; } + + [JsonPropertyName("DIST_ENEMY_GETUP_LAY")] + public float DistEnemyGetupLay { get; set; } + + [JsonPropertyName("DIST_ENEMY_GETUP_LAY_SQRT")] + public float DistEnemyGetupLaySqrt { get; set; } + + [JsonPropertyName("DIST_ENEMY_CAN_LAY")] + public float DistEnemyCanLay { get; set; } + + [JsonPropertyName("DIST_ENEMY_CAN_LAY_SQRT")] + public float DistEnemyCanLaySqrt { get; set; } + + [JsonPropertyName("LAY_AIM")] + public float LayAim { get; set; } + + [JsonPropertyName("MIN_CAN_LAY_DIST_SQRT")] + public float MinCanLayDistSqrt { get; set; } + + [JsonPropertyName("MIN_CAN_LAY_DIST")] + public float MinCanLayDist { get; set; } + + [JsonPropertyName("MAX_CAN_LAY_DIST_SQRT")] + public float MaxCanLayDistSqrt { get; set; } + + [JsonPropertyName("MAX_CAN_LAY_DIST")] + public float MaxCanLayDist { get; set; } + + [JsonPropertyName("LAY_CHANCE_DANGER")] + public float LayChanceDanger { get; set; } + + [JsonPropertyName("DAMAGE_TIME_TO_GETUP")] + public int DamageTimeToGetup { get; set; } + + [JsonPropertyName("SHALL_GETUP_ON_ROTATE")] + public bool ShallGetupOnRotate { get; set; } + + [JsonPropertyName("SHALL_LAY_WITHOUT_CHECK")] + public bool ShallLayWithoutCheck { get; set; } + + [JsonPropertyName("IF_NO_ENEMY")] + public bool IfNoEnemy { get; set; } + + [JsonPropertyName("SHALL_LAY_PROBABILTY_WHEN_ARTILLERY")] + public int ShallLayProbabilityWhenArtillery { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalLookData.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalLookData.cs new file mode 100644 index 00000000..361ac5fb --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalLookData.cs @@ -0,0 +1,201 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalLookData in the client, this record should match that +/// +public record BotGlobalLookData +{ + [JsonPropertyName("OLD_TIME_POINT")] + public float OldTimePoint { get; set; } + + [JsonPropertyName("WAIT_NEW_SENSOR")] + public float WaitNewSensor { get; set; } + + [JsonPropertyName("WAIT_NEW__LOOK_SENSOR")] + public float WaitNewLookSensor { get; set; } + + [JsonPropertyName("LOOK_AROUND_DELTA")] + public float LookAroundDelta { get; set; } + + [JsonPropertyName("MAX_VISION_GRASS_METERS")] + public float MaxVisionGrassMeters { get; set; } + + [JsonPropertyName("MAX_VISION_GRASS_METERS_FLARE")] + public float MaxVisionGrassMetersFlare { get; set; } + + [JsonPropertyName("MAX_VISION_GRASS_METERS_OPT")] + public float MaxVisionGrassMetersOpt { get; set; } + + [JsonPropertyName("MAX_VISION_GRASS_METERS_FLARE_OPT")] + public float MaxVisionGrassMetersFlareOpt { get; set; } + + [JsonPropertyName("LightOnVisionDistance")] + public float LightOnVisionDistance { get; set; } + + [JsonPropertyName("FAR_DISTANCE")] + public float FarDistance { get; set; } + + [JsonPropertyName("FarDeltaTimeSec")] + public float FarDeltaTimeSec { get; set; } + + [JsonPropertyName("MIDDLE_DIST")] + public float MiddleDist { get; set; } + + [JsonPropertyName("MiddleDeltaTimeSec")] + public float MiddleDeltaTimeSec { get; set; } + + [JsonPropertyName("CloseDeltaTimeSec")] + public float CloseDeltaTimeSec { get; set; } + + [JsonPropertyName("POSIBLE_VISION_SPACE")] + public float PosibleVisionSpace { get; set; } + + [JsonPropertyName("VISIBILITY_CHANGE_SPEED")] + public float VisibilityChangeSpeed { get; set; } + + [JsonPropertyName("MIN_DISTANCE_VISIBILITY_CHANGE_SPEED_K")] + public float MinDistanceVisibilityChangeSpeedK { get; set; } + + [JsonPropertyName("MAX_DISTANCE_VISIBILITY_CHANGE_SPEED_K")] + public float MaxDistanceVisibilityChangeSpeedK { get; set; } + + [JsonPropertyName("GOAL_TO_FULL_DISSAPEAR")] + public float GoalToFullDissapear { get; set; } + + [JsonPropertyName("GOAL_TO_FULL_DISSAPEAR_GREEN")] + public float GoalToFullDissapearGreen { get; set; } + + [JsonPropertyName("GOAL_TO_FULL_DISSAPEAR_SHOOT")] + public float GoalToFullDissapearShoot { get; set; } + + [JsonPropertyName("BODY_DELTA_TIME_SEARCH_SEC")] + public float BodyDeltaTimeSearchSec { get; set; } + + [JsonPropertyName("COME_TO_BODY_DIST")] + public float ComeToBodyDist { get; set; } + + [JsonPropertyName("MARKSMAN_VISIBLE_DIST_COEF")] + public float MarksmanVisibleDistCoef { get; set; } + + [JsonPropertyName("VISIBLE_DISNACE_WITH_LIGHT")] + public float VisibleDisnaceWithLight { get; set; } + + [JsonPropertyName("ENEMY_LIGHT_ADD")] + public float EnemyLightAdd { get; set; } + + [JsonPropertyName("ENEMY_LIGHT_START_DIST")] + public float EnemyLightStartDist { get; set; } + + [JsonPropertyName("DIST_NOT_TO_IGNORE_WALL")] + public float DistNotToIgnoreWall { get; set; } + + [JsonPropertyName("DIST_CHECK_WALL")] + public float DistCheckWall { get; set; } + + [JsonPropertyName("LOOK_LAST_POSENEMY_IF_NO_DANGER_SEC")] + public float LookLastPosenemyIfNoDangerSec { get; set; } + + [JsonPropertyName("MIN_LOOK_AROUD_TIME")] + public float MinLookAroudTime { get; set; } + + [JsonPropertyName("LOOK_THROUGH_GRASS")] + public bool LookThroughGrass { get; set; } + + [JsonPropertyName("LOOK_THROUGH_GRASS_DIST_METERS")] + public float LookThroughGrassDistMeters { get; set; } + + [JsonPropertyName("SEC_REPEATED_SEEN")] + public float SecRepeatedSeen { get; set; } + + [JsonPropertyName("DIST_SQRT_REPEATED_SEEN")] + public double DistSqrtRepeatedSeen { get; set; } + + [JsonPropertyName("DIST_REPEATED_SEEN")] + public double DistRepeatedSeen { get; set; } + + [JsonPropertyName("COEF_REPEATED_SEEN")] + public float CoefRepeatedSeen { get; set; } + + [JsonPropertyName("MAX_DIST_CLAMP_TO_SEEN_SPEED")] + public float MaxDistClampToSeenSpeed { get; set; } + + [JsonPropertyName("NIGHT_VISION_ON")] + public float NightVisionOn { get; set; } + + [JsonPropertyName("NIGHT_VISION_OFF")] + public float NightVisionOff { get; set; } + + [JsonPropertyName("NIGHT_VISION_DIST")] + public float NightVisionDist { get; set; } + + [JsonPropertyName("VISIBLE_ANG_LIGHT")] + public float VisibleAngLight { get; set; } + + [JsonPropertyName("VISIBLE_ANG_NIGHTVISION")] + public float VisibleAngNightvision { get; set; } + + [JsonPropertyName("NO_GREEN_DIST")] + public float NoGreenDist { get; set; } + + [JsonPropertyName("NO_GRASS_DIST")] + public float NoGrassDist { get; set; } + + [JsonPropertyName("INSIDE_BUSH_COEF")] + public float InsideBushCoef { get; set; } + + [JsonPropertyName("SELF_NIGHTVISION")] + public bool SelfNightvision { get; set; } + + [JsonPropertyName("FULL_SECTOR_VIEW")] + public bool FullSectorView { get; set; } + + [JsonPropertyName("LOOK_THROUGH_PERIOD_BY_HIT")] + public float LookThroughPeriodByHit { get; set; } + + [JsonPropertyName("CHECK_HEAD_ANY_DIST")] + public bool CheckHeadAnyDist { get; set; } + + [JsonPropertyName("MIDDLE_DIST_CAN_SHOOT_HEAD")] + public bool MiddleDistCanShootHead { get; set; } + + [JsonPropertyName("CAN_USE_LIGHT")] + public bool CanUseLight { get; set; } + + [JsonPropertyName("RAIN_DEBUFF_MAXVISIBILITY_MULTIPLYER")] + public float RainDebuffMaxvisibilityMultiplyer { get; set; } + + [JsonPropertyName("FOG_DEBUFF_MAXVISIBILITY_MULTIPLYER")] + public float FogDebuffMaxvisibilityMultiplyer { get; set; } + + [JsonPropertyName("RAIN_DEBUFF_SEENCOEFF_MULTIPLYER")] + public float RainDebuffSeencoeffMultiplyer { get; set; } + + [JsonPropertyName("FOG_DEBUFF_SEENCOEFF_MULTIPLYER")] + public float FogDebuffSeencoeffMultiplyer { get; set; } + + [JsonPropertyName("SHOOT_FROM_EYES")] + public bool ShootFromEyes { get; set; } + + [JsonPropertyName("ANGLE_FOR_GETUP")] + public float AngleForGetup { get; set; } + + [JsonPropertyName("MINIMUM_VISIBLE_DIST")] + public float MinimumVisibleDist { get; set; } + + [JsonPropertyName("CAN_USE_STRIBOSCOPE")] + public float CanUseStriboscope { get; set; } + + [JsonPropertyName("LOOK_TO_ENEMY_TIME")] + public float LookToEnemyTime { get; set; } + + [JsonPropertyName("ANGLE_VISION_COEF_FILTER")] + public float AngleVisionCoefFilter { get; set; } + + [JsonPropertyName("HEAD_ROTATE_SPEED")] + public float HeadRotateSpeed { get; set; } + + [JsonPropertyName("VISIBILITY_LEVEL_TO_TURN_HEAD")] + public float VisibilityLevelToTurnHead { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalPatrolSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalPatrolSettings.cs new file mode 100644 index 00000000..7c6a824f --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalPatrolSettings.cs @@ -0,0 +1,201 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalPatrolSettings in the client, this record should match that +/// +public class BotGlobalPatrolSettings +{ + [JsonPropertyName("LOOK_TIME_BASE")] + public float LookTimeBase { get; set; } + + [JsonPropertyName("RESERVE_TIME_STAY")] + public float ReserveTimeStay { get; set; } + + [JsonPropertyName("RESERVE_LOOT_TIME_STAY")] + public float ReserveLootTimeStay { get; set; } + + [JsonPropertyName("FRIEND_SEARCH_SEC")] + public float FriendSearchSeconds { get; set; } + + [JsonPropertyName("TALK_DELAY")] + public float TalkDelay { get; set; } + + [JsonPropertyName("MIN_TALK_DELAY")] + public float MinTalkDelay { get; set; } + + [JsonPropertyName("TALK_DELAY_BIG")] + public float TalkDelayBig { get; set; } + + [JsonPropertyName("CHANGE_WAY_TIME")] + public float ChangeWayTime { get; set; } + + [JsonPropertyName("MIN_DIST_TO_CLOSE_TALK")] + public float MinDistToCloseTalk { get; set; } + + [JsonPropertyName("VISION_DIST_COEF_PEACE")] + public float VisionDistanceCoefPeace { get; set; } + + [JsonPropertyName("MIN_DIST_TO_CLOSE_TALK_SQR")] + public float MinDistToCloseTalkSqr { get; set; } + + [JsonPropertyName("CHANCE_TO_CUT_WAY_0_100")] + public float ChanceToCutWay { get; set; } + + [JsonPropertyName("CUT_WAY_MIN_0_1")] + public float CutWayMin { get; set; } + + [JsonPropertyName("CUT_WAY_MAX_0_1")] + public float CutWayMax { get; set; } + + [JsonPropertyName("CHANCE_TO_CHANGE_WAY_0_100")] + public float ChanceToChangeWay { get; set; } + + [JsonPropertyName("CHANCE_TO_SHOOT_DEADBODY")] + public int ChanceToShootDeadBody { get; set; } + + [JsonPropertyName("SUSPETION_PLACE_LIFETIME")] + public float SuspicionPlaceLifetime { get; set; } + + [JsonPropertyName("RESERVE_OUT_TIME")] + public float ReserveOutTime { get; set; } + + [JsonPropertyName("CLOSE_TO_SELECT_RESERV_WAY")] + public float CloseToSelectReserveWay { get; set; } + + [JsonPropertyName("MAX_YDIST_TO_START_WARN_REQUEST_TO_REQUESTER")] + public float MaxYDistToStartWarnRequest { get; set; } + + [JsonPropertyName("MAX_YDIST_TO_START_WARN_REQUEST_TO_REQUESTER_ALLY")] + public float MaxYDistToStartWarnRequestAlly { get; set; } + + [JsonPropertyName("CAN_CHOOSE_RESERV")] + public bool CanChooseReserve { get; set; } + + [JsonPropertyName("USE_ONLY_RESERV")] + public bool UseOnlyReserve { get; set; } + + [JsonPropertyName("HEAD_TURN_PERIOD_TIME")] + public float HeadTurnPeriodTime { get; set; } + + [JsonPropertyName("HEAD_FRONT_PERIOD_TIME")] + public float HeadFrontPeriodTime { get; set; } + + [JsonPropertyName("CHANCE_TO_PLAY_GESTURE_WHEN_CLOSE")] + public float ChanceToPlayGestureWhenClose { get; set; } + + [JsonPropertyName("HEAD_TURN_SPEED")] + public float HeadTurnSpeed { get; set; } + + [JsonPropertyName("HEAD_ANG_ROTATE")] + public float HeadAngleRotate { get; set; } + + [JsonPropertyName("LOOT_PATROL_POTENTIAL_CLUSTERS_AMOUNT")] + public int LootPatrolPotentialClustersAmount { get; set; } + + [JsonPropertyName("CHANCE_TO_PLAY_VOICE_WHEN_CLOSE")] + public float ChanceToPlayVoiceWhenClose { get; set; } + + [JsonPropertyName("GO_TO_NEXT_POINT_DELTA")] + public float GoToNextPointDelta { get; set; } + + [JsonPropertyName("GO_TO_NEXT_POINT_DELTA_RESERV_WAY")] + public float GoToNextPointDeltaReserveWay { get; set; } + + [JsonPropertyName("DEAD_BODY_SEE_DIST")] + public float DeadBodySeeDistance { get; set; } + + [JsonPropertyName("DEAD_BODY_LEAVE_DIST")] + public float DeadBodyLeaveDistance { get; set; } + + [JsonPropertyName("CAN_LOOK_TO_DEADBODIES")] + public bool CanLookToDeadBodies { get; set; } + + [JsonPropertyName("GESTURE_LENGTH")] + public float GestureLength { get; set; } + + [JsonPropertyName("SHALL_STOP_IN_PEACEFUL_ACTION")] + public bool ShallStopInPeacefulAction { get; set; } + + [JsonPropertyName("FORCE_OPPONENT_TO_PEAEFUL")] + public bool ForceOpponentToPeaceful { get; set; } + + [JsonPropertyName("RESERVE_USE_SURGE_TIME_STAY")] + public float ReserveUseSurgeTimeStay { get; set; } + + [JsonPropertyName("RESERV_CAN_USE_MEDS")] + public bool ReserveCanUseMeds { get; set; } + + [JsonPropertyName("USE_PATROL_POINT_ACTION_MOVE_BY_RESERVE_WAY")] + public bool UsePatrolPointActionMoveByReserveWay { get; set; } + + [JsonPropertyName("USE_SURGIAL_KIT_OVER_THE_BODY_CAHNCE_100")] + public float UseSurgicalKitChance { get; set; } + + [JsonPropertyName("USE_SURGIAL_KIT_OVER_THE_BODY_SECOND_CAHNCE_100")] + public float UseSurgicalKitSecondChance { get; set; } + + [JsonPropertyName("FOLLOWER_START_MOVE_DELAY")] + public float FollowerStartMoveDelay { get; set; } + + [JsonPropertyName("USE_CHACHE_WAYS")] + public bool UseCachedWays { get; set; } + + [JsonPropertyName("ITEMS_TO_DROP")] + public string ItemsToDrop { get; set; } + + [JsonPropertyName("SPRINT_BETWEEN_CACHED_POINTS")] + public float SprintBetweenCachedPoints { get; set; } + + [JsonPropertyName("CHECK_MAGAZIN_PERIOD")] + public float CheckMagazinePeriod { get; set; } + + [JsonPropertyName("EAT_DRINK_PERIOD")] + public float EatDrinkPeriod { get; set; } + + [JsonPropertyName("WATCH_SECOND_WEAPON_PERIOD")] + public float WatchSecondWeaponPeriod { get; set; } + + [JsonPropertyName("CAN_WATCH_SECOND_WEAPON")] + public bool CanWatchSecondWeapon { get; set; } + + [JsonPropertyName("DEAD_BODY_LOOK_PERIOD")] + public float DeadBodyLookPeriod { get; set; } + + [JsonPropertyName("CAN_HARD_AIM")] + public bool CanHardAim { get; set; } + + [JsonPropertyName("CAN_PEACEFUL_LOOK")] + public bool CanPeacefulLook { get; set; } + + [JsonPropertyName("CAN_FRIENDLY_TILT")] + public bool CanFriendlyTilt { get; set; } + + [JsonPropertyName("CAN_GESTUS")] + public bool CanGestus { get; set; } + + [JsonPropertyName("TRY_CHOOSE_RESERV_WAY_ON_START")] + public bool TryChooseReserveWayOnStart { get; set; } + + [JsonPropertyName("CAN_CHECK_MAGAZINE")] + public bool CanCheckMagazine { get; set; } + + [JsonPropertyName("PICKUP_ITEMS_TO_BACKPACK_OR_CONTAINER")] + public bool PickupItemsToBackpackOrContainer { get; set; } + + [JsonPropertyName("DO_RANDOM_DROP_ITEM")] + public bool DoRandomDropItem { get; set; } + + [JsonPropertyName("STAY_AFTER_LOOT_TIME_MIN")] + public float StayAfterLootTimeMin { get; set; } + + [JsonPropertyName("STAY_AFTER_LOOT_TIME_MAX")] + public float StayAfterLootTimeMax { get; set; } + + [JsonPropertyName("USE_REAL_LOOTING")] + public bool UseRealLooting { get; set; } + + [JsonPropertyName("DEAD_BODY_DROP_ITEM_PROBABILITY")] + public float DeadBodyDropItemProbability { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalShootData.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalShootData.cs new file mode 100644 index 00000000..dac8712a --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalShootData.cs @@ -0,0 +1,285 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalShootData in the client, this record should match that +/// +public record BotGlobalShootData +{ + [JsonPropertyName("SWITCH_TO_UNDERBARREL_WEAPON_COOLDOWN")] + public float SwitchToUnderbarrelWeaponCooldown { get; set; } + + [JsonPropertyName("MIN_TIME_TO_CHECK_FORCE_SWITCH_TO_GRENADE_LAUNCHER")] + public float MinTimeToCheckForceSwitchToGrenadeLauncher { get; set; } + + [JsonPropertyName("MAX_TIME_TO_CHECK_FORCE_SWITCH_TO_GRENADE_LAUNCHER")] + public float MaxTimeToCheckForceSwitchToGrenadeLauncher { get; set; } + + [JsonPropertyName("MAX_TIME_SEEN_TO_SWITCH_TO_GRENADE_LAUNCHER")] + public float MaxTimeSeenToSwitchToGrenadeLauncher { get; set; } + + [JsonPropertyName("MAX_SUCCESS_GRENADE_LAUNCHER_SHOOT_ATTEMPTS")] + public uint MaxSuccessGrenadeLauncherShootAttempts { get; set; } + + [JsonPropertyName("SHOOT_PROBABILITY_GRENADE_LAUNCHER")] + public float ShootProbabilityGrenadeLauncher { get; set; } + + [JsonPropertyName("LOW_DIST_K_FOR_GRENADE_LAUNCHER")] + public float LowDistKForGrenadeLauncher { get; set; } + + [JsonPropertyName("DEFAULT_LOW_DIST_TO_USE_GRENADE_LAUNCHER")] + public float DefaultLowDistToUseGrenadeLauncher { get; set; } + + [JsonPropertyName("DISTANCE_TO_TARGET_NEAR_ENEMY_TRESHOLD")] + public float DistanceToTargetNearEnemyTreshold { get; set; } + + [JsonPropertyName("DISTANCE_TO_TARGET_NEAR_ENEMY_DEVIATION")] + public float DistanceToTargetNearEnemyDeviation { get; set; } + + [JsonPropertyName("RECOIL_TIME_NORMALIZE")] + public float RecoilTimeNormalize { get; set; } + + [JsonPropertyName("RECOIL_PER_METER")] + public float RecoilPerMeter { get; set; } + + [JsonPropertyName("MAX_RECOIL_PER_METER")] + public float MaxRecoilPerMeter { get; set; } + + [JsonPropertyName("HORIZONT_RECOIL_COEF")] + public float HorizontRecoilCoef { get; set; } + + [JsonPropertyName("WAIT_NEXT_SINGLE_SHOT")] + public float WaitNextSingleShot { get; set; } + + [JsonPropertyName("WAIT_NEXT_STATIONARY_BULLET")] + public float WaitNextStationaryBullet { get; set; } + + [JsonPropertyName("WAIT_NEXT_STATIONARY_GRENADE")] + public float WaitNextStationaryGrenade { get; set; } + + [JsonPropertyName("WAIT_NEXT_SINGLE_SHOT_LONG_MAX")] + public float WaitNextSingleShotLongMax { get; set; } + + [JsonPropertyName("WAIT_NEXT_SINGLE_SHOT_LONG_MIN")] + public float WaitNextSingleShotLongMin { get; set; } + + [JsonPropertyName("NEXT_SINGLE_SHOT_PAUSE")] + public float NextSingleShotPause { get; set; } + + [JsonPropertyName("SINGLE_SHOT_SERIES_TIME_MIN")] + public float SingleShotSeriesTimeMin { get; set; } + + [JsonPropertyName("SINGLE_SHOT_SERIES_TIME_MAX")] + public float SingleShotSeriesTimeMax { get; set; } + + [JsonPropertyName("USE_SINGLE_SHOT_SERIES")] + public bool UseSingleShotSeries { get; set; } + + [JsonPropertyName("MARKSMAN_DIST_SEK_COEF")] + public float MarksmanDistSekCoef { get; set; } + + [JsonPropertyName("FINGER_HOLD_SINGLE_SHOT")] + public float FingerHoldSingleShot { get; set; } + + [JsonPropertyName("FINGER_HOLD_STATIONARY_BULLET")] + public float FingerHoldStationaryBullet { get; set; } + + [JsonPropertyName("FINGER_HOLD_STATIONARY_GRENADE")] + public float FingerHoldStationaryGrenade { get; set; } + + [JsonPropertyName("BASE_AUTOMATIC_TIME")] + public float BaseAutomaticTime { get; set; } + + [JsonPropertyName("AUTOMATIC_FIRE_SCATTERING_COEF")] + public float AutomaticFireScatteringCoef { get; set; } + + [JsonPropertyName("CHANCE_TO_CHANGE_TO_AUTOMATIC_FIRE_100")] + public float ChanceToChangeToAutomaticFire100 { get; set; } + + [JsonPropertyName("FAR_DIST_ENEMY")] + public float FarDistEnemy { get; set; } + + [JsonPropertyName("SHOOT_FROM_COVER")] + public int ShootFromCover { get; set; } + + [JsonPropertyName("FAR_DIST_ENEMY_SQR")] + public float FarDistEnemySqr { get; set; } + + [JsonPropertyName("MAX_DIST_COEF")] + public float MaxDistCoef { get; set; } + + [JsonPropertyName("RECOIL_DELTA_PRESS")] + public float RecoilDeltaPress { get; set; } + + [JsonPropertyName("RUN_DIST_NO_AMMO")] + public float RunDistNoAmmo { get; set; } + + [JsonPropertyName("RUN_DIST_NO_AMMO_SQRT")] + public float RunDistNoAmmoSqrt { get; set; } + + [JsonPropertyName("CAN_SHOOTS_TIME_TO_AMBUSH")] + public int CanShootsTimeToAmbush { get; set; } + + [JsonPropertyName("NOT_TO_SEE_ENEMY_TO_WANT_RELOAD_PERCENT")] + public float NotToSeeEnemyToWantReloadPercent { get; set; } + + [JsonPropertyName("NOT_TO_SEE_ENEMY_TO_WANT_RELOAD_SEC")] + public float NotToSeeEnemyToWantReloadSec { get; set; } + + [JsonPropertyName("RELOAD_PECNET_NO_ENEMY")] + public float ReloadPecnetNoEnemy { get; set; } + + [JsonPropertyName("CHANCE_TO_CHANGE_WEAPON")] + public float ChanceToChangeWeapon { get; set; } + + [JsonPropertyName("CHANCE_TO_CHANGE_WEAPON_WITH_HELMET")] + public float ChanceToChangeWeaponWithHelmet { get; set; } + + [JsonPropertyName("LOW_DIST_TO_CHANGE_WEAPON")] + public float LowDistToChangeWeapon { get; set; } + + [JsonPropertyName("FAR_DIST_TO_CHANGE_WEAPON")] + public float FarDistToChangeWeapon { get; set; } + + [JsonPropertyName("SUPPRESS_BY_SHOOT_TIME")] + public float SuppressByShootTime { get; set; } + + [JsonPropertyName("SUPPRESS_TRIGGERS_DOWN")] + public int SuppressTriggersDown { get; set; } + + [JsonPropertyName("SUPPRESS_TRIGGERS_DOWN_AS_LIST")] + public int SuppressTriggersDownAsList { get; set; } + + [JsonPropertyName("DIST_TO_CHANGE_TO_MAIN")] + public float DistToChangeToMain { get; set; } + + [JsonPropertyName("AGS_17_DIST_TO_LEAVE")] + public float Ags17DistToLeave { get; set; } + + [JsonPropertyName("DIST_TO_HIT_MELEE")] + public float DistToHitMelee { get; set; } + + [JsonPropertyName("DIST_TO_HIT_MELEE_CONTINUE_COMBO")] + public float DistToHitMeleeContinueCombo { get; set; } + + [JsonPropertyName("DIST_TO_STOP_SPRINT_MELEE")] + public float DistToStopSprintMelee { get; set; } + + [JsonPropertyName("TRY_HIT_PERIOD_MELEE")] + public float TryHitPeriodMelee { get; set; } + + [JsonPropertyName("BLOCK_PERIOD_WHEN_LAY")] + public float BlockPeriodWhenLay { get; set; } + + [JsonPropertyName("CHANGE_WEAPON_PERIOD")] + public float ChangeWeaponPeriod { get; set; } + + [JsonPropertyName("USE_MELEE_COMBOS")] + public bool UseMeleeCombos { get; set; } + + [JsonPropertyName("MELEE_RESET_HIT_TIME")] + public float MeleeResetHitTime { get; set; } + + [JsonPropertyName("MELEE_STOP_MOVE_DISTANCE")] + public float MeleeStopMoveDistance { get; set; } + + [JsonPropertyName("VALIDATE_MALFUNCTION_CHANCE")] + public int ValidateMalfunctionChance { get; set; } + + [JsonPropertyName("REPAIR_MALFUNCTION_IMMEDIATE_CHANCE")] + public int RepairMalfunctionImmediateChance { get; set; } + + [JsonPropertyName("DELAY_BEFORE_EXAMINE_MALFUNCTION")] + public float DelayBeforeExamineMalfunction { get; set; } + + [JsonPropertyName("DELAY_BEFORE_FIX_MALFUNCTION")] + public float DelayBeforeFixMalfunction { get; set; } + + [JsonPropertyName("TRY_CHANGE_WEAPON_INSTEAD_RELOAD")] + public bool TryChangeWeaponInsteadReload { get; set; } + + [JsonPropertyName("MELEE_ATTACK_ZIG_ZAG")] + public bool MeleeAttackZigZag { get; set; } + + [JsonPropertyName("MIN_DIST_TO_ENEMY_TO_CHANGE_WEAPON_INSTEAD_RELOAD")] + public float MinDistToEnemyToChangeWeaponInsteadReload { get; set; } + + [JsonPropertyName("CHANCE_TO_CHANGE_WEAPON_INSTEAD_RELOAD")] + public float ChanceToChangeWeaponInsteadReload { get; set; } + + [JsonPropertyName("CHANCE_TO_CHANGE_WEAPON_INSTEAD_RELOAD_ENEMY_WITHOUT_HELM")] + public float ChanceToChangeWeaponInsteadReloadEnemyWithoutHelm { get; set; } + + [JsonPropertyName("MELEE_STOP_DIST")] + public float MeleeStopDist { get; set; } + + [JsonPropertyName("BLOCK_STEERING")] + public bool BlockSteering { get; set; } + + [JsonPropertyName("USE_BTR_CANSHOOT")] + public bool UseBtrCanshoot { get; set; } + + [JsonPropertyName("FAR_DISTANCE_ALL_WEAPONS")] + public float FarDistanceAllWeapons { get; set; } + + [JsonPropertyName("FAR_DISTANCE_PISTOLS")] + public float FarDistancePistols { get; set; } + + [JsonPropertyName("FAR_DISTANCE_SHOTGUNS")] + public float FarDistanceShotguns { get; set; } + + [JsonPropertyName("FAR_DIST_EYE_CONTACT_TIME_TO_CHANGE_COVER")] + public float FarDistEyeContactTimeToChangeCover { get; set; } + + [JsonPropertyName("CHANGE_TO_MAIN_WEAPON_WHEN_PATROL")] + public bool ChangeToMainWeaponWhenPatrol { get; set; } + + [JsonPropertyName("SHOOT_IMMEDIATELY_DIST")] + public float ShootImmediatelyDist { get; set; } + + [JsonPropertyName("CAN_STOP_SHOOT_CAUSE_ANIMATOR")] + public bool CanStopShootCauseAnimator { get; set; } + + [JsonPropertyName("TRY_CHANGE_WEAPON_WHEN_RELOAD")] + public bool TryChangeWeaponWhenReload { get; set; } + + [JsonPropertyName("CHANGE_TO_MAIN_WHEN_SUPPORT_NO_AMMO")] + public bool ChangeToMainWhenSupportNoAmmo { get; set; } + + [JsonPropertyName("LAST_SEEN_TIME_TO_START_SUPPRESS_STATIONARY_AGS")] + public float LastSeenTimeToStartSuppressStationaryAgs { get; set; } + + [JsonPropertyName("STATIONARY_GRENADE_MIN_DIST_TO_TAKE")] + public float StationaryGrenadeMinDistToTake { get; set; } + + [JsonPropertyName("STATIONARY_SIMPLE_MIN_DIST_TO_TAKE")] + public double StationarySimpleMinDistToTake { get; set; } + + [JsonPropertyName("NO_OFFSET_SHOOTING_FROM_PLAYER")] + public bool NoOffsetShootingFromPlayer { get; set; } + + [JsonPropertyName("ALTERNATIVE_KNIFE_KICK")] + public bool AlternativeKnifeKick { get; set; } + + [JsonPropertyName("DITANCE_TO_OFF_AUTO_FIRE")] + public float DistanceToOffAutoFire { get; set; } + + [JsonPropertyName("DITANCE_TO_ON_AUTO_FIRE")] + public float DistanceToOnAutoFire { get; set; } + + [JsonPropertyName("MISS_ON_CRITICAL_DIST")] + public float MissOnCriticalDist { get; set; } + + [JsonPropertyName("MISS_AFTER_SPRINT")] + public bool MissAfterSprint { get; set; } + + [JsonPropertyName("MISS_TO_HEAD")] + public bool MissToHead { get; set; } + + [JsonPropertyName("MISS_ON_MOVE")] + public bool MissOnMove { get; set; } + + [JsonPropertyName("MISS_ON_TRANSITION")] + public bool MissOnTransition { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsBossSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsBossSettings.cs new file mode 100644 index 00000000..8907c94a --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsBossSettings.cs @@ -0,0 +1,399 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalsBossSettings in the client, this record should match that +/// +public record BotGlobalsBossSettings +{ + [JsonPropertyName("BOSS_DIST_TO_WARNING")] + public float BossDistToWarning { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_ALLY")] + public float BossDistToWarningAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_SQRT")] + public float BossDistToWarningSqrt { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_SQRT_ALLY")] + public float BossDistToWarningSqrtAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_USEC")] + public float BossDistToWarningUsec { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_USEC_ALLY")] + public float BossDistToWarningUsecAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_SQRT_USEC")] + public float BossDistToWarningSqrtUsec { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_SQRT_USEC_ALLY")] + public float BossDistToWarningSqrtUsecAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_BEAR")] + public float BossDistToWarningBear { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_BEAR_ALLY")] + public float BossDistToWarningBearAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_SQRT_BEAR")] + public float BossDistToWarningSqrtBear { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_SQRT_BEAR_ALLY")] + public float BossDistToWarningSqrtBearAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_OUT")] + public float BossDistToWarningOut { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_OUT_ALLY")] + public float BossDistToWarningOutAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_OUT_SQRT")] + public float BossDistToWarningOutSqrt { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_OUT_SQRT_ALLY")] + public float BossDistToWarningOutSqrtAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_SHOOT")] + public float BossDistToShoot { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_SHOOT_ALLY")] + public float BossDistToShootAlly { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_SHOOT_SQRT")] + public float BossDistToShootSqrt { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_SHOOT_SQRT_ALLY")] + public float BossDistToShootSqrtAlly { get; set; } + + [JsonPropertyName("CHANCE_TO_SEND_GRENADE_100")] + public float ChanceToSendGrenade100 { get; set; } + + [JsonPropertyName("MAX_DIST_COVER_BOSS")] + public float MaxDistCoverBoss { get; set; } + + [JsonPropertyName("MAX_DIST_COVER_BOSS_SQRT")] + public float MaxDistCoverBossSqrt { get; set; } + + [JsonPropertyName("MAX_DIST_DECIDER_TO_SEND")] + public float MaxDistDeciderToSend { get; set; } + + [JsonPropertyName("MAX_DIST_DECIDER_TO_SEND_SQRT")] + public float MaxDistDeciderToSendSqrt { get; set; } + + [JsonPropertyName("TIME_AFTER_LOSE")] + public float TimeAfterLose { get; set; } + + [JsonPropertyName("TIME_AFTER_LOSE_DELTA")] + public float TimeAfterLoseDelta { get; set; } + + [JsonPropertyName("PERSONS_SEND")] + public int PersonsSend { get; set; } + + [JsonPropertyName("DELTA_SEARCH_TIME")] + public float DeltaSearchTime { get; set; } + + [JsonPropertyName("COVER_TO_SEND")] + public bool CoverToSend { get; set; } + + [JsonPropertyName("WAIT_NO_ATTACK_SAVAGE")] + public float WaitNoAttackSavage { get; set; } + + [JsonPropertyName("CHANCE_USE_RESERVE_PATROL_100")] + public float ChanceUseReservePatrol100 { get; set; } + + [JsonPropertyName("WARN_PLAYER_PERIOD")] + public float WarnPlayerPeriod { get; set; } + + [JsonPropertyName("EFFECT_REGENERATION_PER_MIN")] + public float EffectRegenerationPerMin { get; set; } + + [JsonPropertyName("EFFECT_PAINKILLER")] + public bool EffectPainkiller { get; set; } + + [JsonPropertyName("DISABLE_METABOLISM")] + public bool DisableMetabolism { get; set; } + + [JsonPropertyName("KILLA_Y_DELTA_TO_BE_ENEMY_BOSS")] + public float KillaYDeltaToBeEnemyBoss { get; set; } + + [JsonPropertyName("KILLA_DITANCE_TO_BE_ENEMY_BOSS")] + public float KillaDitanceToBeEnemyBoss { get; set; } + + [JsonPropertyName("KILLA_START_SEARCH_SEC")] + public float KillaStartSearchSec { get; set; } + + [JsonPropertyName("KILLA_CONTUTION_TIME")] + public float KillaContutionTime { get; set; } + + [JsonPropertyName("KILLA_CLOSE_ATTACK_DIST")] + public float KillaCloseAttackDist { get; set; } + + [JsonPropertyName("KILLA_MIDDLE_ATTACK_DIST")] + public float KillaMiddleAttackDist { get; set; } + + [JsonPropertyName("KILLA_LARGE_ATTACK_DIST")] + public float KillaLargeAttackDist { get; set; } + + [JsonPropertyName("KILLA_SEARCH_METERS")] + public float KillaSearchMeters { get; set; } + + [JsonPropertyName("KILLA_DEF_DIST_SQRT")] + public float KillaDefDistSqrt { get; set; } + + [JsonPropertyName("KILLA_SEARCH_SEC_STOP_AFTER_COMING")] + public float KillaSearchSecStopAfterComing { get; set; } + + [JsonPropertyName("KILLA_DIST_TO_GO_TO_SUPPRESS")] + public float KillaDistToGoToSuppress { get; set; } + + [JsonPropertyName("KILLA_AFTER_GRENADE_SUPPRESS_DELAY")] + public float KillaAfterGrenadeSuppressDelay { get; set; } + + [JsonPropertyName("KILLA_CLOSEATTACK_TIMES")] + public int KillaCloseattackTimes { get; set; } + + [JsonPropertyName("KILLA_CLOSEATTACK_DELAY")] + public float KillaCloseattackDelay { get; set; } + + [JsonPropertyName("KILLA_HOLD_DELAY")] + public float KillaHoldDelay { get; set; } + + [JsonPropertyName("KILLA_BULLET_TO_RELOAD")] + public int KillaBulletToReload { get; set; } + + [JsonPropertyName("PERCENT_BULLET_TO_RELOAD")] + public float PercentBulletToReload { get; set; } + + [JsonPropertyName("SHALL_WARN")] + public bool ShallWarn { get; set; } + + [JsonPropertyName("KILLA_ENEMIES_TO_ATTACK")] + public int KillaEnemiesToAttack { get; set; } + + [JsonPropertyName("KILLA_ONE_IS_CLOSE")] + public float KillaOneIsClose { get; set; } + + [JsonPropertyName("KILLA_TRIGGER_DOWN_DELAY")] + public float KillaTriggerDownDelay { get; set; } + + [JsonPropertyName("KILLA_WAIT_IN_COVER_COEF")] + public float KillaWaitInCoverCoef { get; set; } + + [JsonPropertyName("TAGILLA_Y_DELTA_TO_BE_ENEMY_BOSS")] + public float TagillaYDeltaToBeEnemyBoss { get; set; } + + [JsonPropertyName("TAGILLA_SAVAGE_HELP_SQR_DIST")] + public float TagillaSavageHelpSqrDist { get; set; } + + [JsonPropertyName("TAGILLA_FORCED_CLOSE_ATTACK_DIST")] + public float TagillaForcedCloseAttackDist { get; set; } + + [JsonPropertyName("TAGILLA_FIRST_ASSAULT_RADIUS")] + public float TagillaFirstAssaultRadius { get; set; } + + [JsonPropertyName("TAGILLA_FIRST_ASSAULT_CHANCE")] + public float TagillaFirstAssaultChance { get; set; } + + [JsonPropertyName("TAGILLA_SECOND_ASSAULT_RADIUS")] + public float TagillaSecondAssaultRadius { get; set; } + + [JsonPropertyName("TAGILLA_SECOND_ASSAULT_CHANCE")] + public float TagillaSecondAssaultChance { get; set; } + + [JsonPropertyName("TAGILLA_FEEL_ENEMY_DIST_SQR")] + public float TagillaFeelEnemyDistSqr { get; set; } + + [JsonPropertyName("TAGILLA_TIME_TO_PURSUIT_WITHOUT_HITS")] + public float TagillaTimeToPursuitWithoutHits { get; set; } + + [JsonPropertyName("TAGILLA_MELEE_ATTACK_NEXT_DECISION_PERIOD")] + public float TagillaMeleeAttackNextDecisionPeriod { get; set; } + + [JsonPropertyName("TAGILLA_MELEE_CHANCE_RELOAD")] + public float TagillaMeleeChanceReload { get; set; } + + [JsonPropertyName("TAGILLA_MELEE_CHANCE_INTERACTION")] + public float TagillaMeleeChanceInteraction { get; set; } + + [JsonPropertyName("TAGILLA_MELEE_CHANCE_INVENTORY")] + public float TagillaMeleeChanceInventory { get; set; } + + [JsonPropertyName("TAGILLA_MELEE_CHANCE_MEDS")] + public float TagillaMeleeChanceMeds { get; set; } + + [JsonPropertyName("TAGILLA_MELEE_CHANCE_FORCED")] + public float TagillaMeleeChanceForced { get; set; } + + [JsonPropertyName("TAGILLA_MIN_TIME_TO_REPEAT_MELEE_ASSAULT")] + public float TagillaMinTimeToRepeatMeleeAssault { get; set; } + + [JsonPropertyName("KOJANIY_DIST_WHEN_READY")] + public float KojaniyDistWhenReady { get; set; } + + [JsonPropertyName("KOJANIY_DIST_TO_BE_ENEMY")] + public float KojaniyDistToBeEnemy { get; set; } + + [JsonPropertyName("KOJANIY_MIN_DIST_TO_LOOT")] + public float KojaniyMinDistToLoot { get; set; } + + [JsonPropertyName("KOJANIY_MIN_DIST_TO_LOOT_SQRT")] + public float KojaniyMinDistToLootSqrt { get; set; } + + [JsonPropertyName("KOJANIY_DIST_ENEMY_TOO_CLOSE")] + public float KojaniyDistEnemyTooClose { get; set; } + + [JsonPropertyName("KOJANIY_MANY_ENEMIES_COEF")] + public float KojaniyManyEnemiesCoef { get; set; } + + [JsonPropertyName("KOJANIY_FIGHT_CENTER_POS_ME")] + public bool KojaniyFightCenterPosMe { get; set; } + + [JsonPropertyName("KOJANIY_DIST_CORE_SPOS_RECALC")] + public float KojaniyDistCoreSposRecalc { get; set; } + + [JsonPropertyName("KOJANIY_DIST_CORE_SPOS_RECALC_SQRT")] + public float KojaniyDistCoreSposRecalcSqrt { get; set; } + + [JsonPropertyName("KOJANIY_START_SUPPERS_SHOOTS_SEC")] + public float KojaniyStartSuppersShootsSec { get; set; } + + [JsonPropertyName("KOJANIY_START_NEXT_SUPPERS_SHOOTS_SEC")] + public float KojaniyStartNextSuppersShootsSec { get; set; } + + [JsonPropertyName("KOJANIY_SAFE_ENEMIES")] + public int KojaniySafeEnemies { get; set; } + + [JsonPropertyName("KOJANIY_TAKE_CARE_ABOULT_ENEMY_DELTA")] + public float KojaniyTakeCareAboultEnemyDelta { get; set; } + + [JsonPropertyName("KOJANIY_WANNA_GO_TO_CLOSEST_COVER")] + public float KojaniyWannaGoToClosestCover { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWER_PATH_NAME")] + public string GluharFollowerPathName { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWER_SCOUT_DIST_START_ATTACK")] + public float GluharFollowerScoutDistStartAttack { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWER_SCOUT_DIST_END_ATTACK")] + public float GluharFollowerScoutDistEndAttack { get; set; } + + [JsonPropertyName("GLUHAR_BOSS_WANNA_ATTACK_CHANCE_0_100")] + public float GluharBossWannaAttackChance0100 { get; set; } + + [JsonPropertyName("GLUHAR_ASSAULT_ATTACK_DIST")] + public float GluharAssaultAttackDist { get; set; } + + [JsonPropertyName("GLUHAR_STOP_ASSAULT_ATTACK_DIST")] + public float GluharStopAssaultAttackDist { get; set; } + + [JsonPropertyName("GLUHAR_TIME_TO_ASSAULT")] + public float GluharTimeToAssault { get; set; } + + [JsonPropertyName("DIST_TO_PROTECT_BOSS")] + public float DistToProtectBoss { get; set; } + + [JsonPropertyName("GLUHAR_SEC_TO_REINFORSMENTS")] + public float GluharSecToReinforsments { get; set; } + + [JsonPropertyName("GLUHAR_REINFORSMENTS_BY_EXIT")] + public bool GluharReinforsmentsByExit { get; set; } + + [JsonPropertyName("GLUHAR_REINFORSMENTS_BY_EVENT")] + public bool GluharReinforsmentsByEvent { get; set; } + + [JsonPropertyName("GLUHAR_REINFORSMENTS_BY_PLAYER_COME_TO_ZONE")] + public bool GluharReinforsmentsByPlayerComeToZone { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWERS_TO_REINFORSMENTS")] + public int GluharFollowersToReinforsments { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWERS_SECURITY")] + public int GluharFollowersSecurity { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWERS_ASSAULT")] + public int GluharFollowersAssault { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWERS_SCOUT")] + public int GluharFollowersScout { get; set; } + + [JsonPropertyName("GLUHAR_FOLLOWERS_SNIPE")] + public int GluharFollowersSnipe { get; set; } + + [JsonPropertyName("GLUHAR_BOSS_DIST_TO_ENEMY_WANT_KILL")] + public float GluharBossDistToEnemyWantKill { get; set; } + + [JsonPropertyName("IF_I_HITTED_GO_AWAY_SEC_HIT")] + public float IfIHittedGoAwaySecHit { get; set; } + + [JsonPropertyName("DIST_TO_START_RUN_FOR_COVER_WITH_STOP")] + public float DistToStartRunForCoverWithStop { get; set; } + + [JsonPropertyName("DELTA_DIST_DEST_BOSS_START_RUN_FOR_COVER_WITH_STOP")] + public float DeltaDistDestBossStartRunForCoverWithStop { get; set; } + + [JsonPropertyName("SANITAR_ONLY_FIGHT_COVERS")] + public bool SanitarOnlyFightCovers { get; set; } + + [JsonPropertyName("SANITAR_TWO_COVER_TACTIC")] + public bool SanitarTwoCoverTactic { get; set; } + + [JsonPropertyName("COUNT_FOLLOWERS_TO_WARN")] + public int CountFollowersToWarn { get; set; } + + [JsonPropertyName("RUN_HIDE_CAN_USE_TREE_COVRES")] + public bool RunHideCanUseTreeCovres { get; set; } + + [JsonPropertyName("SECTANT_INDOOR_DIST_NOT_TO_ATTACK")] + public float SectantIndoorDistNotToAttack { get; set; } + + [JsonPropertyName("SET_CHEAT_VISIBLE_WHEN_ADD_TO_ENEMY")] + public bool SetCheatVisibleWhenAddToEnemy { get; set; } + + [JsonPropertyName("TOTAL_TIME_KILL")] + public float TotalTimeKill { get; set; } + + [JsonPropertyName("TOTAL_TIME_KILL_AFTER_WARN")] + public float TotalTimeKillAfterWarn { get; set; } + + [JsonPropertyName("COME_INSIDE_TIMES")] + public int ComeInsideTimes { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_OUT_DELTA")] + public float BossDistToWarningOutDelta { get; set; } + + [JsonPropertyName("BOSS_DIST_TO_WARNING_OUT_DELTA_ALLY")] + public float BossDistToWarningOutDeltaAlly { get; set; } + + [JsonPropertyName("TOTAL_TIME_KILL_AFTER_START_WARN")] + public float TotalTimeKillAfterStartWarn { get; set; } + + [JsonPropertyName("BIG_PIPE_ARTILLERY_COUNT")] + public int BigPipeArtilleryCount { get; set; } + + [JsonPropertyName("BOSS_ZRYACHIY_TELEPORT_CHANCE")] + public float BossZryachiyTeleportChance { get; set; } + + [JsonPropertyName("BOSS_ZRYACHIY_MIN_DIST_TO_TELEPORT")] + public float BossZryachiyMinDistToTeleport { get; set; } + + [JsonPropertyName("BOSS_ZRYACHIY_TELEPORT_CAN_SECONDS_FROM_START")] + public float BossZryachiyTeleportCanSecondsFromStart { get; set; } + + [JsonPropertyName("BOSS_ZRYACHIY_MIN_DIST_TO_NEXT_COVER")] + public float BossZryachiyMinDistToNextCover { get; set; } + + [JsonPropertyName("BOSS_ZRYACHIY_POSSIBLE_FOG")] + public float BossZryachiyPossibleFog { get; set; } + + [JsonPropertyName("NOT_ADD_TO_ENEMY_ON_KILLS")] + public bool NotAddToEnemyOnKills { get; set; } + + [JsonPropertyName("ALLOW_REQUEST_SELF")] + public bool AllowRequestSelf { get; set; } + + [JsonPropertyName("TAGILLA_MELEE_ATTACK_IF_NO_SHOOT")] + public float TagillaMeleeAttackIfNoShoot { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsChangeSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsChangeSettings.cs new file mode 100644 index 00000000..3ed4c854 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsChangeSettings.cs @@ -0,0 +1,57 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalsChangeSettings in the client, this record should match that +/// +public record BotGlobalsChangeSettings +{ + [JsonPropertyName("SMOKE_VISION_DIST")] + public float SmokeVisionDist { get; set; } + + [JsonPropertyName("SMOKE_GAIN_SIGHT")] + public float SmokeGainSight { get; set; } + + [JsonPropertyName("SMOKE_SCATTERING")] + public float SmokeScattering { get; set; } + + [JsonPropertyName("SMOKE_PRECICING")] + public float SmokePrecicing { get; set; } + + [JsonPropertyName("SMOKE_HEARING")] + public float SmokeHearing { get; set; } + + [JsonPropertyName("SMOKE_ACCURATY")] + public float SmokeAccuraty { get; set; } + + [JsonPropertyName("SMOKE_LAY_CHANCE")] + public float SmokeLayChance { get; set; } + + [JsonPropertyName("FLASH_VISION_DIST")] + public float FlashVisionDist { get; set; } + + [JsonPropertyName("FLASH_GAIN_SIGHT")] + public float FlashGainSight { get; set; } + + [JsonPropertyName("FLASH_SCATTERING")] + public float FlashScattering { get; set; } + + [JsonPropertyName("FLASH_PRECICING")] + public float FlashPrecicing { get; set; } + + [JsonPropertyName("FLASH_HEARING")] + public float FlashHearing { get; set; } + + [JsonPropertyName("FLASH_ACCURATY")] + public float FlashAccuraty { get; set; } + + [JsonPropertyName("FLASH_LAY_CHANCE")] + public float FlashLayChance { get; set; } + + [JsonPropertyName("STUN_HEARING")] + public float StunHearing { get; set; } + + [JsonPropertyName("INVISIBLE_ON_CLIENT")] + public bool InvisibleOnClient { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsCoverSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsCoverSettings.cs new file mode 100644 index 00000000..57df54d6 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsCoverSettings.cs @@ -0,0 +1,210 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalsCoverSettings in the client, this record should match that +/// +public record BotGlobalsCoverSettings +{ + [JsonPropertyName("RETURN_TO_ATTACK_AFTER_AMBUSH_MIN")] + public float ReturnToAttackAfterAmbushMin { get; set; } + + [JsonPropertyName("RETURN_TO_ATTACK_AFTER_AMBUSH_MAX")] + public float ReturnToAttackAfterAmbushMax { get; set; } + + [JsonPropertyName("SOUND_TO_GET_SPOTTED")] + public float SoundToGetSpotted { get; set; } + + [JsonPropertyName("TIME_TO_MOVE_TO_COVER")] + public float TimeToMoveToCover { get; set; } + + [JsonPropertyName("MAX_DIST_OF_COVER")] + public float MaxDistOfCover { get; set; } + + [JsonPropertyName("CHANGE_RUN_TO_COVER_SEC")] + public float ChangeRunToCoverSec { get; set; } + + [JsonPropertyName("CHANGE_RUN_TO_COVER_SEC_GREANDE")] + public float ChangeRunToCoverSecGreande { get; set; } + + [JsonPropertyName("MIN_DIST_TO_ENEMY")] + public float MinDistToEnemy { get; set; } + + [JsonPropertyName("DIST_CANT_CHANGE_WAY")] + public float DistCantChangeWay { get; set; } + + [JsonPropertyName("DIST_CHECK_SFETY")] + public float DistCheckSfety { get; set; } + + [JsonPropertyName("TIME_CHECK_SAFE")] + public float TimeCheckSafe { get; set; } + + [JsonPropertyName("HIDE_TO_COVER_TIME")] + public float HideToCoverTime { get; set; } + + [JsonPropertyName("MAX_DIST_OF_COVER_SQR")] + public float MaxDistOfCoverSqr { get; set; } + + [JsonPropertyName("DIST_CANT_CHANGE_WAY_SQR")] + public float DistCantChangeWaySqr { get; set; } + + [JsonPropertyName("SPOTTED_COVERS_RADIUS")] + public float SpottedCoversRadius { get; set; } + + [JsonPropertyName("LOOK_LAST_ENEMY_POS_MOVING")] + public float LookLastEnemyPosMoving { get; set; } + + [JsonPropertyName("LOOK_LAST_ENEMY_POS_LONG")] + public float LookLastEnemyPosLong { get; set; } + + [JsonPropertyName("LOOK_LAST_ENEMY_POS_DIST")] + public float LookLastEnemyPosDist { get; set; } + + [JsonPropertyName("LOOK_TO_HIT_POINT_IF_LAST_ENEMY")] + public float LookToHitPointIfLastEnemy { get; set; } + + [JsonPropertyName("LOOK_LAST_ENEMY_POS_LOOKAROUND")] + public float LookLastEnemyPosLookaround { get; set; } + + [JsonPropertyName("OFFSET_LOOK_ALONG_WALL_ANG")] + public int OffsetLookAlongWallAng { get; set; } + + [JsonPropertyName("SPOTTED_GRENADE_RADIUS")] + public float SpottedGrenadeRadius { get; set; } + + [JsonPropertyName("MAX_SPOTTED_TIME_SEC")] + public float MaxSpottedTimeSec { get; set; } + + [JsonPropertyName("WAIT_INT_COVER_FINDING_ENEMY")] + public float WaitIntCoverFindingEnemy { get; set; } + + [JsonPropertyName("CLOSE_DIST_POINT_SQRT")] + public float CloseDistPointSqrt { get; set; } + + [JsonPropertyName("DELTA_SEEN_FROM_COVE_LAST_POS")] + public float DeltaSeenFromCoveLastPos { get; set; } + + [JsonPropertyName("MOVE_TO_COVER_WHEN_TARGET")] + public bool MoveToCoverWhenTarget { get; set; } + + [JsonPropertyName("RUN_COVER_IF_CAN_AND_NO_ENEMIES")] + public bool RunCoverIfCanAndNoEnemies { get; set; } + + [JsonPropertyName("SPOTTED_GRENADE_TIME")] + public float SpottedGrenadeTime { get; set; } + + [JsonPropertyName("DEPENDS_Y_DIST_TO_BOT")] + public bool DependsYDistToBot { get; set; } + + [JsonPropertyName("RUN_IF_FAR")] + public float RunIfFar { get; set; } + + [JsonPropertyName("RUN_IF_FAR_SQRT")] + public float RunIfFarSqrt { get; set; } + + [JsonPropertyName("STAY_IF_FAR")] + public float StayIfFar { get; set; } + + [JsonPropertyName("STAY_IF_FAR_SQRT")] + public float StayIfFarSqrt { get; set; } + + [JsonPropertyName("CHECK_COVER_ENEMY_LOOK")] + public bool CheckCoverEnemyLook { get; set; } + + [JsonPropertyName("SHOOT_NEAR_TO_LEAVE")] + public int ShootNearToLeave { get; set; } + + [JsonPropertyName("SHOOT_NEAR_SEC_PERIOD")] + public float ShootNearSecPeriod { get; set; } + + [JsonPropertyName("HITS_TO_LEAVE_COVER")] + public int HitsToLeaveCover { get; set; } + + [JsonPropertyName("HITS_TO_LEAVE_COVER_UNKNOWN")] + public int HitsToLeaveCoverUnknown { get; set; } + + [JsonPropertyName("DOG_FIGHT_AFTER_LEAVE")] + public float DogFightAfterLeave { get; set; } + + [JsonPropertyName("NOT_LOOK_AT_WALL_IS_DANGER")] + public bool NotLookAtWallIsDanger { get; set; } + + [JsonPropertyName("MIN_DEFENCE_LEVEL")] + public float MinDefenceLevel { get; set; } + + [JsonPropertyName("REWORK_NOT_TO_SHOOT")] + public bool ReworkNotToShoot { get; set; } + + [JsonPropertyName("DELETE_POINTS_BEHIND_ENEMIES")] + public bool DeletePointsBehindEnemies { get; set; } + + [JsonPropertyName("GOOD_DIST_TO_POINT_COEF")] + public float GoodDistToPointCoef { get; set; } + + [JsonPropertyName("ENEMY_DIST_TO_GO_OUT")] + public float EnemyDistToGoOut { get; set; } + + [JsonPropertyName("CHECK_CLOSEST_FRIEND")] + public bool CheckClosestFriend { get; set; } + + [JsonPropertyName("MIN_TO_ENEMY_TO_BE_NOT_SAFE_SQRT")] + public float MinToEnemyToBeNotSafeSqrt { get; set; } + + [JsonPropertyName("MIN_TO_ENEMY_TO_BE_NOT_SAFE")] + public float MinToEnemyToBeNotSafe { get; set; } + + [JsonPropertyName("SIT_DOWN_WHEN_HOLDING")] + public bool SitDownWhenHolding { get; set; } + + [JsonPropertyName("STATIONARY_WEAPON_NO_ENEMY_GETUP")] + public float StationaryWeaponNoEnemyGetup { get; set; } + + [JsonPropertyName("STATIONARY_WEAPON_MAX_DIST_TO_USE")] + public float StationaryWeaponMaxDistToUse { get; set; } + + [JsonPropertyName("STATIONARY_SPOTTED_TIMES_TO_LEAVE")] + public int StationarySpottedTimesToLeave { get; set; } + + [JsonPropertyName("STATIONARY_CAN_USE")] + public bool StationaryCanUse { get; set; } + + [JsonPropertyName("CAN_END_SHOOT_FROM_COVER_CAUSE_STATIONARY")] + public bool CanEndShootFromCoverCauseStationary { get; set; } + + [JsonPropertyName("CAN_END_SHOOT_FROM_COVER_CAUSE_STATIONARY_DELTA")] + public float CanEndShootFromCoverCauseStationaryDelta { get; set; } + + [JsonPropertyName("CAN_END_SHOOT_FROM_COVER_CAUSE_STATIONARY_RADIUS")] + public float CanEndShootFromCoverCauseStationaryRadius { get; set; } + + [JsonPropertyName("END_HOLD_IF_ENEMY_CLOSE_AND_VISIBLE")] + public float EndHoldIfEnemyCloseAndVisible { get; set; } + + [JsonPropertyName("DIST_MAX_REWORK_NOT_TO_SHOOT")] + public float DistMaxReworkNotToShoot { get; set; } + + [JsonPropertyName("SDIST_MAX_REWORK_NOT_TO_SHOOT")] + public float SdistMaxReworkNotToShoot { get; set; } + + [JsonPropertyName("USE_DANGER_AREAS")] + public bool UseDangerAreas { get; set; } + + [JsonPropertyName("MAX_ITERATIONS")] + public int MaxIterations { get; set; } + + [JsonPropertyName("CHANGE_COVER_IF_CANT_SHOOT_SEC")] + public float ChangeCoverIfCantShootSec { get; set; } + + [JsonPropertyName("SHALL_CHANGE_COVER_IF_CAN_SHOOT")] + public bool ShallChangeCoverIfCanShoot { get; set; } + + [JsonPropertyName("CHECK_CLOSEST_FRIEND_DIST")] + public float CheckClosestFriendDist { get; set; } + + [JsonPropertyName("CAN_LAY_TO_COVER_DIST_LOOK_TO_ENEMY")] + public float CanLayToCoverDistLookToEnemy { get; set; } + + [JsonPropertyName("CAN_LAY_TO_COVER")] + public bool CanLayToCover { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsGrenadeSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsGrenadeSettings.cs new file mode 100644 index 00000000..321fced1 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsGrenadeSettings.cs @@ -0,0 +1,162 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobalsGrenadeSettings in the client, this record should match that +/// +public record BotGlobalsGrenadeSettings +{ + [JsonPropertyName("DELTA_NEXT_ATTEMPT_FROM_COVER")] + public float DeltaNextAttemptFromCover { get; set; } + + [JsonPropertyName("DELTA_NEXT_ATTEMPT")] + public float DeltaNextAttempt { get; set; } + + [JsonPropertyName("MIN_DIST_NOT_TO_THROW")] + public float MinDistNotToThrow { get; set; } + + [JsonPropertyName("NEAR_DELTA_THROW_TIME_SEC")] + public float NearDeltaThrowTimeSec { get; set; } + + [JsonPropertyName("MIN_THROW_GRENADE_DIST")] + public float MinThrowGrenadeDist { get; set; } + + [JsonPropertyName("MIN_THROW_GRENADE_DIST_SQRT")] + public float MinThrowGrenadeDistSqrt { get; set; } + + [JsonPropertyName("MIN_DIST_NOT_TO_THROW_SQR")] + public float MinDistNotToThrowSqr { get; set; } + + [JsonPropertyName("RUN_AWAY")] + public float RunAway { get; set; } + + [JsonPropertyName("RUN_AWAY_SQR")] + public float RunAwaySqr { get; set; } + + [JsonPropertyName("ADD_GRENADE_AS_DANGER")] + public float AddGrenadeAsDanger { get; set; } + + [JsonPropertyName("ADD_GRENADE_AS_DANGER_SQR")] + public float AddGrenadeAsDangerSqr { get; set; } + + [JsonPropertyName("CHANCE_TO_NOTIFY_ENEMY_GR_100")] + public float ChanceToNotifyEnemyGr100 { get; set; } + + [JsonPropertyName("GrenadePerMeter")] + public float GrenadePerMeter { get; set; } + + [JsonPropertyName("REQUEST_DIST_MUST_THROW_SQRT")] + public float RequestDistMustThrowSqrt { get; set; } + + [JsonPropertyName("REQUEST_DIST_MUST_THROW")] + public float RequestDistMustThrow { get; set; } + + [JsonPropertyName("BEWARE_TYPE")] + public int BewareType { get; set; } + + [JsonPropertyName("SHOOT_TO_SMOKE_CHANCE_100")] + public float ShootToSmokeChance100 { get; set; } + + [JsonPropertyName("CHANCE_RUN_FLASHED_100")] + public float ChanceRunFlashed100 { get; set; } + + [JsonPropertyName("MAX_FLASHED_DIST_TO_SHOOT")] + public float MaxFlashedDistToShoot { get; set; } + + [JsonPropertyName("MAX_FLASHED_DIST_TO_SHOOT_SQRT")] + public float MaxFlashedDistToShootSqrt { get; set; } + + [JsonPropertyName("FLASH_GRENADE_TIME_COEF")] + public float FlashGrenadeTimeCoef { get; set; } + + [JsonPropertyName("SIZE_SPOTTED_COEF")] + public float SizeSpottedCoef { get; set; } + + [JsonPropertyName("BE_ATTENTION_COEF")] + public float BeAttentionCoef { get; set; } + + [JsonPropertyName("TIME_SHOOT_TO_FLASH")] + public float TimeShootToFlash { get; set; } + + [JsonPropertyName("CLOSE_TO_SMOKE_TO_SHOOT")] + public float CloseToSmokeToShoot { get; set; } + + [JsonPropertyName("CLOSE_TO_SMOKE_TO_SHOOT_SQRT")] + public float CloseToSmokeToShootSqrt { get; set; } + + [JsonPropertyName("CLOSE_TO_SMOKE_TIME_DELTA")] + public float CloseToSmokeTimeDelta { get; set; } + + [JsonPropertyName("SMOKE_CHECK_DELTA")] + public float SmokeCheckDelta { get; set; } + + [JsonPropertyName("DELTA_GRENADE_START_TIME")] + public float DeltaGrenadeStartTime { get; set; } + + [JsonPropertyName("AMBUSH_IF_SMOKE_IN_ZONE_100")] + public float AmbushIfSmokeInZone100 { get; set; } + + [JsonPropertyName("AMBUSH_IF_SMOKE_RETURN_TO_ATTACK_SEC")] + public float AmbushIfSmokeReturnToAttackSec { get; set; } + + [JsonPropertyName("NO_RUN_FROM_AI_GRENADES")] + public bool NoRunFromAiGrenades { get; set; } + + [JsonPropertyName("MAX_THROW_POWER")] + public float MaxThrowPower { get; set; } + + [JsonPropertyName("GrenadePrecision")] + public float GrenadePrecision { get; set; } + + [JsonPropertyName("GRENADE_PRECISION_PORTALS")] + public float GrenadePrecisionPortals { get; set; } + + [JsonPropertyName("STOP_WHEN_THROW_GRENADE")] + public bool StopWhenThrowGrenade { get; set; } + + [JsonPropertyName("WAIT_TIME_TURN_AWAY")] + public float WaitTimeTurnAway { get; set; } + + [JsonPropertyName("SMOKE_SUPPRESS_DELTA")] + public float SmokeSuppressDelta { get; set; } + + [JsonPropertyName("DAMAGE_GRENADE_SUPPRESS_DELTA")] + public float DamageGrenadeSuppressDelta { get; set; } + + [JsonPropertyName("STUN_SUPPRESS_DELTA")] + public float StunSuppressDelta { get; set; } + + [JsonPropertyName("CHEAT_START_GRENADE_PLACE")] + public bool CheatStartGrenadePlace { get; set; } + + [JsonPropertyName("CAN_THROW_STRAIGHT_CONTACT")] + public bool CanThrowStraightContact { get; set; } + + [JsonPropertyName("STRAIGHT_CONTACT_DELTA_SEC")] + public float StraightContactDeltaSec { get; set; } + + [JsonPropertyName("ANG_TYPE")] + public int AngType { get; set; } + + [JsonPropertyName("MIN_THROW_DIST_PERCENT_0_1")] + public float MinThrowDistPercent01 { get; set; } + + [JsonPropertyName("FLASH_MODIF_IS_NIGHTVISION")] + public float FlashModifIsNightvision { get; set; } + + [JsonPropertyName("FIRST_TIME_SEEN_DELTA_CAN_THROW")] + public float FirstTimeSeenDeltaCanThrow { get; set; } + + [JsonPropertyName("SHALL_GETUP")] + public bool ShallGetup { get; set; } + + [JsonPropertyName("CAN_LAY")] + public bool CanLay { get; set; } + + [JsonPropertyName("IGNORE_SMOKE_GRENADE")] + public bool IgnoreSmokeGrenade { get; set; } + + [JsonPropertyName("CAN_THROW_FROM_ANY_PLACE")] + public bool CanThrowFromAnyPlace { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsHearingSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsHearingSettings.cs new file mode 100644 index 00000000..c511a8a4 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsHearingSettings.cs @@ -0,0 +1,54 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +/// +/// See BotGlobasHearingSettings in the client (Yes, with the typo), this record should match that +/// +public record BotGlobalsHearingSettings +{ + [JsonPropertyName("BOT_CLOSE_PANIC_DIST")] + public float BotClosePanicDist { get; set; } + + [JsonPropertyName("CHANCE_TO_HEAR_SIMPLE_SOUND_0_1")] + public float ChanceToHearSimpleSound01 { get; set; } + + [JsonPropertyName("DISPERSION_COEF")] + public float DispersionCoef { get; set; } + + [JsonPropertyName("DISPERSION_COEF_GUN")] + public float DispersionCoefGun { get; set; } + + [JsonPropertyName("CLOSE_DIST")] + public float CloseDist { get; set; } + + [JsonPropertyName("FAR_DIST")] + public float FarDist { get; set; } + + [JsonPropertyName("SOUND_DIR_DEEFREE")] + public float SoundDirDeefree { get; set; } + + [JsonPropertyName("DIST_PLACE_TO_FIND_POINT")] + public float DistPlaceToFindPoint { get; set; } + + [JsonPropertyName("DEAD_BODY_SOUND_RAD")] + public float DeadBodySoundRad { get; set; } + + [JsonPropertyName("LOOK_ONLY_DANGER")] + public bool LookOnlyDanger { get; set; } + + [JsonPropertyName("RESET_TIMER_DIST")] + public float ResetTimerDist { get; set; } + + [JsonPropertyName("HEAR_DELAY_WHEN_PEACE")] + public float HearDelayWhenPeace { get; set; } + + [JsonPropertyName("HEAR_DELAY_WHEN_HAVE_SMT")] + public float HearDelayWhenHaveSmt { get; set; } + + [JsonPropertyName("LOOK_ONLY_DANGER_DELTA")] + public float LookOnlyDangerDelta { get; set; } + + [JsonPropertyName("ENEMY_SNIPER_SHOOT_DIST")] + public float EnemySniperShootDist { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsMindSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsMindSettings.cs new file mode 100644 index 00000000..5606ffb0 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsMindSettings.cs @@ -0,0 +1,430 @@ +using System.Text.Json.Serialization; +using SPTarkov.Server.Core.Models.Eft.Common; + +/// +/// See BotGlobalsMindSettings in the client, this record should match that +/// +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +public record BotGlobalsMindSettings +{ + [JsonPropertyName("GRENADE_DAMAGE_IGNORE")] + public bool GrenadeDamageIgnore { get; set; } + + [JsonPropertyName("MIN_SHOOTS_TIME")] + public int MinShootsTime { get; set; } + + [JsonPropertyName("MAX_SHOOTS_TIME")] + public int MaxShootsTime { get; set; } + + [JsonPropertyName("TIME_TO_RUN_TO_COVER_CAUSE_SHOOT_SEC")] + public float TimeToRunToCoverCauseShootSec { get; set; } + + [JsonPropertyName("DAMAGE_REDUCTION_TIME_SEC")] + public float DamageReductionTimeSec { get; set; } + + [JsonPropertyName("MIN_DAMAGE_SCARE")] + public float MinDamageScare { get; set; } + + [JsonPropertyName("CHANCE_TO_RUN_CAUSE_DAMAGE_0_100")] + public float ChanceToRunCauseDamage0100 { get; set; } + + [JsonPropertyName("TIME_TO_FORGOR_ABOUT_ENEMY_SEC")] + public float TimeToForgorAboutEnemySec { get; set; } + + [JsonPropertyName("TIME_TO_FIND_ENEMY")] + public float TimeToFindEnemy { get; set; } + + [JsonPropertyName("MAX_AGGRO_BOT_DIST")] + public float MaxAggroBotDist { get; set; } + + [JsonPropertyName("HIT_POINT_DETECTION")] + public float HitPointDetection { get; set; } + + [JsonPropertyName("DANGER_POINT_CHOOSE_COEF")] + public float DangerPointChooseCoef { get; set; } + + [JsonPropertyName("SIMPLE_POINT_CHOOSE_COEF")] + public float SimplePointChooseCoef { get; set; } + + [JsonPropertyName("LASTSEEN_POINT_CHOOSE_COEF")] + public float LastseenPointChooseCoef { get; set; } + + [JsonPropertyName("COVER_DIST_COEF")] + public float CoverDistCoef { get; set; } + + [JsonPropertyName("DIST_TO_FOUND_SQRT")] + public float DistToFoundSqrt { get; set; } + + [JsonPropertyName("SEARCH_TARGET")] + public bool SearchTarget { get; set; } + + [JsonPropertyName("ENEMY_BY_GROUPS_PMC_PLAYERS")] + public bool EnemyByGroupsPmcPlayers { get; set; } + + [JsonPropertyName("ENEMY_BY_GROUPS_SAVAGE_PLAYERS")] + public bool EnemyByGroupsSavagePlayers { get; set; } + + [JsonPropertyName("BOSS_IGNORE_LOYALTY")] + public bool BossIgnoreLoyalty { get; set; } + + [JsonPropertyName("DEFAULT_BEAR_BEHAVIOUR")] + public EWarnBehaviour DefaultBearBehaviour { get; set; } + + [JsonPropertyName("DEFAULT_USEC_BEHAVIOUR")] + public EWarnBehaviour DefaultUsecBehaviour { get; set; } + + [JsonPropertyName("DEFAULT_SAVAGE_BEHAVIOUR")] + public EWarnBehaviour DefaultSavageBehaviour { get; set; } + + [JsonPropertyName("FRIENDLY_BOT_TYPES")] + public WildSpawnType[] FriendlyBotTypes { get; set; } + + [JsonPropertyName("WARN_BOT_TYPES")] + public WildSpawnType[] WarnBotTypes { get; set; } + + [JsonPropertyName("ENEMY_BOT_TYPES")] + public WildSpawnType[] EnemyBotTypes { get; set; } + + [JsonPropertyName("REVENGE_BOT_TYPES")] + public WildSpawnType[] RevengeBotTypes { get; set; } + + [JsonPropertyName("FOLLOWER_AND_BOSS_WARN_EQUAL_PRIORITY")] + public bool FollowerAndBossWarnEqualPriority { get; set; } + + [JsonPropertyName("MUTUAL_IGNORE_FRIENDLY_FIRE")] + public bool MutualIgnoreFriendlyFire { get; set; } + + [JsonPropertyName("MAX_AGGRO_BOT_DIST_UPPER_LIMIT")] + public float MaxAggroBotDistUpperLimit { get; set; } + + [JsonPropertyName("MAX_AGGRO_BOT_DIST_SQR_UPPER_LIMIT")] + public float MaxAggroBotDistSqrUpperLimit { get; set; } + + [JsonPropertyName("MAX_AGGRO_BOT_DIST_SQR")] + public float MaxAggroBotDistSqr { get; set; } + + [JsonPropertyName("DIST_TO_STOP_RUN_ENEMY")] + public float DistToStopRunEnemy { get; set; } + + [JsonPropertyName("ENEMY_LOOK_AT_ME_ANG")] + public float EnemyLookAtMeAng { get; set; } + + [JsonPropertyName("MIN_START_AGGRESION_COEF")] + public float MinStartAggresionCoef { get; set; } + + [JsonPropertyName("MAX_START_AGGRESION_COEF")] + public float MaxStartAggresionCoef { get; set; } + + [JsonPropertyName("BULLET_FEEL_DIST")] + public float BulletFeelDist { get; set; } + + [JsonPropertyName("BULLET_FEEL_CLOSE_SDIST")] + public float BulletFeelCloseSdist { get; set; } + + [JsonPropertyName("ATTACK_IMMEDIATLY_CHANCE_0_100")] + public float AttackImmediatlyChance0100 { get; set; } + + [JsonPropertyName("CHANCE_FUCK_YOU_ON_CONTACT_100")] + public float ChanceFuckYouOnContact100 { get; set; } + + [JsonPropertyName("FRIEND_DEAD_AGR_LOW")] + public float FriendDeadAgrLow { get; set; } + + [JsonPropertyName("FRIEND_AGR_KILL")] + public float FriendAgrKill { get; set; } + + [JsonPropertyName("LAST_ENEMY_LOOK_TO")] + public float LastEnemyLookTo { get; set; } + + [JsonPropertyName("CAN_RECEIVE_PLAYER_REQUESTS_BEAR")] + public bool CanReceivePlayerRequestsBear { get; set; } + + [JsonPropertyName("CAN_RECEIVE_PLAYER_REQUESTS_USEC")] + public bool CanReceivePlayerRequestsUsec { get; set; } + + [JsonPropertyName("CAN_RECEIVE_PLAYER_REQUESTS_SAVAGE")] + public bool CanReceivePlayerRequestsSavage { get; set; } + + [JsonPropertyName("REVENGE_TO_GROUP")] + public bool RevengeToGroup { get; set; } + + [JsonPropertyName("REVENGE_FOR_SAVAGE_PLAYERS")] + public bool RevengeForSavagePlayers { get; set; } + + [JsonPropertyName("CAN_USE_MEDS")] + public bool CanUseMeds { get; set; } + + [JsonPropertyName("SUSPETION_POINT_CHANCE_ADD100")] + public float SuspetionPointChanceAdd100 { get; set; } + + [JsonPropertyName("AMBUSH_WHEN_UNDER_FIRE")] + public bool AmbushWhenUnderFire { get; set; } + + [JsonPropertyName("AMBUSH_WHEN_UNDER_FIRE_TIME_RESIST")] + public float AmbushWhenUnderFireTimeResist { get; set; } + + [JsonPropertyName("CAN_LOOT_BOSS_CLUSTER")] + public bool CanLootBossCluster { get; set; } + + [JsonPropertyName("ATTACK_ENEMY_IF_PROTECT_DELTA_LAST_TIME_SEEN")] + public float AttackEnemyIfProtectDeltaLastTimeSeen { get; set; } + + [JsonPropertyName("HOLD_IF_PROTECT_DELTA_LAST_TIME_SEEN")] + public float HoldIfProtectDeltaLastTimeSeen { get; set; } + + [JsonPropertyName("FIND_COVER_TO_GET_POSITION_WITH_SHOOT")] + public float FindCoverToGetPositionWithShoot { get; set; } + + [JsonPropertyName("PROTECT_TIME_REAL")] + public bool ProtectTimeReal { get; set; } + + [JsonPropertyName("CHANCE_SHOOT_WHEN_WARN_PLAYER_100")] + public float ChanceShootWhenWarnPlayer100 { get; set; } + + [JsonPropertyName("CAN_PANIC_IS_PROTECT")] + public bool CanPanicIsProtect { get; set; } + + [JsonPropertyName("NO_RUN_AWAY_FOR_SAFE")] + public bool NoRunAwayForSafe { get; set; } + + [JsonPropertyName("PART_PERCENT_TO_HEAL")] + public float PartPercentToHeal { get; set; } + + [JsonPropertyName("PROTECT_DELTA_HEAL_SEC")] + public float ProtectDeltaHealSec { get; set; } + + [JsonPropertyName("CAN_STAND_BY")] + public bool CanStandBy { get; set; } + + [JsonPropertyName("CAN_THROW_REQUESTS")] + public bool CanThrowRequests { get; set; } + + [JsonPropertyName("GROUP_ANY_PHRASE_DELAY")] + public float GroupAnyPhraseDelay { get; set; } + + [JsonPropertyName("GROUP_EXACTLY_PHRASE_DELAY")] + public float GroupExactlyPhraseDelay { get; set; } + + [JsonPropertyName("GROUP_EXACTLY_PHRASE_DELAY_MAX")] + public float GroupExactlyPhraseDelayMax { get; set; } + + [JsonPropertyName("DIST_TO_ENEMY_YO_CAN_HEAL")] + public float DistToEnemyYoCanHeal { get; set; } + + [JsonPropertyName("CHANCE_TO_STAY_WHEN_WARN_PLAYER_100")] + public float ChanceToStayWhenWarnPlayer100 { get; set; } + + [JsonPropertyName("DOG_FIGHT_OUT")] + public float DogFightOut { get; set; } + + [JsonPropertyName("DOG_FIGHT_IN")] + public float DogFightIn { get; set; } + + [JsonPropertyName("SHOOT_INSTEAD_DOG_FIGHT")] + public float ShootInsteadDogFight { get; set; } + + [JsonPropertyName("PISTOL_SHOTGUN_AMBUSH_DIST")] + public float PistolShotgunAmbushDist { get; set; } + + [JsonPropertyName("STANDART_AMBUSH_DIST")] + public float StandartAmbushDist { get; set; } + + [JsonPropertyName("AI_POWER_COEF")] + public float AiPowerCoef { get; set; } + + [JsonPropertyName("COVER_SECONDS_AFTER_LOSE_VISION")] + public float CoverSecondsAfterLoseVision { get; set; } + + [JsonPropertyName("COVER_SELF_ALWAYS_IF_DAMAGED")] + public bool CoverSelfAlwaysIfDamaged { get; set; } + + [JsonPropertyName("SEC_TO_MORE_DIST_TO_RUN")] + public float SecToMoreDistToRun { get; set; } + + [JsonPropertyName("HEAL_DELAY_SEC")] + public float HealDelaySec { get; set; } + + [JsonPropertyName("HIT_DELAY_WHEN_HAVE_SMT")] + public float HitDelayWhenHaveSmt { get; set; } + + [JsonPropertyName("HIT_DELAY_WHEN_PEACE")] + public float HitDelayWhenPeace { get; set; } + + [JsonPropertyName("TALK_WITH_QUERY")] + public bool TalkWithQuery { get; set; } + + [JsonPropertyName("DANGER_EXPIRE_TIME_MIN")] + public float DangerExpireTimeMin { get; set; } + + [JsonPropertyName("DANGER_EXPIRE_TIME_MAX")] + public float DangerExpireTimeMax { get; set; } + + [JsonPropertyName("PANIC_RUN_WEIGHT")] + public float PanicRunWeight { get; set; } + + [JsonPropertyName("PANIC_SIT_WEIGHT")] + public float PanicSitWeight { get; set; } + + [JsonPropertyName("PANIC_LAY_WEIGHT")] + public float PanicLayWeight { get; set; } + + [JsonPropertyName("PANIC_NONE_WEIGHT")] + public float PanicNoneWeight { get; set; } + + [JsonPropertyName("PANIC_SIT_WEIGHT_PEACE")] + public float PanicSitWeightPeace { get; set; } + + [JsonPropertyName("CAN_EXECUTE_REQUESTS")] + public bool CanExecuteRequests { get; set; } + + [JsonPropertyName("CAN_WARN_SELF")] + public bool CanWarnSelf { get; set; } + + [JsonPropertyName("DIST_TO_ENEMY_SPOTTED_ON_HIT")] + public float DistToEnemySpottedOnHit { get; set; } + + [JsonPropertyName("UNDER_FIRE_PERIOD")] + public float UnderFirePeriod { get; set; } + + [JsonPropertyName("MEDS_ONLY_SAFE_CONTAINER")] + public bool MedsOnlySafeContainer { get; set; } + + [JsonPropertyName("CAN_DROP_ITEMS")] + public bool CanDropItems { get; set; } + + [JsonPropertyName("CAN_TAKE_ITEMS")] + public bool CanTakeItems { get; set; } + + [JsonPropertyName("THROW_DIST_TO_SEE")] + public float ThrowDistToSee { get; set; } + + [JsonPropertyName("CAN_TAKE_ANY_ITEM")] + public bool CanTakeAnyItem { get; set; } + + [JsonPropertyName("WILL_PERSUE_AXEMAN")] + public bool WillPersueAxeman { get; set; } + + [JsonPropertyName("MAX_DIST_TO_RUN_PERSUE_AXEMAN")] + public float MaxDistToRunPersueAxeman { get; set; } + + [JsonPropertyName("MAX_DIST_TO_PERSUE_AXEMAN")] + public float MaxDistToPersueAxeman { get; set; } + + [JsonPropertyName("SURGE_KIT_ONLY_SAFE_CONTAINER")] + public bool SurgeKitOnlySafeContainer { get; set; } + + [JsonPropertyName("CAN_USE_LONG_COVER_POINTS")] + public bool CanUseLongCoverPoints { get; set; } + + [JsonPropertyName("CAN_USE_FOOD_DRINK")] + public bool CanUseFoodDrink { get; set; } + + [JsonPropertyName("FOOD_DRINK_DELAY_SEC")] + public float FoodDrinkDelaySec { get; set; } + + [JsonPropertyName("HOW_WORK_OVER_DEAD_BODY")] + public int HowWorkOverDeadBody { get; set; } + + [JsonPropertyName("DEADBODYWORK_INITIAL_DELAY")] + public float DeadbodyworkInitialDelay { get; set; } + + [JsonPropertyName("DEADBODYWORK_CHECK_ITEMS_DELAY")] + public float DeadbodyworkCheckItemsDelay { get; set; } + + [JsonPropertyName("DEADBODYWORK_MOVE_ITEMS_DELAY")] + public float DeadbodyworkMoveItemsDelay { get; set; } + + [JsonPropertyName("DEADBODYWORK_DROP_ITEMS_DELAY")] + public float DeadbodyworkDropItemsDelay { get; set; } + + [JsonPropertyName("CAN_TALK")] + public bool CanTalk { get; set; } + + [JsonPropertyName("ACTIVE_FORCE_ATTACK_EVENTS")] + public bool ActiveForceAttackEvents { get; set; } + + [JsonPropertyName("ACTIVE_FOLLOW_PLAYER_EVENTS")] + public bool ActiveFollowPlayerEvents { get; set; } + + [JsonPropertyName("MAY_BE_CALLED_FOR_HELP")] + public bool MayBeCalledForHelp { get; set; } + + [JsonPropertyName("GIFTER_ADDITIONAL_GIFTS")] + public int GifterAdditionalGifts { get; set; } + + [JsonPropertyName("ANGLE_TO_SHOOT_BTR")] + public float AngleToShootBtr { get; set; } + + [JsonPropertyName("ROTATION_SPEED_BTR")] + public float RotationSpeedBtr { get; set; } + + [JsonPropertyName("IGNORE_ANOTHER_BOTS_BEING_HIT")] + public bool IgnoreAnotherBotsBeingHit { get; set; } + + [JsonPropertyName("AVOID_BTR_RADIUS_SQR")] + public float AvoidBtrRadiusSqr { get; set; } + + [JsonPropertyName("SNIPER_FIRE_IMMUNE")] + public bool SniperFireImmune { get; set; } + + [JsonPropertyName("USE_ADD_TO_ENEMY_VALIDATION")] + public bool UseAddToEnemyValidation { get; set; } + + [JsonPropertyName("VALID_REASONS_TO_ADD_ENEMY")] + public EBotEnemyCause[] ValidReasonsToAddEnemy { get; set; } + + [JsonPropertyName("CHECK_MARK_OF_UNKNOWS")] + public bool CheckMarkOfUnknows { get; set; } + + [JsonPropertyName("SDIST_TO_DELIVER_INFO_WHEN_ENEMY")] + public float SdistToDeliverInfoWhenEnemy { get; set; } + + [JsonPropertyName("TRIPWIRE_INERT_TIME")] + public int TripwireInertTime { get; set; } + + [JsonPropertyName("IGNORE_TRAP")] + public bool IgnoreTrap { get; set; } + + [JsonPropertyName("CHANCE_TO_IGNORE_TRIPWIRE")] + public float ChanceToIgnoreTripwire { get; set; } + + [JsonPropertyName("CHACE_TO_DEACTIVATE")] + public float ChaceToDeactivate { get; set; } + + [JsonPropertyName("REACT_ADD_DRUNK_ENEMY")] + public bool ReactAddDrunkEnemy { get; set; } + + [JsonPropertyName("DIST_TO_HIDE_ASSAULT")] + public float DistToHideAssault { get; set; } + + [JsonPropertyName("KEEP_ZONE_ON_SPAWN_TIME_SEC")] + public float KeepZoneOnSpawnTimeSec { get; set; } + + [JsonPropertyName("IGNORE_DANGER_PLACES")] + public bool IgnoreDangerPlaces { get; set; } + + [JsonPropertyName("PUSH_AND_SUPPRESS_HIDE")] + public float PushAndSuppressHide { get; set; } + + [JsonPropertyName("PUSH_AND_SUPPRESS_PUSH")] + public float PushAndSuppressPush { get; set; } + + [JsonPropertyName("AGGRESSOR_LOYALTY_BONUS")] + public float AggressorLoyaltyBonus { get; set; } + + public enum EWarnBehaviour + { + Neutral, + Warn, + AlwaysEnemies, + } + + public enum EBotEnemyCause + { + PlayerKilledBot, + PlayerShotAtBot, + PlayerInRestrictedArea, + PlayerTrespassingBossZone, + } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsMoveSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsMoveSettings.cs new file mode 100644 index 00000000..0cc7f997 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsMoveSettings.cs @@ -0,0 +1,111 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +public record BotGlobalsMoveSettings +{ + [JsonPropertyName("BASE_ROTATE_SPEED")] + public float BaseRotateSpeed { get; set; } + + [JsonPropertyName("REACH_DIST")] + public float ReachDistance { get; set; } + + [JsonPropertyName("REACH_DIST_RUN")] + public float ReachDistanceRun { get; set; } + + [JsonPropertyName("START_SLOW_DIST")] + public float StartSlowDistance { get; set; } + + [JsonPropertyName("BASESTART_SLOW_DIST")] + public float BaseStartSlowDistance { get; set; } + + [JsonPropertyName("SLOW_COEF")] + public float SlowCoefficient { get; set; } + + [JsonPropertyName("DIST_TO_CAN_CHANGE_WAY")] + public float DistanceToCanChangeWay { get; set; } + + [JsonPropertyName("DIST_TO_START_RAYCAST")] + public float DistanceToStartRaycast { get; set; } + + [JsonPropertyName("BASE_START_SERACH")] + public float BaseStartSearch { get; set; } + + [JsonPropertyName("UPDATE_TIME_RECAL_WAY")] + public float UpdateTimeRecalculateWay { get; set; } + + [JsonPropertyName("FAR_DIST")] + public float FarDistance { get; set; } + + [JsonPropertyName("FAR_DIST_SQR")] + public float FarDistanceSqr { get; set; } + + [JsonPropertyName("DIST_TO_CAN_CHANGE_WAY_SQR")] + public float DistanceToCanChangeWaySqr { get; set; } + + [JsonPropertyName("DIST_TO_START_RAYCAST_SQR")] + public float DistanceToStartRaycastSqr { get; set; } + + [JsonPropertyName("BASE_SQRT_START_SERACH")] + public float BaseSqrtStartSearch { get; set; } + + [JsonPropertyName("Y_APPROXIMATION")] + public float YApproximation { get; set; } + + [JsonPropertyName("DELTA_LAST_SEEN_ENEMY")] + public float DeltaLastSeenEnemy { get; set; } + + [JsonPropertyName("REACH_DIST_COVER")] + public float ReachDistanceCover { get; set; } + + [JsonPropertyName("RUN_TO_COVER_MIN")] + public float RunToCoverMin { get; set; } + + [JsonPropertyName("CHANCE_TO_RUN_IF_NO_AMMO_0_100")] + public float ChanceToRunIfNoAmmo { get; set; } + + [JsonPropertyName("RUN_IF_CANT_SHOOT")] + public bool RunIfCantShoot { get; set; } + + [JsonPropertyName("RUN_IF_GAOL_FAR_THEN")] + public float RunIfGoalFarThen { get; set; } + + [JsonPropertyName("SEC_TO_CHANGE_TO_RUN")] + public float SecondsToChangeToRun { get; set; } + + [JsonPropertyName("ETERNITY_STAMINA")] + public bool EternityStamina { get; set; } + + [JsonPropertyName("STOP_SPRINT_AT_TREE")] + public bool StopSprintAtTree { get; set; } + + [JsonPropertyName("WAIT_DOOR_OPEN_SEC")] + public float WaitDoorOpenSeconds { get; set; } + + [JsonPropertyName("BREACH_CHANCE_100")] + public float BreachChance { get; set; } + + [JsonPropertyName("FIRST_TURN_SPEED")] + public float FirstTurnSpeed { get; set; } + + [JsonPropertyName("FIRST_TURN_BIG_SPEED")] + public float FirstTurnBigSpeed { get; set; } + + [JsonPropertyName("TURN_SPEED_ON_SPRINT")] + public float TurnSpeedOnSprint { get; set; } + + [JsonPropertyName("NO_ZIG_ZAG")] + public bool NoZigZag { get; set; } + + [JsonPropertyName("CAN_SPRINT_GO_TO_SOME_POINT")] + public bool CanSprintGoToSomePoint { get; set; } + + [JsonPropertyName("DIST_SPRINT_GO_TO_SOME_POINT")] + public float DistanceSprintGoToSomePoint { get; set; } + + [JsonPropertyName("MELEE_ATTACK_ZIG_ZAG")] + public bool MeleeAttackZigZag { get; set; } + + [JsonPropertyName("MELEE_ATTACK_OPTIMIZE")] + public bool MeleeAttackOptimize { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsScatteringSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsScatteringSettings.cs new file mode 100644 index 00000000..8805042f --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Bot/GlobalSettings/BotGlobalsScatteringSettings.cs @@ -0,0 +1,99 @@ +using System.Text.Json.Serialization; + +namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; + +public record BotGlobalsScatteringSettings +{ + [JsonPropertyName("min_scatter")] + public float MinScatter { get; set; } + + [JsonPropertyName("working_scatter")] + public float WorkingScatter { get; set; } + + [JsonPropertyName("max_scatter")] + public float MaxScatter { get; set; } + + [JsonPropertyName("scatter_speed_up")] + public float SpeedUp { get; set; } + + [JsonPropertyName("scatter_speed_up_aim")] + public float SpeedUpAim { get; set; } + + [JsonPropertyName("scatter_speed_down")] + public float SpeedDown { get; set; } + + [JsonPropertyName("to_slow_bot_speed")] + public float ToSlowBotSpeed { get; set; } + + [JsonPropertyName("to_low_bot_speed")] + public float ToLowBotSpeed { get; set; } + + [JsonPropertyName("to_up_bot_speed")] + public float ToUpBotSpeed { get; set; } + + [JsonPropertyName("moving_slow_coef")] + public float MovingSlowCoef { get; set; } + + [JsonPropertyName("to_low_angular_speed")] + public float ToLowBotAngularSpeed { get; set; } + + [JsonPropertyName("to_stop_angular_speed")] + public float ToStopBotAngularSpeed { get; set; } + + [JsonPropertyName("scatter_from_shot")] + public float FromShot { get; set; } + + [JsonPropertyName("tracer_coef")] + public float TracerCoef { get; set; } + + [JsonPropertyName("hand_damage_scattering")] + public float HandDamageScatteringMinMax { get; set; } + + [JsonPropertyName("hand_damage_accuracy_speed")] + public float HandDamageAccuracySpeed { get; set; } + + [JsonPropertyName("blood_fall_coef")] + public float BloodFall { get; set; } + + [JsonPropertyName("caution_threshold")] + public float Caution { get; set; } + + [JsonPropertyName("to_caution_coef")] + public float ToCaution { get; set; } + + [JsonPropertyName("recoil_control_coef_single")] + public float RecoilControlCoefShootDone { get; set; } + + [JsonPropertyName("recoil_control_coef_auto")] + public float RecoilControlCoefShootDoneAuto { get; set; } + + [JsonPropertyName("amplitude_factor")] + public float AmplitudeFactor { get; set; } + + [JsonPropertyName("amplitude_speed")] + public float AmplitudeSpeed { get; set; } + + [JsonPropertyName("dist_to_not_aim")] + public float DistFromOldPointToNotAim { get; set; } + + [JsonPropertyName("dist_to_not_aim_sqrt")] + public float DistFromOldPointToNotAimSqrt { get; set; } + + [JsonPropertyName("min_dist_to_shoot")] + public float DistNotToShoot { get; set; } + + [JsonPropertyName("pose_change_coef")] + public float PoseChangeCoef { get; set; } + + [JsonPropertyName("lay_factor")] + public float LayFactor { get; set; } + + [JsonPropertyName("recoil_y_coef")] + public float RecoilYCoef { get; set; } + + [JsonPropertyName("recoil_y_speed_down")] + public float RecoilYCoefSpeedDown { get; set; } + + [JsonPropertyName("recoil_y_max")] + public float RecoilYMax { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotType.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotType.cs index a30665f3..bf2cb15b 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotType.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotType.cs @@ -1,6 +1,7 @@ using System.Text.Json; using System.Text.Json.Serialization; using SPTarkov.Server.Core.Models.Common; +using SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings; using SPTarkov.Server.Core.Models.Enums; using SPTarkov.Server.Core.Utils.Json.Converters; @@ -72,202 +73,38 @@ public record Chances public Dictionary EquipmentModsChances { get; set; } } -/* record removed in favor of Dictionary - used to be used in: - Chances.WeaponModsChances - Chances.EquipmentModsChances - GenerateWeaponRequest.ModSpawnChances -public record ModsChances -{ - - - [JsonPropertyName("mod_charge")] -public double? ModCharge { get; set; } - - [JsonPropertyName("mod_bipod")] -public double? ModBipod { get; set; } - - [JsonPropertyName("mod_barrel")] -public double? ModBarrel { get; set; } - - [JsonPropertyName("mod_catch")] -public double? ModCatch { get; set; } - - [JsonPropertyName("mod_gas_block")] -public double? ModGasBlock { get; set; } - - [JsonPropertyName("mod_hammer")] -public double? ModHammer { get; set; } - - [JsonPropertyName("mod_equipment")] -public double? ModEquipment { get; set; } - - [JsonPropertyName("mod_equipment_000")] -public double? ModEquipment000 { get; set; } - - [JsonPropertyName("mod_equipment_001")] -public double? ModEquipment001 { get; set; } - - [JsonPropertyName("mod_equipment_002")] -public double? ModEquipment002 { get; set; } - - [JsonPropertyName("mod_flashlight")] -public double? ModFlashlight { get; set; } - - [JsonPropertyName("mod_foregrip")] -public double? ModForegrip { get; set; } - - [JsonPropertyName("mod_launcher")] -public double? ModLauncher { get; set; } - - [JsonPropertyName("mod_magazine")] -public double? ModMagazine { get; set; } - - [JsonPropertyName("mod_mount")] -public double? ModMount { get; set; } - - [JsonPropertyName("mod_mount_000")] -public double? ModMount000 { get; set; } - - [JsonPropertyName("mod_mount_001")] -public double? ModMount001 { get; set; } - - [JsonPropertyName("mod_muzzle")] -public double? ModMuzzle { get; set; } - - [JsonPropertyName("mod_nvg")] -public double? ModNvg { get; set; } - - [JsonPropertyName("mod_pistol_grip")] -public double? ModPistolGrip { get; set; } - - [JsonPropertyName("mod_reciever")] -public double? ModReceiver { get; set; } - - [JsonPropertyName("mod_scope")] -public double? ModScope { get; set; } - - [JsonPropertyName("mod_scope_000")] -public double? ModScope000 { get; set; } - - [JsonPropertyName("mod_scope_001")] -public double? ModScope001 { get; set; } - - [JsonPropertyName("mod_scope_002")] -public double? ModScope002 { get; set; } - - [JsonPropertyName("mod_scope_003")] -public double? ModScope003 { get; set; } - - [JsonPropertyName("mod_sight_front")] -public double? ModSightFront { get; set; } - - [JsonPropertyName("mod_sight_rear")] -public double? ModSightRear { get; set; } - - [JsonPropertyName("mod_stock")] -public double? ModStock { get; set; } - - [JsonPropertyName("mod_stock_000")] -public double? ModStock000 { get; set; } - - [JsonPropertyName("mod_stock_002")] -public double? ModStock002 { get; set; } - - [JsonPropertyName("mod_stock_akms")] -public double? ModStockAkms { get; set; } - - [JsonPropertyName("mod_tactical")] -public double? ModTactical { get; set; } - - [JsonPropertyName("mod_tactical_000")] -public double? ModTactical000 { get; set; } - - [JsonPropertyName("mod_tactical_001")] -public double? ModTactical001 { get; set; } - - [JsonPropertyName("mod_tactical_002")] -public double? ModTactical002 { get; set; } - - [JsonPropertyName("mod_tactical_2")] -public double? ModTactical2 { get; set; } - - [JsonPropertyName("mod_tactical_003")] -public double? ModTactical003 { get; set; } - - [JsonPropertyName("mod_handguard")] -public double? ModHandguard { get; set; } - - [JsonPropertyName("back_plate")] -public double? BackPlate { get; set; } - - [JsonPropertyName("front_plate")] -public double? FrontPlate { get; set; } - - [JsonPropertyName("left_side_plate")] -public double? LeftSidePlate { get; set; } - - [JsonPropertyName("right_side_plate")] -public double? RightSidePlate { get; set; } - - [JsonPropertyName("mod_mount_002")] -public double? ModMount002 { get; set; } - - [JsonPropertyName("mod_mount_003")] -public double? ModMount003 { get; set; } - - [JsonPropertyName("mod_mount_004")] -public double? ModMount004 { get; set; } - - [JsonPropertyName("mod_mount_005")] -public double? ModMount005 { get; set; } - - [JsonPropertyName("mod_mount_006")] -public double? ModMount006 { get; set; } - - [JsonPropertyName("mod_muzzle_000")] -public double? ModMuzzle000 { get; set; } - - [JsonPropertyName("mod_muzzle_001")] -public double? ModMuzzle001 { get; set; } - - [JsonPropertyName("mod_pistol_grip_akms")] -public double? ModPistolGripAkms { get; set; } - - [JsonPropertyName("mod_pistolgrip")] -public double? ModPistol_Grip { get; set; } -} -*/ - +/// +/// See BotSettingsComponents in the client, this record should match that +/// public record DifficultyCategories { - public Dictionary? Aiming { get; set; } // TODO: string | number | boolean + public required BotGlobalAimingSettings Aiming { get; set; } - public Dictionary? Boss { get; set; } // TODO: string | number | boolean + public required BotGlobalsBossSettings Boss { get; set; } - public Dictionary? Change { get; set; } // TODO: string | number | boolean + public required BotGlobalsChangeSettings Change { get; set; } - public Dictionary? Core { get; set; } // TODO: string | number | boolean + public required BotGlobalCoreSettings Core { get; set; } - public Dictionary? Cover { get; set; } // TODO: string | number | boolean + public required BotGlobalsCoverSettings Cover { get; set; } - public Dictionary? Grenade { get; set; } // TODO: string | number | boolean + public required BotGlobalsGrenadeSettings Grenade { get; set; } - public Dictionary? Hearing { get; set; } // TODO: string | number | boolean + public required BotGlobalsHearingSettings Hearing { get; set; } - public Dictionary? Lay { get; set; } // TODO: string | number | boolean + public required BotGlobalLayData Lay { get; set; } - public Dictionary? Look { get; set; } // TODO: string | number | boolean + public required BotGlobalLookData Look { get; set; } - public Dictionary? Mind { get; set; } // TODO: string | number | boolean | string[] + public required BotGlobalsMindSettings Mind { get; set; } - public Dictionary? Move { get; set; } // TODO: string | number | boolean + public required BotGlobalsMoveSettings Move { get; set; } - public Dictionary? Patrol { get; set; } // TODO: string | number | boolean + public required BotGlobalPatrolSettings Patrol { get; set; } - public Dictionary? Scattering { get; set; } // TODO: string | number | boolean + public required BotGlobalsScatteringSettings Scattering { get; set; } - public Dictionary? Shoot { get; set; } // TODO: string | number | boolean + public required BotGlobalShootData Shoot { get; set; } } public record Experience diff --git a/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs b/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs index f0234eaf..9ff3125a 100644 --- a/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs @@ -925,24 +925,16 @@ public class SeasonalEventService( var gifterPatrolValues = gifterBot.BotDifficulty[difficulty].Patrol; // Read existing value from property - var existingItems = Enumerable.Empty(); - if (gifterPatrolValues.TryGetValue("ITEMS_TO_DROP", out var jsonElement) && jsonElement.ValueKind == JsonValueKind.String) - { - var existingCsv = jsonElement.GetString(); - if (!string.IsNullOrWhiteSpace(existingCsv)) - { - existingItems = existingCsv.Split(','); - } - } + var existingItems = string.IsNullOrWhiteSpace(gifterPatrolValues.ItemsToDrop) + ? Enumerable.Empty() + : gifterPatrolValues.ItemsToDrop.Split(','); // Merge existing and new tpls we want var combinedItems = new HashSet(existingItems); combinedItems.UnionWith(gifterBot.BotInventory.Items.Backpack.Keys.Select(x => x.ToString())); // Turn set into a comma separated list ready for insertion - var finalItemsCsv = string.Join(",", combinedItems); - - gifterPatrolValues["ITEMS_TO_DROP"] = JsonDocument.Parse($"\"{finalItemsCsv}\"").RootElement.Clone(); + gifterPatrolValues.ItemsToDrop = string.Join(",", combinedItems); } }