using System.Collections.ObjectModel;
namespace GsConfigTool.Models;
public class ArkServerSettings
{
// ── Session ──────────────────────────────────────────────────────────
public string ServerName { get; set; } = "My ARK Server";
public string ServerPassword { get; set; } = "";
public string AdminPassword { get; set; } = "adminpassword";
public int MaxPlayers { get; set; } = 70;
public int QueryPort { get; set; } = 27015;
public int GamePort { get; set; } = 7777;
public string Map { get; set; } = "TheIsland";
public string ActiveMods { get; set; } = "";
// ── Server Mode ───────────────────────────────────────────────────────
public bool PvE { get; set; } = false;
public bool ServerHardcore { get; set; } = false;
public bool CrosshairEnabled { get; set; } = true;
public bool MapPlayerLocation { get; set; } = true;
public bool EnableBattleEye { get; set; } = true;
public bool AllowThirdPersonPlayer { get; set; } = true;
public bool ShowMapPlayerLocation { get; set; } = true;
public bool PreventOfflinePvP { get; set; } = false;
public bool PreventTribeAlliances { get; set; } = false;
public float KickIdlePlayersPeriod { get; set; } = 3600.0f;
// ── XP & Rates ────────────────────────────────────────────────────────
public float XPMultiplier { get; set; } = 1.0f;
public float TamingSpeedMultiplier { get; set; } = 1.0f;
public float HarvestAmountMultiplier { get; set; } = 1.0f;
public float HarvestHealthMultiplier { get; set; } = 1.0f;
public float ResourcesRespawnPeriodMultiplier { get; set; } = 1.0f;
public float DayCycleSpeedScale { get; set; } = 1.0f;
public float DayTimeSpeedScale { get; set; } = 1.0f;
public float NightTimeSpeedScale { get; set; } = 1.0f;
public float DifficultyOffset { get; set; } = 0.2f;
public float OverrideOfficialDifficulty { get; set; } = 5.0f;
// ── Breeding ──────────────────────────────────────────────────────────
public float MatingIntervalMultiplier { get; set; } = 1.0f;
public float MatingSpeedMultiplier { get; set; } = 1.0f;
public float EggHatchSpeedMultiplier { get; set; } = 1.0f;
public float BabyMatureSpeedMultiplier { get; set; } = 1.0f;
public float BabyFoodConsumptionSpeedMultiplier { get; set; } = 1.0f;
public float BabyCuddleIntervalMultiplier { get; set; } = 1.0f;
public float BabyImprintAmountMultiplier { get; set; } = 1.0f;
public float BabyImprintingStatScaleMultiplier { get; set; } = 1.0f;
public float LayEggIntervalMultiplier { get; set; } = 1.0f;
// ── Player Stats ──────────────────────────────────────────────────────
public float PlayerDamageMultiplier { get; set; } = 1.0f;
public float PlayerResistanceMultiplier { get; set; } = 1.0f;
public float PlayerWaterDrainMultiplier { get; set; } = 1.0f;
public float PlayerFoodDrainMultiplier { get; set; } = 1.0f;
public float PlayerStaminaDrainMultiplier { get; set; } = 1.0f;
public float PlayerHealthRecoveryMultiplier { get; set; } = 1.0f;
public float PlayerHarvestingDamageMultiplier { get; set; } = 1.0f;
public float PlayerTurretDamageMultiplier { get; set; } = 1.0f;
public int OverrideMaxExperiencePointsPlayer { get; set; } = 0;
// ── Dino Stats ────────────────────────────────────────────────────────
public float DinoDamageMultiplier { get; set; } = 1.0f;
public float DinoResistanceMultiplier { get; set; } = 1.0f;
public float TamedDinoDamageMultiplier { get; set; } = 1.0f;
public float TamedDinoResistanceMultiplier { get; set; } = 1.0f;
public float DinoHarvestingDamageMultiplier { get; set; } = 1.0f;
public float DinoTurretDamageMultiplier { get; set; } = 1.0f;
public int MaxTamedDinos { get; set; } = 5000;
public int MaxPersonalTamedDinos { get; set; } = 500;
public int OverrideMaxExperiencePointsDino { get; set; } = 0;
// ── Structures ────────────────────────────────────────────────────────
public bool DisableStructureDecayPvE { get; set; } = false;
public float StructureResistanceMultiplier { get; set; } = 1.0f;
public float StructureDamageRepairCooldown { get; set; } = 180.0f;
public float PerPlatformMaxStructuresMultiplier { get; set; } = 1.0f;
public bool AllowFlyerCarryPvE { get; set; } = false;
// ── Tribe ─────────────────────────────────────────────────────────────
public int MaxNumberOfPlayersInTribe { get; set; } = 0;
public int MaxAlliancesPerTribe { get; set; } = 10;
public int MaxTribesPerAlliance { get; set; } = 10;
// ── Items & World ─────────────────────────────────────────────────────
public float GlobalSpoilingTimeMultiplier { get; set; } = 1.0f;
public float GlobalItemDecompositionTimeMultiplier { get; set; } = 1.0f;
public float GlobalCorpseDecompositionTimeMultiplier { get; set; } = 1.0f;
public float CropGrowthSpeedMultiplier { get; set; } = 1.0f;
public float FuelConsumptionIntervalMultiplier { get; set; } = 1.0f;
public float CustomRecipeEffectivenessMultiplier { get; set; } = 1.0f;
public float CustomRecipeSkillMultiplier { get; set; } = 1.0f;
public float PassiveTameFoodConsumptionMultiplier { get; set; } = 1.0f;
// ── Loot / Engrams / Creatures ────────────────────────────────────────
public List<LootDropOverride> LootDropOverrides { get; set; } = new();
public List<EngramOverride> EngramOverrides { get; set; } = new();
public List<CreatureMultiplier> CreatureMultipliers { get; set; } = new();
public bool UnlockAllEngrams { get; set; } = false;
// ── PerLevelStats ─────────────────────────────────────────────────────
public PerLevelStats PerLevelStats { get; set; } = new();
public bool UseCustomPerLevelStats { get; set; } = false;
// ── Stack Sizes ───────────────────────────────────────────────────────
public List<StackSizeOverride> StackSizeOverrides { get; set; } = new();
// ── Harvest ───────────────────────────────────────────────────────────
public List<HarvestMultiplier> HarvestMultipliers { get; set; } = new();
// ── Spawn Overrides ───────────────────────────────────────────────────
public List<SpawnOverride> SpawnOverrides { get; set; } = new();
// ── Cluster ───────────────────────────────────────────────────────────
public ArkClusterSettings Cluster { get; set; } = new();
// ── RCON ──────────────────────────────────────────────────────────────
public ArkRCONSettings RCON { get; set; } = new();
}