diff --git a/README.md b/README.md
index 1265807..bfb769a 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-## Docker - Palworld Dedicated Server
+# Docker - Palworld Dedicated Server
[![Build Docker Image](https://github.com/jammsen/docker-palworld-dedicated-server/actions/workflows/docker-build-and-push.yml/badge.svg)](https://github.com/jammsen/docker-palworld-dedicated-server/actions/workflows/docker-build-and-push.yml)
![Docker Pulls](https://img.shields.io/docker/pulls/jammsen/palworld-dedicated-server)
@@ -7,16 +7,36 @@
This includes a Palworld Dedicated Server based on Linux and Docker.
+___
+
+## 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)
+* [FAQ](#faq)
+* [Planned features in the future](#planned-features-in-the-future)
+* [Software used](#software-used)
+
## Do you need support for this Docker Image
- What to do?
- Feel free to create a NEW issue
- It is okay to "reference" that you might have the same problem as the person in issue #number
- Follow the instructions and answer the questions of people who are willing to help you
- - If your issue is done, close it
+ - 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 / Necro!
+ - 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!
- If this happens, i reserve the rights to lock the issue or delete the comments, you have been warned!
@@ -26,35 +46,115 @@ This includes a Palworld Dedicated Server based on Linux and Docker.
## Getting started
-1. Choose a Docker-Compose examples from below
-2. Create `game` sub-directories on your Dockernode in your game-server-directory (Example: `/srv/palworld`) and give it with `chmod 777 game` full permissions or use `chown -R 1000:1000 game/`.
-3. Setup Port-Forwarding or NAT for the ports in the Docker-Compose file
-4. (Build the image if you need) Start via `docker-compose up -d` - See docker-compose.yml and next section for more infos
-5. After first start, stop the server, setup your config at `game/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini` and start it again
+1. Create a `game` sub-directories on your Dockernode in your game-server-directory (Example: `/srv/palworld`) and give it with `chmod 777 game` full permissions or use `chown -R 1000:1000 game/`.
+2. Setup Port-Forwarding or NAT for the ports in the Docker-Compose file
+3. Pull the latest version of the image with `docker pull jammsen/palworld-dedicated-server:latest`
+4. Setup your own docker-compose.yml just how you like it - Look into the [Docker-Compose examples](#examples) section and the [Environment-Variables](#examples) section for more information
+5. Start the container via `docker-compose up -d && docker-compose logs -f` and watch the log, if no errors occur you can close the logs with ctrl+c
+6. Happy gaming!
## Environment-Variables
-| Variable | Description | Default Value | Allowed Value |
-| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
-| TZ | Timezone used for time stamping server backups | Europe/Berlin | See [TZ identifiers](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) |
-| ALWAYS_UPDATE_ON_START | Updates the server on startup | true | false/true |
-| MAX_PLAYERS | Maximum amout of players | 32 | 1-32 |
-| MULTITHREAD_ENABLED | Sets options for "Improved multi-threaded CPU performance" | true | false/true |
-| COMMUNITY_SERVER | Sets the server to a "Community-Server". If true, the server will appear in the Community-Serverlist. Needs PUBLIC_IP and PUBLIC_PORT | true | false/true |
-| RCON_ENABLED | RCON function - use ADMIN_PASSWORD to login after enabling it - Will be listening on port 25575 inside the container | true | false/true |
-| PUBLIC_IP | Public ip, auto-detect if not specified, see COMMUNITY_SERVER | 10.0.0.1 | ip address |
-| PUBLIC_PORT | Public port, auto-detect if not specified, see COMMUNITY_SERVER | 8211 | 1024-65535 |
-| SERVER_NAME | Name of the server | jammsen-docker-generated-###RANDOM### | string |
-| SERVER_DESCRIPTION | Description of the server | Palworld-Dedicated-Server running in Docker by jammsen | string |
-| SERVER_PASSWORD | Password of the server | serverPasswordHere | string |
-| ADMIN_PASSWORD | Admin password of the server | adminPasswordHere | string |
-| BACKUP_ENABLED | Backup function, creates backups in your `game` directory | true | false/true |
-| BACKUP_CRON_EXPRESSION | Needs a Cron-Expression - See https://github.com/aptible/supercronic#crontab-format or https://crontab-generator.org/ | 0 * * * * (meaning every hour) | Cron-Expression |
-
-Look at https://tech.palworldgame.com/optimize-game-balance for more information and config-settings in `game/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini`
+
+**Imporant:** In this section you will find a lot of environment variables to control your container-behavior and gameserver-settings. But because of a lot of control, there comes a lot of settings, so this is split into 2 parts for documentation. First comes **Container-Settings** and second **Gamesserver-Settings**.
+
+### Container-Settings
+
+| Variable | Description | Default value | Allowed value |
+| ---------------------- | ------------------------------------------------------------------- | ------------------------------ | ------------------------------------- |
+| 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 |
+
+#### TZ identifiers
+
+This setting affects logging output and the backup function. [TZ identifiers](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) are format of defining a timezone near you.
+
+#### Cron expression
+
+This setting affects the backup function. In a Cron-Expression you define an interval for jobs to run. This image uses Supercronic for crons, see https://github.com/aptible/supercronic#crontab-format or https://crontab-generator.org
+
+### Gameserver-Settings
+
+This is a list of all the settings currently adjustable via Docker environment variables, based on the **order** and **contents of the DefaultPalWorldSettings.ini**
+
+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.**
+
+| Variable | Game setting | Description | Default Value | Allowed Value |
+| ----------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------------- |
+| DIFFICULTY | Difficulty | Choose one of the following:
`None`
`Normal`
`Difficult` | None | Enum |
+| DAYTIME_SPEEDRATE | DayTimeSpeedRate | Day time speed - Smaller number means shorter days | 1.000000 | Float |
+| NIGHTTIME_SPEEDRATE | NightTimeSpeedRate | Night time speed - Smaller number means shorter nights | 1.000000 | Float |
+| 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 |
+| 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 |
+| PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP | PlayerAutoHpRegeneRateInSleep | Player sleep HP regeneration rate | 1.000000 | Float |
+| PAL_STOMACH_DECREACE_RATE | PalStomachDecreaceRate | Pal hunger depletion rate | 1.000000 | Float |
+| 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_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 |
+| 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 |
+| ENABLE_INVADER_ENEMY | bEnableInvaderEnemy | Enable invaders | true | Boolean |
+| ACTIVE_UNKO | bActiveUNKO | Enable UNKO | false | Boolean |
+| ENABLE_AIM_ASSIST_PAD | bEnableAimAssistPad | Enable controller aim assist | true | Boolean |
+| ENABLE_AIM_ASSIST_KEYBOARD | bEnableAimAssistKeyboard | Enable Keyboard aim assist | false | Boolean |
+| DROP_ITEM_MAX_NUM | DropItemMaxNum | Maximum number of drops in the world | 3000 | Integer |
+| DROP_ITEM_MAX_NUM_UNKO | DropItemMaxNum | Maximum number of UNKO drops in the world | 100 | Integer |
+| BASE_CAMP_MAX_NUM | BaseCampMaxNum | Maximum number of base camps | 128 | Integer |
+| BASE_CAMP_WORKER_MAXNUM | BaseCampWorkerMaxNum | Maximum number of workers | 15 | Integer |
+| DROP_ITEM_ALIVE_MAX_HOURS | DropItemAliveMaxHours | Time it takes for items to despawn in hours | 1.000000 | Float |
+| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | bAutoResetGuildNoOnlinePlayers | Automatically reset guild when no players are online | false | Bool |
+| 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 |
+| 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 |
+| ENABLE_NON_LOGIN_PENALTY | bEnableNonLoginPenalty | Enable non-login penalty | true | Boolean |
+| ENABLE_FAST_TRAVEL | bEnableFastTravel | Enable fast travel | true | Boolean |
+| IS_START_LOCATION_SELECT_BY_MAP | bIsStartLocationSelectByMap | Enable selecting of start location | true | Boolean |
+| EXIST_PLAYER_AFTER_LOGOUT | bExistPlayerAfterLogout | Toggle for deleting players when they log off | false | Boolean |
+| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | bEnableDefenseOtherGuildPlayer | Allows defense against other guild players | false | Boolean |
+| COOP_PLAYER_MAX_NUM | CoopPlayerMaxNum | Maximum number of players in a guild | 4 | Integer |
+| MAX_PLAYERS | ServerPlayerMaxNum | Maximum number of people who can join the server | 32 | Integer |
+| SERVER_NAME | ServerName | Server name | jammsen-docker-generated-###RANDOM### | Integer |
+| SERVER_DESCRIPTION | ServerDescription | Server description | Palworld-Dedicated-Server running in Docker by jammsen | String |
+| 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 | Public IP | | 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 |
+| USEAUTH | bUseAuth | Use authentication | true | Boolean |
+| BAN_LIST_URL | BanListURL | Which ban list to use | https://api.palworldgame.com/api/banlist.txt | String |
## Docker-Compose examples
### Standalone gameserver
+
```yml
version: '3.9'
services:
@@ -69,31 +169,85 @@ services:
published: 8211 # Gamerserver port on your host
protocol: udp
mode: host
- - target: 25575 # RCon port inside of the container
- published: 25575 # RCon port on your host
+ - target: 25575 # RCON port inside of the container
+ published: 25575 # RCON port on your host
protocol: tcp
mode: host
environment:
- TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables"
- ALWAYS_UPDATE_ON_START=true
- - MAX_PLAYERS=32
- MULTITHREAD_ENABLED=true
- COMMUNITY_SERVER=true
- - RCON_ENABLED=true
- - RCON_PORT=25575
- - PUBLIC_IP=10.0.0.5
- - PUBLIC_PORT=8211
+ - BACKUP_ENABLED=true
+ - BACKUP_CRON_EXPRESSION=0 * * * *
+ - 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
+ - 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
+ - MAX_PLAYERS=32
- SERVER_NAME=jammsen-docker-generated-###RANDOM###
- SERVER_DESCRIPTION=Palworld-Dedicated-Server running in Docker by jammsen
- - SERVER_PASSWORD=serverPasswordHere
- ADMIN_PASSWORD=adminPasswordHere
- - BACKUP_ENABLED=true
- - BACKUP_CRON_EXPRESSION=0 * * * *
- - TZ=UTC
+ - 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
volumes:
- ./game:/palworld
```
+
### Gameserver with RCON
+
```yml
version: '3.9'
services:
@@ -108,27 +262,79 @@ services:
published: 8211 # Gamerserver port on your host
protocol: udp
mode: host
- - target: 25575 # RCon port inside of the container
- published: 25575 # RCon port on your host
+ - target: 25575 # RCON port inside of the container
+ published: 25575 # RCON port on your host
protocol: tcp
mode: host
environment:
- TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables"
- ALWAYS_UPDATE_ON_START=true
- - MAX_PLAYERS=32
- MULTITHREAD_ENABLED=true
- COMMUNITY_SERVER=true
- - RCON_ENABLED=true
- - RCON_PORT=25575
- - PUBLIC_IP=10.0.0.5
- - PUBLIC_PORT=8211
+ - BACKUP_ENABLED=true
+ - BACKUP_CRON_EXPRESSION=0 * * * *
+ - 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
+ - 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
+ - MAX_PLAYERS=32
- SERVER_NAME=jammsen-docker-generated-###RANDOM###
- SERVER_DESCRIPTION=Palworld-Dedicated-Server running in Docker by jammsen
- - SERVER_PASSWORD=serverPasswordHere
- ADMIN_PASSWORD=adminPasswordHere
- - BACKUP_ENABLED=true
- - BACKUP_CRON_EXPRESSION=0 * * * *
- - TZ=UTC
+ - 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
volumes:
- ./game:/palworld
@@ -137,9 +343,12 @@ services:
entrypoint: ['/rcon', '-a', '10.0.0.5:25575', '-p', 'adminPasswordHere']
profiles: ['rcon']
```
-The profiles defintion, prevents the container from starting with the server and in your console you can run now RCON commands via
-#### RCON
-In your shell you can now run commands against the gameserver via 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*
+
+#### Run RCON commands
+
+In your shell, you can now run commands against the gameserver via Docker-Compose and RCON
```shell
$ docker compose run --rm rcon ShowPlayers
name,playeruid,steamid
@@ -166,5 +375,6 @@ Errors like `[S_API FAIL] Tried to access Steam interface SteamUser021 before St
## Software used
-- CM2Network SteamCMD (Officially recommended by Valve - https://developer.valvesoftware.com/wiki/SteamCMD#Docker)
+- CM2Network SteamCMD - Debian-based (Officially recommended by Valve - https://developer.valvesoftware.com/wiki/SteamCMD#Docker)
+- Supercronic - https://github.com/aptible/supercronic
- Palworld Dedicated Server (APP-ID: 2394010 - https://steamdb.info/app/2394010/config/)
diff --git a/servermanager.sh b/servermanager.sh
index 44676ec..a2028e5 100644
--- a/servermanager.sh
+++ b/servermanager.sh
@@ -1,5 +1,8 @@
#!/bin/bash
+# Stop on errors, comment in, if needed
+#set -e
+
GAME_PATH="/palworld"
function installServer() {
@@ -22,6 +25,7 @@ function startServer() {
echo ">>> Starting the gameserver"
cd $GAME_PATH
+ echo ">>> Setting up setting ..."
echo "Checking if config exists"
if [ ! -f ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini ]; then
echo "No config found, generating one"
@@ -32,17 +36,209 @@ function startServer() {
cp ${GAME_PATH}/DefaultPalWorldSettings.ini ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
fi
- if [[ ! -z ${RCON_ENABLED+x} ]]; then
- echo "Setting rcon-enabled to $RCON_ENABLED"
- sed -i "s/RCONEnabled=[a-zA-Z]*/RCONEnabled=$RCON_ENABLED/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
+ if [[ ! -z ${DIFFICULTY+x} ]]; then
+ echo "Setting Difficulty to $DIFFICULTY"
+ sed -i "s/Difficulty=[a-zA-Z]*/Difficulty=$DIFFICULTY/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
fi
- if [[ ! -z ${PUBLIC_IP+x} ]]; then
- echo "Setting public ip to $PUBLIC_IP"
- sed -i "s/PublicIP=\"[^\"]*\"/PublicIP=\"$PUBLIC_IP\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
+ if [[ ! -z ${DAYTIME_SPEEDRATE+x} ]]; then
+ echo "Setting DayTimeSpeedRate to $DAYTIME_SPEEDRATE"
+ sed -i "s/DayTimeSpeedRate=[+-]?([0-9]*[.])?[0-9]+/DayTimeSpeedRate=$DAYTIME_SPEEDRATE/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
fi
- if [[ ! -z ${PUBLIC_PORT+x} ]]; then
- echo "Setting public port to $PUBLIC_PORT"
- sed -i "s/PublicPort=[0-9]*/PublicPort=$PUBLIC_PORT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
+ if [[ ! -z ${NIGHTTIME_SPEEDRATE+x} ]]; then
+ echo "Setting NightTimeSpeedRate to $NIGHTTIME_SPEEDRATE"
+ sed -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 PalAutoHpRegeneRateInSleep to $BUILD_OBJECT_DETERIORATION_DAMAGE_RATE"
+ sed -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -i "s/CoopPlayerMaxNum=[+-]?([0-9]*[.])?[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 -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"
@@ -58,18 +254,44 @@ function startServer() {
echo "Setting server description to $SERVER_DESCRIPTION"
sed -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 -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 -i "s/ServerPassword=\"[^\"]*\"/ServerPassword=\"$SERVER_PASSWORD\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
fi
- if [[ ! -z ${ADMIN_PASSWORD+x} ]]; then
- echo "Setting server admin password to $ADMIN_PASSWORD"
- sed -i "s/AdminPassword=\"[^\"]*\"/AdminPassword=\"$ADMIN_PASSWORD\"/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
+ if [[ ! -z ${PUBLIC_PORT+x} ]]; then
+ echo "Setting public port to $PUBLIC_PORT"
+ sed -i "s/PublicPort=[0-9]*/PublicPort=$PUBLIC_PORT/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
fi
- if [[ ! -z ${MAX_PLAYERS+x} ]]; then
- echo "Setting max-players to $MAX_PLAYERS"
- sed -i "s/ServerPlayerMaxNum=[0-9]*/ServerPlayerMaxNum=$MAX_PLAYERS/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
+ if [[ ! -z ${PUBLIC_IP+x} ]]; then
+ echo "Setting public ip to $PUBLIC_IP"
+ sed -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 -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 -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 -i "s/Region=[a-zA-Z]*/Region=$REGION/" ${GAME_PATH}/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
+ fi
+ if [[ ! -z ${USEAUTH+x} ]]; then
+ echo "Setting bUseAuth to $USEAUTH"
+ sed -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 -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
+ fi
+ echo ">>> Finished setting up setting ..."
+
START_OPTIONS=""
if [[ -n $COMMUNITY_SERVER ]] && [[ $COMMUNITY_SERVER == "true" ]]; then