using System.Text.Json.Serialization;
using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
namespace SPTarkov.Server.Core.Models.Spt.Bots;
public record GenerateWeaponRequest
{
///
/// Weapon to add mods to / result that is returned
///
[JsonPropertyName("weapon")]
public List- ? Weapon { get; set; }
///
/// Pool of compatible mods to attach to weapon
///
[JsonPropertyName("modPool")]
public GlobalMods? ModPool { get; set; }
///
/// ParentId of weapon
///
[JsonPropertyName("weaponId")]
public string? WeaponId { get; set; }
///
/// Weapon which mods will be generated on
///
[JsonPropertyName("parentTemplate")]
public TemplateItem? ParentTemplate { get; set; }
///
/// Chance values mod will be added
///
[JsonPropertyName("modSpawnChances")]
public Dictionary? ModSpawnChances { get; set; }
///
/// Ammo tpl to use when generating magazines/cartridges
///
[JsonPropertyName("ammoTpl")]
public MongoId? AmmoTpl { get; set; }
///
/// Bot-specific properties
///
[JsonPropertyName("botData")]
public BotData? BotData { get; set; }
///
/// limits placed on certain mod types per gun
///
[JsonPropertyName("modLimits")]
public BotModLimits? ModLimits { get; set; }
///
/// Info related to the weapon being generated
///
[JsonPropertyName("weaponStats")]
public WeaponStats? WeaponStats { get; set; }
///
/// Array of item tpls the weapon does not support
///
[JsonPropertyName("conflictingItemTpls")]
public HashSet? ConflictingItemTpls { get; set; }
}
public record BotData
{
///
/// Role of bot weapon is generated for
///
[JsonPropertyName("role")]
public string? Role { get; set; }
///
/// Level of the bot weapon is being generated for
///
[JsonPropertyName("level")]
public int? Level { get; set; }
///
/// role of bot when accessing bot.json equipment config settings
///
[JsonPropertyName("equipmentRole")]
public string? EquipmentRole { get; set; }
}
public record WeaponStats
{
[JsonPropertyName("hasOptic")]
public bool? HasOptic { get; set; }
[JsonPropertyName("hasFrontIronSight")]
public bool? HasFrontIronSight { get; set; }
[JsonPropertyName("hasRearIronSight")]
public bool? HasRearIronSight { get; set; }
}
public record BotModLimits
{
[JsonPropertyName("scope")]
public ItemCount? Scope { get; set; }
[JsonPropertyName("scopeMax")]
public int? ScopeMax { get; set; }
[JsonPropertyName("scopeBaseTypes")]
public List? ScopeBaseTypes { get; set; }
[JsonPropertyName("flashlightLaser")]
public ItemCount? FlashlightLaser { get; set; }
[JsonPropertyName("flashlightLaserMax")]
public int? FlashlightLaserMax { get; set; }
[JsonPropertyName("flashlightLaserBaseTypes")]
public List? FlashlightLaserBaseTypes { get; set; }
}
public record ItemCount
{
[JsonPropertyName("count")]
public int? Count { get; set; }
}