Jump to content
Xenithar

Multiple servers via INI?

Recommended Posts

I've been doing Unreal Engine games since the first one back in 1996 or 1997. In the past I could have a single install and use multiple INI files to run separate servers. If I recall correctly, it was something like "-ini=mod1.ini -userini=mod1user.ini" and from the same install I could start a second instance by passing "-ini=mod2.ini -userini=mod2.ini" to it. Currently I need close to a terabyte of space if I want to run one server with unique settings for each of the official maps (Island, Center, SE, Rag, Abb, and when it releases, Extinction) because I'd have to copy the entire server directory structure once for each mode of play. This is absurd, makes updating mods insanely tedious, and makes updating a royal pain. I know that under Linux I could likely achieve this via symlinks, but we don't have that in Windows yet and likely never will.

Considering that the above method is a core UE function, is this possible somehow in Ark?

Share this post


Link to post
Share on other sites
Posted (edited)
On 8/5/2018 at 7:02 AM, Xenithar said:

I've been doing Unreal Engine games since the first one back in 1996 or 1997. In the past I could have a single install and use multiple INI files to run separate servers. If I recall correctly, it was something like "-ini=mod1.ini -userini=mod1user.ini" and from the same install I could start a second instance by passing "-ini=mod2.ini -userini=mod2.ini" to it. Currently I need close to a terabyte of space if I want to run one server with unique settings for each of the official maps (Island, Center, SE, Rag, Abb, and when it releases, Extinction) because I'd have to copy the entire server directory structure once for each mode of play. This is absurd, makes updating mods insanely tedious, and makes updating a royal pain. I know that under Linux I could likely achieve this via symlinks, but we don't have that in Windows yet and likely never will.

Considering that the above method is a core UE function, is this possible somehow in Ark?

Windows does support Symlinks and has done so from the very beginning of Windows.

The command line tool is called mklink.

I should also point out that multiple servers running from the same code base with different configs is something I could never understand why it can't be done either.

Edited by CyberAngel67

Share this post


Link to post
Share on other sites

Show me mklinks in XP or prior. How about 3.11. Oddly enough I do not see mklink on my Tandy 2100. It has DOS 6.22 but Windows For Workgroups 3.11 runs on top of that. Not in 9X either, or ME. They added mklink in Vista to be more like Linux. Same with "Powershell" (BASH anybody?). I do IT for a living and am well aware of mklink, specifically "mklink /j" being what is needed. I already solved this. Use it if it helps. I intend on making a more refined script others may use, but this works well enough for my personal use.

Note that I created a folder on the root of my disk called "Games". I removed all inherited permissions and set Administrators, SYSTEM, and Users groups to full access. I install Steam and SteamCMD there. No permissions issues, everything runs as a user instead of admin, much better setup. My configuration in the script below demonstrates this. You can substitute your setup in there if you want to use it.

@ECHO OFF

REM Global configurable variables
SET SOURCE=C:\Games\SteamCMD\steamapps\common\ARK Survival Evolved Dedicated Server
SET TARGET=C:\Games\SteamCMD\steamapps\common
SET CLUSTER=C:\Games\SteamCMD\steamapps\common\ARK Clusters

REM Create the shared cluster directory if needed
IF NOT EXIST "%CLUSTER%" MKDIR "%CLUSTER%"

REM Make an island virtual server
SET SERVER=ARK01 - The Island

