From 0d21847877e5f8dc112430921d1e9d86c56a6087 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Mon, 26 Feb 2024 15:46:05 +0100 Subject: [PATCH 01/70] initial engine.ini generating --- Dockerfile | 3 +- .../configuration/engine-settings.md | 46 +++++++++ .../configuration/server-commands.md | 2 +- scripts/compile-engine.sh | 60 ++++++++++++ scripts/files/Engine.ini.template | 95 +++++++++++++++++++ scripts/start.sh | 3 + 6 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 docusaurus/docs/getting-started/configuration/engine-settings.md create mode 100644 scripts/compile-engine.sh create mode 100644 scripts/files/Engine.ini.template diff --git a/Dockerfile b/Dockerfile index 5c8358231..552bb68b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -108,7 +108,8 @@ ENV HOME=/home/steam \ DISCORD_PRE_SHUTDOWN_MESSAGE="Server is shutting down..." \ DISCORD_POST_SHUTDOWN_MESSAGE="Server has been stopped!" \ ENABLE_PLAYER_LOGGING=true \ - PLAYER_LOGGING_POLL_PERIOD=5 + PLAYER_LOGGING_POLL_PERIOD=5 \ + DISABLE_GENERATE_ENGINE=true COPY ./scripts /home/steam/server/ diff --git a/docusaurus/docs/getting-started/configuration/engine-settings.md b/docusaurus/docs/getting-started/configuration/engine-settings.md new file mode 100644 index 000000000..bb1d68fcd --- /dev/null +++ b/docusaurus/docs/getting-started/configuration/engine-settings.md @@ -0,0 +1,46 @@ +--- +sidebar_position: 3 +--- + +# Engine Settings + +Changing Engine Settings with Environment variables. + +## With Environment Variables + +:::warning +These Environment Variables and Settings are subject to change since the game is still in beta. +::: + +Converting engine settings to environment variables follow the same principles (with some exceptions): + +* all capital letters +* split words by inserting an underscore +* remove the single letter if the setting starts with one (like 'b') + +For example: + +* LanServerMaxTickRate -> LAN_SERVER_MAX_TICK_RATE +* bUseFixedFrameRate -> USE_FIXED_FRAME_RATE +* NetClientTicksPerSecond -> NET_CLIENT_TICKS_PER_SECOND + +| Variable | Description | Default Value | Allowed Value | +|-------------------------------|-----------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| LAN_SERVER_MAX_TICK_RATE | Sets maximum ticks per second for LAN servers, higher rates result in smoother gameplay. | 120 | Integer | +| NET_SERVER_MAX_TICK_RATE | Sets maximum ticks per second for Internet servers, similarly ensuring smoother online gameplay. | 120 | Integer | +| CONFIGURED_INTERNET_SPEED | Sets the assumed player internet speed in bytes per second. High value reduces chances of bandwidth throttling. | 104857600 | Integer (in bytes) | +| CONFIGURED_LAN_SPEED | Sets the LAN speed, ensuring LAN players can utilize maximum network capacity. | 104857600 | Integer (in bytes) | +| MAX_CLIENT_RATE | Maximum data transfer rate per client for all connections, set to a high value to prevent data capping. | 104857600 | Integer (in bytes) | +| MAX_INTERNET_CLIENT_RATE | Specifically targets internet clients, allowing for high-volume data transfer without restrictions. | 104857600 | Integer (in bytes) | +| SMOOTH_FRAME_RATE | Enables the game engine to smooth out frame rate fluctuations for a more consistent visual experience. | true | Boolean | +| SMOOTH_FRAME_RATE_UPPER_LIMIT | Sets a max target frame rate range for smoothing. | 120.000000 | Float | +| SMOOTH_FRAME_RATE_LOWER_LIMIT | Sets a min target frame rate range for smoothing. | 30.000000 | Float | +| USE_FIXED_FRAME_RATE | Enables the use of a fixed frame rate | false | Boolean | +| FIXED_FRAME_RATE | Fixed frame rate | 120.000000 | Float | +| MIN_DESIRED_FRAME_RATE | Specifies a minimum acceptable frame rate, ensuring the game runs smoothly at least at this frame rate. | 60.000000 | Float | +| NET_CLIENT_TICKS_PER_SECOND | Increases the update frequency for clients, enhancing responsiveness and reducing lag. | 120 | Integer | + +:::tip +While setting the server tickrate above to 120 fps will make some gameplay aspect smother, +it won't fix rubber-banding and will tax your hardware significantly more. +::: diff --git a/docusaurus/docs/getting-started/configuration/server-commands.md b/docusaurus/docs/getting-started/configuration/server-commands.md index e08335ef7..ef6ede464 100644 --- a/docusaurus/docs/getting-started/configuration/server-commands.md +++ b/docusaurus/docs/getting-started/configuration/server-commands.md @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +sidebar_position: 4 --- # Server Commands (RCON) diff --git a/scripts/compile-engine.sh b/scripts/compile-engine.sh new file mode 100644 index 000000000..17caab056 --- /dev/null +++ b/scripts/compile-engine.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# shellcheck source=scripts/helper_functions.sh +source "/home/steam/server/helper_functions.sh" + +engine_file="/palworld/Pal/Saved/Config/LinuxServer/Engine.ini" +engine_dir=$(dirname "$engine_file") + +mkdir -p "$engine_dir" || exit +# If file exists then check if it is writable +if [ -f "$engine_file" ]; then + if ! isWritable "$engine_file"; then + LogError "Unable to create $engine_file" + exit 1 + fi +# If file does not exist then check if the directory is writable +elif ! isWritable "$engine_dir"; then + # Exiting since the file does not exist and the directory is not writable. + LogError "Unable to create $engine_file" + exit 1 +fi + +LogAction "Compiling Engine.ini" + +export LAN_SERVER_MAX_TICK_RATE=${LAN_SERVER_MAX_TICK_RATE:-120} +export NET_SERVER_MAX_TICK_RATE=${NET_SERVER_MAX_TICK_RATE:-120} +export CONFIGURED_INTERNET_SPEED=${CONFIGURED_INTERNET_SPEED:-104857600} +export CONFIGURED_LAN_SPEED=${CONFIGURED_LAN_SPEED:-104857600} +export MAX_CLIENT_RATE=${MAX_CLIENT_RATE:-104857600} +export MAX_INTERNET_CLIENT_RATE=${MAX_INTERNET_CLIENT_RATE:-104857600} +export SMOOTH_FRAME_RATE=${SMOOTH_FRAME_RATE:-true} +export SMOOTH_FRAME_RATE_UPPER_LIMIT=${SMOOTH_FRAME_RATE_UPPER_LIMIT:-120.000000} +export SMOOTH_FRAME_RATE_LOWER_LIMIT=${SMOOTH_FRAME_RATE_LOWER_LIMIT:-30.000000} +export USE_FIXED_FRAME_RATE=${USE_FIXED_FRAME_RATE:-false} +export FIXED_FRAME_RATE=${FIXED_FRAME_RATE:-120} +export MIN_DESIRED_FRAME_RATE=${MIN_DESIRED_FRAME_RATE:-60} +export NET_CLIENT_TICKS_PER_SECOND=${NET_CLIENT_TICKS_PER_SECOND:-120} + +if [ "${DEBUG,,}" = true ]; then +cat < "$engine_file" < Date: Mon, 26 Feb 2024 16:20:00 +0100 Subject: [PATCH 02/70] Add support for Mentions --- scripts/backup.sh | 12 ++++++------ scripts/discord.sh | 7 ++++--- scripts/helper_functions.sh | 7 ++++--- scripts/helper_install.sh | 12 ++++++------ scripts/init.sh | 2 +- scripts/start.sh | 4 ++-- scripts/update.sh | 6 +++--- 7 files changed, 26 insertions(+), 24 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 0feaa802a..88437ad4c 100644 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -2,7 +2,7 @@ # shellcheck source=scripts/helper_functions.sh source "/home/steam/server/helper_functions.sh" -DiscordMessage "Creating backup..." "in-progress" +DiscordMessage "Backup" "Creating backup..." "in-progress" if [ "${RCON_ENABLED,,}" = true ]; then save_server fi @@ -18,7 +18,7 @@ if [ "$(id -u)" -eq 0 ]; then chown steam:steam "$FILE_PATH" fi LogInfo "Backup created at ${FILE_PATH}" -DiscordMessage "Backup created at ${FILE_PATH}" "success" +DiscordMessage "Backup" "Backup created at ${FILE_PATH}" "success" if [ "${DELETE_OLD_BACKUPS,,}" != true ]; then exit 0 @@ -26,18 +26,18 @@ fi if [ -z "${OLD_BACKUP_DAYS}" ]; then LogWarn "Unable to delete old backups, OLD_BACKUP_DAYS is empty." - DiscordMessage "Unable to delete old backups, OLD_BACKUP_DAYS is empty." "warn" + DiscordMessage "Backup" "Unable to delete old backups, OLD_BACKUP_DAYS is empty." "warn" exit 0 fi if [[ "${OLD_BACKUP_DAYS}" =~ ^[0-9]+$ ]]; then LogAction "Removing Old Backups" LogInfo "Removing backups older than ${OLD_BACKUP_DAYS} days" - DiscordMessage "Removing backups older than ${OLD_BACKUP_DAYS} days..." "in-progress" + DiscordMessage "Backup" "Removing backups older than ${OLD_BACKUP_DAYS} days..." "in-progress" find /palworld/backups/ -mindepth 1 -maxdepth 1 -mtime "+${OLD_BACKUP_DAYS}" -type f -name 'palworld-save-*.tar.gz' -print -delete - DiscordMessage "Removed backups older than ${OLD_BACKUP_DAYS} days" "success" + DiscordMessage "Backup" "Removed backups older than ${OLD_BACKUP_DAYS} days" "success" exit 0 fi LogError "Unable to delete old backups, OLD_BACKUP_DAYS is not an integer. OLD_BACKUP_DAYS=${OLD_BACKUP_DAYS}" -DiscordMessage "Unable to delete old backups, OLD_BACKUP_DAYS is not an integer. OLD_BACKUP_DAYS=${OLD_BACKUP_DAYS}" "failure" \ No newline at end of file +DiscordMessage "Backup" "Unable to delete old backups, OLD_BACKUP_DAYS is not an integer. OLD_BACKUP_DAYS=${OLD_BACKUP_DAYS}" "failure" \ No newline at end of file diff --git a/scripts/discord.sh b/scripts/discord.sh index 0a890b867..1c9ac4bed 100644 --- a/scripts/discord.sh +++ b/scripts/discord.sh @@ -13,8 +13,9 @@ DISCORD_RED=14614528 DISCORD_GREEN=52224 # Parse arguments -MESSAGE=$1 -LEVEL=$2 +TITLE=$1 +MESSAGE=$2 +LEVEL=$3 if [ -n "${DISCORD_CONNECT_TIMEOUT}" ] && [[ "${DISCORD_CONNECT_TIMEOUT}" =~ ^[0-9]+$ ]]; then CONNECT_TIMEOUT=$DISCORD_CONNECT_TIMEOUT @@ -56,6 +57,6 @@ else COLOR=$DISCORD_BLUE fi -JSON=$(jo embeds[]="$(jo title="$MESSAGE" color=$COLOR)") +JSON=$(jo embeds[]="$(jo title="$TITLE" description="$MESSAGE" color=$COLOR)") LogInfo "Sending Discord json: ${JSON}" curl -sfSL --connect-timeout "$CONNECT_TIMEOUT" --max-time "$MAX_TIMEOUT" -H "Content-Type: application/json" -d "$JSON" "$DISCORD_WEBHOOK_URL" diff --git a/scripts/helper_functions.sh b/scripts/helper_functions.sh index 8e5f36a03..20faa097a 100644 --- a/scripts/helper_functions.sh +++ b/scripts/helper_functions.sh @@ -142,13 +142,14 @@ Log() { # Send Discord Message # Level is optional variable defaulting to info DiscordMessage() { - local message="$1" - local level="$2" + local title="$1" + local message="$2" + local level="$3" if [ -z "$level" ]; then level="info" fi if [ -n "${DISCORD_WEBHOOK_URL}" ]; then - /home/steam/server/discord.sh "$message" "$level" & + /home/steam/server/discord.sh "$title" "$message" "$level" & fi } diff --git a/scripts/helper_install.sh b/scripts/helper_install.sh index 66b5e92c8..abd8747e4 100644 --- a/scripts/helper_install.sh +++ b/scripts/helper_install.sh @@ -64,7 +64,7 @@ UpdateRequired() { if [ "$http_code" -ne 200 ]; then LogError "There was a problem reaching the Steam api. Unable to check for updates!" - DiscordMessage "There was a problem reaching the Steam api. Unable to check for updates!" "failure" + DiscordMessage "Install" "There was a problem reaching the Steam api. Unable to check for updates!" "failure" rm "$temp_file" return 2 fi @@ -75,7 +75,7 @@ UpdateRequired() { if [ -z "$LATEST_MANIFEST" ]; then LogError "The server response does not contain the expected BuildID. Unable to check for updates!" - DiscordMessage "Steam servers response does not contain the expected BuildID. Unable to check for updates!" "failure" + DiscordMessage "Install" "Steam servers response does not contain the expected BuildID. Unable to check for updates!" "failure" return 2 fi @@ -115,9 +115,9 @@ UpdateRequired() { InstallServer() { if [ -z "${TARGET_MANIFEST_ID}" ]; then - DiscordMessage "${DISCORD_PRE_UPDATE_BOOT_MESSAGE}" "in-progress" + DiscordMessage "Install" "${DISCORD_PRE_UPDATE_BOOT_MESSAGE}" "in-progress" /home/steam/steamcmd/steamcmd.sh +@sSteamCmdForcePlatformType linux +@sSteamCmdForcePlatformBitness 64 +force_install_dir "/palworld" +login anonymous +app_update 2394010 validate +quit - DiscordMessage "${DISCORD_POST_UPDATE_BOOT_MESSAGE}" "success" + DiscordMessage "Install" "${DISCORD_POST_UPDATE_BOOT_MESSAGE}" "success" return fi @@ -125,9 +125,9 @@ InstallServer() { targetManifest="${TARGET_MANIFEST_ID}" LogWarn "Installing Target Version: $targetManifest" - DiscordMessage "${DISCORD_PRE_UPDATE_BOOT_MESSAGE}" "in-progress" + DiscordMessage "Install" "${DISCORD_PRE_UPDATE_BOOT_MESSAGE}" "in-progress" /home/steam/steamcmd/steamcmd.sh +@sSteamCmdForcePlatformType linux +@sSteamCmdForcePlatformBitness 64 +force_install_dir "/palworld" +login anonymous +download_depot 2394010 2394012 "$targetManifest" +quit cp -vr "/home/steam/steamcmd/linux32/steamapps/content/app_2394010/depot_2394012/." "/palworld/" CreateACFFile "$targetManifest" - DiscordMessage "${DISCORD_POST_UPDATE_BOOT_MESSAGE}" "success" + DiscordMessage "Install" "${DISCORD_POST_UPDATE_BOOT_MESSAGE}" "success" } diff --git a/scripts/init.sh b/scripts/init.sh index 1c74576d7..cf881ee17 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -26,7 +26,7 @@ mkdir -p /palworld/backups # shellcheck disable=SC2317 term_handler() { - DiscordMessage "${DISCORD_PRE_SHUTDOWN_MESSAGE}" "in-progress" + DiscordMessage "Shutdown" "${DISCORD_PRE_SHUTDOWN_MESSAGE}" "in-progress" if ! shutdown_server; then # Does not save diff --git a/scripts/start.sh b/scripts/start.sh index 4e014c90c..53ac0f326 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -152,10 +152,10 @@ if [ "${ENABLE_PLAYER_LOGGING,,}" = true ] && [[ "${PLAYER_LOGGING_POLL_PERIOD}" fi LogAction "Starting Server" -DiscordMessage "${DISCORD_PRE_START_MESSAGE}" "success" +DiscordMessage "Start" "${DISCORD_PRE_START_MESSAGE}" "success" echo "${STARTCOMMAND[*]}" "${STARTCOMMAND[@]}" -DiscordMessage "${DISCORD_POST_SHUTDOWN_MESSAGE}" "failure" +DiscordMessage "Start" "${DISCORD_POST_SHUTDOWN_MESSAGE}" "failure" exit 0 \ No newline at end of file diff --git a/scripts/update.sh b/scripts/update.sh index c0b033872..87645942e 100644 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -15,18 +15,18 @@ fi if [ "${UPDATE_ON_BOOT,,}" != true ]; then LogWarn "An update is available however, UPDATE_ON_BOOT needs to be enabled for auto updating" - DiscordMessage "An update is available however, UPDATE_ON_BOOT needs to be enabled for auto updating" "warn" + DiscordMessage "Update" "An update is available however, UPDATE_ON_BOOT needs to be enabled for auto updating" "warn" exit 1 fi if [ "${RCON_ENABLED,,}" != true ]; then LogWarn "An update is available however auto updating without rcon is not supported" - DiscordMessage "An update is available however auto updating without rcon is not supported" "warn" + DiscordMessage "Update" "An update is available however auto updating without rcon is not supported" "warn" exit 1 fi if [[ "${AUTO_UPDATE_WARN_MINUTES}" =~ ^[0-9]+$ ]]; then - DiscordMessage "Server will update in ${AUTO_UPDATE_WARN_MINUTES} minutes" + DiscordMessage "Update" "Server will update in ${AUTO_UPDATE_WARN_MINUTES} minutes" fi countdown_message "${AUTO_UPDATE_WARN_MINUTES}" "Server will update" From 39b769847a111a9dfd4bdcda4c802f808ca16579 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Mon, 26 Feb 2024 16:22:19 +0100 Subject: [PATCH 03/70] add documentation --- docusaurus/docs/guides/discord/discord-webhooks.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docusaurus/docs/guides/discord/discord-webhooks.md b/docusaurus/docs/guides/discord/discord-webhooks.md index c5f8346e1..3b6f80bcf 100644 --- a/docusaurus/docs/guides/discord/discord-webhooks.md +++ b/docusaurus/docs/guides/discord/discord-webhooks.md @@ -21,3 +21,7 @@ send discord messages with docker compose: - DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/1234567890/abcde - DISCORD_PRE_UPDATE_BOOT_MESSAGE=Server is updating... ``` + +:::tip +You can mention people in the messages by adding <@user_id> in the message! +::: From 2d7c267a0d925ce359f9be00bbfc25662536e8e9 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Mon, 26 Feb 2024 16:26:09 +0100 Subject: [PATCH 04/70] fix docusaurus --- docusaurus/docs/guides/discord/discord-webhooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus/docs/guides/discord/discord-webhooks.md b/docusaurus/docs/guides/discord/discord-webhooks.md index 3b6f80bcf..5405d9c54 100644 --- a/docusaurus/docs/guides/discord/discord-webhooks.md +++ b/docusaurus/docs/guides/discord/discord-webhooks.md @@ -23,5 +23,5 @@ send discord messages with docker compose: ``` :::tip -You can mention people in the messages by adding <@user_id> in the message! +You can mention people in the messages by adding `<@user_id>` in the message! ::: From 9e269d8d4bcccaf82355813f963cb2d3f822ad5a Mon Sep 17 00:00:00 2001 From: thijsvanloef Date: Tue, 27 Feb 2024 00:08:17 +0000 Subject: [PATCH 05/70] =?UTF-8?q?Deploying=20to=20main=20from=20@=20thijsv?= =?UTF-8?q?anloef/palworld-server-docker@668fd61671578cfc6c28fc1f4f1fcc156?= =?UTF-8?q?bfe2d41=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ca39dd21..04f18d84c 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ This container has also been tested and will work on both `x64` and `ARM64` base Massive shoutout to the following sponsors!

-ShoeBoom  doomhound188  AshishT112203  pabumake  stoprx  KiKoS0  inspired-by-nudes  USA-RedDragon  PulsarFTW   +ShoeBoom  doomhound188  AshishT112203  pabumake  stoprx  KiKoS0  inspired-by-nudes  PulsarFTW  

