コード例 #1
0
ファイル: g_main.c プロジェクト: darkshade9/aq2w
/*
 * G_CheckVote
 */
static void G_CheckVote(void) {
	int i, count = 0;

	if (!g_voting->value)
		return;

	if (g_level.vote_time == 0)
		return;

	if (g_level.time - g_level.vote_time > MAX_VOTE_TIME) {
		gi.BroadcastPrint(PRINT_HIGH, "Vote \"%s\" expired\n", g_level.vote_cmd);
		G_ResetVote();
		return;
	}

	for (i = 0; i < sv_max_clients->integer; i++) {
		if (!g_game.edicts[i + 1].in_use)
			continue;
		count++;
	}

	if (g_level.votes[VOTE_YES] >= count * VOTE_MAJORITY) { // vote passed

		gi.BroadcastPrint(PRINT_HIGH, "Vote \"%s\" passed\n", g_level.vote_cmd);

		if (!strncmp(g_level.vote_cmd, "map ", 4)) { // special case for map
			G_BeginIntermission(g_level.vote_cmd + 4);
		} else if (!strcmp(g_level.vote_cmd, "restart")) { // and restart
			G_RestartGame(false);
		} else if (!strncmp(g_level.vote_cmd, "mute ", 5)) { // and mute
			G_MuteClient(g_level.vote_cmd + 5, true);
		} else if (!strncmp(g_level.vote_cmd, "unmute ", 7)) {
			G_MuteClient(g_level.vote_cmd + 7, false);
		} else { // general case, just execute the command
			gi.AddCommandString(g_level.vote_cmd);
		}
		G_ResetVote();
	} else if (g_level.votes[VOTE_NO] >= count * VOTE_MAJORITY) { // vote failed
		gi.BroadcastPrint(PRINT_HIGH, "Vote \"%s\" failed\n", g_level.vote_cmd);
		G_ResetVote();
	}
}
コード例 #2
0
ファイル: g_svcmds.c プロジェクト: belstgut/etlegacy
qboolean ConsoleCommand(void)
{
	char cmd[MAX_TOKEN_CHARS];

	trap_Argv(0, cmd, sizeof(cmd));

#ifdef FEATURE_LUA
	if (!Q_stricmp(cmd, "lua_status"))
	{
		G_LuaStatus(NULL);
		return qtrue;
	}
	if (Q_stricmp(cmd, "lua_api") == 0)
	{
		G_LuaStackDump();
		return qtrue;
	}
	// *LUA* API callbacks
	if (G_LuaHook_ConsoleCommand(cmd))
	{
		return qtrue;
	}
#endif
	if (Q_stricmp(cmd, "entitylist") == 0)
	{
		Svcmd_EntityList_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "csinfo") == 0)
	{
		Svcmd_CSInfo_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "forceteam") == 0)
	{
		Svcmd_ForceTeam_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "game_memory") == 0)
	{
		Svcmd_GameMem_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "addip") == 0)
	{
		Svcmd_AddIP_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "removeip") == 0)
	{
		Svcmd_RemoveIP_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "listip") == 0)
	{
		trap_SendConsoleCommand(EXEC_INSERT, "g_banIPs\n");
		return qtrue;
	}
	if (Q_stricmp(cmd, "listmaxlivesip") == 0)
	{
		PrintMaxLivesGUID();
		return qtrue;
	}
	if (Q_stricmp(cmd, "start_match") == 0)
	{
		Svcmd_StartMatch_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "reset_match") == 0)
	{
		Svcmd_ResetMatch_f(qtrue, qtrue);
		return qtrue;
	}
	if (Q_stricmp(cmd, "swap_teams") == 0)
	{
		Svcmd_SwapTeams_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "shuffle_teams") == 0)
	{
		Svcmd_ShuffleTeams_f(qtrue);
		return qtrue;
	}
	if (Q_stricmp(cmd, "shuffle_teams_norestart") == 0)
	{
		Svcmd_ShuffleTeams_f(qfalse);
		return qtrue;
	}
	if (Q_stricmp(cmd, "makeReferee") == 0)
	{
		G_MakeReferee();
		return qtrue;
	}
	if (Q_stricmp(cmd, "removeReferee") == 0)
	{
		G_RemoveReferee();
		return qtrue;
	}
	if (Q_stricmp(cmd, "mute") == 0)
	{
		G_MuteClient();
		return qtrue;
	}
	if (Q_stricmp(cmd, "unmute") == 0)
	{
		G_UnMuteClient();
		return qtrue;
	}
	if (Q_stricmp(cmd, "ban") == 0)
	{
		G_PlayerBan();
		return qtrue;
	}
	if (Q_stricmp(cmd, "campaign") == 0)
	{
		Svcmd_Campaign_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "listcampaigns") == 0)
	{
		Svcmd_ListCampaigns_f();
		return qtrue;
	}
	if (Q_stricmp(cmd, "revive") == 0)
	{
		trap_Argv(1, cmd, sizeof(cmd));
		Svcmd_RevivePlayer(cmd);
		return qtrue;
	}
	// moved from engine
	if (!Q_stricmp(cmd, "kick"))
	{
		Svcmd_Kick_f();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "clientkick"))
	{
		Svcmd_KickNum_f();
		return qtrue;
	}