MKDIR "%TARGET%\%SERVER%"
CD "%TARGET%\%SERVER%"
MKLINK /J "%TARGET%\%SERVER%\Engine" "%SOURCE%\Engine"
MKDIR "%TARGET%\%SERVER%\ShooterGame"
MKLINK /H "%TARGET%\%SERVER%\PackageInfo.bin" "%SOURCE%\PackageInfo.bin"
MKLINK /H "%TARGET%\%SERVER%\steamclient.dll" "%SOURCE%\steamclient.dll"
MKLINK /H "%TARGET%\%SERVER%\steamclient64.dll" "%SOURCE%\steamclient64.dll"
MKLINK /H "%TARGET%\%SERVER%\SteamCMDInstall.sh" "%SOURCE%\SteamCMDInstall.sh"
MKLINK /H "%TARGET%\%SERVER%\tier0_s.dll" "%SOURCE%\tier0_s.dll"
MKLINK /H "%TARGET%\%SERVER%\tier0_s64.dll" "%SOURCE%\tier0_s64.dll"
MKLINK /H "%TARGET%\%SERVER%\version.txt" "%SOURCE%\version.txt"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s.dll" "%SOURCE%\vstdlib_s.dll"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s64.dll" "%SOURCE%\vstdlib_s64.dll"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Binaries" "%SOURCE%\ShooterGame\Binaries"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Config" "%SOURCE%\ShooterGame\Config"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Content" "%SOURCE%\ShooterGame\Content"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\AssetRegistry.bin" "%SOURCE%\ShooterGame\AssetRegistry.bin"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\ShooterGame.uproject" "%SOURCE%\ShooterGame\ShooterGame.uproject"
MKDIR "%TARGET%\%SERVER%\ShooterGame\Saved"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Saved\clusters" "%CLUSTER%"

REM Make a center virtual server
SET SERVER=ARK02 - The Center

MKDIR "%TARGET%\%SERVER%"
CD "%TARGET%\%SERVER%"
MKLINK /J "%TARGET%\%SERVER%\Engine" "%SOURCE%\Engine"
MKDIR "%TARGET%\%SERVER%\ShooterGame"
MKLINK /H "%TARGET%\%SERVER%\PackageInfo.bin" "%SOURCE%\PackageInfo.bin"
MKLINK /H "%TARGET%\%SERVER%\steamclient.dll" "%SOURCE%\steamclient.dll"
MKLINK /H "%TARGET%\%SERVER%\steamclient64.dll" "%SOURCE%\steamclient64.dll"
MKLINK /H "%TARGET%\%SERVER%\SteamCMDInstall.sh" "%SOURCE%\SteamCMDInstall.sh"
MKLINK /H "%TARGET%\%SERVER%\tier0_s.dll" "%SOURCE%\tier0_s.dll"
MKLINK /H "%TARGET%\%SERVER%\tier0_s64.dll" "%SOURCE%\tier0_s64.dll"
MKLINK /H "%TARGET%\%SERVER%\version.txt" "%SOURCE%\version.txt"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s.dll" "%SOURCE%\vstdlib_s.dll"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s64.dll" "%SOURCE%\vstdlib_s64.dll"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Binaries" "%SOURCE%\ShooterGame\Binaries"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Config" "%SOURCE%\ShooterGame\Config"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Content" "%SOURCE%\ShooterGame\Content"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\AssetRegistry.bin" "%SOURCE%\ShooterGame\AssetRegistry.bin"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\ShooterGame.uproject" "%SOURCE%\ShooterGame\ShooterGame.uproject"
MKDIR "%TARGET%\%SERVER%\ShooterGame\Saved"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Saved\clusters" "%CLUSTER%"

REM Make a Scorched Earth virtual server
SET SERVER=ARK03 - Scorched Earth