## Official Documentation From 6bdcf863a712613b595d7dc034fa83306086496b Mon Sep 17 00:00:00 2001 From: Drew Morrison <43414d@gmail.com> Date: Mon, 26 Feb 2024 23:37:05 -0600 Subject: [PATCH 06/70] update "EpicApp=Palserver" to "-publiclobby" per 1.5.0 changes --- scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start.sh b/scripts/start.sh index 4e014c90c..4c7c21afe 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -74,7 +74,7 @@ if [ -n "${QUERY_PORT}" ]; then fi if [ "${COMMUNITY,,}" = true ]; then - STARTCOMMAND+=("EpicApp=PalServer") + STARTCOMMAND+=("-publiclobby") fi if [ "${MULTITHREADING,,}" = true ]; then From cf9ae62aa8aa243c8608e8c3298338f9e6f35d51 Mon Sep 17 00:00:00 2001 From: Drew Morrison <43414d@gmail.com> Date: Tue, 27 Feb 2024 00:12:00 -0600 Subject: [PATCH 07/70] adding bostrt changes --- scripts/start.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/start.sh b/scripts/start.sh index 4c7c21afe..fde95c828 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -81,6 +81,10 @@ if [ "${MULTITHREADING,,}" = true ]; then STARTCOMMAND+=("-useperfthreads" "-NoAsyncLoadingThread" "-UseMultithreadForDS") fi +if [ "${RCON_ENABLED,,}" = true ]; then + STARTCOMMAND+=("-rconport=${RCON_PORT}") +fi + if [ "${DISABLE_GENERATE_SETTINGS,,}" = true ]; then LogAction "GENERATING CONFIG" LogWarn "Env vars will not be applied due to DISABLE_GENERATE_SETTINGS being set to TRUE!" From c220df5681857363b19cbc35cb9334bce482bfcf Mon Sep 17 00:00:00 2001 From: Thijs van Loef <58031337+thijsvanloef@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:34:14 +0100 Subject: [PATCH 08/70] Also check if RCON port is empty --- scripts/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index fde95c828..d4dd3f39e 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -81,7 +81,7 @@ if [ "${MULTITHREADING,,}" = true ]; then STARTCOMMAND+=("-useperfthreads" "-NoAsyncLoadingThread" "-UseMultithreadForDS") fi -if [ "${RCON_ENABLED,,}" = true ]; then +if [ "${RCON_ENABLED,,}" = true ] && [ -n "${RCON_PORT}"]; then STARTCOMMAND+=("-rconport=${RCON_PORT}") fi @@ -162,4 +162,4 @@ echo "${STARTCOMMAND[*]}" "${STARTCOMMAND[@]}" DiscordMessage "${DISCORD_POST_SHUTDOWN_MESSAGE}" "failure" -exit 0 \ No newline at end of file +exit 0 From 6b0c30feabf85655a5dbfbc5ece1906516382039 Mon Sep 17 00:00:00 2001 From: Thijs van Loef <58031337+thijsvanloef@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:34:59 +0100 Subject: [PATCH 09/70] fix linting --- scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start.sh b/scripts/start.sh index d4dd3f39e..06be23f7c 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -81,7 +81,7 @@ if [ "${MULTITHREADING,,}" = true ]; then STARTCOMMAND+=("-useperfthreads" "-NoAsyncLoadingThread" "-UseMultithreadForDS") fi -if [ "${RCON_ENABLED,,}" = true ] && [ -n "${RCON_PORT}"]; then +if [ "${RCON_ENABLED,,}" = true ] && [ -n "${RCON_PORT}" ]; then STARTCOMMAND+=("-rconport=${RCON_PORT}") fi From 6fbc119c6ffe6a80f2de5c1d060be9fd6872cb81 Mon Sep 17 00:00:00 2001 From: Thijs van Loef <58031337+thijsvanloef@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:39:33 +0100 Subject: [PATCH 10/70] use -rcon instead of -rconport --- scripts/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index 06be23f7c..40634f568 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -81,8 +81,8 @@ if [ "${MULTITHREADING,,}" = true ]; then STARTCOMMAND+=("-useperfthreads" "-NoAsyncLoadingThread" "-UseMultithreadForDS") fi -if [ "${RCON_ENABLED,,}" = true ] && [ -n "${RCON_PORT}" ]; then - STARTCOMMAND+=("-rconport=${RCON_PORT}") +if [ "${RCON_ENABLED,,}" = true ]; then + STARTCOMMAND+=("-rcon) fi if [ "${DISABLE_GENERATE_SETTINGS,,}" = true ]; then From 6049118e15bc0f71e9e13c7255ddf21f02246672 Mon Sep 17 00:00:00 2001 From: Thijs van Loef <58031337+thijsvanloef@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:40:15 +0100 Subject: [PATCH 11/70] forgot to close string --- scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start.sh b/scripts/start.sh index 40634f568..4acfdf3af 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -82,7 +82,7 @@ if [ "${MULTITHREADING,,}" = true ]; then fi if [ "${RCON_ENABLED,,}" = true ]; then - STARTCOMMAND+=("-rcon) + STARTCOMMAND+=("-rcon") fi if [ "${DISABLE_GENERATE_SETTINGS,,}" = true ]; then From b0ace2e15581ad4e10e0fa1b9b653ef351eb15f3 Mon Sep 17 00:00:00 2001 From: Muscle Date: Tue, 27 Feb 2024 16:38:33 +0900 Subject: [PATCH 12/70] add default bShowPlayerList=True to PalWorldSettings.ini --- .env.example | 3 ++- scripts/compile-settings.sh | 2 ++ scripts/files/PalWorldSettings.ini.template | 5 +++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index b4ed3d741..ddb969288 100644 --- a/.env.example +++ b/.env.example @@ -81,4 +81,5 @@ ENABLE_DEFENSE_OTHER_GUILD_PLAYER=False COOP_PLAYER_MAX_NUM=4 REGION= USEAUTH=True -BAN_LIST_URL=https://api.palworldgame.com/api/banlist.txt \ No newline at end of file +BAN_LIST_URL=https://api.palworldgame.com/api/banlist.txt +SHOW_PLAYER_LIST=True diff --git a/scripts/compile-settings.sh b/scripts/compile-settings.sh index a7a64f75f..7c4c876cb 100755 --- a/scripts/compile-settings.sh +++ b/scripts/compile-settings.sh @@ -83,6 +83,7 @@ export RCON_PORT=${RCON_PORT:-25575} export REGION=\"${REGION:-""}\" export USEAUTH=${USEAUTH:-True} export BAN_LIST_URL=\"${BAN_LIST_URL:-https://api.palworldgame.com/api/banlist.txt}\" +export SHOW_PLAYER_LIST=${SHOW_PLAYER_LIST:-True} if [ "${DEBUG,,}" = true ]; then cat < Date: Tue, 27 Feb 2024 17:58:26 +0900 Subject: [PATCH 13/70] Update README.md Add description for environment variable SHOW_PLAYER_LIST. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 04f18d84c..c71ae6a9b 100644 --- a/README.md +++ b/README.md @@ -487,6 +487,7 @@ For example: | REGION | Region | | String | | USEAUTH | Use authentication | True | Boolean | | BAN_LIST_URL | Which ban list to use | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| SHOW_PLAYER_LIST | Enable show player list | True | Boolean | ### Manually From 5a05f3c62fdc1f82b05c282fb9231927a0b6403f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=99=E3=82=8B?= <158264076+MusclePr@users.noreply.github.com> Date: Tue, 27 Feb 2024 18:04:18 +0900 Subject: [PATCH 14/70] Update game-settings.md Add description for environment variable SHOW_PLAYER_LIST. --- docusaurus/docs/getting-started/configuration/game-settings.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docusaurus/docs/getting-started/configuration/game-settings.md b/docusaurus/docs/getting-started/configuration/game-settings.md index 8b4503b1a..48b2644f7 100644 --- a/docusaurus/docs/getting-started/configuration/game-settings.md +++ b/docusaurus/docs/getting-started/configuration/game-settings.md @@ -81,6 +81,7 @@ For example: | REGION | Region | | String | | USEAUTH | Use authentication | True | Boolean | | BAN_LIST_URL | Which ban list to use | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| SHOW_PLAYER_LIST | Enable show player list | True | Boolean | | TARGET_MANIFEST_ID | Locks game version to corespond with Manfiest ID from Steam Download Depot. | | See [Manifest ID Table](https://palworld-server-docker.loef.dev/guides/pinning-game-version) | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | | PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | From 1b816303ae405809b359ecd3d26fea66eeae3414 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Tue, 27 Feb 2024 10:17:22 +0100 Subject: [PATCH 15/70] change arm base image --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5c8358231..a1b7aa102 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN wget -q https://github.com/gorcon/rcon-cli/archive/refs/tags/v${RCON_VERSION FROM cm2network/steamcmd:root as base-amd64 # Ignoring --platform=arm64 as this is required for the multi-arch build to continue to work on amd64 hosts # hadolint ignore=DL3029 -FROM --platform=arm64 sonroyaalmerol/steamcmd-arm64:root as base-arm64 +FROM --platform=arm64 thijsvanloef/steamcmd-arm64:root as base-arm64 ARG TARGETARCH # Ignoring the lack of a tag here because the tag is defined in the above FROM lines From 40da74492547c5a178ef6946b59e7f350141a63e Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Tue, 27 Feb 2024 10:20:01 +0100 Subject: [PATCH 16/70] trigger build From 232e7375737217ee59b1dca26d9ccafd55896628 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Tue, 27 Feb 2024 11:30:39 +0100 Subject: [PATCH 17/70] fix typos --- .../getting-started/configuration/engine-settings.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docusaurus/docs/getting-started/configuration/engine-settings.md b/docusaurus/docs/getting-started/configuration/engine-settings.md index bb1d68fcd..ab50d5627 100644 --- a/docusaurus/docs/getting-started/configuration/engine-settings.md +++ b/docusaurus/docs/getting-started/configuration/engine-settings.md @@ -9,14 +9,14 @@ Changing Engine Settings with Environment variables. ## With Environment Variables :::warning -These Environment Variables and Settings are subject to change since the game is still in beta. +These environment variables and settings are subject to change since the game is still in beta. ::: Converting engine settings to environment variables follow the same principles (with some exceptions): -* all capital letters -* split words by inserting an underscore -* remove the single letter if the setting starts with one (like 'b') +* All capital letters +* Split words by inserting an underscore +* Remove the single letter if the setting starts with one (like 'b') For example: @@ -41,6 +41,6 @@ For example: | NET_CLIENT_TICKS_PER_SECOND | Increases the update frequency for clients, enhancing responsiveness and reducing lag. | 120 | Integer | :::tip -While setting the server tickrate above to 120 fps will make some gameplay aspect smother, +While setting the server tickrate above to 120 fps will make some gameplay aspect smoother, it won't fix rubber-banding and will tax your hardware significantly more. ::: From 9f3d535ffa083c52f6f6b3c15a1ed9c5f24d9b25 Mon Sep 17 00:00:00 2001 From: Son Date: Tue, 27 Feb 2024 08:38:53 -0500 Subject: [PATCH 18/70] Add ARM_COMPATIBILITY_MODE as env option to switch over to qemu --- Dockerfile | 5 +++-- README.md | 1 + .../docs/getting-started/configuration/server-settings.md | 1 + scripts/start.sh | 4 ++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index a1b7aa102..d1144eaa3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN wget -q https://github.com/gorcon/rcon-cli/archive/refs/tags/v${RCON_VERSION FROM cm2network/steamcmd:root as base-amd64 # Ignoring --platform=arm64 as this is required for the multi-arch build to continue to work on amd64 hosts # hadolint ignore=DL3029 -FROM --platform=arm64 thijsvanloef/steamcmd-arm64:root as base-arm64 +FROM --platform=arm64 sonroyaalmerol/steamcmd-arm64:root as base-arm64 ARG TARGETARCH # Ignoring the lack of a tag here because the tag is defined in the above FROM lines @@ -108,7 +108,8 @@ ENV HOME=/home/steam \ DISCORD_PRE_SHUTDOWN_MESSAGE="Server is shutting down..." \ DISCORD_POST_SHUTDOWN_MESSAGE="Server has been stopped!" \ ENABLE_PLAYER_LOGGING=true \ - PLAYER_LOGGING_POLL_PERIOD=5 + PLAYER_LOGGING_POLL_PERIOD=5 \ + ARM_COMPATIBILITY_MODE=false COPY ./scripts /home/steam/server/ diff --git a/README.md b/README.md index 04f18d84c..e486d7e9c 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,7 @@ It is highly recommended you set the following environment values before startin | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | | PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | +| ARM_COMPATIBILITY_MODE | Switches the compatibility layer from Box86 to QEMU when executing steamcmd for server updates. This setting is only applicable for ARM64 hosts. | false | true/false | *highly recommended to set diff --git a/docusaurus/docs/getting-started/configuration/server-settings.md b/docusaurus/docs/getting-started/configuration/server-settings.md index fa8596d6d..319e0d48a 100644 --- a/docusaurus/docs/getting-started/configuration/server-settings.md +++ b/docusaurus/docs/getting-started/configuration/server-settings.md @@ -58,6 +58,7 @@ It is highly recommended you set the following environment values before startin | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | | PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | +| ARM_COMPATIBILITY_MODE | Switches the compatibility layer from Box86 to QEMU when executing steamcmd for server updates. This setting is only applicable for ARM64 hosts. | false | true/false | *highly recommended to set diff --git a/scripts/start.sh b/scripts/start.sh index 4acfdf3af..681a14a59 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -24,6 +24,10 @@ if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ]; then exit 1 fi +if [ "$architecture" == "arm64" ] && [ "${ARM_COMPATIBILITY_MODE,,}" = true ]; then + export DEBUGGER="/usr/bin/qemu-i386-static" +fi + IsInstalled ServerInstalled=$? if [ "$ServerInstalled" == 1 ]; then From f8b2770beaeef4e384fc953cdfd985f8e2b0fa8a Mon Sep 17 00:00:00 2001 From: Son Date: Tue, 27 Feb 2024 09:08:48 -0500 Subject: [PATCH 19/70] add CPU_MHZ arbitrary value and LogInfo --- scripts/start.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/start.sh b/scripts/start.sh index 681a14a59..ecd9cea41 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -25,7 +25,11 @@ if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ]; then fi if [ "$architecture" == "arm64" ] && [ "${ARM_COMPATIBILITY_MODE,,}" = true ]; then + LogInfo "ARM compatibility mode enabled" export DEBUGGER="/usr/bin/qemu-i386-static" + + # Arbitrary number to avoid CPU_MHZ warning due to qemu and steamcmd + export CPU_MHZ=2000 fi IsInstalled From 718081163e27b86cb2877bd8204f668640a16dba Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Tue, 27 Feb 2024 17:56:34 +0100 Subject: [PATCH 20/70] remove page size check --- scripts/start.sh | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index ecd9cea41..77e40df9f 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -15,15 +15,6 @@ cd /palworld || exit # Get the architecture using dpkg architecture=$(dpkg --print-architecture) -# Get host kernel page size -kernel_page_size=$(getconf PAGESIZE) - -# Check kernel page size for arm64 hosts before running steamcmdac -if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ]; then - LogError "Only ARM64 hosts with 4k page size is supported." - exit 1 -fi - if [ "$architecture" == "arm64" ] && [ "${ARM_COMPATIBILITY_MODE,,}" = true ]; then LogInfo "ARM compatibility mode enabled" export DEBUGGER="/usr/bin/qemu-i386-static" From e40b22198de6f05761e4f6e2f65930b933fd974c Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Tue, 27 Feb 2024 17:58:32 +0100 Subject: [PATCH 21/70] add check with campatibility mode --- scripts/start.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/start.sh b/scripts/start.sh index 77e40df9f..50bc1bb19 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -15,6 +15,15 @@ cd /palworld || exit # Get the architecture using dpkg architecture=$(dpkg --print-architecture) +# Get host kernel page size +kernel_page_size=$(getconf PAGESIZE) + +# Check kernel page size for arm64 hosts before running steamcmdac +if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ] && [ "${ARM_COMPATIBILITY_MODE,,}" = false ]; then + LogError "4k page size detected, please run with ARM_COMPATIBILITY_MODE=true" + exit 1 +fi + if [ "$architecture" == "arm64" ] && [ "${ARM_COMPATIBILITY_MODE,,}" = true ]; then LogInfo "ARM compatibility mode enabled" export DEBUGGER="/usr/bin/qemu-i386-static" From b79374649746bb666ef12806df096bef889caa48 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Tue, 27 Feb 2024 17:59:35 +0100 Subject: [PATCH 22/70] forgot slash --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 95f6cc704..336e4759c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -109,7 +109,7 @@ ENV HOME=/home/steam \ DISCORD_POST_SHUTDOWN_MESSAGE="Server has been stopped!" \ ENABLE_PLAYER_LOGGING=true \ PLAYER_LOGGING_POLL_PERIOD=5 \ - ARM_COMPATIBILITY_MODE=false + ARM_COMPATIBILITY_MODE=false \ DISABLE_GENERATE_ENGINE=true COPY ./scripts /home/steam/server/ From ca741e9f1218b44ebf0af245f3aa8fe976d272d7 Mon Sep 17 00:00:00 2001 From: Son Date: Tue, 27 Feb 2024 14:46:04 -0500 Subject: [PATCH 23/70] revert page size checker --- scripts/start.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index 15a9b654a..3817dcc62 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -18,9 +18,9 @@ architecture=$(dpkg --print-architecture) # Get host kernel page size kernel_page_size=$(getconf PAGESIZE) -# Check kernel page size for arm64 hosts before running steamcmdac -if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ] && [ "${ARM_COMPATIBILITY_MODE,,}" = false ]; then - LogError "4k page size detected, please run with ARM_COMPATIBILITY_MODE=true" +# Check kernel page size for arm64 hosts before running steamcmd +if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ]; then + LogError "Only ARM64 hosts with 4k page size is supported." exit 1 fi From f84e250c1ec3db4e3c22797343fece0312f7b692 Mon Sep 17 00:00:00 2001 From: Son Date: Tue, 27 Feb 2024 17:30:13 -0500 Subject: [PATCH 24/70] add arm64 known issues to docusaurus --- docusaurus/docs/known-issues/known-issues.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docusaurus/docs/known-issues/known-issues.md b/docusaurus/docs/known-issues/known-issues.md index 0fc3e3765..6d3929922 100644 --- a/docusaurus/docs/known-issues/known-issues.md +++ b/docusaurus/docs/known-issues/known-issues.md @@ -56,6 +56,26 @@ it means that you'll need to look at the following: * Firewall settings, make sure that you allow port 8211/udp and 27015/udp through your firewall * Make sure you've correctly port forwarded your 8211/udp 27015/udp +## Only ARM64 hosts with 4k page size is supported. + +This error occurs when the container detects that the host kernel does not have a 4k page size, which is required for the emulation used for ARM64 architecture. The container relies on this specific page size for proper execution. + +If the host kernel does not have a 4k page size, you have a couple of alternatives: + +- **Change Kernel**: You can consider changing the kernel of your host machine to one that supports a 4k page size. The Raspberry Pi 5 with Raspberry Pi OS has an easy [switch](https://github.com/raspberrypi/bookworm-feedback/issues/107#issuecomment-1773810662). However, this might not always be the case for other machines and operating systems. + +- **Run within a VM**: Another option is to run the container within a virtual machine (VM) that is configured with a kernel supporting a 4k page size. By doing so, you can ensure compatibility and proper execution of the container. Debian and Ubuntu are known working Linux distros. + +## /usr/local/bin/box86: cannot execute binary file: Exec format error (ARM64 hosts) + +This means that the Docker host is unable to run AArch32 binaries such as Box86 without an additional compatibility layer which is the case for Apple Silicon. + +Docker Desktop solves this by running its containers inside a VM (QEMU) with a compatible kernel. However, if you're unable to use Docker Desktop, then try setting `ARM_COMPATIBILITY_MODE` to `true`. This will switch the container from using Box86 to QEMU when running steamcmd. + +--- + +Feel free to customize this FAQ section based on your specific container and use case. + ## FAQ [A useful FAQ that gets updated regularly](https://gist.github.com/Toakan/3c78a577c21a21fcc5fa917f3021d70e#file-palworld-server-faq-community-md) From 22185ad1c7d1f3618f637e3a1c50c0e47590f25a Mon Sep 17 00:00:00 2001 From: Son Date: Tue, 27 Feb 2024 17:43:02 -0500 Subject: [PATCH 25/70] Fix markdown lint errors --- docusaurus/docs/known-issues/known-issues.md | 22 ++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docusaurus/docs/known-issues/known-issues.md b/docusaurus/docs/known-issues/known-issues.md index 6d3929922..6fe9001ca 100644 --- a/docusaurus/docs/known-issues/known-issues.md +++ b/docusaurus/docs/known-issues/known-issues.md @@ -56,21 +56,31 @@ it means that you'll need to look at the following: * Firewall settings, make sure that you allow port 8211/udp and 27015/udp through your firewall * Make sure you've correctly port forwarded your 8211/udp 27015/udp -## Only ARM64 hosts with 4k page size is supported. +## Only ARM64 hosts with 4k page size is supported -This error occurs when the container detects that the host kernel does not have a 4k page size, which is required for the emulation used for ARM64 architecture. The container relies on this specific page size for proper execution. +This error occurs when the container detects that the host kernel does not have a 4k page size, +which is required for the emulation used for ARM64 architecture. The container relies on this specific page +size for proper execution. If the host kernel does not have a 4k page size, you have a couple of alternatives: +* **Change/Modify Kernel**: You can consider changing the kernel of your host machine to one that supports a 4k page size. + * The Raspberry Pi 5 with Raspberry Pi OS has an easy [switch](https://github.com/raspberrypi/bookworm-feedback/issues/107#issuecomment-1773810662). -- **Change Kernel**: You can consider changing the kernel of your host machine to one that supports a 4k page size. The Raspberry Pi 5 with Raspberry Pi OS has an easy [switch](https://github.com/raspberrypi/bookworm-feedback/issues/107#issuecomment-1773810662). However, this might not always be the case for other machines and operating systems. +* **Switch OS**: Another option is to switch OS to ones shipped with 4k page size kernels. + * Debian and Ubuntu are known working Linux distros. -- **Run within a VM**: Another option is to run the container within a virtual machine (VM) that is configured with a kernel supporting a 4k page size. By doing so, you can ensure compatibility and proper execution of the container. Debian and Ubuntu are known working Linux distros. +* **Run within a VM**: Another option is to run the container within a virtual machine (VM) that is configured + with a kernel supporting a 4k page size. By doing so, you can ensure compatibility and proper execution of the + container. ## /usr/local/bin/box86: cannot execute binary file: Exec format error (ARM64 hosts) -This means that the Docker host is unable to run AArch32 binaries such as Box86 without an additional compatibility layer which is the case for Apple Silicon. +This means that the Docker host is unable to run AArch32 binaries such as Box86 without an additional +compatibility layer which is the case for Apple Silicon. -Docker Desktop solves this by running its containers inside a VM (QEMU) with a compatible kernel. However, if you're unable to use Docker Desktop, then try setting `ARM_COMPATIBILITY_MODE` to `true`. This will switch the container from using Box86 to QEMU when running steamcmd. +Docker Desktop solves this by running its containers inside a VM (QEMU) with a compatible kernel. +However, if you're unable to use Docker Desktop, then try setting `ARM_COMPATIBILITY_MODE` to `true`. +This will switch the container from using Box86 to QEMU when running steamcmd. --- From e2872feccbb186c1cabf3b947a6274bd4684fb4d Mon Sep 17 00:00:00 2001 From: Son Date: Tue, 27 Feb 2024 17:44:27 -0500 Subject: [PATCH 26/70] fix md lint errors again --- docusaurus/docs/known-issues/known-issues.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docusaurus/docs/known-issues/known-issues.md b/docusaurus/docs/known-issues/known-issues.md index 6fe9001ca..ad87e276e 100644 --- a/docusaurus/docs/known-issues/known-issues.md +++ b/docusaurus/docs/known-issues/known-issues.md @@ -63,11 +63,12 @@ which is required for the emulation used for ARM64 architecture. The container r size for proper execution. If the host kernel does not have a 4k page size, you have a couple of alternatives: + * **Change/Modify Kernel**: You can consider changing the kernel of your host machine to one that supports a 4k page size. - * The Raspberry Pi 5 with Raspberry Pi OS has an easy [switch](https://github.com/raspberrypi/bookworm-feedback/issues/107#issuecomment-1773810662). + * The Raspberry Pi 5 with Raspberry Pi OS has an easy [switch](https://github.com/raspberrypi/bookworm-feedback/issues/107#issuecomment-1773810662). * **Switch OS**: Another option is to switch OS to ones shipped with 4k page size kernels. - * Debian and Ubuntu are known working Linux distros. + * Debian and Ubuntu are known working Linux distros. * **Run within a VM**: Another option is to run the container within a virtual machine (VM) that is configured with a kernel supporting a 4k page size. By doing so, you can ensure compatibility and proper execution of the From 4e938dbae7792509df1b83f472ade27721779fc7 Mon Sep 17 00:00:00 2001 From: Son Date: Tue, 27 Feb 2024 17:48:08 -0500 Subject: [PATCH 27/70] remove unnecessary part --- docusaurus/docs/known-issues/known-issues.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docusaurus/docs/known-issues/known-issues.md b/docusaurus/docs/known-issues/known-issues.md index ad87e276e..870446436 100644 --- a/docusaurus/docs/known-issues/known-issues.md +++ b/docusaurus/docs/known-issues/known-issues.md @@ -83,10 +83,6 @@ Docker Desktop solves this by running its containers inside a VM (QEMU) with a c However, if you're unable to use Docker Desktop, then try setting `ARM_COMPATIBILITY_MODE` to `true`. This will switch the container from using Box86 to QEMU when running steamcmd. ---- - -Feel free to customize this FAQ section based on your specific container and use case. - ## FAQ [A useful FAQ that gets updated regularly](https://gist.github.com/Toakan/3c78a577c21a21fcc5fa917f3021d70e#file-palworld-server-faq-community-md) From 490353c7120912272bec3b405b0d40f936f41f45 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Wed, 28 Feb 2024 09:33:10 +0100 Subject: [PATCH 28/70] Add DISABLE_GENERATE_ENGINE to docs --- README.md | 1 + .../docs/getting-started/configuration/engine-settings.md | 3 +++ .../docs/getting-started/configuration/server-settings.md | 1 + 3 files changed, 5 insertions(+) diff --git a/README.md b/README.md index c71ae6a9b..05019634b 100644 --- a/README.md +++ b/README.md @@ -241,6 +241,7 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | +| DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | | PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | diff --git a/docusaurus/docs/getting-started/configuration/engine-settings.md b/docusaurus/docs/getting-started/configuration/engine-settings.md index ab50d5627..e6178d014 100644 --- a/docusaurus/docs/getting-started/configuration/engine-settings.md +++ b/docusaurus/docs/getting-started/configuration/engine-settings.md @@ -12,6 +12,8 @@ Changing Engine Settings with Environment variables. These environment variables and settings are subject to change since the game is still in beta. ::: +To use these settings you must set `DISABLE_GENERATE_ENGINE: false`. + Converting engine settings to environment variables follow the same principles (with some exceptions): * All capital letters @@ -26,6 +28,7 @@ For example: | Variable | Description | Default Value | Allowed Value | |-------------------------------|-----------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| DISABLE_GENERATE_ENGINE | Disable the generation of the Engine.ini | true | Boolean | | LAN_SERVER_MAX_TICK_RATE | Sets maximum ticks per second for LAN servers, higher rates result in smoother gameplay. | 120 | Integer | | NET_SERVER_MAX_TICK_RATE | Sets maximum ticks per second for Internet servers, similarly ensuring smoother online gameplay. | 120 | Integer | | CONFIGURED_INTERNET_SPEED | Sets the assumed player internet speed in bytes per second. High value reduces chances of bandwidth throttling. | 104857600 | Integer (in bytes) | diff --git a/docusaurus/docs/getting-started/configuration/server-settings.md b/docusaurus/docs/getting-started/configuration/server-settings.md index fa8596d6d..096968930 100644 --- a/docusaurus/docs/getting-started/configuration/server-settings.md +++ b/docusaurus/docs/getting-started/configuration/server-settings.md @@ -56,6 +56,7 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | +| DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | | PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | From b91c46d17a11a4601cceace1b942eac77e766ed2 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Wed, 28 Feb 2024 09:41:08 +0100 Subject: [PATCH 29/70] add rcon-wrapper docs --- docusaurus/docs/guides/rcon/_category_.json | 7 +++++++ docusaurus/docs/guides/rcon/rcon-wrapper.md | 6 ++++++ 2 files changed, 13 insertions(+) create mode 100644 docusaurus/docs/guides/rcon/_category_.json create mode 100644 docusaurus/docs/guides/rcon/rcon-wrapper.md diff --git a/docusaurus/docs/guides/rcon/_category_.json b/docusaurus/docs/guides/rcon/_category_.json new file mode 100644 index 000000000..e7e977c2c --- /dev/null +++ b/docusaurus/docs/guides/rcon/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "RCON (Advanced)", + "position": 3, + "link": { + "type": "generated-index" + } +} diff --git a/docusaurus/docs/guides/rcon/rcon-wrapper.md b/docusaurus/docs/guides/rcon/rcon-wrapper.md new file mode 100644 index 000000000..ffff9e134 --- /dev/null +++ b/docusaurus/docs/guides/rcon/rcon-wrapper.md @@ -0,0 +1,6 @@ +# RCON Wrapper + +GitHub user [valamidev](https://github.com/valamidev) made a plugin `for palworld-server-docker` +that allows you to protect the palworld RCON end-point with a Bearer token and access it via HTTP protocol. + +More information on his GitHub Repo: [valamidev/palworld-rcon-buddy](https://github.com/valamidev/palworld-rcon-buddy) From 423bf67069d58e81eb30dd621b6bee7b4d0691ef Mon Sep 17 00:00:00 2001 From: Son Date: Wed, 28 Feb 2024 12:23:54 -0500 Subject: [PATCH 30/70] move page size checker to InstallServer --- scripts/helper_install.sh | 10 ++++++++++ scripts/start.sh | 9 --------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/scripts/helper_install.sh b/scripts/helper_install.sh index abd8747e4..523ab00d4 100644 --- a/scripts/helper_install.sh +++ b/scripts/helper_install.sh @@ -113,6 +113,16 @@ UpdateRequired() { } InstallServer() { + # Get the architecture using dpkg + architecture=$(dpkg --print-architecture) + + # Get host kernel page size + kernel_page_size=$(getconf PAGESIZE) + + # Check kernel page size for arm64 hosts before running steamcmd + if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ]; then + LogWarn "WARNING: Only ARM64 hosts with 4k page size is supported when running steamcmd. Expect server installation to fail." + fi if [ -z "${TARGET_MANIFEST_ID}" ]; then DiscordMessage "Install" "${DISCORD_PRE_UPDATE_BOOT_MESSAGE}" "in-progress" diff --git a/scripts/start.sh b/scripts/start.sh index 3817dcc62..38fc6f0ac 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -15,15 +15,6 @@ cd /palworld || exit # Get the architecture using dpkg architecture=$(dpkg --print-architecture) -# Get host kernel page size -kernel_page_size=$(getconf PAGESIZE) - -# Check kernel page size for arm64 hosts before running steamcmd -if [ "$architecture" == "arm64" ] && [ "$kernel_page_size" != "4096" ]; then - LogError "Only ARM64 hosts with 4k page size is supported." - exit 1 -fi - if [ "$architecture" == "arm64" ] && [ "${ARM_COMPATIBILITY_MODE,,}" = true ]; then LogInfo "ARM compatibility mode enabled" export DEBUGGER="/usr/bin/qemu-i386-static" From f786d95d7813354a017f9cb241b9e7dbe420bd97 Mon Sep 17 00:00:00 2001 From: Son Date: Wed, 28 Feb 2024 12:38:25 -0500 Subject: [PATCH 31/70] additional alternative to documentation --- docusaurus/docs/known-issues/known-issues.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docusaurus/docs/known-issues/known-issues.md b/docusaurus/docs/known-issues/known-issues.md index 870446436..c452bb6fd 100644 --- a/docusaurus/docs/known-issues/known-issues.md +++ b/docusaurus/docs/known-issues/known-issues.md @@ -64,6 +64,11 @@ size for proper execution. If the host kernel does not have a 4k page size, you have a couple of alternatives: +* **Download server files in a different machine**: The 4k page size limitation is only applicable for steamcmd +ARM emulation. You may try initializing the container in a fully supported machine (AMD64 or ARM64 with 4k page size) +and let it download the server files with `UPDATE_ON_BOOT` enabled. Make sure to disable `UPDATE_ON_BOOT` in the +problematic machine to prevent steamcmd from executing. + * **Change/Modify Kernel**: You can consider changing the kernel of your host machine to one that supports a 4k page size. * The Raspberry Pi 5 with Raspberry Pi OS has an easy [switch](https://github.com/raspberrypi/bookworm-feedback/issues/107#issuecomment-1773810662). From c4a73724001f617a31cb7d0cdb7133b66321138e Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Wed, 28 Feb 2024 19:15:55 +0100 Subject: [PATCH 32/70] update manifest id, fix typo --- README.md | 1 + docusaurus/docs/guides/pinning-game-version.md | 1 + docusaurus/docs/guides/rcon/rcon-wrapper.md | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 05019634b..c1fa16e13 100644 --- a/README.md +++ b/README.md @@ -542,6 +542,7 @@ The manifest corresponds to the release date/update versions. Manifests can be f | 1.3.0 | 1354752814336157338 | | 1.4.0 | 4190579964382773830 | | 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | ## Reporting Issues/Feature Requests diff --git a/docusaurus/docs/guides/pinning-game-version.md b/docusaurus/docs/guides/pinning-game-version.md index abcd4a4bc..4d60aef9b 100644 --- a/docusaurus/docs/guides/pinning-game-version.md +++ b/docusaurus/docs/guides/pinning-game-version.md @@ -20,3 +20,4 @@ The manifest corresponds to the release date/update versions. Manifests can be f | 1.3.0 | 1354752814336157338 | | 1.4.0 | 4190579964382773830 | | 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | diff --git a/docusaurus/docs/guides/rcon/rcon-wrapper.md b/docusaurus/docs/guides/rcon/rcon-wrapper.md index ffff9e134..fd9eed81c 100644 --- a/docusaurus/docs/guides/rcon/rcon-wrapper.md +++ b/docusaurus/docs/guides/rcon/rcon-wrapper.md @@ -1,6 +1,6 @@ # RCON Wrapper -GitHub user [valamidev](https://github.com/valamidev) made a plugin `for palworld-server-docker` +GitHub user [valamidev](https://github.com/valamidev) made a plugin for `palworld-server-docker` that allows you to protect the palworld RCON end-point with a Bearer token and access it via HTTP protocol. More information on his GitHub Repo: [valamidev/palworld-rcon-buddy](https://github.com/valamidev/palworld-rcon-buddy) From ae8ef2ce05bba2cae38ad2fd4f01cee0b910091f Mon Sep 17 00:00:00 2001 From: Tom Pietsch Date: Thu, 29 Feb 2024 00:58:08 +0100 Subject: [PATCH 33/70] updated german sites and added new sites according to the changes since last translation --- .../configuration/engine-settings.md | 49 +++++++++++ .../configuration/game-settings.md | 7 +- .../configuration/server-commands.md | 2 +- .../configuration/server-settings.md | 81 ++++++++++--------- .../guides/automatic-server-stopping.md | 10 +++ .../guides/discord/discord-webhooks.md | 4 + .../current/guides/pinning-game-version.md | 1 + .../current/guides/rcon/_category_.json | 7 ++ .../current/guides/rcon/rcon-wrapper.md | 8 ++ .../current/known-issues/known-issues.md | 15 ++++ 10 files changed, 143 insertions(+), 41 deletions(-) create mode 100644 docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md create mode 100644 docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md create mode 100644 docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/_category_.json create mode 100644 docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/rcon-wrapper.md diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md new file mode 100644 index 000000000..e47a48d6d --- /dev/null +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 3 +--- + +# Engine-Einstellungen + +Ändern der Engine-Einstellungen mit Umgebungsvariablen. + +## Mit Umgebungsvariablen + +:::warning +Diese Umgebungsvariablen und Einstellungen können sich ändern, da das Spiel sich noch in der Beta-Phase befindet. +::: + +Um diese Einstellungen zu nutzen, musst du `DISABLE_GENERATE_ENGINE: false` setzen. + +Um Engine-Einstellungen in Umgebungsvariablen zu konvertieren müssen folgende Regeln eingehalten werden: + +* alle Buchstaben groß schreiben +* Wörter durch Einfügen eines Unterstrichs trennen +* falls die Einstellung mit einem einzelnen Buchstaben beginnt, muss dieser entfernt werden (z.B. 'b') + +Beispiel: + +* LanServerMaxTickRate -> LAN_SERVER_MAX_TICK_RATE +* bUseFixedFrameRate -> USE_FIXED_FRAME_RATE +* NetClientTicksPerSecond -> NET_CLIENT_TICKS_PER_SECOND + +| Variable | Beschreibung | Standardwert | Erlaubter Wert | +| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------- | +| DISABLE_GENERATE_ENGINE | Deaktiviert die Generierung der Engine.ini | true | Boolean | +| LAN_SERVER_MAX_TICK_RATE | Setzt die maximale Anzahl an Ticks pro Sekunde für LAN-Server. Höhere Raten sorgen für ein flüssigeres Gameplay. | 120 | Integer | +| NET_SERVER_MAX_TICK_RATE | Setzt die maximale Anzahl an Ticks pro Sekunde für dedizierte Server, um ein ebenso flüssiges Online-Spiel zu gewährleisten. | 120 | Integer | +| CONFIGURED_INTERNET_SPEED | Setzt die angenommene Internetgeschwindigkeit der Spieler in Bytes pro Sekunde. Ein hoher Wert reduziert die Wahrscheinlichkeit von Bandbreiten-Drosselung. | 104857600 | Integer (in Bytes) | +| CONFIGURED_LAN_SPEED | Setzt die LAN-Geschwindigkeit, um sicherzustellen, dass LAN-Spieler die maximale Netzwerkkapazität nutzen können. | 104857600 | GInteger (in Bytes) | +| MAX_CLIENT_RATE | Maximale Datenübertragungsrate pro Client für alle Verbindungen, um eine Datenbeschränkung zu verhindern. | 104857600 | Integer (in Bytes) | +| MAX_INTERNET_CLIENT_RATE | Zielt speziell auf Internet-Clients ab, um eine uneingeschränkte Datenübertragung in großem Umfang zu ermöglichen. | 104857600 | Integer (in Bytes) | +| SMOOTH_FRAME_RATE | Ermöglicht es der Spiel-Engine, Schwankungen der Bildrate auszugleichen, für ein konsistenteres visuelles Erlebnis. | true | Boolean | +| SMOOTH_FRAME_RATE_UPPER_LIMIT | Setzt einen maximalen Ziel-Bildratenbereich für die Frame-Glättung fest. | 120.000000 | Float | +| SMOOTH_FRAME_RATE_LOWER_LIMIT | Setzt einen minimalen Ziel-Bildratenbereich für die Frame-Glättung fest. | 30.000000 | Float | +| USE_FIXED_FRAME_RATE | Aktiviert die Verwendung einer festen Bildrate | false | Boolean | +| FIXED_FRAME_RATE | Feste Bildrate | 120.000000 | Float | +| MIN_DESIRED_FRAME_RATE | Legt eine minimale akzeptable Bildrate fest, um sicherzustellen, dass das Spiel zumindest mit dieser Bildrate flüssig läuft. | 60.000000 | Float | +| NET_CLIENT_TICKS_PER_SECOND | Erhöht die Update-Frequenz für Clients, um die Reaktionsfähigkeit zu verbessern und die Verzögerung zu reduzieren. | 120 | Integer | + +:::tip +Das Erhöhen der Server-Tickrate auf über 120 fps macht zwar einige Gameplay-Aspekte flüssiger, +behebt jedoch keine Ruckler und belastet deine Hardware erheblich mehr. +::: diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md index bf1406ed2..9fdf5498a 100644 --- a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md @@ -29,8 +29,8 @@ Beispiele: | Variable | Beschreibung | Standardwert | Erlaubte Werte | |-------------------------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------| | DIFFICULTY | Spiel-Schwierigkeitsgrad | None | `None`,`Normal`,`Difficult` | -| DAYTIME_SPEEDRATE | Tageszeit-Geschwindigkeit - Kleinerer Wert bedeutet kürzere Tage | 1.000000 | Float | -| NIGHTTIME_SPEEDRATE | Nachtszeit-Geschwindigkeit - Kleinerer Wert bedeutet kürzere Nächte | 1.000000 | Float | +| DAYTIME_SPEEDRATE | Tageszeit-Geschwindigkeit - Größerer Wert bedeutet kürzere Tage | 1.000000 | Float | +| NIGHTTIME_SPEEDRATE | Nachtszeit-Geschwindigkeit - Größerer Wert bedeutet kürzere Nächte | 1.000000 | Float | | EXP_RATE | EXP-Sammelrate | 1.000000 | Float | | PAL_CAPTURE_RATE | Pal-Fangrate | 1.000000 | Float | | PAL_SPAWN_NUM_RATE | Pal-Erscheinungsrate | 1.000000 | Float | @@ -81,7 +81,10 @@ Beispiele: | REGION | Region | | String | | USEAUTH | Authentifizierung verwenden | True | Boolean | | BAN_LIST_URL | Welche Sperrliste verwenden | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| SHOW_PLAYER_LIST | Aktiviert die Anzeige der Spieler | True | Boolean | | TARGET_MANIFEST_ID | Legt die Spielversion entsprechend der Manifest-ID aus dem Steam-Download-Depot fest. | | Siehe [Manifest IDs](https://palworld-server-docker.loef.dev/de/guides/pinning-game-version) | +| ENABLE_PLAYER_LOGGING | Aktiviert das Protokollieren und das Ankündigen, wenn Spieler dem Spiel beitreten und es verlassen. | true | Boolean | +| PLAYER_LOGGING_POLL_PERIOD | Abfrageintervall (in Sekunden), um zu überprüfen, ob Spieler dem Spiel beigetreten sind oder es verlassen haben. | 5 | !0 | ### Manuell diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md index 69f4f47f7..51fa833ef 100644 --- a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +sidebar_position: 4 --- # Serverbefehle (RCON) diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md index f783a0a22..477c6c9ba 100644 --- a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md @@ -16,44 +16,49 @@ Es wird dringend empfohlen, die folgenden Umgebungsvariablen festzulegen, bevor * PUID * PGID -| Variable | Info | Standardwerte | Erlaubte Werte | -|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|---------------------------------------------------------------------------------------| -| TZ | Zeitzone, die für die Zeitstempel des Backup-Servers verwendet wird | UTC | Siehe [TZ-Identifikatoren](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | -| PLAYERS* | Maximale Anzahl von Spielern, die dem Server beitreten können | 16 | 1-32 | -| PORT* | UDP-Port, den der Server freigibt | 8211 | 1024-65535 | -| PUID* | Die Benutzer-ID des Benutzers, unter dem der Server ausgeführt werden soll | 1000 | !0 | -| PGID* | Die Gruppen-ID der Gruppe, unter der der Server ausgeführt werden soll | 1000 | !0 | -| MULTITHREADING** | Verbessert die Leistung in Umgebungen mit mehreren Threads. Es ist bis zu einer maximalen Anzahl von etwa 4 Threads effektiv, und das Zuweisen von mehr Threads als dieser Anzahl macht nicht viel Sinn. | false | true/false | -| COMMUNITY | Ob der Server im Community-Server-Browser angezeigt wird (VERWENDEN SIE ES AUSSCHLIEẞLICH MIT SERVER_PASSWORD!) | false | true/false | -| PUBLIC_IP | Sie können die globale IP-Adresse des Netzwerks angeben, auf dem der Server ausgeführt wird. Wenn nicht angegeben, wird sie automatisch erkannt. Wenn dies nicht gut funktioniert, versuchen Sie eine manuelle Konfiguration. | | x.x.x.x | -| PUBLIC_PORT | Sie können die Portnummer des Netzwerks angeben, auf dem der Server ausgeführt wird. Wenn nicht angegeben, wird sie automatisch erkannt. Wenn dies nicht gut funktioniert, versuchen Sie eine manuelle Konfiguration. | | 1024-65535 | -| SERVER_NAME | Ein Name für Ihren Server | | "string" | -| SERVER_DESCRIPTION | Ihre Serverbeschreibung | | "string" | -| SERVER_PASSWORD | Sichern Sie Ihren Community-Server mit einem Passwort | | "string" | -| ADMIN_PASSWORD | Sichern Sie den Administrationszugriff auf dem Server mit einem Passwort | | "string" | -| UPDATE_ON_BOOT** | Update/Installieren Sie den Server, wenn der Docker-Container gestartet wird (DIESES MUSS BEIM ERSTEN MAL, WENN SIE DEN CONTAINER AUSFÜHREN, AKTIVIERT WERDEN) | true | true/false | -| RCON_ENABLED*** | Aktivieren Sie RCON für den Palworld-Server | true | true/false | -| RCON_PORT | RCON-Port, um eine Verbindung herzustellen | 25575 | 1024-65535 | -| QUERY_PORT | Abfrageport, der zur Kommunikation mit Steam-Servern verwendet wird | 27015 | 1024-65535 | -| BACKUP_CRON_EXPRESSION | Einstellung beeinflusst die Häufigkeit automatischer Backups. | 0 0 \* \* \* | Erfordert einen Cron-Ausdruck - Siehe [Konfigurieren automatischer Backups mit Cron](https://palworld-server-docker.loef.dev/de/guides/backup/automated-backup) | -| BACKUP_ENABLED | Aktiviert automatische Backups | true | true/false | -| DELETE_OLD_BACKUPS | Löscht Backups nach einer bestimmten Anzahl von Tagen | false | true/false | -| OLD_BACKUP_DAYS | Wie viele Tage sollen Backups aufbewahrt werden | 30 | jede positive Ganzzahl | -| AUTO_UPDATE_CRON_EXPRESSION | Einstellung beeinflusst die Häufigkeit automatischer Updates. | 0 \* \* \* \* | Erfordert einen Cron-Ausdruck - Siehe [Konfigurieren automatischer Updates mit Cron](https://palworld-server-docker.loef.dev/de/guides/automatic-updates) | -| AUTO_UPDATE_ENABLED | Aktiviert automatische Updates | false | true/false | -| AUTO_UPDATE_WARN_MINUTES | Wie lange soll gewartet werden, um den Server zu aktualisieren, nachdem die Spieler informiert wurden. | 30 | !0 | -| AUTO_REBOOT_CRON_EXPRESSION | Einstellung beeinflusst die Häufigkeit automatischer Neustarts. | 0 0 \* \* \* | Erfordert einen Cron-Ausdruck - Siehe [Konfigurieren automatischer Neustarts mit Cron](https://palworld-server-docker.loef.dev/de/guides/automatic-reboots) | -| AUTO_REBOOT_ENABLED | Aktiviert automatische Neustarts | false | true/false | -| AUTO_REBOOT_WARN_MINUTES | Wie lange soll gewartet werden, um den Server neu zu starten, nachdem die Spieler informiert wurden. | 5 | !0 | -| AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Starten Sie den Server neu, auch wenn Spieler online sind. | false | true/false | -| DISCORD_WEBHOOK_URL | Discord-Webhook-URL, die nach Erstellung eines Webhooks auf einem Discord-Server gefunden werden kann | | `https://discord.com/api/webhooks/` | -| DISCORD_CONNECT_TIMEOUT | Discord-Befehlsverbindungstimeout | 30 | !0 | -| DISCORD_MAX_TIMEOUT | Discord-Webhook Timeout | 30 | !0 | -| DISCORD_PRE_UPDATE_BOOT_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server mit dem Update beginnt | Server wird aktualisiert... | "string" | -| DISCORD_POST_UPDATE_BOOT_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server das Update abgeschlossen hat | Serverupdate abgeschlossen! | "string" | -| DISCORD_PRE_START_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server mit dem Starten beginnt | Server wurde gestartet! | "string" | -| DISCORD_PRE_SHUTDOWN_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server mit dem Herunterfahren beginnt | Server wird heruntergefahren... | "string" | -| DISCORD_POST_SHUTDOWN_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server gestoppt wurde | Server wurde gestoppt! | "string" | +| Variable | Info | Standardwerte | Erlaubte Werte | +| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| TZ | Zeitzone, die für die Zeitstempel des Backup-Servers verwendet wird | UTC | Siehe [TZ-Identifikatoren](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | +| PLAYERS* | Maximale Anzahl von Spielern, die dem Server beitreten können | 16 | 1-32 | +| PORT* | UDP-Port, den der Server freigibt | 8211 | 1024-65535 | +| PUID* | Die Benutzer-ID des Benutzers, unter dem der Server ausgeführt werden soll | 1000 | !0 | +| PGID* | Die Gruppen-ID der Gruppe, unter der der Server ausgeführt werden soll | 1000 | !0 | +| MULTITHREADING** | Verbessert die Leistung in Umgebungen mit mehreren Threads. Es ist bis zu einer maximalen Anzahl von etwa 4 Threads effektiv, und das Zuweisen von mehr Threads als dieser Anzahl macht nicht viel Sinn. | false | true/false | +| COMMUNITY | Ob der Server im Community-Server-Browser angezeigt wird (VERWENDEN SIE ES AUSSCHLIEẞLICH MIT SERVER_PASSWORD!) | false | true/false | +| PUBLIC_IP | Sie können die globale IP-Adresse des Netzwerks angeben, auf dem der Server ausgeführt wird. Wenn nicht angegeben, wird sie automatisch erkannt. Wenn dies nicht gut funktioniert, versuchen Sie eine manuelle Konfiguration. | | x.x.x.x | +| PUBLIC_PORT | Sie können die Portnummer des Netzwerks angeben, auf dem der Server ausgeführt wird. Wenn nicht angegeben, wird sie automatisch erkannt. Wenn dies nicht gut funktioniert, versuchen Sie eine manuelle Konfiguration. | | 1024-65535 | +| SERVER_NAME | Ein Name für Ihren Server | | "string" | +| SERVER_DESCRIPTION | Ihre Serverbeschreibung | | "string" | +| SERVER_PASSWORD | Sichern Sie Ihren Community-Server mit einem Passwort | | "string" | +| ADMIN_PASSWORD | Sichern Sie den Administrationszugriff auf dem Server mit einem Passwort | | "string" | +| UPDATE_ON_BOOT** | Update/Installieren Sie den Server, wenn der Docker-Container gestartet wird (DIESES MUSS BEIM ERSTEN MAL, WENN SIE DEN CONTAINER AUSFÜHREN, AKTIVIERT WERDEN) | true | true/false | +| RCON_ENABLED*** | Aktivieren Sie RCON für den Palworld-Server | true | true/false | +| RCON_PORT | RCON-Port, um eine Verbindung herzustellen | 25575 | 1024-65535 | +| QUERY_PORT | Abfrageport, der zur Kommunikation mit Steam-Servern verwendet wird | 27015 | 1024-65535 | +| BACKUP_CRON_EXPRESSION | Einstellung beeinflusst die Häufigkeit automatischer Backups. | 0 0 \* \* \* | Erfordert einen Cron-Ausdruck - Siehe [Konfigurieren automatischer Backups mit Cron](https://palworld-server-docker.loef.dev/de/guides/backup/automated-backup) | +| BACKUP_ENABLED | Aktiviert automatische Backups | true | true/false | +| DELETE_OLD_BACKUPS | Löscht Backups nach einer bestimmten Anzahl von Tagen | false | true/false | +| OLD_BACKUP_DAYS | Wie viele Tage sollen Backups aufbewahrt werden | 30 | jede positive Ganzzahl | +| AUTO_UPDATE_CRON_EXPRESSION | Einstellung beeinflusst die Häufigkeit automatischer Updates. | 0 \* \* \* \* | Erfordert einen Cron-Ausdruck - Siehe [Konfigurieren automatischer Updates mit Cron](https://palworld-server-docker.loef.dev/de/guides/automatic-updates) | +| AUTO_UPDATE_ENABLED | Aktiviert automatische Updates | false | true/false | +| AUTO_UPDATE_WARN_MINUTES | Wie lange soll gewartet werden, um den Server zu aktualisieren, nachdem die Spieler informiert wurden. | 30 | !0 | +| AUTO_REBOOT_CRON_EXPRESSION | Einstellung beeinflusst die Häufigkeit automatischer Neustarts. | 0 0 \* \* \* | Erfordert einen Cron-Ausdruck - Siehe [Konfigurieren automatischer Neustarts mit Cron](https://palworld-server-docker.loef.dev/de/guides/automatic-reboots) | +| AUTO_REBOOT_ENABLED | Aktiviert automatische Neustarts | false | true/false | +| AUTO_REBOOT_WARN_MINUTES | Wie lange soll gewartet werden, um den Server neu zu starten, nachdem die Spieler informiert wurden. | 5 | !0 | +| AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Starten Sie den Server neu, auch wenn Spieler online sind. | false | true/false | +| TARGET_MANIFEST_ID | Legt die Spielversion entsprechend der Manifest-ID aus dem Steam-Download-Depot fest. | | See [Manifest ID Table](https://palworld-server-docker.loef.dev/guides/pinning-game-version#version-to-manifest-id-table) | +| DISCORD_WEBHOOK_URL | Discord-Webhook-URL, die nach Erstellung eines Webhooks auf einem Discord-Server gefunden werden kann | | `https://discord.com/api/webhooks/` | +| DISCORD_CONNECT_TIMEOUT | Discord-Befehlsverbindungstimeout | 30 | !0 | +| DISCORD_MAX_TIMEOUT | Discord-Webhook Timeout | 30 | !0 | +| DISCORD_PRE_UPDATE_BOOT_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server mit dem Update beginnt | Server wird aktualisiert... | "string" | +| DISCORD_POST_UPDATE_BOOT_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server das Update abgeschlossen hat | Serverupdate abgeschlossen! | "string" | +| DISCORD_PRE_START_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server mit dem Starten beginnt | Server wurde gestartet! | "string" | +| DISCORD_PRE_SHUTDOWN_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server mit dem Herunterfahren beginnt | Server wird heruntergefahren... | "string" | +| DISCORD_POST_SHUTDOWN_MESSAGE | Discord-Nachricht, die gesendet wird, wenn der Server gestoppt wurde | Server wurde gestoppt! | "string" | +| DISABLE_GENERATE_SETTINGS | Ob die PalWorldSettings.ini automatisch generiert werden soll | false | true/false | +| DISABLE_GENERATE_ENGINE | Ob die Engine.ini automatisch generiert werden soll | true | true/false | +| ENABLE_PLAYER_LOGGING | Aktiviert das Protokollieren und die Benachrichtigung, wenn Spieler dem Spiel beitreten und es verlassen. | true | true/false | +| PLAYER_LOGGING_POLL_PERIOD | Abfrageintervall (in Sekunden), um zu überprüfen, ob Spieler dem Spiel beigetreten sind oder es verlassen haben. | 5 | !0 | *dringend empfohlen, festzulegen diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md new file mode 100644 index 000000000..13db8116d --- /dev/null +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md @@ -0,0 +1,10 @@ +--- +sidebar_position: 8 +--- + +# Server stoppen, wenn keine Spieler verbunden sind + +Der User [dnwjn](https://github.com/dnwjn) hat einen Docker-Container erstellt, der den Palworld-Server stoppt, wenn +keine Spieler verbunden sind, und den Container startet, wenn ein Spieler versucht, sich erneut zu verbinden. + +Für die offizielle Dokumentation zu diesem Feature besuche bitte das [dnwjn/palworld-server-watcher Repository](https://github.com/dnwjn/palworld-server-watcher). diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/discord/discord-webhooks.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/discord/discord-webhooks.md index 5e4b0095f..cb6650b69 100644 --- a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/discord/discord-webhooks.md +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/discord/discord-webhooks.md @@ -22,3 +22,7 @@ Senden Sie Discord-Nachrichten mit `docker-compose`: - DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/1234567890/abcde - DISCORD_PRE_UPDATE_BOOT_MESSAGE=Der Server wird aktualisiert... ``` + +:::tip +Du kannst Personen in den Nachrichten erwähnen, indem du `<@user_id>` in die Nachricht einfügst! +::: diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md index 37eb61402..2cc5543fa 100644 --- a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md @@ -23,3 +23,4 @@ von SteamCMD oder Websites wie [SteamDB](https://steamdb.info/depot/2394012/mani | 1.3.0 | 1354752814336157338 | | 1.4.0 | 4190579964382773830 | | 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/_category_.json b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/_category_.json new file mode 100644 index 000000000..b3246617f --- /dev/null +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "RCON (Fortgeschritten)", + "position": 3, + "link": { + "type": "generated-index" + } +} diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/rcon-wrapper.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/rcon-wrapper.md new file mode 100644 index 000000000..eee170e42 --- /dev/null +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/guides/rcon/rcon-wrapper.md @@ -0,0 +1,8 @@ +# RCON Wrapper + +Der GitHub-User [valamidev](https://github.com/valamidev) hat ein Plugin für +`palworld-server-docker` erstellt, das es ermöglicht, den Palworld RCON-Endpunkt mit einem +Bearer-Token zu schützen und über das HTTP-Protokoll darauf zuzugreifen. + +Weitere Informationen findest du in seinem GitHub-Repo: +[valamidev/palworld-rcon-buddy](https://github.com/valamidev/palworld-rcon-buddy) diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/known-issues/known-issues.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/known-issues/known-issues.md index 754fda50c..a5d5bc708 100644 --- a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/known-issues/known-issues.md +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/known-issues/known-issues.md @@ -6,6 +6,21 @@ sidebar_position: 5 Bekannte Probleme bei der Verwendung dieses Docker-Images. +## PalWorldSettings.ini wird immer zurückgesetzt + +Wenn die `PalworldSettings.ini` zurückgesetzt wird, nachdem du die Datei geändert und den Server neu gestartet hast, +dann stelle sicher, dass `DISABLE_GENERATE_SETTINGS` auf `true` gesetzt ist. + +Falls das nicht der Fall ist, werden deine Einstellungen von den über die [Umgebungsvariablen gesetzten Einstellungen](https://palworld-server-docker.loef.dev/getting-started/configuration/game-settings) überschrieben. + +:::tip +Es wird empfohlen, die Umgebungsvariablen zu verwenden, um deine Spiel-Einstellungen festzulegen, anstatt +die `PalWorldSettings.ini` manuell zu ändern. + +Wenn du die Datei dennoch manuell ändern möchtest, stelle sicher, dass der Server ausgeschaltet ist, wenn du die +Änderungen vornimmst. +::: + ## Broadcast-Befehl kann nur 1 Wort senden Beim Verwenden eines Broadcasts über RCON wird nur ein Wort gesendet. From 19d80b062aaa64ead5b44e69551c1184a75ccd95 Mon Sep 17 00:00:00 2001 From: thijsvanloef Date: Thu, 29 Feb 2024 00:07:24 +0000 Subject: [PATCH 34/70] =?UTF-8?q?Deploying=20to=20main=20from=20@=20thijsv?= =?UTF-8?q?anloef/palworld-server-docker@3d8b011262478631fc352c1d20020d231?= =?UTF-8?q?21b2f85=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c1fa16e13..a8e8c95f6 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ This container has also been tested and will work on both `x64` and `ARM64` base Massive shoutout to the following sponsors!

