addded more types, some are unfinished, ill come back to these tomorrow

This commit is contained in:
CWX
2025-01-06 00:32:55 +00:00
parent 529b091029
commit 2f997f6a85
53 changed files with 1938 additions and 12 deletions
+3
View File
@@ -30,6 +30,9 @@ bld/
[Oo]bj/
[Ll]og/
# Rider specific
.idea
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
+127
View File
@@ -0,0 +1,127 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class AirdropConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; } = "spt-airdrop";
[JsonPropertyName("airdropTypeWeightings")]
public Dictionary<SptAirdropTypeEnum, double> AirdropTypeWeightings { get; set; }
/// <summary>
/// What rewards will the loot crate contain, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter
/// </summary>
[JsonPropertyName("loot")]
public Dictionary<string, AirdropLoot> Loot { get; set; }
[JsonPropertyName("customAirdropMapping")]
public Dictionary<string, SptAirdropTypeEnum> CustomAirdropMapping { get; set; }
}
/// <summary>
/// Chance map will have an airdrop occur out of 100 - locations not included count as 0%
/// </summary>
public class AirdropChancePercent
{
[JsonPropertyName("bigmap")]
public double Bigmap { get; set; }
[JsonPropertyName("woods")]
public double Woods { get; set; }
[JsonPropertyName("lighthouse")]
public double Lighthouse { get; set; }
[JsonPropertyName("shoreline")]
public double Shoreline { get; set; }
[JsonPropertyName("interchange")]
public double Interchange { get; set; }
[JsonPropertyName("reserve")]
public double Reserve { get; set; }
[JsonPropertyName("tarkovStreets")]
public double TarkovStreets { get; set; }
[JsonPropertyName("sandbox")]
public double Sandbox { get; set; }
}
/// <summary>
/// Loot inside crate
/// </summary>
public class AirdropLoot
{
[JsonPropertyName("Icon")]
public AirdropTypeEnum Icon { get; set; }
/// <summary>
/// Min/max of weapons inside crate
/// </summary>
[JsonPropertyName("weaponPresetCount")]
public MinMax? WeaponPresetCount { get; set; }
/// <summary>
/// Min/max of armors (head/chest/rig) inside crate
/// </summary>
[JsonPropertyName("armorPresetCount")]
public MinMax? ArmorPresetCount { get; set; }
/// <summary>
/// Min/max of items inside crate
/// </summary>
[JsonPropertyName("itemCount")]
public MinMax ItemCount { get; set; }
/// <summary>
/// Min/max of sealed weapon boxes inside crate
/// </summary>
[JsonPropertyName("weaponCrateCount")]
public MinMax WeaponCrateCount { get; set; }
/// <summary>
/// Items to never allow - tpls
/// </summary>
[JsonPropertyName("itemBlacklist")]
public List<string> ItemBlacklist { get; set; }
/// <summary>
/// Item type (parentId) to allow inside crate
/// </summary>
[JsonPropertyName("itemTypeWhitelist")]
public List<string> ItemTypeWhitelist { get; set; }
/// <summary>
/// Item type/ item tpls to limit count of inside crate - key: item base type: value: max count
/// </summary>
[JsonPropertyName("itemLimits")]
public Dictionary<string, double> ItemLimits { get; set; }
/// <summary>
/// Items to limit stack size of key: item tpl value: min/max stack size
/// </summary>
[JsonPropertyName("itemStackLimits")]
public Dictionary<string, MinMax> ItemStackLimits { get; set; }
/// <summary>
/// Armor levels to allow inside crate e.g. [4,5,6]
/// </summary>
[JsonPropertyName("armorLevelWhitelist")]
public List<int>? ArmorLevelWhitelist { get; set; }
/// <summary>
/// Should boss items be added to airdrop crate
/// </summary>
[JsonPropertyName("allowBossItems")]
public bool AllowBossItems { get; set; }
[JsonPropertyName("useForcedLoot")]
public bool? UseForcedLoot { get; set; }
[JsonPropertyName("forcedLoot")]
public Dictionary<string, MinMax>? ForcedLoot { get; set; }
}
+30
View File
@@ -0,0 +1,30 @@
namespace Types.Models.Spt.Config;
using System.Text.Json.Serialization;
public class BackupConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; } = "spt-backup";
[JsonPropertyName("enabled")]
public bool Enabled { get; set; }
[JsonPropertyName("maxBackups")]
public int MaxBackups { get; set; }
[JsonPropertyName("directory")]
public string Directory { get; set; }
[JsonPropertyName("backupInterval")]
public BackupConfigInterval BackupInterval { get; set; }
}
public class BackupConfigInterval
{
[JsonPropertyName("enabled")]
public bool Enabled { get; set; }
[JsonPropertyName("intervalMinutes")]
public int IntervalMinutes { get; set; }
}
+18
View File
@@ -0,0 +1,18 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; }
}
public class RunIntervalValues
{
[JsonPropertyName("inRaid")]
public int InRaid { get; set; }
[JsonPropertyName("outOfRaid")]
public int OutOfRaid { get; set; }
}
+523
View File
@@ -0,0 +1,523 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class BotConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; } = "spt-bot";
/** How many variants of each bot should be generated on raid start */
[JsonPropertyName("presetBatch")]
public PresetBatch PresetBatch { get; set; }
/** Bot roles that should not have PMC types (pmcBEAR/pmcUSEC) added as enemies to */
[JsonPropertyName("botsToNotAddPMCsAsEnemiesTo")]
public List<string> BotsToNotAddPMCsAsEnemiesTo { get; set; }
/** What bot types should be classified as bosses */
[JsonPropertyName("bosses")]
public List<string> Bosses { get; set; }
/** Control weapon/armor durability min/max values for each bot type */
[JsonPropertyName("durability")]
public BotDurability Durability { get; set; }
/** Controls the percentage values of randomization item resources */
[JsonPropertyName("lootItemResourceRandomization")]
public Dictionary<string, RandomisedResourceDetails> LootItemResourceRandomization { get; set; }
/** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */
[JsonPropertyName("revenge")]
public Dictionary<string, List<string>> Revenge { get; set; }
/** Control how many items are allowed to spawn on a bot
* key: bottype, value: <key: itemTpl: value: max item count> */
[JsonPropertyName("itemSpawnLimits")]
public Dictionary<string, Dictionary<string, int>> ItemSpawnLimits { get; set; }
/** Blacklist/whitelist items on a bot */
[JsonPropertyName("equipment")]
public Dictionary<string, EquipmentFilters> Equipment { get; set; }
/** Show a bots botType value after their name */
[JsonPropertyName("showTypeInNickname")]
public bool ShowTypeInNickname { get; set; }
/** What ai brain should a normal scav use per map */
[JsonPropertyName("assaultBrainType")]
public Dictionary<string, Dictionary<string, int>> AssaultBrainType { get; set; }
/** What ai brain should a player scav use per map */
[JsonPropertyName("playerScavBrainType")]
public Dictionary<string, Dictionary<string, int>> PlayerScavBrainType { get; set; }
/** Max number of bots that can be spawned in a raid at any one time */
[JsonPropertyName("maxBotCap")]
public Dictionary<string, int> MaxBotCap { get; set; }
/** Chance scav has fake pscav name e.g. Scav name (player name) */
[JsonPropertyName("chanceAssaultScavHasPlayerScavName")]
public int ChanceAssaultScavHasPlayerScavName { get; set; }
/** How many stacks of secret ammo should a bot have in its bot secure container */
[JsonPropertyName("secureContainerAmmoStackCount")]
public int SecureContainerAmmoStackCount { get; set; }
/** Bot roles in this array will be given a dog tag on generation */
[JsonPropertyName("botRolesWithDogTags")]
public List<string> BotRolesWithDogTags { get; set; }
/** Settings to control the items that get added into wallets on bots */
[JsonPropertyName("walletLoot")]
public WalletLootSettings WalletLoot { get; set; }
/** Currency weights, Keyed by botrole / currency */
[JsonPropertyName("currencyStackSize")]
public Dictionary<string, Dictionary<string, Dictionary<string, int>>> CurrencyStackSize { get; set; }
/** Tpls for low profile gas blocks */
[JsonPropertyName("lowProfileGasBlockTpls")]
public List<string> LowProfileGasBlockTpls { get; set; }
/** What bottypes should be excluded from having loot generated on them (backpack/pocket/vest) does not disable food/drink/special/ */
[JsonPropertyName("disableLootOnBotTypes")]
public List<string> DisableLootOnBotTypes { get; set; }
[JsonPropertyName("assaultToBossConversion")]
public AssaultToBossConversion AssaultToBossConversion { get; set; }
/** Max length a bots name can be */
[JsonPropertyName("botNameLengthLimit")]
public int BotNameLengthLimit { get; set; }
/** Bot roles that must have a unique name when generated vs other bots in raid */
[JsonPropertyName("botRolesThatMustHaveUniqueName")]
public List<string> BotRolesThatMustHaveUniqueName { get; set; }
}
public class AssaultToBossConversion
{
[JsonPropertyName("bossConvertEnabled")]
public bool BossConvertEnabled { get; set; }
[JsonPropertyName("bossesToConvertToWeights")]
public Dictionary<string, int> BossesToConvertToWeights { get; set; }
[JsonPropertyName("bossConvertMinMax")]
public Dictionary<string, MinMax> BossConvertMinMax { get; set; }
}
/** Number of bots to generate and store in cache on raid start per bot type */
public class PresetBatch
{
[JsonPropertyName("assault")]
public int Assault { get; set; }
[JsonPropertyName("bossBully")]
public int BossBully { get; set; }
[JsonPropertyName("bossGluhar")]
public int BossGluhar { get; set; }
[JsonPropertyName("bossKilla")]
public int BossKilla { get; set; }
[JsonPropertyName("bossKojaniy")]
public int BossKojaniy { get; set; }
[JsonPropertyName("bossSanitar")]
public int BossSanitar { get; set; }
[JsonPropertyName("bossTagilla")]
public int BossTagilla { get; set; }
[JsonPropertyName("bossKnight")]
public int BossKnight { get; set; }
[JsonPropertyName("bossTest")]
public int BossTest { get; set; }
[JsonPropertyName("cursedAssault")]
public int CursedAssault { get; set; }
[JsonPropertyName("followerBully")]
public int FollowerBully { get; set; }
[JsonPropertyName("followerGluharAssault")]
public int FollowerGluharAssault { get; set; }
[JsonPropertyName("followerGluharScout")]
public int FollowerGluharScout { get; set; }
[JsonPropertyName("followerGluharSecurity")]
public int FollowerGluharSecurity { get; set; }
[JsonPropertyName("followerGluharSnipe")]
public int FollowerGluharSnipe { get; set; }
[JsonPropertyName("followerKojaniy")]
public int FollowerKojaniy { get; set; }
[JsonPropertyName("followerSanitar")]
public int FollowerSanitar { get; set; }
[JsonPropertyName("followerTagilla")]
public int FollowerTagilla { get; set; }
[JsonPropertyName("followerBirdEye")]
public int FollowerBirdEye { get; set; }
[JsonPropertyName("followerBigPipe")]
public int FollowerBigPipe { get; set; }
[JsonPropertyName("followerTest")]
public int FollowerTest { get; set; }
[JsonPropertyName("followerBoar")]
public int FollowerBoar { get; set; }
[JsonPropertyName("marksman")]
public int Marksman { get; set; }
[JsonPropertyName("pmcBot")]
public int PmcBot { get; set; }
[JsonPropertyName("sectantPriest")]
public int SectantPriest { get; set; }
[JsonPropertyName("sectantWarrior")]
public int SectantWarrior { get; set; }
[JsonPropertyName("gifter")]
public int Gifter { get; set; }
[JsonPropertyName("test")]
public int Test { get; set; }
[JsonPropertyName("exUsec")]
public int ExUsec { get; set; }
[JsonPropertyName("arenaFighterEvent")]
public int ArenaFighterEvent { get; set; }
[JsonPropertyName("arenaFighter")]
public int ArenaFighter { get; set; }
[JsonPropertyName("crazyAssaultEvent")]
public int CrazyAssaultEvent { get; set; }
[JsonPropertyName("bossBoar")]
public int BossBoar { get; set; }
[JsonPropertyName("bossBoarSniper")]
public int BossBoarSniper { get; set; }
[JsonPropertyName("pmcUSEC")]
public int PmcUSEC { get; set; }
[JsonPropertyName("pmcBEAR")]
public int PmcBEAR { get; set; }
}
public class WalletLootSettings
{
/// <summary>
/// Chance wallets have loot in them
/// </summary>
[JsonPropertyName("chancePercent")]
public float ChancePercent { get; set; }
[JsonPropertyName("itemCount")]
public MinMax ItemCount { get; set; }
[JsonPropertyName("stackSizeWeight")]
public Dictionary<string, float> StackSizeWeight { get; set; }
[JsonPropertyName("currencyWeight")]
public Dictionary<string, float> CurrencyWeight { get; set; }
/// <summary>
/// What wallets will have money in them
/// </summary>
[JsonPropertyName("walletTplPool")]
public List<string> WalletTplPool { get; set; }
}
public class EquipmentFilters
{
/// <summary>
/// Limits for mod types per weapon .e.g. scopes
/// </summary>
[JsonPropertyName("weaponModLimits")]
public ModLimits WeaponModLimits { get; set; }
/// <summary>
/// Whitelist for weapon sight types allowed per gun
/// </summary>
[JsonPropertyName("weaponSightWhitelist")]
public Dictionary<string, List<string>> WeaponSightWhitelist { get; set; }
/// <summary>
/// Chance face shield is down/active
/// </summary>
[JsonPropertyName("faceShieldIsActiveChancePercent")]
public float? FaceShieldIsActiveChancePercent { get; set; }
/// <summary>
/// Chance gun flashlight is active during the day
/// </summary>
[JsonPropertyName("lightIsActiveDayChancePercent")]
public float? LightIsActiveDayChancePercent { get; set; }
/// <summary>
/// Chance gun flashlight is active during the night
/// </summary>
[JsonPropertyName("lightIsActiveNightChancePercent")]
public float? LightIsActiveNightChancePercent { get; set; }
/// <summary>
/// Chance gun laser is active during the day
/// </summary>
[JsonPropertyName("laserIsActiveChancePercent")]
public float? LaserIsActiveChancePercent { get; set; }
/// <summary>
/// Chance NODS are down/active during the day
/// </summary>
[JsonPropertyName("NvgIsActiveChanceDayPercent")]
public float? NvgIsActiveChanceDayPercent { get; set; }
/// <summary>
/// Chance NODS are down/active during the night
/// </summary>
[JsonPropertyName("nvgIsActiveChanceNightPercent")]
public float? NvgIsActiveChanceNightPercent { get; set; }
[JsonPropertyName("forceOnlyArmoredRigWhenNoArmor")]
public bool? ForceOnlyArmoredRigWhenNoArmor { get; set; }
/// <summary>
/// Should plates be filtered by level
/// </summary>
[JsonPropertyName("filterPlatesByLevel")]
public bool? FilterPlatesByLevel { get; set; }
/// <summary>
/// What additional slot ids should be seen as required when choosing a mod to add to a weapon
/// </summary>
[JsonPropertyName("weaponSlotIdsToMakeRequired")]
public List<string>? WeaponSlotIdsToMakeRequired { get; set; }
/// <summary>
/// Adjust weighting/chances of items on bot by level of bot
/// </summary>
[JsonPropertyName("randomisation")]
public List<RandomisationDetails> Randomisation { get; set; }
/// <summary>
/// Blacklist equipment by level of bot
/// </summary>
[JsonPropertyName("blacklist")]
public List<EquipmentFilterDetails> Blacklist { get; set; }
/// <summary>
/// Whitelist equipment by level of bot
/// </summary>
[JsonPropertyName("whitelist")]
public List<EquipmentFilterDetails> Whitelist { get; set; }
/// <summary>
/// Adjust equipment/ammo
/// </summary>
[JsonPropertyName("weightingAdjustmentsByBotLevel")]
public List<WeightingAdjustmentDetails> WeightingAdjustmentsByBotLevel { get; set; }
/// <summary>
/// Same as weightingAdjustments but based on player level instead of bot level
/// </summary>
[JsonPropertyName("weightingAdjustmentsByPlayerLevel")]
public List<WeightingAdjustmentDetails>? WeightingAdjustmentsByPlayerLevel { get; set; }
/// <summary>
/// Should the stock mod be forced to spawn on bot
/// </summary>
[JsonPropertyName("forceStock")]
public bool? ForceStock { get; set; }
[JsonPropertyName("armorPlateWeighting")]
public List<ArmorPlateWeights>? ArmorPlateWeighting { get; set; }
[JsonPropertyName("forceRigWhenNoVest")]
public bool? ForceRigWhenNoVest { get; set; }
}
public class ModLimits
{
/// <summary>
/// How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR
/// </summary>
[JsonPropertyName("scopeLimit")]
public int? ScopeLimit { get; set; }
/// <summary>
/// How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT
/// </summary>
[JsonPropertyName("lightLaserLimit")]
public int? LightLaserLimit { get; set; }
}
public class RandomisationDetails
{
/// <summary>
/// Between what levels do these randomisation setting apply to
/// </summary>
[JsonPropertyName("levelRange")]
public MinMax LevelRange { get; set; }
[JsonPropertyName("generation")]
public Dictionary<string, GenerationData>? Generation { get; set; }
/// <summary>
/// Mod slots that should be fully randomised -ignores mods from bottype.json and instead creates a pool using items.json
/// </summary>
[JsonPropertyName("randomisedWeaponModSlots")]
public List<string>? RandomisedWeaponModSlots { get; set; }
/// <summary>
/// Armor slots that should be randomised e.g. 'Headwear, Armband'
/// </summary>
[JsonPropertyName("randomisedArmorSlots")]
public List<string>? RandomisedArmorSlots { get; set; }
/// <summary>
/// Equipment chances
/// </summary>
[JsonPropertyName("equipment")]
public Dictionary<string, float>? Equipment { get; set; }
/// <summary>
/// Weapon mod chances
/// </summary>
[JsonPropertyName("weaponMods")]
public Dictionary<string, float>? WeaponMods { get; set; }
/// <summary>
/// Equipment mod chances
/// </summary>
[JsonPropertyName("equipmentMods")]
public Dictionary<string, float>? EquipmentMods { get; set; }
[JsonPropertyName("nighttimeChanges")]
public NighttimeChanges? NighttimeChanges { get; set; }
/// <summary>
/// Key = weapon tpl, value = min size of magazine allowed
/// </summary>
[JsonPropertyName("minimumMagazineSize")]
public Dictionary<string, float>? MinimumMagazineSize { get; set; }
}
public class NighttimeChanges
{
/// <summary>
/// Applies changes to values stored in equipmentMods
/// </summary>
[JsonPropertyName("equipmentModsModifiers")]
public Dictionary<string, float> EquipmentModsModifiers { get; set; }
//public Dictionary<string, float> WeaponModsModifiers { get; set; } //TODO
}
public class EquipmentFilterDetails
{
/// <summary>
/// Between what levels do these equipment filter setting apply to
/// </summary>
[JsonPropertyName("levelRange")]
public MinMax LevelRange { get; set; }
/// <summary>
/// Key: mod slot name e.g. mod_magazine, value: item tpls
/// </summary>
[JsonPropertyName("equipment")]
public Dictionary<string, List<string>>? Equipment { get; set; }
/// <summary>
/// Key: equipment slot name e.g. FirstPrimaryWeapon, value: item tpls
/// </summary>
[JsonPropertyName("gear")]
public Dictionary<string, List<string>>? Gear { get; set; }
/// <summary>
/// Key: cartridge type e.g. Caliber23x75, value: item tpls
/// </summary>
[JsonPropertyName("cartridge")]
public Dictionary<string, List<string>>? Cartridge { get; set; }
}
public class WeightingAdjustmentDetails
{
/// <summary>
/// Between what levels do these weight settings apply to
/// </summary>
[JsonPropertyName("levelRange")]
public MinMax LevelRange { get; set; }
/// <summary>
/// Key: ammo type e.g. Caliber556x45NATO, value: item tpl + weight
/// </summary>
[JsonPropertyName("ammo")]
public AdjustmentDetails? Ammo { get; set; }
/// <summary>
/// Key: equipment slot e.g. TacticalVest, value: item tpl + weight
/// </summary>
[JsonPropertyName("equipment")]
public AdjustmentDetails? Equipment { get; set; }
/// <summary>
/// Key: clothing slot e.g. feet, value: item tpl + weight
/// </summary>
[JsonPropertyName("clothing")]
public AdjustmentDetails? Clothing { get; set; }
}
public class AdjustmentDetails
{
[JsonPropertyName("add")]
public Dictionary<string, Dictionary<string, float>> Add { get; set; }
[JsonPropertyName("edit")]
public Dictionary<string, Dictionary<string, float>> Edit { get; set; }
}
public class ArmorPlateWeights : Dictionary<string, object>
{
[JsonPropertyName("levelRange")]
public MinMax LevelRange { get; set; }
}
public class RandomisedResourceDetails
{
[JsonPropertyName("food")]
public RandomisedResourceValues Food { get; set; }
[JsonPropertyName("meds")]
public RandomisedResourceValues Meds { get; set; }
}
public class RandomisedResourceValues
{
/// <summary>
/// Minimum percent of item to randomized between min and max resource
/// </summary>
[JsonPropertyName("resourcePercent")]
public float ResourcePercent { get; set; }
/// <summary>
/// Chance for randomization to not occur
/// </summary>
[JsonPropertyName("chanceMaxResourcePercent")]
public float ChanceMaxResourcePercent { get; set; }
}
+115
View File
@@ -0,0 +1,115 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class BotDurability
{
[JsonPropertyName("default")]
public DefaultDurability Default { get; set; }
[JsonPropertyName("pmc")]
public PmcDurability Pmc { get; set; }
[JsonPropertyName("boss")]
public BotDurability Boss { get; set; }
[JsonPropertyName("follower")]
public BotDurability Follower { get; set; }
[JsonPropertyName("assault")]
public BotDurability Assault { get; set; }
[JsonPropertyName("cursedassault")]
public BotDurability CursedAssault { get; set; }
[JsonPropertyName("marksman")]
public BotDurability Marksman { get; set; }
[JsonPropertyName("pmcbot")]
public BotDurability PmcBot { get; set; }
[JsonPropertyName("arenafighterevent")]
public BotDurability ArenaFighterEvent { get; set; }
[JsonPropertyName("arenafighter")]
public BotDurability ArenaFighter { get; set; }
[JsonPropertyName("crazyassaultevent")]
public BotDurability CrazyAssaultEvent { get; set; }
[JsonPropertyName("exusec")]
public BotDurability Exusec { get; set; }
[JsonPropertyName("gifter")]
public BotDurability Gifter { get; set; }
[JsonPropertyName("sectantpriest")]
public BotDurability SectantPriest { get; set; }
[JsonPropertyName("sectantwarrior")]
public BotDurability SectantWarrior { get; set; }
}
/** Durability values to be used when a more specific bot type can't be found */
public class DefaultDurability
{
[JsonPropertyName("armor")]
public ArmorDurability Armor { get; set; }
[JsonPropertyName("weapon")]
public WeaponDurability Weapon { get; set; }
}
public class PmcDurability
{
[JsonPropertyName("armor")]
public PmcDurabilityArmor Armor { get; set; }
[JsonPropertyName("weapon")]
public WeaponDurability Weapon { get; set; }
}
public class PmcDurabilityArmor
{
[JsonPropertyName("lowestMaxPercent")]
public double LowestMaxPercent { get; set; }
[JsonPropertyName("highestMaxPercent")]
public double HighestMaxPercent { get; set; }
[JsonPropertyName("maxDelta")]
public double MaxDelta { get; set; }
[JsonPropertyName("minDelta")]
public double MinDelta { get; set; }
}
public class ArmorDurability
{
[JsonPropertyName("maxDelta")]
public double MaxDelta { get; set; }
[JsonPropertyName("minDelta")]
public double MinDelta { get; set; }
[JsonPropertyName("minLimitPercent")]
public double MinLimitPercent { get; set; }
}
public class WeaponDurability
{
[JsonPropertyName("lowestMax")]
public double LowestMax { get; set; }
[JsonPropertyName("highestMax")]
public double HighestMax { get; set; }
[JsonPropertyName("maxDelta")]
public double MaxDelta { get; set; }
[JsonPropertyName("minDelta")]
public double MinDelta { get; set; }
[JsonPropertyName("minLimitPercent")]
public double MinLimitPercent { get; set; }
}
+197
View File
@@ -0,0 +1,197 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class CoreConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; } = "spt-core";
[JsonPropertyName("sptVersion")]
public string SptVersion { get; set; }
[JsonPropertyName("projectName")]
public string ProjectName { get; set; }
[JsonPropertyName("compatibleTarkovVersion")]
public string CompatibleTarkovVersion { get; set; }
[JsonPropertyName("serverName")]
public string ServerName { get; set; }
[JsonPropertyName("profileSaveIntervalSeconds")]
public int ProfileSaveIntervalInSeconds { get; set; }
[JsonPropertyName("sptFriendNickname")]
public string SptFriendNickname { get; set; }
[JsonPropertyName("allowProfileWipe")]
public bool AllowProfileWipe { get; set; }
[JsonPropertyName("bsgLogging")]
public BsgLogging BsgLogging { get; set; }
[JsonPropertyName("release")]
public Release Release { get; set; }
[JsonPropertyName("fixes")]
public GameFixes Fixes { get; set; }
[JsonPropertyName("survey")]
public SurveyResponseData Survey { get; set; }
[JsonPropertyName("features")]
public ServerFeatures Features { get; set; }
/** Commit hash build server was created from */
[JsonPropertyName("commit")]
public string? Commit { get; set; }
/** Timestamp of server build */
[JsonPropertyName("buildTime")]
public string? BuildTime { get; set; }
/** Server locale keys that will be added to the bottom of the startup watermark */
[JsonPropertyName("customWatermarkLocaleKeys")]
public List<string>? CustomWatermarkLocaleKeys { get; set; }
}
public class BsgLogging
{
/**
* verbosity of what to log, yes I know this is backwards, but its how nlog deals with ordinals.
* complain to them about it! In all cases, better exceptions will be logged.
* WARNING: trace-info logging will quickly create log files in the megabytes.
* 0 - trace
* 1 - debug
* 2 - info
* 3 - warn
* 4 - error
* 5 - fatal
* 6 - off
*/
[JsonPropertyName("verbosity")]
public int Verbosity { get; set; }
// Should we send the logging to the server
[JsonPropertyName("sendToServer")]
public bool SendToServer { get; set; }
}
public class Release
{
// Disclaimer outlining the intended usage of bleeding edge
[JsonPropertyName("betaDisclaimerText")]
public string? BetaDisclaimerText { get; set; }
// Text logged when users agreed to terms
[JsonPropertyName("betaDisclaimerAcceptText")]
public string BetaDisclaimerAcceptText { get; set; }
// Server mods loaded message
[JsonPropertyName("serverModsLoadedText")]
public string ServerModsLoadedText { get; set; }
// Server mods loaded debug message text
[JsonPropertyName("serverModsLoadedDebugText")]
public string ServerModsLoadedDebugText { get; set; }
// Client mods loaded message
[JsonPropertyName("clientModsLoadedText")]
public string ClientModsLoadedText { get; set; }
// Client mods loaded debug message text
[JsonPropertyName("clientModsLoadedDebugText")]
public string ClientModsLoadedDebugText { get; set; }
// Illegal plugins log message
[JsonPropertyName("illegalPluginsLoadedText")]
public string IllegalPluginsLoadedText { get; set; }
// Illegal plugins exception
[JsonPropertyName("illegalPluginsExceptionText")]
public string IllegalPluginsExceptionText { get; set; }
// Summary of release changes
[JsonPropertyName("releaseSummaryText")]
public string? ReleaseSummaryText { get; set; }
// Enables the cool watermark in-game
[JsonPropertyName("isBeta")]
public bool? IsBeta { get; set; }
// Whether mods are enabled
[JsonPropertyName("isModdable")]
public bool? IsModdable { get; set; }
// Are mods loaded on the server?
[JsonPropertyName("isModded")]
public bool IsModded { get; set; }
// How long before the messagebox times out and closes the game
[JsonPropertyName("betaDisclaimerTimeoutDelay")]
public int BetaDisclaimerTimeoutDelay { get; set; }
}
public class GameFixes
{
/** Shotguns use a different value than normal guns causing huge pellet dispersion */
[JsonPropertyName("fixShotgunDispersion")]
public bool FixShotgunDispersion { get; set; }
/** Remove items added by mods when the mod no longer exists - can fix dead profiles stuck at game load */
[JsonPropertyName("removeModItemsFromProfile")]
public bool RemoveModItemsFromProfile { get; set; }
/** Remove invalid traders from profile - trader data can be leftover when player removes trader mod */
[JsonPropertyName("removeInvalidTradersFromProfile")]
public bool RemoveInvalidTradersFromProfile { get; set; }
/** Fix issues that cause the game to not start due to inventory item issues */
[JsonPropertyName("fixProfileBreakingInventoryItemIssues")]
public bool FixProfileBreakingInventoryItemIssues { get; set; }
}
public class ServerFeatures
{
/* Controls whether or not the server attempts to download mod dependencies not included in the server's executable */
[JsonPropertyName("autoInstallModDependencies")]
public bool AutoInstallModDependencies { get; set; }
[JsonPropertyName("compressProfile")]
public bool CompressProfile { get; set; }
[JsonPropertyName("chatbotFeatures")]
public ChatbotFeatures ChatbotFeatures { get; set; }
/** Keyed to profile type e.g. "Standard" or "SPT Developer" */
[JsonPropertyName("createNewProfileTypesBlacklist")]
public List<string> CreateNewProfileTypesBlacklist { get; set; }
}
public class ChatbotFeatures
{
[JsonPropertyName("sptFriendEnabled")]
public bool SptFriendEnabled { get; set; }
[JsonPropertyName("sptFriendGiftsEnabled")]
public bool SptFriendGiftsEnabled { get; set; }
[JsonPropertyName("commandoEnabled")]
public bool CommandoEnabled { get; set; }
[JsonPropertyName("commandoFeatures")]
public CommandoFeatures CommandoFeatures { get; set; }
[JsonPropertyName("commandUseLimits")]
public Dictionary<string, int> CommandUseLimits { get; set; }
[JsonPropertyName("ids")]
public Dictionary<string, string> Ids { get; set; }
}
public class CommandoFeatures
{
[JsonPropertyName("giveCommandEnabled")]
public bool GiveCommandEnabled { get; set; }
}
+63
View File
@@ -0,0 +1,63 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class Gift
{
/// <summary>
/// Items to send to player
/// </summary>
[JsonPropertyName("items")]
public List<Item> Items { get; set; }
/// <summary>
/// Who is sending the gift to player
/// </summary>
[JsonPropertyName("sender")]
public GiftSenderType Sender { get; set; }
/// <summary>
/// Optional - supply a users id to send from, not necessary when sending from SYSTEM or TRADER
/// </summary>
[JsonPropertyName("senderId")]
public string? SenderId { get; set; }
[JsonPropertyName("senderDetails")]
public UserDialogInfo SenderDetails { get; set; }
/// <summary>
/// Optional - supply a trader type to send from, not necessary when sending from SYSTEM or USER
/// </summary>
[JsonPropertyName("trader")]
public Traders? Trader { get; set; }
[JsonPropertyName("messageText")]
public string MessageText { get; set; }
/// <summary>
/// Optional - if sending text from the client locale file
/// </summary>
[JsonPropertyName("localeTextId")]
public string? LocaleTextId { get; set; }
/// <summary>
/// Optional - Used by Seasonal events to send on specific day
/// </summary>
[JsonPropertyName("timestampToSend")]
public long? TimestampToSend { get; set; }
[JsonPropertyName("associatedEvent")]
public SeasonalEventType AssociatedEvent { get; set; }
[JsonPropertyName("collectionTimeHours")]
public int CollectionTimeHours { get; set; }
/// <summary>
/// Optional, can be used to change profile settings like level/skills
/// </summary>
[JsonPropertyName("profileChangeEvents")]
public List<ProfileChangeEvent>? ProfileChangeEvents { get; set; }
[JsonPropertyName("maxToSendPlayer")]
public int? MaxToSendPlayer { get; set; }
}
+33
View File
@@ -0,0 +1,33 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class HealthConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; } = "spt-health";
[JsonPropertyName("healthMultipliers")]
public HealthMultipliers HealthMultipliers { get; set; }
[JsonPropertyName("save")]
public Save Save { get; set; }
}
public class HealthMultipliers
{
[JsonPropertyName("death")]
public double Death { get; set; }
[JsonPropertyName("blacked")]
public double Blacked { get; set; }
}
public class Save
{
[JsonPropertyName("health")]
public bool Health { get; set; }
[JsonPropertyName("effects")]
public bool Effects { get; set; }
}
+142
View File
@@ -0,0 +1,142 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class HideoutConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; } = "spt-hideout";
/// <summary>
/// How many seconds should pass before hideout crafts / fuel usage is checked and processed
/// </summary>
[JsonPropertyName("runIntervalSeconds")]
public int RunIntervalSeconds { get; set; }
/// <summary>
/// Default values used to hydrate `RunIntervalSeconds` with
/// </summary>
[JsonPropertyName("runIntervalValues")]
public IRunIntervalValues RunIntervalValues { get; set; }
[JsonPropertyName("hoursForSkillCrafting")]
public int HoursForSkillCrafting { get; set; }
[JsonPropertyName("expCraftAmount")]
public int ExpCraftAmount { get; set; }
[JsonPropertyName("overrideCraftTimeSeconds")]
public int OverrideCraftTimeSeconds { get; set; }
[JsonPropertyName("overrideBuildTimeSeconds")]
public int OverrideBuildTimeSeconds { get; set; }
/// <summary>
/// Only process a profile's hideout crafts when it has been active in the last x minutes
/// </summary>
[JsonPropertyName("updateProfileHideoutWhenActiveWithinMinutes")]
public int UpdateProfileHideoutWhenActiveWithinMinutes { get; set; }
[JsonPropertyName("cultistCircle")]
public CultistCircleSettings CultistCircle { get; set; }
}
public class CultistCircleSettings
{
[JsonPropertyName("maxRewardItemCount")]
public int MaxRewardItemCount { get; set; }
[JsonPropertyName("maxAttemptsToPickRewardsWithinBudget")]
public int MaxAttemptsToPickRewardsWithinBudget { get; set; }
[JsonPropertyName("rewardPriceMultiplerMinMax")]
public MinMax RewardPriceMultiplerMinMax { get; set; }
/// <summary>
/// The odds that meeting the highest threshold gives you a bonus to crafting time
/// </summary>
[JsonPropertyName("bonusAmountMultiplier")]
public double BonusAmountMultiplier { get; set; }
[JsonPropertyName("bonusChanceMultiplier")]
public double BonusChanceMultiplier { get; set; }
/// <summary>
/// What is considered a "high-value" item
/// </summary>
[JsonPropertyName("highValueThresholdRub")]
public int HighValueThresholdRub { get; set; }
/// <summary>
/// Hideout/task reward crafts have a unique craft time
/// </summary>
[JsonPropertyName("hideoutTaskRewardTimeSeconds")]
public int HideoutTaskRewardTimeSeconds { get; set; }
/// <summary>
/// Rouble amount player needs to sacrifice to get chance of hideout/task rewards
/// </summary>
[JsonPropertyName("hideoutCraftSacrificeThresholdRub")]
public int HideoutCraftSacrificeThresholdRub { get; set; }
[JsonPropertyName("craftTimeThreshholds")]
public List<CraftTimeThreshhold> CraftTimeThreshholds { get; set; }
/// <summary>
/// -1 means no override, value in seconds
/// </summary>
[JsonPropertyName("craftTimeOverride")]
public int CraftTimeOverride { get; set; }
/// <summary>
/// Specific reward pool when player sacrifices specific item(s)
/// </summary>
[JsonPropertyName("directRewards")]
public List<DirectRewardSettings> DirectRewards { get; set; }
/// <summary>
/// Overrides for reward stack sizes, keyed by item tpl
/// </summary>
[JsonPropertyName("directRewardStackSize")]
public Dictionary<string, MinMax> DirectRewardStackSize { get; set; }
/// <summary>
/// Item tpls to exclude from the reward pool
/// </summary>
[JsonPropertyName("rewardItemBlacklist")]
public List<string> RewardItemBlacklist { get; set; }
/// <summary>
/// Item tpls to include in the reward pool
/// </summary>
[JsonPropertyName("additionalRewardItemPool")]
public List<string> AdditionalRewardItemPool { get; set; }
[JsonPropertyName("currencyRewards")]
public Dictionary<string, MinMax> CurrencyRewards { get; set; }
}
public class CraftTimeThreshhold : MinMax
{
[JsonPropertyName("craftTimeSeconds")]
public int CraftTimeSeconds { get; set; }
}
public class DirectRewardSettings
{
[JsonPropertyName("reward")]
public List<string> Reward { get; set; }
[JsonPropertyName("requiredItems")]
public List<string> RequiredItems { get; set; }
[JsonPropertyName("craftTimeSeconds")]
public int CraftTimeSeconds { get; set; }
/// <summary>
/// Is the reward a one time reward or can it be given multiple times
/// </summary>
[JsonPropertyName("repeatable")]
public bool Repeatable { get; set; }
}
+39
View File
@@ -0,0 +1,39 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Config;
public class HttpConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind { get; set; } = "spt-http";
/// <summary>
/// Address used by webserver
/// </summary>
[JsonPropertyName("ip")]
public string Ip { get; set; }
[JsonPropertyName("port")]
public int Port { get; set; }
/// <summary>
/// Address used by game client to connect to
/// </summary>
[JsonPropertyName("backendIp")]
public string BackendIp { get; set; }
[JsonPropertyName("backendPort")]
public string BackendPort { get; set; }
[JsonPropertyName("webSocketPingDelayMs")]
public int WebSocketPingDelayMs { get; set; }
[JsonPropertyName("logRequests")]
public bool LogRequests { get; set; }
/// <summary>
/// e.g. "SPT_Data/Server/images/traders/579dc571d53a0658a154fbec.png": "SPT_Data/Server/images/traders/NewTraderImage.png"
/// </summary>
[JsonPropertyName("serverImagePathOverride")]
public Dictionary<string, string> ServerImagePathOverride { get; set; }
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class InRaidConfig
{
}
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class InsuranceConfig
{
}
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class InventoryConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class ItemConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class LocaleConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class LocationConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class LootConfig
{
}
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class LostOnDeathConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class MatchConfig
{
}
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class PlayerScavConfig
{
}
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class PmcChatResponse
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class PmcConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class QuestConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class RagfairConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class RepairConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class ScavCaseConfig
{
}
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class SeasonalEventConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class TraderConfig
{
}
+6
View File
@@ -0,0 +1,6 @@
namespace Types.Models.Spt.Config;
public class WeatherConfig
{
}
@@ -0,0 +1,16 @@
// namespace Types.Models.Spt.Controllers;
//
// public class BotController
// {
// export interface IBotController {
// getBotLimit(type: string): number;
// getBotDifficulty(type: string, difficulty: string): IBotCore | IDifficultyCategories;
// isBotPmc(botRole: string): boolean;
// isBotBoss(botRole: string): boolean;
// isBotFollower(botRole: string): boolean;
// generate(info: IGenerateBotsRequestData, playerScav: boolean): IBotBase[];
// getBotCap(): number;
// }
// }
// TODO: implement in C#
@@ -0,0 +1,106 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Dialog;
public class SendMessageDetails
{
/// <summary>
/// Player id
/// </summary>
[JsonPropertyName("recipientId")]
public string RecipientId { get; set; }
/// <summary>
/// Who is sending this message
/// </summary>
[JsonPropertyName("sender")]
public MessageType Sender { get; set; }
/// <summary>
/// Optional - leave blank to use sender value
/// </summary>
[JsonPropertyName("dialogType")]
public MessageType? DialogType { get; set; }
/// <summary>
/// Optional - if sender is USER these details are used
/// </summary>
[JsonPropertyName("senderDetails")]
public IUserDialogInfo? SenderDetails { get; set; }
/// <summary>
/// Optional - the trader sending the message
/// </summary>
[JsonPropertyName("trader")]
public Traders? Trader { get; set; }
/// <summary>
/// Optional - used in player/system messages, otherwise templateId is used
/// </summary>
[JsonPropertyName("messageText")]
public string? MessageText { get; set; }
/// <summary>
/// Optional - Items to send to player
/// </summary>
[JsonPropertyName("items")]
public List<IItem>? Items { get; set; }
/// <summary>
/// Optional - How long items will be stored in mail before expiry
/// </summary>
[JsonPropertyName("itemsMaxStorageLifetimeSeconds")]
public int? ItemsMaxStorageLifetimeSeconds { get; set; }
/// <summary>
/// Optional - Used when sending messages from traders who send text from locale json
/// </summary>
[JsonPropertyName("templateId")]
public string? TemplateId { get; set; }
/// <summary>
/// Optional - ragfair related
/// </summary>
[JsonPropertyName("systemData")]
public ISystemData? SystemData { get; set; }
/// <summary>
/// Optional - Used by ragfair messages
/// </summary>
[JsonPropertyName("ragfairDetails")]
public IMessageContentRagfair? RagfairDetails { get; set; }
/// <summary>
/// OPTIONAL - allows modification of profile settings via mail
/// </summary>
[JsonPropertyName("profileChangeEvents")]
public List<IProfileChangeEvent>? ProfileChangeEvents { get; set; }
}
public class ProfileChangeEvent
{
[JsonPropertyName("_id")]
public string Id { get; set; }
[JsonPropertyName("Type")]
public ProfileChangeEventType Type { get; set; }
[JsonPropertyName("value")]
public int Value { get; set; }
[JsonPropertyName("entity")]
public string? Entity { get; set; }
}
public struct ProfileChangeEventType
{
public const string TRADER_SALES_SUM = "TraderSalesSum";
public const string TRADER_STANDING = "TraderStanding";
public const string PROFILE_LEVEL = "ProfileLevel";
public const string SKILL_POINTS = "SkillPoints";
public const string EXAMINE_ALL_ITEMS = "ExamineAllItems";
public const string UNLOCK_TRADER = "UnlockTrader";
public const string ASSORT_UNLOCK_RULE = "AssortmentUnlockRule";
public const string HIDEOUT_AREA_LEVEL = "HideoutAreaLevel";
}
@@ -0,0 +1,16 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Fence;
public class CreateFenceAssortsResult
{
[JsonPropertyName("sptItems")]
public List<List<Item>> SptItems { get; set; }
[JsonPropertyName("barter_scheme")]
public Dictionary<string, List<List<BarterScheme>>> BarterScheme { get; set; }
[JsonPropertyName("loyal_level_items")]
public Dictionary<string, int> LoyalLevelItems { get; set; }
}
@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Fence;
public class FenceAssortGenerationValues
{
[JsonPropertyName("normal")]
public GenerationAssortValues Normal { get; set; }
[JsonPropertyName("discount")]
public GenerationAssortValues Discount { get; set; }
}
public class GenerationAssortValues
{
[JsonPropertyName("item")]
public int Item { get; set; }
[JsonPropertyName("weaponPreset")]
public int WeaponPreset { get; set; }
[JsonPropertyName("equipmentPreset")]
public int EquipmentPreset { get; set; }
}
@@ -0,0 +1,16 @@
// namespace Types.Models.Spt.Generators;
//
// public class BotGenerator
// {
// export interface IBotGenerator {
// generateInventory(
// templateInventory: IInventory,
// equipmentChances: IChances,
// generation: IGeneration,
// botRole: string,
// isPmc: boolean,
// ): PmcInventory;
// }
// }
// TODO: implement in C#
@@ -0,0 +1,21 @@
// namespace Types.Models.Spt.Generators;
//
// public class LocationGenerator
// {
// export interface ILocationGenerator {
// generateContainerLoot(
// containerIn: IStaticContainerProps,
// staticForced: IStaticForcedProps[],
// staticLootDist: Record<string, IStaticLootDetails>,
// staticAmmoDist: Record<string, IStaticAmmoDetails[]>,
// locationName: string,
// ): IStaticContainerProps;
// generateDynamicLoot(
// dynamicLootDist: ILooseLoot,
// staticAmmoDist: Record<string, IStaticAmmoDetails[]>,
// locationName: string,
// ): ISpawnpointTemplate[];
// }
// }
// TODO: Implement in C#
@@ -0,0 +1,12 @@
// namespace Types.Models.Spt.Generators;
//
// public class PMCLootGenerator
// {
// export interface IPMCLootGenerator {
// generatePMCPocketLootPool(): string[];
// generatePMCBackpackLootPool(): string[];
// }
//
// }
// TODO: Implement in C#
@@ -0,0 +1,11 @@
// namespace Types.Models.Spt.Generators;
//
// public class RagfairAssortGenerator
// {
// export interface IRagfairAssortGenerator {
// getAssortItems(): IItem[];
// }
//
// }
// TODO: implement in C#
@@ -0,0 +1,18 @@
// namespace Types.Models.Spt.Generators;
//
// public class RagfairOfferGenerator
// {
// export interface IRagfairOfferGenerator {
// createOffer(
// userID: string,
// time: number,
// items: IItem[],
// barterScheme: IBarterScheme[],
// loyalLevel: number,
// price: number,
// sellInOnePiece: boolean,
// ): IRagfairOffer;
// }
// }
// TODO: implement in C#
@@ -0,0 +1,19 @@
using System.Text.Json.Serialization;
using Types.Models.Spt.Config;
namespace Types.Models.Spt.Hideout;
public class CircleCraftDetails
{
[JsonPropertyName("time")]
public int Time { get; set; } // this might not be the right "number" type
[JsonPropertyName("rewardType")]
public CircleRewardType RewardType { get; set; }
[JsonPropertyName("rewardAmountRoubles")]
public int RewardAmountRoubles { get; set; }
[JsonPropertyName("rewardDetails")]
public CraftTimeThreshhold? RewardDetails { get; set; }
}
+22
View File
@@ -0,0 +1,22 @@
using System.Text.Json.Serialization;
using Types.Models.Spt.Repeatable;
namespace Types.Models.Spt.Hideout;
public class Hideout
{
[JsonPropertyName("areas")]
public List<HideoutArea> Areas { get; set; }
[JsonPropertyName("customisation")]
public HideoutCustomisation Customisation { get; set; }
[JsonPropertyName("production")]
public HideoutProductionData Production { get; set; }
[JsonPropertyName("settings")]
public HideoutSettingsBase Settings { get; set; }
[JsonPropertyName("qte")]
public List<qteData> Qte { get; set; }
}
@@ -0,0 +1,30 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Hideout;
public class ScavCaseRewardCountsAndPrice
{
[JsonPropertyName("Common")]
public RewardCountAndPriceDetails Common { get; set; }
[JsonPropertyName("Rare")]
public RewardCountAndPriceDetails Rare { get; set; }
[JsonPropertyName("Superrare")]
public RewardCountAndPriceDetails Superrare { get; set; }
}
public class RewardCountAndPriceDetails
{
[JsonPropertyName("minCount")]
public int MinCount { get; set; }
[JsonPropertyName("maxCount")]
public int MaxCount { get; set; }
[JsonPropertyName("minPriceRub")]
public int MinPriceRub { get; set; }
[JsonPropertyName("maxPriceRub")]
public int MaxPriceRub { get; set; }
}
@@ -0,0 +1,18 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Inventory;
public class OwnerInventoryItems
{
[JsonPropertyName("from")]
public List<Item> From { get; set; }
[JsonPropertyName("to")]
public List<Item> To { get; set; }
[JsonPropertyName("sameInventory")]
public bool SameInventory { get; set; }
[JsonPropertyName("isMail")]
public bool IsMail { get; set; }
}
+15
View File
@@ -0,0 +1,15 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Location;
public class RaidChanges
{
[JsonPropertyName("dynamicLootPercent")]
public float DynamicLootPercent { get; set; }
[JsonPropertyName("staticLootPercent")]
public float StaticLootPercent { get; set; }
[JsonPropertyName("simulatedRaidStartSeconds")]
public int SimulatedRaidStartSeconds { get; set; }
}
@@ -0,0 +1,21 @@
using System.Text.Json.Serialization;
namespace Types.Models.Spt.Logging;
public class ClientLogRequest
{
[JsonPropertyName("Source")]
public string Source { get; set; }
[JsonPropertyName("Level")]
public LogLevel Level { get; set; }
[JsonPropertyName("Message")]
public string Message { get; set; }
[JsonPropertyName("Color")]
public string? Color { get; set; }
[JsonPropertyName("BackgroundColor")]
public string? BackgroundColor { get; set; }
}
@@ -0,0 +1,14 @@
namespace Types.Models.Spt.Logging;
public struct LogBackgroundColor
{
public const string DEFAULT = "";
public const string BLACK = "blackBG";
public const string RED = "redBG";
public const string GREEN = "greenBG";
public const string YELLOW = "yellowBG";
public const string BLUE = "blueBG";
public const string MAGENTA = "magentaBG";
public const string CYAN = "cyanBG";
public const string WHITE = "whiteBG";
}
+13
View File
@@ -0,0 +1,13 @@
namespace Types.Models.Spt.Logging;
public enum LogLevel
{
ERROR = 0,
WARN = 1,
SUCCESS = 2,
INFO = 3,
CUSTOM = 4,
DEBUG = 5
}
// TODO: needs to be moved to enums namespace
+14
View File
@@ -0,0 +1,14 @@
namespace Types.Models.Spt.Logging;
public struct LogTextColor
{
public const string BLACK = "black";
public const string RED = "red";
public const string GREEN = "green";
public const string YELLOW = "yellow";
public const string BLUE = "blue";
public const string MAGENTA = "Magenta";
public const string CYAN = "cyan";
public const string WHITE = "white";
public const string GRAY = "gray";
}
+15
View File
@@ -0,0 +1,15 @@
// namespace Types.Models.Spt.Logging;
//
// public class SptLogger
// {
// export interface SptLogger {
// error: (msg: string | Record<string, unknown>) => void;
// warn: (msg: string | Record<string, unknown>) => void;
// succ?: (msg: string | Record<string, unknown>) => void;
// info: (msg: string | Record<string, unknown>) => void;
// debug: (msg: string | Record<string, unknown>) => void;
// }
//
// }
// TODO: needs to be reimplemented however we want to do it in this project
+13
View File
@@ -0,0 +1,13 @@
// namespace Types.Models.Spt.Mod;
//
// public class ModLoader
// {
// export interface IModLoader {
// load(container: DependencyContainer): void;
//
// getModPath(mod: string): string;
// }
//
// }
// TODO: This needs to be reworked with however we do it for this project
+61
View File
@@ -0,0 +1,61 @@
// namespace Types.Models.Spt.Mod;
//
// public class NewItemDetails
// {
// export abstract class NewItemDetailsBase {
// /** Price of the item on flea market */
// fleaPriceRoubles: number;
//
// /** Price of the item in the handbook */
// handbookPriceRoubles: number;
//
// /** Handbook ParentId for the new item */
// handbookParentId: string;
//
// /**
// * A dictionary for locale settings, key = langauge (e.g. en,cn,es-mx,jp,fr)
// * If a language is not included, the first item in the array will be used in its place
// */
// locales: Record<string, LocaleDetails>;
// }
//
// export class NewItemFromCloneDetails extends NewItemDetailsBase {
// /** Id of the item to copy and use as a base */
// itemTplToClone: string;
//
// /** Item properties that should be applied over the top of the cloned base */
// overrideProperties: IProps;
//
// /** ParentId for the new item (item type) */
// parentId: string;
//
// /**
// * the id the new item should have, leave blank to have one generated for you
// * This is often known as the TplId, or TemplateId
// */
// newId = "";
// }
//
// export class NewItemDetails extends NewItemDetailsBase {
// newItem: ITemplateItem;
// }
//
// export class LocaleDetails {
// name: string;
// shortName: string;
// description: string;
// }
//
// export class CreateItemResult {
// constructor() {
// this.success = false;
// this.errors = [];
// }
//
// success: boolean;
// itemId: string;
// errors: string[];
// }
// }
// TODO: This needs to be reworked with however we do it for this project
+27
View File
@@ -0,0 +1,27 @@
// namespace Types.Models.Spt.Mod;
//
// public class PackageJsonData
// {
// export interface IPackageJsonData {
// incompatibilities?: string[];
// loadBefore?: string[];
// loadAfter?: string[];
// dependencies?: Record<string, string>;
// modDependencies?: Record<string, string>;
// name: string;
// url: string;
// author: string;
// version: string;
// sptVersion: string;
// /** We deliberately purge this data */
// scripts: Record<string, string>;
// devDependencies: Record<string, string>;
// licence: string;
// main: string;
// isBundleMod: boolean;
// contributors: string[];
// }
//
// }
// TODO: this will need changing to however we implement it in this project
+12 -12
View File
@@ -27,7 +27,7 @@ public class QuestPool
public class ExplorationPool
{
[JsonPropertyName("locations")]
public Dictionary<ELocationName, List<string>> Locations { get; set; }
public Dictionary<ELocationName, List<string>> Locations { get; set; } // TODO: check the type, originally - Partial<Record<ELocationName, string[]>>
}
public class EliminationPool
@@ -39,37 +39,37 @@ public class EliminationPool
public class EliminationTargetPool
{
[JsonPropertyName("Savage")]
public TargetLocation Savage { get; set; }
public TargetLocation? Savage { get; set; }
[JsonPropertyName("AnyPmc")]
public TargetLocation AnyPmc { get; set; }
public TargetLocation? AnyPmc { get; set; }
[JsonPropertyName("bossBully")]
public TargetLocation BossBully { get; set; }
public TargetLocation? BossBully { get; set; }
[JsonPropertyName("bossGluhar")]
public TargetLocation BossGluhar { get; set; }
public TargetLocation? BossGluhar { get; set; }
[JsonPropertyName("bossKilla")]
public TargetLocation BossKilla { get; set; }
public TargetLocation? BossKilla { get; set; }
[JsonPropertyName("bossSanitar")]
public TargetLocation BossSanitar { get; set; }
public TargetLocation? BossSanitar { get; set; }
[JsonPropertyName("bossTagilla")]
public TargetLocation BossTagilla { get; set; }
public TargetLocation? BossTagilla { get; set; }
[JsonPropertyName("bossKnight")]
public TargetLocation BossKnight { get; set; }
public TargetLocation? BossKnight { get; set; }
[JsonPropertyName("bossZryachiy")]
public TargetLocation BossZryachiy { get; set; }
public TargetLocation? BossZryachiy { get; set; }
[JsonPropertyName("bossBoar")]
public TargetLocation BossBoar { get; set; }
public TargetLocation? BossBoar { get; set; }
[JsonPropertyName("bossBoarSniper")]
public TargetLocation BossBoarSniper { get; set; }
public TargetLocation? BossBoarSniper { get; set; }
}
public class TargetLocation