MKDIR "%TARGET%\%SERVER%"
CD "%TARGET%\%SERVER%"
MKLINK /J "%TARGET%\%SERVER%\Engine" "%SOURCE%\Engine"
MKDIR "%TARGET%\%SERVER%\ShooterGame"
MKLINK /H "%TARGET%\%SERVER%\PackageInfo.bin" "%SOURCE%\PackageInfo.bin"
MKLINK /H "%TARGET%\%SERVER%\steamclient.dll" "%SOURCE%\steamclient.dll"
MKLINK /H "%TARGET%\%SERVER%\steamclient64.dll" "%SOURCE%\steamclient64.dll"
MKLINK /H "%TARGET%\%SERVER%\SteamCMDInstall.sh" "%SOURCE%\SteamCMDInstall.sh"
MKLINK /H "%TARGET%\%SERVER%\tier0_s.dll" "%SOURCE%\tier0_s.dll"
MKLINK /H "%TARGET%\%SERVER%\tier0_s64.dll" "%SOURCE%\tier0_s64.dll"
MKLINK /H "%TARGET%\%SERVER%\version.txt" "%SOURCE%\version.txt"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s.dll" "%SOURCE%\vstdlib_s.dll"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s64.dll" "%SOURCE%\vstdlib_s64.dll"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Binaries" "%SOURCE%\ShooterGame\Binaries"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Config" "%SOURCE%\ShooterGame\Config"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Content" "%SOURCE%\ShooterGame\Content"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\AssetRegistry.bin" "%SOURCE%\ShooterGame\AssetRegistry.bin"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\ShooterGame.uproject" "%SOURCE%\ShooterGame\ShooterGame.uproject"
MKDIR "%TARGET%\%SERVER%\ShooterGame\Saved"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Saved\clusters" "%CLUSTER%"

PAUSE

I used it for my needs, but it's simple enough and works. The only files which actually exist in each virtual setup are the "Saved" folder and its contents. This even places a cluster directory wherever you want it. This leaves me with the actual server (6.68GB I believe) untouched in the default install location. I then edit the configuration files in the individual saved folders for each server. When I update using SteamCMD the non-existent virtual servers are updated since they point back at the install. Same goes for mods. This means I have one actual install which is in pristine condition and only need the one firewall rule and everything. Works flawlessly. This would work in Linux as well using 'ln -s'...

Share this post


Link to post
Share on other sites
Posted (edited)
5 hours ago, Xenithar said:

Show me mklinks in XP or prior. How about 3.11. Oddly enough I do not see mklink on my Tandy 2100. It has DOS 6.22 but Windows For Workgroups 3.11 runs on top of that. Not in 9X either, or ME. They added mklink in Vista to be more like Linux. Same with "Powershell" (BASH anybody?). I do IT for a living and am well aware of mklink, specifically "mklink /j" being what is needed. I already solved this. Use it if it helps. I intend on making a more refined script others may use, but this works well enough for my personal use.

Note that I created a folder on the root of my disk called "Games". I removed all inherited permissions and set Administrators, SYSTEM, and Users groups to full access. I install Steam and SteamCMD there. No permissions issues, everything runs as a user instead of admin, much better setup. My configuration in the script below demonstrates this. You can substitute your setup in there if you want to use it.

@ECHO OFF

REM Global configurable variables
SET SOURCE=C:\Games\SteamCMD\steamapps\common\ARK Survival Evolved Dedicated Server
SET TARGET=C:\Games\SteamCMD\steamapps\common
SET CLUSTER=C:\Games\SteamCMD\steamapps\common\ARK Clusters

REM Create the shared cluster directory if needed
IF NOT EXIST "%CLUSTER%" MKDIR "%CLUSTER%"

REM Make an island virtual server
SET SERVER=ARK01 - The Island

MKDIR "%TARGET%\%SERVER%"
CD "%TARGET%\%SERVER%"
MKLINK /J "%TARGET%\%SERVER%\Engine" "%SOURCE%\Engine"
MKDIR "%TARGET%\%SERVER%\ShooterGame"
MKLINK /H "%TARGET%\%SERVER%\PackageInfo.bin" "%SOURCE%\PackageInfo.bin"
MKLINK /H "%TARGET%\%SERVER%\steamclient.dll" "%SOURCE%\steamclient.dll"
MKLINK /H "%TARGET%\%SERVER%\steamclient64.dll" "%SOURCE%\steamclient64.dll"
MKLINK /H "%TARGET%\%SERVER%\SteamCMDInstall.sh" "%SOURCE%\SteamCMDInstall.sh"
MKLINK /H "%TARGET%\%SERVER%\tier0_s.dll" "%SOURCE%\tier0_s.dll"
MKLINK /H "%TARGET%\%SERVER%\tier0_s64.dll" "%SOURCE%\tier0_s64.dll"
MKLINK /H "%TARGET%\%SERVER%\version.txt" "%SOURCE%\version.txt"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s.dll" "%SOURCE%\vstdlib_s.dll"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s64.dll" "%SOURCE%\vstdlib_s64.dll"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Binaries" "%SOURCE%\ShooterGame\Binaries"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Config" "%SOURCE%\ShooterGame\Config"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Content" "%SOURCE%\ShooterGame\Content"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\AssetRegistry.bin" "%SOURCE%\ShooterGame\AssetRegistry.bin"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\ShooterGame.uproject" "%SOURCE%\ShooterGame\ShooterGame.uproject"
MKDIR "%TARGET%\%SERVER%\ShooterGame\Saved"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Saved\clusters" "%CLUSTER%"