#ifdef FEATURE_OMNIBOT
	if (!Q_stricmp(cmd, "bot"))
	{
		Bot_Interface_ConsoleCommand();
		return qtrue;
	}
#endif
	if (!Q_stricmp(cmd, "cp"))
	{
		trap_SendServerCommand(-1, va("cp \"%s\"", Q_AddCR(ConcatArgs(1))));
		return qtrue;
	}
	if (!Q_stricmp(cmd, "reloadConfig"))
	{
		trap_SetConfigstring(CS_CONFIGNAME, "");
		memset(&level.config, 0, sizeof(config_t));
		G_configSet(g_customConfig.string);

		return qtrue;
	}
	if (!Q_stricmp(cmd, "loadConfig"))
	{
		CC_loadconfig();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "sv_cvarempty"))
	{
		memset(level.svCvars, 0, sizeof(level.svCvars));
		level.svCvarsCount = 0;
		G_UpdateSvCvars();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "sv_cvar"))
	{
		CC_svcvar();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "playsound") || !Q_stricmp(cmd, "playsound_env"))
	{
		G_PlaySound_Cmd();
		return qtrue;
	}
	//if (g_cheats.integer)
	//{
	if (!Q_stricmp(cmd, "gib"))
	{
		Svcmd_Gib();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "die"))
	{
		Svcmd_Die();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "freeze"))
	{
		Svcmd_Freeze();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "unfreeze"))
	{
		Svcmd_Unfreeze();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "burn"))
	{
		Svcmd_Burn();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "pip"))
	{
		Svcmd_Pip();
		return qtrue;
	}
	if (!Q_stricmp(cmd, "throw"))
	{
		Svcmd_Fling(1);
		return qtrue;
	}
	//}

	if (g_dedicated.integer)
	{
		// FIXME
		// this 'say' condition is never reached?!
		if (!Q_stricmp(cmd, "say"))
		{
			trap_SendServerCommand(-1, va("cpm \"server: %s\n\"", Q_AddCR(ConcatArgs(1))));
			return qtrue;
		}
		// added for rcon/Lua chat
		if (!Q_stricmp(cmd, "chat"))
		{
			trap_SendServerCommand(-1, va("chat \"console: %s\"", Q_AddCR(ConcatArgs(1))));
			return qtrue;
		}

		// console also gets ref commands
		if (!level.fLocalHost && Q_stricmp(cmd, "ref") == 0)
		{
			//G_refCommandCheck expects the next argument (warn, pause, lock,..)
			trap_Argv(1, cmd, sizeof(cmd));
			if (!G_refCommandCheck(NULL, cmd))
			{
				G_refHelp_cmd(NULL);
			}
			return qtrue;
		}

		// everything else will also be printed as a say command
		//trap_SendServerCommand( -1, va("cpm \"server: %s\n\"", ConcatArgs(0) ) );

		// prints to the console instead now
		return qfalse;
	}

	return qfalse;
}