Skip to content

Commit 494cbb7

Browse files
committed
Merged feature/dstserver-new into develop
2 parents 3db82db + bde68d9 commit 494cbb7

File tree

9 files changed

+253
-33
lines changed

9 files changed

+253
-33
lines changed

DontStarveTogether/dstserver

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,20 @@ version="161118"
2222

2323
#### Server Settings ####
2424

25-
## Server Start Settings | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters
26-
ip="0.0.0.0"
25+
## Installation Variables | https://github.com/GameServerManagers/LinuxGSM/wiki/Don't-Starve-Together
26+
sharding="false"
27+
master="true"
28+
shard="Master"
29+
cluster="Cluster_1"
30+
cave="false"
31+
32+
# Edit with care
33+
persistentstorageroot="${HOME}/.klei"
34+
confdir="DoNotStarveTogether"
2735

2836
## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters
29-
# Edit with care | http://dont-starve-game.wikia.com/wiki/Guides/Don%E2%80%99t_Starve_Together_Dedicated_Servers
30-
# Overworld: -conf_dir DST_Overworld
31-
# Cave: -conf_dir DST_Cave
3237
fn_parms(){
33-
parms="-console -cluster MyDediServer -shard Master"
34-
# -console -cluster MyDediServer -shard Master
38+
parms="-persistent_storage_root ${persistentstorageroot} -conf_dir ${confdir} -cluster ${cluster} -shard ${shard}"
3539
}
3640

3741
#### LinuxGSM Settings ####
@@ -83,7 +87,7 @@ gamename="Don't Starve Together"
8387
engine="dontstarve"
8488

8589
## Service Name | https://github.com/GameServerManagers/LinuxGSM/wiki/Multiple-Servers
86-
servicename="dst-server"
90+
servicename="dst-server-${shard}"
8791

8892
#### Directories ####
8993
# Edit with care
@@ -102,11 +106,14 @@ filesdir="${rootdir}/serverfiles"
102106
systemdir="${filesdir}"
103107
executabledir="${filesdir}/bin"
104108
executable="./dontstarve_dedicated_server_nullrenderer"
105-
servercfg="settings.ini"
106-
servercfgdefault="settings.ini"
107-
servercfgdir="${HOME}/.klei/DoNotStarveTogether"
109+
clustercfg="cluster.ini"
110+
clustercfgdir="${persistentstorageroot}/${confdir}/${cluster}"
111+
clustercfgfullpath="${clustercfgdir}/${clustercfg}"
112+
clustercfgdefault="cluster.ini"
113+
servercfg="server.ini"
114+
servercfgdir="${clustercfgdir}/${shard}"
108115
servercfgfullpath="${servercfgdir}/${servercfg}"
109-
servercfgdefault="${servercfgdir}/lgsm-default.ini"
116+
servercfgdefault="server.ini"
110117

111118
## Backup Directory
112119
backupdir="${rootdir}/backups"
@@ -197,4 +204,4 @@ fi
197204
core_dl.sh
198205
core_functions.sh
199206
getopt=$1
200-
core_getopt.sh
207+
core_getopt.sh

lgsm/functions/command_details.sh

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,16 @@ fn_details_gameserver(){
152152
if [ -n "${tickrate}" ]; then
153153
echo -e "${blue}Tick rate:\t${default}${tickrate}"
154154
fi
155+
156+
# Cluster (Don't Starve Together)
157+
if [ -n "${cluster}" ]; then
158+
echo -e "${blue}Cluster:\t${default}${cluster}"
159+
fi
160+
161+
# Shard (Don't Starve Together)
162+
if [ -n "${shard}" ]; then
163+
echo -e "${blue}Shard:\t${default}${shard}"
164+
fi
155165

156166
# TeamSpeak dbplugin
157167
if [ -n "${dbplugin}" ]; then
@@ -382,7 +392,10 @@ fn_details_dontstarve(){
382392
echo -e ""
383393
{
384394
echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
385-
echo -e "> Game\tINBOUND\t${port}\tudp"
395+
echo -e "> Game: Server\tINBOUND\t${port}\tudp"
396+
echo -e "> Game: Master\tINBOUND\t${masterport}\tudp"
397+
echo -e "> Steam: Auth\tINBOUND\t${steamauthenticationport}\tudp"
398+
echo -e "> Steam: Master\tINBOUND\t${steammasterserverport}\tudp"
386399
} | column -s $'\t' -t
387400
}
388401

lgsm/functions/command_install.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ fi
3030
install_config.sh
3131
if [ "${gamename}" == "Counter-Strike: Global Offensive" ]||[ "${gamename}" == "Team Fortress 2" ]||[ "${gamename}" == "BrainBread 2" ]; then
3232
install_gslt.sh
33+
elif [ "${gamename}" == "Don't Starve Together" ]; then
34+
install_dst_token.sh
3335
elif [ "${gamename}" == "TeamSpeak 3" ]; then
3436
install_ts3db.sh
3537
fi

lgsm/functions/core_functions.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,11 @@ functionfile="${FUNCNAME}"
480480
fn_fetch_function
481481
}
482482

