using GsConfigTool.Models;
using System.Globalization;
using System.Text;
namespace GsConfigTool.Services;
public static class PalworldConfigGeneratorService
{
private static string F(float val) => val.ToString("0.000000", CultureInfo.InvariantCulture);
private static string B(bool val) => val ? "True" : "False";
public static string Generate(PalworldServerSettings s)
{
var sb = new StringBuilder();
sb.AppendLine("[/Script/Pal.PalGameWorldSettings]");
sb.Append("OptionSettings=(");
var pairs = new List<string>
{
$"Difficulty={s.Difficulty}",
$"DayTimeSpeedRate={F(s.DayTimeSpeedRate)}",
$"NightTimeSpeedRate={F(s.NightTimeSpeedRate)}",
$"ExpRate={F(s.ExpRate)}",
$"PalCaptureRate={F(s.PalCaptureRate)}",
$"PalSpawnNumRate={F(s.PalSpawnNumRate)}",
$"PalDamageRateAttack={F(s.PalDamageRateAttack)}",
$"PalDamageRateDefense={F(s.PalDamageRateDefense)}",
$"PlayerDamageRateAttack={F(s.PlayerDamageRateAttack)}",
$"PlayerDamageRateDefense={F(s.PlayerDamageRateDefense)}",
$"PlayerStomachDecreaseRate={F(s.PlayerStomachDecreaseRate)}",
$"PlayerStaminaDecreaseRate={F(s.PlayerStaminaDecreaseRate)}",
$"PlayerAutoHPRegeneRate={F(s.PlayerAutoHPRegeneRate)}",
$"PlayerAutoHpRegeneRateInSleep={F(s.PlayerAutoHpRegeneRateInSleep)}",
$"PalStomachDecreaseRate={F(s.PalStomachDecreaseRate)}",
$"PalStaminaDecreaseRate={F(s.PalStaminaDecreaseRate)}",
$"PalAutoHPRegeneRate={F(s.PalAutoHPRegeneRate)}",
$"PalAutoHpRegeneRateInSleep={F(s.PalAutoHpRegeneRateInSleep)}",
$"BuildObjectDamageRate={F(s.BuildObjectDamageRate)}",
$"BuildObjectDeteriorationDamageRate={F(s.BuildObjectDeteriorationDamageRate)}",
$"CollectionDropRate={F(s.CollectionDropRate)}",
$"CollectionObjectHpRate={F(s.CollectionObjectHpRate)}",
$"CollectionObjectRespawnSpeedRate={F(s.CollectionObjectRespawnSpeedRate)}",
$"EnemyDropItemRate={F(s.EnemyDropItemRate)}",
$"DeathPenalty={s.DeathPenalty}",
$"bEnablePlayerToPlayerDamage={B(s.bEnablePlayerToPlayerDamage)}",
$"bEnableFriendlyFire={B(s.bEnableFriendlyFire)}",
$"bEnableInvaderEnemy={B(s.bEnableInvaderEnemy)}",
$"bActiveUNKO={B(s.bActiveUNKO)}",
$"bEnableAimAssistPad={B(s.bEnableAimAssistPad)}",
$"bEnableAimAssistKeyboard={B(s.bEnableAimAssistKeyboard)}",
$"DropItemMaxNum={s.DropItemMaxNum}",
$"DropItemMaxNum_UNKO=100",
$"BaseCampMaxNum={s.BaseCampMaxNum}",
$"BaseCampWorkerMaxNum={s.BaseCampWorkerMaxNum}",
$"DropItemAliveForPlayerTime={F(s.DropItemAliveForPlayerTime)}",
$"bIsMultiplay={B(s.ServerPlayerMaxNum > 1)}",
$"bIsPvP={B(s.bIsPvP)}",
$"bCanPickupOtherGuildDeathPenaltyDrop={B(s.bCanPickupOtherGuildDeathPenaltyDrop)}",
$"bEnableNonLoginPenalty={B(s.bEnableNonLoginPenalty)}",
$"bEnableFastTravel={B(s.bEnableFastTravel)}",
$"bIsStartLocationSelectByMap={B(s.bIsStartLocationSelectByMap)}",
$"bExistPlayerAfterLogout={B(s.bExistPlayerAfterLogout)}",
$"bEnableDefenseOtherGuildPlayer={B(s.bEnableDefenseOtherGuildPlayer)}",
$"CoopPlayerMaxNum={s.CoopPlayerMaxNum}",
$"ServerPlayerMaxNum={s.ServerPlayerMaxNum}",
$"ServerName=\"{s.ServerName}\"",
$"ServerDescription=\"{s.ServerDescription}\"",
$"AdminPassword=\"{s.AdminPassword}\"",
$"ServerPassword=\"{s.ServerPassword}\"",
$"PublicPort={s.PublicPort}",
$"PublicIP=\"{s.PublicIP}\"",
$"RCONEnabled={B(s.RCONEnabled)}",
$"RCONPort={s.RCONPort}",
$"Region=\"{s.Region}\"",
$"bUseAuth={B(s.bUseAuth)}",
$"BanListURL=\"{s.BanListURL}\""
};
sb.Append(string.Join(",", pairs));
sb.AppendLine(")");
return sb.ToString();
}
}