REM Make a center virtual server
SET SERVER=ARK02 - The Center

MKDIR "%TARGET%\%SERVER%"
CD "%TARGET%\%SERVER%"
MKLINK /J "%TARGET%\%SERVER%\Engine" "%SOURCE%\Engine"
MKDIR "%TARGET%\%SERVER%\ShooterGame"
MKLINK /H "%TARGET%\%SERVER%\PackageInfo.bin" "%SOURCE%\PackageInfo.bin"
MKLINK /H "%TARGET%\%SERVER%\steamclient.dll" "%SOURCE%\steamclient.dll"
MKLINK /H "%TARGET%\%SERVER%\steamclient64.dll" "%SOURCE%\steamclient64.dll"
MKLINK /H "%TARGET%\%SERVER%\SteamCMDInstall.sh" "%SOURCE%\SteamCMDInstall.sh"
MKLINK /H "%TARGET%\%SERVER%\tier0_s.dll" "%SOURCE%\tier0_s.dll"
MKLINK /H "%TARGET%\%SERVER%\tier0_s64.dll" "%SOURCE%\tier0_s64.dll"
MKLINK /H "%TARGET%\%SERVER%\version.txt" "%SOURCE%\version.txt"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s.dll" "%SOURCE%\vstdlib_s.dll"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s64.dll" "%SOURCE%\vstdlib_s64.dll"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Binaries" "%SOURCE%\ShooterGame\Binaries"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Config" "%SOURCE%\ShooterGame\Config"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Content" "%SOURCE%\ShooterGame\Content"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\AssetRegistry.bin" "%SOURCE%\ShooterGame\AssetRegistry.bin"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\ShooterGame.uproject" "%SOURCE%\ShooterGame\ShooterGame.uproject"
MKDIR "%TARGET%\%SERVER%\ShooterGame\Saved"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Saved\clusters" "%CLUSTER%"

REM Make a Scorched Earth virtual server
SET SERVER=ARK03 - Scorched Earth

MKDIR "%TARGET%\%SERVER%"
CD "%TARGET%\%SERVER%"
MKLINK /J "%TARGET%\%SERVER%\Engine" "%SOURCE%\Engine"
MKDIR "%TARGET%\%SERVER%\ShooterGame"
MKLINK /H "%TARGET%\%SERVER%\PackageInfo.bin" "%SOURCE%\PackageInfo.bin"
MKLINK /H "%TARGET%\%SERVER%\steamclient.dll" "%SOURCE%\steamclient.dll"
MKLINK /H "%TARGET%\%SERVER%\steamclient64.dll" "%SOURCE%\steamclient64.dll"
MKLINK /H "%TARGET%\%SERVER%\SteamCMDInstall.sh" "%SOURCE%\SteamCMDInstall.sh"
MKLINK /H "%TARGET%\%SERVER%\tier0_s.dll" "%SOURCE%\tier0_s.dll"
MKLINK /H "%TARGET%\%SERVER%\tier0_s64.dll" "%SOURCE%\tier0_s64.dll"
MKLINK /H "%TARGET%\%SERVER%\version.txt" "%SOURCE%\version.txt"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s.dll" "%SOURCE%\vstdlib_s.dll"
MKLINK /H "%TARGET%\%SERVER%\vstdlib_s64.dll" "%SOURCE%\vstdlib_s64.dll"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Binaries" "%SOURCE%\ShooterGame\Binaries"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Config" "%SOURCE%\ShooterGame\Config"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Content" "%SOURCE%\ShooterGame\Content"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\AssetRegistry.bin" "%SOURCE%\ShooterGame\AssetRegistry.bin"
MKLINK /H "%TARGET%\%SERVER%\ShooterGame\ShooterGame.uproject" "%SOURCE%\ShooterGame\ShooterGame.uproject"
MKDIR "%TARGET%\%SERVER%\ShooterGame\Saved"
MKLINK /J "%TARGET%\%SERVER%\ShooterGame\Saved\clusters" "%CLUSTER%"