483+
install_dst_token.sh(){
484+
functionfile="${FUNCNAME}"
485+
fn_fetch_function
486+
}
487+
483488
install_gsquery.sh(){
484489
functionfile="${FUNCNAME}"
485490
fn_fetch_function

lgsm/functions/core_getopt.sh

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,83 @@ case "${getopt}" in
337337
esac
338338
}
339339

340+
fn_getopt_dstserver(){
341+
case "${getopt}" in
342+
st|start)
343+
command_start.sh;;
344+
sp|stop)
345+
command_stop.sh;;
346+
r|restart)
347+
command_restart.sh;;
348+
u|update)
349+
command_update.sh;;
350+
fu|force-update|update-restart)
351+
forceupdate=1;
352+
command_update.sh;;
353+
uf|update-functions)
354+
command_update_functions.sh;;
355+
v|validate)
356+
command_validate.sh;;
357+
m|monitor)
358+
command_monitor.sh;;
359+
ta|test-alert)
360+
command_test_alert.sh;;
361+
dt|details)
362+
command_details.sh;;
363+
pd|postdetails)
364+
command_postdetails.sh;;
365+
b|backup)
366+
command_backup.sh;;
367+
c|console)
368+
command_console.sh;;
369+
d|debug)
370+
command_debug.sh;;
371+
dev|dev-debug)
372+
command_dev_debug.sh;;
373+
i|install)
374+
command_install.sh;;
375+
ai|auto-install)
376+
fn_autoinstall;;
377+
ct|cluster-token)
378+
install_dst_token.sh;;
379+
dd|detect-deps)
380+
command_dev_detect_deps.sh;;
381+
dg|detect-glibc)
382+
command_dev_detect_glibc.sh;;
383+
dl|detect-ldd)
384+
command_dev_detect_ldd.sh;;
385+
*)
386+
if [ -n "${getopt}" ]; then
387+
echo -e "${red}Unknown command${default}: $0 ${getopt}"
388+
exitcode=2
389+
fi
390+
echo "Usage: $0 [option]"
391+
echo "${gamename} - Linux Game Server Manager - Version ${version}"
392+
echo "https://gameservermanagers.com/${selfname}"
393+
echo -e ""
394+
echo -e "${lightyellow}Commands${default}"
395+
{
396+
echo -e "${blue}start\t${default}st |Start the server."
397+
echo -e "${blue}stop\t${default}sp |Stop the server."
398+
echo -e "${blue}restart\t${default}r |Restart the server."
399+
echo -e "${blue}update\t${default}u |Checks and applies updates from SteamCMD."
400+
echo -e "${blue}force-update\t${default}fu |Bypasses the check and applies updates from SteamCMD."
401+
echo -e "${blue}update-functions\t${default}uf |Removes all functions so latest can be downloaded."
402+
echo -e "${blue}validate\t${default}v |Validate server files with SteamCMD."
403+
echo -e "${blue}monitor\t${default}m |Checks that the server is running."
404+
echo -e "${blue}test-alert\t${default}ta |Sends test alert."
405+
echo -e "${blue}details\t${default}dt |Displays useful information about the server."
406+
echo -e "${blue}postdetails\t${default}pd |Post stripped details to pastebin (for support)"
407+
echo -e "${blue}backup\t${default}b |Create archive of the server."
408+
echo -e "${blue}console\t${default}c |Console allows you to access the live view of a server."
409+
echo -e "${blue}debug\t${default}d |See the output of the server directly to your terminal."
410+
echo -e "${blue}install\t${default}i |Install the server."
411+
echo -e "${blue}auto-install\t${default}ai |Install the server, without prompts."
412+
echo -e "${blue}cluster-token\t${default}ct |Configure cluster token."
413+
} | column -s $'\t' -t
414+
esac
415+
}
416+
340417
fn_getopt_gmodserver(){
341418
case "${getopt}" in
342419
st|start)
@@ -628,6 +705,8 @@ elif [ "${engine}" == "lwjgl2" ]; then
628705
fn_getopt_minecraft
629706
elif [ "${gamename}" == "TeamSpeak 3" ]; then
630707
fn_getopt_teamspeak3
708+
elif [ "${gamename}" == "Don't Starve Together" ]; then
709+
fn_getopt_dstserver
631710
elif [ "${gamename}" == "Garry's Mod" ]; then
632711
fn_getopt_gmodserver
633712
elif [ "${engine}" == "unreal2" ]; then

