From: Mario Date: Tue, 14 Jan 2020 13:09:26 +0000 (+0000) Subject: Merge branch 'terencehill/spectate_player' into 'master' X-Git-Tag: xonotic-v0.8.5~851^2~45 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=93afc08b09294e6dea4d0c98ce5226fdee9d1c92;hp=65300efb8c410cbbec3fbdd13329b9777d3af8a7 Merge branch 'terencehill/spectate_player' into 'master' Make so that 'spectate playerX' does nothing if it fails to spectate playerX Closes #2328 See merge request xonotic/xonotic-data.pk3dir!726 --- diff --git a/qcsrc/client/hud/panel/quickmenu.qc b/qcsrc/client/hud/panel/quickmenu.qc index 3e61f9b5a..c58fb2a67 100644 --- a/qcsrc/client/hud/panel/quickmenu.qc +++ b/qcsrc/client/hud/panel/quickmenu.qc @@ -854,6 +854,11 @@ void QuickMenu_Default(string target_submenu) QUICKMENU_ENTRY(CTX(_("QMCMD^Shuffle teams")), "vcall shuffleteams") QUICKMENU_SMENU(CTX(_("QMCMD^Call a vote")), "Call a vote") + if(spectatee_status != 0) + { + QUICKMENU_SMENU_PL(CTX(_("QMCMD^Spectate a player")), "Spectate a player", "spectate \"%s^7\"", 0, 1) + } + if(target_submenu != "" && !target_submenu_found) { LOG_INFOF("Couldn't find submenu \"%s\"", target_submenu); diff --git a/qcsrc/server/command/cmd.qc b/qcsrc/server/command/cmd.qc index 6928957d6..ad9cab8e7 100644 --- a/qcsrc/server/command/cmd.qc +++ b/qcsrc/server/command/cmd.qc @@ -635,15 +635,22 @@ void ClientCommand_spectate(entity caller, int request) { if (!intermission_running && IS_CLIENT(caller)) { - if((IS_SPEC(caller) || IS_OBSERVER(caller)) && argv(1) != "") + if(argv(1) != "") { - entity client = GetFilteredEntity(argv(1)); - int spec_accepted = VerifyClientEntity(client, false, false); - if(spec_accepted > 0 && IS_PLAYER(client)) + if(IS_SPEC(caller) || IS_OBSERVER(caller)) { - if(Spectate(caller, client)) - return; // fall back to regular handling + entity client = GetFilteredEntity(argv(1)); + int spec_accepted = VerifyClientEntity(client, false, false); + if(spec_accepted > 0 && IS_PLAYER(client)) + { + Spectate(caller, client); + } + else + sprint(caller, "can't spectate ", argv(1), "^7\n"); } + else + sprint(caller, "cmd spectate client only works when you are spectator/observer\n"); + return; } int mutator_returnvalue = MUTATOR_CALLHOOK(ClientCommand_Spectate, caller); @@ -660,7 +667,7 @@ void ClientCommand_spectate(entity caller, int request) default: case CMD_REQUEST_USAGE: { - sprint(caller, "\nUsage:^3 cmd spectate \n"); + sprint(caller, "\nUsage:^3 cmd spectate [client]\n"); sprint(caller, " Where 'client' can be the player to spectate.\n"); return; }