-ShoeBoom  doomhound188  AshishT112203  pabumake  stoprx  KiKoS0  inspired-by-nudes  PulsarFTW   +doomhound188  AshishT112203  pabumake  stoprx  KiKoS0  inspired-by-nudes  PulsarFTW  

## Official Documentation From 2e896c000ce9193484fd7f05e44b5c33daba3c52 Mon Sep 17 00:00:00 2001 From: Son Date: Wed, 28 Feb 2024 19:54:34 -0500 Subject: [PATCH 35/70] use different box64 binary based on pagesize --- scripts/start.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index 38fc6f0ac..57518d7d8 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -45,8 +45,23 @@ fi if [ "$architecture" == "arm64" ]; then # create an arm64 version of ./PalServer.sh cp ./PalServer.sh ./PalServer-arm64.sh - # shellcheck disable=SC2016 - sed -i 's|\("$UE_PROJECT_ROOT\/Pal\/Binaries\/Linux\/PalServer-Linux-Test" Pal "$@"\)|LD_LIBRARY_PATH=/home/steam/steamcmd/linux64:$LD_LIBRARY_PATH box64 \1|' ./PalServer-arm64.sh + + pagesize=$(getconf PAGESIZE) + box64_binary="/usr/local/bin/box64" + + case $pagesize in + 8192) + box64_binary="/usr/local/bin/box64-8k" + ;; + 16384) + box64_binary="/usr/local/bin/box64-16k" + ;; + 65536) + box64_binary="/usr/local/bin/box64-64k" + ;; + esac + + sed -i "s|\(\"\$UE_PROJECT_ROOT/Pal/Binaries/Linux/PalServer-Linux-Test\" Pal \"\$@\"\)|LD_LIBRARY_PATH=/home/steam/steamcmd/linux64:\$LD_LIBRARY_PATH $box64_binary \1|" ./PalServer-arm64.sh chmod +x ./PalServer-arm64.sh STARTCOMMAND=("./PalServer-arm64.sh") else From f18811f1a59d9db3b78e4aa5ac83f2854e26d568 Mon Sep 17 00:00:00 2001 From: Son Date: Wed, 28 Feb 2024 20:13:12 -0500 Subject: [PATCH 36/70] forgot to escape slashes --- scripts/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index 57518d7d8..c5501f886 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -60,8 +60,8 @@ if [ "$architecture" == "arm64" ]; then box64_binary="/usr/local/bin/box64-64k" ;; esac - - sed -i "s|\(\"\$UE_PROJECT_ROOT/Pal/Binaries/Linux/PalServer-Linux-Test\" Pal \"\$@\"\)|LD_LIBRARY_PATH=/home/steam/steamcmd/linux64:\$LD_LIBRARY_PATH $box64_binary \1|" ./PalServer-arm64.sh + + sed -i "s|\(\"\$UE_PROJECT_ROOT\/Pal\/Binaries\/Linux\/PalServer-Linux-Test\" Pal \"\$@\"\)|LD_LIBRARY_PATH=/home/steam/steamcmd/linux64:\$LD_LIBRARY_PATH $box64_binary \1|" ./PalServer-arm64.sh chmod +x ./PalServer-arm64.sh STARTCOMMAND=("./PalServer-arm64.sh") else From 2f428187a3a432c21da5199e15430e4cc3ba9893 Mon Sep 17 00:00:00 2001 From: Son Date: Wed, 28 Feb 2024 20:55:48 -0500 Subject: [PATCH 37/70] add log info and remove absolute paths --- scripts/start.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index c5501f886..bd9822ca5 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -47,17 +47,20 @@ if [ "$architecture" == "arm64" ]; then cp ./PalServer.sh ./PalServer-arm64.sh pagesize=$(getconf PAGESIZE) - box64_binary="/usr/local/bin/box64" + box64_binary="box64" case $pagesize in 8192) - box64_binary="/usr/local/bin/box64-8k" + LogInfo "Using Box64 for 8k pagesize" + box64_binary="box64-8k" ;; 16384) - box64_binary="/usr/local/bin/box64-16k" + LogInfo "Using Box64 for 16k pagesize" + box64_binary="box64-16k" ;; 65536) - box64_binary="/usr/local/bin/box64-64k" + LogInfo "Using Box64 for 64k pagesize" + box64_binary="box64-64k" ;; esac From 675954443b6e277721424fe2bf72414ec534d285 Mon Sep 17 00:00:00 2001 From: 43414d <116867332+43414d@users.noreply.github.com> Date: Thu, 29 Feb 2024 00:26:40 -0600 Subject: [PATCH 38/70] Remove -rcon arg statement -rcon is no longer needed as of the 1.5.1 fix, seems like it was bugged in 1.5.0 and not pulling correctly from config --- scripts/start.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index 4acfdf3af..6d88a77ee 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -81,10 +81,6 @@ if [ "${MULTITHREADING,,}" = true ]; then STARTCOMMAND+=("-useperfthreads" "-NoAsyncLoadingThread" "-UseMultithreadForDS") fi -if [ "${RCON_ENABLED,,}" = true ]; then - STARTCOMMAND+=("-rcon") -fi - if [ "${DISABLE_GENERATE_SETTINGS,,}" = true ]; then LogAction "GENERATING CONFIG" LogWarn "Env vars will not be applied due to DISABLE_GENERATE_SETTINGS being set to TRUE!" From 6d0efb468fa1a53912ceb85e5e0ee869482cfaef Mon Sep 17 00:00:00 2001 From: Son Date: Thu, 29 Feb 2024 17:24:06 -0500 Subject: [PATCH 39/70] pin arm64 base image --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 336e4759c..3f515a334 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN wget -q https://github.com/gorcon/rcon-cli/archive/refs/tags/v${RCON_VERSION FROM cm2network/steamcmd:root as base-amd64 # Ignoring --platform=arm64 as this is required for the multi-arch build to continue to work on amd64 hosts # hadolint ignore=DL3029 -FROM --platform=arm64 sonroyaalmerol/steamcmd-arm64:root as base-arm64 +FROM --platform=arm64 sonroyaalmerol/steamcmd-arm64:root-2024-02-29 as base-arm64 ARG TARGETARCH # Ignoring the lack of a tag here because the tag is defined in the above FROM lines From 63eefd6246fc81574984f9d8d6f295c61f556a99 Mon Sep 17 00:00:00 2001 From: chowhi123 <61570417+chowhi123@users.noreply.github.com> Date: Thu, 29 Feb 2024 19:51:21 -0500 Subject: [PATCH 40/70] Update ko-kr README.md Updated to follow current en README.md --- docs/kr/README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/kr/README.md b/docs/kr/README.md index 13f317fa7..657024dd7 100644 --- a/docs/kr/README.md +++ b/docs/kr/README.md @@ -34,7 +34,7 @@ 다음 스폰서들에게 큰 박수를 보냅니다!

-ShoeBoom  doomhound188  AshishT112203  pabumake   +doomhound188  AshishT112203  pabumake  stoprx  KiKoS0  inspired-by-nudes  PulsarFTW  

