When warning players, update now if nobody's there

This commit is contained in:
Ben Peddell 2015-11-14 02:11:42 +10:00
parent 0bcf20d222
commit d315512035

View File

@ -706,6 +706,7 @@ doUpdateWarn(){
cd "$arkserverroot" cd "$arkserverroot"
local pid=`getServerPID` local pid=`getServerPID`
local sleeppid
if [ -n "$pid" ]; then if [ -n "$pid" ]; then
local warnmsg local warnmsg
local warnminutes=$(( arkwarnminutes )) local warnminutes=$(( arkwarnminutes ))
@ -721,13 +722,26 @@ doUpdateWarn(){
return 1 return 1
fi fi
if (( arkwarnminutes > warninterval )); then if (( arkwarnminutes > warninterval )); then
sleep 1m &
sleeppid=$!
if [ -n "$msgWarnUpdateMinutes" ]; then if [ -n "$msgWarnUpdateMinutes" ]; then
warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")"
else else
warnmsg="$(printf "This ARK server will shutdown for an update in %d minutes" "$warnminutes")" warnmsg="$(printf "This ARK server will shutdown for an update in %d minutes" "$warnminutes")"
fi fi
doBroadcastWithEcho "$warnmsg" doBroadcastWithEcho "$warnmsg"
sleep $(( warnminutes - warninterval ))m for (( min = warnminutes - 1; min >= warninterval; min-- )); do
numplayers=$(numPlayersConnected)
if (( numplayers + 0 == 0 )); then
echo "Nobody is connected. Updating immediately"
return 0
fi
wait $sleeppid
if (( $min > $warninterval )); then
sleep 1m &
sleeppid=$!
fi
done
warnminutes=$warninterval warnminutes=$warninterval
fi fi
done done
@ -735,6 +749,8 @@ doUpdateWarn(){
local warnseconds=90 local warnseconds=90
warnintervals=( 60 45 30 20 15 10 5 0 ) warnintervals=( 60 45 30 20 15 10 5 0 )
for warninterval in "${warnintervals[@]}"; do for warninterval in "${warnintervals[@]}"; do
sleep $(( warnseconds - warninterval ))s &
sleeppid=$!
if [ "`getServerPID`" != "$pid" ]; then if [ "`getServerPID`" != "$pid" ]; then
echo "Server has stopped. Aborting update" echo "Server has stopped. Aborting update"
return 1 return 1
@ -745,7 +761,14 @@ doUpdateWarn(){
warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")"
fi fi
doBroadcastWithEcho "$warnmsg" doBroadcastWithEcho "$warnmsg"
sleep $(( warnseconds - warninterval ))s if (( warnseconds >= 20 )); then
numplayers=$(numPlayersConnected)
if (( numplayers + 0 == 0 )); then
echo "Nobody is connected. Updating immediately"
return 0
fi
fi
wait $sleeppid
warnseconds=$warninterval warnseconds=$warninterval
done done
fi fi