Push global bot settings models, breaks server

This commit is contained in:
Archangel
2025-08-23 17:44:04 +02:00
parent c7e1a3f51a
commit 646211ef04
16 changed files with 2696 additions and 193 deletions
@@ -0,0 +1,312 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalAimingSettings in the client, this record should match that
/// </summary>
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; }
}
/// <summary>
/// See BotUnderbarrelLauncherAimingSettings in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,60 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See GClass611 (To be remapped to BotGlobalsCoreSettingsClass) in the client, this record should match that
/// </summary>
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,
}
}
@@ -0,0 +1,93 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Common.Tables;
/// <summary>
/// See BotGlobalLayData in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,201 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalLookData in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,201 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalPatrolSettings in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,285 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalShootData in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,399 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalsBossSettings in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,57 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalsChangeSettings in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,210 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalsCoverSettings in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,162 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobalsGrenadeSettings in the client, this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,54 @@
using System.Text.Json.Serialization;
namespace SPTarkov.Server.Core.Models.Eft.Bot.GlobalSettings;
/// <summary>
/// See BotGlobasHearingSettings in the client (Yes, with the typo), this record should match that
/// </summary>
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; }
}
@@ -0,0 +1,430 @@
using System.Text.Json.Serialization;
using SPTarkov.Server.Core.Models.Eft.Common;
/// <summary>
/// See BotGlobalsMindSettings in the client, this record should match that
/// </summary>
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,
}
}
@@ -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; }
}
@@ -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; }
}
@@ -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<string, double> EquipmentModsChances { get; set; }
}
/* record removed in favor of Dictionary<string, double>
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; }
}
*/
/// <summary>
/// See BotSettingsComponents in the client, this record should match that
/// </summary>
public record DifficultyCategories
{
public Dictionary<string, JsonElement>? Aiming { get; set; } // TODO: string | number | boolean
public required BotGlobalAimingSettings Aiming { get; set; }
public Dictionary<string, JsonElement>? Boss { get; set; } // TODO: string | number | boolean
public required BotGlobalsBossSettings Boss { get; set; }
public Dictionary<string, JsonElement>? Change { get; set; } // TODO: string | number | boolean
public required BotGlobalsChangeSettings Change { get; set; }
public Dictionary<string, JsonElement>? Core { get; set; } // TODO: string | number | boolean
public required BotGlobalCoreSettings Core { get; set; }
public Dictionary<string, JsonElement>? Cover { get; set; } // TODO: string | number | boolean
public required BotGlobalsCoverSettings Cover { get; set; }
public Dictionary<string, JsonElement>? Grenade { get; set; } // TODO: string | number | boolean
public required BotGlobalsGrenadeSettings Grenade { get; set; }
public Dictionary<string, JsonElement>? Hearing { get; set; } // TODO: string | number | boolean
public required BotGlobalsHearingSettings Hearing { get; set; }
public Dictionary<string, JsonElement>? Lay { get; set; } // TODO: string | number | boolean
public required BotGlobalLayData Lay { get; set; }
public Dictionary<string, JsonElement>? Look { get; set; } // TODO: string | number | boolean
public required BotGlobalLookData Look { get; set; }
public Dictionary<string, JsonElement>? Mind { get; set; } // TODO: string | number | boolean | string[]
public required BotGlobalsMindSettings Mind { get; set; }
public Dictionary<string, JsonElement>? Move { get; set; } // TODO: string | number | boolean
public required BotGlobalsMoveSettings Move { get; set; }
public Dictionary<string, JsonElement>? Patrol { get; set; } // TODO: string | number | boolean
public required BotGlobalPatrolSettings Patrol { get; set; }
public Dictionary<string, JsonElement>? Scattering { get; set; } // TODO: string | number | boolean
public required BotGlobalsScatteringSettings Scattering { get; set; }
public Dictionary<string, JsonElement>? Shoot { get; set; } // TODO: string | number | boolean
public required BotGlobalShootData Shoot { get; set; }
}
public record Experience
@@ -925,24 +925,16 @@ public class SeasonalEventService(
var gifterPatrolValues = gifterBot.BotDifficulty[difficulty].Patrol;
// Read existing value from property
var existingItems = Enumerable.Empty<string>();
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<string>()
: gifterPatrolValues.ItemsToDrop.Split(',');
// Merge existing and new tpls we want
var combinedItems = new HashSet<string>(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);
}
}