From 74612442b6b7d5fed02ad8b855d458c5bd229b68 Mon Sep 17 00:00:00 2001 From: Marcus Whybrow Date: Wed, 30 May 2012 23:07:17 +0100 Subject: [PATCH] Added server "gamemode" command. Closes #3. --- msm | 41 +++++++++++++++++++++++++++++++++++++++++ msm.conf | 9 +++++++++ 2 files changed, 50 insertions(+) diff --git a/msm b/msm index 4cdec59..2c52752 100755 --- a/msm +++ b/msm @@ -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 diff --git a/msm.conf b/msm.conf index 8ad52d8..20172e0 100644 --- a/msm.conf +++ b/msm.conf @@ -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)"