123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579 |
- /*
- ===========================================================================
- Copyright (C) 1999-2005 Id Software, Inc.
- This file is part of Quake III Arena source code.
- Quake III Arena source code is free software; you can redistribute it
- and/or modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
- Quake III Arena source code is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Foobar; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- ===========================================================================
- */
- //
- // cg_consolecmds.c -- text commands typed in at the local console, or
- // executed by a key binding
- #include "cg_local.h"
- #include "../ui/ui_shared.h"
- #ifdef MISSIONPACK
- extern menuDef_t *menuScoreboard;
- #endif
- void CG_TargetCommand_f( void ) {
- int targetNum;
- char test[4];
- targetNum = CG_CrosshairPlayer();
- if (!targetNum ) {
- return;
- }
- trap_Argv( 1, test, 4 );
- trap_SendConsoleCommand( va( "gc %i %i", targetNum, atoi( test ) ) );
- }
- /*
- =================
- CG_SizeUp_f
- Keybinding command
- =================
- */
- static void CG_SizeUp_f (void) {
- trap_Cvar_Set("cg_viewsize", va("%i",(int)(cg_viewsize.integer+10)));
- }
- /*
- =================
- CG_SizeDown_f
- Keybinding command
- =================
- */
- static void CG_SizeDown_f (void) {
- trap_Cvar_Set("cg_viewsize", va("%i",(int)(cg_viewsize.integer-10)));
- }
- /*
- =============
- CG_Viewpos_f
- Debugging command to print the current position
- =============
- */
- static void CG_Viewpos_f (void) {
- CG_Printf ("(%i %i %i) : %i\n", (int)cg.refdef.vieworg[0],
- (int)cg.refdef.vieworg[1], (int)cg.refdef.vieworg[2],
- (int)cg.refdefViewAngles[YAW]);
- }
- static void CG_ScoresDown_f( void ) {
- #ifdef MISSIONPACK
- CG_BuildSpectatorString();
- #endif
- if ( cg.scoresRequestTime + 2000 < cg.time ) {
- // the scores are more than two seconds out of data,
- // so request new ones
- cg.scoresRequestTime = cg.time;
- trap_SendClientCommand( "score" );
- // leave the current scores up if they were already
- // displayed, but if this is the first hit, clear them out
- if ( !cg.showScores ) {
- cg.showScores = qtrue;
- cg.numScores = 0;
- }
- } else {
- // show the cached contents even if they just pressed if it
- // is within two seconds
- cg.showScores = qtrue;
- }
- }
- static void CG_ScoresUp_f( void ) {
- if ( cg.showScores ) {
- cg.showScores = qfalse;
- cg.scoreFadeTime = cg.time;
- }
- }
- #ifdef MISSIONPACK
- extern menuDef_t *menuScoreboard;
- void Menu_Reset(); // FIXME: add to right include file
- static void CG_LoadHud_f( void) {
- char buff[1024];
- const char *hudSet;
- memset(buff, 0, sizeof(buff));
- String_Init();
- Menu_Reset();
-
- trap_Cvar_VariableStringBuffer("cg_hudFiles", buff, sizeof(buff));
- hudSet = buff;
- if (hudSet[0] == '\0') {
- hudSet = "ui/hud.txt";
- }
- CG_LoadMenus(hudSet);
- menuScoreboard = NULL;
- }
- static void CG_scrollScoresDown_f( void) {
- if (menuScoreboard && cg.scoreBoardShowing) {
- Menu_ScrollFeeder(menuScoreboard, FEEDER_SCOREBOARD, qtrue);
- Menu_ScrollFeeder(menuScoreboard, FEEDER_REDTEAM_LIST, qtrue);
- Menu_ScrollFeeder(menuScoreboard, FEEDER_BLUETEAM_LIST, qtrue);
- }
- }
- static void CG_scrollScoresUp_f( void) {
- if (menuScoreboard && cg.scoreBoardShowing) {
- Menu_ScrollFeeder(menuScoreboard, FEEDER_SCOREBOARD, qfalse);
- Menu_ScrollFeeder(menuScoreboard, FEEDER_REDTEAM_LIST, qfalse);
- Menu_ScrollFeeder(menuScoreboard, FEEDER_BLUETEAM_LIST, qfalse);
- }
- }
- static void CG_spWin_f( void) {
- trap_Cvar_Set("cg_cameraOrbit", "2");
- trap_Cvar_Set("cg_cameraOrbitDelay", "35");
- trap_Cvar_Set("cg_thirdPerson", "1");
- trap_Cvar_Set("cg_thirdPersonAngle", "0");
- trap_Cvar_Set("cg_thirdPersonRange", "100");
- CG_AddBufferedSound(cgs.media.winnerSound);
- //trap_S_StartLocalSound(cgs.media.winnerSound, CHAN_ANNOUNCER);
- CG_CenterPrint("YOU WIN!", SCREEN_HEIGHT * .30, 0);
- }
- static void CG_spLose_f( void) {
- trap_Cvar_Set("cg_cameraOrbit", "2");
- trap_Cvar_Set("cg_cameraOrbitDelay", "35");
- trap_Cvar_Set("cg_thirdPerson", "1");
- trap_Cvar_Set("cg_thirdPersonAngle", "0");
- trap_Cvar_Set("cg_thirdPersonRange", "100");
- CG_AddBufferedSound(cgs.media.loserSound);
- //trap_S_StartLocalSound(cgs.media.loserSound, CHAN_ANNOUNCER);
- CG_CenterPrint("YOU LOSE...", SCREEN_HEIGHT * .30, 0);
- }
- #endif
- static void CG_TellTarget_f( void ) {
- int clientNum;
- char command[128];
- char message[128];
- clientNum = CG_CrosshairPlayer();
- if ( clientNum == -1 ) {
- return;
- }
- trap_Args( message, 128 );
- Com_sprintf( command, 128, "tell %i %s", clientNum, message );
- trap_SendClientCommand( command );
- }
- static void CG_TellAttacker_f( void ) {
- int clientNum;
- char command[128];
- char message[128];
- clientNum = CG_LastAttacker();
- if ( clientNum == -1 ) {
- return;
- }
- trap_Args( message, 128 );
- Com_sprintf( command, 128, "tell %i %s", clientNum, message );
- trap_SendClientCommand( command );
- }
- static void CG_VoiceTellTarget_f( void ) {
- int clientNum;
- char command[128];
- char message[128];
- clientNum = CG_CrosshairPlayer();
- if ( clientNum == -1 ) {
- return;
- }
- trap_Args( message, 128 );
- Com_sprintf( command, 128, "vtell %i %s", clientNum, message );
- trap_SendClientCommand( command );
- }
- static void CG_VoiceTellAttacker_f( void ) {
- int clientNum;
- char command[128];
- char message[128];
- clientNum = CG_LastAttacker();
- if ( clientNum == -1 ) {
- return;
- }
- trap_Args( message, 128 );
- Com_sprintf( command, 128, "vtell %i %s", clientNum, message );
- trap_SendClientCommand( command );
- }
- #ifdef MISSIONPACK
- static void CG_NextTeamMember_f( void ) {
- CG_SelectNextPlayer();
- }
- static void CG_PrevTeamMember_f( void ) {
- CG_SelectPrevPlayer();
- }
- // ASS U ME's enumeration order as far as task specific orders, OFFENSE is zero, CAMP is last
- //
- static void CG_NextOrder_f( void ) {
- clientInfo_t *ci = cgs.clientinfo + cg.snap->ps.clientNum;
- if (ci) {
- if (!ci->teamLeader && sortedTeamPlayers[cg_currentSelectedPlayer.integer] != cg.snap->ps.clientNum) {
- return;
- }
- }
- if (cgs.currentOrder < TEAMTASK_CAMP) {
- cgs.currentOrder++;
- if (cgs.currentOrder == TEAMTASK_RETRIEVE) {
- if (!CG_OtherTeamHasFlag()) {
- cgs.currentOrder++;
- }
- }
- if (cgs.currentOrder == TEAMTASK_ESCORT) {
- if (!CG_YourTeamHasFlag()) {
- cgs.currentOrder++;
- }
- }
- } else {
- cgs.currentOrder = TEAMTASK_OFFENSE;
- }
- cgs.orderPending = qtrue;
- cgs.orderTime = cg.time + 3000;
- }
- static void CG_ConfirmOrder_f (void ) {
- trap_SendConsoleCommand(va("cmd vtell %d %s\n", cgs.acceptLeader, VOICECHAT_YES));
- trap_SendConsoleCommand("+button5; wait; -button5");
- if (cg.time < cgs.acceptOrderTime) {
- trap_SendClientCommand(va("teamtask %d\n", cgs.acceptTask));
- cgs.acceptOrderTime = 0;
- }
- }
- static void CG_DenyOrder_f (void ) {
- trap_SendConsoleCommand(va("cmd vtell %d %s\n", cgs.acceptLeader, VOICECHAT_NO));
- trap_SendConsoleCommand("+button6; wait; -button6");
- if (cg.time < cgs.acceptOrderTime) {
- cgs.acceptOrderTime = 0;
- }
- }
- static void CG_TaskOffense_f (void ) {
- if (cgs.gametype == GT_CTF || cgs.gametype == GT_1FCTF) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONGETFLAG));
- } else {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONOFFENSE));
- }
- trap_SendClientCommand(va("teamtask %d\n", TEAMTASK_OFFENSE));
- }
- static void CG_TaskDefense_f (void ) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONDEFENSE));
- trap_SendClientCommand(va("teamtask %d\n", TEAMTASK_DEFENSE));
- }
- static void CG_TaskPatrol_f (void ) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONPATROL));
- trap_SendClientCommand(va("teamtask %d\n", TEAMTASK_PATROL));
- }
- static void CG_TaskCamp_f (void ) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONCAMPING));
- trap_SendClientCommand(va("teamtask %d\n", TEAMTASK_CAMP));
- }
- static void CG_TaskFollow_f (void ) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONFOLLOW));
- trap_SendClientCommand(va("teamtask %d\n", TEAMTASK_FOLLOW));
- }
- static void CG_TaskRetrieve_f (void ) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONRETURNFLAG));
- trap_SendClientCommand(va("teamtask %d\n", TEAMTASK_RETRIEVE));
- }
- static void CG_TaskEscort_f (void ) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_ONFOLLOWCARRIER));
- trap_SendClientCommand(va("teamtask %d\n", TEAMTASK_ESCORT));
- }
- static void CG_TaskOwnFlag_f (void ) {
- trap_SendConsoleCommand(va("cmd vsay_team %s\n", VOICECHAT_IHAVEFLAG));
- }
- static void CG_TauntKillInsult_f (void ) {
- trap_SendConsoleCommand("cmd vsay kill_insult\n");
- }
- static void CG_TauntPraise_f (void ) {
- trap_SendConsoleCommand("cmd vsay praise\n");
- }
- static void CG_TauntTaunt_f (void ) {
- trap_SendConsoleCommand("cmd vtaunt\n");
- }
- static void CG_TauntDeathInsult_f (void ) {
- trap_SendConsoleCommand("cmd vsay death_insult\n");
- }
- static void CG_TauntGauntlet_f (void ) {
- trap_SendConsoleCommand("cmd vsay kill_guantlet\n");
- }
- static void CG_TaskSuicide_f (void ) {
- int clientNum;
- char command[128];
- clientNum = CG_CrosshairPlayer();
- if ( clientNum == -1 ) {
- return;
- }
- Com_sprintf( command, 128, "tell %i suicide", clientNum );
- trap_SendClientCommand( command );
- }
- /*
- ==================
- CG_TeamMenu_f
- ==================
- */
- /*
- static void CG_TeamMenu_f( void ) {
- if (trap_Key_GetCatcher() & KEYCATCH_CGAME) {
- CG_EventHandling(CGAME_EVENT_NONE);
- trap_Key_SetCatcher(0);
- } else {
- CG_EventHandling(CGAME_EVENT_TEAMMENU);
- //trap_Key_SetCatcher(KEYCATCH_CGAME);
- }
- }
- */
- /*
- ==================
- CG_EditHud_f
- ==================
- */
- /*
- static void CG_EditHud_f( void ) {
- //cls.keyCatchers ^= KEYCATCH_CGAME;
- //VM_Call (cgvm, CG_EVENT_HANDLING, (cls.keyCatchers & KEYCATCH_CGAME) ? CGAME_EVENT_EDITHUD : CGAME_EVENT_NONE);
- }
- */
- #endif
- /*
- ==================
- CG_StartOrbit_f
- ==================
- */
- static void CG_StartOrbit_f( void ) {
- char var[MAX_TOKEN_CHARS];
- trap_Cvar_VariableStringBuffer( "developer", var, sizeof( var ) );
- if ( !atoi(var) ) {
- return;
- }
- if (cg_cameraOrbit.value != 0) {
- trap_Cvar_Set ("cg_cameraOrbit", "0");
- trap_Cvar_Set("cg_thirdPerson", "0");
- } else {
- trap_Cvar_Set("cg_cameraOrbit", "5");
- trap_Cvar_Set("cg_thirdPerson", "1");
- trap_Cvar_Set("cg_thirdPersonAngle", "0");
- trap_Cvar_Set("cg_thirdPersonRange", "100");
- }
- }
- /*
- static void CG_Camera_f( void ) {
- char name[1024];
- trap_Argv( 1, name, sizeof(name));
- if (trap_loadCamera(name)) {
- cg.cameraMode = qtrue;
- trap_startCamera(cg.time);
- } else {
- CG_Printf ("Unable to load camera %s\n",name);
- }
- }
- */
- typedef struct {
- char *cmd;
- void (*function)(void);
- } consoleCommand_t;
- static consoleCommand_t commands[] = {
- { "testgun", CG_TestGun_f },
- { "testmodel", CG_TestModel_f },
- { "nextframe", CG_TestModelNextFrame_f },
- { "prevframe", CG_TestModelPrevFrame_f },
- { "nextskin", CG_TestModelNextSkin_f },
- { "prevskin", CG_TestModelPrevSkin_f },
- { "viewpos", CG_Viewpos_f },
- { "+scores", CG_ScoresDown_f },
- { "-scores", CG_ScoresUp_f },
- { "+zoom", CG_ZoomDown_f },
- { "-zoom", CG_ZoomUp_f },
- { "sizeup", CG_SizeUp_f },
- { "sizedown", CG_SizeDown_f },
- { "weapnext", CG_NextWeapon_f },
- { "weapprev", CG_PrevWeapon_f },
- { "weapon", CG_Weapon_f },
- { "tell_target", CG_TellTarget_f },
- { "tell_attacker", CG_TellAttacker_f },
- { "vtell_target", CG_VoiceTellTarget_f },
- { "vtell_attacker", CG_VoiceTellAttacker_f },
- { "tcmd", CG_TargetCommand_f },
- #ifdef MISSIONPACK
- { "loadhud", CG_LoadHud_f },
- { "nextTeamMember", CG_NextTeamMember_f },
- { "prevTeamMember", CG_PrevTeamMember_f },
- { "nextOrder", CG_NextOrder_f },
- { "confirmOrder", CG_ConfirmOrder_f },
- { "denyOrder", CG_DenyOrder_f },
- { "taskOffense", CG_TaskOffense_f },
- { "taskDefense", CG_TaskDefense_f },
- { "taskPatrol", CG_TaskPatrol_f },
- { "taskCamp", CG_TaskCamp_f },
- { "taskFollow", CG_TaskFollow_f },
- { "taskRetrieve", CG_TaskRetrieve_f },
- { "taskEscort", CG_TaskEscort_f },
- { "taskSuicide", CG_TaskSuicide_f },
- { "taskOwnFlag", CG_TaskOwnFlag_f },
- { "tauntKillInsult", CG_TauntKillInsult_f },
- { "tauntPraise", CG_TauntPraise_f },
- { "tauntTaunt", CG_TauntTaunt_f },
- { "tauntDeathInsult", CG_TauntDeathInsult_f },
- { "tauntGauntlet", CG_TauntGauntlet_f },
- { "spWin", CG_spWin_f },
- { "spLose", CG_spLose_f },
- { "scoresDown", CG_scrollScoresDown_f },
- { "scoresUp", CG_scrollScoresUp_f },
- #endif
- { "startOrbit", CG_StartOrbit_f },
- //{ "camera", CG_Camera_f },
- { "loaddeferred", CG_LoadDeferredPlayers }
- };
- /*
- =================
- CG_ConsoleCommand
- The string has been tokenized and can be retrieved with
- Cmd_Argc() / Cmd_Argv()
- =================
- */
- qboolean CG_ConsoleCommand( void ) {
- const char *cmd;
- int i;
- cmd = CG_Argv(0);
- for ( i = 0 ; i < sizeof( commands ) / sizeof( commands[0] ) ; i++ ) {
- if ( !Q_stricmp( cmd, commands[i].cmd ) ) {
- commands[i].function();
- return qtrue;
- }
- }
- return qfalse;
- }
- /*
- =================
- CG_InitConsoleCommands
- Let the client system know about all of our commands
- so it can perform tab completion
- =================
- */
- void CG_InitConsoleCommands( void ) {
- int i;
- for ( i = 0 ; i < sizeof( commands ) / sizeof( commands[0] ) ; i++ ) {
- trap_AddCommand( commands[i].cmd );
- }
- //
- // the game server will interpret these commands, which will be automatically
- // forwarded to the server after they are not recognized locally
- //
- trap_AddCommand ("kill");
- trap_AddCommand ("say");
- trap_AddCommand ("say_team");
- trap_AddCommand ("tell");
- trap_AddCommand ("vsay");
- trap_AddCommand ("vsay_team");
- trap_AddCommand ("vtell");
- trap_AddCommand ("vtaunt");
- trap_AddCommand ("vosay");
- trap_AddCommand ("vosay_team");
- trap_AddCommand ("votell");
- trap_AddCommand ("give");
- trap_AddCommand ("god");
- trap_AddCommand ("notarget");
- trap_AddCommand ("noclip");
- trap_AddCommand ("team");
- trap_AddCommand ("follow");
- trap_AddCommand ("levelshot");
- trap_AddCommand ("addbot");
- trap_AddCommand ("setviewpos");
- trap_AddCommand ("callvote");
- trap_AddCommand ("vote");
- trap_AddCommand ("callteamvote");
- trap_AddCommand ("teamvote");
- trap_AddCommand ("stats");
- trap_AddCommand ("teamtask");
- trap_AddCommand ("loaddefered"); // spelled wrong, but not changing for demo
- }
|