X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcommand%2Fvote.qc;h=9f8ef342f2e27d44a6eae906a0b0ff0d87ea5f4a;hb=33f0f468c592b97e20d70072016d756fcfd35f14;hp=1869a15a898dc51a15ccbe25f8abe9d0714fee64;hpb=73295fdedbff00283c27cd8d96c1074606374e0f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index 1869a15a8..9f8ef342f 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -1,29 +1,29 @@ #include "vote.qh" -#include -#include - #include -#include "vote.qh" - -#include "common.qh" - -#include "../g_damage.qh" -#include "../g_world.qh" -#include "../teamplay.qh" -#include "../race.qh" -#include "../round_handler.qh" -#include "../scores.qh" - -#include -#include - #include -#include +#include +#include #include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // ============================================= // Server side voting code, reworked by Samual @@ -116,7 +116,7 @@ void Nagger_ReadyCounted() // If the vote_caller is still here, return their name, otherwise vote_caller_name string OriginalCallerName() { - if (IS_REAL_CLIENT(vote_caller)) return playername(vote_caller, false); + if (IS_REAL_CLIENT(vote_caller)) return playername(vote_caller.netname, vote_caller.team, false); return vote_caller_name; } @@ -350,6 +350,20 @@ void reset_map(bool dorespawn) shuffleteams(); shuffleteams_on_reset_map = false; } + + FOREACH_CLIENT(IS_PLAYER(it), + { + if (STAT(FROZEN, it)) + Unfreeze(it, false); + player_powerups_remove_all(it); + entity store = PS(it); + if (store) + { + Inventory_clear(store.inventory); + Inventory_update(store); + } + }); + MUTATOR_CALLHOOK(reset_map_global); FOREACH_ENTITY_FLOAT_ORDERED(pure_data, false, @@ -370,8 +384,6 @@ void reset_map(bool dorespawn) if (it.reset2) it.reset2(it); }); - FOREACH_CLIENT(IS_PLAYER(it) && STAT(FROZEN, it), { Unfreeze(it, false); }); - // Moving the player reset code here since the player-reset depends // on spawnpoint entities which have to be reset first --blub if (dorespawn) @@ -388,7 +400,6 @@ void reset_map(bool dorespawn) restart_mapalreadyrestarted to 1 after the countdown ended or when sv_ready_restart_after_countdown is not used and countdown is still running */ - // NEW: changed behaviour so that it prevents that previous spectators/observers suddenly spawn as players // PlayerScore_Clear(it); CS(it).killcount = 0; // stop the player from moving so that he stands still once he gets respawned @@ -476,7 +487,7 @@ void ReadyRestart_force() void ReadyRestart() { - if (MUTATOR_CALLHOOK(ReadyRestart_Deny) || game_stopped || race_completing) localcmd("restart\n"); + if (MUTATOR_CALLHOOK(ReadyRestart_Deny) || intermission_running || race_completing) localcmd("restart\n"); else localcmd("\nsv_hook_readyrestart\n"); // Reset ALL scores, but only do that at the beginning of the countdown if sv_ready_restart_after_countdown is off! @@ -807,6 +818,11 @@ void VoteCommand_abstain(int request, entity caller) // CLIENT ONLY } } +void print_available_commands_to(entity caller) +{ + print_to(caller, strcat("You can call a vote for or execute these commands: ^3", autocvar_sv_vote_commands, "^7 and maybe further ^3arguments^7")); +} + void VoteCommand_call(int request, entity caller, int argc, string vote_command) // BOTH { switch (request) @@ -818,7 +834,10 @@ void VoteCommand_call(int request, entity caller, int argc, string vote_command) vote_command = VoteCommand_extractcommand(vote_command, 2, argc); - if (!autocvar_sv_vote_call && caller) { print_to(caller, "^1Vote calling is not allowed."); } + if (!autocvar_sv_vote_call && caller) + { + print_to(caller, "^1Vote calling is not allowed."); + } else if (!autocvar_sv_vote_gamestart && time < game_starttime) { print_to(caller, "^1Vote calling is not allowed before the match has started."); @@ -835,7 +854,7 @@ void VoteCommand_call(int request, entity caller, int argc, string vote_command) { print_to(caller, "^1Only connected clients can vote."); } - else if (timeout_status) + else if (timeout_status && vote_command != "timein") { print_to(caller, "^1You can not call a vote while a timeout is active."); } @@ -845,12 +864,17 @@ void VoteCommand_call(int request, entity caller, int argc, string vote_command) } else if (!VoteCommand_checknasty(vote_command)) { - print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); + print_to(caller, "^1Syntax error in command."); } else if ((parse_error = VoteCommand_parse(caller, vote_command, autocvar_sv_vote_commands, 2, argc)) <= 0) { if(parse_error == 0) - print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); + { + if (vote_called_command == "") + VoteCommand_call(CMD_REQUEST_USAGE, caller, argc, vote_command); + else + print_to(caller, "^1This command is not acceptable or not available."); + } } else // everything went okay, continue with calling the vote { @@ -886,10 +910,12 @@ void VoteCommand_call(int request, entity caller, int argc, string vote_command) default: case CMD_REQUEST_USAGE: { - print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote call command")); - print_to(caller, " Where 'command' is the command to request a vote upon."); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote call ")); + print_to(caller, " Where is the command to request a vote upon."); print_to(caller, strcat("Examples: ", GetCommandPrefix(caller), " vote call gotomap dance")); print_to(caller, strcat(" ", GetCommandPrefix(caller), " vote call endmatch")); + print_available_commands_to(caller); + print_to(caller, "Shortcuts: ^2vcall , vend, vmap, vkick, ..."); return; } } @@ -914,12 +940,17 @@ void VoteCommand_master(int request, entity caller, int argc, string vote_comman print_to(caller, "^1You do not have vote master privileges."); else if (!VoteCommand_checknasty(vote_command)) { - print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); + print_to(caller, "^1Syntax error in command."); } else if ((parse_error = VoteCommand_parse(caller, vote_command, strcat(autocvar_sv_vote_commands, " ", autocvar_sv_vote_master_commands), 3, argc)) <= 0) { if(parse_error == 0) - print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); + { + if (vote_called_command == "") + VoteCommand_master(CMD_REQUEST_USAGE, caller, argc, vote_command); + else + print_to(caller, "^1This command is not acceptable or not available."); + } } else // everything went okay, proceed with command { @@ -1002,9 +1033,9 @@ void VoteCommand_master(int request, entity caller, int argc, string vote_comman default: case CMD_REQUEST_USAGE: { - print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote master [action [command | password]]")); - print_to(caller, " If action is left blank, it calls a vote for you to become master."); - print_to(caller, " Otherwise the actions are either 'do' a command or 'login' as master."); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote master [ [ | ]]")); + print_to(caller, " If is left blank, it calls a vote for you to become master."); + print_to(caller, " Otherwise it can be either 'do' (to run ) or 'login' as master."); return; } } @@ -1176,11 +1207,11 @@ void VoteCommand_macro_help(entity caller, int argc) { if (Votecommand_check_assignment(caller, assignment)) { print_to(caller, strcat(" ^2", name, "^7: ", description)); } } VOTE_COMMANDS(0, caller, 0, ""); -#undef VOTE_COMMAND + #undef VOTE_COMMAND - print_to(caller, strcat("\nUsage:^3 ", command_origin, " vote COMMAND...^7, where possible commands are listed above.\n")); - print_to(caller, strcat("For help about a specific command, type ", command_origin, " vote help COMMAND")); - print_to(caller, strcat("\n^7You can call a vote for or execute these commands: ^3", autocvar_sv_vote_commands, "^7 and maybe further ^3arguments^7")); + print_to(caller, strcat("\nUsage:^3 ", command_origin, " vote ^7, where possible commands are listed above.\n")); + print_to(caller, strcat("For help about a specific command, type ", command_origin, " vote help ")); + print_available_commands_to(caller); } else // usage for individual command { @@ -1188,12 +1219,12 @@ void VoteCommand_macro_help(entity caller, int argc) { if (Votecommand_check_assignment(caller, assignment)) { if (name == strtolower(argv(2))) { function; return; } } } VOTE_COMMANDS(CMD_REQUEST_USAGE, caller, argc, ""); -#undef VOTE_COMMAND + #undef VOTE_COMMAND string cvarname = strcat("sv_vote_command_help_", argv(2)); if(cvar_type(cvarname) & CVAR_TYPEFLAG_EXISTS) wordwrap_sprint(caller, cvar_string(cvarname), 1000); - else + else if (argv(2) != "") print_to(caller, "No documentation exists for this vote"); } } @@ -1204,7 +1235,7 @@ float VoteCommand_macro_command(entity caller, int argc, string vote_command) { if (Votecommand_check_assignment(caller, assignment)) { if (name == strtolower(argv(1))) { function; return true; } } } VOTE_COMMANDS(CMD_REQUEST_COMMAND, caller, argc, vote_command); -#undef VOTE_COMMAND + #undef VOTE_COMMAND return false; }