Skip to content

Commit 079ec1e

Browse files
committed
feat(wipe): resolve random seed and simplify wipe (#3420)
merge merge merge merge merge merge MERGE merge merge merge merge message about Rust+ data merge merge merge merge merge mertge merge merge merge merge merge merge
1 parent 669e2c9 commit 079ec1e

File tree

12 files changed

+169
-195
lines changed

12 files changed

+169
-195
lines changed

lgsm/config-default/config-lgsm/rustserver/_default.cfg

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,18 @@ appport=28082
1616
rconpassword="CHANGE_ME"
1717
rconweb="1" # Value is: 1 for the Facepunch web panel, Rustadmin desktop and Rustadmin Online; 0 for RCON tools like Rusty.
1818
servername="Rust"
19-
gamemode="vanilla" # values: vanilla, softcore ( Doc: https://wiki.facepunch.com/rust/server-gamemodes )
20-
maxplayers="50"
19+
gamemode="vanilla" # Values: vanilla, softcore ( Doc: https://wiki.facepunch.com/rust/server-gamemodes )
20+
serverlevel="Procedural Map" # Values: Procedural Map, Barren, HapisIsland, SavasIsland
21+
customlevelurl="" # Custom level url
2122
seed="" # range: 1-2147483647, used to reproduce a procedural map.
2223
salt="" # range: unknown, used to recover a known setting from an existing map.
24+
maxplayers="50"
2325
worldsize="3000" # default: 3000, range: 1000-6000, map size in meters.
2426
saveinterval="300" # Auto-save in seconds.
2527
tickrate="30" # default: 30, range: 15-100.
2628

2729
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
28-
startparameters="-batchmode +app.listenip ${ip} +app.port ${appport} +server.ip ${ip} +server.port ${port} +server.tickrate ${tickrate} +server.hostname \"${servername}\" +server.identity \"${selfname}\" +server.gamemode ${gamemode} +server.seed ${seed} +server.salt ${salt} +server.maxplayers ${maxplayers} +server.worldsize ${worldsize} +server.saveinterval ${saveinterval} +rcon.web ${rconweb} +rcon.ip ${ip} +rcon.port ${rconport} +rcon.password \"${rconpassword}\" -logfile"
30+
startparameters="-batchmode +app.listenip ${ip} +app.port ${appport} +server.ip ${ip} +server.port ${port} +server.tickrate ${tickrate} +server.hostname \"${servername}\" +server.identity \"${selfname}\" +server.gamemode ${gamemode} +server.level \"${serverlevel}\" +server.seed ${seed} +server.salt ${salt} +server.levelurl ${customlevelurl} +server.maxplayers ${maxplayers} +server.worldsize ${worldsize} +server.saveinterval ${saveinterval} +rcon.web ${rconweb} +rcon.ip ${ip} +rcon.port ${rconport} +rcon.password \"${rconpassword}\" -logfile"
2931

3032
#### LinuxGSM Settings ####
3133

lgsm/data/bo_header.jpg

19.3 KB
Loading

lgsm/data/rust_header.jpg

115 KB
Loading

lgsm/functions/command_wipe.sh

Lines changed: 109 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -12,219 +12,170 @@ fn_firstcommand_set
1212

1313
# Provides an exit code upon error.
1414
fn_wipe_exit_code(){
15-
((exitcode=$?))
15+
exitcode=$?
1616
if [ "${exitcode}" != 0 ]; then
17-
fn_script_log_fatal "${currentaction}"
17+
fn_print_fail_eol_nl
1818
core_exit.sh
1919
else
2020
fn_print_ok_eol_nl
2121
fi
2222
}
2323

2424
# Removes files to wipe server.
25-
fn_wipe_server_files(){
26-
fn_print_start_nl "Wiping server"
27-
fn_script_log_info "Wiping server"
28-
# Wipe procedural map.
29-
if [ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.map")" ]; then
30-
echo -en "removing procedural map proceduralmap.*.map file(s)..."
31-
fn_sleep_time
32-
fn_script_log_info "Removing procedural map file(s): ${serveridentitydir}/proceduralmap.*.map"
33-
find "${serveridentitydir:?}" -type f -name "proceduralmap.*.map" -delete | tee -a "${lgsmlog}"
34-
fn_wipe_exit_code
35-
fn_sleep_time
36-
else
37-
echo -e "no procedural map file to remove"
38-
fn_sleep_time
39-
fn_script_log_pass "No procedural map file to remove"
40-
fi
41-
# Wipe Barren map.
42-
if [ -n "$(find "${serveridentitydir}" -type f -name "barren*.map")" ]; then
43-
echo -en "removing barren map barren*.map file(s)..."
44-
fn_sleep_time
45-
fn_script_log_info "Removing map file(s): ${serveridentitydir}/barren*.map"
46-
find "${serveridentitydir:?}" -type f -name "barren*.map" -delete | tee -a "${lgsmlog}"
47-
fn_wipe_exit_code
48-
fn_sleep_time
49-
else
50-
echo -e "no barren map file to remove"
51-
fn_sleep_time
52-
fn_script_log_pass "No barren map file to remove"
53-
fi
54-
# Wipe custom map.
55-
if [ -n "$(find "${serveridentitydir}" -type f -name "*.map")" ]; then
56-
echo -en "removing custom map file(s)..."
57-
fn_sleep_time
58-
fn_script_log_info "Removing map file(s): ${serveridentitydir}/*.map"
59-
find "${serveridentitydir:?}" -type f -name "*.map" -delete | tee -a "${lgsmlog}"
60-
fn_wipe_exit_code
61-
fn_sleep_time
62-
else
63-
echo -e "no map file to remove"
64-
fn_sleep_time
65-
fn_script_log_pass "No map file to remove"
66-
fi
67-
# Wipe custom map save.
68-
if [ -n "$(find "${serveridentitydir}" -type f -name "*.sav*")" ]; then
69-
echo -en "removing map save *.sav* file(s)..."
70-
fn_sleep_time
71-
fn_script_log_info "Removing map save(s): ${serveridentitydir}/*.sav*"
72-
find "${serveridentitydir:?}" -type f -name "*.sav*" -delete | tee -a "${lgsmlog}"
73-
fn_wipe_exit_code
74-
fn_sleep_time
75-
else
76-
echo -e "no map save to remove"
77-
fn_sleep_time
78-
fn_script_log_pass "No map save to remove."
79-
fi
80-
# Wipe user dir, might be a legacy thing, maybe to be removed.
81-
if [ -d "${serveridentitydir}/user" ]; then
82-
echo -en "removing user directory..."
83-
fn_sleep_time
84-
fn_script_log_info "removing user directory: ${serveridentitydir}/user"
85-
rm -rf "${serveridentitydir:?}/user"
86-
fn_wipe_exit_code
87-
fn_sleep_time
88-
# We do not print additional information if there is nothing to remove since this might be obsolete.
89-
fi
90-
# Wipe storage dir, might be a legacy thing, maybe to be removed.
91-
if [ -d "${serveridentitydir}/storage" ]; then
92-
echo -en "removing storage directory..."
93-
fn_sleep_time
94-
fn_script_log_info "removing storage directory: ${serveridentitydir}/storage"
95-
rm -rf "${serveridentitydir:?}/storage"
96-
fn_wipe_exit_code
97-
fn_sleep_time
98-
# We do not print additional information if there is nothing to remove since this might be obsolete.
99-
fi
100-
# Wipe sv.files.
101-
if [ -n "$(find "${serveridentitydir}" -type f -name "sv.files.*.db")" ]; then
102-
echo -en "removing server misc srv.files*.db file(s)..."
103-
fn_sleep_time
104-
fn_script_log_info "Removing server misc files: ${serveridentitydir}/sv.files.*.db"
105-
find "${serveridentitydir:?}" -type f -name "sv.files.*.db" -delete | tee -a "${lgsmlog}"
106-
fn_wipe_exit_code
107-
fn_sleep_time
108-
# No further information if not found because it should I could not get this file showing up.
109-
fi
110-
# Wipe player death files.
111-
if [ -n "$(find "${serveridentitydir}" -type f -name "player.deaths.*.db")" ]; then
112-
echo -en "removing player deaths player.deaths.*.db file(s)..."
113-
fn_sleep_time
114-
fn_script_log_info "Removing player death files: ${serveridentitydir}/player.deaths.*.db"
115-
find "${serveridentitydir:?}" -type f -name "player.deaths.*.db" -delete | tee -a "${lgsmlog}"
116-
fn_wipe_exit_code
117-
fn_sleep_time
118-
else
119-
echo -e "no player death to remove"
120-
fn_sleep_time
121-
fn_script_log_pass "No player death to remove"
122-
fi
123-
# Wipe player states files
124-
if [ -n "$(find "${serveridentitydir}" -type f -name "player.states.*.db")" ]; then
125-
echo -en "removing player states player.states.*.db file(s)..."
126-
fn_sleep_time
127-
fn_script_log_info "Removing player states: ${serveridentitydir}/player.states.*.db"
128-
find "${serveridentitydir:?}" -type f -name "player.states.*.db" -delete | tee -a "${lgsmlog}"
129-
fn_wipe_exit_code
130-
fn_sleep_time
131-
else
132-
echo -e "no player states to remove"
133-
fn_sleep_time
134-
fn_script_log_pass "No player states to remove"
135-
fi
136-
# Wipe blueprints only if full-wipe command was used.
137-
if [ "${fullwipe}" == "1" ]; then
138-
if [ -n "$(find "${serveridentitydir}" -type f -name "player.blueprints.*.db")" ]; then
139-
echo -en "removing blueprints player.blueprints.*.db file(s)..."
25+
fn_wipe_files(){
26+
fn_print_start_nl "${wipetype}"
27+
fn_script_log_info "${wipetype}"
28+
29+
# Remove Map files
30+
if [ -n "${serverwipe}" ]||[ -n "${mapwipe}" ]; then
31+
if [ -n "$(find "${serveridentitydir}" -type f -name "*.map")" ]; then
32+
echo -en "removing .map file(s)..."
33+
fn_script_log_info "removing *.map file(s)"
14034
fn_sleep_time
141-
fn_script_log_info "Removing blueprint file(s): ${serveridentitydir}/player.blueprints.*.db"
142-
find "${serveridentitydir:?}" -type f -name "player.blueprints.*.db" -delete | tee -a "${lgsmlog}"
35+
find "${serveridentitydir:?}" -type f -name "*.map" -printf "%f\n" >> "${lgsmlog}"
36+
find "${serveridentitydir:?}" -type f -name "*.map" -delete | tee -a "${lgsmlog}"
14337
fn_wipe_exit_code
38+
else
39+
echo -e "no .map file(s) to remove"
40+
fn_sleep_time
41+
fn_script_log_pass "no .map file(s) to remove"
42+
fi
43+
fi
44+
# Remove Save files.
45+
if [ -n "${serverwipe}" ]||[ -n "${mapwipe}" ]; then
46+
if [ -n "$(find "${serveridentitydir}" -type f -name "*.sav*")" ]; then
47+
echo -en "removing .sav file(s)..."
48+
fn_script_log_info "removing .sav file(s)"
14449
fn_sleep_time
50+
find "${serveridentitydir:?}" -type f -name "*.sav*" -printf "%f\n" >> "${lgsmlog}"
51+
find "${serveridentitydir:?}" -type f -name "*.sav*" -delete
52+
fn_wipe_exit_code
14553
else
146-
echo -e "no blueprint file to remove"
54+
echo -e "no .sav file(s) to remove"
55+
fn_script_log_pass "no .sav file(s) to remove"
14756
fn_sleep_time
148-
fn_script_log_pass "No blueprint file to remove"
14957
fi
150-
elif [ -n "$(find "${serveridentitydir}" -type f -name "player.blueprints.*.db")" ]; then
151-
echo -e "keeping blueprints"
152-
fn_sleep_time
153-
fn_script_log_info "Keeping blueprints"
154-
else
155-
echo -e "no blueprints found"
156-
fn_sleep_time
157-
fn_script_log_pass "No blueprints found"
15858
fi
159-
# Wipe some logs that might be there.
160-
if [ -n "$(find "${serveridentitydir}" -type f -name "Log.*.txt")" ]; then
161-
echo -en "removing log files..."
162-
fn_sleep_time
163-
fn_script_log_info "Removing log files: ${serveridentitydir}/Log.*.txt"
164-
find "${serveridentitydir:?}" -type f -name "Log.*.txt" -delete
165-
fn_wipe_exit_code
166-
fn_sleep_time
167-
# We do not print additional information if there are no logs to remove.
59+
# Remove db files for full wipe.
60+
# Excluding player.tokens.db for Rust+.
61+
if [ -n "${serverwipe}" ]; then
62+
if [ -n "$(find "${serveridentitydir}" -type f ! -name 'player.tokens.db' -name "*.db")" ]; then
63+
echo -en "removing .db file(s)..."
64+
fn_script_log_info "removing .db file(s)"
65+
fn_sleep_time
66+
find "${serveridentitydir:?}" -type f ! -name 'player.tokens.db' -name "*.db" -printf "%f\n" >> "${lgsmlog}"
67+
find "${serveridentitydir:?}" -type f ! -name 'player.tokens.db' -name "*.db" -delete
68+
fn_wipe_exit_code
69+
else
70+
echo -e "no .db file(s) to remove"
71+
fn_sleep_time
72+
fn_script_log_pass "no .db file(s) to remove"
73+
fi
16874
fi
16975
}
17076

171-
fn_stop_warning(){
172-
fn_print_warn "this game server will be stopped during wipe"
173-
fn_script_log_warn "this game server will be stopped during wipe"
77+
fn_map_wipe_warning(){
78+
fn_print_warn "Map wipe will reset the map data and keep blueprint data"
79+
fn_script_log_warn "Map wipe will reset the map data and keep blueprint data"
17480
totalseconds=3
17581
for seconds in {3..1}; do
176-
fn_print_warn "this game server will be stopped during wipe: ${totalseconds}"
82+
fn_print_warn "Map wipe will reset the map data and keep blueprint data: ${totalseconds}"
17783
totalseconds=$((totalseconds - 1))
17884
sleep 1
17985
if [ "${seconds}" == "0" ]; then
18086
break
18187
fi
18288
done
183-
fn_print_warn_nl "this game server will be stopped during wipe"
89+
fn_print_warn_nl "Map wipe will reset the map data and keep blueprint data"
18490
}
18591

186-
fn_wipe_warning(){
187-
fn_print_warn "wipe is about to start"
188-
fn_script_log_warn "wipe is about to start"
92+
fn_full_wipe_warning(){
93+
fn_print_warn "Server wipe will reset the map data and remove blueprint data"
94+
fn_script_log_warn "Server wipe will reset the map data and remove blueprint data"
18995
totalseconds=3
19096
for seconds in {3..1}; do
191-
fn_print_warn "wipe is about to start: ${totalseconds}"
97+
fn_print_warn "Server wipe will reset the map data and remove blueprint data: ${totalseconds}"
19298
totalseconds=$((totalseconds - 1))
19399
sleep 1
194100
if [ "${seconds}" == "0" ]; then
195101
break
196102
fi
197103
done
198-
fn_print_warn "wipe is about to start"
104+
fn_print_warn_nl "Server wipe will reset the map data and remove blueprint data"
199105
}
200106

201-
# Will change the seed everytime the wipe command is run if the seed in config is not set.
107+
# Will change the seed if the seed is not defined by the user.
202108
fn_wipe_random_seed(){
203-
shuf -i 1-2147483647 -n 1 > "${datadir}/${selfname}-seed.txt"
109+
if [ -f "${datadir}/${selfname}-seed.txt" ]&&[ -n "${randomseed}" ]; then
110+
shuf -i 1-2147483647 -n 1 > "${datadir}/${selfname}-seed.txt"
111+
seed=$(cat "${datadir}/${selfname}-seed.txt")
112+
randomseed=1
113+
echo -en "generating new random seed (${cyan}${seed}${default})..."
114+
fn_script_log_pass "generating new random seed (${cyan}${seed}${default})"
115+
fn_sleep_time
116+
fn_print_ok_eol_nl
117+
fi
118+
}
119+
120+
# A summary of what wipe is going to do.
121+
fn_wipe_details(){
122+
fn_print_information_nl "Wipe does not remove Rust+ data."
123+
echo -en "* Wipe map data: "
124+
if [ -n "${serverwipe}" ]||[ -n "${mapwipe}" ]; then
125+
fn_print_yes_eol_nl
126+
else
127+
fn_print_no_eol_nl
128+
fi
129+
130+
echo -en "* Wipe blueprint data: "
131+
if [ -n "${serverwipe}" ]; then
132+
fn_print_yes_eol_nl
133+
else
134+
fn_print_no_eol_nl
135+
fi
136+
137+
echo -en "* Change Procedural Map seed: "
138+
if [ -n "${randomseed}" ]; then
139+
fn_print_yes_eol_nl
140+
else
141+
fn_print_no_eol_nl
142+
fi
204143
}
205144

206145
fn_print_dots ""
207146
check.sh
147+
fix_rust.sh
208148

209149
# Check if there is something to wipe.
210-
if [ -d "${serveridentitydir}/storage" ]||[ -d "${serveridentitydir}/user" ]||[ -n "$(find "${serveridentitydir}" -type f -name "*.sav*")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "Log.*.txt")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "player.deaths.*.db")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "player.blueprints.*.db")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "sv.files.*.db")" ]; then
211-
fn_wipe_warning
150+
if [ -n "$(find "${serveridentitydir}" -type f -name "*.map")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "*.sav*")" ]&&[ -n "$(find "${serveridentitydir}" -type f ! -name 'player.tokens.db' -name "*.db")" ]; then
151+
if [ -n "${serverwipe}" ]; then
152+
wipetype="Full wipe"
153+
fn_full_wipe_warning
154+
fn_wipe_details
155+
elif [ -n "${mapwipe}" ]; then
156+
wipetype="Map wipe"
157+
fn_map_wipe_warning
158+
fn_wipe_details
159+
fi
212160
check_status.sh
213161
if [ "${status}" != "0" ]; then
214-
fn_stop_warning
162+
fn_print_restart_warning
215163
exitbypass=1
216164
command_stop.sh
217165
fn_firstcommand_reset
218-
fn_wipe_server_files
166+
fn_wipe_files
167+
fn_wipe_random_seed
168+
fn_print_complete_nl "${wipetype}"
169+
fn_script_log_pass "${wipetype}"
219170
exitbypass=1
220171
command_start.sh
221172
fn_firstcommand_reset
222173
else
223-
fn_wipe_server_files
174+
fn_wipe_files
175+
fn_wipe_random_seed
176+
fn_print_complete_nl "${wipetype}"
177+
fn_script_log_pass "${wipetype}"
224178
fi
225-
fn_print_complete_nl "Wiping ${selfname}"
226-
fn_script_log_pass "Wiping ${selfname}"
227-
fn_wipe_random_seed
228179
else
229180
fn_print_ok_nl "Wipe not required"
230181
fn_script_log_pass "Wipe not required"

lgsm/functions/core_getopt.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ cmd_mods_update=( "mu;mods-update" "command_mods_update.sh" "Update installed mo
4040
# Server specific.
4141
cmd_change_password=( "pw;change-password" "command_ts3_server_pass.sh" "Change TS3 serveradmin password." )
4242
cmd_install_default_resources=( "ir;install-default-resources" "command_install_resources_mta.sh" "Install the MTA default resources." )
43-
cmd_wipe=( "w;wipe;wi" "command_wipe.sh" "Map assets are wiped and blueprints are kept." )
44-
cmd_full_wipe=( "fw;full-wipe;wa;wipeall" "fullwipe=1; command_wipe.sh" "Map assets and blueprints are wiped." )
43+
cmd_fullwipe=( "fw;full-wipe;wa;wipeall" "serverwipe=1; command_wipe.sh" "Reset the map and remove blueprint data." )
44+
cmd_mapwipe=( "mw;map-wipe;w;wipe;wi" "mapwipe=1; command_wipe.sh" "Reset the map and keep blueprint data." )
4545
cmd_map_compressor_u99=( "mc;map-compressor" "compress_ut99_maps.sh" "Compresses all ${gamename} server maps." )
4646
cmd_map_compressor_u2=( "mc;map-compressor" "compress_unreal2_maps.sh" "Compresses all ${gamename} server maps." )
4747
cmd_install_cdkey=( "cd;server-cd-key" "install_ut2k4_key.sh" "Add your server cd key." )
@@ -105,7 +105,7 @@ fi
105105

106106
# Unreal exclusive.
107107
if [ "${shortname}" == "rust" ]; then
108-
currentopt+=( "${cmd_wipe[@]}" "${cmd_full_wipe[@]}" )
108+
currentopt+=( "${cmd_fullwipe[@]}" "${cmd_mapwipe[@]}" )
109109
fi
110110
if [ "${engine}" == "unreal2" ]; then
111111
if [ "${shortname}" == "ut2k4" ]; then

lgsm/functions/core_messages.sh

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,28 @@ fn_prompt_message(){
375375
# On-Screen End of Line
376376
##################################
377377

378+
# YES
379+
fn_print_yes_eol(){
380+
echo -en "${cyan}YES${default}"
381+
fn_sleep_time
382+
}
383+
384+
fn_print_yes_eol_nl(){
385+
echo -e "${cyan}YES${default}"
386+
fn_sleep_time
387+
}
388+
389+
# NO
390+
fn_print_no_eol(){
391+
echo -en "${red}NO${default}"
392+
fn_sleep_time
393+
}
394+
395+
fn_print_no_eol_nl(){
396+
echo -e "${red}NO${default}"
397+
fn_sleep_time
398+
}
399+
378400
# OK
379401
fn_print_ok_eol(){
380402
echo -en "${green}OK${default}"

0 commit comments

Comments
 (0)