From c7de3c13a7ccc0544576a6eded5767f8389d85f7 Mon Sep 17 00:00:00 2001 From: plenarius Date: Mon, 20 Apr 2026 18:36:05 -0400 Subject: [PATCH] feat: add NWN server .env template generator --- packages/backend/src/config/env-template.ts | 132 ++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 packages/backend/src/config/env-template.ts diff --git a/packages/backend/src/config/env-template.ts b/packages/backend/src/config/env-template.ts new file mode 100644 index 0000000..3406d99 --- /dev/null +++ b/packages/backend/src/config/env-template.ts @@ -0,0 +1,132 @@ +import crypto from "crypto"; + +interface ServerEnvOptions { + moduleName?: string; + dmPassword?: string; + mysqlPassword?: string; + mysqlRootPassword?: string; + maxClients?: number; + port?: number; +} + +export function generateServerEnv(opts: ServerEnvOptions = {}): string { + const mysqlPassword = opts.mysqlPassword || crypto.randomBytes(16).toString("hex"); + const mysqlRootPassword = opts.mysqlRootPassword || crypto.randomBytes(16).toString("hex"); + + return `# Generated by Layonara Forge +# NWN Server Settings +NWN_MODULE=${opts.moduleName || "Layonara_6-21"} +NWN_SERVERNAME=Layonara-Dev +NWN_PLAYERPASSWORD= +NWN_DMPASSWORD=${opts.dmPassword || "devdm"} +NWN_ADMINPASSWORD=${opts.dmPassword || "devdm"} +NWN_PORT=${opts.port || 5121} +NWN_PUBLICSERVER=0 +NWN_MAXCLIENTS=${opts.maxClients || 4} +NWN_MINLEVEL=1 +NWN_PAUSEANDPLAY=1 +NWN_PVP=2 +NWN_SERVERVAULT=1 +NWN_ELC=0 +NWN_ILR=1 +NWN_GAMETYPE=9 +NWN_ONEPARTY=0 +NWN_DIFFICULTY=2 +NWN_AUTOSAVEINTERVAL=0 +NWN_RELOADWHENEMPTY=0 +NWN_TAIL_LOGS=n +NWN_MAXLEVEL=45 + +# NWNX Core +NWNX_CORE_LOG_LEVEL=6 +NWNX_CORE_SKIP_ALL=y +NWNX_CORE_ALLOW_NWNX_FUNCTIONS_IN_EXECUTE_SCRIPT_CHUNK=y + +# Enabled plugins +NWNX_ADMINISTRATION_SKIP=y +NWNX_AREA_SKIP=n +NWNX_CHAT_SKIP=n +NWNX_COMPILER_SKIP=n +NWNX_CREATURE_SKIP=n +NWNX_EFFECT_SKIP=n +NWNX_ELC_SKIP=false +NWNX_EVENTS_SKIP=n +NWNX_FEAT_SKIP=n +NWNX_FEEDBACK_SKIP=n +NWNX_ITEM_SKIP=n +NWNX_ITEMAPPEARANCE_SKIP=n +NWNX_ITEMPROPERTY_SKIP=n +NWNX_LAYONARA_SKIP=n +NWNX_MAXLEVEL_SKIP=n +NWNX_MAXLEVEL_MAX=45 +NWNX_NOSTACK_SKIP=n +NWNX_OBJECT_SKIP=n +NWNX_OPTIMIZATIONS_SKIP=n +NWNX_PLAYER_SKIP=n +NWNX_RACE_SKIP=n +NWNX_RENAME_SKIP=n +NWNX_RESOURCES_SKIP=n +NWNX_SERVERLOGREDIRECTOR_SKIP=n +NWNX_SQL_SKIP=n +NWNX_STORE_SKIP=n +NWNX_TRACKING_SKIP=n +NWNX_TWEAKS_SKIP=n +NWNX_UTIL_SKIP=n +NWNX_VISIBILITY_SKIP=n +NWNX_WEAPON_SKIP=n + +# Disabled for local dev +NWNX_HTTPCLIENT_SKIP=y +NWNX_WEBHOOK_SKIP=y +NWNX_METRICS_INFLUXDB_SKIP=y +NWNX_REDIS_SKIP=y +NWNX_THREADWATCHDOG_SKIP=y +NWNX_PROFILER_SKIP=y + +# Skipped plugins +NWNX_APPEARANCE_SKIP=y +NWNX_DAMAGE_SKIP=y +NWNX_DATA_SKIP=y +NWNX_DIAGNOSTICS_SKIP=y +NWNX_DIALOG_SKIP=y +NWNX_DOTNET_SKIP=y +NWNX_ENCOUNTER_SKIP=y +NWNX_EXPERIMENTAL_SKIP=y +NWNX_LUA_SKIP=y +NWNX_SWIG_DOTNET_SKIP=y +NWNX_TILESET_SKIP=y +NWNX_TIME_SKIP=y + +# SQL +NWNX_SQL_TYPE=mysql +NWNX_SQL_HOST=layonara-mariadb +NWNX_SQL_USERNAME=nwn +NWNX_SQL_PASSWORD=${mysqlPassword} +NWNX_SQL_DATABASE=nwn +NWNX_SQL_LOG_LEVEL=6 + +# Tweaks +NWNX_TWEAKS_DISABLE_PAUSE=y +NWNX_TWEAKS_DISABLE_QUICKSAVE=y +NWNX_TWEAKS_COMPARE_VARIABLES_WHEN_MERGING=y +NWNX_TWEAKS_FIX_GREATER_SANCTUARY_BUG=y +NWNX_TWEAKS_HIDE_PLAYERS_ON_CHAR_LIST=1 + +# Layonara plugin +NWNX_LAYONARA_LOG_LEVEL=7 + +# Optimizations +NWNX_OPTIMIZATIONS_ASYNC_LOG_FLUSH=true + +# Rename +NWNX_RENAME_ON_MODULE_CHAR_LIST=0 +NWNX_RENAME_ON_PLAYER_LIST=false +NWNX_RENAME_ALLOW_DM=true + +# MariaDB +MYSQL_ROOT_PASSWORD=${mysqlRootPassword} +MYSQL_DATABASE=nwn +MYSQL_USER=nwn +MYSQL_PASSWORD=${mysqlPassword} +`; +}