From 6da87d28297ee7b871b3a9bd3023828807b8c42a Mon Sep 17 00:00:00 2001 From: Xstar97TheNoob <9399967+xstar97@users.noreply.github.com> Date: Thu, 1 Feb 2024 11:25:06 -0500 Subject: [PATCH] feat(palworld) add rcon sidecar to palworld, docs, and 100 percent config converage. (#17761) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Description** - Add a sidecar rcon to palworld. - docs and notes - about 100% config coverage for the ini file. ⚒️ Fixes # **⚙️ Type of change** - [X] ⚙️ Feature/App addition - [ ] 🪛 Bugfix - [ ] ⚠️ Breaking change (fix or feature that would cause existing functionality to not work as expected) - [X] 🔃 Refactor of current code **🧪 How Has This Been Tested?** **📃 Notes:** **✔️ Checklist:** - [X] ⚖️ My code follows the style guidelines of this project - [X] 👀 I have performed a self-review of my own code - [ ] #️⃣ I have commented my code, particularly in hard-to-understand areas - [ ] 📄 I have made corresponding changes to the documentation - [ ] ⚠️ My changes generate no new warnings - [ ] 🧪 I have added tests to this description that prove my fix is effective or that my feature works - [X] ⬆️ I increased versions for any altered app according to semantic versioning **➕ App addition** If this PR is an app addition please make sure you have done the following. - [ ] 🖼️ I have added an icon in the Chart's root directory called `icon.png` --- _Please don't blindly check all the boxes. Read them and only check those that apply. Those checkboxes are there for the reviewer to see what is this all about and the status of this PR with a quick glance._ --- charts/incubator/palworld/Chart.yaml | 2 +- .../palworld/docs/installation_notes.md | 76 ++++ charts/incubator/palworld/docs/rcon_notes.md | 38 ++ charts/incubator/palworld/docs/validation.md | 19 + charts/incubator/palworld/questions.yaml | 401 ++++++++++++------ charts/incubator/palworld/values.yaml | 230 +++++++--- 6 files changed, 566 insertions(+), 200 deletions(-) create mode 100644 charts/incubator/palworld/docs/installation_notes.md create mode 100644 charts/incubator/palworld/docs/rcon_notes.md create mode 100644 charts/incubator/palworld/docs/validation.md diff --git a/charts/incubator/palworld/Chart.yaml b/charts/incubator/palworld/Chart.yaml index 132758dd7d4..c13c368da96 100644 --- a/charts/incubator/palworld/Chart.yaml +++ b/charts/incubator/palworld/Chart.yaml @@ -34,4 +34,4 @@ sources: - https://github.com/truecharts/charts/tree/master/charts/incubator/palworld - https://ghcr.io/ich777/steamcmd type: application -version: 0.1.1 +version: 0.1.2 diff --git a/charts/incubator/palworld/docs/installation_notes.md b/charts/incubator/palworld/docs/installation_notes.md new file mode 100644 index 00000000000..f22b87ba9b8 --- /dev/null +++ b/charts/incubator/palworld/docs/installation_notes.md @@ -0,0 +1,76 @@ +--- +title: PalWorld Installation Notes +--- + +::: note + +All app configuration defined in the GUI will take precedence over ANY manual configuration changed via the ini file. + +::: + +## Default Values + +| KEY | VALUE | +|---------------------------------------|------------------------| +| Difficulty | None | +| DayTimeSpeedRate | 1.000000 | +| NightTimeSpeedRate | 1.000000 | +| ExpRate | 1.000000 | +| PalCaptureRate | 1.000000 | +| PalSpawnNumRate | 1.000000 | +| PalDamageRateAttack | 1.000000 | +| PalDamageRateDefense | 1.000000 | +| PlayerDamageRateAttack | 1.000000 | +| PlayerDamageRateDefense | 1.000000 | +| PlayerStomachDecreaceRate | 1.000000 | +| PlayerStaminaDecreaceRate | 1.000000 | +| PlayerAutoHPRegeneRate | 1.000000 | +| PlayerAutoHpRegeneRateInSleep | 1.000000 | +| PalStomachDecreaceRate | 1.000000 | +| PalStaminaDecreaceRate | 1.000000 | +| PalAutoHPRegeneRate | 1.000000 | +| PalAutoHpRegeneRateInSleep | 1.000000 | +| BuildObjectDamageRate | 1.000000 | +| BuildObjectDeteriorationDamageRate | 1.000000 | +| CollectionDropRate | 1.000000 | +| CollectionObjectHpRate | 1.000000 | +| CollectionObjectRespawnSpeedRate | 1.000000 | +| EnemyDropItemRate | 1.000000 | +| DeathPenalty | All | +| bEnablePlayerToPlayerDamage | False | +| bEnableFriendlyFire | False | +| bEnableInvaderEnemy | True | +| bActiveUNKO | False | +| bEnableAimAssistPad | True | +| bEnableAimAssistKeyboard | False | +| DropItemMaxNum | 3000 | +| DropItemMaxNum_UNKO | 100 | +| BaseCampMaxNum | 128 | +| BaseCampWorkerMaxNum | 15 | +| DropItemAliveMaxHours | 1.000000 | +| bAutoResetGuildNoOnlinePlayers | False | +| AutoResetGuildTimeNoOnlinePlayers | 72.000000 | +| GuildPlayerMaxNum | 20 | +| PalEggDefaultHatchingTime | 72.000000 | +| WorkSpeedRate | 1.000000 | +| bIsMultiplay | False | +| bIsPvP | False | +| bCanPickupOtherGuildDeathPenaltyDrop | False | +| bEnableNonLoginPenalty | True | +| bEnableFastTravel | True | +| bIsStartLocationSelectByMap | True | +| bExistPlayerAfterLogout | False | +| bEnableDefenseOtherGuildPlayer | False | +| CoopPlayerMaxNum | 4 | +| ServerPlayerMaxNum | 32 | +| ServerName | "Default Palworld Server" | +| ServerDescription | "" | +| AdminPassword | "" | +| ServerPassword | "" | +| PublicPort | 8211 | +| PublicIP | "" | +| RCONEnabled | False | +| RCONPort | 25575 | +| Region | "" | +| bUseAuth | True | +| BanListURL | "https://api.palworldgame.com/api/banlist.txt" | diff --git a/charts/incubator/palworld/docs/rcon_notes.md b/charts/incubator/palworld/docs/rcon_notes.md new file mode 100644 index 00000000000..6ccd0e60898 --- /dev/null +++ b/charts/incubator/palworld/docs/rcon_notes.md @@ -0,0 +1,38 @@ +--- +title: PalWorld RCON Notes +--- + +Shell into the app from the web gui or use heavyscript and select the RCON container; the following commands can be used. + +::: note + +To use the same commands while in game; +type in chat: + +/AdminPassword PASSWORD + +then run the commands in chat + +ex: /Info + +::: + +## RCON Commands + +| Command | Description | +|--------------------------------------|-----------------------------------------------------------------------------------------------------------| +| /Shutdown {Seconds} {MessageText} | Gracefully shuts down server with an optional timer and/or message to notify players in your server. | +| /DoExit | Forcefully shuts down the server immediately. It is not recommended to use this option | +| /Broadcast {MessageText} | Broadcasts a message to all players in the server. | +| /KickPlayer {PlayerUID or SteamID} | Kicks player from the server. Useful for getting a player's attention with moderation. | +| /BanPlayer {PlayerUID or SteamID} | Bans player from the server. The Player will not be able to rejoin the server until they are unbanned. | +| /ShowPlayers | Shows information on all connected players. | +| /Info | Shows server information. | +| /Save | Save the world data to disk. | + +## In-Game Only Commands + +| Command | Description | +|--------------------------------------|-----------------------------------------------------------------------------------------------------------| +| /TeleportToPlayer {PlayerUID or SteamID} | Immediately teleport to the target player. | +| /TeleportToMe {PlayerUID or SteamID} | Immediately teleports target player to you. | diff --git a/charts/incubator/palworld/docs/validation.md b/charts/incubator/palworld/docs/validation.md new file mode 100644 index 00000000000..721aad4db84 --- /dev/null +++ b/charts/incubator/palworld/docs/validation.md @@ -0,0 +1,19 @@ +--- +title: Input Validation +--- + +**`floats`** +Accepted formats are: + +- `1.0000` +- `10.0000` +- `100.0000` +- `1000.0000` +- etc + +Regex used to match this: `^\d{1,}\.[0-9]{6}$` +You can try live [here](https://regex101.com/r/BTJv6n/1) + +--- + +_If you find a field that you think it needs validation, please open an issue on github_ diff --git a/charts/incubator/palworld/questions.yaml b/charts/incubator/palworld/questions.yaml index 8155788f2d8..d8496e26450 100644 --- a/charts/incubator/palworld/questions.yaml +++ b/charts/incubator/palworld/questions.yaml @@ -72,7 +72,7 @@ questions: label: Use Auth schema: type: boolean - private: true + default: true - variable: admin_password label: Admin Server Password description: Optionally set a password for the admin (this field accepts no spaces) @@ -87,16 +87,180 @@ questions: type: string private: true default: "" - - variable: difficulty - label: Server Difficulty + - variable: auto_reset_guild_time_no_online_players + label: Auto Reset Guid Time No Online Players schema: type: string - default: "None" + default: "72.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: ban_list_url + label: Ban List Url + schema: + type: string + default: "https://api.palworldgame.com/api/banlist.txt" + - variable: base_camp_max + label: Base Camp Max + schema: + type: int + default: 128 + min: 1 + - variable: base_camp_worker_max + label: Base Camp Worker Max + schema: + type: int + default: 15 + min: 1 + - variable: build_object_damage_rate + label: Build Object Damage Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: build_object_deterioration_damage_rate + label: Build Object Deterioration Damage Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: can_pickup_other_guild_death_penalty_drop + label: Can Pickup Other Guild Death Penalty Drop + schema: + type: boolean + default: false + - variable: collection_drop_rate + label: Collection Drop Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: collection_object_hp_rate + label: Collection Object HP Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: collection_object_respawn_speed_rate + label: Collection Object Respawn Speed Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: day_time_speed_rate + label: Day Time Speed Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' - variable: death_penalty label: Server Death Penalty schema: type: string default: "ALL" + - variable: difficulty + label: Server Difficulty + schema: + type: string + default: "None" + - variable: drop_item_alive_max_hours + label: Drop Item Alive Max Hours + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: drop_item_max + label: Drop Item Max + schema: + type: int + default: 3000 + min: 1 + - variable: drop_item_max_unko + label: Drop Item Max Unko + schema: + type: int + default: 100 + min: 1 + - variable: enable_aim_assist_kb + label: Enable Aim Assist KeyBoard + schema: + type: boolean + default: false + - variable: enable_aim_assist_pad + label: Enable Aim Assist Pad + schema: + type: boolean + default: false + - variable: enable_defense_other_guild_player + label: Enable Defense Other Guild Player + schema: + type: boolean + default: true + - variable: enable_fast_travel + label: Enable Fast Travel + schema: + type: boolean + default: true + - variable: enable_friendly_fire + label: Enable Friendly Fire + schema: + type: boolean + default: false + - variable: enable_invader_enemy + label: Enable Invader Enemy + schema: + type: boolean + default: true + - variable: active_unko + label: Active Unko + schema: + type: boolean + default: false + - variable: enable_non_login_penalty + label: Enable Non Login Penalty + schema: + type: boolean + default: true + - variable: enable_pvp_damage + label: Enable PVP Damage + schema: + type: boolean + default: false + - variable: exist_players_after_logout + label: Exist Players After LogOut + schema: + type: boolean + default: false + - variable: enemy_drop_item_rate + label: Enemy Drop Item Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: exp_rate + label: Experience Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: guild_auto_reset_no_online_players + label: Guild Auto Reset No Online Players + schema: + type: boolean + default: false + - variable: is_multiplay + label: Is Multiplay + schema: + type: boolean + default: false + - variable: is_pvp + label: Is PVP + schema: + type: boolean + default: false + - variable: is_start_location_select_by_map + label: Is Start Location Select By Map + schema: + type: boolean + default: true - variable: max_players label: Max Players schema: @@ -114,151 +278,125 @@ questions: type: int default: 20 min: 1 - - variable: drop_item_max - label: Drop Item Max + - variable: name + label: Server Name + description: The name of your server. schema: - type: int - default: 3000 - min: 1 - - variable: drop_item_max_unko - label: Drop Item Max Unko + type: string + default: "TrueCharts Palworld Server" + - variable: night_time_speed_rate + label: Night Time Speed Rate schema: - type: int - default: 100 - min: 1 - - variable: base_camp_max - label: Base Camp Max + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_auto_hp_regene_rate + label: Pal Auto HP Regene Rate schema: - type: int - default: 128 - min: 1 - - variable: base_camp_worker_max - label: Base Camp Worker Max + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_auto_hp_regene_rate_in_sleep + label: Pal Auto HP Regene Rate in Sleep schema: - type: int - default: 15 - min: 1 - - variable: enable_pvp_damage - label: Enable PVP Damage + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_capture_rate + label: Pal Capture Rate schema: - type: boolean - default: false - - variable: enable_friendly_fire - label: Enable Friendly Fire + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_damage_rate_attack + label: Pal Damage Rate Attack schema: - type: boolean - default: false - - variable: enable_invader_enemy - label: Enable Invader Enemy + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_damage_rate_defense + label: Pal Damage Rate Defense schema: - type: boolean - default: true - - variable: enable_defense_other_guild_player - label: Enable Defense Other Guild Player - schema: - type: boolean - default: true - - variable: enable_non_login_penalty - label: Enable Non Login Penalty - schema: - type: boolean - default: true - - variable: enable_aim_assist_pad - label: Enable Aim Assist Pad - schema: - type: boolean - default: false - - variable: enable_aim_assist_kb - label: Enable Aim Assist KeyBoard - schema: - type: boolean - default: false - - variable: enable_fast_travel - label: Enable Fast Travel - schema: - type: boolean - default: true - - variable: is_multiplay - label: Is Multiplay - schema: - type: boolean - default: false - - variable: is_pvp - label: Is PVP - schema: - type: boolean - default: false - - variable: is_start_location_select_by_map - label: Is Start Location Select By Map - schema: - type: boolean - default: true - - variable: active_unko - label: Active Unko - schema: - type: boolean - default: false - - variable: guild_auto_reset_no_online_players - label: Guild Auto Reset No Online Players - schema: - type: boolean - default: false - - variable: auto_reset_guild_time_no_online_players - label: Auto Reset Guid Time No Online Players + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_egg_default_hatching_time + label: Pal Egg Default Hatching Time schema: type: string default: "72.000000" - - variable: can_pickup_other_guild_death_penalty_drop - label: Can Pickup Other Guild Death Penalty Drop + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_spawn_num_rate + label: Pal Spawn Number Rate schema: - type: boolean - default: false - - variable: exist_players_after_logout - label: Exist Players After LogOut + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_stamina_decreace_rate + label: Pal Stamina Decreace Rate schema: - type: boolean - default: false + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: pal_stomach_decreace_rate + label: Pal Stomach Decreace Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: player_auto_hp_regene_rate + label: Player Auto HP Regene Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: player_auto_hp_regene_rate_in_sleep + label: Player Auto HP Regene Rate in Sleep + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: player_damage_rate_attack + label: Player Damage Rate Attack + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: player_damage_rate_defense + label: Player Damage Rate Defense + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: player_stamina_decreace_rate + label: Player Stamina Decreace Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: player_stomach_decreace_rate + label: Player Stomach Decreace Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' + - variable: region + label: Region + schema: + type: string + default: "" + - variable: work_speed_rate + label: Work Speed Rate + schema: + type: string + default: "1.000000" + valid_chars: '^\d{1,}\.[0-9]{6}$' - variable: update_public_ip label: Update Public IP description: Will check if the Public IP is still valid. schema: type: boolean default: false - - variable: ban_list_url - label: Ban List Url - schema: - type: string - default: "https://api.palworldgame.com/api/banlist.txt" - - variable: params - label: Game Params - schema: - type: list - default: - - EpicApp=PalServer - required: true - items: - - variable: param - label: Param - schema: - type: string - required: true - default: "" - - variable: params_extra - label: Game Params Extra - schema: - type: list - default: - - -useperfthreads - - -NoAsyncLoadingThread - - -UseMultithreadForDS - required: true - items: - - variable: extra_param - label: Extra Param - schema: - type: string - required: true - default: "" - variable: backup label: Backup Configuration schema: @@ -348,7 +486,6 @@ questions: attrs: # Include{persistenceBasic} # Include{persistenceList} -# Include{ingressList} # Include{securityContextRoot} - variable: runAsUser label: "runAsUser" diff --git a/charts/incubator/palworld/values.yaml b/charts/incubator/palworld/values.yaml index b3a6cf19e35..eac8399b849 100644 --- a/charts/incubator/palworld/values.yaml +++ b/charts/incubator/palworld/values.yaml @@ -2,6 +2,10 @@ image: repository: ghcr.io/ich777/steamcmd pullPolicy: IfNotPresent tag: palworld@sha256:c7ed87dfb13890f340d663ca0a97acb6a8b83a40ab81a9c94c8675cee03af325 +rconImage: + repository: outdead/rcon + pullPolicy: IfNotPresent + tag: latest@sha256:8bf03935771ae6b44449eb8e74e1f4d249ead591e9c1e4e43539d33be1a3ac67 securityContext: container: @@ -33,35 +37,62 @@ palworld: name: "TrueCharts Palworld Server" description: "A Palworld Server running in Kubernetes" use_auth: true - admin_password: "" password: "" - difficulty: "None" - death_penalty: "ALL" - max_players: 32 - max_players_coop: 4 - max_players_guild: 20 - drop_item_max: 3000 - drop_item_max_unko: 100 + admin_password: "" + auto_reset_guild_time_no_online_players: "72.000000" + ban_list_url: "https://api.palworldgame.com/api/banlist.txt" base_camp_max: 128 base_camp_worker_max: 15 - enable_pvp_damage: false + build_object_damage_rate: "1.000000" + build_object_deterioration_damage_rate: "1.000000" + can_pickup_other_guild_death_penalty_drop: false + collection_drop_rate: "1.000000" + collection_object_hp_rate: "1.000000" + collection_object_respawn_speed_rate: "1.000000" + day_time_speed_rate: "1.000000" + death_penalty: "ALL" + difficulty: "None" + drop_item_alive_max_hours: "1.000000" + drop_item_max: 3000 + drop_item_max_unko: 100 + enable_aim_assist_kb: false + enable_aim_assist_pad: false + enable_defense_other_guild_player: true + enable_fast_travel: true enable_friendly_fire: false enable_invader_enemy: true - enable_defense_other_guild_player: true + active_unko: false enable_non_login_penalty: true - enable_aim_assist_pad: false - enable_aim_assist_kb: false - enable_fast_travel: true + enable_pvp_damage: false + exist_players_after_logout: true + enemy_drop_item_rate: "1.000000" + exp_rate: "1.000000" + guild_auto_reset_no_online_players: false is_multiplay: false is_pvp: false is_start_location_select_by_map: true - active_unko: false - guild_auto_reset_no_online_players: false - auto_reset_guild_time_no_online_players: "72.000000" - can_pickup_other_guild_death_penalty_drop: false - exist_players_after_logout: true + max_players: 32 + max_players_coop: 4 + max_players_guild: 20 + night_time_speed_rate: "1.000000" + pal_auto_hp_regene_rate: "1.000000" + pal_auto_hp_regene_rate_in_sleep: "1.000000" + pal_capture_rate: "1.000000" + pal_damage_rate_attack: "1.000000" + pal_damage_rate_defense: "1.000000" + pal_egg_default_hatching_time: "72.000000" + pal_spawn_num_rate: "1.000000" + pal_stamina_decreace_rate: "1.000000" + pal_stomach_decreace_rate: "1.000000" + player_auto_hp_regene_rate: "1.000000" + player_auto_hp_regene_rate_in_sleep: "1.000000" + player_damage_rate_attack: "1.000000" + player_damage_rate_defense: "1.000000" + player_stamina_decreace_rate: "1.000000" + player_stomach_decreace_rate: "1.000000" + region: "" + work_speed_rate: "1.000000" update_public_ip: false - ban_list_url: "https://api.palworldgame.com/api/banlist.txt" params: - EpicApp=PalServer params_extra: @@ -88,70 +119,109 @@ workload: - | config={{ .Values.persistence.serverfiles.targetSelector.main.main.mountPath }}/Pal/Saved/Config/LinuxServer cfgFile=${config}/PalWorldSettings.ini + dfCfgFile={{ .Values.persistence.serverfiles.targetSelector.main.main.mountPath }}/DefaultPalWorldSettings.ini mkdir -p ${config} - if [ ! -f ${cfgFile} ]; then - echo "Config file not found, fetching..." - # Fetch the config file if it doesn't exist, just like the container does - wget -qO ${cfgFile} https://github.com/ich777/docker-steamcmd-server/raw/palworld/config/PalWorldSettings.ini + if [ ! -f "${cfgFile}" ]; then + if [ -f "${dfCfgFile}" ]; then + echo "Default config file found, copying as cfgFile..." + cp "${dfCfgFile}" "${cfgFile}" + else + echo "Config file not found, fetching..." + # Fetch the config file if it doesn't exist, just like the container does + wget -qO "${cfgFile}" https://github.com/ich777/docker-steamcmd-server/raw/palworld/config/PalWorldSettings.ini + fi fi set_ini_value() { - local key="${1}" - local value="${2}" + local key="${1}" + local value="${2}" + local quote_flag="${3:-}" - # Check if the value contains spaces or special characters - if echo "$value" | grep -q '[[:space:]]\|[^\w.-]'; then - # Add quotes around the value - value="\"$value\"" - fi + # Check if the key exists + if ! grep -q "${key}=" "${cfgFile}"; then + echo "Key '${key}' does not exist in '${cfgFile}'. Skipping..." + return + fi - echo "Setting ${key}..." - sed -i "s|\(${key}=\)[^,]*|\1${value}|g" "${cfgFile}" - echo "Set to $(grep -Po "(?<=${key}=)[^,]*" "${cfgFile}")" + if [ "$quote_flag" = "-q" ]; then + # Add quotes around the value + value="\"$value\"" + fi + + echo "Setting ${key}..." + sed -i "s|\(${key}=\)[^,]*|\1${value}|g" "${cfgFile}" + echo "Set to $(grep -Po "(?<=${key}=)[^,]*" "${cfgFile}")" } - set_ini_value "RCONEnabled" "True" - set_ini_value "RCONPort" "{{ .Values.service.rcon.ports.rcon.port }}" - set_ini_value "PublicPort" "{{ .Values.service.main.ports.main.port }}" + echo "the following options are updating...." - set_ini_value "ServerName" "{{ .Values.palworld.game.name }}" - set_ini_value "ServerDescription" "{{ .Values.palworld.game.description }}" - set_ini_value "Difficulty" "{{ .Values.palworld.game.difficulty }}" - set_ini_value "DeathPenalty" "{{ .Values.palworld.game.death_penalty }}" + set_ini_value "RCONEnabled" "True" -q + set_ini_value "RCONPort" "{{ .Values.service.rcon.ports.rcon.port }}" -q + set_ini_value "PublicPort" "{{ .Values.service.main.ports.main.port }}" -q - set_ini_value "ServerPlayerMaxNum" "{{ .Values.palworld.game.max_players }}" - set_ini_value "CoopPlayerMaxNum" "{{ .Values.palworld.game.max_players_coop }}" - set_ini_value "GuildPlayerMaxNum" "{{ .Values.palworld.game.max_players_guild }}" + set_ini_value "ServerPassword" "{{ .Values.palworld.game.password }}" -q + set_ini_value "AdminPassword" "{{ .Values.palworld.game.admin_password }}" -q - set_ini_value "DropItemMaxNum" "{{ .Values.palworld.game.max_players_guild }}" - set_ini_value "DropItemMaxNum_UNKO" "{{ .Values.palworld.game.drop_item_max_unko }}" + set_ini_value "ServerName" "{{ .Values.palworld.game.name }}" -q + set_ini_value "ServerDescription" "{{ .Values.palworld.game.description }}" -q + set_ini_value "Difficulty" "{{ .Values.palworld.game.difficulty }}" -q + set_ini_value "DeathPenalty" "{{ .Values.palworld.game.death_penalty }}" -q + set_ini_value "Region" "{{ .Values.palworld.game.region }}" -q + + set_ini_value "AutoResetGuildTimeNoOnlinePlayers" "{{ .Values.palworld.game.auto_reset_guild_time_no_online_players }}" set_ini_value "BaseCampMaxNum" "{{ .Values.palworld.game.base_camp_max }}" set_ini_value "BaseCampWorkerMaxNum" "{{ .Values.palworld.game.base_camp_worker_max }}" - - set_ini_value "bUseAuth" "{{ .Values.palworld.game.use_auth }}" - set_ini_value "bEnablePlayerToPlayerDamage" "{{ .Values.palworld.game.enable_pvp_damage }}" - set_ini_value "bEnableFriendlyFire" "{{ .Values.palworld.game.enable_friendly_fire }}" - set_ini_value "bEnableInvaderEnemy" "{{ .Values.palworld.game.enable_invader_enemy }}" - set_ini_value "bEnableAimAssistPad" "{{ .Values.palworld.game.enable_aim_assist_pad }}" - set_ini_value "bEnableAimAssistKeyboard" "{{ .Values.palworld.game.enable_aim_assist_kb }}" - set_ini_value "bEnableNonLoginPenalty" "{{ .Values.palworld.game.enable_non_login_penalty }}" - set_ini_value "bEnableFastTravel" "{{ .Values.palworld.game.enable_fast_travel }}" - set_ini_value "bEnableDefenseOtherGuildPlayer" "{{ .Values.palworld.game.enable_defense_other_guild_player }}" - set_ini_value "bIsMultiplay" "{{ .Values.palworld.game.is_multiplay }}" - set_ini_value "bIsStartLocationSelectByMap" "{{ .Values.palworld.game.is_start_location_select_by_map }}" - set_ini_value "bIsPvP" "{{ .Values.palworld.game.is_pvp }}" - set_ini_value "bExistPlayerAfterLogout" "{{ .Values.palworld.game.exist_players_after_logout }}" - set_ini_value "bActiveUNKO" "{{ .Values.palworld.game.active_unko }}" - set_ini_value "bAutoResetGuildNoOnlinePlayers" "{{ .Values.palworld.game.guild_auto_reset_no_online_players }}" - set_ini_value "AutoResetGuildTimeNoOnlinePlayers" "{{ .Values.palworld.game.auto_reset_guild_time_no_online_players }}" - set_ini_value "bCanPickupOtherGuildDeathPenaltyDrop" "{{ .Values.palworld.game.can_pickup_other_guild_death_penalty_drop }}" - set_ini_value "ServerPassword" "{{ .Values.palworld.game.password }}" - set_ini_value "AdminPassword" "{{ .Values.palworld.game.admin_password }}" - set_ini_value "BanListURL" "{{ .Values.palworld.game.ban_list_url }}" + set_ini_value "BanListURL" "{{ .Values.palworld.game.ban_list_url }}" -q + set_ini_value "BuildObjectDamageRate" "{{ .Values.palworld.game.build_object_damage_rate }}" + set_ini_value "BuildObjectDeteriorationDamageRate" "{{ .Values.palworld.game.build_object_deterioration_damage_rate }}" + set_ini_value "bCanPickupOtherGuildDeathPenaltyDrop" "{{ .Values.palworld.game.can_pickup_other_guild_death_penalty_drop }}" -q + set_ini_value "bUseAuth" "{{ .Values.palworld.game.use_auth }}" -q + set_ini_value "bEnablePlayerToPlayerDamage" "{{ .Values.palworld.game.enable_pvp_damage }}" -q + set_ini_value "bEnableFriendlyFire" "{{ .Values.palworld.game.enable_friendly_fire }}" -q + set_ini_value "bEnableInvaderEnemy" "{{ .Values.palworld.game.enable_invader_enemy }}" -q + set_ini_value "bEnableAimAssistPad" "{{ .Values.palworld.game.enable_aim_assist_pad }}" -q + set_ini_value "bEnableAimAssistKeyboard" "{{ .Values.palworld.game.enable_aim_assist_kb }}" -q + set_ini_value "bEnableNonLoginPenalty" "{{ .Values.palworld.game.enable_non_login_penalty }}" -q + set_ini_value "bEnableFastTravel" "{{ .Values.palworld.game.enable_fast_travel }}" -q + set_ini_value "bEnableDefenseOtherGuildPlayer" "{{ .Values.palworld.game.enable_defense_other_guild_player }}" -q + set_ini_value "bIsMultiplay" "{{ .Values.palworld.game.is_multiplay }}" -q + set_ini_value "bIsStartLocationSelectByMap" "{{ .Values.palworld.game.is_start_location_select_by_map }}" -q + set_ini_value "bIsPvP" "{{ .Values.palworld.game.is_pvp }}" -q + set_ini_value "bExistPlayerAfterLogout" "{{ .Values.palworld.game.exist_players_after_logout }}" -q + set_ini_value "bActiveUNKO" "{{ .Values.palworld.game.active_unko }}" -q + set_ini_value "bAutoResetGuildNoOnlinePlayers" "{{ .Values.palworld.game.guild_auto_reset_no_online_players }}" -q + set_ini_value "CollectionDropRate" "{{ .Values.palworld.game.collection_drop_rate }}" + set_ini_value "CollectionObjectHpRate" "{{ .Values.palworld.game.collection_object_hp_rate }}" + set_ini_value "CollectionObjectRespawnSpeedRate" "{{ .Values.palworld.game.collection_object_respawn_speed_rate }}" + set_ini_value "CoopPlayerMaxNum" "{{ .Values.palworld.game.max_players_coop }}" + set_ini_value "DayTimeSpeedRate" "{{ .Values.palworld.game.day_time_speed_rate }}" + set_ini_value "DropItemMaxNum" "{{ .Values.palworld.game.drop_item_max }}" + set_ini_value "DropItemMaxNum_UNKO" "{{ .Values.palworld.game.drop_item_max_unko }}" + set_ini_value "DropItemAliveMaxHours" "{{ .Values.palworld.game.drop_item_alive_max_hours }}" + set_ini_value "EnemyDropItemRate" "{{ .Values.palworld.game.enemy_drop_item_rate }}" + set_ini_value "GuildPlayerMaxNum" "{{ .Values.palworld.game.max_players_guild }}" + set_ini_value "NightTimeSpeedRate" "{{ .Values.palworld.game.night_time_speed_rate }}" + set_ini_value "PalCaptureRate" "{{ .Values.palworld.game.pal_capture_rate }}" + set_ini_value "PalEggDefaultHatchingTime" "{{ .Values.palworld.game.pal_egg_default_hatching_time }}" + set_ini_value "PalSpawnNumRate" "{{ .Values.palworld.game.pal_spawn_num_rate }}" + set_ini_value "PalDamageRateAttack" "{{ .Values.palworld.game.pal_damage_rate_attack }}" + set_ini_value "PalDamageRateDefense" "{{ .Values.palworld.game.pal_damage_rate_defense }}" + set_ini_value "PlayerDamageRateAttack" "{{ .Values.palworld.game.player_damage_rate_attack }}" + set_ini_value "PlayerDamageRateDefense" "{{ .Values.palworld.game.player_damage_rate_defense }}" + set_ini_value "PlayerStomachDecreaceRate" "{{ .Values.palworld.game.player_stomach_decreace_rate }}" + set_ini_value "PlayerStaminaDecreaceRate" "{{ .Values.palworld.game.player_stamina_decreace_rate }}" + set_ini_value "PlayerAutoHPRegeneRate" "{{ .Values.palworld.game.player_auto_hp_regene_rate }}" + set_ini_value "PlayerAutoHpRegeneRateInSleep" "{{ .Values.palworld.game.player_auto_hp_regene_rate_in_sleep }}" + set_ini_value "PalStomachDecreaceRate" "{{ .Values.palworld.game.pal_stomach_decreace_rate }}" + set_ini_value "PalStaminaDecreaceRate" "{{ .Values.palworld.game.pal_stamina_decreace_rate }}" + set_ini_value "PalAutoHPRegeneRate" "{{ .Values.palworld.game.pal_auto_hp_regene_rate }}" + set_ini_value "PalAutoHpRegeneRateInSleep" "{{ .Values.palworld.game.pal_auto_hp_regene_rate_in_sleep }}" + set_ini_value "ServerPlayerMaxNum" "{{ .Values.palworld.game.max_players }}" + set_ini_value "WorkSpeedRate" "{{ .Values.palworld.game.work_speed_rate }}" + set_ini_value "ExpRate" "{{ .Values.palworld.game.exp_rate }}" echo "Done!" - containers: main: probes: @@ -182,6 +252,32 @@ workload: BACKUP: "{{ .Values.palworld.backup.enabled }}" BACKUP_INTERVAL: "{{ .Values.palworld.backup.interval }}" BACKUP_TO_KEEP: "{{ .Values.palworld.backup.to_keep }}" + rcon: + enabled: true + type: Deployment + strategy: RollingUpdate + replicas: 1 + podSpec: + containers: + rcon: + primary: true + enabled: true + imageSelector: rconImage + tty: true + stdin: true + probes: + liveness: + enabled: false + readiness: + enabled: false + startup: + enabled: false + args: + - ./rcon + - -a + - '{{ printf "%v-rcon:%v" (include "tc.v1.common.lib.chart.names.fullname" $) .Values.service.rcon.ports.rcon.port }}' + - -p + - "{{ .Values.palworld.game.admin_password }}" persistence: steamcmd: