diff --git a/Scripts/7D2D-Manage.bash b/Scripts/7D2D-Manage.bash
index f6e98f8..0e50dfe 100644
--- a/Scripts/7D2D-Manage.bash
+++ b/Scripts/7D2D-Manage.bash
@@ -145,7 +145,6 @@ confirmation() {
### CONSTANTS ###
PRIMARY_START_PORT_RANGE=50000
-TELNET_START_PORT_RANGE=60000
BASE_DIR="${HOME}/7-Days-To-Die"
### CONSTANTS ###
@@ -224,11 +223,14 @@ start_server() {
backup_configs "${server_directory}"
local server_port
- server_port="$((PRIMARY_START_PORT_RANGE + server_id))"
+ local telnet_port
+ local allocs_port
+ # This multiplication gives us 5 available ports for this server, safely allows us to block off ports efficiently
+ server_port="$((PRIMARY_START_PORT_RANGE + $(("${server_id}" * 5)) ))"
server_port="${SERVER_PORT:-$server_port}"
- local telnet_port
- telnet_port="$(( TELNET_START_PORT_RANGE + server_id ))"
+ telnet_port="$(( server_port + 1 ))"
+ allocs_port="$(( server_port + 2 ))"
telnet_port="${TELNET_PORT:-$telnet_port}"
log "info" "Generating a few required directories in $(important "${server_directory}")"
@@ -255,6 +257,8 @@ start_server() {
# Manage the telnet tags
elif [[ "${REPLY}" = *"property name=\"TelnetPort\""* ]]; then
printf "\t%s\n" ""
+ elif [[ "${REPLY}" = *"property name=\"ControlPanelPort\""* ]]; then
+ printf "\t%s\n" ""
else
printf "%s\n" "${REPLY}"
fi
@@ -312,9 +316,12 @@ done" C-m
kill_server() {
local prefix
local server_id
+ local force
+ local session
server_id=""
prefix="7D2D"
+ force=1
while :; do
case ${1} in
@@ -322,10 +329,15 @@ kill_server() {
printf "Usage: %s\n" \
"kill [options]
--server | -s
- Forcefully kills the server with the given id
+ Stops the server with the given id
Example:
- --server 3"
+ --server 3
+ --force | -f
+ Forces the server to close with tmux kill-session
+
+ Example:
+ --force"
exit
;;
--) # End of all options.
@@ -336,6 +348,10 @@ kill_server() {
server_id="${1}"
[[ -z "${server_id}" ]] && log "error" "No server id passed" && exit 1
;;
+ --force | -f)
+ shift
+ force=0
+ ;;
-?*)
printf 'Unknown option: %s\n' "$1" >&2
;;
@@ -347,12 +363,26 @@ kill_server() {
[[ -z "${server_id}" ]] && log "error" "No server id passed" && exit 1
- if tmux kill-session -t "${prefix}-Server-${server_id}" >/dev/null 2>&1; then
- log "info" "Stopped $(important "${prefix}-Server-${server_id}")"
- return 0
+ session="${prefix}-Server-${server_id}"
+
+ if "${force}"; then
+
+ if tmux kill-session -t "${session}" >/dev/null 2>&1; then
+ log "info" "Killed $(important "${prefix}-Server-${server_id}")"
+ return 0
+ else
+ log "error" "$(important "${prefix}-Server-${server_id}") is not running"
+ return 1
+ fi
else
- log "error" "$(important "${prefix}-Server-${server_id}") is not running"
- return 1
+ while tmux has-session -t "${session}"; do
+ log "info" "Attempting to gracefully kill $(important "${session}")"
+ tmux send-keys -t "7D2D-Server-${server_id}" C-c
+ log "info" "Sent Exit Request, waiting 10 seconds..."
+ sleep 10
+ done
+ log "info" "Successfully stopped $(important "${session}")"
+ return 0
fi
}
@@ -416,7 +446,15 @@ install() {
sleep 5
kill_server -s "${server_id}"
- cp "${server_admin_xml}" "${server_directory}/"
+ cp "${server_admin_xml}" "${server_directory}/Saves"
+
+ log "info" "Installing Allocs Server Fixes"
+ local server_fixes_temp_dir
+ server_fixes_temp_dir="Server-Fixes-$(date +%s)"
+ wget http://illy.bz/fi/7dtd/server_fixes.tar.gz >/dev/null 2>&1
+ tar xf server_fixes.tar.gz -C "${server_fixes_temp_dir}"
+ cp "${server_fixes_temp_dir}/Mods/"* "${server_directory}/mods"
+ rm -rf "${server_fixes_temp_dir}"
log "info" "Successfully installed $(important "${server_name}") to $(important "${server_directory}")"
}