## Official Documentation @@ -161,6 +161,30 @@ docker run -d \ 공식 Helm 차트는 별도의 저장소에서 찾을 수 있습니다, [palworld-server-chart](https://github.com/Twinki14/palworld-server-chart) +### 루트권한 없이 실행하기 + +해당 항목은 고급사용자를 위한 항목입니다. + +해당 컨테이너는 [기본사용자 덮어씌우기](https://docs.docker.com/engine/reference/run/#user)가 가능합니다. 해당 이미지의 기본사용자는 루트입니다. + +사용자가 유저와 그룹을 설정하기 떄문에 `PUID`와 `PGID`가 무시됩니다. + +UID를 찾으려면: `id -u`를 사용합니다. +GID를 찾으려면: `id -g`를 사용합니다. + +반드시 유저를 `NUMBERICAL_UID:NUMBERICAL_GID`와 같이 설정하셔야합니다. + +아래는 UID를 1000으로 GID를 1001로 가정해 작성된 예제문입니다. + +* docker run에서 `--user 1000:1001 \`를 마지막 줄위에 추가하세요. +* docker compose에서 `user: 1000:1001`를 포트설정위에 추가하세요. + +만약 다른 UID/GID를 사용해 실행하려면 디렉토리의 소유권을 변경해야합니다: `chown UID:GID palworld/` 또는 모든 계정의 권한를 수정하셔야합니다: `chmod o=rwx palworld/` + +#### helm chart 사용 + +공식 helm chart 사용법은 다른 리포지토리에 있습니다, [palworld-server-chart](https://github.com/Twinki14/palworld-server-chart) + ### 환경 변수 다음 값을 사용하여 부팅 시 서버의 설정을 변경할 수 있습니다. @@ -200,6 +224,8 @@ docker run -d \ | AUTO_REBOOT_CRON_EXPRESSION | 자동 서버 재부팅 주기 | 0 0 \* \* \* | Cron 표현식 필요 - [cron을 이용한 자동 재부팅 설정](#cron을-이용한-자동-재부팅-설정) 참조 | | AUTO_REBOOT_ENABLED | 자동 서버 재부팅 활성화 여부 | false | true/false | | AUTO_REBOOT_WARN_MINUTES | 재부팅 대기 시간 설정(분), 이때 사용자는 분 단위로 서버 종료에 대한 알림을 받습니다. | 5 | !0 | +| AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | 온라인 사용자가 있어도 재시작. | false | true/false | +| TARGET_MANIFEST_ID | 게임의 버젼을 스팀 다운로드 디포의 해당 Manifest ID로 고정. | | [Manifest ID Table](#locking-specific-game-version) 보 | DISCORD_WEBHOOK_URL | 디스코드 웹훅 URL | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | 디스코드 명령 초기 연결 시간 초과 | 30 | !0 | | DISCORD_MAX_TIMEOUT | Discord 총 훅 시간 초과 | 30 | !0 | @@ -209,6 +235,9 @@ docker run -d \ | DISCORD_PRE_SHUTDOWN_MESSAGE | 서버가 종료되기 시작할 때 전송되는 디스코드 메시지 | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | 서버가 멈췄을 때 전송되는 디스코드 메시지 | Server is stopped! | "string" | | DISABLE_GENERATE_SETTINGS | 자동으로 PalWorldSettings.ini를 생성할지 여부 | false | true/false | +| DISABLE_GENERATE_ENGINE | 자동으로 Engine.ini를 생성할지 여부 | true | true/false | +| ENABLE_PLAYER_LOGGING | 플레이어가 접속 또는 종료시 로깅과 공지를 활성화 | true | true/false | +| PLAYER_LOGGING_POLL_PERIOD | 플레이어의 접속과 종료를 확인하기위한 폴링시간(초) 설정| 5 | !0 | *설정하는 것을 적극 권장합니다. @@ -445,6 +474,7 @@ AUTO_REBOOT_CRON_EXPRESSION을 설정하여 기본 스케줄을 변경하세요. | REGION | Region | | String | | USEAUTH | 인증 사용 여부 | True | Boolean | | BAN_LIST_URL | 사용할 BAN 목록 | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| SHOW_PLAYER_LIST | Enable show player list | True | Boolean | ### 수동 설정 @@ -486,6 +516,26 @@ docker compose로 디스코드 메시지 보내기: - DISCORD_PRE_UPDATE_BOOT_MESSAGE=Server is updating... ``` +## 게임버전 고정하기 + +>[!WARNING] +>다운그레이딩이 가능하나 세이브 파일에 어떠한 영향이 있을지 알 수 없습니다. +> +>**본인의 책임하에 하세요!** + +만약 **TARGET_MANIFEST_ID** 환경변수가 정해졌다면, 서버의 버전은 특정 manifest로 고정됩니다. +Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. + +### 버전별 Manifest ID 표 + +| Version | Manifest ID | +|---------|----------------------| +| 1.3.0 | 1354752814336157338 | +| 1.4.0 | 4190579964382773830 | +| 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | + + ## 이슈/기능 요청 문제/기능 요청은 다음 [링크](https://github.com/thijsvanloef/palworld-server-docker/issues/new/choose)에서 제출할 수 있습니다. From 6d82bef7d6a6aeec11638c5ba08c59a28a7b5788 Mon Sep 17 00:00:00 2001 From: chowhi123 <61570417+chowhi123@users.noreply.github.com> Date: Thu, 29 Feb 2024 19:52:11 -0500 Subject: [PATCH 41/70] Update en README.md to correct spelling mistakes Update en README.md to correct spelling mistakes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8e8c95f6..da6e4c26f 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,7 @@ It is highly recommended you set the following environment values before startin | AUTO_REBOOT_ENABLED | Enables automatic reboots | false | true/false | | AUTO_REBOOT_WARN_MINUTES | How long to wait to reboot the server, after the player were informed. | 5 | Integer | | AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Restart the Server even if there are players online. | false | true/false | -| TARGET_MANIFEST_ID | Locks game version to corespond with Manfiest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | +| TARGET_MANIFEST_ID | Locks game version to corespond with Manifest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | | DISCORD_WEBHOOK_URL | Discord webhook url found after creating a webhook on a discord server | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | Discord command initial connection timeout | 30 | !0 | | DISCORD_MAX_TIMEOUT | Discord total hook timeout | 30 | !0 | From b05473c6d35bf01f81e595caad613e2f6d085bd4 Mon Sep 17 00:00:00 2001 From: Drew Morrison <43414d@gmail.com> Date: Fri, 1 Mar 2024 01:13:26 -0600 Subject: [PATCH 42/70] rcon legacy fix for v0.1.5.0 --- Dockerfile | 6 +++--- docker-compose.yml | 2 +- scripts/start.sh | 5 +++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5c8358231..9d4f29df4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,11 +28,11 @@ ARG TARGETARCH # hadolint ignore=DL3006 FROM base-${TARGETARCH} -LABEL maintainer="thijs@loef.dev" \ - name="thijsvanloef/palworld-server-docker" \ +LABEL maintainer="43414d@gmail.com" \ + name="43414d/palworld-server-docker" \ github="https://github.com/thijsvanloef/palworld-server-docker" \ dockerhub="https://hub.docker.com/r/thijsvanloef/palworld-server-docker" \ - org.opencontainers.image.authors="Thijs van Loef" \ + org.opencontainers.image.authors="43414d" \ org.opencontainers.image.source="https://github.com/thijsvanloef/palworld-server-docker" # set envs diff --git a/docker-compose.yml b/docker-compose.yml index da115d291..87b04a81a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ --- services: palworld: - image: thijsvanloef/palworld-server-docker:latest + image: 43414d/palworld-server-docker:latest restart: unless-stopped container_name: palworld-server stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop diff --git a/scripts/start.sh b/scripts/start.sh index 6d88a77ee..977ecc11a 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -81,6 +81,11 @@ if [ "${MULTITHREADING,,}" = true ]; then STARTCOMMAND+=("-useperfthreads" "-NoAsyncLoadingThread" "-UseMultithreadForDS") fi +# fix bug and enable rcon for v0.1.5.0 only +if [ "${TARGET_MANIFEST_ID}" == "3750364703337203431"] && [-a "${RCON_ENABLED,,}" = true ]; then + STARTCOMMAND+=("-rcon") +fi + if [ "${DISABLE_GENERATE_SETTINGS,,}" = true ]; then LogAction "GENERATING CONFIG" LogWarn "Env vars will not be applied due to DISABLE_GENERATE_SETTINGS being set to TRUE!" From 1eb28fb6b576909923073ea3f47c1dc3ac56cbba Mon Sep 17 00:00:00 2001 From: Drew Morrison <43414d@gmail.com> Date: Fri, 1 Mar 2024 01:16:11 -0600 Subject: [PATCH 43/70] revert to original files --- Dockerfile | 6 +++--- docker-compose.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9d4f29df4..5c8358231 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,11 +28,11 @@ ARG TARGETARCH # hadolint ignore=DL3006 FROM base-${TARGETARCH} -LABEL maintainer="43414d@gmail.com" \ - name="43414d/palworld-server-docker" \ +LABEL maintainer="thijs@loef.dev" \ + name="thijsvanloef/palworld-server-docker" \ github="https://github.com/thijsvanloef/palworld-server-docker" \ dockerhub="https://hub.docker.com/r/thijsvanloef/palworld-server-docker" \ - org.opencontainers.image.authors="43414d" \ + org.opencontainers.image.authors="Thijs van Loef" \ org.opencontainers.image.source="https://github.com/thijsvanloef/palworld-server-docker" # set envs diff --git a/docker-compose.yml b/docker-compose.yml index 87b04a81a..da115d291 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ --- services: palworld: - image: 43414d/palworld-server-docker:latest + image: thijsvanloef/palworld-server-docker:latest restart: unless-stopped container_name: palworld-server stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop From dab12eb29e8c7edcf05a0e1b0197c1ad3529ed73 Mon Sep 17 00:00:00 2001 From: Drew Morrison <43414d@gmail.com> Date: Fri, 1 Mar 2024 01:19:46 -0600 Subject: [PATCH 44/70] lint fix --- scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start.sh b/scripts/start.sh index 977ecc11a..335f01af0 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -82,7 +82,7 @@ if [ "${MULTITHREADING,,}" = true ]; then fi # fix bug and enable rcon for v0.1.5.0 only -if [ "${TARGET_MANIFEST_ID}" == "3750364703337203431"] && [-a "${RCON_ENABLED,,}" = true ]; then +if [ "${TARGET_MANIFEST_ID}" == "3750364703337203431" ] && [ "${RCON_ENABLED,,}" = true ]; then STARTCOMMAND+=("-rcon") fi From 3dbf063cc888a49e357d0a760eb8111370d1ec4c Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Fri, 1 Mar 2024 10:13:24 +0100 Subject: [PATCH 45/70] also update manifest id's --- README.md | 1 + docusaurus/docs/guides/pinning-game-version.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index a8e8c95f6..3517fbcb0 100644 --- a/README.md +++ b/README.md @@ -543,6 +543,7 @@ The manifest corresponds to the release date/update versions. Manifests can be f | 1.4.0 | 4190579964382773830 | | 1.4.1 | 6370735655629434989 | | 1.5.0 | 3750364703337203431 | +| 1.5.1 | 2815085007637542021 | ## Reporting Issues/Feature Requests diff --git a/docusaurus/docs/guides/pinning-game-version.md b/docusaurus/docs/guides/pinning-game-version.md index 4d60aef9b..abdafc3e9 100644 --- a/docusaurus/docs/guides/pinning-game-version.md +++ b/docusaurus/docs/guides/pinning-game-version.md @@ -21,3 +21,4 @@ The manifest corresponds to the release date/update versions. Manifests can be f | 1.4.0 | 4190579964382773830 | | 1.4.1 | 6370735655629434989 | | 1.5.0 | 3750364703337203431 | +| 1.5.1 | 2815085007637542021 | From b8a5e55b11d16aefe5ae973715f7a121635b6940 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Fri, 1 Mar 2024 10:16:38 +0100 Subject: [PATCH 46/70] fix linting issues --- docs/kr/README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/kr/README.md b/docs/kr/README.md index 657024dd7..8ba2773c1 100644 --- a/docs/kr/README.md +++ b/docs/kr/README.md @@ -190,10 +190,10 @@ GID를 찾으려면: `id -g`를 사용합니다. 다음 값을 사용하여 부팅 시 서버의 설정을 변경할 수 있습니다. 서버를 시작하기 전에 다음 환경 변수를 설정하는 것이 좋습니다: -- PLAYERS -- PORT -- PUID -- PGID +* PLAYERS +* PORT +* PUID +* PGID | 변수명 | 정보 | 기본값 | 허용되는 값 | | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------ | @@ -225,7 +225,7 @@ GID를 찾으려면: `id -g`를 사용합니다. | AUTO_REBOOT_ENABLED | 자동 서버 재부팅 활성화 여부 | false | true/false | | AUTO_REBOOT_WARN_MINUTES | 재부팅 대기 시간 설정(분), 이때 사용자는 분 단위로 서버 종료에 대한 알림을 받습니다. | 5 | !0 | | AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | 온라인 사용자가 있어도 재시작. | false | true/false | -| TARGET_MANIFEST_ID | 게임의 버젼을 스팀 다운로드 디포의 해당 Manifest ID로 고정. | | [Manifest ID Table](#locking-specific-game-version) 보 +| TARGET_MANIFEST_ID | 게임의 버젼을 스팀 다운로드 디포의 해당 Manifest ID로 고정. | | [Manifest ID Table](#버전별Manifest ID표) 보 | | DISCORD_WEBHOOK_URL | 디스코드 웹훅 URL | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | 디스코드 명령 초기 연결 시간 초과 | 30 | !0 | | DISCORD_MAX_TIMEOUT | Discord 총 훅 시간 초과 | 30 | !0 | @@ -358,8 +358,8 @@ BACKUP_CRON_EXPRESSION을 설정하여 기본 스케줄을 변경합니다. 이 서버에서 자동 업데이트를 사용하려면 다음 환경 변수들을 `true`로 **설정해야 합니다**: -- RCON_ENABLED -- UPDATE_ON_BOOT +* RCON_ENABLED +* UPDATE_ON_BOOT > [!IMPORTANT] > 도커 `restart` 정책이 `always` 또는 `unless-stopped`로 설정 되어있지 않다면, 서버는 종료되고 @@ -409,15 +409,15 @@ AUTO_REBOOT_CRON_EXPRESSION을 설정하여 기본 스케줄을 변경하세요. 서버 설정을 환경 변수로 바꾸는 과정은 다음과 같은 규칙을 따릅니다 (몇가지 예외 있음): -- 모두 대문자로 작성 -- 밑줄을 삽입하여 단어를 분할 -- 한 글자로 시작하는 설정(예: 'b')의 경우 그 한 글자를 제거 +* 모두 대문자로 작성 +* 밑줄을 삽입하여 단어를 분할 +* 한 글자로 시작하는 설정(예: 'b')의 경우 그 한 글자를 제거 아래는 예시입니다: -- Difficulty -> DIFFICULTY -- PalSpawnNumRate -> PAL_SPAWN_NUM_RATE -- bIsPvP -> IS_PVP +* Difficulty -> DIFFICULTY +* PalSpawnNumRate -> PAL_SPAWN_NUM_RATE +* bIsPvP -> IS_PVP | 변수 | 설명 | 기본값 | 허용값 | |-------------------------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------| @@ -523,8 +523,9 @@ docker compose로 디스코드 메시지 보내기: > >**본인의 책임하에 하세요!** -만약 **TARGET_MANIFEST_ID** 환경변수가 정해졌다면, 서버의 버전은 특정 manifest로 고정됩니다. -Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. +만약 **TARGET_MANIFEST_ID** 환경변수가 정해졌다면, 서버의 버전은 특정 manifest로 고정됩니다. +Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 +같은 웹사이트에서 검색가능합니다. ### 버전별 Manifest ID 표 @@ -535,7 +536,6 @@ Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집 | 1.4.1 | 6370735655629434989 | | 1.5.0 | 3750364703337203431 | - ## 이슈/기능 요청 문제/기능 요청은 다음 [링크](https://github.com/thijsvanloef/palworld-server-docker/issues/new/choose)에서 제출할 수 있습니다. From 450c0ee54c73dd91dffcd4ea8baaf88e48cc42f6 Mon Sep 17 00:00:00 2001 From: Manuel Raimann Date: Fri, 1 Mar 2024 14:19:55 +0100 Subject: [PATCH 47/70] Fix link to rcon commands list Old link redirected to a 404 page --- README.md | 2 +- docs/kr/README.md | 2 +- docs/zh-CN/README.md | 2 +- .../docs/getting-started/configuration/server-commands.md | 2 +- .../current/getting-started/configuration/server-commands.md | 2 +- .../current/getting-started/configuration/server-commands.md | 2 +- .../current/getting-started/configuration/server-commands.md | 2 +- .../current/getting-started/configuration/server-commands.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 45cfdaf7c..af219cea5 100644 --- a/README.md +++ b/README.md @@ -292,7 +292,7 @@ This will open a CLI that uses RCON to write commands to the Palworld Server. | Info | Show server information. | | Save | Save the world data. | -For a full list of commands go to: [https://tech.palworldgame.com/server-commands](https://tech.palworldgame.com/server-commands) +For a full list of commands go to: [https://tech.palworldgame.com/settings-and-operation/commands](https://tech.palworldgame.com/settings-and-operation/commands) ## Creating a backup diff --git a/docs/kr/README.md b/docs/kr/README.md index 8ba2773c1..1eff45f2a 100644 --- a/docs/kr/README.md +++ b/docs/kr/README.md @@ -284,7 +284,7 @@ docker exec -it palworld-server rcon-cli "Broadcast Hello everyone" | Info | 서버 정보를 표시합니다. | | Save | 월드 정보를 저장합니다. | -전체 명령어 목록을 보려면 다음으로 이동하세요: [https://tech.palworldgame.com/server-commands](https://tech.palworldgame.com/server-commands) +전체 명령어 목록을 보려면 다음으로 이동하세요: [https://tech.palworldgame.com/settings-and-operation/commands](https://tech.palworldgame.com/settings-and-operation/commands) ## 백업 만들기 diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index 780b7ee86..da9fa1632 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -238,7 +238,7 @@ docker exec -it palworld-server rcon-cli | Info | 显示服务器信息。 | | Save | 保存游戏。 | -请查看 [官方文档](https://tech.palworldgame.com/server-commands) 以获取所有命令。 +请查看 [官方文档](https://tech.palworldgame.com/settings-and-operation/commands) 以获取所有命令。 ## 创建备份 diff --git a/docusaurus/docs/getting-started/configuration/server-commands.md b/docusaurus/docs/getting-started/configuration/server-commands.md index ef6ede464..9754a9796 100644 --- a/docusaurus/docs/getting-started/configuration/server-commands.md +++ b/docusaurus/docs/getting-started/configuration/server-commands.md @@ -38,4 +38,4 @@ This will open a CLI that uses RCON to write commands to the Palworld Server. | Info | Show server information. | | Save | Save the world data. | -For a full list of commands go to: [https://tech.palworldgame.com/server-commands](https://tech.palworldgame.com/server-commands) +For a full list of commands go to: [https://tech.palworldgame.com/settings-and-operation/commands](https://tech.palworldgame.com/settings-and-operation/commands) diff --git a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md index 51fa833ef..5e2013f19 100644 --- a/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md +++ b/docusaurus/i18n/de/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md @@ -38,4 +38,4 @@ Dies öffnet eine CLI, die RCON verwendet, um Befehle an den Palworld-Server zu | Info | Zeigt Serverinformationen an. | | Save | Speichern Sie die Weltendaten. | -Für eine vollständige Liste der Befehle gehen Sie zu: [https://tech.palworldgame.com/server-commands](https://tech.palworldgame.com/server-commands) +Für eine vollständige Liste der Befehle gehen Sie zu: [https://tech.palworldgame.com/settings-and-operation/commands](https://tech.palworldgame.com/settings-and-operation/commands) diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md index 789887e53..645f8da3b 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md @@ -37,4 +37,4 @@ docker exec -it palworld-server rcon-cli "Broadcast Hello everyone" | Info | 서버 정보를 표시합니다. | | Save | 월드 정보를 저장합니다. | -전체 명령어 목록을 보려면 다음으로 이동하세요: [https://tech.palworldgame.com/server-commands](https://tech.palworldgame.com/server-commands) +전체 명령어 목록을 보려면 다음으로 이동하세요: [https://tech.palworldgame.com/settings-and-operation/commands](https://tech.palworldgame.com/settings-and-operation/commands) diff --git a/docusaurus/i18n/nl/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md b/docusaurus/i18n/nl/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md index 9593363d3..4606d8385 100644 --- a/docusaurus/i18n/nl/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md +++ b/docusaurus/i18n/nl/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md @@ -38,4 +38,4 @@ Dit opent een CLI die RCON gebruikt om opdrachten naar de Palworld Server te sch | Info | Toon serverinformatie. | | Save | Sla de wereldgegevens op. | -Voor een volledige lijst met opdrachten ga naar: [https://tech.palworldgame.com/server-commands](https://tech.palworldgame.com/server-commands) +Voor een volledige lijst met opdrachten ga naar: [https://tech.palworldgame.com/settings-and-operation/commands](https://tech.palworldgame.com/settings-and-operation/commands) diff --git a/docusaurus/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md b/docusaurus/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md index 56d698e29..e0481a254 100644 --- a/docusaurus/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md +++ b/docusaurus/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md @@ -42,4 +42,4 @@ docker exec -it palworld-server rcon-cli "Broadcast Hello everyone" | Info | 显示服务器信息。 | | Save | 保存游戏。 | -请查看 [官方文档](https://tech.palworldgame.com/server-commands) 以获取所有命令。 +请查看 [官方文档](https://tech.palworldgame.com/settings-and-operation/commands) 以获取所有命令。 From c54396a87b8efa0ce742badf9d739d00dbadb055 Mon Sep 17 00:00:00 2001 From: strawbang Date: Fri, 1 Mar 2024 14:36:38 +0100 Subject: [PATCH 48/70] docs: add french language to documentation --- README.md | 283 ++++++++++++------------ docs/fr/README.md | 551 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 693 insertions(+), 141 deletions(-) create mode 100644 docs/fr/README.md diff --git a/README.md b/README.md index 62a68a110..e6adb585d 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ [Chat with the community on Discord](https://discord.gg/UxBxStPAAE) -[English](/README.md) | [한국어](/docs/kr/README.md) | [简体中文](/docs/zh-CN/README.md) +[English](/README.md) | [한국어](/docs/kr/README.md) | [简体中文](/docs/zh-CN/README.md) | [French](/docs/fr/README.md) > [!TIP] > Unsure how to get started? Check out [this guide I wrote!](https://tice.tips/containerization/palworld-server-docker/) @@ -27,9 +27,9 @@ This is a Docker container to help you get started with hosting your own This Docker container has been tested and will work on the following OS: -* Linux (Ubuntu/Debian) -* Windows 10,11 -* MacOS (including Apple Silicon M1/M2/M3). +- Linux (Ubuntu/Debian) +- Windows 10,11 +- MacOS (including Apple Silicon M1/M2/M3). This container has also been tested and will work on both `x64` and `ARM64` based CPU architecture. @@ -53,7 +53,7 @@ Massive shoutout to the following sponsors! ## Server Requirements | Resource | Minimum | Recommended | -|----------|---------|------------------------------------------| +| -------- | ------- | ---------------------------------------- | | CPU | 4 cores | 4+ cores | | RAM | 16GB | Recommend over 32GB for stable operation | | Storage | 8GB | 20GB | @@ -68,30 +68,30 @@ This repository includes an example [docker-compose.yml](/docker-compose.yml) fi ```yml services: - palworld: - image: thijsvanloef/palworld-server-docker:latest - restart: unless-stopped - container_name: palworld-server - stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop - ports: - - 8211:8211/udp - - 27015:27015/udp - environment: - PUID: 1000 - PGID: 1000 - PORT: 8211 # Optional but recommended - PLAYERS: 16 # Optional but recommended - SERVER_PASSWORD: "worldofpals" # Optional but recommended - MULTITHREADING: true - RCON_ENABLED: true - RCON_PORT: 25575 - TZ: "UTC" - ADMIN_PASSWORD: "adminPasswordHere" - COMMUNITY: false # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD! - SERVER_NAME: "palworld-server-docker by Thijs van Loef" - SERVER_DESCRIPTION: "palworld-server-docker by Thijs van Loef" - volumes: - - ./palworld:/palworld/ + palworld: + image: thijsvanloef/palworld-server-docker:latest + restart: unless-stopped + container_name: palworld-server + stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop + ports: + - 8211:8211/udp + - 27015:27015/udp + environment: + PUID: 1000 + PGID: 1000 + PORT: 8211 # Optional but recommended + PLAYERS: 16 # Optional but recommended + SERVER_PASSWORD: 'worldofpals' # Optional but recommended + MULTITHREADING: true + RCON_ENABLED: true + RCON_PORT: 25575 + TZ: 'UTC' + ADMIN_PASSWORD: 'adminPasswordHere' + COMMUNITY: false # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD! + SERVER_NAME: 'palworld-server-docker by Thijs van Loef' + SERVER_DESCRIPTION: 'palworld-server-docker by Thijs van Loef' + volumes: + - ./palworld:/palworld/ ``` As an alternative, you can copy the [.env.example](.env.example) file to a new file called **.env** file. @@ -100,18 +100,18 @@ values. Modify your [docker-compose.yml](docker-compose.yml) to this: ```yml services: - palworld: - image: thijsvanloef/palworld-server-docker:latest - restart: unless-stopped - container_name: palworld-server - stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop - ports: - - 8211:8211/udp - - 27015:27015/udp - env_file: - - .env - volumes: - - ./palworld:/palworld/ + palworld: + image: thijsvanloef/palworld-server-docker:latest + restart: unless-stopped + container_name: palworld-server + stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop + ports: + - 8211:8211/udp + - 27015:27015/udp + env_file: + - .env + volumes: + - ./palworld:/palworld/ ``` ### Docker Run @@ -180,8 +180,8 @@ You must set user to `NUMBERICAL_UID:NUMBERICAL_GID` Below we assume your UID is 1000 and your GID is 1001 -* In docker run add `--user 1000:1001 \` above the last line. -* In docker compose add `user: 1000:1001` above ports. +- In docker run add `--user 1000:1001 \` above the last line. +- In docker compose add `user: 1000:1001` above ports. If you wish to run it with a different UID/GID than your own you will need to change the ownership of the directory that is being bind: `chown UID:GID palworld/` @@ -196,19 +196,19 @@ The official helm chart can be found in a seperate repository, [palworld-server- You can use the following values to change the settings of the server on boot. It is highly recommended you set the following environment values before starting the server: -* PLAYERS -* PORT -* PUID -* PGID +- PLAYERS +- PORT +- PUID +- PGID | Variable | Info | Default Values | Allowed Values | -|------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|-------------------------------------------------------------------------------------------------------------------| +| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------- | | TZ | Timezone used for time stamping backup server | UTC | See [TZ Identifiers](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | -| PLAYERS* | Max amount of players that are able to join the server | 16 | 1-32 | -| PORT* | UDP port that the server will expose | 8211 | 1024-65535 | -| PUID* | The uid of the user the server should run as | 1000 | !0 | -| PGID* | The gid of the group the server should run as | 1000 | !0 | -| MULTITHREADING** | Improves performance in multi-threaded CPU environments. It is effective up to a maximum of about 4 threads, and allocating more than this number of threads does not make much sense. | false | true/false | +| PLAYERS\* | Max amount of players that are able to join the server | 16 | 1-32 | +| PORT\* | UDP port that the server will expose | 8211 | 1024-65535 | +| PUID\* | The uid of the user the server should run as | 1000 | !0 | +| PGID\* | The gid of the group the server should run as | 1000 | !0 | +| MULTITHREADING\*\* | Improves performance in multi-threaded CPU environments. It is effective up to a maximum of about 4 threads, and allocating more than this number of threads does not make much sense. | false | true/false | | COMMUNITY | Whether or not the server shows up in the community server browser (USE WITH SERVER_PASSWORD) | false | true/false | | PUBLIC_IP | You can manually specify the global IP address of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | | x.x.x.x | | PUBLIC_PORT | You can manually specify the port number of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | | 1024-65535 | @@ -216,8 +216,8 @@ It is highly recommended you set the following environment values before startin | SERVER_DESCRIPTION | Your server Description | | "string" | | SERVER_PASSWORD | Secure your community server with a password | | "string" | | ADMIN_PASSWORD | Secure administration access in the server with a password | | "string" | -| UPDATE_ON_BOOT** | Update/Install the server when the docker container starts (THIS HAS TO BE ENABLED THE FIRST TIME YOU RUN THE CONTAINER) | true | true/false | -| RCON_ENABLED*** | Enable RCON for the Palworld server | true | true/false | +| UPDATE_ON_BOOT\*\* | Update/Install the server when the docker container starts (THIS HAS TO BE ENABLED THE FIRST TIME YOU RUN THE CONTAINER) | true | true/false | +| RCON_ENABLED\*\*\* | Enable RCON for the Palworld server | true | true/false | | RCON_PORT | RCON port to connect to | 25575 | 1024-65535 | | QUERY_PORT | Query port used to communicate with Steam servers | 27015 | 1024-65535 | | BACKUP_CRON_EXPRESSION | Setting affects frequency of automatic backups. | 0 0 \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-backups-with-cron) | @@ -226,12 +226,12 @@ It is highly recommended you set the following environment values before startin | OLD_BACKUP_DAYS | How many days to keep backups | 30 | any positive integer | | AUTO_UPDATE_CRON_EXPRESSION | Setting affects frequency of automatic updates. | 0 \* \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-backups-with-cron) | | AUTO_UPDATE_ENABLED | Enables automatic updates | false | true/false | -| AUTO_UPDATE_WARN_MINUTES | How long to wait to update the server, after the player were informed. (This will be ignored, if no Players are connected) | 30 | Integer | +| AUTO_UPDATE_WARN_MINUTES | How long to wait to update the server, after the player were informed. (This will be ignored, if no Players are connected) | 30 | Integer | | AUTO_REBOOT_CRON_EXPRESSION | Setting affects frequency of automatic updates. | 0 0 \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-reboots-with-cron) | | AUTO_REBOOT_ENABLED | Enables automatic reboots | false | true/false | -| AUTO_REBOOT_WARN_MINUTES | How long to wait to reboot the server, after the player were informed. | 5 | Integer | +| AUTO_REBOOT_WARN_MINUTES | How long to wait to reboot the server, after the player were informed. | 5 | Integer | | AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Restart the Server even if there are players online. | false | true/false | -| TARGET_MANIFEST_ID | Locks game version to corespond with Manifest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | +| TARGET_MANIFEST_ID | Locks game version to corespond with Manifest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | | DISCORD_WEBHOOK_URL | Discord webhook url found after creating a webhook on a discord server | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | Discord command initial connection timeout | 30 | !0 | | DISCORD_MAX_TIMEOUT | Discord total hook timeout | 30 | !0 | @@ -241,20 +241,20 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | -| DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | -| ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | -| PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | +| DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | +| ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | +| PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | -*highly recommended to set +\*highly recommended to set -** Make sure you know what you are doing when running this option enabled +\*\* Make sure you know what you are doing when running this option enabled -*** Required for docker stop to save and gracefully close the server +\*\*\* Required for docker stop to save and gracefully close the server ### Game Ports | Port | Info | -|-------|------------------| +| ----- | ---------------- | | 8211 | Game Port (UDP) | | 27015 | Query Port (UDP) | | 25575 | RCON Port (TCP) | @@ -279,7 +279,7 @@ This will open a CLI that uses RCON to write commands to the Palworld Server. ### List of server commands | Command | Info | -|----------------------------------|-----------------------------------------------------| +| -------------------------------- | --------------------------------------------------- | | Shutdown {Seconds} {MessageText} | The server is shut down after the number of Seconds | | DoExit | Force stop the server. | | Broadcast | Send message to all player in the server | @@ -314,6 +314,7 @@ docker exec -it palworld-server restore ``` The `RCON_ENABLED` environment variable must be set to `true` to use this command. + > [!IMPORTANT] > If docker restart is not set to policy `always` or `unless-stopped` then the server will shutdown and will need to be > manually restarted. @@ -366,8 +367,8 @@ Example Usage: If BACKUP_CRON_EXPRESSION to `0 2 * * *`, the backup script will To be able to use automatic Updates with this Server the following environment variables **have** to be set to `true`: -* RCON_ENABLED -* UPDATE_ON_BOOT +- RCON_ENABLED +- UPDATE_ON_BOOT > [!IMPORTANT] > @@ -423,72 +424,72 @@ timezone set with TZ Converting server settings to environment variables follow the same principles (with some exceptions): -* all capital letters -* split words by inserting an underscore -* remove the single letter if the setting starts with one (like 'b') +- all capital letters +- split words by inserting an underscore +- remove the single letter if the setting starts with one (like 'b') For example: -* Difficulty -> DIFFICULTY -* PalSpawnNumRate -> PAL_SPAWN_NUM_RATE -* bIsPvP -> IS_PVP - -| Variable | Description | Default Value | Allowed Value | -|-------------------------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------| -| DIFFICULTY | Game Difficulty | None | `None`,`Normal`,`Difficult` | -| DAYTIME_SPEEDRATE | Day time speed - Larger number means shorter days | 1.000000 | Float | -| NIGHTTIME_SPEEDRATE | Night time speed - Larger number means shorter nights | 1.000000 | Float | -| EXP_RATE | EXP earn rate | 1.000000 | Float | -| PAL_CAPTURE_RATE | Pal capture rate | 1.000000 | Float | -| PAL_SPAWN_NUM_RATE | Pal appearance rate | 1.000000 | Float | -| PAL_DAMAGE_RATE_ATTACK | Damage from pals multipiler | 1.000000 | Float | -| PAL_DAMAGE_RATE_DEFENSE | Damage to pals multipiler | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_ATTACK | Damage from player multipiler | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_DEFENSE | Damage to player multipiler | 1.000000 | Float | -| PLAYER_STOMACH_DECREASE_RATE | Player hunger depletion rate | 1.000000 | Float | -| PLAYER_STAMINA_DECREASE_RATE | Player stamina reduction rate | 1.000000 | Float | -| PLAYER_AUTO_HP_REGEN_RATE | Player auto HP regeneration rate | 1.000000 | Float | -| PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | Player sleep HP regeneration rate | 1.000000 | Float | -| PAL_STOMACH_DECREASE_RATE | Pal hunger depletion rate | 1.000000 | Float | -| PAL_STAMINA_DECREASE_RATE | Pal stamina reduction rate | 1.000000 | Float | -| PAL_AUTO_HP_REGEN_RATE | Pal auto HP regeneration rate | 1.000000 | Float | -| PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | Pal sleep health regeneration rate (in Palbox) | 1.000000 | Float | -| BUILD_OBJECT_DAMAGE_RATE | Damage to structure multipiler | 1.000000 | Float | -| BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | Structure determination rate | 1.000000 | Float | -| COLLECTION_DROP_RATE | Getherable items multipiler | 1.000000 | Float | -| COLLECTION_OBJECT_HP_RATE | Getherable objects HP multipiler | 1.000000 | Float | -| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | Getherable objects respawn interval - The smaller the number, the faster the regeneration | 1.000000 | Float | -| ENEMY_DROP_ITEM_RATE | Dropped Items Multipiler | 1.000000 | Float | -| DEATH_PENALTY | Death Penalty
None: No death penalty
Item: Drops items other than equipment
ItemAndEquipment: Drops all items
All: Drops all PALs and all items. | All | `None`,`Item`,`ItemAndEquipment`,`All` | -| ENABLE_PLAYER_TO_PLAYER_DAMAGE | Allows players to cause damage to players | False | Boolean | -| ENABLE_FRIENDLY_FIRE | Allow friendly fire | False | Boolean | -| ENABLE_INVADER_ENEMY | Enable invaders | True | Boolean | -| ACTIVE_UNKO | Enable UNKO (?) | False | Boolean | -| ENABLE_AIM_ASSIST_PAD | Enable controller aim assist | True | Boolean | -| ENABLE_AIM_ASSIST_KEYBOARD | Enable Keyboard aim assist | False | Boolean | -| DROP_ITEM_MAX_NUM | Maximum number of drops in the world | 3000 | Integer | -| DROP_ITEM_MAX_NUM_UNKO | Maximum number of UNKO drops in the world | 100 | Integer | -| BASE_CAMP_MAX_NUM | Maximum number of base camps | 128 | Integer | -| BASE_CAMP_WORKER_MAX_NUM | Maximum number of workers | 15 | Integer | -| DROP_ITEM_ALIVE_MAX_HOURS | Time it takes for items to despawn in hours | 1.000000 | Float | -| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | Automatically reset guild when no players are online | False | Bool | -| AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | Time to automatically reset guild when no players are online | 72.000000 | Float | -| GUILD_PLAYER_MAX_NUM | Max player of Guild | 20 | Integer | -| PAL_EGG_DEFAULT_HATCHING_TIME | Time(h) to incubate massive egg | 72.000000 | Float | -| WORK_SPEED_RATE | Work speed muliplier | 1.000000 | Float | -| IS_MULTIPLAY | Enable multiplayer | False | Boolean | -| IS_PVP | Enable PVP | False | Boolean | -| CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | Allow players from other guilds to pick up death penalty items | False | Boolean | -| ENABLE_NON_LOGIN_PENALTY | Enable non-login penalty | True | Boolean | -| ENABLE_FAST_TRAVEL | Enable fast travel | True | Boolean | -| IS_START_LOCATION_SELECT_BY_MAP | Enable selecting of start location | True | Boolean | -| EXIST_PLAYER_AFTER_LOGOUT | Toggle for deleting players when they log off | False | Boolean | -| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | Allows defense against other guild players | False | Boolean | -| COOP_PLAYER_MAX_NUM | Maximum number of players in a guild | 4 | Integer | -| REGION | Region | | String | -| USEAUTH | Use authentication | True | Boolean | -| BAN_LIST_URL | Which ban list to use | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | -| SHOW_PLAYER_LIST | Enable show player list | True | Boolean | +- Difficulty -> DIFFICULTY +- PalSpawnNumRate -> PAL_SPAWN_NUM_RATE +- bIsPvP -> IS_PVP + +| Variable | Description | Default Value | Allowed Value | +| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------- | +| DIFFICULTY | Game Difficulty | None | `None`,`Normal`,`Difficult` | +| DAYTIME_SPEEDRATE | Day time speed - Larger number means shorter days | 1.000000 | Float | +| NIGHTTIME_SPEEDRATE | Night time speed - Larger number means shorter nights | 1.000000 | Float | +| EXP_RATE | EXP earn rate | 1.000000 | Float | +| PAL_CAPTURE_RATE | Pal capture rate | 1.000000 | Float | +| PAL_SPAWN_NUM_RATE | Pal appearance rate | 1.000000 | Float | +| PAL_DAMAGE_RATE_ATTACK | Damage from pals multipiler | 1.000000 | Float | +| PAL_DAMAGE_RATE_DEFENSE | Damage to pals multipiler | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_ATTACK | Damage from player multipiler | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_DEFENSE | Damage to player multipiler | 1.000000 | Float | +| PLAYER_STOMACH_DECREASE_RATE | Player hunger depletion rate | 1.000000 | Float | +| PLAYER_STAMINA_DECREASE_RATE | Player stamina reduction rate | 1.000000 | Float | +| PLAYER_AUTO_HP_REGEN_RATE | Player auto HP regeneration rate | 1.000000 | Float | +| PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | Player sleep HP regeneration rate | 1.000000 | Float | +| PAL_STOMACH_DECREASE_RATE | Pal hunger depletion rate | 1.000000 | Float | +| PAL_STAMINA_DECREASE_RATE | Pal stamina reduction rate | 1.000000 | Float | +| PAL_AUTO_HP_REGEN_RATE | Pal auto HP regeneration rate | 1.000000 | Float | +| PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | Pal sleep health regeneration rate (in Palbox) | 1.000000 | Float | +| BUILD_OBJECT_DAMAGE_RATE | Damage to structure multipiler | 1.000000 | Float | +| BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | Structure determination rate | 1.000000 | Float | +| COLLECTION_DROP_RATE | Getherable items multipiler | 1.000000 | Float | +| COLLECTION_OBJECT_HP_RATE | Getherable objects HP multipiler | 1.000000 | Float | +| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | Getherable objects respawn interval - The smaller the number, the faster the regeneration | 1.000000 | Float | +| ENEMY_DROP_ITEM_RATE | Dropped Items Multipiler | 1.000000 | Float | +| DEATH_PENALTY | Death Penalty
None: No death penalty
Item: Drops items other than equipment
ItemAndEquipment: Drops all items
All: Drops all PALs and all items. | All | `None`,`Item`,`ItemAndEquipment`,`All` | +| ENABLE_PLAYER_TO_PLAYER_DAMAGE | Allows players to cause damage to players | False | Boolean | +| ENABLE_FRIENDLY_FIRE | Allow friendly fire | False | Boolean | +| ENABLE_INVADER_ENEMY | Enable invaders | True | Boolean | +| ACTIVE_UNKO | Enable UNKO (?) | False | Boolean | +| ENABLE_AIM_ASSIST_PAD | Enable controller aim assist | True | Boolean | +| ENABLE_AIM_ASSIST_KEYBOARD | Enable Keyboard aim assist | False | Boolean | +| DROP_ITEM_MAX_NUM | Maximum number of drops in the world | 3000 | Integer | +| DROP_ITEM_MAX_NUM_UNKO | Maximum number of UNKO drops in the world | 100 | Integer | +| BASE_CAMP_MAX_NUM | Maximum number of base camps | 128 | Integer | +| BASE_CAMP_WORKER_MAX_NUM | Maximum number of workers | 15 | Integer | +| DROP_ITEM_ALIVE_MAX_HOURS | Time it takes for items to despawn in hours | 1.000000 | Float | +| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | Automatically reset guild when no players are online | False | Bool | +| AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | Time to automatically reset guild when no players are online | 72.000000 | Float | +| GUILD_PLAYER_MAX_NUM | Max player of Guild | 20 | Integer | +| PAL_EGG_DEFAULT_HATCHING_TIME | Time(h) to incubate massive egg | 72.000000 | Float | +| WORK_SPEED_RATE | Work speed muliplier | 1.000000 | Float | +| IS_MULTIPLAY | Enable multiplayer | False | Boolean | +| IS_PVP | Enable PVP | False | Boolean | +| CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | Allow players from other guilds to pick up death penalty items | False | Boolean | +| ENABLE_NON_LOGIN_PENALTY | Enable non-login penalty | True | Boolean | +| ENABLE_FAST_TRAVEL | Enable fast travel | True | Boolean | +| IS_START_LOCATION_SELECT_BY_MAP | Enable selecting of start location | True | Boolean | +| EXIST_PLAYER_AFTER_LOGOUT | Toggle for deleting players when they log off | False | Boolean | +| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | Allows defense against other guild players | False | Boolean | +| COOP_PLAYER_MAX_NUM | Maximum number of players in a guild | 4 | Integer | +| REGION | Region | | String | +| USEAUTH | Use authentication | True | Boolean | +| BAN_LIST_URL | Which ban list to use | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| SHOW_PLAYER_LIST | Enable show player list | True | Boolean | ### Manually @@ -527,23 +528,23 @@ send discord messages with docker compose: ## Locking Specific Game Version ->[!WARNING] ->Downgrading to a lower game version is possible, but it is unknown what impact it will have on existing saves. +> [!WARNING] +> Downgrading to a lower game version is possible, but it is unknown what impact it will have on existing saves. > ->**Please do so at your own risk!** +> **Please do so at your own risk!** If **TARGET_MANIFEST_ID** environment variable is set, will lock server version to specific manifest. The manifest corresponds to the release date/update versions. Manifests can be found using SteamCMD or websites like [SteamDB](https://steamdb.info/depot/2394012/manifests/). ### Version To Manifest ID Table -| Version | Manifest ID | -|---------|----------------------| -| 1.3.0 | 1354752814336157338 | -| 1.4.0 | 4190579964382773830 | -| 1.4.1 | 6370735655629434989 | -| 1.5.0 | 3750364703337203431 | -| 1.5.1 | 2815085007637542021 | +| Version | Manifest ID | +| ------- | ------------------- | +| 1.3.0 | 1354752814336157338 | +| 1.4.0 | 4190579964382773830 | +| 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | +| 1.5.1 | 2815085007637542021 | ## Reporting Issues/Feature Requests diff --git a/docs/fr/README.md b/docs/fr/README.md new file mode 100644 index 000000000..248c52d74 --- /dev/null +++ b/docs/fr/README.md @@ -0,0 +1,551 @@ +# Palworld Serveur Dédié Docker + +[![Release](https://img.shields.io/github/v/release/thijsvanloef/palworld-server-docker)](https://github.com/thijsvanloef/palworld-server-docker/releases) +[![Docker Pulls](https://img.shields.io/docker/pulls/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) +[![Docker Stars](https://img.shields.io/docker/stars/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) +[![Image Size](https://img.shields.io/docker/image-size/thijsvanloef/palworld-server-docker/latest)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker/tags) +[![Discord](https://img.shields.io/discord/1200397673329594459?logo=discord&label=Discord&link=https%3A%2F%2Fdiscord.gg%2FUxBxStPAAE)](https://discord.com/invite/UxBxStPAAE) + +[![CodeFactor](https://www.codefactor.io/repository/github/thijsvanloef/palworld-server-docker/badge)](https://www.codefactor.io/repository/github/thijsvanloef/palworld-server-docker) +[![Release](https://github.com/thijsvanloef/palworld-server-docker/actions/workflows/release.yml/badge.svg)](https://github.com/thijsvanloef/palworld-server-docker/actions/workflows/release.yml) +[![Linting](https://github.com/thijsvanloef/palworld-server-docker/actions/workflows/linting.yml/badge.svg)](https://github.com/thijsvanloef/palworld-server-docker/actions/workflows/linting.yml) +[![Security](https://github.com/thijsvanloef/palworld-server-docker/actions/workflows/security.yml/badge.svg)](https://github.com/thijsvanloef/palworld-server-docker/actions/workflows/security.yml) + +[![Docker Hub](https://img.shields.io/badge/Docker_Hub-palworld-blue?logo=docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) +[![GHCR](https://img.shields.io/badge/GHCR-palworld-blue?logo=docker)](https://github.com/thijsvanloef/palworld-server-docker/pkgs/container/palworld-server-docker) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/palworld-server-chart)](https://artifacthub.io/packages/search?repo=palworld-server-chart) + +[Discuter avec la communauté sur Discord](https://discord.gg/UxBxStPAAE) + +[English](/README.md) | [한국어](/docs/kr/README.md) | [简体中文](/docs/zh-CN/README.md) | [French](/docs/fr/README.md) + +> [!TIP] +> Vous ne savez pas par où commencer ? Consultez [ce guide que j'ai écrit !](https://tice.tips/containerization/palworld-server-docker/) + +Il s'agit d'un conteneur Docker pour vous aider à démarrer l'hébergement de votre propre serveur dédié [Palworld](https://store.steampowered.com/app/1623730/Palworld/). + +Ce conteneur Docker a été testé et fonctionnera sur les systèmes d'exploitation suivants : + +- Linux (Ubuntu/Debian) +- Windows 10, 11 +- MacOS (y compris Apple Silicon M1/M2/M3). + +Ce conteneur a également été testé et fonctionnera sur les architectures de processeur `x64` et `ARM64`. + +> [!IMPORTANT] +> Pour le moment, les joueurs Xbox GamePass/Xbox Console ne pourront pas rejoindre un serveur dédié. +> +> Ils devront rejoindre les joueurs en utilisant le code d'invitation et sont limités à des sessions de 4 joueurs maximum. + +## Sponsors + +Un énorme merci aux sponsors suivants ! + +

+doomhound188  AshishT112203  pabumake  stoprx  KiKoS0  inspired-by-nudes  PulsarFTW   +