lgsm/functions/info_config.sh

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,28 +109,47 @@ fn_info_config_codwaw(){
109109
}
110110

111111
fn_info_config_dontstarve(){
112-
if [ ! -f "${servercfgfullpath}" ]; then
112+
if [ ! -f "${clustercfgfullpath}" ]; then
113113
servername="${unavailable}"
114114
serverpassword="${unavailable}"
115115
maxplayers="${zero}"
116116
gamemode="${unavailable}"
117117
tickrate="${zero}"
118-
port="${zero}"
118+
masterport="${zero}"
119119
else
120-
servername=$(grep "default_server_name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/default_server_name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
121-
serverpassword=$(grep "server_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
122-
maxplayers=$(grep "max_players" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
123-
gamemode=$(grep "game_mode" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/game_mode//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
124-
tickrate=$(grep "tick_rate" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
125-
port=$(grep "server_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
120+
servername=$(grep "cluster_name" "${clustercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/cluster_name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
121+
serverpassword=$(grep "cluster_password" "${clustercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/cluster_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
122+
maxplayers=$(grep "max_players" "${clustercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
123+
gamemode=$(grep "game_mode" "${clustercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/game_mode//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
124+
tickrate=$(grep "tick_rate" "${clustercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
125+
masterport=$(grep "master_port" "${clustercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
126+
127+
ip=$(grep "bind_ip" "${clustercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/bind_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
128+
ipsetinconfig=1
129+
ipinconfigvar="bind_ip"
126130

127131
# Not Set
128132
servername=${servername:-"NOT SET"}
129133
serverpassword=${serverpassword:-"NOT SET"}
130134
maxplayers=${maxplayers:-"0"}
131135
gamemode=${gamemode:-"NOT SET"}
132136
tickrate=${tickrate:-"0"}
137+
masterport=${masterport:-"0"}
138+
fi
139+
140+
if [ ! -f "${servercfgfullpath}" ]; then
141+
port="${zero}"
142+
steamauthenticationport="${zero}"
143+
steammasterserverport="${zero}"
144+
else
145+
port=$(grep "server_port" "${servercfgfullpath}" | grep "^server_port" | grep -v "#" | tr -cd '[:digit:]')
146+
steamauthenticationport=$(grep "authentication_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
147+
steammasterserverport=$(grep "master_server_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
148+
149+
# Not Set
133150
port=${port:-"0"}
151+
steamauthenticationport=${steamauthenticationport:-"0"}
152+
steammasterserverport=${steammasterserverport:-"0"}
134153
fi
135154
}
136155

lgsm/functions/install_complete.sh

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,6 @@ local commandname="INSTALL"
88
local commandaction="Install"
99
local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
1010

11-
if [ "${gamename}" == "Don't Starve Together" ]; then
12-
echo ""
13-
echo "An Authentication Token is required to run this server!"
14-
echo "Follow the instructions in this link to obtain this key"
15-
echo " https://gameservermanagers.com/dst-auth-token"
16-
fi
1711
echo "================================="
1812
echo "Install Complete!"
1913
fn_script_log_info "Install Complete!"

lgsm/functions/install_config.sh

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,71 @@ fn_default_config_remote(){
5151
for config in "${array_configs[@]}"
5252
do
5353
# every config is copied
54-
echo "copying ${servercfg} config file."
54+
echo "copying ${config} config file."
5555
fn_script_log_info "copying ${servercfg} config file."
5656
if [ "${config}" == "${servercfgdefault}" ]; then
5757
cp -v "${lgsmdir}/default-configs/${config}" "${servercfgfullpath}"
58-
elif [ "${config}" == "${networkcfgdefault}" ]; then
59-
# ARMA 3
58+
elif [ "${gamename}" == "ARMA 3" ]&&[ "${config}" == "${networkcfgdefault}" ]; then
6059
cp -v "${lgsmdir}/default-configs/${config}" "${networkcfgfullpath}"
60+
elif [ "${gamename}" == "Don't Starve Together" ]&&[ "${config}" == "${clustercfgdefault}" ]; then
61+
cp -nv "${lgsmdir}/default-configs/${clustercfgdefault}" "${clustercfgfullpath}"
6162
else
6263
cp -v "${lgsmdir}/default-configs/${config}" "${servercfgdir}/${config}"
6364
fi
6465
done
6566
sleep 1
6667
}
6768

69+
# Changes some variables within the default Don't Starve Together configs
70+
fn_set_dst_config_vars(){
71+
## cluster.ini
72+
if grep -Fq "SERVERNAME" "${clustercfgfullpath}"; then
73+
echo "changing server name."
74+
fn_script_log_info "changing server name."
75+
sed -i "s/SERVERNAME/LinuxGSM/g" "${clustercfgfullpath}"
76+
sleep 1
77+
echo "changing shard mode."
78+
fn_script_log_info "changing shard mode."
79+
sed -i "s/USESHARDING/${sharding}/g" "${clustercfgfullpath}"
80+
sleep 1
81+
echo "randomizing cluster key."
82+
fn_script_log_info "randomizing cluster key."
83+
randomkey=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
84+
sed -i "s/CLUSTERKEY/${randomkey}/g" "${clustercfgfullpath}"
85+
sleep 1
86+
else
87+
echo "${clustercfg} is already configured."
88+
fn_script_log_info "${clustercfg} is already configured."
89+
fi
90+
91+
## server.ini
92+
# removing unnecessary options (dependent on sharding & shard type)
93+
if [ "${sharding}" == "false" ]; then
94+
sed -i "s/ISMASTER//g" "${servercfgfullpath}"
95+
sed -i "/SHARDNAME/d" "${servercfgfullpath}"
96+
elif [ "${master}" == "true" ]; then
97+
sed -i "/SHARDNAME/d" "${servercfgfullpath}"
98+
fi
99+
100+
echo "changing shard name."
101+
fn_script_log_info "changing shard name."
102+
sed -i "s/SHARDNAME/${shard}/g" "${servercfgfullpath}"
103+
sleep 1
104+
echo "changing master setting."
105+
fn_script_log_info "changing master setting."
106+
sed -i "s/ISMASTER/${master}/g" "${servercfgfullpath}"
107+
sleep 1
108+
109+
## worldgenoverride.lua
110+
if [ "${cave}" == "true" ]; then
111+
echo "defining ${shard} as cave in ${servercfgdir}/worldgenoverride.lua."
112+
fn_script_log_info "defining ${shard} as cave in ${servercfgdir}/worldgenoverride.lua."
113+
echo 'return { override_enabled = true, preset = "DST_CAVE", }' > "${servercfgdir}/worldgenoverride.lua"
114+
fi
115+
sleep 1
116+
echo ""
117+
}
118+
68119
echo ""
69120
echo "Downloading ${gamename} Config"
70121
echo "================================="
@@ -193,10 +244,11 @@ elif [ "${gamename}" == "Deathmatch Classic" ]; then
193244
fn_set_config_vars
194245
elif [ "${gamename}" == "Don't Starve Together" ]; then
195246
gamedirname="DontStarveTogether"
196-
array_configs+=( Settings.ini )
247+
fn_check_cfgdir
248+
array_configs+=( cluster.ini server.ini )
197249
fn_fetch_default_config
198250
fn_default_config_remote
199-
fn_set_config_vars
251+
fn_set_dst_config_vars
200252
elif [ "${gamename}" == "Double Action: Boogaloo" ]; then
201253
gamedirname="DoubleActionBoogaloo"
202254
array_configs+=( server.cfg )

0 commit comments

Comments
 (0)