blob: 40647d8108c39f51cefc93304fa314313cf74eb9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
#!/bin/bash
function config {
if [[ ! -s $1 ]]; then
echo "Specify a valid properties file."
exit 1
fi
if [[ -s /usr/share/dom4/current ]]; then
game=$(</usr/share/dom4/current)
new=$(basename $1 .properties)
read -r -n 2 -p "A game named $game already exists. Set up to host $new instead? [Y/n] " ovr
if [[ $ovr != Y ]]; then
exit 0
fi
fi
echo "Copying properties file"
cp $1 /usr/share/dom4/config
mapfile=$(grep -oP "mapfile\s+\K.+" $1)
mapname=$(basename $mapfile .map)
echo "Copying $mapname map files"
mkdir -p /usr/share/dom4/maps
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
cp "$USER_HOME/dominions4/maps/$mapname."* /usr/share/dom4/maps
# Set name as current hosted game
echo $(basename $1 .properties) > /usr/share/dom4/current
cat <<EOF
Done. Start the service to let players upload their pretenders.
sudo systemctl start dom4-server.service
Once all pretenders have been uploaded, stop the service and set the game to ready.
sudo dom4 ready
EOF
}
function ready {
if [[ ! -s /usr/share/dom4/current ]]; then
echo "No current game found. Use dom4 config to load game configuration."
exit 1
fi
game=$(</usr/share/dom4/current)
players=$(ls -1 /usr/share/dom4/savedgames/$game | wc -l)
if grep -qE "uploadtime|uploadmaxp" /usr/share/dom4/config/$game.properties ; then
echo "Upload flag already set. Start the service with systemctl."
exit 1
fi
echo "Setting start flag for $game ($players players)"
echo "uploadmaxp $players" >> "/usr/share/dom4/config/$game.properties"
cat <<EOF
Flag set. Start the dom4-server service to begin the game.
sudo systemctl start dom4-server.service
You may wish to enable it as well to ensure it restarts on boot.
EOF
}
function delete {
if [[ -z $1 ]]; then
echo "Specify a game name to delete."
exit 0
fi
if [[ $1 = "default" ]]; then
echo "Not deleting the default config."
exit 0
fi
game=$(</usr/share/dom4/current)
if [[ $game = $1 ]]; then
read -r -n 2 -p "$game is currently being hosted. Really delete? [Y/n] " ovr
if [[ $ovr != Y ]]; then
exit 0
fi
rm /usr/share/dom4/current
fi
# leave the mapfile in case something else is using it
rm /usr/share/dom4/config/$1.properties
rm -rf /usr/share/dom4/savedgames/$1
}
if [[ $EUID -ne 0 && ! -z $1 ]]; then
echo "This script must be run as root or via sudo."
exit 1
fi
case $1 in
config)
config "${@:2}"
;;
ready)
ready "${@:2}"
;;
delete)
delete "${@:2}"
;;
"")
cat <<EOF
Get an example template to modify in your editor of choice:
cp /usr/share/dom4/config/default.properties mygame.properties
Load a game config file:
sudo dom4 config path/to/mygame.properties
Set start flag for current game after all pretenders have been uploaded, prior to running service:
sudo dom4 ready
Delete a game:
sudo dom4 delete mygame
Start the service:
sudo systemctl start dom4-server.service
Stop the service:
sudo systemctl stop dom4-server.service
Troubleshooting:
If the service isn't running, figure out what's going wrong:
systemctl status dom4-server.service
EOF
;;
esac
|