+ +## Documentation Officielle + +[![Documentation](https://github.com/thijsvanloef/palworld-server-docker/assets/58031337/b92d76d1-5efb-438d-9ffd-5385544a831b)](https://palworld-server-docker.loef.dev/) + +## Configuration requise du serveur + +| Ressource | Minimum | Recommandé | +| --------- | ------- | -------------------------------------------------------- | +| CPU | 4 cœurs | 4 cœurs ou plus | +| RAM | 16 Go | Recommandé : plus de 32 Go pour un fonctionnement stable | +| Stockage | 8 Go | 20 Go | + +## Comment utiliser + +N'oubliez pas que vous devrez modifier les [variables d'environnement](#variables-denvironnement). + +### Docker Compose + +Ce référentiel comprend un exemple de fichier [docker-compose.yml](/docker-compose.yml) que vous pouvez utiliser pour configurer votre serveur. + +```yml +services: + palworld: + image: thijsvanloef/palworld-server-docker:latest + restart: unless-stopped + container_name: palworld-server + stop_grace_period: 30s # Réglez selon le temps que vous êtes prêt à attendre pour l'arrêt gracieux du conteneur + ports: + - 8211:8211/udp + - 27015:27015/udp + environment: + PUID: 1000 + PGID: 1000 + PORT: 8211 # Optionnel mais recommandé + PLAYERS: 16 # Optionnel mais recommandé + SERVER_PASSWORD: 'worldofpals' # Optionnel mais recommandé + MULTITHREADING: true + RCON_ENABLED: true + RCON_PORT: 25575 + TZ: 'UTC' + ADMIN_PASSWORD: 'adminPasswordHere' + COMMUNITY: false # Activez ceci si vous souhaitez que votre serveur apparaisse dans l'onglet des serveurs communautaires, À UTILISER AVEC LE MOT DE PASSE DU SERVEUR ! + SERVER_NAME: 'palworld-server-docker par Thijs van Loef' + SERVER_DESCRIPTION: 'palworld-server-docker par Thijs van Loef' + volumes: + - ./palworld:/palworld/ +``` + +En alternative, vous pouvez copier le fichier [.env.example](.env.example) dans un nouveau fichier appelé **.env**. +Modifiez-le selon vos besoins, consultez la section [environment variables](#environment-variables) pour vérifier les valeurs correctes. Modifiez votre fichier [docker-compose.yml](docker-compose.yml) comme suit : + +```yml +services: + palworld: + image: thijsvanloef/palworld-server-docker:latest + restart: unless-stopped + container_name: palworld-server + stop_grace_period: 30s # Réglez selon le temps que vous êtes prêt à attendre pour l'arrêt gracieux du conteneur + ports: + - 8211:8211/udp + - 27015:27015/udp + env_file: + - .env + volumes: + - ./palworld:/palworld/ +``` + +### Docker Run + +Changez chaque <> par votre propre configuration + +```bash +docker run -d \ + --name palworld-server \ + -p 8211:8211/udp \ + -p 27015:27015/udp \ + -v ./palworld:/palworld/ \ + -e PUID=1000 \ + -e PGID=1000 \ + -e PORT=8211 \ + -e PLAYERS=16 \ + -e MULTITHREADING=true \ + -e RCON_ENABLED=true \ + -e RCON_PORT=25575 \ + -e TZ=UTC \ + -e ADMIN_PASSWORD="adminPasswordHere" \ + -e SERVER_PASSWORD="worldofpals" \ + -e COMMUNITY=false \ + -e SERVER_NAME="palworld-server-docker by Thijs van Loef" \ + -e SERVER_DESCRIPTION="palworld-server-docker by Thijs van Loef" \ + --restart unless-stopped \ + --stop-timeout 30 \ + thijsvanloef/palworld-server-docker:latest +``` + +En alternative, vous pouvez copier le fichier [.env.example](.env.example) dans un nouveau fichier appelé **.env**. +Modifiez-le selon vos besoins, consultez la section [environment variables](#environment-variables) pour vérifier les valeurs correctes. Modifiez votre commande docker run comme suit : + +```bash +docker run -d \ + --name palworld-server \ + -p 8211:8211/udp \ + -p 27015:27015/udp \ + -v ./palworld:/palworld/ \ + --env-file .env \ + --restart unless-stopped \ + --stop-timeout 30 \ + thijsvanloef/palworld-server-docker:latest +``` + +### Kubernetes + +Tous les fichiers dont vous aurez besoin pour déployer ce conteneur sur Kubernetes se trouvent dans le dossier [k8s](k8s/). + +Suivez les étapes dans le [README.md ici](k8s/readme.md) pour le déployer. + +### Exécution sans les droits root + +Ceci est réservé aux utilisateurs avancés. + +Il est possible d'exécuter ce conteneur et de [remplacer l'utilisateur par défaut](https://docs.docker.com/engine/reference/run/#user) qui est root dans cette image. + +Étant donné que vous spécifiez l'utilisateur et le groupe, `PUID` et `PGID` sont ignorés. + +Si vous souhaitez trouver votre UID : `id -u` +Si vous souhaitez trouver votre GID : `id -g` + +Vous devez définir l'utilisateur sur `UID_NUMÉRIQUE:GID_NUMÉRIQUE` + +Ci-dessous, nous supposons que votre UID est 1000 et votre GID est 1001. + +- Dans la commande docker run, ajoutez `--user 1000:1001 \` au-dessus de la dernière ligne. +- Dans le fichier docker-compose, ajoutez `user: 1000:1001` au-dessus des ports. + +Si vous souhaitez l'exécuter avec un UID/GID différent du vôtre, vous devrez changer la propriété du répertoire qui est monté : `chown UID:GID palworld/` +ou en changeant les permissions pour tous les autres : `chmod o=rwx palworld/` + +#### Utilisation du chart Helm + +Le chart Helm officiel peut être trouvé dans un dépôt séparé, [palworld-server-chart](https://github.com/Twinki14/palworld-server-chart) + +### Variables d'environnement + +Vous pouvez utiliser les valeurs suivantes pour modifier les paramètres du serveur au démarrage. +Il est fortement recommandé de définir les valeurs d'environnement suivantes avant de démarrer le serveur : + +- PLAYERS +- PORT +- PUID +- PGID + +| Variable | Info | Valeurs par défaut | Valeurs autorisées | +| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| TZ | Fuseau horaire utilisé pour dater la sauvegarde du serveur | UTC | Voir [Identifiants TZ](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | +| PLAYERS\* | Nombre maximal de joueurs pouvant rejoindre le serveur | 16 | 1-32 | +| PORT\* | Port UDP exposé par le serveur | 8211 | 1024-65535 | +| PUID\* | UID de l'utilisateur sous lequel le serveur doit s'exécuter | 1000 | !0 | +| PGID\* | GID du groupe sous lequel le serveur doit s'exécuter | 1000 | !0 | +| MULTITHREADING\*\* | Améliore les performances dans les environnements CPU multi-threadés. Elle est efficace jusqu'à un maximum d'environ 4 threads, et allouer plus que ce nombre de threads n'a pas beaucoup de sens. | false | true/false | +| COMMUNITY | Si le serveur apparaît ou non dans le navigateur de serveurs communautaires (À UTILISER AVEC SERVER_PASSWORD) | false | true/false | +| PUBLIC_IP | Vous pouvez spécifier manuellement l'adresse IP globale du réseau sur lequel le serveur est en cours d'exécution. Sinon, elle sera détectée automatiquement. Si cela ne fonctionne pas bien, essayez une configuration manuelle. | | x.x.x.x | +| PUBLIC_PORT | Vous pouvez spécifier manuellement le numéro de port du réseau sur lequel le serveur est en cours d'exécution. Sinon, il sera détecté automatiquement. Si cela ne fonctionne pas bien, essayez une configuration manuelle. | | 1024-65535 | +| SERVER_NAME | Un nom pour votre serveur | | "chaîne" | +| SERVER_DESCRIPTION | La description de votre serveur | | "chaîne" | +| SERVER_PASSWORD | Sécurisez votre serveur communautaire avec un mot de passe | | "chaîne" | +| ADMIN_PASSWORD | Sécurisez l'accès à l'administration du serveur avec un mot de passe | | "chaîne" | +| UPDATE_ON_BOOT\*\* | Mettre à jour/Installer le serveur lorsque le conteneur Docker démarre (CELÀ DOIT ÊTRE ACTIVÉ LA PREMIÈRE FOIS QUE VOUS EXÉCUTEZ LE CONTENEUR) | true | true/false | +| RCON_ENABLED\*\*\* | Activer RCON pour le serveur Palworld | true | true/false | +| RCON_PORT | Port RCON pour se connecter | 25575 | 1024-65535 | +| QUERY_PORT | Port de requête utilisé pour communiquer avec les serveurs Steam | 27015 | 1024-65535 | +| BACKUP_CRON_EXPRESSION | Le paramètre affecte la fréquence des sauvegardes automatiques. | 0 0 \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuring-automatic-backups-with-cron) | +| BACKUP_ENABLED | Active les sauvegardes automatiques | true | true/false | +| DELETE_OLD_BACKUPS | Supprime les sauvegardes après un certain nombre de jours | false | true/false | +| OLD_BACKUP_DAYS | Combien de jours conserver les sauvegardes | 30 | tout entier positif | +| AUTO_UPDATE_CRON_EXPRESSION | Le paramètre affecte la fréquence des mises à jour automatiques. | 0 \* \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuring-automatic-backups-with-cron) | +| AUTO_UPDATE_ENABLED | Active les mises à jour automatiques | false | true/false | +| AUTO_UPDATE_WARN_MINUTES | Temps d'attente avant de mettre à jour le serveur, après que les joueurs ont été informés. (Cela sera ignoré s'il n'y a pas de joueurs connectés) | 30 | Entier | +| AUTO_REBOOT_CRON_EXPRESSION | Le paramètre affecte la fréquence des mises à jour automatiques. | 0 0 \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuring-automatic-reboots-with-cron) | +| AUTO_REBOOT_ENABLED | Active les redémarrages automatiques | false | true/false | +| AUTO_REBOOT_WARN_MINUTES | Temps d'attente avant de redémarrer le serveur, après que les joueurs ont été informés. | 5 | Entier | +| AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Redémarrez le serveur même s'il y a des joueurs en ligne. | false | true/false | +| TARGET_MANIFEST_ID | Verrouille la version du jeu en correspondance avec l'ID de manifeste de Steam Download Depot. | | Voir [Tableau des ID de manifeste](#locking-specific-game-version) | +| DISCORD_WEBHOOK_URL | URL du webhook Discord trouvée après la création d'un webhook sur un serveur Discord | | `https://discord.com/api/webhooks/` | +| DISCORD_CONNECT_TIMEOUT | Délai de connexion initial de la commande Discord | 30 | !0 | +| DISCORD_MAX_TIMEOUT | Délai total du webhook Discord | 30 | !0 | +| DISCORD_PRE_UPDATE_BOOT_MESSAGE | Message Discord envoyé lorsque le serveur commence à se mettre à jour | Le serveur est en cours de mise à jour... | "chaîne" | +| DISCORD_POST_UPDATE_BOOT_MESSAGE | Message Discord envoyé lorsque le serveur a terminé de se mettre à jour | Mise à jour du serveur terminée ! | "chaîne" | +| DISCORD_PRE_START_MESSAGE | Message Discord envoyé lorsque le serveur commence à démarrer | Le serveur est démarré ! | "chaîne" | +| DISCORD_PRE_SHUTDOWN_MESSAGE | Message Discord envoyé lorsque le serveur commence à s'arrêter | Le serveur est en cours d'arrêt... | "chaîne" | +| DISCORD_POST_SHUTDOWN_MESSAGE | Message Discord envoyé lorsque le serveur s'est arrêté | Le serveur est arrêté ! | "chaîne" | +| DISABLE_GENERATE_SETTINGS | S'il faut générer automatiquement le fichier PalWorldSettings.ini | false | true/false | +| DISABLE_GENERATE_ENGINE | S'il faut générer automatiquement le fichier Engine.ini | true | true/false | +| ENABLE_PLAYER_LOGGING | Active la journalisation et l'annonce des entrées et sorties de joueurs | true | true/false | +| PLAYER_LOGGING_POLL_PERIOD | Période de sondage (en secondes) pour vérifier les joueurs qui ont rejoint ou quitté | 5 | !0 | + +\* Hautement recommandé à définir + +\*\* Assurez-vous de savoir ce que vous faites lorsque vous exécutez cette option activée + +\*\*\* Nécessaire pour que `docker stop` enregistre et ferme gracieusement le serveur + +### Ports du jeu + +| Port | Info | +| ----- | --------------------- | +| 8211 | Port du jeu (UDP) | +| 27015 | Port de requête (UDP) | +| 25575 | Port RCON (TCP) | + +## Utilisation de RCON + +RCON est activé par défaut pour l'image palworld-server-docker. +Ouvrir la CLI RCON est assez simple : + +```bash +docker exec -it palworld-server rcon-cli " " +``` + +Par exemple, vous pouvez diffuser un message à tout le monde dans le serveur avec la commande suivante : + +```bash +docker exec -it palworld-server rcon-cli "Broadcast Bonjour à tous" +``` + +Cela ouvrira une interface en ligne de commande utilisant RCON pour envoyer des commandes au serveur Palworld. + +### Liste des commandes du serveur + +| Command | Info | +| ------------------------------------ | --------------------------------------------------------- | +| Shutdown {Secondes} {TexteDuMessage} | Le serveur s'arrête après le nombre de secondes spécifié | +| DoExit | Arrêt forcé du serveur. | +| Broadcast | Envoyer un message à tous les joueurs dans le serveur | +| KickPlayer {SteamID} | Expulser un joueur du serveur. | +| BanPlayer {SteamID} | Bannir un joueur du serveur. | +| TeleportToPlayer {SteamID} | Téléporter à l'emplacement actuel du joueur ciblé. | +| TeleportToMe {SteamID} | Téléporter le joueur ciblé à votre emplacement actuel | +| ShowPlayers | Afficher les informations sur tous les joueurs connectés. | +| Info | Afficher les informations du serveur. | +| Save | Sauvegarder les données du monde. | + +Pour une liste complète des commandes, consultez : [https://tech.palworldgame.com/server-commands](https://tech.palworldgame.com/server-commands) + +## Création d'une sauvegarde + +Pour créer une sauvegarde de la progression actuelle du jeu, utilisez la commande : + +```bash +docker exec palworld-server backup +``` + +Cela créera une sauvegarde dans `/palworld/backups/` + +Le serveur effectuera une sauvegarde avant la sauvegarde si RCON est activé. + +## Restauration à partir d'une sauvegarde + +Pour restaurer à partir d'une sauvegarde, utilisez la commande : + +```bash +docker exec -it palworld-server restore +``` + +La variable d'environnement `RCON_ENABLED` doit être définie sur `true` pour utiliser cette commande. + +> [!IMPORTANT] +> Si la redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` le serveur s'éteindra et devra être +> redémarré manuellement. +> +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) utilisent déjà la politique nécessaire + +## Restauration manuelle à partir d'une sauvegarde + +Localisez la sauvegarde que vous souhaitez restaurer dans `/palworld/backups/` et décompressez-la. +Vous devez arrêter le serveur avant de continuer. + +```bash +docker compose down +``` + +Supprimez l'ancien dossier de données sauvegardées situé à `palworld/Pal/Saved/SaveGames/0/`. + +Copiez le contenu du nouveau dossier de données sauvegardées décompressé `Saved/SaveGames/0/` to `palworld/Pal/Saved/SaveGames/0/`. + +Remplacez le nom DedicatedServerName à l'intérieur de `palworld/Pal/Saved/Config/LinuxServer/GameUserSettings.ini` par le nouveau nom de dossier. + +```ini +DedicatedServerName= # Remplacez-le par votre nom de dossier. +``` + +Redémarrez le jeu. (Si vous utilisez Docker Compose) + +```bash +docker compose up -d +``` + +## Configuration des Sauvegardes Automatiques avec Cron + +Le serveur est automatiquement sauvegardé chaque nuit à minuit, selon le fuseau horaire défini avec TZ. + +Définissez BACKUP_ENABLED pour activer ou désactiver les sauvegardes automatiques (par défaut, c'est activé). + +BACKUP_CRON_EXPRESSION est une expression cron, où vous définissez un intervalle pour l'exécution des tâches. + +> [!TIP] +> Cette image utilise Supercronic pour les tâches cron +> voir [supercronic](https://github.com/aptible/supercronic#crontab-format) +> ou +> [Crontab Generator](https://crontab-generator.org). + +Définissez BACKUP_CRON_EXPRESSION pour changer la planification par défaut. +Exemple d'utilisation : Si BACKUP_CRON_EXPRESSION est défini sur `0 2 * * *`, le script de sauvegarde s'exécutera tous les jours à 2h00 du matin. + +## Configuration des Mises à Jour Automatiques avec Cron + +Pour pouvoir utiliser les mises à jour automatiques avec ce serveur, les variables d'environnement suivantes **doivent** être définies sur `true`: + +- RCON_ENABLED +- UPDATE_ON_BOOT + +> [!IMPORTANT] +> +> Si le redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` le serveur s'éteindra et devra être +> redémarré manuellement. +> +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) utilisent déjà la politique nécessaire + +Définissez AUTO_UPDATE_ENABLED pour activer ou désactiver les mises à jour automatiques (par défaut, c'est désactivé). + +AUTO_UPDATE_CRON_EXPRESSION est une expression cron, où vous définissez un intervalle pour l'exécution des tâches. + +> [!TIP] +> Cette image utilise Supercronic pour les tâches cron +> voir [supercronic](https://github.com/aptible/supercronic#crontab-format) +> ou +> [Crontab Generator](https://crontab-generator.org). + +Définissez AUTO_UPDATE_CRON_EXPRESSION pour changer la planification par défaut. + +## Configuration des Redémarrages Automatiques avec Cron + +Pour pouvoir utiliser les redémarrages automatiques avec ce serveur, RCON_ENABLED doit être activé. + +> [!IMPORTANT] +> +> Si le redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` le serveur s'éteindra et devra être +> redémarré manuellement. +> +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) utilisent déjà la politique nécessaire + +Définissez AUTO_REBOOT_ENABLED pour activer ou désactiver les redémarrages automatiques (par défaut, c'est désactivé). + +AUTO_REBOOT_CRON_EXPRESSION est une expression cron, où vous définissez un intervalle pour l'exécution des tâches. + +> [!TIP] +> Cette image utilise Supercronic pour les tâches cron +> voir [supercronic](https://github.com/aptible/supercronic#crontab-format) +> ou +> [Crontab Generator](https://crontab-generator.org). + +Définissez AUTO_REBOOT_CRON_EXPRESSION pour changer la planification par défaut, qui est tous les soirs à minuit selon le +fuseau horaire défini avec TZ. + +## Modification des paramètres du serveur + +### Avec des variables d'environnement + +> [!IMPORTANT] +> +> Ces variables d'environnement/paramètres sont susceptibles de changer car le jeu est encore en version bêta. +> Consultez la [page officielle pour les paramètres pris en charge.](https://tech.palworldgame.com/optimize-game-balance) + +La conversion des paramètres du serveur en variables d'environnement suit les mêmes principes (avec quelques exceptions) : + +- toutes en majuscules +- séparation des mots par l'insertion d'un trait de soulignement +- suppression de la lettre unique si le paramètre commence par une (comme 'b') + +Par exemple : + +- Difficulty -> DIFFICULTY +- PalSpawnNumRate -> PAL_SPAWN_NUM_RATE +- bIsPvP -> IS_PVP + +| Variable | Description | Valeur par défaut | Valeur autorisée | +| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| DIFFICULTY | Difficulté du jeu | Aucune | `Aucune`, `Normal`, `Difficile` | +| DAYTIME_SPEEDRATE | Vitesse du jour - Un nombre plus grand signifie des journées plus courtes | 1,000000 | Flottant | +| NIGHTTIME_SPEEDRATE | Vitesse de la nuit - Un nombre plus grand signifie des nuits plus courtes | 1,000000 | Flottant | +| EXP_RATE | Taux de gain d'EXP | 1,000000 | Flottant | +| PAL_CAPTURE_RATE | Taux de capture de Pal | 1,000000 | Flottant | +| PAL_SPAWN_NUM_RATE | Taux d'apparition des Pals | 1,000000 | Flottant | +| PAL_DAMAGE_RATE_ATTACK | Multiplicateur des dégâts infligés par les Pals | 1,000000 | Flottant | +| PAL_DAMAGE_RATE_DEFENSE | Multiplicateur des dégâts subis par les Pals | 1,000000 | Flottant | +| PLAYER_DAMAGE_RATE_ATTACK | Multiplicateur des dégâts infligés par le joueur | 1,000000 | Flottant | +| PLAYER_DAMAGE_RATE_DEFENSE | Multiplicateur des dégâts subis par le joueur | 1,000000 | Flottant | +| PLAYER_STOMACH_DECREASE_RATE | Taux de déplétion de la faim du joueur | 1,000000 | Flottant | +| PLAYER_STAMINA_DECREASE_RATE | Taux de réduction de la stamina du joueur | 1,000000 | Flottant | +| PLAYER_AUTO_HP_REGEN_RATE | Taux de régénération automatique des PV du joueur | 1,000000 | Flottant | +| PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | Taux de régénération automatique des PV du joueur pendant le sommeil | 1,000000 | Flottant | +| PAL_STOMACH_DECREASE_RATE | Taux de déplétion de la faim des Pals | 1,000000 | Flottant | +| PAL_STAMINA_DECREASE_RATE | Taux de réduction de la stamina des Pals | 1,000000 | Flottant | +| PAL_AUTO_HP_REGEN_RATE | Taux de régénération automatique des PV des Pals | 1,000000 | Flottant | +| PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | Taux de régénération automatique de la santé des Pals (dans la Palbox) | 1,000000 | Flottant | +| BUILD_OBJECT_DAMAGE_RATE | Multiplicateur des dégâts aux structures | 1,000000 | Flottant | +| BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | Taux de détermination de la structure | 1,000000 | Flottant | +| COLLECTION_DROP_RATE | Multiplicateur d'objets collectables | 1,000000 | Flottant | +| COLLECTION_OBJECT_HP_RATE | Multiplicateur de la santé des objets collectables | 1,000000 | Flottant | +| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | Taux d'intervalle de réapparition des objets collectables - Plus le nombre est petit, plus la régénération est rapide | 1,000000 | Flottant | +| ENEMY_DROP_ITEM_RATE | Multiplicateur d'objets abandonnés par les ennemis | 1,000000 | Flottant | +| DEATH_PENALTY | Pénalité de mort
Aucune : Pas de pénalité de mort
Objet : Lâche des objets autres que l'équipement
ObjetEtÉquipement : Lâche tous les objets
Tous : Lâche tous les Pals et tous les objets | Tous | `Aucune`, `Objet`, `ObjetEtÉquipement`, `Tous` | +| ENABLE_PLAYER_TO_PLAYER_DAMAGE | Permet aux joueurs de causer des dégâts aux autres joueurs | Faux | Booléen | +| ENABLE_FRIENDLY_FIRE | Autoriser les tirs amis | Faux | Booléen | +| ENABLE_INVADER_ENEMY | Activer les envahisseurs | Vrai | Booléen | +| ACTIVE_UNKO | Activer UNKO (?) | Faux | Booléen | +| ENABLE_AIM_ASSIST_PAD | Activer l'assistance à la visée du contrôleur | Vrai | Booléen | +| ENABLE_AIM_ASSIST_KEYBOARD | Activer l'assistance à la visée du clavier | Faux | Booléen | +| DROP_ITEM_MAX_NUM | Nombre maximal de largages dans le monde | 3000 | Entier | +| DROP_ITEM_MAX_NUM_UNKO | Nombre maximal de largages UNKO dans le monde | 100 | Entier | +| BASE_CAMP_MAX_NUM | Nombre maximal de camps de base | 128 | Entier | +| BASE_CAMP_WORKER_MAX_NUM | Nombre maximal de travailleurs | 15 | Entier | +| DROP_ITEM_ALIVE_MAX_HOURS | Temps avant la disparition des objets en heures | 1,000000 | Flottant | +| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | Réinitialiser automatiquement la guilde lorsqu'aucun joueur n'est en ligne | Faux | Booléen | +| AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | Temps pour réinitialiser automatiquement la guilde lorsqu'aucun joueur n'est en ligne | 72,000000 | Flottant | +| GUILD_PLAYER_MAX_NUM | Nombre maximum de joueurs dans une guilde | 20 | Entier | +| PAL_EGG_DEFAULT_HATCHING_TIME | Temps (h) pour incuber un œuf massif | 72,000000 | Flottant | +| WORK_SPEED_RATE | Multiplicateur de la vitesse de travail | 1,000000 | Flottant | +| IS_MULTIPLAY | Activer le multijoueur | Faux | Booléen | +| IS_PVP | Activer le PVP | Faux | Booléen | +| CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | Autoriser les joueurs d'autres guildes à ramasser les objets de pénalité de mort | Faux | Booléen | +| ENABLE_NON_LOGIN_PENALTY | Activer la pénalité hors connexion | Vrai | Booléen | +| ENABLE_FAST_TRAVEL | Activer le déplacement rapide | Vrai | Booléen | +| IS_START_LOCATION_SELECT_BY_MAP | Activer la sélection de l'emplacement de départ | Vrai | Booléen | +| EXIST_PLAYER_AFTER_LOGOUT | Bascule pour supprimer les joueurs lorsqu'ils se déconnectent | Faux | Booléen | +| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | Permet la défense contre les joueurs d'autres guildes | Faux | Booléen | +| COOP_PLAYER_MAX_NUM | Nombre maximum de joueurs dans une guilde | 4 | Entier | +| REGION | Région | | Chaîne de caractères | +| USEAUTH | Utiliser l'authentification | Vrai | Booléen | +| BAN_LIST_URL | Liste des interdictions à utiliser | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | Chaîne de caractères | +| SHOW_PLAYER_LIST | Activer l'affichage de la liste des joueurs | Vrai | Booléen | + +### Manuellement + +Lorsque le serveur démarre, un fichier `PalWorldSettings.ini` sera créé à l'emplacement suivant : `/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini` + +Veuillez noter que les variables d'environnement (ENV) écraseront toujours les modifications apportées à `PalWorldSettings.ini`. + +> [!IMPORTANT] +> Les changements ne peuvent être apportés à `PalWorldSettings.ini` que lorsque le serveur est éteint. +> +> Toutes les modifications apportées pendant que le serveur est en cours d'exécution seront écrasées lors de l'arrêt du serveur. + +Pour une liste plus détaillée des paramètres du serveur, consultez : [Palworld Wiki](https://palworld.wiki.gg/wiki/PalWorldSettings.ini) + +Pour des explications plus détaillées sur les paramètres du serveur, consultez : [shockbyte](https://shockbyte.com/billing/knowledgebase/1189/How-to-Configure-your-Palworld-server.html) + +## Utilisation de webhooks Discord + +1. Générez une URL de webhook pour votre serveur Discord dans les paramètres de votre serveur Discord. + +2. Configurez la variable d'environnement avec le jeton unique à la fin de l'exemple d'URL de webhook Discord : `https://discord.com/api/webhooks/1234567890/abcde` + +Envoyez des messages Discord avec docker run : + +```sh +-e DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/1234567890/abcde" \ +-e DISCORD_PRE_UPDATE_BOOT_MESSAGE="Le serveur est en cours de mise à jour..." \ + +``` + +Envoyez des messages Discord avec docker compose : + +```yaml +- DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/1234567890/abcde +- DISCORD_PRE_UPDATE_BOOT_MESSAGE=Le serveur est en cours de mise à jour... +``` + +## Verrouiller une Version Spécifique du Jeu + +> [!WARNING] +> Rétrograder vers une version inférieure du jeu est possible, mais on ne sait pas quel impact cela aura sur les sauvegardes existantes. +> +> **Faites-le à vos propres risques !** + +Si la variable d'environnement **TARGET_MANIFEST_ID** est définie, elle verrouillera la version du serveur sur un manifeste spécifique. +Le manifeste correspond aux dates de sortie/mises à jour. Les manifestes peuvent être trouvés à l'aide de SteamCMD ou de sites web comme [SteamDB](https://steamdb.info/depot/2394012/manifests/). + +### Tableau des Versions Vers les ID de Manifeste + +| Version | ID de Manifeste | +| ------- | ------------------- | +| 1.3.0 | 1354752814336157338 | +| 1.4.0 | 4190579964382773830 | +| 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | +| 1.5.1 | 2815085007637542021 | + +## Signalement de Problèmes/Demandes de Fonctionnalités + +Les problèmes/Demandes de fonctionnalités peuvent être soumis en utilisant [ce lien](https://github.com/thijsvanloef/palworld-server-docker/issues/new/choose). + +### Problèmes Connus + +Les problèmes connus sont répertoriés dans la [documentation](https://palworld-server-docker.loef.dev/known-issues/) From 11bacd080260b5482fbebb70c5fe1d3c98163cfc Mon Sep 17 00:00:00 2001 From: Thijs van Loef <58031337+thijsvanloef@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:43:07 +0100 Subject: [PATCH 49/70] Create readme.md --- docs/readme.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/readme.md diff --git a/docs/readme.md b/docs/readme.md new file mode 100644 index 000000000..886c3e9f3 --- /dev/null +++ b/docs/readme.md @@ -0,0 +1,3 @@ +# These docs will be deprecated on March 31 2024 + +Please use the official docs: [https://palworld-server-docker.loef.dev/](https://palworld-server-docker.loef.dev/) From fcb30a1b62f5c60ab898fdc260d041c1782105dc Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Fri, 1 Mar 2024 14:45:12 +0100 Subject: [PATCH 50/70] add deprecation warning --- docs/kr/README.md | 4 ++++ docs/zh-CN/README.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/docs/kr/README.md b/docs/kr/README.md index 1eff45f2a..4010da2b8 100644 --- a/docs/kr/README.md +++ b/docs/kr/README.md @@ -1,5 +1,9 @@ # Palworld 전용 서버 도커 +## ⚠️These docs will be deprecated and removed on March 31 2024⚠️ + +Please use the official docs: [https://palworld-server-docker.loef.dev/](https://palworld-server-docker.loef.dev/ko/) + [![Release](https://img.shields.io/github/v/release/thijsvanloef/palworld-server-docker)](https://github.com/thijsvanloef/palworld-server-docker/releases) [![Docker Pulls](https://img.shields.io/docker/pulls/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) [![Docker Stars](https://img.shields.io/docker/stars/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index da9fa1632..891d7eeda 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -1,5 +1,9 @@ # Palworld Dedicated Server Docker +## ⚠️These docs will be deprecated and removed on March 31 2024⚠️ + +Please use the official docs: [https://palworld-server-docker.loef.dev/](https://palworld-server-docker.loef.dev/zh/) + [![Release](https://img.shields.io/github/v/release/thijsvanloef/palworld-server-docker)](https://github.com/thijsvanloef/palworld-server-docker/releases) [![Docker Pulls](https://img.shields.io/docker/pulls/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) [![Docker Stars](https://img.shields.io/docker/stars/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) From a0bdea633f7e7e885d4c1998d3f4cb11a3d318e4 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Fri, 1 Mar 2024 15:50:01 +0100 Subject: [PATCH 51/70] Optimize metadata for docs --- docusaurus/docs/advanced/kubernetes.md | 13 ++++++++++--- docusaurus/docs/assets/Palworld_Banner.jpg | Bin 0 -> 343676 bytes .../configuration/engine-settings.md | 11 ++++++++--- .../configuration/game-settings.md | 11 ++++++++--- .../configuration/server-commands.md | 12 +++++++++--- .../configuration/server-settings.md | 11 ++++++++--- docusaurus/docs/getting-started/quick-setup.md | 14 ++++++++++---- .../docs/guides/discord/discord-webhooks.md | 12 +++++++++++- docusaurus/docs/known-issues/known-issues.md | 12 +++++++++--- 9 files changed, 73 insertions(+), 23 deletions(-) create mode 100644 docusaurus/docs/assets/Palworld_Banner.jpg diff --git a/docusaurus/docs/advanced/kubernetes.md b/docusaurus/docs/advanced/kubernetes.md index 9f8ece499..e4481c70d 100644 --- a/docusaurus/docs/advanced/kubernetes.md +++ b/docusaurus/docs/advanced/kubernetes.md @@ -1,13 +1,20 @@ --- sidebar_position: 2 +title: Palworld Dedicated Server on Kubernetes +description: How to run Palworld Dedicared server on Kubernetes. +keywords: [Palworld, palworld dedicated server, Palworld Dedicated server kubernetes] +image: ../assets/Palworld_Banner.jpg +sidebar_label: Kubernetes --- + +# Palworld Dedicated Server on Kubernetes -# Kubernetes - -All files you will need to deploy this container to kubernetes are located in the [k8s folder](https://github.com/thijsvanloef/palworld-server-docker/tree/main/k8s). +How to run Palworld Dedicared server on Kubernetes. ## Setup Palworld in kubernetes +All files you will need to deploy this container to kubernetes are located in the [k8s folder](https://github.com/thijsvanloef/palworld-server-docker/tree/main/k8s). + Use the following commands to setup this Palworld container in Kubernetes: * `kubectl apply -f pvc.yaml` diff --git a/docusaurus/docs/assets/Palworld_Banner.jpg b/docusaurus/docs/assets/Palworld_Banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f15a095b5efb9e1cdc7ae775f43c41160a7d0b0c GIT binary patch literal 343676 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∋s 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

