Added server "gamemode" command. Closes #3.

This commit is contained in:
Marcus Whybrow 2012-05-30 23:07:17 +01:00
parent bad5238178
commit 74612442b6
2 changed files with 50 additions and 0 deletions

41
msm
View File

@ -1140,6 +1140,9 @@ init() {
server_confirm_time_add_fail[$i]="$DEFAULT_CONFIRM_TIME_ADD_FAIL"
server_confirm_toggledownfall[$i]="$DEFAULT_CONFIRM_TOGGLEDOWNFALL"
server_confirm_toggledownfall_fail[$i]="$DEFAULT_CONFIRM_TOGGLEDOWNFALL_FAIL"
server_confirm_gamemode[$i]="$DEFAULT_CONFIRM_GAMEMODE"
server_confirm_gamemode_fail_no_user[$i]="$DEFAULT_CONFIRM_GAMEMODE_FAIL_NO_USER"
server_confirm_gamemode_fail_no_change[$i]="$DEFAULT_CONFIRM_GAMEMODE_FAIL_NO_CHANGE"
server_complete_backup_follow_symlinks[$i]="$DEFAULT_COMPLETE_BACKUP_FOLLOW_SYMLINKS"
@ -1190,6 +1193,9 @@ init() {
CONFIRM_TIME_ADD_FAIL) server_confirm_time_add_fail[$i]="$value";;
CONFIRM_TOGGLEDOWNFALL) server_confirm_toggledownfall[$i]="$value";;
CONFIRM_TOGGLEDOWNFALL_FAIL) server_confirm_toggledownfall_fail[$i]="$value";;
CONFIRM_GAMEMODE) server_confirm_gamemode[$i]="$value";;
CONFIRM_GAMEMODE_FAIL_NO_USER) server_confirm_gamemode_fail_no_user[$i]="$value";;
CONFIRM_GAMEMODE_FAIL_NO_CHANGE) server_confirm_gamemode_fail_no_change[$i]="$value";;
COMPLETE_BACKUP_FOLLOW_SYMLINKS) server_complete_backup_follow_symlinks[$i]="$value";;
esac
done < "${server_conf[$i]}"
@ -1642,6 +1648,41 @@ main() {
esac
;;
gamemode|gm)
case "$3" in
survival|creative|0|1)
if [ -z "$4" ]; then
echo "Invalid command."
else
if server_is_running $id; then
case "$3" in
creative|1) local mode=1;;
survival|0) local mode=0;;
*) echoerr "Invalid mode"; exit 1;;
esac
local line=$(server_eval_and_get_line $id "gamemode $4 $mode" "${server_confirm_gamemode[$id]}" "${server_confirm_gamemode_fail_no_user[$id]}" "${server_confirm_gamemode_fail_no_change[$id]}")
local regex="${LOG_REGEX} ${server_confirm_gamemode[$id]}"
if [[ $line =~ $regex ]]; then
echo "Changed game mode of \"$4\" to \"$3\"."
fi
local regex="${LOG_REGEX} ${server_confirm_gamemode_fail_no_user[$id]}"
if [[ $line =~ $regex ]]; then
echo "The player \"$4\" was not found to be logged on."
fi
local regex="${LOG_REGEX} ${server_confirm_gamemode_fail_no_change[$id]}"
if [[ $line =~ $regex ]]; then
echo "The player \"$4\" was already in \"$3\" mode."
fi
else
echo "Server \"${server_name[$id]}\" is not running."
fi
fi
;;
*)
echo "Invalid command."
;;
esac
;;
kick)
if [ -z "$3" ]; then

View File

@ -188,3 +188,12 @@ DEFAULT_CONFIRM_TOGGLEDOWNFALL="CONSOLE: Toggling downfall on|off for world"
# The start of the message logged when the togglefownfall command is given a
# world name that does not exist
DEFAULT_CONFIRM_TOGGLEDOWNFALL_FAIL=".\[31m;1mNo world exists with the name"
# The message logged when an online user has their game mode changed
DEFAULT_CONFIRM_GAMEMODE="CONSOLE: Setting .+ to game mode (1|0)"
# The message logged when a player cannot be found when changing game mode
DEFAULT_CONFIRM_GAMEMODE_FAIL_NO_USER="Can't find user .+"
# The message logged when a player is already in the specified game mode
DEFAULT_CONFIRM_GAMEMODE_FAIL_NO_CHANGE=".+ already has game mode (1|0)"