From 6eafbd5627893ac012558273e7f87ba592141479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palma?= Date: Sat, 27 Jan 2024 12:58:13 +0000 Subject: [PATCH 1/2] Added all the env vars to the docker file so they are detected automatically on portainer and other container managers; Added feature to choose between env vars for the server settings or using the file directly; Spellchecked the project; --- Dockerfile | 72 ++++++++++++++++++++++++++++++++++++++++--- README.md | 80 +++++++++++++++++++++++++++++------------------- servermanager.sh | 65 ++++++++++++++++++++++----------------- 3 files changed, 152 insertions(+), 65 deletions(-) diff --git a/Dockerfile b/Dockerfile index ca0e784..a74edc8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,23 +33,85 @@ VOLUME [ "/palworld" ] USER steam + ENV DEBIAN_FRONTEND=noninteractive \ PUID=0 \ PGID=0 \ + # Base settings TZ=Europe/Berlin \ ALWAYS_UPDATE_ON_START=true \ MULTITHREAD_ENABLED=true \ - COMMUNITY_SERVER=true \ + NETSERVERMAXTICKRATE=120 \ BACKUP_ENABLED=true \ BACKUP_CRON_EXPRESSION="0 * * * *" \ - NETSERVERMAXTICKRATE=120 \ + # Control settings file modifications + SETTINGS_MODE=auto \ + # Core server settings + COMMUNITY_SERVER=true \ MAX_PLAYERS=32 \ - SERVER_NAME=jammsen-docker-generated-###RANDOM### \ + SERVER_NAME="jammsen-docker-generated-###RANDOM###" \ SERVER_DESCRIPTION="Palworld-Dedicated-Server running in Docker by jammsen" \ ADMIN_PASSWORD=adminPasswordHere \ SERVER_PASSWORD=serverPasswordHere \ - PUBLIC_IP=10.0.0.1 \ + PUBLIC_IP= \ PUBLIC_PORT=8211 \ - RCON_ENABLED=true + RCON_ENABLED=true \ + RCON_PORT=25575 \ + # Game settings + DIFFICULTY=None \ + DAYTIME_SPEEDRATE=1.000000 \ + NIGHTTIME_SPEEDRATE=1.000000 \ + EXP_RATE=1.000000 \ + PAL_CAPTURE_RATE=1.000000 \ + PAL_SPAWN_NUM_RATE=1.000000 \ + PAL_DAMAGE_RATE_ATTACK=1.000000 \ + PAL_DAMAGE_RATE_DEFENSE=1.000000 \ + PLAYER_DAMAGE_RATE_ATTACK=1.000000 \ + PLAYER_DAMAGE_RATE_DEFENSE=1.000000 \ + PLAYER_STOMACH_DECREASE_RATE=1.000000 \ + PLAYER_STAMINA_DECREACE_RATE=1.000000 \ + PLAYER_AUTO_HP_REGENE_RATE=1.000000 \ + PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000 \ + PAL_STOMACH_DECREACE_RATE=1.000000 \ + PAL_STAMINA_DECREACE_RATE=1.000000 \ + PAL_AUTO_HP_REGENE_RATE=1.000000 \ + PAL_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000 \ + BUILD_OBJECT_DAMAGE_RATE=1.000000 \ + BUILD_OBJECT_DETERIORATION_DAMAGE_RATE=1.000000 \ + COLLECTION_DROP_RATE=1.000000 \ + COLLECTION_OBJECT_HP_RATE=1.000000 \ + COLLECTION_OBJECT_RESPAWN_SPEED_RATE=1.000000 \ + ENEMY_DROP_ITEM_RATE=1.000000 \ + DEATH_PENALTY=All \ + # Server settings + ENABLE_PLAYER_TO_PLAYER_DAMAGE=false \ + ENABLE_FRIENDLY_FIRE=false \ + ENABLE_INVADER_ENEMY=true \ + ACTIVE_UNKO=false \ + ENABLE_AIM_ASSIST_PAD=true \ + ENABLE_AIM_ASSIST_KEYBOARD=false \ + DROP_ITEM_MAX_NUM=3000 \ + DROP_ITEM_MAX_NUM_UNKO=100 \ + BASE_CAMP_MAX_NUM=128 \ + BASE_CAMP_WORKER_MAXNUM=15 \ + DROP_ITEM_ALIVE_MAX_HOURS=1.000000 \ + AUTO_RESET_GUILD_NO_ONLINE_PLAYERS=false \ + AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS=72.000000 \ + GUILD_PLAYER_MAX_NUM=20 \ + PAL_EGG_DEFAULT_HATCHING_TIME=72.000000 \ + WORK_SPEED_RATE=1.000000 \ + IS_MULTIPLAY=false \ + IS_PVP=false \ + CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP=false \ + ENABLE_NON_LOGIN_PENALTY=true \ + ENABLE_FAST_TRAVEL=true \ + IS_START_LOCATION_SELECT_BY_MAP=true \ + EXIST_PLAYER_AFTER_LOGOUT=false \ + ENABLE_DEFENSE_OTHER_GUILD_PLAYER=false \ + COOP_PLAYER_MAX_NUM=4 \ + REGION= \ + USEAUTH=true \ + BAN_LIST_URL="https://api.palworldgame.com/api/banlist.txt" + CMD ["/servermanager.sh"] diff --git a/README.md b/README.md index d5aa0d7..6a53022 100644 --- a/README.md +++ b/README.md @@ -11,22 +11,26 @@ ___ ## Overview -* [Do you need support for this Docker Image](#do-you-need-support-for-this-docker-image) -* [What you need to run this](#what-you-need-to-run-this) -* [Getting started](#getting-started) -* [Environment-Variables](#environment-variables) - * [Container-Settings](#container-settings) - * [TZ identifiers](#tz-identifiers) - * [Cron expression](#cron-expression) - * [Gameserver-Settings](#gameserver-settings) -* [Docker-Compose examples](#docker-compose-examples) - * [Standalone gameserver](#standalone-gameserver) - * [Gameserver with RCON](#gameserver-with-rcon) - * [Run RCON commands](#run-rcon-commands) - * [Usage with Portainer - Soon TM](#usage-with-portainer) -* [FAQ](#faq) -* [Planned features in the future](#planned-features-in-the-future) -* [Software used](#software-used) +- [Docker - Palworld Dedicated Server](#docker---palworld-dedicated-server) + - [Overview](#overview) + - [Do you need support for this Docker Image](#do-you-need-support-for-this-docker-image) + - [What you need to run this](#what-you-need-to-run-this) + - [Getting started](#getting-started) + - [Environment-Variables](#environment-variables) + - [Container-Settings](#container-settings) + - [TZ identifiers](#tz-identifiers) + - [Cron expression](#cron-expression) + - [Gameserver-Settings](#gameserver-settings) + - [Docker-Compose examples](#docker-compose-examples) + - [Standalone gameserver](#standalone-gameserver) + - [Gameserver with RCON](#gameserver-with-rcon) + - [Run RCON commands](#run-rcon-commands) + - [Usage with Portainer](#usage-with-portainer) + - [FAQ](#faq) + - [How can i look into the config of my Palworld container?](#how-can-i-look-into-the-config-of-my-palworld-container) + - [Im seeing S\_API errors in my logs when i start the container](#im-seeing-s_api-errors-in-my-logs-when-i-start-the-container) + - [Planned features in the future](#planned-features-in-the-future) + - [Software used](#software-used) ## Do you need support for this Docker Image @@ -37,8 +41,8 @@ ___ - If your issue is done, close it and please consider giving this repo and the [Docker-Hub repository](https://hub.docker.com/repository/docker/jammsen/palworld-dedicated-server) a star - I will Inactivity-Close any issue thats not been active for a week - What NOT to do? - - Dont re-use issues / Dont necro! - - You are most likely to chat/spam/harrass thoose participants who didnt agree to be part of your / a new problem and might be totally out of context! + - Don't re-use issues / Don't necro! + - You are most likely to chat/spam/harass those participants who didn't agree to be part of your / a new problem and might be totally out of context! - If this happens, i reserve the rights to lock the issue or delete the comments, you have been warned! ## What you need to run this @@ -60,7 +64,7 @@ ___ ### Container-Settings -| Variable | Description | Default value | Allowed value | +| Variable | Description | Default value | Allowed values | | ---------------------- | ------------------------------------------------------------------- | ------------------------------ | ------------------------------------- | | TZ | Timezone used for time stamping server backups | Europe/Berlin | See [TZ identifiers](#tz-identifiers) | | ALWAYS_UPDATE_ON_START | Updates the server on startup | true | false/true | @@ -85,7 +89,17 @@ Information-sources and credits to the following websites: * [Palworld Tech Guide](https://tech.palworldgame.com/optimize-game-balance) for the gameserver documentation * [PalworldSettingGenerator](https://dysoncheng.github.io/PalWorldSettingGenerator/setting.html) for variable descriptions -**Imporant:** Please note that all of this is subject to change. **The game is still in early access.** +**Important:** Please note that all of this is subject to change. **The game is still in early access.** + + > If you want to change the server settings via environment variables use the default value (`auto`) fot the environment variable `SETTINGS_MODE`, otherwise change it to `manual` and edit the config file directly. + +| Env Variable | Description | Default value | Allowed values | +| ---------------------- | ---------------------------------------------------------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| SETTINGS_MODE | Determines whether settings can be modified via environment variables or directly on the file. | `auto` | `auto` -> Settings are modified by env vars / `manual` -> settings are read-only and only changeable by editing the file directly | + + +To change a setting, you can set the environment variable to the value you want. If the environment variable is not set or is blank, the default value will be used. + | Variable | Game setting | Description | Default Value | Allowed Value | | ----------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------------- | @@ -96,10 +110,10 @@ Information-sources and credits to the following websites: | EXP_RATE | ExpRate | EXP rate | 1.000000 | Float | | PAL_CAPTURE_RATE | PalCaptureRate | Pal capture rate | 1.000000 | Float | | PAL_SPAWN_NUM_RATE | PalSpawnNumRate | Pal appearance rate | 1.000000 | Float | -| PAL_DAMAGE_RATE_ATTACK | PalDamageRateAttack | Damage from pals multipiler | 1.000000 | Float | -| PAL_DAMAGE_RATE_DEFENSE | PalDamageRateDefense | Damage to pals multipiler | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_ATTACK | PlayerDamageRateAttack | Damage from player multipiler | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_DEFENSE | PlayerDamageRateDefense | Damage to player multipiler | 1.000000 | Float | +| PAL_DAMAGE_RATE_ATTACK | PalDamageRateAttack | Damage from pals multiplier | 1.000000 | Float | +| PAL_DAMAGE_RATE_DEFENSE | PalDamageRateDefense | Damage to pals multiplier | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_ATTACK | PlayerDamageRateAttack | Damage from player multiplier | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_DEFENSE | PlayerDamageRateDefense | Damage to player multiplier | 1.000000 | Float | | PLAYER_STOMACH_DECREASE_RATE | PlayerStomachDecreaceRate | Player hunger depletion rate | 1.000000 | Float | | PLAYER_STAMINA_DECREACE_RATE | PlayerStaminaDecreaceRate | Player stamina reduction rate | 1.000000 | Float | | PLAYER_AUTO_HP_REGENE_RATE | PlayerAutoHPRegeneRate | Player auto HP regeneration rate | 1.000000 | Float | @@ -108,12 +122,12 @@ Information-sources and credits to the following websites: | PAL_STAMINA_DECREACE_RATE | PalStaminaDecreaceRate | Pal stamina reduction rate | 1.000000 | Float | | PAL_AUTO_HP_REGENE_RATE | PalAutoHPRegeneRate | Pal auto HP regeneration rate | 1.000000 | Float | | PAL_AUTO_HP_REGENE_RATE_IN_SLEEP | PalAutoHpRegeneRateInSleep | Pal sleep health regeneration rate (in Palbox) | 1.000000 | Float | -| BUILD_OBJECT_DAMAGE_RATE | BuildObjectDamageRate | Damage to structure multipiler | 1.000000 | Float | +| BUILD_OBJECT_DAMAGE_RATE | BuildObjectDamageRate | Damage to structure multiplier | 1.000000 | Float | | BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | PalAutoHpRegeneRateInSleep | Structure determination rate | 1.000000 | Float | -| COLLECTION_DROP_RATE | CollectionDropRate | Getherable items multipiler | 1.000000 | Float | -| COLLECTION_OBJECT_HP_RATE | CollectionObjectHpRate | Getherable objects HP multipiler | 1.000000 | Float | -| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | CollectionObjectRespawnSpeedRate | Getherable objects respawn interval | 1.000000 | Float | -| ENEMY_DROP_ITEM_RATE | EnemyDropItemRate | Dropped Items Multipiler | 1.000000 | Float | +| COLLECTION_DROP_RATE | CollectionDropRate | Gatherable items multiplier | 1.000000 | Float | +| COLLECTION_OBJECT_HP_RATE | CollectionObjectHpRate | Gatherable objects HP multiplier | 1.000000 | Float | +| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | CollectionObjectRespawnSpeedRate | Gatherable objects respawn interval | 1.000000 | Float | +| ENEMY_DROP_ITEM_RATE | EnemyDropItemRate | Dropped Items Multiplier | 1.000000 | Float | | DEATH_PENALTY | DeathPenalty | `None` : No lost
`Item` : Lost item without equipment
`ItemAndEquipment` : Lost item and equipment
`All`: Lost All item, equipment, pal(in inventory) | All | Enum | | ENABLE_PLAYER_TO_PLAYER_DAMAGE | bEnablePlayerToPlayerDamage | Allows players to cause damage to players | false | Boolean | | ENABLE_FRIENDLY_FIRE | bEnableFriendlyFire | Allow friendly fire | false | Boolean | @@ -130,7 +144,7 @@ Information-sources and credits to the following websites: | AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | AutoResetGuildTimeNoOnlinePlayers | Time to automatically reset guild when no players are online | 72.000000 | Float | | GUILD_PLAYER_MAX_NUM | GuildPlayerMaxNum | Max player of Guild | 20 | Integer | | PAL_EGG_DEFAULT_HATCHING_TIME | PalEggDefaultHatchingTime | Time(h) to incubate massive egg | 72.000000 | Float | -| WORK_SPEED_RATE | WorkSpeedRate | Work speed muliplier | 1.000000 | Float | +| WORK_SPEED_RATE | WorkSpeedRate | Work speed multiplier | 1.000000 | Float | | IS_MULTIPLAY | bIsMultiplay | Enable multiplayer | false | Boolean | | IS_PVP | bIsPvP | Enable PVP | false | Boolean | | CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | bCanPickupOtherGuildDeathPenaltyDrop | Allow players from other guilds to pick up death penalty items | false | Boolean | @@ -178,6 +192,7 @@ services: environment: - TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables" - ALWAYS_UPDATE_ON_START=true + - SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - MULTITHREAD_ENABLED=true - COMMUNITY_SERVER=true - BACKUP_ENABLED=true @@ -272,6 +287,7 @@ services: environment: - TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables" - ALWAYS_UPDATE_ON_START=true + - SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - MULTITHREAD_ENABLED=true - COMMUNITY_SERVER=true - BACKUP_ENABLED=true @@ -348,7 +364,7 @@ services: profiles: ['rcon'] ``` -*Note: The profiles defintion, prevents the container from starting with the server, this is on purpose, because of Docker-Compose's ability to run container over the CLI, after the start* +*Note: The profiles definition, prevents the container from starting with the server, this is on purpose, because of Docker-Compose's ability to run container over the CLI, after the start* #### Run RCON commands @@ -361,7 +377,7 @@ Welcome to Pal Server[v0.1.2.0] jammsen-docker-generated-20384 $ docker compose run --rm rcon save Complete Save ``` -**Imporant:** +**Important:** - Keep the `--rm` in the command line, or you will have many exited containers in your list. - All RCON-Commands can be research here: https://tech.palworldgame.com/server-commands diff --git a/servermanager.sh b/servermanager.sh index 2f20239..8b5f472 100755 --- a/servermanager.sh +++ b/servermanager.sh @@ -17,34 +17,8 @@ function updateServer() { /home/steam/steamcmd/steamcmd.sh +force_install_dir "$GAME_PATH" +login anonymous +app_update 2394010 validate +quit } -function startServer() { - # IF Bash extendion usaged: - # https://stackoverflow.com/a/13864829 - # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 - - echo ">>> Starting the gameserver" - cd $GAME_PATH - - echo ">>> Setting up Engine.ini ..." - config_file="${GAME_PATH}/Pal/Saved/Config/LinuxServer/Engine.ini" - pattern1="OnlineSubsystemUtils.IpNetDriver" - pattern2="^NetServerMaxTickRate=[0-9]*" - - if grep -qE "$pattern1" "$config_file"; then - echo "Found [/Script/OnlineSubsystemUtils.IpNetDriver] section" - else - echo "Found no [/Script/OnlineSubsystemUtils.IpNetDriver], adding it" - echo -e "\n[/Script/OnlineSubsystemUtils.IpNetDriver]" >> "$config_file" - fi - if grep -qE "$pattern2" "$config_file"; then - echo "Found NetServerMaxTickRate parameter, chaning it to $NETSERVERMAXTICKRATE" - sed -E -i "s/$pattern2/NetServerMaxTickRate=$NETSERVERMAXTICKRATE/" "$config_file" - else - echo "Found no NetServerMaxTickRate parameter, adding it to $NETSERVERMAXTICKRATE" - echo "NetServerMaxTickRate=$NETSERVERMAXTICKRATE" >> "$config_file" - fi - echo ">>> Finished setting up Engine.ini ..." - +function setupServerConfig( { + # setup the server config file echo ">>> Setting up PalWorldSettings.ini ..." echo "Checking if config exists" if [ ! -f ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini ]; then @@ -54,6 +28,9 @@ function startServer() { fi # Copy default-config, which comes with the server to gameserver-save location cp ${GAME_PATH}/DefaultPalWorldSettings.ini ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + else if [ "$SETTINGS_MODE" = "auto" ]; then + echo ">>> File PalWorldSettings.ini manually set by user..." + return fi if [[ ! -z ${DIFFICULTY+x} ]]; then @@ -317,6 +294,38 @@ function startServer() { fi echo ">>> Finished setting up PalWorldSettings.ini ..." +}) + +function startServer() { + # IF Bash extension used: + # https://stackoverflow.com/a/13864829 + # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 + + echo ">>> Starting the gameserver" + cd $GAME_PATH + + echo ">>> Setting up Engine.ini ..." + config_file="${GAME_PATH}/Pal/Saved/Config/LinuxServer/Engine.ini" + pattern1="OnlineSubsystemUtils.IpNetDriver" + pattern2="^NetServerMaxTickRate=[0-9]*" + + if grep -qE "$pattern1" "$config_file"; then + echo "Found [/Script/OnlineSubsystemUtils.IpNetDriver] section" + else + echo "Found no [/Script/OnlineSubsystemUtils.IpNetDriver], adding it" + echo -e "\n[/Script/OnlineSubsystemUtils.IpNetDriver]" >> "$config_file" + fi + if grep -qE "$pattern2" "$config_file"; then + echo "Found NetServerMaxTickRate parameter, changing it to $NETSERVERMAXTICKRATE" + sed -E -i "s/$pattern2/NetServerMaxTickRate=$NETSERVERMAXTICKRATE/" "$config_file" + else + echo "Found no NetServerMaxTickRate parameter, adding it to $NETSERVERMAXTICKRATE" + echo "NetServerMaxTickRate=$NETSERVERMAXTICKRATE" >> "$config_file" + fi + echo ">>> Finished setting up Engine.ini ..." + + setupServerConfig + START_OPTIONS="" if [[ -n $COMMUNITY_SERVER ]] && [[ $COMMUNITY_SERVER == "true" ]]; then START_OPTIONS="$START_OPTIONS EpicApp=PalServer" From 79df0a3dd23776e42f7c3754f2bd3c0f4b7246f0 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt <2270806+jammsen@users.noreply.github.com> Date: Sun, 28 Jan 2024 15:25:59 +0100 Subject: [PATCH 2/2] #96 - Final review and update code --- Dockerfile | 37 ++- README.md | 48 ++-- servermanager.sh | 602 ++++++++++++++++++++++++----------------------- 3 files changed, 352 insertions(+), 335 deletions(-) diff --git a/Dockerfile b/Dockerfile index a74edc8..80cbabd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,27 +37,17 @@ USER steam ENV DEBIAN_FRONTEND=noninteractive \ PUID=0 \ PGID=0 \ - # Base settings - TZ=Europe/Berlin \ + # Container setttings + TZ="Europe/Berlin" \ ALWAYS_UPDATE_ON_START=true \ MULTITHREAD_ENABLED=true \ - NETSERVERMAXTICKRATE=120 \ + COMMUNITY_SERVER=true \ BACKUP_ENABLED=true \ BACKUP_CRON_EXPRESSION="0 * * * *" \ - # Control settings file modifications - SETTINGS_MODE=auto \ - # Core server settings - COMMUNITY_SERVER=true \ - MAX_PLAYERS=32 \ - SERVER_NAME="jammsen-docker-generated-###RANDOM###" \ - SERVER_DESCRIPTION="Palworld-Dedicated-Server running in Docker by jammsen" \ - ADMIN_PASSWORD=adminPasswordHere \ - SERVER_PASSWORD=serverPasswordHere \ - PUBLIC_IP= \ - PUBLIC_PORT=8211 \ - RCON_ENABLED=true \ - RCON_PORT=25575 \ - # Game settings + STEAMCMD_VALIDATE_FILES=true \ + SERVER_SETTINGS_MODE=auto \ + # Server-setting + NETSERVERMAXTICKRATE=120 \ DIFFICULTY=None \ DAYTIME_SPEEDRATE=1.000000 \ NIGHTTIME_SPEEDRATE=1.000000 \ @@ -83,7 +73,6 @@ ENV DEBIAN_FRONTEND=noninteractive \ COLLECTION_OBJECT_RESPAWN_SPEED_RATE=1.000000 \ ENEMY_DROP_ITEM_RATE=1.000000 \ DEATH_PENALTY=All \ - # Server settings ENABLE_PLAYER_TO_PLAYER_DAMAGE=false \ ENABLE_FRIENDLY_FIRE=false \ ENABLE_INVADER_ENEMY=true \ @@ -109,9 +98,17 @@ ENV DEBIAN_FRONTEND=noninteractive \ EXIST_PLAYER_AFTER_LOGOUT=false \ ENABLE_DEFENSE_OTHER_GUILD_PLAYER=false \ COOP_PLAYER_MAX_NUM=4 \ + MAX_PLAYERS=32 \ + SERVER_NAME="jammsen-docker-generated-###RANDOM###" \ + SERVER_DESCRIPTION="Palworld-Dedicated-Server running in Docker by jammsen" \ + ADMIN_PASSWORD=adminPasswordHere \ + SERVER_PASSWORD=serverPasswordHere \ + PUBLIC_PORT=8211 \ + PUBLIC_IP= \ + RCON_ENABLED=false \ + RCON_PORT=25575 \ REGION= \ USEAUTH=true \ - BAN_LIST_URL="https://api.palworldgame.com/api/banlist.txt" - + BAN_LIST_URL=https://api.palworldgame.com/api/banlist.txt CMD ["/servermanager.sh"] diff --git a/README.md b/README.md index 7597eaf..ad7fac1 100644 --- a/README.md +++ b/README.md @@ -70,14 +70,18 @@ To run this Docker image, you need a basic understanding of Docker, Docker-Compo These settings control the behavior of the Docker container: -| Variable | Description | Default value | Allowed values | -| ---------------------- | ------------------------------------------------------------------- | ------------------------------ | ------------------------------------- | -| TZ | Timezone used for time stamping server backups | Europe/Berlin | See [TZ identifiers](#tz-identifiers) | -| ALWAYS_UPDATE_ON_START | Updates the server on startup | true | false/true | -| MULTITHREAD_ENABLED | Sets options for "Improved multi-threaded CPU performance" | true | false/true | -| COMMUNITY_SERVER | Set to enabled, the server will appear in the Community-Serverlist. | true | false/true | -| BACKUP_ENABLED | Backup function, creates backups in your `game` directory | true | false/true | -| BACKUP_CRON_EXPRESSION | Needs a Cron-Expression - See [Cron expression](#cron-expression) | 0 * * * * (meaning every hour) | Cron-Expression | +> If you want to change the server settings via environment variables use the default value (`auto`) for the environment variable `SERVER_SETTINGS_MODE`, otherwise change it to `manual` and edit the config file directly. + +| Variable | Description | Default value | Allowed values | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| TZ | Timezone used for time stamping server backups | Europe/Berlin | See [TZ identifiers](#tz-identifiers) | +| ALWAYS_UPDATE_ON_START | Updates the server on startup | true | false/true | +| MULTITHREAD_ENABLED | Sets options for "Improved multi-threaded CPU performance" | true | false/true | +| COMMUNITY_SERVER | Set to enabled, the server will appear in the Community-Serverlist. | true | false/true | +| BACKUP_ENABLED | Backup function, creates backups in your `game` directory | true | false/true | +| BACKUP_CRON_EXPRESSION | Needs a Cron-Expression - See [Cron expression](#cron-expression) | 0 * * * * (meaning every hour) | Cron-Expression | +| SERVER_SETTINGS_MODE | Determines whether settings can be modified via environment variables or via file, except `COMMUNITY_SERVER` and `MULTITHREAD_ENABLED`! | `auto` | `auto`: Settings are modified only by environment variables, manual edits will be ignored
`manual`: Settings are modified only by editing the file directly, environment variables are ignored | +| STEAMCMD_VALIDATE_FILES | Set to enabled SteamCMD will also validate the gameserver files, making sure nothing is corrupted and also overwrite any file changes of the source
See https://developer.valvesoftware.com/wiki/SteamCMD#Downloading_an_App | true | false/true | ### TZ identifiers @@ -97,17 +101,10 @@ Information sources and credits to the following websites: **Importtant:** Please note that all of this is subject to change. **The game is still in early access.** - > If you want to change the server settings via environment variables use the default value (`auto`) fot the environment variable `SETTINGS_MODE`, otherwise change it to `manual` and edit the config file directly. +> To change a setting, you can set the environment variable to the value you want. If the environment variable is not set or is blank, the default value will be used. -| Env Variable | Description | Default value | Allowed values | -| ---------------------- | ---------------------------------------------------------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| SETTINGS_MODE | Determines whether settings can be modified via environment variables or directly on the file. | `auto` | `auto` -> Settings are modified by env vars / `manual` -> settings are read-only and only changeable by editing the file directly | - -To change a setting, you can set the environment variable to the value you want. If the environment variable is not set or is blank, the default value will be used. - - -| Variable | Game setting | Description | Default Value | Allowed Value | +| Variable | Game setting | Description | Default value | Allowed value | | ----------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------------- | | NETSERVERMAXTICKRATE | NetServerMaxTickRate | Changes the TickRate of the server, be very careful with this setting! | 120 | 30-120 | | DIFFICULTY | Difficulty | Choose one of the following:
`None`
`Normal`
`Difficult` | None | Enum | @@ -150,7 +147,7 @@ To change a setting, you can set the environment variable to the value you want. | AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | AutoResetGuildTimeNoOnlinePlayers | Time to automatically reset guild when no players are online | 72.000000 | Float | | GUILD_PLAYER_MAX_NUM | GuildPlayerMaxNum | Max player of Guild | 20 | Integer | | PAL_EGG_DEFAULT_HATCHING_TIME | PalEggDefaultHatchingTime | Time(h) to incubate massive egg | 72.000000 | Float | -| WORK_SPEED_RATE | WorkSpeedRate | Work speed multiplier | 1.000000 | Float | +| WORK_SPEED_RATE | WorkSpeedRate | Work speed multiplier | 1.000000 | Float | | IS_MULTIPLAY | bIsMultiplay | Enable multiplayer | false | Boolean | | IS_PVP | bIsPvP | Enable PVP | false | Boolean | | CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | bCanPickupOtherGuildDeathPenaltyDrop | Allow players from other guilds to pick up death penalty items | false | Boolean | @@ -166,7 +163,7 @@ To change a setting, you can set the environment variable to the value you want. | ADMIN_PASSWORD | server admin password | AdminPassword | adminPasswordHere | String | | SERVER_PASSWORD | AdminPassword | Set the server password. | serverPasswordHere | String | | PUBLIC_PORT | public port | Public port number | 8211 | Integer | -| PUBLIC_IP | public ip or FQDN | Public IP or FQDN | | String | +| PUBLIC_IP | public ip or FQDN | Public IP or FQDN | | String | | RCON_ENABLED | RCONEnabled | Enable RCON - Use ADMIN_PASSWORD to login | false | Boolean | | RCON_PORT | RCONPort | Port number for RCON | 25575 | Integer | | REGION | Region | Area | | String | @@ -197,11 +194,12 @@ services: environment: - TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables" - ALWAYS_UPDATE_ON_START=true - - SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - MULTITHREAD_ENABLED=true - COMMUNITY_SERVER=true - BACKUP_ENABLED=true - BACKUP_CRON_EXPRESSION=0 * * * * + - STEAMCMD_VALIDATE_FILES=true + - SERVER_SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - NETSERVERMAXTICKRATE=120 - DIFFICULTY=None - DAYTIME_SPEEDRATE=1.000000 @@ -291,11 +289,12 @@ services: environment: - TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables" - ALWAYS_UPDATE_ON_START=true - - SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - MULTITHREAD_ENABLED=true - COMMUNITY_SERVER=true - BACKUP_ENABLED=true - BACKUP_CRON_EXPRESSION=0 * * * * + - STEAMCMD_VALIDATE_FILES=true + - SERVER_SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - NETSERVERMAXTICKRATE=120 - DIFFICULTY=None - DAYTIME_SPEEDRATE=1.000000 @@ -368,7 +367,7 @@ services: profiles: ['rcon'] ``` -*Note: The profiles defintion, prevents the container from starting with the server, this is on purpose, because of Docker-Compose's ability to run container over the CLI, after the start* +*Note: The profiles definition, prevents the container from starting with the server, this is on purpose, because of Docker-Compose's ability to run container over the CLI, after the start* #### Run RCON commands @@ -408,11 +407,12 @@ services: environment: - TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables" - ALWAYS_UPDATE_ON_START=true - - SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - MULTITHREAD_ENABLED=true - COMMUNITY_SERVER=true - BACKUP_ENABLED=true - BACKUP_CRON_EXPRESSION=0 * * * * + - STEAMCMD_VALIDATE_FILES=true + - SERVER_SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself - NETSERVERMAXTICKRATE=120 - DIFFICULTY=None - DAYTIME_SPEEDRATE=1.000000 @@ -537,6 +537,8 @@ services: - COMMUNITY_SERVER=true - BACKUP_ENABLED=true - BACKUP_CRON_EXPRESSION=0 * * * * + - STEAMCMD_VALIDATE_FILES=true + - SERVER_SETTINGS_MODE=auto - NETSERVERMAXTICKRATE=120 - DIFFICULTY=None - DAYTIME_SPEEDRATE=1.000000 diff --git a/servermanager.sh b/servermanager.sh index 2253c6c..1f135f9 100755 --- a/servermanager.sh +++ b/servermanager.sh @@ -13,288 +13,327 @@ function installServer() { function updateServer() { # force an update and validation - echo ">>> Doing an update of the gameserver" - /home/steam/steamcmd/steamcmd.sh +force_install_dir "$GAME_PATH" +login anonymous +app_update 2394010 validate +quit + if [[ -n $STEAMCMD_VALIDATE_FILES ]] && [[ $STEAMCMD_VALIDATE_FILES == "true" ]]; then + echo ">>> Doing an update and validate of the gameserver files" + /home/steam/steamcmd/steamcmd.sh +force_install_dir "$GAME_PATH" +login anonymous +app_update 2394010 validate +quit + else + echo ">>> Doing an update of the gameserver files" + /home/steam/steamcmd/steamcmd.sh +force_install_dir "$GAME_PATH" +login anonymous +app_update 2394010 +quit + fi } -function setupServerConfig( { +function setupEngineIni() { + + echo ">>> Setting up Engine.ini ..." + if [[ -n $SERVER_SETTINGS_MODE ]] && [[ $SERVER_SETTINGS_MODE == "auto" ]]; then + echo "> SERVER_SETTINGS_MODE is set to auto, using environment variables to configure the server!" + + config_file="${GAME_PATH}/Pal/Saved/Config/LinuxServer/Engine.ini" + pattern1="OnlineSubsystemUtils.IpNetDriver" + pattern2="^NetServerMaxTickRate=[0-9]*" + + if grep -qE "$pattern1" "$config_file"; then + echo ">Found [/Script/OnlineSubsystemUtils.IpNetDriver] section" + else + echo ">Found no [/Script/OnlineSubsystemUtils.IpNetDriver], adding it" + echo -e "\n[/Script/OnlineSubsystemUtils.IpNetDriver]" >> "$config_file" + fi + if grep -qE "$pattern2" "$config_file"; then + echo ">Found NetServerMaxTickRate parameter, changing it to $NETSERVERMAXTICKRATE" + sed -E -i "s/$pattern2/NetServerMaxTickRate=$NETSERVERMAXTICKRATE/" "$config_file" + else + echo ">Found no NetServerMaxTickRate parameter, adding it to $NETSERVERMAXTICKRATE" + echo "NetServerMaxTickRate=$NETSERVERMAXTICKRATE" >> "$config_file" + fi + else + echo "> SERVER_SETTINGS_MODE is set to manual, NOT using environment variables to configure the server!" + echo "> File ${GAME_PATH}/Pal/Saved/Config/LinuxServer/Engine.ini has to be manually set by user" + fi + echo ">>> Finished setting up Engine.ini ..." +} + +function setupPalWorldSettingsIni() { # setup the server config file echo ">>> Setting up PalWorldSettings.ini ..." - echo "Checking if config exists" + echo "> Checking if config already exists" if [ ! -f ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini ]; then - echo "No config found, generating one" + echo "> No config found, generating one" if [ ! -d ${GAME_PATH}/Pal/Saved/Config/LinuxServer ]; then mkdir -p ${GAME_PATH}/Pal/Saved/Config/LinuxServer fi # Copy default-config, which comes with the server to gameserver-save location cp ${GAME_PATH}/DefaultPalWorldSettings.ini ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - else if [ "$SETTINGS_MODE" = "auto" ]; then - echo ">>> File PalWorldSettings.ini manually set by user..." - return + else + echo "> Found existing config" fi - if [[ ! -z ${DIFFICULTY+x} ]]; then - echo "Setting Difficulty to $DIFFICULTY" - sed -E -i "s/Difficulty=[a-zA-Z]*/Difficulty=$DIFFICULTY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${DAYTIME_SPEEDRATE+x} ]]; then - echo "Setting DayTimeSpeedRate to $DAYTIME_SPEEDRATE" - sed -E -i "s/DayTimeSpeedRate=[+-]?([0-9]*[.])?[0-9]+/DayTimeSpeedRate=$DAYTIME_SPEEDRATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${NIGHTTIME_SPEEDRATE+x} ]]; then - echo "Setting NightTimeSpeedRate to $NIGHTTIME_SPEEDRATE" - sed -E -i "s/NightTimeSpeedRate=[+-]?([0-9]*[.])?[0-9]+/NightTimeSpeedRate=$NIGHTTIME_SPEEDRATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${EXP_RATE+x} ]]; then - echo "Setting ExpRate to $EXP_RATE" - sed -E -i "s/ExpRate=[+-]?([0-9]*[.])?[0-9]+/ExpRate=$EXP_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_CAPTURE_RATE+x} ]]; then - echo "Setting PalCaptureRate to $PAL_CAPTURE_RATE" - sed -E -i "s/PalCaptureRate=[+-]?([0-9]*[.])?[0-9]+/PalCaptureRate=$PAL_CAPTURE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_SPAWN_NUM_RATE+x} ]]; then - echo "Setting PalSpawnNumRate to $PAL_SPAWN_NUM_RATE" - sed -E -i "s/PalSpawnNumRate=[+-]?([0-9]*[.])?[0-9]+/PalSpawnNumRate=$PAL_SPAWN_NUM_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_DAMAGE_RATE_ATTACK+x} ]]; then - echo "Setting PalDamageRateAttack to $PAL_DAMAGE_RATE_ATTACK" - sed -E -i "s/PalDamageRateAttack=[+-]?([0-9]*[.])?[0-9]+/PalDamageRateAttack=$PAL_DAMAGE_RATE_ATTACK/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_DAMAGE_RATE_DEFENSE+x} ]]; then - echo "Setting PalDamageRateDefense to $PAL_DAMAGE_RATE_DEFENSE" - sed -E -i "s/PalDamageRateDefense=[+-]?([0-9]*[.])?[0-9]+/PalDamageRateDefense=$PAL_DAMAGE_RATE_DEFENSE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PLAYER_DAMAGE_RATE_ATTACK+x} ]]; then - echo "Setting PlayerDamageRateAttack to $PLAYER_DAMAGE_RATE_ATTACK" - sed -E -i "s/PlayerDamageRateAttack=[+-]?([0-9]*[.])?[0-9]+/PlayerDamageRateAttack=$PLAYER_DAMAGE_RATE_ATTACK/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PLAYER_DAMAGE_RATE_DEFENSE+x} ]]; then - echo "Setting PlayerDamageRateDefense to $PLAYER_DAMAGE_RATE_DEFENSE" - sed -E -i "s/PlayerDamageRateDefense=[+-]?([0-9]*[.])?[0-9]+/PlayerDamageRateDefense=$PLAYER_DAMAGE_RATE_DEFENSE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PLAYER_STOMACH_DECREASE_RATE+x} ]]; then - echo "Setting PlayerStomachDecreaceRate to $PLAYER_STOMACH_DECREASE_RATE" - sed -E -i "s/PlayerStomachDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PlayerStomachDecreaceRate=$PLAYER_STOMACH_DECREASE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PLAYER_STAMINA_DECREACE_RATE+x} ]]; then - echo "Setting PlayerStaminaDecreaceRate to $PLAYER_STAMINA_DECREACE_RATE" - sed -E -i "s/PlayerStaminaDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PlayerStaminaDecreaceRate=$PLAYER_STAMINA_DECREACE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PLAYER_AUTO_HP_REGENE_RATE+x} ]]; then - echo "Setting PlayerAutoHPRegeneRate to $PLAYER_AUTO_HP_REGENE_RATE" - sed -E -i "s/PlayerAutoHPRegeneRate=[+-]?([0-9]*[.])?[0-9]+/PlayerAutoHPRegeneRate=$PLAYER_AUTO_HP_REGENE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP+x} ]]; then - echo "Setting PlayerAutoHpRegeneRateInSleep to $PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP" - sed -E -i "s/PlayerAutoHpRegeneRateInSleep=[+-]?([0-9]*[.])?[0-9]+/PlayerAutoHpRegeneRateInSleep=$PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_STOMACH_DECREACE_RATE+x} ]]; then - echo "Setting PalStomachDecreaceRate to $PAL_STOMACH_DECREACE_RATE" - sed -E -i "s/PalStomachDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PalStomachDecreaceRate=$PAL_STOMACH_DECREACE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_STAMINA_DECREACE_RATE+x} ]]; then - echo "Setting PalStaminaDecreaceRate to $X" - sed -E -i "s/PalStaminaDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PalStaminaDecreaceRate=$PAL_STAMINA_DECREACE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_AUTO_HP_REGENE_RATE+x} ]]; then - echo "Setting PalAutoHPRegeneRate to $PAL_AUTO_HP_REGENE_RATE" - sed -E -i "s/PalAutoHPRegeneRate=[+-]?([0-9]*[.])?[0-9]+/PalAutoHPRegeneRate=$PAL_AUTO_HP_REGENE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_AUTO_HP_REGENE_RATE_IN_SLEEP+x} ]]; then - echo "Setting PalAutoHpRegeneRateInSleep to $PAL_AUTO_HP_REGENE_RATE_IN_SLEEP" - sed -E -i "s/PalAutoHpRegeneRateInSleep=[+-]?([0-9]*[.])?[0-9]+/PalAutoHpRegeneRateInSleep=$PAL_AUTO_HP_REGENE_RATE_IN_SLEEP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${BUILD_OBJECT_DAMAGE_RATE+x} ]]; then - echo "Setting BuildObjectDamageRate to $BUILD_OBJECT_DAMAGE_RATE" - sed -E -i "s/BuildObjectDamageRate=[+-]?([0-9]*[.])?[0-9]+/BuildObjectDamageRate=$BUILD_OBJECT_DAMAGE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${BUILD_OBJECT_DETERIORATION_DAMAGE_RATE+x} ]]; then - echo "Setting BuildObjectDeteriorationDamageRate to $BUILD_OBJECT_DETERIORATION_DAMAGE_RATE" - sed -E -i "s/BuildObjectDeteriorationDamageRate=[+-]?([0-9]*[.])?[0-9]+/BuildObjectDeteriorationDamageRate=$BUILD_OBJECT_DETERIORATION_DAMAGE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${BUILD_OBJECT_DETERIORATION_DAMAGE_RATE+x} ]]; then - echo "Setting PalAutoHpRegeneRateInSleep to $BUILD_OBJECT_DETERIORATION_DAMAGE_RATE" - sed -E -i "s/PalAutoHpRegeneRateInSleep=[+-]?([0-9]*[.])?[0-9]+/PalAutoHpRegeneRateInSleep=$BUILD_OBJECT_DETERIORATION_DAMAGE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${COLLECTION_DROP_RATE+x} ]]; then - echo "Setting CollectionDropRate to $COLLECTION_DROP_RATE" - sed -E -i "s/CollectionDropRate=[+-]?([0-9]*[.])?[0-9]+/CollectionDropRate=$COLLECTION_DROP_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${COLLECTION_OBJECT_HP_RATE+x} ]]; then - echo "Setting CollectionObjectHpRate to $COLLECTION_OBJECT_HP_RATE" - sed -E -i "s/CollectionObjectHpRate=[+-]?([0-9]*[.])?[0-9]+/CollectionObjectHpRate=$COLLECTION_OBJECT_HP_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${COLLECTION_OBJECT_RESPAWN_SPEED_RATE+x} ]]; then - echo "Setting CollectionObjectRespawnSpeedRate to $COLLECTION_OBJECT_RESPAWN_SPEED_RATE" - sed -E -i "s/CollectionObjectRespawnSpeedRate=[+-]?([0-9]*[.])?[0-9]+/CollectionObjectRespawnSpeedRate=$COLLECTION_OBJECT_RESPAWN_SPEED_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENEMY_DROP_ITEM_RATE+x} ]]; then - echo "Setting EnemyDropItemRate to $ENEMY_DROP_ITEM_RATE" - sed -E -i "s/EnemyDropItemRate=[+-]?([0-9]*[.])?[0-9]+/EnemyDropItemRate=$ENEMY_DROP_ITEM_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${DEATH_PENALTY+x} ]]; then - echo "Setting DeathPenalty to $DEATH_PENALTY" - sed -E -i "s/DeathPenalty=[a-zA-Z]*/DeathPenalty=$DEATH_PENALTY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_PLAYER_TO_PLAYER_DAMAGE+x} ]]; then - echo "Setting bEnablePlayerToPlayerDamage to $ENABLE_PLAYER_TO_PLAYER_DAMAGE" - sed -E -i "s/bEnablePlayerToPlayerDamage=[a-zA-Z]*/bEnablePlayerToPlayerDamage=$ENABLE_PLAYER_TO_PLAYER_DAMAGE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_FRIENDLY_FIRE+x} ]]; then - echo "Setting bEnableFriendlyFire to $ENABLE_FRIENDLY_FIRE" - sed -E -i "s/bEnableFriendlyFire=[a-zA-Z]*/bEnableFriendlyFire=$ENABLE_FRIENDLY_FIRE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_INVADER_ENEMY+x} ]]; then - echo "Setting bEnableInvaderEnemy to $ENABLE_INVADER_ENEMY" - sed -E -i "s/bEnableInvaderEnemy=[a-zA-Z]*/bEnableInvaderEnemy=$ENABLE_INVADER_ENEMY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ACTIVE_UNKO+x} ]]; then - echo "Setting bActiveUNKO to $ACTIVE_UNKO" - sed -E -i "s/bActiveUNKO=[a-zA-Z]*/bActiveUNKO=$ACTIVE_UNKO/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_AIM_ASSIST_PAD+x} ]]; then - echo "Setting bEnableAimAssistPad to $ENABLE_AIM_ASSIST_PAD" - sed -E -i "s/bEnableAimAssistPad=[a-zA-Z]*/bEnableAimAssistPad=$ENABLE_AIM_ASSIST_PAD/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_AIM_ASSIST_KEYBOARD+x} ]]; then - echo "Setting bEnableAimAssistKeyboard to $ENABLE_AIM_ASSIST_KEYBOARD" - sed -E -i "s/bEnableAimAssistKeyboard=[a-zA-Z]*/bEnableAimAssistKeyboard=$ENABLE_AIM_ASSIST_KEYBOARD/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${DROP_ITEM_MAX_NUM+x} ]]; then - echo "Setting DropItemMaxNum to $DROP_ITEM_MAX_NUM" - sed -E -i "s/DropItemMaxNum=[0-9]*/DropItemMaxNum=$DROP_ITEM_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${DROP_ITEM_MAX_NUM_UNKO+x} ]]; then - echo "Setting DropItemMaxNum_UNKO to $DROP_ITEM_MAX_NUM_UNKO" - sed -E -i "s/DropItemMaxNum_UNKO=[0-9]*/DropItemMaxNum_UNKO=$DROP_ITEM_MAX_NUM_UNKO/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${BASE_CAMP_MAX_NUM+x} ]]; then - echo "Setting BaseCampMaxNum to $BASE_CAMP_MAX_NUM" - sed -E -i "s/BaseCampMaxNum=[0-9]*/BaseCampMaxNum=$BASE_CAMP_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${BASE_CAMP_WORKER_MAXNUM+x} ]]; then - echo "Setting BaseCampWorkerMaxNum to $BASE_CAMP_WORKER_MAXNUM" - sed -E -i "s/BaseCampWorkerMaxNum=[0-9]*/BaseCampWorkerMaxNum=$BASE_CAMP_WORKER_MAXNUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${DROP_ITEM_ALIVE_MAX_HOURS+x} ]]; then - echo "Setting DropItemAliveMaxHours to $DROP_ITEM_ALIVE_MAX_HOURS" - sed -E -i "s/DropItemAliveMaxHours=[+-]?([0-9]*[.])?[0-9]+/DropItemAliveMaxHours=$DROP_ITEM_ALIVE_MAX_HOURS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${AUTO_RESET_GUILD_NO_ONLINE_PLAYERS+x} ]]; then - echo "Setting bAutoResetGuildNoOnlinePlayers to $AUTO_RESET_GUILD_NO_ONLINE_PLAYERS" - sed -E -i "s/bAutoResetGuildNoOnlinePlayers=[a-zA-Z]*/bAutoResetGuildNoOnlinePlayers=$AUTO_RESET_GUILD_NO_ONLINE_PLAYERS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS+x} ]]; then - echo "Setting AutoResetGuildTimeNoOnlinePlayers to $AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS" - sed -E -i "s/AutoResetGuildTimeNoOnlinePlayers=[+-]?([0-9]*[.])?[0-9]+/AutoResetGuildTimeNoOnlinePlayers=$AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${GUILD_PLAYER_MAX_NUM+x} ]]; then - echo "Setting GuildPlayerMaxNum to $GUILD_PLAYER_MAX_NUM" - sed -E -i "s/GuildPlayerMaxNum=[0-9]*/GuildPlayerMaxNum=$GUILD_PLAYER_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PAL_EGG_DEFAULT_HATCHING_TIME+x} ]]; then - echo "Setting PalEggDefaultHatchingTime to $PAL_EGG_DEFAULT_HATCHING_TIME" - sed -E -i "s/PalEggDefaultHatchingTime=[+-]?([0-9]*[.])?[0-9]+/PalEggDefaultHatchingTime=$PAL_EGG_DEFAULT_HATCHING_TIME/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${WORK_SPEED_RATE+x} ]]; then - echo "Setting WorkSpeedRate to $WORK_SPEED_RATE" - sed -E -i "s/WorkSpeedRate=[+-]?([0-9]*[.])?[0-9]+/WorkSpeedRate=$WORK_SPEED_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${IS_MULTIPLAY+x} ]]; then - echo "Setting bIsMultiplay to $IS_MULTIPLAY" - sed -E -i "s/bIsMultiplay=[a-zA-Z]*/bIsMultiplay=$IS_MULTIPLAY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${IS_PVP+x} ]]; then - echo "Setting bIsPvP to $IS_PVP" - sed -E -i "s/bIsPvP=[a-zA-Z]*/bIsPvP=$IS_PVP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP+x} ]]; then - echo "Setting bCanPickupOtherGuildDeathPenaltyDrop to $CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP" - sed -E -i "s/bCanPickupOtherGuildDeathPenaltyDrop=[a-zA-Z]*/bCanPickupOtherGuildDeathPenaltyDrop=$CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_NON_LOGIN_PENALTY+x} ]]; then - echo "Setting bEnableNonLoginPenalty to $ENABLE_NON_LOGIN_PENALTY" - sed -E -i "s/bEnableNonLoginPenalty=[a-zA-Z]*/bEnableNonLoginPenalty=$ENABLE_NON_LOGIN_PENALTY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_FAST_TRAVEL+x} ]]; then - echo "Setting bEnableFastTravel to $ENABLE_FAST_TRAVEL" - sed -E -i "s/bEnableFastTravel=[a-zA-Z]*/bEnableFastTravel=$ENABLE_FAST_TRAVEL/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${IS_START_LOCATION_SELECT_BY_MAP+x} ]]; then - echo "Setting bIsStartLocationSelectByMap to $IS_START_LOCATION_SELECT_BY_MAP" - sed -E -i "s/bIsStartLocationSelectByMap=[a-zA-Z]*/bIsStartLocationSelectByMap=$IS_START_LOCATION_SELECT_BY_MAP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${EXIST_PLAYER_AFTER_LOGOUT+x} ]]; then - echo "Setting bExistPlayerAfterLogout to $EXIST_PLAYER_AFTER_LOGOUT" - sed -E -i "s/bExistPlayerAfterLogout=[a-zA-Z]*/bExistPlayerAfterLogout=$EXIST_PLAYER_AFTER_LOGOUT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ENABLE_DEFENSE_OTHER_GUILD_PLAYER+x} ]]; then - echo "Setting bEnableDefenseOtherGuildPlayer to $ENABLE_DEFENSE_OTHER_GUILD_PLAYER" - sed -E -i "s/bEnableDefenseOtherGuildPlayer=[a-zA-Z]*/bEnableDefenseOtherGuildPlayer=$ENABLE_DEFENSE_OTHER_GUILD_PLAYER/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${COOP_PLAYER_MAX_NUM+x} ]]; then - echo "Setting CoopPlayerMaxNum to $COOP_PLAYER_MAX_NUM" - sed -E -i "s/CoopPlayerMaxNum=[0-9]*/CoopPlayerMaxNum=$COOP_PLAYER_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${MAX_PLAYERS+x} ]]; then - echo "Setting max-players to $MAX_PLAYERS" - sed -E -i "s/ServerPlayerMaxNum=[0-9]*/ServerPlayerMaxNum=$MAX_PLAYERS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${SERVER_NAME+x} ]]; then - echo "Setting server name to $SERVER_NAME" - sed -E -i "s/ServerName=\"[^\"]*\"/ServerName=\"$SERVER_NAME\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - if [[ "$SERVER_NAME" == *"###RANDOM###"* ]]; then - RAND_VALUE=$RANDOM - echo "Found standard template, using random numbers in server name" - sed -E -i -e "s/###RANDOM###/$RAND_VALUE/g" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - echo "Server name is now jammsen-docker-generated-$RAND_VALUE" + if [[ -n $SERVER_SETTINGS_MODE ]] && [[ $SERVER_SETTINGS_MODE == "auto" ]]; then + echo "> SERVER_SETTINGS_MODE is set to auto, using environment variables to configure the server!" + if [[ ! -z ${DIFFICULTY+x} ]]; then + echo "> Setting Difficulty to $DIFFICULTY" + sed -E -i "s/Difficulty=[a-zA-Z]*/Difficulty=$DIFFICULTY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini fi - fi - if [[ ! -z ${SERVER_DESCRIPTION+x} ]]; then - echo "Setting server description to $SERVER_DESCRIPTION" - sed -E -i "s/ServerDescription=\"[^\"]*\"/ServerDescription=\"$SERVER_DESCRIPTION\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${ADMIN_PASSWORD+x} ]]; then - echo "Setting server admin password to $ADMIN_PASSWORD" - sed -E -i "s/AdminPassword=\"[^\"]*\"/AdminPassword=\"$ADMIN_PASSWORD\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${SERVER_PASSWORD+x} ]]; then - echo "Setting server password to $SERVER_PASSWORD" - sed -E -i "s/ServerPassword=\"[^\"]*\"/ServerPassword=\"$SERVER_PASSWORD\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PUBLIC_PORT+x} ]]; then - echo "Setting public port to $PUBLIC_PORT" - sed -E -i "s/PublicPort=[0-9]*/PublicPort=$PUBLIC_PORT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${PUBLIC_IP+x} ]]; then - echo "Setting public ip to $PUBLIC_IP" - sed -E -i "s/PublicIP=\"[^\"]*\"/PublicIP=\"$PUBLIC_IP\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${RCON_ENABLED+x} ]]; then - echo "Setting rcon-enabled to $RCON_ENABLED" - sed -E -i "s/RCONEnabled=[a-zA-Z]*/RCONEnabled=$RCON_ENABLED/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${RCON_PORT+x} ]]; then - echo "Setting RCONPort to $RCON_PORT" - sed -E -i "s/RCONPort=[0-9]*/RCONPort=$RCON_PORT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${REGION+x} ]]; then - echo "Setting Region to $REGION" - sed -E -i "s/Region=\"[^\"]*\"/Region=\"$REGION\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${USEAUTH+x} ]]; then - echo "Setting bUseAuth to $USEAUTH" - sed -E -i "s/bUseAuth=[a-zA-Z]*/bUseAuth=$USEAUTH/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - fi - if [[ ! -z ${BAN_LIST_URL+x} ]]; then - echo "Setting BanListURL to $BAN_LIST_URL" - sed -E -i "s~BanListURL=\"[^\"]*\"~BanListURL=\"$BAN_LIST_URL\"~" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini - # sed -E -i 's/BanListURL=(((ftp|http|https):\/\/)|(\/)|(..\/))(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/BanListURL=$BAN_LIST_URL/g' ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + if [[ ! -z ${DAYTIME_SPEEDRATE+x} ]]; then + echo "> Setting DayTimeSpeedRate to $DAYTIME_SPEEDRATE" + sed -E -i "s/DayTimeSpeedRate=[+-]?([0-9]*[.])?[0-9]+/DayTimeSpeedRate=$DAYTIME_SPEEDRATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${NIGHTTIME_SPEEDRATE+x} ]]; then + echo "> Setting NightTimeSpeedRate to $NIGHTTIME_SPEEDRATE" + sed -E -i "s/NightTimeSpeedRate=[+-]?([0-9]*[.])?[0-9]+/NightTimeSpeedRate=$NIGHTTIME_SPEEDRATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${EXP_RATE+x} ]]; then + echo "> Setting ExpRate to $EXP_RATE" + sed -E -i "s/ExpRate=[+-]?([0-9]*[.])?[0-9]+/ExpRate=$EXP_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_CAPTURE_RATE+x} ]]; then + echo "> Setting PalCaptureRate to $PAL_CAPTURE_RATE" + sed -E -i "s/PalCaptureRate=[+-]?([0-9]*[.])?[0-9]+/PalCaptureRate=$PAL_CAPTURE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_SPAWN_NUM_RATE+x} ]]; then + echo "> Setting PalSpawnNumRate to $PAL_SPAWN_NUM_RATE" + sed -E -i "s/PalSpawnNumRate=[+-]?([0-9]*[.])?[0-9]+/PalSpawnNumRate=$PAL_SPAWN_NUM_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_DAMAGE_RATE_ATTACK+x} ]]; then + echo "> Setting PalDamageRateAttack to $PAL_DAMAGE_RATE_ATTACK" + sed -E -i "s/PalDamageRateAttack=[+-]?([0-9]*[.])?[0-9]+/PalDamageRateAttack=$PAL_DAMAGE_RATE_ATTACK/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_DAMAGE_RATE_DEFENSE+x} ]]; then + echo "> Setting PalDamageRateDefense to $PAL_DAMAGE_RATE_DEFENSE" + sed -E -i "s/PalDamageRateDefense=[+-]?([0-9]*[.])?[0-9]+/PalDamageRateDefense=$PAL_DAMAGE_RATE_DEFENSE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PLAYER_DAMAGE_RATE_ATTACK+x} ]]; then + echo "> Setting PlayerDamageRateAttack to $PLAYER_DAMAGE_RATE_ATTACK" + sed -E -i "s/PlayerDamageRateAttack=[+-]?([0-9]*[.])?[0-9]+/PlayerDamageRateAttack=$PLAYER_DAMAGE_RATE_ATTACK/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PLAYER_DAMAGE_RATE_DEFENSE+x} ]]; then + echo "> Setting PlayerDamageRateDefense to $PLAYER_DAMAGE_RATE_DEFENSE" + sed -E -i "s/PlayerDamageRateDefense=[+-]?([0-9]*[.])?[0-9]+/PlayerDamageRateDefense=$PLAYER_DAMAGE_RATE_DEFENSE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PLAYER_STOMACH_DECREASE_RATE+x} ]]; then + echo "> Setting PlayerStomachDecreaceRate to $PLAYER_STOMACH_DECREASE_RATE" + sed -E -i "s/PlayerStomachDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PlayerStomachDecreaceRate=$PLAYER_STOMACH_DECREASE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PLAYER_STAMINA_DECREACE_RATE+x} ]]; then + echo "> Setting PlayerStaminaDecreaceRate to $PLAYER_STAMINA_DECREACE_RATE" + sed -E -i "s/PlayerStaminaDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PlayerStaminaDecreaceRate=$PLAYER_STAMINA_DECREACE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PLAYER_AUTO_HP_REGENE_RATE+x} ]]; then + echo "> Setting PlayerAutoHPRegeneRate to $PLAYER_AUTO_HP_REGENE_RATE" + sed -E -i "s/PlayerAutoHPRegeneRate=[+-]?([0-9]*[.])?[0-9]+/PlayerAutoHPRegeneRate=$PLAYER_AUTO_HP_REGENE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP+x} ]]; then + echo "> Setting PlayerAutoHpRegeneRateInSleep to $PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP" + sed -E -i "s/PlayerAutoHpRegeneRateInSleep=[+-]?([0-9]*[.])?[0-9]+/PlayerAutoHpRegeneRateInSleep=$PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_STOMACH_DECREACE_RATE+x} ]]; then + echo "> Setting PalStomachDecreaceRate to $PAL_STOMACH_DECREACE_RATE" + sed -E -i "s/PalStomachDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PalStomachDecreaceRate=$PAL_STOMACH_DECREACE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_STAMINA_DECREACE_RATE+x} ]]; then + echo "> Setting PalStaminaDecreaceRate to $X" + sed -E -i "s/PalStaminaDecreaceRate=[+-]?([0-9]*[.])?[0-9]+/PalStaminaDecreaceRate=$PAL_STAMINA_DECREACE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_AUTO_HP_REGENE_RATE+x} ]]; then + echo "> Setting PalAutoHPRegeneRate to $PAL_AUTO_HP_REGENE_RATE" + sed -E -i "s/PalAutoHPRegeneRate=[+-]?([0-9]*[.])?[0-9]+/PalAutoHPRegeneRate=$PAL_AUTO_HP_REGENE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_AUTO_HP_REGENE_RATE_IN_SLEEP+x} ]]; then + echo "> Setting PalAutoHpRegeneRateInSleep to $PAL_AUTO_HP_REGENE_RATE_IN_SLEEP" + sed -E -i "s/PalAutoHpRegeneRateInSleep=[+-]?([0-9]*[.])?[0-9]+/PalAutoHpRegeneRateInSleep=$PAL_AUTO_HP_REGENE_RATE_IN_SLEEP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${BUILD_OBJECT_DAMAGE_RATE+x} ]]; then + echo "> Setting BuildObjectDamageRate to $BUILD_OBJECT_DAMAGE_RATE" + sed -E -i "s/BuildObjectDamageRate=[+-]?([0-9]*[.])?[0-9]+/BuildObjectDamageRate=$BUILD_OBJECT_DAMAGE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${BUILD_OBJECT_DETERIORATION_DAMAGE_RATE+x} ]]; then + echo "> Setting BuildObjectDeteriorationDamageRate to $BUILD_OBJECT_DETERIORATION_DAMAGE_RATE" + sed -E -i "s/BuildObjectDeteriorationDamageRate=[+-]?([0-9]*[.])?[0-9]+/BuildObjectDeteriorationDamageRate=$BUILD_OBJECT_DETERIORATION_DAMAGE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${BUILD_OBJECT_DETERIORATION_DAMAGE_RATE+x} ]]; then + echo "> Setting PalAutoHpRegeneRateInSleep to $BUILD_OBJECT_DETERIORATION_DAMAGE_RATE" + sed -E -i "s/PalAutoHpRegeneRateInSleep=[+-]?([0-9]*[.])?[0-9]+/PalAutoHpRegeneRateInSleep=$BUILD_OBJECT_DETERIORATION_DAMAGE_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${COLLECTION_DROP_RATE+x} ]]; then + echo "> Setting CollectionDropRate to $COLLECTION_DROP_RATE" + sed -E -i "s/CollectionDropRate=[+-]?([0-9]*[.])?[0-9]+/CollectionDropRate=$COLLECTION_DROP_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${COLLECTION_OBJECT_HP_RATE+x} ]]; then + echo "> Setting CollectionObjectHpRate to $COLLECTION_OBJECT_HP_RATE" + sed -E -i "s/CollectionObjectHpRate=[+-]?([0-9]*[.])?[0-9]+/CollectionObjectHpRate=$COLLECTION_OBJECT_HP_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${COLLECTION_OBJECT_RESPAWN_SPEED_RATE+x} ]]; then + echo "> Setting CollectionObjectRespawnSpeedRate to $COLLECTION_OBJECT_RESPAWN_SPEED_RATE" + sed -E -i "s/CollectionObjectRespawnSpeedRate=[+-]?([0-9]*[.])?[0-9]+/CollectionObjectRespawnSpeedRate=$COLLECTION_OBJECT_RESPAWN_SPEED_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENEMY_DROP_ITEM_RATE+x} ]]; then + echo "> Setting EnemyDropItemRate to $ENEMY_DROP_ITEM_RATE" + sed -E -i "s/EnemyDropItemRate=[+-]?([0-9]*[.])?[0-9]+/EnemyDropItemRate=$ENEMY_DROP_ITEM_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${DEATH_PENALTY+x} ]]; then + echo "> Setting DeathPenalty to $DEATH_PENALTY" + sed -E -i "s/DeathPenalty=[a-zA-Z]*/DeathPenalty=$DEATH_PENALTY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_PLAYER_TO_PLAYER_DAMAGE+x} ]]; then + echo "> Setting bEnablePlayerToPlayerDamage to $ENABLE_PLAYER_TO_PLAYER_DAMAGE" + sed -E -i "s/bEnablePlayerToPlayerDamage=[a-zA-Z]*/bEnablePlayerToPlayerDamage=$ENABLE_PLAYER_TO_PLAYER_DAMAGE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_FRIENDLY_FIRE+x} ]]; then + echo "> Setting bEnableFriendlyFire to $ENABLE_FRIENDLY_FIRE" + sed -E -i "s/bEnableFriendlyFire=[a-zA-Z]*/bEnableFriendlyFire=$ENABLE_FRIENDLY_FIRE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_INVADER_ENEMY+x} ]]; then + echo "> Setting bEnableInvaderEnemy to $ENABLE_INVADER_ENEMY" + sed -E -i "s/bEnableInvaderEnemy=[a-zA-Z]*/bEnableInvaderEnemy=$ENABLE_INVADER_ENEMY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ACTIVE_UNKO+x} ]]; then + echo "> Setting bActiveUNKO to $ACTIVE_UNKO" + sed -E -i "s/bActiveUNKO=[a-zA-Z]*/bActiveUNKO=$ACTIVE_UNKO/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_AIM_ASSIST_PAD+x} ]]; then + echo "> Setting bEnableAimAssistPad to $ENABLE_AIM_ASSIST_PAD" + sed -E -i "s/bEnableAimAssistPad=[a-zA-Z]*/bEnableAimAssistPad=$ENABLE_AIM_ASSIST_PAD/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_AIM_ASSIST_KEYBOARD+x} ]]; then + echo "> Setting bEnableAimAssistKeyboard to $ENABLE_AIM_ASSIST_KEYBOARD" + sed -E -i "s/bEnableAimAssistKeyboard=[a-zA-Z]*/bEnableAimAssistKeyboard=$ENABLE_AIM_ASSIST_KEYBOARD/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${DROP_ITEM_MAX_NUM+x} ]]; then + echo "> Setting DropItemMaxNum to $DROP_ITEM_MAX_NUM" + sed -E -i "s/DropItemMaxNum=[0-9]*/DropItemMaxNum=$DROP_ITEM_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${DROP_ITEM_MAX_NUM_UNKO+x} ]]; then + echo "> Setting DropItemMaxNum_UNKO to $DROP_ITEM_MAX_NUM_UNKO" + sed -E -i "s/DropItemMaxNum_UNKO=[0-9]*/DropItemMaxNum_UNKO=$DROP_ITEM_MAX_NUM_UNKO/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${BASE_CAMP_MAX_NUM+x} ]]; then + echo "> Setting BaseCampMaxNum to $BASE_CAMP_MAX_NUM" + sed -E -i "s/BaseCampMaxNum=[0-9]*/BaseCampMaxNum=$BASE_CAMP_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${BASE_CAMP_WORKER_MAXNUM+x} ]]; then + echo "> Setting BaseCampWorkerMaxNum to $BASE_CAMP_WORKER_MAXNUM" + sed -E -i "s/BaseCampWorkerMaxNum=[0-9]*/BaseCampWorkerMaxNum=$BASE_CAMP_WORKER_MAXNUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${DROP_ITEM_ALIVE_MAX_HOURS+x} ]]; then + echo "> Setting DropItemAliveMaxHours to $DROP_ITEM_ALIVE_MAX_HOURS" + sed -E -i "s/DropItemAliveMaxHours=[+-]?([0-9]*[.])?[0-9]+/DropItemAliveMaxHours=$DROP_ITEM_ALIVE_MAX_HOURS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${AUTO_RESET_GUILD_NO_ONLINE_PLAYERS+x} ]]; then + echo "> Setting bAutoResetGuildNoOnlinePlayers to $AUTO_RESET_GUILD_NO_ONLINE_PLAYERS" + sed -E -i "s/bAutoResetGuildNoOnlinePlayers=[a-zA-Z]*/bAutoResetGuildNoOnlinePlayers=$AUTO_RESET_GUILD_NO_ONLINE_PLAYERS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS+x} ]]; then + echo "> Setting AutoResetGuildTimeNoOnlinePlayers to $AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS" + sed -E -i "s/AutoResetGuildTimeNoOnlinePlayers=[+-]?([0-9]*[.])?[0-9]+/AutoResetGuildTimeNoOnlinePlayers=$AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${GUILD_PLAYER_MAX_NUM+x} ]]; then + echo "> Setting GuildPlayerMaxNum to $GUILD_PLAYER_MAX_NUM" + sed -E -i "s/GuildPlayerMaxNum=[0-9]*/GuildPlayerMaxNum=$GUILD_PLAYER_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PAL_EGG_DEFAULT_HATCHING_TIME+x} ]]; then + echo "> Setting PalEggDefaultHatchingTime to $PAL_EGG_DEFAULT_HATCHING_TIME" + sed -E -i "s/PalEggDefaultHatchingTime=[+-]?([0-9]*[.])?[0-9]+/PalEggDefaultHatchingTime=$PAL_EGG_DEFAULT_HATCHING_TIME/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${WORK_SPEED_RATE+x} ]]; then + echo "> Setting WorkSpeedRate to $WORK_SPEED_RATE" + sed -E -i "s/WorkSpeedRate=[+-]?([0-9]*[.])?[0-9]+/WorkSpeedRate=$WORK_SPEED_RATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${IS_MULTIPLAY+x} ]]; then + echo "> Setting bIsMultiplay to $IS_MULTIPLAY" + sed -E -i "s/bIsMultiplay=[a-zA-Z]*/bIsMultiplay=$IS_MULTIPLAY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${IS_PVP+x} ]]; then + echo "> Setting bIsPvP to $IS_PVP" + sed -E -i "s/bIsPvP=[a-zA-Z]*/bIsPvP=$IS_PVP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP+x} ]]; then + echo "> Setting bCanPickupOtherGuildDeathPenaltyDrop to $CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP" + sed -E -i "s/bCanPickupOtherGuildDeathPenaltyDrop=[a-zA-Z]*/bCanPickupOtherGuildDeathPenaltyDrop=$CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_NON_LOGIN_PENALTY+x} ]]; then + echo "> Setting bEnableNonLoginPenalty to $ENABLE_NON_LOGIN_PENALTY" + sed -E -i "s/bEnableNonLoginPenalty=[a-zA-Z]*/bEnableNonLoginPenalty=$ENABLE_NON_LOGIN_PENALTY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_FAST_TRAVEL+x} ]]; then + echo "> Setting bEnableFastTravel to $ENABLE_FAST_TRAVEL" + sed -E -i "s/bEnableFastTravel=[a-zA-Z]*/bEnableFastTravel=$ENABLE_FAST_TRAVEL/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${IS_START_LOCATION_SELECT_BY_MAP+x} ]]; then + echo "> Setting bIsStartLocationSelectByMap to $IS_START_LOCATION_SELECT_BY_MAP" + sed -E -i "s/bIsStartLocationSelectByMap=[a-zA-Z]*/bIsStartLocationSelectByMap=$IS_START_LOCATION_SELECT_BY_MAP/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${EXIST_PLAYER_AFTER_LOGOUT+x} ]]; then + echo "> Setting bExistPlayerAfterLogout to $EXIST_PLAYER_AFTER_LOGOUT" + sed -E -i "s/bExistPlayerAfterLogout=[a-zA-Z]*/bExistPlayerAfterLogout=$EXIST_PLAYER_AFTER_LOGOUT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ENABLE_DEFENSE_OTHER_GUILD_PLAYER+x} ]]; then + echo "> Setting bEnableDefenseOtherGuildPlayer to $ENABLE_DEFENSE_OTHER_GUILD_PLAYER" + sed -E -i "s/bEnableDefenseOtherGuildPlayer=[a-zA-Z]*/bEnableDefenseOtherGuildPlayer=$ENABLE_DEFENSE_OTHER_GUILD_PLAYER/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${COOP_PLAYER_MAX_NUM+x} ]]; then + echo "> Setting CoopPlayerMaxNum to $COOP_PLAYER_MAX_NUM" + sed -E -i "s/CoopPlayerMaxNum=[0-9]*/CoopPlayerMaxNum=$COOP_PLAYER_MAX_NUM/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${MAX_PLAYERS+x} ]]; then + echo "> Setting max-players to $MAX_PLAYERS" + sed -E -i "s/ServerPlayerMaxNum=[0-9]*/ServerPlayerMaxNum=$MAX_PLAYERS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${SERVER_NAME+x} ]]; then + echo "> Setting server name to $SERVER_NAME" + sed -E -i "s/ServerName=\"[^\"]*\"/ServerName=\"$SERVER_NAME\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + if [[ "$SERVER_NAME" == *"###RANDOM###"* ]]; then + RAND_VALUE=$RANDOM + echo "> Found standard template, using random numbers in server name" + sed -E -i -e "s/###RANDOM###/$RAND_VALUE/g" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + echo "> Server name is now jammsen-docker-generated-$RAND_VALUE" + fi + fi + if [[ ! -z ${SERVER_DESCRIPTION+x} ]]; then + echo "> Setting server description to $SERVER_DESCRIPTION" + sed -E -i "s/ServerDescription=\"[^\"]*\"/ServerDescription=\"$SERVER_DESCRIPTION\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${ADMIN_PASSWORD+x} ]]; then + echo "> Setting server admin password to $ADMIN_PASSWORD" + sed -E -i "s/AdminPassword=\"[^\"]*\"/AdminPassword=\"$ADMIN_PASSWORD\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${SERVER_PASSWORD+x} ]]; then + echo "> Setting server password to $SERVER_PASSWORD" + sed -E -i "s/ServerPassword=\"[^\"]*\"/ServerPassword=\"$SERVER_PASSWORD\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PUBLIC_PORT+x} ]]; then + echo "> Setting public port to $PUBLIC_PORT" + sed -E -i "s/PublicPort=[0-9]*/PublicPort=$PUBLIC_PORT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${PUBLIC_IP+x} ]]; then + echo "> Setting public ip to $PUBLIC_IP" + sed -E -i "s/PublicIP=\"[^\"]*\"/PublicIP=\"$PUBLIC_IP\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${RCON_ENABLED+x} ]]; then + echo "> Setting rcon-enabled to $RCON_ENABLED" + sed -E -i "s/RCONEnabled=[a-zA-Z]*/RCONEnabled=$RCON_ENABLED/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${RCON_PORT+x} ]]; then + echo "> Setting RCONPort to $RCON_PORT" + sed -E -i "s/RCONPort=[0-9]*/RCONPort=$RCON_PORT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${REGION+x} ]]; then + echo "> Setting Region to $REGION" + sed -E -i "s/Region=\"[^\"]*\"/Region=\"$REGION\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${USEAUTH+x} ]]; then + echo "> Setting bUseAuth to $USEAUTH" + sed -E -i "s/bUseAuth=[a-zA-Z]*/bUseAuth=$USEAUTH/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + if [[ ! -z ${BAN_LIST_URL+x} ]]; then + echo "> Setting BanListURL to $BAN_LIST_URL" + sed -E -i "s~BanListURL=\"[^\"]*\"~BanListURL=\"$BAN_LIST_URL\"~" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini + fi + else + echo "> SERVER_SETTINGS_MODE is set to manual, NOT using environment variables to configure the server!" + echo "> File ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini has to be manually set by user" fi echo ">>> Finished setting up PalWorldSettings.ini ..." -}) +} function startServer() { # IF Bash extension used: @@ -304,35 +343,16 @@ function startServer() { echo ">>> Starting the gameserver" cd $GAME_PATH - echo ">>> Setting up Engine.ini ..." - config_file="${GAME_PATH}/Pal/Saved/Config/LinuxServer/Engine.ini" - pattern1="OnlineSubsystemUtils.IpNetDriver" - pattern2="^NetServerMaxTickRate=[0-9]*" - - if grep -qE "$pattern1" "$config_file"; then - echo "Found [/Script/OnlineSubsystemUtils.IpNetDriver] section" - else - echo "Found no [/Script/OnlineSubsystemUtils.IpNetDriver], adding it" - echo -e "\n[/Script/OnlineSubsystemUtils.IpNetDriver]" >> "$config_file" - fi - if grep -qE "$pattern2" "$config_file"; then - echo "Found NetServerMaxTickRate parameter, changing it to $NETSERVERMAXTICKRATE" - sed -E -i "s/$pattern2/NetServerMaxTickRate=$NETSERVERMAXTICKRATE/" "$config_file" - else - echo "Found no NetServerMaxTickRate parameter, adding it to $NETSERVERMAXTICKRATE" - echo "NetServerMaxTickRate=$NETSERVERMAXTICKRATE" >> "$config_file" - fi - echo ">>> Finished setting up Engine.ini ..." - - setupServerConfig + setupEngineIni + setupPalWorldSettingsIni START_OPTIONS="" if [[ -n $COMMUNITY_SERVER ]] && [[ $COMMUNITY_SERVER == "true" ]]; then - echo "Setting Community-Mode to enabled" + echo "> Setting Community-Mode to enabled" START_OPTIONS="$START_OPTIONS EpicApp=PalServer" fi if [[ -n $MULTITHREAD_ENABLED ]] && [[ $MULTITHREAD_ENABLED == "true" ]]; then - echo "Setting Multi-Core-Enchancements to enabled" + echo "> Setting Multi-Core-Enchancements to enabled" START_OPTIONS="$START_OPTIONS -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS" fi ./PalServer.sh "$START_OPTIONS" @@ -351,15 +371,13 @@ function checkForDefaultCredentials() { } function startMain() { + checkForDefaultCredentials if [[ -n $BACKUP_ENABLED ]] && [[ $BACKUP_ENABLED == "true" ]]; then # Preparing the cronlist file echo "$BACKUP_CRON_EXPRESSION /backupmanager.sh" >> cronlist # Making sure supercronic is enabled and the cronfile is loaded /usr/local/bin/supercronic cronlist & fi - - checkForDefaultCredentials - # Check if server is installed, if not try again if [ ! -f "$GAME_PATH/PalServer.sh" ]; then installServer