(RcXE7(niKi>nVc% z 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%0DjVJlO|*!Z8tOzmbY$1kc=mjiald)`W=P}k5$ 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/getting-started/configuration/engine-settings.md b/docusaurus/docs/getting-started/configuration/engine-settings.md index e6178d014..c74100731 100644 --- a/docusaurus/docs/getting-started/configuration/engine-settings.md +++ b/docusaurus/docs/getting-started/configuration/engine-settings.md @@ -1,10 +1,15 @@ --- sidebar_position: 3 +title: Palworld Server Engine Settings +description: How to change the Palworld Engine Settings (Engine.ini file) using Docker Environment variables. +keywords: [Palworld, palworld dedicated server, Palworld Engine.ini, palworld engine settings] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Engine Settings --- + +# Palworld Server Engine Settings -# Engine Settings - -Changing Engine Settings with Environment variables. +How to change the Palworld Engine Settings (Engine.ini file) using Docker Environment variables. ## With Environment Variables diff --git a/docusaurus/docs/getting-started/configuration/game-settings.md b/docusaurus/docs/getting-started/configuration/game-settings.md index 48b2644f7..a625a72f0 100644 --- a/docusaurus/docs/getting-started/configuration/game-settings.md +++ b/docusaurus/docs/getting-started/configuration/game-settings.md @@ -1,10 +1,15 @@ --- sidebar_position: 2 +title: Palworld Server Game Settings +description: How to change the Palworld Game Settings (PalWorldSettings.ini file) using Docker Environment variables. +keywords: [Palworld, palworld dedicated server, Palworld PalWorldSettings.ini, palworld game settings, PalWorldSettings.ini] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Game Settings --- + +# Palworld Server Game Settings -# Game Settings - -Changing Game Settings with Environment variables. +How to change the Palworld Game Settings (PalWorldSettings.ini file) using Docker Environment variables. ## With Environment Variables diff --git a/docusaurus/docs/getting-started/configuration/server-commands.md b/docusaurus/docs/getting-started/configuration/server-commands.md index 9754a9796..aed9afd40 100644 --- a/docusaurus/docs/getting-started/configuration/server-commands.md +++ b/docusaurus/docs/getting-started/configuration/server-commands.md @@ -1,10 +1,16 @@ --- sidebar_position: 4 +title: Palworld Dedicated Server Commands (RCON) +description: How to use Palworld Dedicated server commands to manage your server, including Kicking, Banning and teleporting players. +keywords: [Palworld, palworld dedicated server, Palworld Server Commands, Palworld server how to ban player, Palworld server how to kick player] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Server Commands (RCON) --- + +# Palworld Dedicated Server Commands (RCON) -# Server Commands (RCON) - -How to use RCON to interact with the server. +How to use Palworld Dedicated server commands to manage your server, +including Kicking, Banning and teleporting players. ## RCON diff --git a/docusaurus/docs/getting-started/configuration/server-settings.md b/docusaurus/docs/getting-started/configuration/server-settings.md index e73df1c91..bbc440b4c 100644 --- a/docusaurus/docs/getting-started/configuration/server-settings.md +++ b/docusaurus/docs/getting-started/configuration/server-settings.md @@ -1,10 +1,15 @@ --- sidebar_position: 1 +title: Palworld Dedicated Server Settings +description: How to change the Palworld Server Settings using Docker Environment variables. +keywords: [Palworld, palworld dedicated server, Palworld Dedicated server settings, palworld server settings, Palworld Docker Dedicated server settings, palworld Docker server settings] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Server Settings --- + +# Palworld Dedicated Server Settings -# Server Settings - -Changing Server Settings using environment variables. +How to change the Palworld Server Settings using Docker Environment variables. ## Environment variables diff --git a/docusaurus/docs/getting-started/quick-setup.md b/docusaurus/docs/getting-started/quick-setup.md index 566c6e480..11bcb5218 100644 --- a/docusaurus/docs/getting-started/quick-setup.md +++ b/docusaurus/docs/getting-started/quick-setup.md @@ -1,11 +1,19 @@ --- sidebar_position: 1 slug: / +title: Palworld Dedicated server Quick Setup +description: This guide will help you get setup with hosting your Palworld Dedicated server on Docker! This Palworld server quick setup will only take a couple of minutes and you'll have a working server. +keywords: [Palworld, palworld dedicated server, how to setup palworld dedicated server, palworld server docker, palworld docker] +image: ../assets/Palworld_Banner.jpg +sidebar_label: Quick Setup --- + +# Palworld Dedicated server Quick Setup -# Quick Setup +This guide will help you get setup with hosting your Palworld Dedicated server on Docker! +This Palworld server quick setup will only take a couple of minutes and you'll have a working server. -Let's get you on your way with the Palworld Dedicated server! +## Prerequisites :::warning At the moment, Xbox Gamepass/Xbox Console players will not be able to join a dedicated server. @@ -13,8 +21,6 @@ At the moment, Xbox Gamepass/Xbox Console players will not be able to join a ded They will need to join players using the invite code and are limited to sessions of 4 players max. ::: -## Prerequisites - * Virtualization enabled in the BIOS/UEFI * Must have [Docker](https://docs.docker.com/engine/install/) installed diff --git a/docusaurus/docs/guides/discord/discord-webhooks.md b/docusaurus/docs/guides/discord/discord-webhooks.md index 5405d9c54..a0d0877f9 100644 --- a/docusaurus/docs/guides/discord/discord-webhooks.md +++ b/docusaurus/docs/guides/discord/discord-webhooks.md @@ -1,8 +1,18 @@ --- sidebar_position: 1 +title: Palworld Server Discord webhooks +description: How to use the Palworld Dedicated server Discord Webhook integration to get notified when your server is starting, stopping, and updating! +keywords: [Palworld, palworld dedicated server, Palworld dedicated server Discord Webhooks, Palworld Discord Webhooks] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Using Discord Webhooks --- + +# Using discord webhooks with Palworld Server -# Using discord webhooks +How to use the Palworld Dedicated server Discord Webhook integration to +get notified when your server is starting, stopping, and updating! + +## Getting started 1. Generate a webhook url for your discord server in your discord's server settings. diff --git a/docusaurus/docs/known-issues/known-issues.md b/docusaurus/docs/known-issues/known-issues.md index c452bb6fd..96eacbbd1 100644 --- a/docusaurus/docs/known-issues/known-issues.md +++ b/docusaurus/docs/known-issues/known-issues.md @@ -1,10 +1,16 @@ --- sidebar_position: 5 +title: Palworld Dedicated Server Known Issues +description: The current know issues with the Palworld Dedicated server running on Docker, including S_API FAIL, Setting breakpad minidump AppID = 2394010 and more. +keywords: [Palworld, palworld dedicated server, Palworld dedicated server known issues, Palworld dedicated server issues] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Known issues --- + +# Palworld Dedicated Server Known Issues -# Known Issues - -Known issues of using this Docker image. +The current know issues with the Palworld Dedicated server running on Docker, +including S_API FAIL, Setting breakpad minidump AppID = 2394010 and more. ## PalWorldSettings.ini keeps resetting From 79a70141272106d1ecf422208ee16edbe2113e1b Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Fri, 1 Mar 2024 16:46:30 +0100 Subject: [PATCH 52/70] fix typo --- docusaurus/docs/advanced/kubernetes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus/docs/advanced/kubernetes.md b/docusaurus/docs/advanced/kubernetes.md index e4481c70d..65d5a038c 100644 --- a/docusaurus/docs/advanced/kubernetes.md +++ b/docusaurus/docs/advanced/kubernetes.md @@ -1,7 +1,7 @@ --- sidebar_position: 2 title: Palworld Dedicated Server on Kubernetes -description: How to run Palworld Dedicared server on Kubernetes. +description: How to run Palworld Dedicated server on Kubernetes. keywords: [Palworld, palworld dedicated server, Palworld Dedicated server kubernetes] image: ../assets/Palworld_Banner.jpg sidebar_label: Kubernetes From b501b2ee1ce18cdb569f9e78c176811d6b9d1b7b Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Fri, 1 Mar 2024 16:48:41 +0100 Subject: [PATCH 53/70] fix typos --- docusaurus/docs/known-issues/known-issues.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docusaurus/docs/known-issues/known-issues.md b/docusaurus/docs/known-issues/known-issues.md index 96eacbbd1..f5316cb0f 100644 --- a/docusaurus/docs/known-issues/known-issues.md +++ b/docusaurus/docs/known-issues/known-issues.md @@ -1,7 +1,7 @@ --- sidebar_position: 5 title: Palworld Dedicated Server Known Issues -description: The current know issues with the Palworld Dedicated server running on Docker, including S_API FAIL, Setting breakpad minidump AppID = 2394010 and more. +description: The current known issues of the Palworld Dedicated server running on Docker, including S_API FAIL, Setting breakpad minidump AppID = 2394010 and more. keywords: [Palworld, palworld dedicated server, Palworld dedicated server known issues, Palworld dedicated server issues] image: ../../assets/Palworld_Banner.jpg sidebar_label: Known issues @@ -9,7 +9,7 @@ sidebar_label: Known issues # Palworld Dedicated Server Known Issues -The current know issues with the Palworld Dedicated server running on Docker, +The current know issues of the Palworld Dedicated server running on Docker, including S_API FAIL, Setting breakpad minidump AppID = 2394010 and more. ## PalWorldSettings.ini keeps resetting From 9e1363688febca2ebc024fc57da0b80376d16ef7 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Fri, 1 Mar 2024 18:24:31 +0100 Subject: [PATCH 54/70] fix line length issues --- docs/fr/README.md | 64 +++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/docs/fr/README.md b/docs/fr/README.md index 248c52d74..f294cd543 100644 --- a/docs/fr/README.md +++ b/docs/fr/README.md @@ -1,5 +1,9 @@ # Palworld Serveur Dédié Docker +## ⚠️These docs will be deprecated and removed on March 31 2024⚠️ + +Please use the official docs: [https://palworld-server-docker.loef.dev/](https://palworld-server-docker.loef.dev/) + [![Release](https://img.shields.io/github/v/release/thijsvanloef/palworld-server-docker)](https://github.com/thijsvanloef/palworld-server-docker/releases) [![Docker Pulls](https://img.shields.io/docker/pulls/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) [![Docker Stars](https://img.shields.io/docker/stars/thijsvanloef/palworld-server-docker)](https://hub.docker.com/r/thijsvanloef/palworld-server-docker) @@ -59,11 +63,12 @@ Un énorme merci aux sponsors suivants ! ## Comment utiliser -N'oubliez pas que vous devrez modifier les [variables d'environnement](#variables-denvironnement). +N'oubliez pas que vous devrez modifier les [variables d'environnement](#variables-d-environnement). ### Docker Compose -Ce référentiel comprend un exemple de fichier [docker-compose.yml](/docker-compose.yml) que vous pouvez utiliser pour configurer votre serveur. +Ce référentiel comprend un exemple de fichier [docker-compose.yml](/docker-compose.yml) +que vous pouvez utiliser pour configurer votre serveur. ```yml services: @@ -94,7 +99,8 @@ services: ``` En alternative, vous pouvez copier le fichier [.env.example](.env.example) dans un nouveau fichier appelé **.env**. -Modifiez-le selon vos besoins, consultez la section [environment variables](#environment-variables) pour vérifier les valeurs correctes. Modifiez votre fichier [docker-compose.yml](docker-compose.yml) comme suit : +Modifiez-le selon vos besoins, consultez la section [environment variables](#variables-d-environnement) pour vérifier les +valeurs correctes. Modifiez votre fichier [docker-compose.yml](docker-compose.yml) comme suit : ```yml services: @@ -141,7 +147,8 @@ docker run -d \ ``` En alternative, vous pouvez copier le fichier [.env.example](.env.example) dans un nouveau fichier appelé **.env**. -Modifiez-le selon vos besoins, consultez la section [environment variables](#environment-variables) pour vérifier les valeurs correctes. Modifiez votre commande docker run comme suit : +Modifiez-le selon vos besoins, consultez la section [environment variables](#variables-d-environnement) pour vérifier +les valeurs correctes. Modifiez votre commande docker run comme suit: ```bash docker run -d \ @@ -165,7 +172,8 @@ Suivez les étapes dans le [README.md ici](k8s/readme.md) pour le déployer. Ceci est réservé aux utilisateurs avancés. -Il est possible d'exécuter ce conteneur et de [remplacer l'utilisateur par défaut](https://docs.docker.com/engine/reference/run/#user) qui est root dans cette image. +Il est possible d'exécuter ce conteneur et de [remplacer l'utilisateur par défaut](https://docs.docker.com/engine/reference/run/#user) +qui est root dans cette image. Étant donné que vous spécifiez l'utilisateur et le groupe, `PUID` et `PGID` sont ignorés. @@ -179,14 +187,15 @@ Ci-dessous, nous supposons que votre UID est 1000 et votre GID est 1001. - Dans la commande docker run, ajoutez `--user 1000:1001 \` au-dessus de la dernière ligne. - Dans le fichier docker-compose, ajoutez `user: 1000:1001` au-dessus des ports. -Si vous souhaitez l'exécuter avec un UID/GID différent du vôtre, vous devrez changer la propriété du répertoire qui est monté : `chown UID:GID palworld/` +Si vous souhaitez l'exécuter avec un UID/GID différent du vôtre, vous devrez changer la +propriété du répertoire qui est monté : `chown UID:GID palworld/` ou en changeant les permissions pour tous les autres : `chmod o=rwx palworld/` #### Utilisation du chart Helm Le chart Helm officiel peut être trouvé dans un dépôt séparé, [palworld-server-chart](https://github.com/Twinki14/palworld-server-chart) -### Variables d'environnement +### Variables d environnement Vous pouvez utiliser les valeurs suivantes pour modifier les paramètres du serveur au démarrage. Il est fortement recommandé de définir les valeurs d'environnement suivantes avant de démarrer le serveur : @@ -226,7 +235,7 @@ Il est fortement recommandé de définir les valeurs d'environnement suivantes a | AUTO_REBOOT_ENABLED | Active les redémarrages automatiques | false | true/false | | AUTO_REBOOT_WARN_MINUTES | Temps d'attente avant de redémarrer le serveur, après que les joueurs ont été informés. | 5 | Entier | | AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Redémarrez le serveur même s'il y a des joueurs en ligne. | false | true/false | -| TARGET_MANIFEST_ID | Verrouille la version du jeu en correspondance avec l'ID de manifeste de Steam Download Depot. | | Voir [Tableau des ID de manifeste](#locking-specific-game-version) | +| TARGET_MANIFEST_ID | Verrouille la version du jeu en correspondance avec l'ID de manifeste de Steam Download Depot. | | Voir [Tableau des ID de manifeste](#tableau-des-versions-vers-les-id-de-manifeste) | | DISCORD_WEBHOOK_URL | URL du webhook Discord trouvée après la création d'un webhook sur un serveur Discord | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | Délai de connexion initial de la commande Discord | 30 | !0 | | DISCORD_MAX_TIMEOUT | Délai total du webhook Discord | 30 | !0 | @@ -311,10 +320,11 @@ docker exec -it palworld-server restore La variable d'environnement `RCON_ENABLED` doit être définie sur `true` pour utiliser cette commande. > [!IMPORTANT] -> Si la redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` le serveur s'éteindra et devra être -> redémarré manuellement. +> Si la redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` +> le serveur s'éteindra et devra être redémarré manuellement. > -> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) utilisent déjà la politique nécessaire +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) +> utilisent déjà la politique nécessaire ## Restauration manuelle à partir d'une sauvegarde @@ -329,7 +339,8 @@ Supprimez l'ancien dossier de données sauvegardées situé à `palworld/Pal/Sav Copiez le contenu du nouveau dossier de données sauvegardées décompressé `Saved/SaveGames/0/` to `palworld/Pal/Saved/SaveGames/0/`. -Remplacez le nom DedicatedServerName à l'intérieur de `palworld/Pal/Saved/Config/LinuxServer/GameUserSettings.ini` par le nouveau nom de dossier. +Remplacez le nom DedicatedServerName à l'intérieur de `palworld/Pal/Saved/Config/LinuxServer/GameUserSettings.ini` +par le nouveau nom de dossier. ```ini DedicatedServerName= # Remplacez-le par votre nom de dossier. @@ -356,21 +367,25 @@ BACKUP_CRON_EXPRESSION est une expression cron, où vous définissez un interval > [Crontab Generator](https://crontab-generator.org). Définissez BACKUP_CRON_EXPRESSION pour changer la planification par défaut. -Exemple d'utilisation : Si BACKUP_CRON_EXPRESSION est défini sur `0 2 * * *`, le script de sauvegarde s'exécutera tous les jours à 2h00 du matin. +Exemple d'utilisation : Si BACKUP_CRON_EXPRESSION est défini sur `0 2 * * *`, le script de sauvegarde +s'exécutera tous les jours à 2h00 du matin. ## Configuration des Mises à Jour Automatiques avec Cron -Pour pouvoir utiliser les mises à jour automatiques avec ce serveur, les variables d'environnement suivantes **doivent** être définies sur `true`: +Pour pouvoir utiliser les mises à jour automatiques avec ce serveur, les variables d'environnement +suivantes **doivent** être définies sur `true`: - RCON_ENABLED - UPDATE_ON_BOOT > [!IMPORTANT] > -> Si le redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` le serveur s'éteindra et devra être +> Si le redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` +> le serveur s'éteindra et devra être > redémarré manuellement. > -> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) utilisent déjà la politique nécessaire +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) +> utilisent déjà la politique nécessaire Définissez AUTO_UPDATE_ENABLED pour activer ou désactiver les mises à jour automatiques (par défaut, c'est désactivé). @@ -390,10 +405,12 @@ Pour pouvoir utiliser les redémarrages automatiques avec ce serveur, RCON_ENABL > [!IMPORTANT] > -> Si le redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` le serveur s'éteindra et devra être +> Si le redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` +> le serveur s'éteindra et devra être > redémarré manuellement. > -> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) utilisent déjà la politique nécessaire +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) +> utilisent déjà la politique nécessaire Définissez AUTO_REBOOT_ENABLED pour activer ou désactiver les redémarrages automatiques (par défaut, c'est désactivé). @@ -417,7 +434,7 @@ fuseau horaire défini avec TZ. > Ces variables d'environnement/paramètres sont susceptibles de changer car le jeu est encore en version bêta. > Consultez la [page officielle pour les paramètres pris en charge.](https://tech.palworldgame.com/optimize-game-balance) -La conversion des paramètres du serveur en variables d'environnement suit les mêmes principes (avec quelques exceptions) : +La conversion des paramètres du serveur en variables d'environnement suit les mêmes principes (avec quelques exceptions): - toutes en majuscules - séparation des mots par l'insertion d'un trait de soulignement @@ -525,12 +542,15 @@ Envoyez des messages Discord avec docker compose : ## Verrouiller une Version Spécifique du Jeu > [!WARNING] -> Rétrograder vers une version inférieure du jeu est possible, mais on ne sait pas quel impact cela aura sur les sauvegardes existantes. +> Rétrograder vers une version inférieure du jeu est possible, mais on ne sait pas quel impact +> cela aura sur les sauvegardes existantes. > > **Faites-le à vos propres risques !** -Si la variable d'environnement **TARGET_MANIFEST_ID** est définie, elle verrouillera la version du serveur sur un manifeste spécifique. -Le manifeste correspond aux dates de sortie/mises à jour. Les manifestes peuvent être trouvés à l'aide de SteamCMD ou de sites web comme [SteamDB](https://steamdb.info/depot/2394012/manifests/). +Si la variable d'environnement **TARGET_MANIFEST_ID** est définie, elle verrouillera la version +du serveur sur un manifeste spécifique. +Le manifeste correspond aux dates de sortie/mises à jour. Les manifestes peuvent être trouvés +à l'aide de SteamCMD ou de sites web comme [SteamDB](https://steamdb.info/depot/2394012/manifests/). ### Tableau des Versions Vers les ID de Manifeste From 1599de291a1ddb73bccd1e719fbabab613ba00f5 Mon Sep 17 00:00:00 2001 From: strawbang Date: Fri, 1 Mar 2024 19:32:16 +0100 Subject: [PATCH 55/70] fix the links --- docs/fr/README.md | 92 +++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/docs/fr/README.md b/docs/fr/README.md index f294cd543..5fcc92e0e 100644 --- a/docs/fr/README.md +++ b/docs/fr/README.md @@ -205,49 +205,49 @@ Il est fortement recommandé de définir les valeurs d'environnement suivantes a - PUID - PGID -| Variable | Info | Valeurs par défaut | Valeurs autorisées | -| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| TZ | Fuseau horaire utilisé pour dater la sauvegarde du serveur | UTC | Voir [Identifiants TZ](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | -| PLAYERS\* | Nombre maximal de joueurs pouvant rejoindre le serveur | 16 | 1-32 | -| PORT\* | Port UDP exposé par le serveur | 8211 | 1024-65535 | -| PUID\* | UID de l'utilisateur sous lequel le serveur doit s'exécuter | 1000 | !0 | -| PGID\* | GID du groupe sous lequel le serveur doit s'exécuter | 1000 | !0 | -| MULTITHREADING\*\* | Améliore les performances dans les environnements CPU multi-threadés. Elle est efficace jusqu'à un maximum d'environ 4 threads, et allouer plus que ce nombre de threads n'a pas beaucoup de sens. | false | true/false | -| COMMUNITY | Si le serveur apparaît ou non dans le navigateur de serveurs communautaires (À UTILISER AVEC SERVER_PASSWORD) | false | true/false | -| PUBLIC_IP | Vous pouvez spécifier manuellement l'adresse IP globale du réseau sur lequel le serveur est en cours d'exécution. Sinon, elle sera détectée automatiquement. Si cela ne fonctionne pas bien, essayez une configuration manuelle. | | x.x.x.x | -| PUBLIC_PORT | Vous pouvez spécifier manuellement le numéro de port du réseau sur lequel le serveur est en cours d'exécution. Sinon, il sera détecté automatiquement. Si cela ne fonctionne pas bien, essayez une configuration manuelle. | | 1024-65535 | -| SERVER_NAME | Un nom pour votre serveur | | "chaîne" | -| SERVER_DESCRIPTION | La description de votre serveur | | "chaîne" | -| SERVER_PASSWORD | Sécurisez votre serveur communautaire avec un mot de passe | | "chaîne" | -| ADMIN_PASSWORD | Sécurisez l'accès à l'administration du serveur avec un mot de passe | | "chaîne" | -| UPDATE_ON_BOOT\*\* | Mettre à jour/Installer le serveur lorsque le conteneur Docker démarre (CELÀ DOIT ÊTRE ACTIVÉ LA PREMIÈRE FOIS QUE VOUS EXÉCUTEZ LE CONTENEUR) | true | true/false | -| RCON_ENABLED\*\*\* | Activer RCON pour le serveur Palworld | true | true/false | -| RCON_PORT | Port RCON pour se connecter | 25575 | 1024-65535 | -| QUERY_PORT | Port de requête utilisé pour communiquer avec les serveurs Steam | 27015 | 1024-65535 | -| BACKUP_CRON_EXPRESSION | Le paramètre affecte la fréquence des sauvegardes automatiques. | 0 0 \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuring-automatic-backups-with-cron) | -| BACKUP_ENABLED | Active les sauvegardes automatiques | true | true/false | -| DELETE_OLD_BACKUPS | Supprime les sauvegardes après un certain nombre de jours | false | true/false | -| OLD_BACKUP_DAYS | Combien de jours conserver les sauvegardes | 30 | tout entier positif | -| AUTO_UPDATE_CRON_EXPRESSION | Le paramètre affecte la fréquence des mises à jour automatiques. | 0 \* \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuring-automatic-backups-with-cron) | -| AUTO_UPDATE_ENABLED | Active les mises à jour automatiques | false | true/false | -| AUTO_UPDATE_WARN_MINUTES | Temps d'attente avant de mettre à jour le serveur, après que les joueurs ont été informés. (Cela sera ignoré s'il n'y a pas de joueurs connectés) | 30 | Entier | -| AUTO_REBOOT_CRON_EXPRESSION | Le paramètre affecte la fréquence des mises à jour automatiques. | 0 0 \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuring-automatic-reboots-with-cron) | -| AUTO_REBOOT_ENABLED | Active les redémarrages automatiques | false | true/false | -| AUTO_REBOOT_WARN_MINUTES | Temps d'attente avant de redémarrer le serveur, après que les joueurs ont été informés. | 5 | Entier | -| AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Redémarrez le serveur même s'il y a des joueurs en ligne. | false | true/false | -| TARGET_MANIFEST_ID | Verrouille la version du jeu en correspondance avec l'ID de manifeste de Steam Download Depot. | | Voir [Tableau des ID de manifeste](#tableau-des-versions-vers-les-id-de-manifeste) | -| DISCORD_WEBHOOK_URL | URL du webhook Discord trouvée après la création d'un webhook sur un serveur Discord | | `https://discord.com/api/webhooks/` | -| DISCORD_CONNECT_TIMEOUT | Délai de connexion initial de la commande Discord | 30 | !0 | -| DISCORD_MAX_TIMEOUT | Délai total du webhook Discord | 30 | !0 | -| DISCORD_PRE_UPDATE_BOOT_MESSAGE | Message Discord envoyé lorsque le serveur commence à se mettre à jour | Le serveur est en cours de mise à jour... | "chaîne" | -| DISCORD_POST_UPDATE_BOOT_MESSAGE | Message Discord envoyé lorsque le serveur a terminé de se mettre à jour | Mise à jour du serveur terminée ! | "chaîne" | -| DISCORD_PRE_START_MESSAGE | Message Discord envoyé lorsque le serveur commence à démarrer | Le serveur est démarré ! | "chaîne" | -| DISCORD_PRE_SHUTDOWN_MESSAGE | Message Discord envoyé lorsque le serveur commence à s'arrêter | Le serveur est en cours d'arrêt... | "chaîne" | -| DISCORD_POST_SHUTDOWN_MESSAGE | Message Discord envoyé lorsque le serveur s'est arrêté | Le serveur est arrêté ! | "chaîne" | -| DISABLE_GENERATE_SETTINGS | S'il faut générer automatiquement le fichier PalWorldSettings.ini | false | true/false | -| DISABLE_GENERATE_ENGINE | S'il faut générer automatiquement le fichier Engine.ini | true | true/false | -| ENABLE_PLAYER_LOGGING | Active la journalisation et l'annonce des entrées et sorties de joueurs | true | true/false | -| PLAYER_LOGGING_POLL_PERIOD | Période de sondage (en secondes) pour vérifier les joueurs qui ont rejoint ou quitté | 5 | !0 | +| Variable | Info | Valeurs par défaut | Valeurs autorisées | +| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| TZ | Fuseau horaire utilisé pour dater la sauvegarde du serveur | UTC | Voir [Identifiants TZ](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | +| PLAYERS\* | Nombre maximal de joueurs pouvant rejoindre le serveur | 16 | 1-32 | +| PORT\* | Port UDP exposé par le serveur | 8211 | 1024-65535 | +| PUID\* | UID de l'utilisateur sous lequel le serveur doit s'exécuter | 1000 | !0 | +| PGID\* | GID du groupe sous lequel le serveur doit s'exécuter | 1000 | !0 | +| MULTITHREADING\*\* | Améliore les performances dans les environnements CPU multi-threadés. Elle est efficace jusqu'à un maximum d'environ 4 threads, et allouer plus que ce nombre de threads n'a pas beaucoup de sens. | false | true/false | +| COMMUNITY | Si le serveur apparaît ou non dans le navigateur de serveurs communautaires (À UTILISER AVEC SERVER_PASSWORD) | false | true/false | +| PUBLIC_IP | Vous pouvez spécifier manuellement l'adresse IP globale du réseau sur lequel le serveur est en cours d'exécution. Sinon, elle sera détectée automatiquement. Si cela ne fonctionne pas bien, essayez une configuration manuelle. | | x.x.x.x | +| PUBLIC_PORT | Vous pouvez spécifier manuellement le numéro de port du réseau sur lequel le serveur est en cours d'exécution. Sinon, il sera détecté automatiquement. Si cela ne fonctionne pas bien, essayez une configuration manuelle. | | 1024-65535 | +| SERVER_NAME | Un nom pour votre serveur | | "chaîne" | +| SERVER_DESCRIPTION | La description de votre serveur | | "chaîne" | +| SERVER_PASSWORD | Sécurisez votre serveur communautaire avec un mot de passe | | "chaîne" | +| ADMIN_PASSWORD | Sécurisez l'accès à l'administration du serveur avec un mot de passe | | "chaîne" | +| UPDATE_ON_BOOT\*\* | Mettre à jour/Installer le serveur lorsque le conteneur Docker démarre (CELÀ DOIT ÊTRE ACTIVÉ LA PREMIÈRE FOIS QUE VOUS EXÉCUTEZ LE CONTENEUR) | true | true/false | +| RCON_ENABLED\*\*\* | Activer RCON pour le serveur Palworld | true | true/false | +| RCON_PORT | Port RCON pour se connecter | 25575 | 1024-65535 | +| QUERY_PORT | Port de requête utilisé pour communiquer avec les serveurs Steam | 27015 | 1024-65535 | +| BACKUP_CRON_EXPRESSION | Le paramètre affecte la fréquence des sauvegardes automatiques. | 0 0 \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuration-des-sauvegardes-automatiques-avec-cron) | +| BACKUP_ENABLED | Active les sauvegardes automatiques | true | true/false | +| DELETE_OLD_BACKUPS | Supprime les sauvegardes après un certain nombre de jours | false | true/false | +| OLD_BACKUP_DAYS | Combien de jours conserver les sauvegardes | 30 | tout entier positif | +| AUTO_UPDATE_CRON_EXPRESSION | Le paramètre affecte la fréquence des mises à jour automatiques. | 0 \* \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuration-des-sauvegardes-automatiques-avec-cron) | +| AUTO_UPDATE_ENABLED | Active les mises à jour automatiques | false | true/false | +| AUTO_UPDATE_WARN_MINUTES | Temps d'attente avant de mettre à jour le serveur, après que les joueurs ont été informés. (Cela sera ignoré s'il n'y a pas de joueurs connectés) | 30 | Entier | +| AUTO_REBOOT_CRON_EXPRESSION | Le paramètre affecte la fréquence des mises à jour automatiques. | 0 0 \* \* \* | Nécessite une expression Cron - Voir [Configuration des sauvegardes automatiques avec Cron](#configuration-des-redémarrages-automatiques-avec-cron) | +| AUTO_REBOOT_ENABLED | Active les redémarrages automatiques | false | true/false | +| AUTO_REBOOT_WARN_MINUTES | Temps d'attente avant de redémarrer le serveur, après que les joueurs ont été informés. | 5 | Entier | +| AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Redémarrez le serveur même s'il y a des joueurs en ligne. | false | true/false | +| TARGET_MANIFEST_ID | Verrouille la version du jeu en correspondance avec l'ID de manifeste de Steam Download Depot. | | Voir [Tableau des ID de manifeste](#tableau-des-versions-vers-les-id-de-manifeste) | +| DISCORD_WEBHOOK_URL | URL du webhook Discord trouvée après la création d'un webhook sur un serveur Discord | | `https://discord.com/api/webhooks/` | +| DISCORD_CONNECT_TIMEOUT | Délai de connexion initial de la commande Discord | 30 | !0 | +| DISCORD_MAX_TIMEOUT | Délai total du webhook Discord | 30 | !0 | +| DISCORD_PRE_UPDATE_BOOT_MESSAGE | Message Discord envoyé lorsque le serveur commence à se mettre à jour | Le serveur est en cours de mise à jour... | "chaîne" | +| DISCORD_POST_UPDATE_BOOT_MESSAGE | Message Discord envoyé lorsque le serveur a terminé de se mettre à jour | Mise à jour du serveur terminée ! | "chaîne" | +| DISCORD_PRE_START_MESSAGE | Message Discord envoyé lorsque le serveur commence à démarrer | Le serveur est démarré ! | "chaîne" | +| DISCORD_PRE_SHUTDOWN_MESSAGE | Message Discord envoyé lorsque le serveur commence à s'arrêter | Le serveur est en cours d'arrêt... | "chaîne" | +| DISCORD_POST_SHUTDOWN_MESSAGE | Message Discord envoyé lorsque le serveur s'est arrêté | Le serveur est arrêté ! | "chaîne" | +| DISABLE_GENERATE_SETTINGS | S'il faut générer automatiquement le fichier PalWorldSettings.ini | false | true/false | +| DISABLE_GENERATE_ENGINE | S'il faut générer automatiquement le fichier Engine.ini | true | true/false | +| ENABLE_PLAYER_LOGGING | Active la journalisation et l'annonce des entrées et sorties de joueurs | true | true/false | +| PLAYER_LOGGING_POLL_PERIOD | Période de sondage (en secondes) pour vérifier les joueurs qui ont rejoint ou quitté | 5 | !0 | \* Hautement recommandé à définir @@ -323,7 +323,7 @@ La variable d'environnement `RCON_ENABLED` doit être définie sur `true` pour u > Si la redémarrage de Docker n'est pas configuré avec la politique `always` ou `unless-stopped` > le serveur s'éteindra et devra être redémarré manuellement. > -> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#comment-utiliser) > utilisent déjà la politique nécessaire ## Restauration manuelle à partir d'une sauvegarde @@ -384,7 +384,7 @@ suivantes **doivent** être définies sur `true`: > le serveur s'éteindra et devra être > redémarré manuellement. > -> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#comment-utiliser) > utilisent déjà la politique nécessaire Définissez AUTO_UPDATE_ENABLED pour activer ou désactiver les mises à jour automatiques (par défaut, c'est désactivé). @@ -409,7 +409,7 @@ Pour pouvoir utiliser les redémarrages automatiques avec ce serveur, RCON_ENABL > le serveur s'éteindra et devra être > redémarré manuellement. > -> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#how-to-use) +> La commande docker run exemple et le fichier docker-compose dans [Comment utiliser](#comment-utiliser) > utilisent déjà la politique nécessaire Définissez AUTO_REBOOT_ENABLED pour activer ou désactiver les redémarrages automatiques (par défaut, c'est désactivé). From 397387cc7a15d4deb4fc7986bf2a09b59505b395 Mon Sep 17 00:00:00 2001 From: chowhi123 Date: Fri, 1 Mar 2024 17:32:49 -0500 Subject: [PATCH 56/70] modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/advanced/kubernetes.md new file: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md new file: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md new file: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md new file: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/known-issues/known-issues.md --- .../current/advanced/kubernetes.md | 2 +- .../configuration/engine-settings.md | 54 ++++++++ .../configuration/game-settings.md | 119 ++++++++++-------- .../configuration/server-commands.md | 10 +- .../configuration/server-settings.md | 17 ++- .../current/getting-started/quick-setup.md | 27 ++-- .../guides/automatic-server-stopping.md | 9 ++ .../current/guides/pinning-game-version.md | 24 ++++ .../current/guides/running-without-root.md | 23 ++++ .../current/known-issues/known-issues.md | 56 ++++++++- 10 files changed, 268 insertions(+), 73 deletions(-) create mode 100644 docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md create mode 100644 docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md create mode 100644 docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md create mode 100644 docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/advanced/kubernetes.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/advanced/kubernetes.md index 5be463e2d..0e85a75e2 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/advanced/kubernetes.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/advanced/kubernetes.md @@ -1,5 +1,5 @@ --- -sidebar_position: 1 +sidebar_position: 2 --- # 쿠버네티스 diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md new file mode 100644 index 000000000..2795a8ad3 --- /dev/null +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md @@ -0,0 +1,54 @@ +--- +sidebar_position: 3 +title: 팔월드 서버 엔진설정 +description: 도커 환경변수로 팔월드 엔진설정 (Engine.ini file)하는 법. +keywords: [Palworld, palworld dedicated server, Palworld Engine.ini, palworld engine settings] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: 엔진설정 +--- + +# 팔월드 서버 엔진설정 + +도커 환경변수로 팔월드 엔진설정 (Engine.ini file)하는 법. + +## 환경변수 + +:::warning +해당 환경변수들과 설정들은 게임이 아직 베타이기 때문에 변경될 수 있습니다. +::: + +설정을 이용하기 위해서는 `DISABLE_GENERATE_ENGINE: false`을 설정해주세요. + +엔진 설정을 환경 변수로 바꾸는 과정은 다음과 같은 규칙을 따릅니다 (몇가지 예외 있음): + +- 모두 대문자로 작성 +- 밑줄을 삽입하여 단어를 분할 +- 한 글자로 시작하는 설정(예: 'b')의 경우 그 한 글자를 제거 + +예시입니다: + +* LanServerMaxTickRate -> LAN_SERVER_MAX_TICK_RATE +* bUseFixedFrameRate -> USE_FIXED_FRAME_RATE +* NetClientTicksPerSecond -> NET_CLIENT_TICKS_PER_SECOND + +| 변수 | 설명 | 기본값 | 허용값 | +|-------------------------------|-----------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| DISABLE_GENERATE_ENGINE | 엔진설정의 생성을 비활성화 합니다.ini | true | Boolean | +| LAN_SERVER_MAX_TICK_RATE | 내부서버 사용자의 최대 초당 tick을 설정합니다. 높을수록 게임이 부드러워집니다. | 120 | Integer | +| NET_SERVER_MAX_TICK_RATE | 외부서버 사용자의 최대 초당 tick을 설정합니다. 높을수록 게임이 부드러워집니다. | 120 | Integer | +| CONFIGURED_INTERNET_SPEED | 외부서버 사용자의 인터넷 속도를 (bytes per second) 설정합니다. 높을수록 대역폭의 병목현상이 줄어듭니다. | 104857600 | Integer (in bytes) | +| CONFIGURED_LAN_SPEED | 내부서버 사용자의 로컬 속도를 (bytes per second) 설정합니다. 높을수록 대역폭의 병목현상이 줄어듭니다. | 104857600 | Integer (in bytes) | +| MAX_CLIENT_RATE | 모든 클라이언트의 최대 데이터 전송속도를 설정합니다. 높을수록 데이터의 한도초과를 방지합니다. | 104857600 | Integer (in bytes) | +| MAX_INTERNET_CLIENT_RATE | 외부서버 사용자의 고용량 데이터 전송을 한도 없이 허가합니다. | 104857600 | Integer (in bytes) | +| SMOOTH_FRAME_RATE | 일관된 시각적 경험을 위해 게임 엔진에서 변동 프레임율 설정을 활성화합니다. | true | Boolean | +| SMOOTH_FRAME_RATE_UPPER_LIMIT | 부드럽게 하기위해 최대 목표 프레임률 범위을 설정합니다. | 120.000000 | Float | +| SMOOTH_FRAME_RATE_LOWER_LIMIT | 부드럽게 하기위해 최소 목표 프레임률 범위을 설정합니다. | 30.000000 | Float | +| USE_FIXED_FRAME_RATE | 프레임률 고정을 활성화합니다. | false | Boolean | +| FIXED_FRAME_RATE | 프레임률를 고정합니다 | 120.000000 | Float | +| MIN_DESIRED_FRAME_RATE | 수용 가능한 최소 프레임률을 설정해 해당 프레임율에서 게임이 부드럽게 돌아가게 합니다. | 60.000000 | Float | +| NET_CLIENT_TICKS_PER_SECOND | 클라이언트의 업데이트 주기를 늘려 렉과 반응도를 향상시킵니다. | 120 | Integer | + +:::tip +서버의 tickrate을 120이상으로 설정하는 것은 게임을 조금 더 부드럽게 하지만, +현재 문제가되는 물결현상 (rubber-banding)을 해결하지 못하고 하드웨어에 많은 부담을 줍니다. +::: diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md index 11f409698..4300b6dff 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md @@ -1,9 +1,16 @@ --- sidebar_position: 2 +title: 팔월드 서버 게임설정 +description: 도커의 환경변수로 팔월드 게임 설정하기 (PalWorldSettings.ini file). +keywords: [Palworld, palworld dedicated server, Palworld PalWorldSettings.ini, palworld game settings, PalWorldSettings.ini] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: 게임설정 --- # 게임 설정 +도커의 환경변수로 팔월드 게임 설정하기 (PalWorldSettings.ini file). + ## 환경 변수로 설정 :::warning @@ -24,61 +31,65 @@ sidebar_position: 2 - PalSpawnNumRate -> PAL_SPAWN_NUM_RATE - bIsPvP -> IS_PVP -| 변수 | 설명 | 기본값 | 허용값 | +| 변수 | 설명 | 기본값 | 허용값 | |-------------------------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------| -| DIFFICULTY | 게임 난이도 | None | `None`,`Normal`,`Difficult` | -| DAYTIME_SPEEDRATE | 낮 시간 속도 - 숫자가 작을수록 낮이 짧아짐 | 1.000000 | Float | -| NIGHTTIME_SPEEDRATE | 밤 시간 속도 - 숫자가 작을수록 밤이 짧아짐 | 1.000000 | Float | -| EXP_RATE | 경험치 획득 비율 | 1.000000 | Float | -| PAL_CAPTURE_RATE | PAL 포획률 | 1.000000 | Float | -| PAL_SPAWN_NUM_RATE | PAL 출현 비율 | 1.000000 | Float | -| PAL_DAMAGE_RATE_ATTACK | PAL이 주는 데미지 배수 | 1.000000 | Float | -| PAL_DAMAGE_RATE_DEFENSE | PAL이 받는 데미지 배수 | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_ATTACK | 플레이어가 주는 데미지 배수 | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_DEFENSE | 플레이어가 받는 데미지 배수 | 1.000000 | Float | -| PLAYER_STOMACH_DECREASE_RATE | 플레이어 포만도 감소율 | 1.000000 | Float | -| PLAYER_STAMINA_DECREASE_RATE | 플레이어 기력 감소율 | 1.000000 | Float | -| PLAYER_AUTO_HP_REGEN_RATE | 플레이어 HP 자연 회복률 | 1.000000 | Float | -| PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | 플레이어 수면 시 HP 회복률 | 1.000000 | Float | -| PAL_STOMACH_DECREASE_RATE | PAL 포만도 감소율 | 1.000000 | Float | -| PAL_STAMINA_DECREASE_RATE | PAL 기력 감소율 | 1.000000 | Float | -| PAL_AUTO_HP_REGEN_RATE | PAL HP 자연 회복률 | 1.000000 | Float | -| PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | PAL 수면 시 HP 회복률 (PLA상자 내 HP 회복률) | 1.000000 | Float | -| BUILD_OBJECT_DAMAGE_RATE | 구조물 피해 배수 | 1.000000 | Float | -| BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | 구조물 노화 속도 배수 | 1.000000 | Float | -| COLLECTION_DROP_RATE | 채집 아이템 획득량 배수 | 1.000000 | Float | -| COLLECTION_OBJECT_HP_RATE | 채집 오브젝트 HP 배수 | 1.000000 | Float | -| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | 채집 오브젝트 생성 간격 - 숫자가 작을수록 재 생성이 빨라짐 | 1.000000 | Float | -| ENEMY_DROP_ITEM_RATE | 드롭 아이템 양 배수 | 1.000000 | Float | -| DEATH_PENALTY | 사망 패널티, None: 사망 패널티 없음, Item: 장비 이외의 아이템 드롭, ItemAndEquipment: 모든 아이템 드롭, All: 모든 PAL과 모든 아이템 드롭 | All | `None`,`Item`,`ItemAndEquipment`,`All` | -| ENABLE_PLAYER_TO_PLAYER_DAMAGE | 플레이어간 데미지 여부 | False | Boolean | -| ENABLE_FRIENDLY_FIRE | 아군간 데미지 여부 | False | Boolean | -| ENABLE_INVADER_ENEMY | 습격 이벤트 발생 여부 | True | Boolean | -| ACTIVE_UNKO | UNKO 활성화 여부(?) | False | Boolean | -| ENABLE_AIM_ASSIST_PAD | 컨트롤러 조준 보조 활성화 | True | Boolean | -| ENABLE_AIM_ASSIST_KEYBOARD | 키보드 조준 보조 활성화 | False | Boolean | -| DROP_ITEM_MAX_NUM | 월드 내의 드롭 아이템 최대 수 | 3000 | Integer | -| DROP_ITEM_MAX_NUM_UNKO | 월드 내의 UNKO 드롭 최대 수 | 100 | Integer | -| BASE_CAMP_MAX_NUM | 거점 최대 수량 | 128 | Integer | -| BASE_CAMP_WORKER_MAX_NUM | 거점 작업 PAL 최대 수 | 15 | Integer | -| DROP_ITEM_ALIVE_MAX_HOURS | 드롭 아이템이 사라지기까지 걸리는 시간 | 1.000000 | Float | -| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | 온라인 플레이어가 없을 때 길드 자동 리셋 여부 | False | Bool | -| AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | 온라인 플레이어가 없을 때 길드를 자동 리셋 시간(h) | 72.000000 | Float | -| GUILD_PLAYER_MAX_NUM | 길드 내 최대 인원 수 | 20 | Integer | -| PAL_EGG_DEFAULT_HATCHING_TIME | 거대알 부화에 걸리는 시간(h) | 72.000000 | Float | -| WORK_SPEED_RATE | 작업 속도 배수 | 1.000000 | Float | -| IS_MULTIPLAY | 멀티플레이 활성화 여부 | False | Boolean | -| IS_PVP | PVP 활성화 여부 | False | Boolean | -| CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | 다른 길드 플레이어의 데스 페널티 드롭 아이템 획득 가능 여부 | False | Boolean | -| ENABLE_NON_LOGIN_PENALTY | 비 로그인 패널티 활성화 여부 | True | Boolean | -| ENABLE_FAST_TRAVEL | 빠른 이동 활성화 여부 | True | Boolean | -| IS_START_LOCATION_SELECT_BY_MAP | 시작 위치를 지도로 선택할 수 있는지 여부 | True | Boolean | -| EXIST_PLAYER_AFTER_LOGOUT | 로그오프 후 플레이어 삭제 여부 | False | Boolean | -| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | 다른 길드 플레이어에 대한 방어 허용 여부 | False | Boolean | -| COOP_PLAYER_MAX_NUM | 협동던전 최대인원 | 4 | Integer | -| REGION | Region | | String | -| USEAUTH | 인증 사용 여부 | True | Boolean | -| BAN_LIST_URL | 사용할 BAN 목록 | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| DIFFICULTY | 게임 난이도 | None | `None`,`Normal`,`Difficult` | +| DAYTIME_SPEEDRATE | 낮 시간 속도 - 숫자가 작을수록 낮이 짧아짐 | 1.000000 | Float | +| NIGHTTIME_SPEEDRATE | 밤 시간 속도 - 숫자가 작을수록 밤이 짧아짐 | 1.000000 | Float | +| EXP_RATE | 경험치 획득 비율 | 1.000000 | Float | +| PAL_CAPTURE_RATE | PAL 포획률 | 1.000000 | Float | +| PAL_SPAWN_NUM_RATE | PAL 출현 비율 | 1.000000 | Float | +| PAL_DAMAGE_RATE_ATTACK | PAL이 주는 데미지 배수 | 1.000000 | Float | +| PAL_DAMAGE_RATE_DEFENSE | PAL이 받는 데미지 배수 | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_ATTACK | 플레이어가 주는 데미지 배수 | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_DEFENSE | 플레이어가 받는 데미지 배수 | 1.000000 | Float | +| PLAYER_STOMACH_DECREASE_RATE | 플레이어 포만도 감소율 | 1.000000 | Float | +| PLAYER_STAMINA_DECREASE_RATE | 플레이어 기력 감소율 | 1.000000 | Float | +| PLAYER_AUTO_HP_REGEN_RATE | 플레이어 HP 자연 회복률 | 1.000000 | Float | +| PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | 플레이어 수면 시 HP 회복률 | 1.000000 | Float | +| PAL_STOMACH_DECREASE_RATE | PAL 포만도 감소율 | 1.000000 | Float | +| PAL_STAMINA_DECREASE_RATE | PAL 기력 감소율 | 1.000000 | Float | +| PAL_AUTO_HP_REGEN_RATE | PAL HP 자연 회복률 | 1.000000 | Float | +| PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | PAL 수면 시 HP 회복률 (PLA상자 내 HP 회복률) | 1.000000 | Float | +| BUILD_OBJECT_DAMAGE_RATE | 구조물 피해 배수 | 1.000000 | Float | +| BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | 구조물 노화 속도 배수 | 1.000000 | Float | +| COLLECTION_DROP_RATE | 채집 아이템 획득량 배수 | 1.000000 | Float | +| COLLECTION_OBJECT_HP_RATE | 채집 오브젝트 HP 배수 | 1.000000 | Float | +| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | 채집 오브젝트 생성 간격 - 숫자가 작을수록 재 생성이 빨라짐 | 1.000000 | Float | +| ENEMY_DROP_ITEM_RATE | 드롭 아이템 양 배수 | 1.000000 | Float | +| DEATH_PENALTY | 사망 패널티, None: 사망 패널티 없음, Item: 장비 이외의 아이템 드롭, ItemAndEquipment: 모든 아이템 드롭, All: 모든 PAL과 모든 아이템 드롭 | All | `None`,`Item`,`ItemAndEquipment`,`All` | +| ENABLE_PLAYER_TO_PLAYER_DAMAGE | 플레이어간 데미지 여부 | False | Boolean | +| ENABLE_FRIENDLY_FIRE | 아군간 데미지 여부 | False | Boolean | +| ENABLE_INVADER_ENEMY | 습격 이벤트 발생 여부 | True | Boolean | +| ACTIVE_UNKO | UNKO 활성화 여부(?) | False | Boolean | +| ENABLE_AIM_ASSIST_PAD | 컨트롤러 조준 보조 활성화 | True | Boolean | +| ENABLE_AIM_ASSIST_KEYBOARD | 키보드 조준 보조 활성화 | False | Boolean | +| DROP_ITEM_MAX_NUM | 월드 내의 드롭 아이템 최대 수 | 3000 | Integer | +| DROP_ITEM_MAX_NUM_UNKO | 월드 내의 UNKO 드롭 최대 수 | 100 | Integer | +| BASE_CAMP_MAX_NUM | 거점 최대 수량 | 128 | Integer | +| BASE_CAMP_WORKER_MAX_NUM | 거점 작업 PAL 최대 수 | 15 | Integer | +| DROP_ITEM_ALIVE_MAX_HOURS | 드롭 아이템이 사라지기까지 걸리는 시간 | 1.000000 | Float | +| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | 온라인 플레이어가 없을 때 길드 자동 리셋 여부 | False | Bool | +| AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | 온라인 플레이어가 없을 때 길드를 자동 리셋 시간(h) | 72.000000 | Float | +| GUILD_PLAYER_MAX_NUM | 길드 내 최대 인원 수 | 20 | Integer | +| PAL_EGG_DEFAULT_HATCHING_TIME | 거대알 부화에 걸리는 시간(h) | 72.000000 | Float | +| WORK_SPEED_RATE | 작업 속도 배수 | 1.000000 | Float | +| IS_MULTIPLAY | 멀티플레이 활성화 여부 | False | Boolean | +| IS_PVP | PVP 활성화 여부 | False | Boolean | +| CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | 다른 길드 플레이어의 데스 페널티 드롭 아이템 획득 가능 여부 | False | Boolean | +| ENABLE_NON_LOGIN_PENALTY | 비 로그인 패널티 활성화 여부 | True | Boolean | +| ENABLE_FAST_TRAVEL | 빠른 이동 활성화 여부 | True | Boolean | +| IS_START_LOCATION_SELECT_BY_MAP | 시작 위치를 지도로 선택할 수 있는지 여부 | True | Boolean | +| EXIST_PLAYER_AFTER_LOGOUT | 로그오프 후 플레이어 삭제 여부 | False | Boolean | +| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | 다른 길드 플레이어에 대한 방어 허용 여부 | False | Boolean | +| COOP_PLAYER_MAX_NUM | 협동던전 최대인원 | 4 | Integer | +| REGION | Region | | String | +| USEAUTH | 인증 사용 여부 | True | Boolean | +| BAN_LIST_URL | 사용할 BAN 목록 | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| SHOW_PLAYER_LIST | ESC시 사용자 리스트 | True | Boolean | +| TARGET_MANIFEST_ID | 게임의 버젼을 스팀 다운로드 디포의 해당 Manifest ID로 고정. | | [Manifest ID Table](#버전별Manifest ID표) 보기 | +| ENABLE_PLAYER_LOGGING | 플레이어가 접속 또는 종료시 로깅과 공지를 활성화 | true | true/false | +| PLAYER_LOGGING_POLL_PERIOD | 플레이어의 접속과 종료를 확인하기위한 폴링시간(초) 설정 | 5 | !0 | ### 수동으로 설정 diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md index 645f8da3b..ac84f950f 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-commands.md @@ -1,8 +1,14 @@ --- -sidebar_position: 3 +sidebar_position: 4 +title: 팔월드 데디케이드 서버 명령어 (RCON) +description: RCON을 사용하여 서버와 상호 작용하는 방법을 소개합니다. +keywords: [Palworld, palworld dedicated server, Palworld Server Commands, Palworld server how to ban player, Palworld server how to kick player] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Server Commands (RCON) --- -# 서버 명령어 (RCON) + +# 팔월드 데디케이드 서버 명령어 (RCON) RCON을 사용하여 서버와 상호 작용하는 방법을 소개합니다. diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md index 391420fc9..fc10bfa1b 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/server-settings.md @@ -1,10 +1,15 @@ --- sidebar_position: 1 +title: 팔월드 데디케이트 서버 설정 +description: 도커 환경변수를 사용해 팔월드 서버 세팅 변경방법. +keywords: [Palworld, palworld dedicated server, Palworld Dedicated server settings, palworld server settings, Palworld Docker Dedicated server settings, palworld Docker server settings] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Server Settings --- + +# 팔월드 데디케이트 서버 설정 -# 서버 설정 - -이 부분에서는 서버를 구성하는 방법을 설명합니다. +도커 환경변수를 사용해 팔월드 서버 세팅 변경방법. ## 환경 변수 @@ -45,6 +50,8 @@ sidebar_position: 1 | AUTO_REBOOT_CRON_EXPRESSION | 자동 서버 재부팅 주기 | 0 0 \* \* \* | Cron 표현식 필요 - [cron을 이용한 자동 재부팅 설정](https://palworld-server-docker.loef.dev/ko/guides/automatic-reboots#cron%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9E%90%EB%8F%99-%EC%9E%AC%EB%B6%80%ED%8C%85-%EC%84%A4%EC%A0%95) 참조 | | AUTO_REBOOT_ENABLED | 자동 서버 재부팅 활성화 여부 | false | true/false | | AUTO_REBOOT_WARN_MINUTES | 재부팅 대기 시간 설정(분), 이때 사용자는 분 단위로 서버 종료에 대한 알림을 받습니다. | 5 | !0 | +| AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | 플레이어 온라인시에도 재부팅. | false | true/false | +| TARGET_MANIFEST_ID | 게임의 버젼을 스팀 다운로드 디포의 해당 Manifest ID로 고정. | | See [Manifest ID Table](https://palworld-server-docker.loef.dev/guides/pinning-game-version#version-to-manifest-id-table) | | DISCORD_WEBHOOK_URL | 디스코드 웹훅 URL | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | 디스코드 명령 초기 연결 시간 초과 | 30 | !0 | | DISCORD_MAX_TIMEOUT | Discord 총 훅 시간 초과 | 30 | !0 | @@ -54,6 +61,10 @@ sidebar_position: 1 | DISCORD_PRE_SHUTDOWN_MESSAGE | 서버가 종료되기 시작할 때 전송되는 디스코드 메시지 | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | 서버가 멈췄을 때 전송되는 디스코드 메시지 | Server is stopped! | "string" | | DISABLE_GENERATE_SETTINGS | 자동으로 PalWorldSettings.ini를 생성할지 여부 | false | true/false | +| DISABLE_GENERATE_ENGINE | 엔진설정의 생성을 비활성화 합니다.ini | true | true/false | +| ENABLE_PLAYER_LOGGING | 플레이어가 접속 또는 종료시 로깅과 공지를 활성화 | true | true/false | +| PLAYER_LOGGING_POLL_PERIOD | 플레이어의 접속과 종료를 확인하기위한 폴링시간(초) 설정 | 5 | !0 | +| ARM_COMPATIBILITY_MODE | 서버 업데이트를하기 위해 steamcmd를 실행시 호환성 레이어를 Box86에서 QEMU로 변경. 이 설정은 ARM64 호스트 전용입니다. | false | true/false | *설정하는 것을 적극 권장합니다. diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md index f588818d9..5b5547bb6 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md @@ -1,6 +1,11 @@ --- sidebar_position: 1 slug: / +title: 팔월드 데디케이드 서버 빠른설정 +description: 이 가이드는 팔월드 데디케이드 서버를 도커에서 설정하는 방법입니다! 불과 몇분만에 데디케이드 서버를 설정해보세요. +keywords: [Palworld, palworld dedicated server, how to setup palworld dedicated server, palworld server docker, palworld docker] +image: ../assets/Palworld_Banner.jpg +sidebar_label: 빠른설정 --- # 빠른 설정 @@ -74,6 +79,16 @@ services: - ./palworld:/palworld/ ``` +### 서버 시작하기 + +`docker compose up -d` 명령어를 `docker-compose.yml`가 들어있는 폴더안에서 입력해 백그라운드에서 실행하세요. + +### 서버 정지하기 + +`docker compose stop` 명령어를 `docker-compose.yml`가 들어있는 폴더안에서 입력해 서버를 정지하세요. + +`docker compose down --rmi all` 명령어를 `docker-compose.yml`가 들어있는 폴더안에서 입력해 서버와 이미지를 정지해 지우세요. + ### Docker Run ```bash @@ -114,14 +129,4 @@ docker run -d \ --restart unless-stopped \ --stop-timeout 30 \ thijsvanloef/palworld-server-docker:latest -``` - -## 서버 시작하기 - -`docker compose up -d` 를 사용해 백그라운드에서 서버를 시작합니다. - -## 서버 중지하기 - -`docker compose stop` 를 사용해 서버를 중지시킵니다. - -`docker compose down --rmi all` 를 사용해 서버를 중지시키고 삭제한 다음 컴퓨터의 docker image까지 삭제합니다. +``` \ No newline at end of file diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md new file mode 100644 index 000000000..48a12b51c --- /dev/null +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/automatic-server-stopping.md @@ -0,0 +1,9 @@ +--- +sidebar_position: 8 +--- + +# 서버 접속 유저가 없을때 서버종료하기 + +사용자 [dnwjn](https://github.com/dnwjn)의 컨테이너는 팔월드 서버에 유저가 없을 경우 서버를 멈춥니다. 유저가 접속하려는 경우 다시 서버를 시작합니다. + +해당기능의 공식적인 문서를 확인하시려면 [dnwjn/palworld-server-watcher repository](https://github.com/dnwjn/palworld-server-watcher)를 확인하세요. diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md new file mode 100644 index 000000000..12a7d4cf6 --- /dev/null +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 7 +--- + +# 게임버전 고정하기 + +:::warning +다운그레이딩이 가능하나 세이브 파일에 어떠한 영향이 있을지 알 수 없습니다. + +**본인의 책임하에 하세요!** +::: + +만약 **TARGET_MANIFEST_ID** 환경변수가 정해졌다면, 서버의 버전은 특정 manifest로 고정됩니다. +Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. + +## Version To Manifest ID Table + +| Version | Manifest ID | +|---------|----------------------| +| 1.3.0 | 1354752814336157338 | +| 1.4.0 | 4190579964382773830 | +| 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | +| 1.5.1 | 2815085007637542021 | diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md new file mode 100644 index 000000000..bfd7a7bd1 --- /dev/null +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md @@ -0,0 +1,23 @@ +--- +sidebar_position: 6 +--- + +# 루트권한 없이 실행하기 + +해당 항목은 고급사용자를 위한 항목입니다. + +해당 컨테이너는 [기본사용자 덮어씌우기](https://docs.docker.com/engine/reference/run/#user)가 가능합니다. 해당 이미지의 기본사용자는 루트입니다. + +사용자가 유저와 그룹을 설정하기 떄문에 `PUID`와 `PGID`가 무시됩니다. + +UID를 찾으려면: `id -u`를 사용합니다. +GID를 찾으려면: `id -g`를 사용합니다. + +반드시 유저를 `NUMBERICAL_UID:NUMBERICAL_GID`와 같이 설정하셔야합니다. + +아래는 UID를 1000으로 GID를 1001로 가정해 작성된 예제문입니다. + +* docker run에서 `--user 1000:1001 \`를 마지막 줄위에 추가하세요. +* docker compose에서 `user: 1000:1001`를 포트설정위에 추가하세요. + +만약 다른 UID/GID를 사용해 실행하려면 디렉토리의 소유권을 변경해야합니다: `chown UID:GID palworld/` 또는 모든 계정의 권한를 수정하셔야합니다: `chmod o=rwx palworld/` \ No newline at end of file diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/known-issues/known-issues.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/known-issues/known-issues.md index 639bbf622..273576886 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/known-issues/known-issues.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/known-issues/known-issues.md @@ -1,8 +1,28 @@ --- -sidebar_position: 4 +sidebar_position: 5 +title: 팔월드 데디케이트 서버 알려진 버그 +description: 현재 알려진 팔월드 데디케이트 서버 버그, including S_API FAIL, Setting breakpad minidump AppID = 2394010 그리고 더. +keywords: [Palworld, palworld dedicated server, Palworld dedicated server known issues, Palworld dedicated server issues] +image: ../../assets/Palworld_Banner.jpg +sidebar_label: Known issues --- + +# 팔월드 데디케이트 서버 알려진 버그 -# Known Issues +현재 알려진 팔월드 데디케이트 서버 버그, +including S_API FAIL, Setting breakpad minidump AppID = 2394010 그리고 더. + +## PalWorldSettings.ini가 계속 초기화되는 문제 + +`PalworldSettings.ini`가 서버 재시작시 계속 초기화된다면 `DISABLE_GENERATE_SETTINGS` 환경변수를 `true`로 변경해주세요. + +해당 환경변수가 설정되지 않으면 설정되어있는 도커의 환경변수로 덮어쓰려질 것입니다. [the environment variables](https://palworld-server-docker.loef.dev/getting-started/configuration/game-settings). + +:::tip +It is recommended you use the environment variables to set your game settings, instead of manually changing the `PalWorldSettings.ini` + +If you do want to change the file manually, please make sure the server is off when you make the changes. +::: ## Broadcast command can only send 1 word @@ -41,6 +61,38 @@ it means that you'll need to look at the following: * Firewall settings, make sure that you allow port 8211/udp and 27015/udp through your firewall * Make sure you've correctly port forwarded your 8211/udp 27015/udp +## Only ARM64 hosts with 4k page size is supported + +This error occurs when the container detects that the host kernel does not have a 4k page size, +which is required for the emulation used for ARM64 architecture. The container relies on this specific page +size for proper execution. + +If the host kernel does not have a 4k page size, you have a couple of alternatives: + +* **Download server files in a different machine**: The 4k page size limitation is only applicable for steamcmd +ARM emulation. You may try initializing the container in a fully supported machine (AMD64 or ARM64 with 4k page size) +and let it download the server files with `UPDATE_ON_BOOT` enabled. Make sure to disable `UPDATE_ON_BOOT` in the +problematic machine to prevent steamcmd from executing. + +* **Change/Modify Kernel**: You can consider changing the kernel of your host machine to one that supports a 4k page size. + * The Raspberry Pi 5 with Raspberry Pi OS has an easy [switch](https://github.com/raspberrypi/bookworm-feedback/issues/107#issuecomment-1773810662). + +* **Switch OS**: Another option is to switch OS to ones shipped with 4k page size kernels. + * Debian and Ubuntu are known working Linux distros. + +* **Run within a VM**: Another option is to run the container within a virtual machine (VM) that is configured + with a kernel supporting a 4k page size. By doing so, you can ensure compatibility and proper execution of the + container. + +## /usr/local/bin/box86: cannot execute binary file: Exec format error (ARM64 hosts) + +This means that the Docker host is unable to run AArch32 binaries such as Box86 without an additional +compatibility layer which is the case for Apple Silicon. + +Docker Desktop solves this by running its containers inside a VM (QEMU) with a compatible kernel. +However, if you're unable to use Docker Desktop, then try setting `ARM_COMPATIBILITY_MODE` to `true`. +This will switch the container from using Box86 to QEMU when running steamcmd. + ## FAQ [A useful FAQ that gets updated regularly](https://gist.github.com/Toakan/3c78a577c21a21fcc5fa917f3021d70e#file-palworld-server-faq-community-md) From 3b9d24596bd1ad5ce9f22028d80eb8efd43b78d3 Mon Sep 17 00:00:00 2001 From: chowhi123 Date: Fri, 1 Mar 2024 23:56:51 -0500 Subject: [PATCH 57/70] modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md --- .../configuration/engine-settings.md | 6 +++--- .../getting-started/configuration/game-settings.md | 14 +++++++------- .../current/getting-started/quick-setup.md | 8 +++++--- .../current/guides/pinning-game-version.md | 3 ++- .../current/guides/running-without-root.md | 2 +- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md index 2795a8ad3..41ca067b1 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/engine-settings.md @@ -21,9 +21,9 @@ sidebar_label: 엔진설정 엔진 설정을 환경 변수로 바꾸는 과정은 다음과 같은 규칙을 따릅니다 (몇가지 예외 있음): -- 모두 대문자로 작성 -- 밑줄을 삽입하여 단어를 분할 -- 한 글자로 시작하는 설정(예: 'b')의 경우 그 한 글자를 제거 +* 모두 대문자로 작성 +* 밑줄을 삽입하여 단어를 분할 +* 한 글자로 시작하는 설정(예: 'b')의 경우 그 한 글자를 제거 예시입니다: diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md index 4300b6dff..2e02533e0 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/configuration/game-settings.md @@ -6,7 +6,7 @@ keywords: [Palworld, palworld dedicated server, Palworld PalWorldSettings.ini, p image: ../../assets/Palworld_Banner.jpg sidebar_label: 게임설정 --- - + # 게임 설정 도커의 환경변수로 팔월드 게임 설정하기 (PalWorldSettings.ini file). @@ -21,15 +21,15 @@ sidebar_label: 게임설정 서버 설정을 환경 변수로 바꾸는 과정은 다음과 같은 규칙을 따릅니다 (몇가지 예외 있음): -- 모두 대문자로 작성 -- 밑줄을 삽입하여 단어를 분할 -- 한 글자로 시작하는 설정(예: 'b')의 경우 그 한 글자를 제거 +* 모두 대문자로 작성 +* 밑줄을 삽입하여 단어를 분할 +* 한 글자로 시작하는 설정(예: 'b')의 경우 그 한 글자를 제거 아래는 예시입니다: -- Difficulty -> DIFFICULTY -- PalSpawnNumRate -> PAL_SPAWN_NUM_RATE -- bIsPvP -> IS_PVP +* Difficulty -> DIFFICULTY +* PalSpawnNumRate -> PAL_SPAWN_NUM_RATE +* bIsPvP -> IS_PVP | 변수 | 설명 | 기본값 | 허용값 | |-------------------------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------| diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md index 5b5547bb6..10ac66767 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/quick-setup.md @@ -7,7 +7,7 @@ keywords: [Palworld, palworld dedicated server, how to setup palworld dedicated image: ../assets/Palworld_Banner.jpg sidebar_label: 빠른설정 --- - + # 빠른 설정 Palworld 전용 서버를 이용해 보세요! @@ -61,7 +61,9 @@ services: 환경 변수를 설정하는 또 다른 방법으로 [.env.example](https://github.com/thijsvanloef/palworld-server-docker/blob/main/.env.example) 파일을 **.env** 라는 새로운 파일에 복사할 수 있습니다. -필요에 맞게 수정하고 [환경 변수](https://palworld-server-docker.loef.dev/ko/getting-started/configuration/server-settings/#환경-변수) 섹션에서 올바른 값을 확인해보세요. [docker-compose.yml](https://github.com/thijsvanloef/palworld-server-docker/blob/main/docker-compose.yml)을 다음과 같이 수정합니다: +필요에 맞게 수정하고 [환경 변수](https://palworld-server-docker.loef.dev/ko/getting-started/configuration/server-settings/#환경-변수) 섹션에서 올바른 값을 확인해보세요. + +[docker-compose.yml](https://github.com/thijsvanloef/palworld-server-docker/blob/main/docker-compose.yml)을 다음과 같이 수정합니다: ```yml services: @@ -129,4 +131,4 @@ docker run -d \ --restart unless-stopped \ --stop-timeout 30 \ thijsvanloef/palworld-server-docker:latest -``` \ No newline at end of file +``` diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md index 12a7d4cf6..a820291ac 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md @@ -11,7 +11,8 @@ sidebar_position: 7 ::: 만약 **TARGET_MANIFEST_ID** 환경변수가 정해졌다면, 서버의 버전은 특정 manifest로 고정됩니다. -Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. +Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. +Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. ## Version To Manifest ID Table diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md index bfd7a7bd1..716f9d6e0 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/running-without-root.md @@ -20,4 +20,4 @@ GID를 찾으려면: `id -g`를 사용합니다. * docker run에서 `--user 1000:1001 \`를 마지막 줄위에 추가하세요. * docker compose에서 `user: 1000:1001`를 포트설정위에 추가하세요. -만약 다른 UID/GID를 사용해 실행하려면 디렉토리의 소유권을 변경해야합니다: `chown UID:GID palworld/` 또는 모든 계정의 권한를 수정하셔야합니다: `chmod o=rwx palworld/` \ No newline at end of file +만약 다른 UID/GID를 사용해 실행하려면 디렉토리의 소유권을 변경해야합니다: `chown UID:GID palworld/` 또는 모든 계정의 권한를 수정하셔야합니다: `chmod o=rwx palworld/` From 7b2c04216c7fb21ec13b15120f289501434af3b0 Mon Sep 17 00:00:00 2001 From: chowhi123 Date: Sat, 2 Mar 2024 00:04:40 -0500 Subject: [PATCH 58/70] modified: docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md --- .../current/guides/pinning-game-version.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md index a820291ac..3663bdaf8 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md @@ -11,8 +11,7 @@ sidebar_position: 7 ::: 만약 **TARGET_MANIFEST_ID** 환경변수가 정해졌다면, 서버의 버전은 특정 manifest로 고정됩니다. -Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. -Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. +Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. ## Version To Manifest ID Table From 4c5682abe78017044a982ca9dd9d2c600167a45e Mon Sep 17 00:00:00 2001 From: chowhi123 <61570417+chowhi123@users.noreply.github.com> Date: Sat, 2 Mar 2024 00:11:26 -0500 Subject: [PATCH 59/70] Update pinning-game-version.md --- .../current/guides/pinning-game-version.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md index 3663bdaf8..f9e85dc6f 100644 --- a/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md +++ b/docusaurus/i18n/ko/docusaurus-plugin-content-docs/current/guides/pinning-game-version.md @@ -11,7 +11,8 @@ sidebar_position: 7 ::: 만약 **TARGET_MANIFEST_ID** 환경변수가 정해졌다면, 서버의 버전은 특정 manifest로 고정됩니다. -Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. +Manifest는 게임의 릴리즈 시간/업데이트 버젼에 따라 정해집니다. +Manifest는 SteamCMD나 [SteamDB](https://steamdb.info/depot/2394012/manifests/)와 같은 웹사이트에서 검색가능합니다. ## Version To Manifest ID Table From 135a900a6e35d6c99b204a542782e34ecb9a38c3 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Sat, 2 Mar 2024 12:00:02 +0100 Subject: [PATCH 60/70] remove trailing slash from docs --- docusaurus/docusaurus.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/docusaurus/docusaurus.config.js b/docusaurus/docusaurus.config.js index b832c1d03..e8eeabd25 100644 --- a/docusaurus/docusaurus.config.js +++ b/docusaurus/docusaurus.config.js @@ -11,6 +11,7 @@ const config = { title: 'Palworld Server Docker Documentation', tagline: 'All the information you need to get a Palworld Dedicated server up and running using Docker', favicon: 'img/favicon.ico', + trailingSlash: false, // Set the production url of your site here url: 'https://palworld-server-docker.loef.dev', From a27e385a1aeacdfd2520ce8c5b1b3e23731cb5c8 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Sat, 2 Mar 2024 13:48:45 +0100 Subject: [PATCH 61/70] revert original readme from main --- README.md | 275 +++++++++++++++++++++++++++--------------------------- 1 file changed, 137 insertions(+), 138 deletions(-) diff --git a/README.md b/README.md index 970e983c5..cf0b20e30 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ This is a Docker container to help you get started with hosting your own This Docker container has been tested and will work on the following OS: -- Linux (Ubuntu/Debian) -- Windows 10,11 -- MacOS (including Apple Silicon M1/M2/M3). +* Linux (Ubuntu/Debian) +* Windows 10,11 +* MacOS (including Apple Silicon M1/M2/M3). This container has also been tested and will work on both `x64` and `ARM64` based CPU architecture. @@ -53,7 +53,7 @@ Massive shoutout to the following sponsors! ## Server Requirements | Resource | Minimum | Recommended | -| -------- | ------- | ---------------------------------------- | +|----------|---------|------------------------------------------| | CPU | 4 cores | 4+ cores | | RAM | 16GB | Recommend over 32GB for stable operation | | Storage | 8GB | 20GB | @@ -68,30 +68,30 @@ This repository includes an example [docker-compose.yml](/docker-compose.yml) fi ```yml services: - palworld: - image: thijsvanloef/palworld-server-docker:latest - restart: unless-stopped - container_name: palworld-server - stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop - ports: - - 8211:8211/udp - - 27015:27015/udp - environment: - PUID: 1000 - PGID: 1000 - PORT: 8211 # Optional but recommended - PLAYERS: 16 # Optional but recommended - SERVER_PASSWORD: 'worldofpals' # Optional but recommended - MULTITHREADING: true - RCON_ENABLED: true - RCON_PORT: 25575 - TZ: 'UTC' - ADMIN_PASSWORD: 'adminPasswordHere' - COMMUNITY: false # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD! - SERVER_NAME: 'palworld-server-docker by Thijs van Loef' - SERVER_DESCRIPTION: 'palworld-server-docker by Thijs van Loef' - volumes: - - ./palworld:/palworld/ + palworld: + image: thijsvanloef/palworld-server-docker:latest + restart: unless-stopped + container_name: palworld-server + stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop + ports: + - 8211:8211/udp + - 27015:27015/udp + environment: + PUID: 1000 + PGID: 1000 + PORT: 8211 # Optional but recommended + PLAYERS: 16 # Optional but recommended + SERVER_PASSWORD: "worldofpals" # Optional but recommended + MULTITHREADING: true + RCON_ENABLED: true + RCON_PORT: 25575 + TZ: "UTC" + ADMIN_PASSWORD: "adminPasswordHere" + COMMUNITY: false # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD! + SERVER_NAME: "palworld-server-docker by Thijs van Loef" + SERVER_DESCRIPTION: "palworld-server-docker by Thijs van Loef" + volumes: + - ./palworld:/palworld/ ``` As an alternative, you can copy the [.env.example](.env.example) file to a new file called **.env** file. @@ -100,18 +100,18 @@ values. Modify your [docker-compose.yml](docker-compose.yml) to this: ```yml services: - palworld: - image: thijsvanloef/palworld-server-docker:latest - restart: unless-stopped - container_name: palworld-server - stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop - ports: - - 8211:8211/udp - - 27015:27015/udp - env_file: - - .env - volumes: - - ./palworld:/palworld/ + palworld: + image: thijsvanloef/palworld-server-docker:latest + restart: unless-stopped + container_name: palworld-server + stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop + ports: + - 8211:8211/udp + - 27015:27015/udp + env_file: + - .env + volumes: + - ./palworld:/palworld/ ``` ### Docker Run @@ -180,8 +180,8 @@ You must set user to `NUMBERICAL_UID:NUMBERICAL_GID` Below we assume your UID is 1000 and your GID is 1001 -- In docker run add `--user 1000:1001 \` above the last line. -- In docker compose add `user: 1000:1001` above ports. +* In docker run add `--user 1000:1001 \` above the last line. +* In docker compose add `user: 1000:1001` above ports. If you wish to run it with a different UID/GID than your own you will need to change the ownership of the directory that is being bind: `chown UID:GID palworld/` @@ -196,19 +196,19 @@ The official helm chart can be found in a seperate repository, [palworld-server- You can use the following values to change the settings of the server on boot. It is highly recommended you set the following environment values before starting the server: -- PLAYERS -- PORT -- PUID -- PGID +* PLAYERS +* PORT +* PUID +* PGID | Variable | Info | Default Values | Allowed Values | -| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------- | +|------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|-------------------------------------------------------------------------------------------------------------------| | TZ | Timezone used for time stamping backup server | UTC | See [TZ Identifiers](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | -| PLAYERS\* | Max amount of players that are able to join the server | 16 | 1-32 | -| PORT\* | UDP port that the server will expose | 8211 | 1024-65535 | -| PUID\* | The uid of the user the server should run as | 1000 | !0 | -| PGID\* | The gid of the group the server should run as | 1000 | !0 | -| MULTITHREADING\*\* | Improves performance in multi-threaded CPU environments. It is effective up to a maximum of about 4 threads, and allocating more than this number of threads does not make much sense. | false | true/false | +| PLAYERS* | Max amount of players that are able to join the server | 16 | 1-32 | +| PORT* | UDP port that the server will expose | 8211 | 1024-65535 | +| PUID* | The uid of the user the server should run as | 1000 | !0 | +| PGID* | The gid of the group the server should run as | 1000 | !0 | +| MULTITHREADING** | Improves performance in multi-threaded CPU environments. It is effective up to a maximum of about 4 threads, and allocating more than this number of threads does not make much sense. | false | true/false | | COMMUNITY | Whether or not the server shows up in the community server browser (USE WITH SERVER_PASSWORD) | false | true/false | | PUBLIC_IP | You can manually specify the global IP address of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | | x.x.x.x | | PUBLIC_PORT | You can manually specify the port number of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | | 1024-65535 | @@ -216,8 +216,8 @@ It is highly recommended you set the following environment values before startin | SERVER_DESCRIPTION | Your server Description | | "string" | | SERVER_PASSWORD | Secure your community server with a password | | "string" | | ADMIN_PASSWORD | Secure administration access in the server with a password | | "string" | -| UPDATE_ON_BOOT\*\* | Update/Install the server when the docker container starts (THIS HAS TO BE ENABLED THE FIRST TIME YOU RUN THE CONTAINER) | true | true/false | -| RCON_ENABLED\*\*\* | Enable RCON for the Palworld server | true | true/false | +| UPDATE_ON_BOOT** | Update/Install the server when the docker container starts (THIS HAS TO BE ENABLED THE FIRST TIME YOU RUN THE CONTAINER) | true | true/false | +| RCON_ENABLED*** | Enable RCON for the Palworld server | true | true/false | | RCON_PORT | RCON port to connect to | 25575 | 1024-65535 | | QUERY_PORT | Query port used to communicate with Steam servers | 27015 | 1024-65535 | | BACKUP_CRON_EXPRESSION | Setting affects frequency of automatic backups. | 0 0 \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-backups-with-cron) | @@ -226,12 +226,12 @@ It is highly recommended you set the following environment values before startin | OLD_BACKUP_DAYS | How many days to keep backups | 30 | any positive integer | | AUTO_UPDATE_CRON_EXPRESSION | Setting affects frequency of automatic updates. | 0 \* \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-backups-with-cron) | | AUTO_UPDATE_ENABLED | Enables automatic updates | false | true/false | -| AUTO_UPDATE_WARN_MINUTES | How long to wait to update the server, after the player were informed. (This will be ignored, if no Players are connected) | 30 | Integer | +| AUTO_UPDATE_WARN_MINUTES | How long to wait to update the server, after the player were informed. (This will be ignored, if no Players are connected) | 30 | Integer | | AUTO_REBOOT_CRON_EXPRESSION | Setting affects frequency of automatic updates. | 0 0 \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-reboots-with-cron) | | AUTO_REBOOT_ENABLED | Enables automatic reboots | false | true/false | -| AUTO_REBOOT_WARN_MINUTES | How long to wait to reboot the server, after the player were informed. | 5 | Integer | +| AUTO_REBOOT_WARN_MINUTES | How long to wait to reboot the server, after the player were informed. | 5 | Integer | | AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Restart the Server even if there are players online. | false | true/false | -| TARGET_MANIFEST_ID | Locks game version to corespond with Manifest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | +| TARGET_MANIFEST_ID | Locks game version to corespond with Manifest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | | DISCORD_WEBHOOK_URL | Discord webhook url found after creating a webhook on a discord server | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | Discord command initial connection timeout | 30 | !0 | | DISCORD_MAX_TIMEOUT | Discord total hook timeout | 30 | !0 | @@ -246,16 +246,16 @@ It is highly recommended you set the following environment values before startin | PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | | ARM_COMPATIBILITY_MODE | Switches the compatibility layer from Box86 to QEMU when executing steamcmd for server updates. This setting is only applicable for ARM64 hosts. | false | true/false | -\*highly recommended to set +*highly recommended to set -\*\* Make sure you know what you are doing when running this option enabled +** Make sure you know what you are doing when running this option enabled -\*\*\* Required for docker stop to save and gracefully close the server +*** Required for docker stop to save and gracefully close the server ### Game Ports | Port | Info | -| ----- | ---------------- | +|-------|------------------| | 8211 | Game Port (UDP) | | 27015 | Query Port (UDP) | | 25575 | RCON Port (TCP) | @@ -280,7 +280,7 @@ This will open a CLI that uses RCON to write commands to the Palworld Server. ### List of server commands | Command | Info | -| -------------------------------- | --------------------------------------------------- | +|----------------------------------|-----------------------------------------------------| | Shutdown {Seconds} {MessageText} | The server is shut down after the number of Seconds | | DoExit | Force stop the server. | | Broadcast | Send message to all player in the server | @@ -315,7 +315,6 @@ docker exec -it palworld-server restore ``` The `RCON_ENABLED` environment variable must be set to `true` to use this command. - > [!IMPORTANT] > If docker restart is not set to policy `always` or `unless-stopped` then the server will shutdown and will need to be > manually restarted. @@ -368,8 +367,8 @@ Example Usage: If BACKUP_CRON_EXPRESSION to `0 2 * * *`, the backup script will To be able to use automatic Updates with this Server the following environment variables **have** to be set to `true`: -- RCON_ENABLED -- UPDATE_ON_BOOT +* RCON_ENABLED +* UPDATE_ON_BOOT > [!IMPORTANT] > @@ -425,72 +424,72 @@ timezone set with TZ Converting server settings to environment variables follow the same principles (with some exceptions): -- all capital letters -- split words by inserting an underscore -- remove the single letter if the setting starts with one (like 'b') +* all capital letters +* split words by inserting an underscore +* remove the single letter if the setting starts with one (like 'b') For example: -- Difficulty -> DIFFICULTY -- PalSpawnNumRate -> PAL_SPAWN_NUM_RATE -- bIsPvP -> IS_PVP - -| Variable | Description | Default Value | Allowed Value | -| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------- | -| DIFFICULTY | Game Difficulty | None | `None`,`Normal`,`Difficult` | -| DAYTIME_SPEEDRATE | Day time speed - Larger number means shorter days | 1.000000 | Float | -| NIGHTTIME_SPEEDRATE | Night time speed - Larger number means shorter nights | 1.000000 | Float | -| EXP_RATE | EXP earn rate | 1.000000 | Float | -| PAL_CAPTURE_RATE | Pal capture rate | 1.000000 | Float | -| PAL_SPAWN_NUM_RATE | Pal appearance rate | 1.000000 | Float | -| PAL_DAMAGE_RATE_ATTACK | Damage from pals multipiler | 1.000000 | Float | -| PAL_DAMAGE_RATE_DEFENSE | Damage to pals multipiler | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_ATTACK | Damage from player multipiler | 1.000000 | Float | -| PLAYER_DAMAGE_RATE_DEFENSE | Damage to player multipiler | 1.000000 | Float | -| PLAYER_STOMACH_DECREASE_RATE | Player hunger depletion rate | 1.000000 | Float | -| PLAYER_STAMINA_DECREASE_RATE | Player stamina reduction rate | 1.000000 | Float | -| PLAYER_AUTO_HP_REGEN_RATE | Player auto HP regeneration rate | 1.000000 | Float | -| PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | Player sleep HP regeneration rate | 1.000000 | Float | -| PAL_STOMACH_DECREASE_RATE | Pal hunger depletion rate | 1.000000 | Float | -| PAL_STAMINA_DECREASE_RATE | Pal stamina reduction rate | 1.000000 | Float | -| PAL_AUTO_HP_REGEN_RATE | Pal auto HP regeneration rate | 1.000000 | Float | -| PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | Pal sleep health regeneration rate (in Palbox) | 1.000000 | Float | -| BUILD_OBJECT_DAMAGE_RATE | Damage to structure multipiler | 1.000000 | Float | -| BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | Structure determination rate | 1.000000 | Float | -| COLLECTION_DROP_RATE | Getherable items multipiler | 1.000000 | Float | -| COLLECTION_OBJECT_HP_RATE | Getherable objects HP multipiler | 1.000000 | Float | -| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | Getherable objects respawn interval - The smaller the number, the faster the regeneration | 1.000000 | Float | -| ENEMY_DROP_ITEM_RATE | Dropped Items Multipiler | 1.000000 | Float | -| DEATH_PENALTY | Death Penalty
None: No death penalty
Item: Drops items other than equipment
ItemAndEquipment: Drops all items
All: Drops all PALs and all items. | All | `None`,`Item`,`ItemAndEquipment`,`All` | -| ENABLE_PLAYER_TO_PLAYER_DAMAGE | Allows players to cause damage to players | False | Boolean | -| ENABLE_FRIENDLY_FIRE | Allow friendly fire | False | Boolean | -| ENABLE_INVADER_ENEMY | Enable invaders | True | Boolean | -| ACTIVE_UNKO | Enable UNKO (?) | False | Boolean | -| ENABLE_AIM_ASSIST_PAD | Enable controller aim assist | True | Boolean | -| ENABLE_AIM_ASSIST_KEYBOARD | Enable Keyboard aim assist | False | Boolean | -| DROP_ITEM_MAX_NUM | Maximum number of drops in the world | 3000 | Integer | -| DROP_ITEM_MAX_NUM_UNKO | Maximum number of UNKO drops in the world | 100 | Integer | -| BASE_CAMP_MAX_NUM | Maximum number of base camps | 128 | Integer | -| BASE_CAMP_WORKER_MAX_NUM | Maximum number of workers | 15 | Integer | -| DROP_ITEM_ALIVE_MAX_HOURS | Time it takes for items to despawn in hours | 1.000000 | Float | -| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | Automatically reset guild when no players are online | False | Bool | -| AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | Time to automatically reset guild when no players are online | 72.000000 | Float | -| GUILD_PLAYER_MAX_NUM | Max player of Guild | 20 | Integer | -| PAL_EGG_DEFAULT_HATCHING_TIME | Time(h) to incubate massive egg | 72.000000 | Float | -| WORK_SPEED_RATE | Work speed muliplier | 1.000000 | Float | -| IS_MULTIPLAY | Enable multiplayer | False | Boolean | -| IS_PVP | Enable PVP | False | Boolean | -| CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | Allow players from other guilds to pick up death penalty items | False | Boolean | -| ENABLE_NON_LOGIN_PENALTY | Enable non-login penalty | True | Boolean | -| ENABLE_FAST_TRAVEL | Enable fast travel | True | Boolean | -| IS_START_LOCATION_SELECT_BY_MAP | Enable selecting of start location | True | Boolean | -| EXIST_PLAYER_AFTER_LOGOUT | Toggle for deleting players when they log off | False | Boolean | -| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | Allows defense against other guild players | False | Boolean | -| COOP_PLAYER_MAX_NUM | Maximum number of players in a guild | 4 | Integer | -| REGION | Region | | String | -| USEAUTH | Use authentication | True | Boolean | -| BAN_LIST_URL | Which ban list to use | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | -| SHOW_PLAYER_LIST | Enable show player list | True | Boolean | +* Difficulty -> DIFFICULTY +* PalSpawnNumRate -> PAL_SPAWN_NUM_RATE +* bIsPvP -> IS_PVP + +| Variable | Description | Default Value | Allowed Value | +|-------------------------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------| +| DIFFICULTY | Game Difficulty | None | `None`,`Normal`,`Difficult` | +| DAYTIME_SPEEDRATE | Day time speed - Larger number means shorter days | 1.000000 | Float | +| NIGHTTIME_SPEEDRATE | Night time speed - Larger number means shorter nights | 1.000000 | Float | +| EXP_RATE | EXP earn rate | 1.000000 | Float | +| PAL_CAPTURE_RATE | Pal capture rate | 1.000000 | Float | +| PAL_SPAWN_NUM_RATE | Pal appearance rate | 1.000000 | Float | +| PAL_DAMAGE_RATE_ATTACK | Damage from pals multipiler | 1.000000 | Float | +| PAL_DAMAGE_RATE_DEFENSE | Damage to pals multipiler | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_ATTACK | Damage from player multipiler | 1.000000 | Float | +| PLAYER_DAMAGE_RATE_DEFENSE | Damage to player multipiler | 1.000000 | Float | +| PLAYER_STOMACH_DECREASE_RATE | Player hunger depletion rate | 1.000000 | Float | +| PLAYER_STAMINA_DECREASE_RATE | Player stamina reduction rate | 1.000000 | Float | +| PLAYER_AUTO_HP_REGEN_RATE | Player auto HP regeneration rate | 1.000000 | Float | +| PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | Player sleep HP regeneration rate | 1.000000 | Float | +| PAL_STOMACH_DECREASE_RATE | Pal hunger depletion rate | 1.000000 | Float | +| PAL_STAMINA_DECREASE_RATE | Pal stamina reduction rate | 1.000000 | Float | +| PAL_AUTO_HP_REGEN_RATE | Pal auto HP regeneration rate | 1.000000 | Float | +| PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | Pal sleep health regeneration rate (in Palbox) | 1.000000 | Float | +| BUILD_OBJECT_DAMAGE_RATE | Damage to structure multipiler | 1.000000 | Float | +| BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | Structure determination rate | 1.000000 | Float | +| COLLECTION_DROP_RATE | Getherable items multipiler | 1.000000 | Float | +| COLLECTION_OBJECT_HP_RATE | Getherable objects HP multipiler | 1.000000 | Float | +| COLLECTION_OBJECT_RESPAWN_SPEED_RATE | Getherable objects respawn interval - The smaller the number, the faster the regeneration | 1.000000 | Float | +| ENEMY_DROP_ITEM_RATE | Dropped Items Multipiler | 1.000000 | Float | +| DEATH_PENALTY | Death Penalty
None: No death penalty
Item: Drops items other than equipment
ItemAndEquipment: Drops all items
All: Drops all PALs and all items. | All | `None`,`Item`,`ItemAndEquipment`,`All` | +| ENABLE_PLAYER_TO_PLAYER_DAMAGE | Allows players to cause damage to players | False | Boolean | +| ENABLE_FRIENDLY_FIRE | Allow friendly fire | False | Boolean | +| ENABLE_INVADER_ENEMY | Enable invaders | True | Boolean | +| ACTIVE_UNKO | Enable UNKO (?) | False | Boolean | +| ENABLE_AIM_ASSIST_PAD | Enable controller aim assist | True | Boolean | +| ENABLE_AIM_ASSIST_KEYBOARD | Enable Keyboard aim assist | False | Boolean | +| DROP_ITEM_MAX_NUM | Maximum number of drops in the world | 3000 | Integer | +| DROP_ITEM_MAX_NUM_UNKO | Maximum number of UNKO drops in the world | 100 | Integer | +| BASE_CAMP_MAX_NUM | Maximum number of base camps | 128 | Integer | +| BASE_CAMP_WORKER_MAX_NUM | Maximum number of workers | 15 | Integer | +| DROP_ITEM_ALIVE_MAX_HOURS | Time it takes for items to despawn in hours | 1.000000 | Float | +| AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | Automatically reset guild when no players are online | False | Bool | +| AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | Time to automatically reset guild when no players are online | 72.000000 | Float | +| GUILD_PLAYER_MAX_NUM | Max player of Guild | 20 | Integer | +| PAL_EGG_DEFAULT_HATCHING_TIME | Time(h) to incubate massive egg | 72.000000 | Float | +| WORK_SPEED_RATE | Work speed muliplier | 1.000000 | Float | +| IS_MULTIPLAY | Enable multiplayer | False | Boolean | +| IS_PVP | Enable PVP | False | Boolean | +| CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | Allow players from other guilds to pick up death penalty items | False | Boolean | +| ENABLE_NON_LOGIN_PENALTY | Enable non-login penalty | True | Boolean | +| ENABLE_FAST_TRAVEL | Enable fast travel | True | Boolean | +| IS_START_LOCATION_SELECT_BY_MAP | Enable selecting of start location | True | Boolean | +| EXIST_PLAYER_AFTER_LOGOUT | Toggle for deleting players when they log off | False | Boolean | +| ENABLE_DEFENSE_OTHER_GUILD_PLAYER | Allows defense against other guild players | False | Boolean | +| COOP_PLAYER_MAX_NUM | Maximum number of players in a guild | 4 | Integer | +| REGION | Region | | String | +| USEAUTH | Use authentication | True | Boolean | +| BAN_LIST_URL | Which ban list to use | [https://api.palworldgame.com/api/banlist.txt](https://api.palworldgame.com/api/banlist.txt) | string | +| SHOW_PLAYER_LIST | Enable show player list | True | Boolean | ### Manually @@ -529,23 +528,23 @@ send discord messages with docker compose: ## Locking Specific Game Version -> [!WARNING] -> Downgrading to a lower game version is possible, but it is unknown what impact it will have on existing saves. +>[!WARNING] +>Downgrading to a lower game version is possible, but it is unknown what impact it will have on existing saves. > -> **Please do so at your own risk!** +>**Please do so at your own risk!** If **TARGET_MANIFEST_ID** environment variable is set, will lock server version to specific manifest. The manifest corresponds to the release date/update versions. Manifests can be found using SteamCMD or websites like [SteamDB](https://steamdb.info/depot/2394012/manifests/). ### Version To Manifest ID Table -| Version | Manifest ID | -| ------- | ------------------- | -| 1.3.0 | 1354752814336157338 | -| 1.4.0 | 4190579964382773830 | -| 1.4.1 | 6370735655629434989 | -| 1.5.0 | 3750364703337203431 | -| 1.5.1 | 2815085007637542021 | +| Version | Manifest ID | +|---------|----------------------| +| 1.3.0 | 1354752814336157338 | +| 1.4.0 | 4190579964382773830 | +| 1.4.1 | 6370735655629434989 | +| 1.5.0 | 3750364703337203431 | +| 1.5.1 | 2815085007637542021 | ## Reporting Issues/Feature Requests From 9fcd4c58fb9e88dfa65e1fcf9b5729fef387590e Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Sun, 3 Mar 2024 19:41:05 +0100 Subject: [PATCH 62/70] fix bug that displays start when server has been stopped --- scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start.sh b/scripts/start.sh index e5931dedf..5f7589d8b 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -182,5 +182,5 @@ DiscordMessage "Start" "${DISCORD_PRE_START_MESSAGE}" "success" echo "${STARTCOMMAND[*]}" "${STARTCOMMAND[@]}" -DiscordMessage "Start" "${DISCORD_POST_SHUTDOWN_MESSAGE}" "failure" +DiscordMessage "Stop" "${DISCORD_POST_SHUTDOWN_MESSAGE}" "failure" exit 0 From 7d7e3b3dc16c6524aa69a290125aaf655664dfbc Mon Sep 17 00:00:00 2001 From: xHyperElectric <71343435+xHyperElectric@users.noreply.github.com> Date: Sun, 3 Mar 2024 15:24:10 -0500 Subject: [PATCH 63/70] Send discord messages when players join and leave --- scripts/player_logging.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/player_logging.sh b/scripts/player_logging.sh index bf9f98e88..52574fceb 100644 --- a/scripts/player_logging.sh +++ b/scripts/player_logging.sh @@ -41,18 +41,20 @@ while true; do <(printf '%s\n' "${current_player_list[@]}") ) fi - # Log all players who have left + # Notify Discord and log all players who have left for player in "${players_who_left_list[@]}"; do player_name=$( get_playername "${player}" ) LogInfo "${player_name} has left" broadcast_command "${player_name} has left" + DiscordMessage "Player Left" "${DISCORD_PLAYER_LEAVE_MESSAGE}" "failure" done - # Log all players who have joined + # Notify Discord and log all players who have joined for player in "${players_who_joined_list[@]}"; do player_name=$( get_playername "${player}" ) LogInfo "${player_name} has joined" broadcast_command "${player_name} has joined" + DiscordMessage "Player Joined" "${DISCORD_PLAYER_JOIN_MESSAGE}" "success" done old_player_list=("${current_player_list[@]}") From 4f50f83cfe16131622d8f4d6436a934f417ec0ad Mon Sep 17 00:00:00 2001 From: xHyperElectric <71343435+xHyperElectric@users.noreply.github.com> Date: Sun, 3 Mar 2024 15:57:22 -0500 Subject: [PATCH 64/70] Add DISCORD_PLAYER_JOIN_MESSAGE and DISCORD_PLAYER_LEAVE_MESSAGE Add env variable for Discord Player Join Message and Discord Player Leave Message --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 3f515a334..9a944a782 100644 --- a/Dockerfile +++ b/Dockerfile @@ -107,6 +107,8 @@ ENV HOME=/home/steam \ DISCORD_PRE_START_MESSAGE="Server has been started!" \ DISCORD_PRE_SHUTDOWN_MESSAGE="Server is shutting down..." \ DISCORD_POST_SHUTDOWN_MESSAGE="Server has been stopped!" \ + DISCORD_PLAYER_JOIN_MESSAGE="🎉\${player_name} has joined Palworld!" \ + DISCORD_PLAYER_LEAVE_MESSAGE="💨\${player_name} has left Palworld." \ ENABLE_PLAYER_LOGGING=true \ PLAYER_LOGGING_POLL_PERIOD=5 \ ARM_COMPATIBILITY_MODE=false \ From 9d4f499bb47baa47d8be8418af547e13d6b3646a Mon Sep 17 00:00:00 2001 From: xHyperElectric <71343435+xHyperElectric@users.noreply.github.com> Date: Sun, 3 Mar 2024 16:04:41 -0500 Subject: [PATCH 65/70] Update player_logging.sh to replace ${player_name} properly --- scripts/player_logging.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/player_logging.sh b/scripts/player_logging.sh index 52574fceb..8ae38bb17 100644 --- a/scripts/player_logging.sh +++ b/scripts/player_logging.sh @@ -46,7 +46,9 @@ while true; do player_name=$( get_playername "${player}" ) LogInfo "${player_name} has left" broadcast_command "${player_name} has left" - DiscordMessage "Player Left" "${DISCORD_PLAYER_LEAVE_MESSAGE}" "failure" + + # Replace ${player_name} with actual player's name + DiscordMessage "Player Left" "${DISCORD_PLAYER_LEAVE_MESSAGE//\$\{player_name\}/${player_name}}" "failure" done # Notify Discord and log all players who have joined @@ -54,7 +56,9 @@ while true; do player_name=$( get_playername "${player}" ) LogInfo "${player_name} has joined" broadcast_command "${player_name} has joined" - DiscordMessage "Player Joined" "${DISCORD_PLAYER_JOIN_MESSAGE}" "success" + + # Replace ${player_name} with actual player's name + DiscordMessage "Player Joined" "${DISCORD_PLAYER_JOIN_MESSAGE//\$\{player_name\}/${player_name}}" "success" done old_player_list=("${current_player_list[@]}") From 5d1d6239d16993f57510eece782d0934126abdd1 Mon Sep 17 00:00:00 2001 From: xHyperElectric <71343435+xHyperElectric@users.noreply.github.com> Date: Sun, 3 Mar 2024 16:15:24 -0500 Subject: [PATCH 66/70] Update README.md to add DISCORD_PLAYER_LEAVE_MESSAGE and DISCORD_PLAYER_JOIN_MESSAGE --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cf0b20e30..b11659dcd 100644 --- a/README.md +++ b/README.md @@ -226,12 +226,12 @@ It is highly recommended you set the following environment values before startin | OLD_BACKUP_DAYS | How many days to keep backups | 30 | any positive integer | | AUTO_UPDATE_CRON_EXPRESSION | Setting affects frequency of automatic updates. | 0 \* \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-backups-with-cron) | | AUTO_UPDATE_ENABLED | Enables automatic updates | false | true/false | -| AUTO_UPDATE_WARN_MINUTES | How long to wait to update the server, after the player were informed. (This will be ignored, if no Players are connected) | 30 | Integer | +| AUTO_UPDATE_WARN_MINUTES | How long to wait to update the server, after the player were informed. (This will be ignored, if no Players are connected) | 30 | Integer | | AUTO_REBOOT_CRON_EXPRESSION | Setting affects frequency of automatic updates. | 0 0 \* \* \* | Needs a Cron-Expression - See [Configuring Automatic Backups with Cron](#configuring-automatic-reboots-with-cron) | | AUTO_REBOOT_ENABLED | Enables automatic reboots | false | true/false | -| AUTO_REBOOT_WARN_MINUTES | How long to wait to reboot the server, after the player were informed. | 5 | Integer | +| AUTO_REBOOT_WARN_MINUTES | How long to wait to reboot the server, after the player were informed. | 5 | Integer | | AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE | Restart the Server even if there are players online. | false | true/false | -| TARGET_MANIFEST_ID | Locks game version to corespond with Manifest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | +| TARGET_MANIFEST_ID | Locks game version to corespond with Manifest ID from Steam Download Depot. | | See [Manifest ID Table](#locking-specific-game-version) | | DISCORD_WEBHOOK_URL | Discord webhook url found after creating a webhook on a discord server | | `https://discord.com/api/webhooks/` | | DISCORD_CONNECT_TIMEOUT | Discord command initial connection timeout | 30 | !0 | | DISCORD_MAX_TIMEOUT | Discord total hook timeout | 30 | !0 | @@ -240,8 +240,10 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_START_MESSAGE | Discord message sent when server begins to start | Server is started! | "string" | | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | +| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | 🎉\${player_name} has joined Palworld! | "string" | +| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | 💨\${player_name} has left Palworld. | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | -| DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | +| DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | | PLAYER_LOGGING_POLL_PERIOD | Polling period (in seconds) to check for players who have joined or left | 5 | !0 | | ARM_COMPATIBILITY_MODE | Switches the compatibility layer from Box86 to QEMU when executing steamcmd for server updates. This setting is only applicable for ARM64 hosts. | false | true/false | From 4baea22a7374d1ed90283ec88e46ecd4f83c1c7a Mon Sep 17 00:00:00 2001 From: xHyperElectric <71343435+xHyperElectric@users.noreply.github.com> Date: Sun, 3 Mar 2024 16:17:47 -0500 Subject: [PATCH 67/70] Update server-settings.md to include DISCORD_PLAYER_JOIN_MESSAGE and DISCORD_PLAYER_LEAVE_MESSAGE --- .../docs/getting-started/configuration/server-settings.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docusaurus/docs/getting-started/configuration/server-settings.md b/docusaurus/docs/getting-started/configuration/server-settings.md index bbc440b4c..81f44583b 100644 --- a/docusaurus/docs/getting-started/configuration/server-settings.md +++ b/docusaurus/docs/getting-started/configuration/server-settings.md @@ -60,6 +60,8 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_START_MESSAGE | Discord message sent when server begins to start | Server is started! | "string" | | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | +| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | 🎉\${player_name} has joined Palworld! | "string" | +| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | 💨\${player_name} has left Palworld. | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | | DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | From 50f74d06d18a858bc122a0e9528991c0e5cdaa65 Mon Sep 17 00:00:00 2001 From: thijsvanloef Date: Tue, 5 Mar 2024 00:07:45 +0000 Subject: [PATCH 68/70] =?UTF-8?q?Deploying=20to=20main=20from=20@=20thijsv?= =?UTF-8?q?anloef/palworld-server-docker@1fd33255422ec4911f10999958d267b41?= =?UTF-8?q?9a9637c=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf0b20e30..217b79e35 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ This container has also been tested and will work on both `x64` and `ARM64` base Massive shoutout to the following sponsors!

-doomhound188  AshishT112203  pabumake  stoprx  KiKoS0  inspired-by-nudes  PulsarFTW   +doomhound188  AshishT112203  stoprx  KiKoS0  inspired-by-nudes  PulsarFTW  

## Official Documentation From 0ee2b961ae04f7a6d5d6881b4e1261eeb978a771 Mon Sep 17 00:00:00 2001 From: xHyperElectric <71343435+xHyperElectric@users.noreply.github.com> Date: Mon, 4 Mar 2024 22:06:27 -0500 Subject: [PATCH 69/70] Update server-settings.md to attempt to escape the brackets in ${player_name} --- .../docs/getting-started/configuration/server-settings.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docusaurus/docs/getting-started/configuration/server-settings.md b/docusaurus/docs/getting-started/configuration/server-settings.md index 81f44583b..3f5243cfd 100644 --- a/docusaurus/docs/getting-started/configuration/server-settings.md +++ b/docusaurus/docs/getting-started/configuration/server-settings.md @@ -60,8 +60,8 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_START_MESSAGE | Discord message sent when server begins to start | Server is started! | "string" | | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | -| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | 🎉\${player_name} has joined Palworld! | "string" | -| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | 💨\${player_name} has left Palworld. | "string" | +| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | 🎉\$\{player_name\} has joined Palworld! | "string" | +| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | 💨\$\{player_name\} has left Palworld. | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | | DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | From ede5735878bd3ef3bffe2cb26362754a594af531 Mon Sep 17 00:00:00 2001 From: Thijs van Loef Date: Tue, 5 Mar 2024 11:02:26 +0100 Subject: [PATCH 70/70] no emojis by default --- Dockerfile | 4 ++-- README.md | 4 ++-- .../docs/getting-started/configuration/server-settings.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9a944a782..37f8f0770 100644 --- a/Dockerfile +++ b/Dockerfile @@ -107,8 +107,8 @@ ENV HOME=/home/steam \ DISCORD_PRE_START_MESSAGE="Server has been started!" \ DISCORD_PRE_SHUTDOWN_MESSAGE="Server is shutting down..." \ DISCORD_POST_SHUTDOWN_MESSAGE="Server has been stopped!" \ - DISCORD_PLAYER_JOIN_MESSAGE="🎉\${player_name} has joined Palworld!" \ - DISCORD_PLAYER_LEAVE_MESSAGE="💨\${player_name} has left Palworld." \ + DISCORD_PLAYER_JOIN_MESSAGE="\${player_name} has joined Palworld!" \ + DISCORD_PLAYER_LEAVE_MESSAGE="\${player_name} has left Palworld." \ ENABLE_PLAYER_LOGGING=true \ PLAYER_LOGGING_POLL_PERIOD=5 \ ARM_COMPATIBILITY_MODE=false \ diff --git a/README.md b/README.md index b11659dcd..f6bfd8792 100644 --- a/README.md +++ b/README.md @@ -240,8 +240,8 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_START_MESSAGE | Discord message sent when server begins to start | Server is started! | "string" | | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | -| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | 🎉\${player_name} has joined Palworld! | "string" | -| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | 💨\${player_name} has left Palworld. | "string" | +| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | \${player_name} has joined Palworld! | "string" | +| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | \${player_name} has left Palworld. | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | | DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false | diff --git a/docusaurus/docs/getting-started/configuration/server-settings.md b/docusaurus/docs/getting-started/configuration/server-settings.md index 3f5243cfd..7e7238f35 100644 --- a/docusaurus/docs/getting-started/configuration/server-settings.md +++ b/docusaurus/docs/getting-started/configuration/server-settings.md @@ -60,8 +60,8 @@ It is highly recommended you set the following environment values before startin | DISCORD_PRE_START_MESSAGE | Discord message sent when server begins to start | Server is started! | "string" | | DISCORD_PRE_SHUTDOWN_MESSAGE | Discord message sent when server begins to shutdown | Server is shutting down... | "string" | | DISCORD_POST_SHUTDOWN_MESSAGE | Discord message sent when server has stopped | Server is stopped! | "string" | -| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | 🎉\$\{player_name\} has joined Palworld! | "string" | -| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | 💨\$\{player_name\} has left Palworld. | "string" | +| DISCORD_PLAYER_JOIN_MESSAGE | Discord message sent when player joins the server | \$\{player_name\} has joined Palworld! | "string" | +| DISCORD_PLAYER_LEAVE_MESSAGE | Discord message sent when player leaves the server | \$\{player_name\} has left Palworld. | "string" | | DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false | | DISABLE_GENERATE_ENGINE | Whether to automatically generate the Engine.ini | true | true/false | | ENABLE_PLAYER_LOGGING | Enables Logging and announcing when players join and leave | true | true/false |