PAUSE

I used it for my needs, but it's simple enough and works. The only files which actually exist in each virtual setup are the "Saved" folder and its contents. This even places a cluster directory wherever you want it. This leaves me with the actual server (6.68GB I believe) untouched in the default install location. I then edit the configuration files in the individual saved folders for each server. When I update using SteamCMD the non-existent virtual servers are updated since they point back at the install. Same goes for mods. This means I have one actual install which is in pristine condition and only need the one firewall rule and everything. Works flawlessly. This would work in Linux as well using 'ln -s'...

So why did you state Windows will never support symbolic links then!

But I do like the script to reduce installation of core engine and stuff.

Edited by CyberAngel67

Share this post


Link to post
Share on other sites

Probably due to fatigue and me thinking only of "junctions". Use the script all you want. Tune to your needs, naturally. I freed up 14GB today by making all three servers virtual instead of three copies of the server to maintain individually. Well, I mean to say I deleted the old server folders containing entire installs of the servers which I used prior to this. Still, 14GB for removing the old Center and SE servers means another 14GB for Rag and Ab. That's 28GB down to 0bytes. More room for backups and such!

Share this post


Link to post
Share on other sites
5 hours ago, Xenithar said:

Probably due to fatigue and me thinking only of "junctions". Use the script all you want. Tune to your needs, naturally. I freed up 14GB today by making all three servers virtual instead of three copies of the server to maintain individually. Well, I mean to say I deleted the old server folders containing entire installs of the servers which I used prior to this. Still, 14GB for removing the old Center and SE servers means another 14GB for Rag and Ab. That's 28GB down to 0bytes. More room for backups and such!

Yeah, I may look further into it. I usually set it up with one instance and the maps under that with a cluster. Works well, sort of. I have come across an issue with character transfers and in the process of testing whether it was this setup or not. I have a feeling it is just Ark being Ark though.

Share this post


Link to post
Share on other sites

Since I did this I have had zero issues. It works out to be like this.

	C:\Games\SteamCMD\steamapps\common\ARK Dedicated Server <=--Real install, copied mods here
	C:\Games\SteamCMD\steamapps\common\ARK Clusters <=--Where all cluster saves go for easy backup
	C:\Games\SteamCMD\steamapps\common\ARK01 - The Island <=--All junctions pointing tot he real install except the saves folder
	C:\Games\SteamCMD\steamapps\common\ARK02 - The Center <=--Same as above
	C:\Games\SteamCMD\steamapps\common\ARK03 - Scorched Earth <=--Same as above
	

The "clusters" folder inside the "saves" folder is a link pointing to the "ARK Clusters" folder. This way I could run ten Islands, ten Centers, and ten SEs, each using ten unique cluster IDs and only need a single firewall rule and all the cluster data would be in the clusters folder. I'm almost done with two more scripts. One allows a user to specify a virtual server name so you could do "MakeVirtual MyArkServer" and it would link everything up for you. The other simply has you specify your servers in a variable in the batch file and then it creates them all for you.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×