5491 lines
186 KiB
C++
5491 lines
186 KiB
C++
|
/*
|
||
|
** Command & Conquer Renegade(tm)
|
||
|
** Copyright 2025 Electronic Arts Inc.
|
||
|
**
|
||
|
** This program 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 3 of the License, or
|
||
|
** (at your option) any later version.
|
||
|
**
|
||
|
** This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
/***********************************************************************************************
|
||
|
*** Confidential - Westwood Studios ***
|
||
|
***********************************************************************************************
|
||
|
* *
|
||
|
* Project Name : Commando *
|
||
|
* *
|
||
|
* $Archive:: /Commando/Code/Commando/consolefunction.cpp $*
|
||
|
* *
|
||
|
* $Author:: Steve_t $*
|
||
|
* *
|
||
|
* $Modtime:: 10/13/02 10:13p $*
|
||
|
* *
|
||
|
* $Revision:: 339 $*
|
||
|
* *
|
||
|
*---------------------------------------------------------------------------------------------*
|
||
|
* Functions: *
|
||
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
|
||
|
#include "consolefunction.h"
|
||
|
#include "console.h"
|
||
|
#include "textdisplay.h"
|
||
|
#include "combatgmode.h"
|
||
|
#include "combat.h"
|
||
|
#include "datasafe.h"
|
||
|
#include "pscene.h"
|
||
|
#include "playermanager.h"
|
||
|
#include "ccamera.h"
|
||
|
#include "debug.h"
|
||
|
#include "level.h"
|
||
|
#include "weaponmanager.h"
|
||
|
#include "cnetwork.h"
|
||
|
#include "ww3d.h"
|
||
|
#include "miscutil.h"
|
||
|
#include "smartgameobj.h"
|
||
|
#include "weapons.h"
|
||
|
#include "WWAudio.H"
|
||
|
#include "wwprofile.h"
|
||
|
//#include "gamesettings.h"
|
||
|
#include "waypoint.h"
|
||
|
#include "action.h"
|
||
|
#include "gameobjmanager.h"
|
||
|
#include "surfaceeffects.h"
|
||
|
#include "gamedata.h"
|
||
|
#include "damage.h"
|
||
|
#include "radar.h"
|
||
|
#include "assets.h"
|
||
|
#include "animobj.h"
|
||
|
#include "matpass.h"
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
#include <math.h>
|
||
|
#include "objlibrary.h"
|
||
|
#include "useroptions.h"
|
||
|
#include "devoptions.h"
|
||
|
#include "god.h"
|
||
|
#include "playertype.h"
|
||
|
#include "systemsettings.h"
|
||
|
#include "spawn.h"
|
||
|
#include "input.h"
|
||
|
#include "pathfind.h"
|
||
|
#include "waypath.h"
|
||
|
#include "definitionclassids.h"
|
||
|
#include "netinterface.h"
|
||
|
#include "bandwidth.h"
|
||
|
#include "statistics.h"
|
||
|
#include "physaabtreecull.h"
|
||
|
#include "gametype.h"
|
||
|
#include "part_emt.h"
|
||
|
#include "translatedb.h"
|
||
|
#include "string_ids.h"
|
||
|
#include "dx8renderer.h"
|
||
|
#include "backgroundmgr.h"
|
||
|
#include "dynamicphys.h"
|
||
|
#include "humanphys.h"
|
||
|
#include "vehiclephys.h"
|
||
|
#include "objectives.h"
|
||
|
#include "umbrasupport.h"
|
||
|
#include "vehicle.h"
|
||
|
#include "damageablestaticphys.h"
|
||
|
#include "persistfactory.h"
|
||
|
#include "wwphysids.h"
|
||
|
#include "hud.h"
|
||
|
#include "conversationmgr.h"
|
||
|
#include "basecontroller.h"
|
||
|
#include "building.h"
|
||
|
#include "vendor.h"
|
||
|
#include "texture.h"
|
||
|
#include "rddesc.h"
|
||
|
#include "combatchunkid.h"
|
||
|
#include "dialogtests.h"
|
||
|
#include "resource.h"
|
||
|
#include "dx8wrapper.h"
|
||
|
#include "sortingrenderer.h"
|
||
|
#include "weathermgr.h"
|
||
|
#include "mapmgr.h"
|
||
|
#include "path.h"
|
||
|
#include "sctextobj.h"
|
||
|
#include "consolecommandevent.h"
|
||
|
#include "hudinfo.h"
|
||
|
#include "physresourcemgr.h"
|
||
|
#include "cstextobj.h"
|
||
|
#include "suicideevent.h"
|
||
|
#include "godmodeevent.h"
|
||
|
#include "serverfps.h"
|
||
|
#include "warpevent.h"
|
||
|
//#include "helptext.h"
|
||
|
#include "ffactory.h"
|
||
|
#include "dazzle.h"
|
||
|
#include "renegadedialogmgr.h"
|
||
|
#include "moneyevent.h"
|
||
|
#include "scoreevent.h"
|
||
|
#include "dlgmpingamechat.h"
|
||
|
#include "playerterminal.h"
|
||
|
#include "encyclopediamgr.h"
|
||
|
#include "clientbboevent.h"
|
||
|
#include "wheelvehicle.h"
|
||
|
#include "trackedvehicle.h"
|
||
|
#include "woldiags.h"
|
||
|
#include "packetmgr.h"
|
||
|
#include "requestkillevent.h"
|
||
|
#include "csconsolecommandevent.h"
|
||
|
#include "apppacketstats.h"
|
||
|
#include "bandwidthgraph.h"
|
||
|
#include "scexplosionevent.h"
|
||
|
#include "bwbalance.h"
|
||
|
#include "sbbomanager.h"
|
||
|
#include "_globals.h"
|
||
|
#include "registry.h"
|
||
|
#include "vipmodeevent.h"
|
||
|
#include "dx8rendererdebugger.h"
|
||
|
#include "changeteamevent.h"
|
||
|
#include "gamesideservercontrol.h"
|
||
|
#include "autostart.h"
|
||
|
#include "except.h"
|
||
|
#include "slavemaster.h"
|
||
|
#include "donateevent.h"
|
||
|
#include "consolemode.h"
|
||
|
#include "dlgcncpurchasemainmenu.h"
|
||
|
#include "realcrc.h"
|
||
|
#include "gamespyadmin.h"
|
||
|
#include "gamespybanlist.h"
|
||
|
#include "specialbuilds.h"
|
||
|
#include "lightsolve.h"
|
||
|
#include "lightsolvecontext.h"
|
||
|
|
||
|
|
||
|
|
||
|
void ConsoleFunctionClass::Print( const char *format, ... )
|
||
|
{
|
||
|
va_list arg_list;
|
||
|
va_start (arg_list, format);
|
||
|
StringClass string;
|
||
|
string.Format_Args( format, arg_list );
|
||
|
if (Get_Text_Display()) {
|
||
|
WWASSERT( Get_Text_Display() );
|
||
|
Get_Text_Display()->Print_System( string );
|
||
|
}
|
||
|
ConsoleBox.Print(string.Peek_Buffer());
|
||
|
va_end (arg_list);
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// DEVELOPMENT CONSOLE FUNCTIONS ONLY
|
||
|
// Only present in Debug and Profile builds.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#ifdef WWDEBUG
|
||
|
|
||
|
/*
|
||
|
** Console Functions
|
||
|
*/
|
||
|
class BuildingStateConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "building_state"; }
|
||
|
virtual const char * Get_Alias( void ) { return "bs"; }
|
||
|
virtual const char * Get_Help( void ) { return "BUILDING_STATE <health:0,100> <power:0,1> - force all buildings to the given state"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
int health_percentage,power;
|
||
|
int cnt=sscanf(input, "%d %d", &health_percentage, &power);
|
||
|
if (cnt == 2) {
|
||
|
GameObjManager::Debug_Set_All_Building_States((float)health_percentage,(power==1));
|
||
|
Print("Building States set to Health = %d%%, Power = %d\n",health_percentage,power);
|
||
|
} else {
|
||
|
GameObjManager::Debug_Set_All_Building_States(100,1);
|
||
|
GameObjManager::Debug_Set_All_Building_States(0,1);
|
||
|
Print("Blew up all buildings!\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class DSAPOResetConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "dsapo_reset"; }
|
||
|
virtual const char * Get_Help( void ) { return "DSAPO_RESET - force all DSAPO's back to their initial state."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (COMBAT_SCENE) {
|
||
|
RefPhysListIterator it = COMBAT_SCENE->Get_Static_Anim_Object_Iterator();
|
||
|
for (it.First();!it.Is_Done();it.Next()) {
|
||
|
|
||
|
if (it.Peek_Obj()->Get_Factory().Chunk_ID() == PHYSICS_CHUNKID_DAMAGEABLESTATICPHYS) {
|
||
|
DamageableStaticPhysClass * dobj = (DamageableStaticPhysClass *)it.Peek_Obj();
|
||
|
dobj->Reset_Health();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int health_percentage,power;
|
||
|
int cnt=sscanf(input, "%d %d", &health_percentage, &power);
|
||
|
if (cnt == 2) {
|
||
|
GameObjManager::Debug_Set_All_Building_States((float)health_percentage,(power==1));
|
||
|
Print("Building States set to Health = %d%%, Power = %d\n",health_percentage,power);
|
||
|
} else {
|
||
|
GameObjManager::Debug_Set_All_Building_States(100,1);
|
||
|
GameObjManager::Debug_Set_All_Building_States(0,1);
|
||
|
Print("Blew up all buildings!\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class HUDConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "hud"; }
|
||
|
virtual const char * Get_Help( void ) { return "HUD - toggles the HUD."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
HUDClass::Enable( !HUDClass::Is_Enabled() );
|
||
|
Print( "HUD toggled\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class PatsDebugConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "pat"; }
|
||
|
virtual const char * Get_Help( void ) { return "PAT - Pat's generic debug console function."; }
|
||
|
virtual void Activate( const char * input )
|
||
|
{
|
||
|
RenegadeDialogMgrClass::Goto_Location (RenegadeDialogMgrClass::LOC_INTERNET_MAIN);
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class TextureMemoryCounterConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "texture_memory_counter"; }
|
||
|
virtual const char * Get_Help( void ) { return "TEXTURE_MEMORY_COUNTER - 0=off 1=on 2=details"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Debug_Statistics::RecordTextureMode b;
|
||
|
if (sscanf(input, "%d", &b) == 1) {
|
||
|
Debug_Statistics::Record_Texture_Mode(b);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class MeshDebuggerEnableConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "mesh_debugger_enable"; }
|
||
|
virtual const char * Get_Help( void ) { return "MESH_DEBUGGER_ENABLE - 0=off 1=on"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
unsigned onoff;
|
||
|
if (sscanf(input, "%d", &onoff) == 1) {
|
||
|
DX8RendererDebugger::Enable(!!onoff);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class MeshDebuggerEnableMeshConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "mesh_debugger_enable_mesh"; }
|
||
|
virtual const char * Get_Help( void ) { return "MESH_DEBUGGER_ENABLE_MESH - id0 ... id9"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
// Parameter '*' means ALL meshes
|
||
|
char string[200];
|
||
|
sscanf(input, "%s", string);
|
||
|
if (!stricmp("*",string)) {
|
||
|
DX8RendererDebugger::Enable_All();
|
||
|
}
|
||
|
else {
|
||
|
unsigned id[10];
|
||
|
unsigned count=sscanf(input, "%d %d %d %d %d %d %d %d %d %d",
|
||
|
&id[0], &id[1], &id[2], &id[3], &id[4], &id[5], &id[6], &id[7], &id[8], &id[9]);
|
||
|
for (unsigned i=0;i<count;++i) {
|
||
|
DX8RendererDebugger::Enable_Mesh(id[i]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class MeshDebuggerDisableMeshConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "mesh_debugger_disable_mesh"; }
|
||
|
virtual const char * Get_Help( void ) { return "MESH_DEBUGGER_DISABLE_MESH - id0 ... id9"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
// Parameter '*' means ALL meshes
|
||
|
char string[200];
|
||
|
sscanf(input, "%s", string);
|
||
|
if (!stricmp("*",string)) {
|
||
|
DX8RendererDebugger::Disable_All();
|
||
|
}
|
||
|
else {
|
||
|
unsigned id[10];
|
||
|
unsigned count=sscanf(input, "%d %d %d %d %d %d %d %d %d %d",
|
||
|
&id[0], &id[1], &id[2], &id[3], &id[4], &id[5], &id[6], &id[7], &id[8], &id[9]);
|
||
|
for (unsigned i=0;i<count;++i) {
|
||
|
DX8RendererDebugger::Disable_Mesh(id[i]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class FlashTextureConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "flash_texture"; }
|
||
|
virtual const char * Get_Help( void ) { return "FLASH_TEXTURE <ID> <0/1> - sets texture flashing"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
#ifdef WW3D_DX8
|
||
|
int id,state;
|
||
|
int cnt=sscanf(input, "%d %d", &id, &state);
|
||
|
TextureFileClass* tfc=NULL;
|
||
|
if (cnt>=1) tfc=TextureFileClass::Get_Texture(id);
|
||
|
if (tfc) {
|
||
|
if (cnt==1) {
|
||
|
state=!tfc->Get_Texture_Flash();
|
||
|
tfc->Set_Texture_Flash(!!state);
|
||
|
}
|
||
|
else if (cnt==2) {
|
||
|
tfc->Set_Texture_Flash(!!state);
|
||
|
}
|
||
|
StringClass tmp;
|
||
|
if (state) {
|
||
|
tmp.Format("Texture %s (id=%d) set FLASHING\n",tfc->Get_File_Name(),tfc->ID());
|
||
|
}
|
||
|
else {
|
||
|
tmp.Format("Texture %s (id=%d) set not flashing\n",tfc->Get_File_Name(),tfc->ID());
|
||
|
}
|
||
|
Print(tmp);
|
||
|
}
|
||
|
#endif //WW3D_DX8
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class FogRangeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "fog_range"; }
|
||
|
virtual const char * Get_Help( void ) { return "FOG_RANGE <start [0+]> <end [0+]> [ramptime [0+]] - Sets fog range.";}
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
const char *feedbackstring = "Fog range changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float arg0, arg1, arg2;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f %f", &arg0, &arg1, &arg2);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 2:
|
||
|
success = WeatherMgrClass::Set_Fog_Range (arg0, arg1);
|
||
|
break;
|
||
|
|
||
|
case 3:
|
||
|
success = WeatherMgrClass::Set_Fog_Range (arg0, arg1, arg2);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class FogToggleConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) { return "fog_toggle"; }
|
||
|
virtual const char * Get_Help (void) { return "FOG_TOGGLE - toggles fog on/off."; }
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *_statusstring [2] = {"Fog disabled\n", "Fog enabled\n"};
|
||
|
|
||
|
WeatherMgrClass::Set_Fog_Enable (!WeatherMgrClass::Get_Fog_Enable());
|
||
|
Print (_statusstring [WeatherMgrClass::Get_Fog_Enable()]);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class LightModeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
virtual const char * Get_Name (void) { return "light_mode"; }
|
||
|
virtual const char * Get_Help (void) { return "LIGHT_MODE <0,1,2> - 0=none, 1=surrender, 2=cheap."; }
|
||
|
virtual void Activate (const char *input) {
|
||
|
int mode;
|
||
|
if (sscanf(input, "%d", &mode) == 1) {
|
||
|
COMBAT_SCENE->Set_Lighting_Mode(mode);
|
||
|
}
|
||
|
|
||
|
switch(COMBAT_SCENE->Get_Lighting_Mode()) {
|
||
|
case PhysicsSceneClass::LIGHTING_MODE_SURRENDER:
|
||
|
Print ("Lighting Mode: SURRENDER");
|
||
|
break;
|
||
|
|
||
|
case PhysicsSceneClass::LIGHTING_MODE_CHEAP:
|
||
|
Print ("Lighting Mode: CHEAP");
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
Print ("Lighting Mode: NONE");
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class LightDebugToggleConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
virtual const char * Get_Name (void) { return "light_debug"; }
|
||
|
virtual const char * Get_Help (void) { return "LIGHT_DEBUG - toggles lighting debugging on/off."; }
|
||
|
virtual void Activate (const char *input) {
|
||
|
COMBAT_SCENE->Enable_Lighting_Debug_Display(!COMBAT_SCENE->Is_Lighting_Debug_Display_Enabled());
|
||
|
if (COMBAT_SCENE->Is_Lighting_Debug_Display_Enabled()) {
|
||
|
Print ("Lighting debug display ENABLED");
|
||
|
} else {
|
||
|
Print ("Lighting debug display DISABLED");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class LightLODConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
virtual const char * Get_Name (void) { return "light_lod"; }
|
||
|
virtual const char * Get_Help (void) { return "LIGHT_LOD <intensity> - sets the LOD cutoff for lighting."; }
|
||
|
virtual void Activate (const char *input) {
|
||
|
float inten;
|
||
|
if (sscanf(input, "%f", &inten) == 1) {
|
||
|
COMBAT_SCENE->Set_Lighting_LOD_Cutoff(inten);
|
||
|
}
|
||
|
Print("Lighting LOD: %d\r\n",COMBAT_SCENE->Get_Lighting_LOD_Cutoff());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class LightCalcConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "light_calc"; }
|
||
|
virtual const char * Get_Help( void ) { return "LIGHT_CALC - computes a static vertex lighting solve"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (COMBAT_SCENE) {
|
||
|
LightSolveContextClass context;
|
||
|
LightSolveClass::Generate_Static_Light_Solve(context);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class CameraConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "camera"; }
|
||
|
virtual const char * Get_Help( void ) { return "CAMERA <NAME> - switches to camera profile <name>."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_CAMERA ) {
|
||
|
COMBAT_CAMERA->Use_Profile( input );
|
||
|
Print( "Profile Changed\n" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_toggle"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_TOGGLE - toggles vis culling."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
COMBAT_SCENE->Enable_Vis(!COMBAT_SCENE->Is_Vis_Enabled());
|
||
|
if (COMBAT_SCENE->Is_Vis_Enabled()) {
|
||
|
Print("vis enabled\n");
|
||
|
} else {
|
||
|
Print("vis disabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisInvertConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_invert"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_INVERT - toggles vis invert setting."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
COMBAT_SCENE->Invert_Vis(!COMBAT_SCENE->Is_Vis_Inverted());
|
||
|
if (COMBAT_SCENE->Is_Vis_Inverted()) {
|
||
|
Print("vis_invert enabled\n");
|
||
|
} else {
|
||
|
Print("vis_invert disabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisGridDisplayConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_grid_display"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_GRID_DISPLAY <0,1,2,3> - 0=off, 1=boxes, 2=centers, 3=occupied."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
int mode = 0;
|
||
|
if (sscanf(input, "%d", &mode) == 1) {
|
||
|
COMBAT_SCENE->Set_Vis_Grid_Display_Mode(mode);
|
||
|
if (mode == 0) {
|
||
|
Print("vis_grid_display off\n");
|
||
|
} else if (mode == 1) {
|
||
|
Print("vis_grid_display boxes\n");
|
||
|
} else if (mode == 2) {
|
||
|
Print("vis_grid_display centers\n");
|
||
|
} else if (mode == 3) {
|
||
|
Print("vis_grid_display occupied\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisGridDebugConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_grid_debug"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_GRID_DEBUG <p,s,f,b,r> - p=parent,s=sibling,f=front,b=back,r=reset"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
char mode = 0;
|
||
|
if (sscanf(input, "%c", &mode) == 1) {
|
||
|
mode = toupper(mode);
|
||
|
|
||
|
if (mode == 'P') {
|
||
|
if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Parent()) {
|
||
|
Print("Entered parent node\n");
|
||
|
} else {
|
||
|
Print("No parent node\n");
|
||
|
}
|
||
|
} else if (mode == 'S') {
|
||
|
if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Sibling()) {
|
||
|
Print("Entered sibling\n");
|
||
|
} else {
|
||
|
Print("No sibling\n");
|
||
|
}
|
||
|
} else if (mode == 'F') {
|
||
|
if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Front_Child()) {
|
||
|
Print("Entered front child\n");
|
||
|
} else {
|
||
|
Print("No front child\n");
|
||
|
}
|
||
|
} else if (mode == 'B') {
|
||
|
if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Back_Child()) {
|
||
|
Print("Entered back child\n");
|
||
|
} else {
|
||
|
Print("No back child\n");
|
||
|
}
|
||
|
} else if (mode == 'R') {
|
||
|
COMBAT_SCENE->Vis_Grid_Debug_Reset_Node();
|
||
|
Print("Reset to root\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisHierarchicalConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_hierarchical"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_HIERARCHICAL - toggles hierarchical vis culling."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
PhysAABTreeCullClass::Enable_Hierarchical_Vis_Culling(!PhysAABTreeCullClass::Is_Hierarchical_Vis_Culling_Enabled());
|
||
|
if (PhysAABTreeCullClass::Is_Hierarchical_Vis_Culling_Enabled()) {
|
||
|
Print("hierarchical vis culling enabled\n");
|
||
|
} else {
|
||
|
Print("hierarchical vis culling disabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisLockConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_lock_sample_point"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_LOCK_SAMPLE_POINT - locks/unlocks the current pvs."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
COMBAT_SCENE->Lock_Vis_Sample_Point(!COMBAT_SCENE->Is_Vis_Sample_Point_Locked());
|
||
|
if (COMBAT_SCENE->Is_Vis_Sample_Point_Locked()) {
|
||
|
Print("Vis sample point locked.\n");
|
||
|
} else {
|
||
|
Print("Vis sample point unlocked.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisSectorDisplayConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_sector_display"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_SECTOR_DISPLAY - toggles diplay of the current vis sector."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
COMBAT_SCENE->Enable_Vis_Sector_Display(!COMBAT_SCENE->Is_Vis_Sector_Display_Enabled());
|
||
|
if (COMBAT_SCENE->Is_Vis_Sector_Display_Enabled()) {
|
||
|
Print("vis_sector_display enabled\n");
|
||
|
} else {
|
||
|
Print("vis_sector_display disabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VisSectorHistoryConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vis_sector_history"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIS_SECTOR_HISTORY - toggles diplay of the previous 3 vis sectors."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
COMBAT_SCENE->Enable_Vis_Sector_History_Display(!COMBAT_SCENE->Is_Vis_Sector_History_Display_Enabled());
|
||
|
if (COMBAT_SCENE->Is_Vis_Sector_History_Display_Enabled()) {
|
||
|
Print("vis_sector_history enabled\n");
|
||
|
} else {
|
||
|
Print("vis_sector_history disabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SuicideConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "suicide"; }
|
||
|
virtual const char * Get_Help( void ) { return "SUICIDE - kill your commando."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (cNetwork::I_Am_Client()) {
|
||
|
Print("Committing suicide.\n");
|
||
|
|
||
|
cSuicideEvent * p_suicide = new cSuicideEvent;
|
||
|
p_suicide->Init();
|
||
|
|
||
|
} else {
|
||
|
Print("Only clients can commit suicide.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ShadowAttenuationConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
virtual const char * Get_Name( void ) { return "shadow_attenuation"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHADOW_ATTENUATION <near> <far> - set the attenuation ranges for shadows."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance();
|
||
|
float znear,zfar;
|
||
|
if (sscanf(input, "%f %f",&znear,&zfar) == 2) {
|
||
|
scene->Set_Shadow_Attenuation(znear,zfar);
|
||
|
scene->Get_Shadow_Attenuation(&znear,&zfar);
|
||
|
Print("shadow attenuation set to %f %f\n",znear,zfar);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ShadowBlobTextureConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
virtual const char * Get_Name( void ) { return "shadow_blob_texture"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHADOW_BLOB_TEXTURE <texture filename> - sets the texture to use for blob shadows."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (strlen(input) > 0) {
|
||
|
if (PhysResourceMgrClass::Set_Shadow_Blob_Texture(input)) {
|
||
|
Print("shadow blob texture set to: %s\n",input);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ShadowElevationConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
virtual const char * Get_Name( void ) { return "shadow_elevation"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHADOW_ELEVATION <elevation degrees> - sets the angle of the shadow projection."; }
|
||
|
virtual void Activate( const char * input )
|
||
|
{
|
||
|
/*
|
||
|
** NOTE: THIS IS JUST TEST CODE TO SEE HOW VARIOUS SHADOW ALGORITHMS
|
||
|
** WORK WITH VARIOUS SUN-LIGHT ANGLES. THE SUN IS NOT TO BE MOVED IN-GAME!!!
|
||
|
*/
|
||
|
PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance();
|
||
|
|
||
|
float elevation,rotation;
|
||
|
scene->Get_Sun_Light_Orientation(&rotation,&elevation);
|
||
|
if (sscanf(input, "%f",&elevation) == 1) {
|
||
|
scene->Set_Sun_Light_Orientation(rotation,DEG_TO_RADF(elevation));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ShadowIntensityConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
virtual const char * Get_Name( void ) { return "shadow_intensity"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHADOW_INTENSITY <intensity> - sets the darkness of dynamic shadows (0 - 1)."; }
|
||
|
virtual void Activate( const char * input )
|
||
|
{
|
||
|
PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance();
|
||
|
scene->Set_Shadow_Normal_Intensity(atof(input));
|
||
|
Print("shadow intensity set to: %f\n",scene->Get_Shadow_Normal_Intensity());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ShadowPerPolyCullingConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
virtual const char * Get_Name( void ) { return "shadow_per_poly_culling"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHADOW_PER_POLY_CULLING - toggles per poly shadow culling."; }
|
||
|
virtual void Activate( const char * input )
|
||
|
{
|
||
|
MaterialPassClass::Enable_Per_Polygon_Culling(!MaterialPassClass::Is_Per_Polygon_Culling_Enabled());
|
||
|
if (MaterialPassClass::Is_Per_Polygon_Culling_Enabled()) {
|
||
|
Print("per-polygon shadow culling enabled!\n");
|
||
|
} else {
|
||
|
Print("per-polygon shadow culling disabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ShadowResolutionConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
virtual const char * Get_Name( void ) { return "shadow_resolution"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHADOW_RESOLUTION <res> - sets the resolution of dynamic shadows (use a power of 2!)"; }
|
||
|
virtual void Activate( const char * input )
|
||
|
{
|
||
|
PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance();
|
||
|
scene->Set_Shadow_Resolution(atof(input));
|
||
|
Print("shadow resolution set to: %f\n",scene->Get_Shadow_Resolution());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ShadowCountConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
virtual const char * Get_Name( void ) { return "shadow_count"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHADOW_COUNT <count> - sets the maximum simultaneous shadows"; }
|
||
|
virtual void Activate( const char * input )
|
||
|
{
|
||
|
PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance();
|
||
|
scene->Set_Max_Simultaneous_Shadows(atof(input));
|
||
|
Print("simultaneous shadow count set to: %f\n",scene->Get_Max_Simultaneous_Shadows());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class PhysicsDebugConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "physics_debug"; }
|
||
|
virtual const char * Get_Help( void ) { return "PHYSICS_DEBUG - toggles physics debugging display."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
COMBAT_SCENE->Enable_Debug_Display(!COMBAT_SCENE->Is_Debug_Display_Enabled());
|
||
|
if (COMBAT_SCENE->Is_Debug_Display_Enabled()) {
|
||
|
Print("physics debug display enabled!\n");
|
||
|
} else {
|
||
|
Print("physics debug display disabled :-(\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class Phys3NetConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "phys3_net"; }
|
||
|
virtual const char * Get_Help( void ) { return "PHYS3_NET <allowable_error> <pop_error> <corr_time> - sets the phys3 networking constants."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
float corr_time,allow_error,pop_error;
|
||
|
int params = sscanf(input, "%f %f %f",&allow_error,&pop_error,&corr_time);
|
||
|
if (params == 3) {
|
||
|
Phys3Class::Set_Allowable_Error(allow_error);
|
||
|
Phys3Class::Set_Pop_Error(pop_error);
|
||
|
Phys3Class::Set_Correction_Time(corr_time);
|
||
|
}
|
||
|
Print("Phys3 Network Params: allowable_error = %f\r\n",Phys3Class::Get_Allowable_Error());
|
||
|
Print("Phys3 Network Params: pop_error = %f\r\n",Phys3Class::Get_Pop_Error());
|
||
|
Print("Phys3 Network Params: correction_time = %f\r\n",Phys3Class::Get_Correction_Time());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class RBodyNetConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "rbody_net"; }
|
||
|
virtual const char * Get_Help( void ) { return "rbody_net <corr_time> - sets the rigid body correction time."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
float corr_time;
|
||
|
int params = sscanf(input, "%f",&corr_time );
|
||
|
if (params == 3) {
|
||
|
RigidBodyClass::Set_Correction_Time(corr_time);
|
||
|
}
|
||
|
Print("Rigid Body Network Params: correction_time = %f\r\n",RigidBodyClass::Get_Correction_Time());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ProjectorDebugConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "projector_debug"; }
|
||
|
virtual const char * Get_Help( void ) { return "PROJECTOR_DEBUG - toggles projector debugging display."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
COMBAT_SCENE->Enable_Projector_Debug_Display(!COMBAT_SCENE->Is_Projector_Debug_Display_Enabled());
|
||
|
if (COMBAT_SCENE->Is_Projector_Debug_Display_Enabled()) {
|
||
|
Print("projector debug display enabled!\n");
|
||
|
} else {
|
||
|
Print("projector debug display disabled :-(\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class DirtyCullDebugConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "dirty_cull_debug"; }
|
||
|
virtual const char * Get_Help( void ) { return "DIRTY_CULL_DEBUG - toggles debugging of the dirty-cull-list."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
COMBAT_SCENE->Enable_Dirty_Cull_Debug_Display(!COMBAT_SCENE->Is_Dirty_Cull_Debug_Display_Enabled());
|
||
|
if (COMBAT_SCENE->Is_Dirty_Cull_Debug_Display_Enabled()) {
|
||
|
Print("dirty cull debug display enabled!\n");
|
||
|
} else {
|
||
|
Print("dirty cull debug display disabled.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class NextRenderConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "next_render"; }
|
||
|
virtual const char * Get_Help( void ) { return "NEXT_RENDER - switches to the next render device."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3D::Set_Next_Render_Device();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class OneShotKillsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "one_shot_kills"; }
|
||
|
virtual const char * Get_Alias( void ) { return "osk"; }
|
||
|
virtual const char * Get_Help( void ) { return "ONE_SHOT_KILLS - kill or destroy with one shot. Server only."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
bool osk = false;
|
||
|
|
||
|
#ifdef WWDEBUG
|
||
|
osk = DefenseObjectClass::Toggle_One_Shot_Kills();
|
||
|
#endif // WWDEBUG
|
||
|
|
||
|
Print( "One Shot Kills: %s\n", osk ? "ON" : "OFF");
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class OpenConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "open"; }
|
||
|
virtual const char * Get_Help( void ) { return "OPEN [regedit|logfile|ini ininame] - open specified object."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (!stricmp(input, "regedit")) {
|
||
|
cNetwork::Shell_Command("regedit");
|
||
|
} else if (!stricmp(input, "logfile")) {
|
||
|
cNetwork::Shell_Command(DebugManager::Logfile_Name());
|
||
|
} else if (strstr(input, "ini")) {
|
||
|
char filename[200];
|
||
|
sscanf(input, "ini %s", filename);
|
||
|
char open_command[200];
|
||
|
sprintf(open_command, "data\\%s.ini", filename);
|
||
|
cNetwork::Shell_Command(open_command);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class InvalidateMeshCacheConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "invalidate_mesh_cache"; }
|
||
|
virtual const char * Get_Help( void ) { return "INVALIDATE_MESH_CACHE - invalidates all cached mesh data."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3D::_Invalidate_Mesh_Cache();
|
||
|
Print( "Mesh cache invalidated." );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class InvalidateTexturesConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "invalidate_textures"; }
|
||
|
virtual const char * Get_Help( void ) { return "INVALIDATE_TEXTURES - invalidates all textures."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3D::_Invalidate_Textures();
|
||
|
Print( "Textures invalidated." );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class TexturingEnableConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "texturing_enable"; }
|
||
|
virtual const char * Get_Help( void ) { return "TEXTURING_ENABLE toggle texturing."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3D::Enable_Texturing(!WW3D::Is_Texturing_Enabled());
|
||
|
Print( "Textures switched." );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ExposePrelitConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "expose_prelit"; }
|
||
|
virtual const char * Get_Help( void ) { return "EXPOSE_PRELIT - expose precalculated lighting on meshes."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
static char *_comment [2] = {
|
||
|
"Unexposed prelit meshes\n",
|
||
|
"Exposed prelit meshes\n"
|
||
|
};
|
||
|
|
||
|
WW3D::Expose_Prelit (!WW3D::Expose_Prelit());
|
||
|
Print (_comment [WW3D::Expose_Prelit() ? 1 : 0]);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class PlayerPositionConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "player_position"; }
|
||
|
//virtual const char * Get_Alias( void ) { return "pp"; }
|
||
|
virtual const char * Get_Help( void ) { return "PLAYER_POSITION - toggles the players world position display."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Get_Console()->Toggle_Player_Position();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ToggleAssetPreloadingConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_preloading"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOGGLE_PRELOADING - toggles asset preloading."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
bool is_preloading = cDevOptions::PreloadAssets.Toggle();
|
||
|
Print(is_preloading ? "Assets WILL preload.\n" : "Assets will NOT preload.\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ToggleRenderingConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_rendering"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOGGLE_RENDERING <static,dynamic,human,vehicles> - toggles rendering of various types."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
/*
|
||
|
** Note: I'm only comparing the first two characters so the user doesn't have to type the whole thing
|
||
|
*/
|
||
|
if (_strnicmp(input,"st",2) == 0) {
|
||
|
|
||
|
StaticPhysClass::Disable_All_Rendering(!StaticPhysClass::Is_All_Rendering_Disabled());
|
||
|
Print(StaticPhysClass::Is_All_Rendering_Disabled() ? "Static object rendering DISABLED" : "Static object rendering ENABLED");
|
||
|
|
||
|
} else if (_strnicmp(input,"dy",2) == 0) {
|
||
|
|
||
|
DynamicPhysClass::Disable_All_Rendering(!DynamicPhysClass::Is_All_Rendering_Disabled());
|
||
|
Print(DynamicPhysClass::Is_All_Rendering_Disabled() ? "Dynamic object rendering DISABLED" : "Dynamic object rendering ENABLED");
|
||
|
|
||
|
} else if (_strnicmp(input,"hu",2) == 0) {
|
||
|
|
||
|
HumanPhysClass::Disable_All_Rendering(!HumanPhysClass::Is_All_Rendering_Disabled());
|
||
|
Print(HumanPhysClass::Is_All_Rendering_Disabled() ? "Human object rendering DISABLED" : "Human object rendering ENABLED");
|
||
|
|
||
|
} else if (_strnicmp(input,"ve",2) == 0) {
|
||
|
|
||
|
VehiclePhysClass::Disable_All_Rendering(!VehiclePhysClass::Is_All_Rendering_Disabled());
|
||
|
Print(VehiclePhysClass::Is_All_Rendering_Disabled() ? "Vehicle object rendering DISABLED" : "Vehicle object rendering ENABLED");
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ToggleSimulationConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_simulation"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOGGLE_SIMULATION <static,dynamic,human,vehicles> - toggles rendering of various types."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
/*
|
||
|
** Note: I'm only comparing the first two characters so the user doesn't have to type the whole thing
|
||
|
*/
|
||
|
if (_strnicmp(input,"st",2) == 0) {
|
||
|
|
||
|
StaticPhysClass::Disable_All_Simulation(!StaticPhysClass::Is_All_Simulation_Disabled());
|
||
|
Print(StaticPhysClass::Is_All_Simulation_Disabled() ? "Static object Simulation DISABLED" : "Static object Simulation ENABLED");
|
||
|
|
||
|
} else if (_strnicmp(input,"dy",2) == 0) {
|
||
|
|
||
|
DynamicPhysClass::Disable_All_Simulation(!DynamicPhysClass::Is_All_Simulation_Disabled());
|
||
|
Print(DynamicPhysClass::Is_All_Simulation_Disabled() ? "Dynamic object Simulation DISABLED" : "Dynamic object Simulation ENABLED");
|
||
|
|
||
|
} else if (_strnicmp(input,"hu",2) == 0) {
|
||
|
|
||
|
HumanPhysClass::Disable_All_Simulation(!HumanPhysClass::Is_All_Simulation_Disabled());
|
||
|
Print(HumanPhysClass::Is_All_Simulation_Disabled() ? "Human object Simulation DISABLED" : "Human object Simulation ENABLED");
|
||
|
|
||
|
} else if (_strnicmp(input,"ve",2) == 0) {
|
||
|
|
||
|
VehiclePhysClass::Disable_All_Simulation(!VehiclePhysClass::Is_All_Simulation_Disabled());
|
||
|
Print(VehiclePhysClass::Is_All_Simulation_Disabled() ? "Vehicle object Simulation DISABLED" : "Vehicle object Simulation ENABLED");
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class TomConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "tom"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOM - Annoyance-reduction registry tweaks customized by Tom."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
//
|
||
|
// Enable a good level of diagnostics - all devices and types except
|
||
|
// screen and netprolific
|
||
|
//
|
||
|
ConsoleFunctionManager::Parse_Input("debug_device on");
|
||
|
ConsoleFunctionManager::Parse_Input("debug_device screen");
|
||
|
ConsoleFunctionManager::Parse_Input("debug_type on");
|
||
|
ConsoleFunctionManager::Parse_Input("debug_type netprolific");
|
||
|
|
||
|
//
|
||
|
// Set max scroll lines
|
||
|
//
|
||
|
if (Get_Text_Display()) {
|
||
|
WWASSERT(Get_Text_Display() != NULL);
|
||
|
Get_Text_Display()->Set_Max_Scroll_Lines(10);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Debug flags
|
||
|
//
|
||
|
//cDevOptions::ShowDiagnostics.Set(true);
|
||
|
cDevOptions::PreloadAssets.Set(false);
|
||
|
cDevOptions::ShowFps.Set(true);
|
||
|
cDevOptions::ShowGodStatus.Set(true);
|
||
|
cDevOptions::CompareExeVersionOnNetwork.Set(false);
|
||
|
cDevOptions::CrtDbgEnabled.Set(false);
|
||
|
cDevOptions::LogDataSafe.Set(false);
|
||
|
cDevOptions::FilterLevelFiles.Set(false);
|
||
|
cDevOptions::ShowThumbnailPreInitDialog.Set(false);
|
||
|
|
||
|
//
|
||
|
// Release flags
|
||
|
//
|
||
|
cUserOptions::ShowNamesOnSoldier.Set(true);
|
||
|
cUserOptions::CameraLockedToTurret.Set(true);
|
||
|
cUserOptions::SkipQuitConfirmDialog.Set(true);
|
||
|
cUserOptions::SkipIngameQuitConfirmDialog.Set(true);
|
||
|
cUserOptions::PermitDiagLogging.Set(false);
|
||
|
|
||
|
//
|
||
|
// Set 800 x 600, windowed mode
|
||
|
//
|
||
|
{
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_RENDER);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int(VALUE_NAME_RENDER_DEVICE_WIDTH, 800);
|
||
|
registry.Set_Int(VALUE_NAME_RENDER_DEVICE_HEIGHT, 600);
|
||
|
registry.Set_Int(VALUE_NAME_RENDER_DEVICE_WINDOWED, TRUE);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
//
|
||
|
// Stop Jani from spying on us (avoid delay on exit)
|
||
|
//
|
||
|
{
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int("SystemInfoLogDisable", TRUE);
|
||
|
registry.Set_Int("DisableLogCopying", TRUE);
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
// Default to third person
|
||
|
//
|
||
|
{
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_OPTIONS);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int("DefaultToFirstPerson", FALSE);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Skip intro movies
|
||
|
//
|
||
|
{
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_OPTIONS);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int("SkipAllIntroMovies", TRUE);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Do not require CD for movies
|
||
|
//
|
||
|
{
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int("DisableCDCheck", TRUE);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Set gamma etc so that they don't screw up debugging
|
||
|
//
|
||
|
{
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_SYSTEM_SETTINGS);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int("Gamma", 1);
|
||
|
registry.Set_Int("Brightness", 0);
|
||
|
registry.Set_Int("Contrast", 1);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class RenderBoxesConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "render_boxes"; }
|
||
|
virtual const char * Get_Help( void ) { return "RENDER_BOXES <mask> - enables rendering of boxes. 0=none 1=all 2=physical 4=projectile."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
int mask = atoi(input);
|
||
|
WW3D::Set_Collision_Box_Display_Mask(mask);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class AmbientLightConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "ambient_light"; }
|
||
|
virtual const char * Get_Help( void ) { return "AMBIENT_LIGHT <R> <G> <B> - sets the ambeint light color to <r> <g> <b>."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_SCENE ) {
|
||
|
float r, g, b;
|
||
|
if (sscanf(input, "%f %f %f", &r, &g, &b) == 3) {
|
||
|
COMBAT_SCENE->Set_Ambient_Light(Vector3(r, g, b));
|
||
|
Print( "Ambient Light changed\n" );
|
||
|
}
|
||
|
} else {
|
||
|
Print( "Error : no COMBAT_SCENE\n" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VblankSyncConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vblank_sync"; }
|
||
|
virtual const char * Get_Help( void ) { return "VBLANK_SYNC - toggles vblank syncing"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (WW3D::Get_Ext_Swap_Interval() == 0) {
|
||
|
WW3D::Set_Ext_Swap_Interval(1);
|
||
|
Print("Vblank syncing ENABLED!\n");
|
||
|
} else {
|
||
|
WW3D::Set_Ext_Swap_Interval(0);
|
||
|
Print("Vblank syncing DISABLED!\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class FrameTexturesConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "frame_textures"; }
|
||
|
virtual const char * Get_Help( void ) { return "FRAME_TEXTURES - measures the amoutn of textures needed for the next frame."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
DebugManager::Measure_Frame_Textures();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class DebugObjectivesConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "objectives_debug"; }
|
||
|
virtual const char * Get_Help( void ) { return "OBJECTIVES_DEBUG - toggles Mission Objectives debug mode."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
bool enable_mode = !ObjectiveManager::Is_Objective_Debug_Mode_Enabled();
|
||
|
ObjectiveManager::Enable_Objective_Debug_Mode( enable_mode );
|
||
|
if (enable_mode) {
|
||
|
Print( "Activating Mission Objectives Debug Mode.\n" );
|
||
|
} else {
|
||
|
Print( "Deactivating Mission Objectives Debug Mode.\n" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class FreeWeaponsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "free_weapons"; }
|
||
|
virtual const char * Get_Help( void ) { return "FREE_WEAPONS - toggle free_weapons flag (server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (!cNetwork::I_Am_Server()) {
|
||
|
Print("Only the server can toggle free-weapons.\n");
|
||
|
} else {
|
||
|
WWASSERT(PTheGameData != NULL);
|
||
|
bool on = The_Game()->IsFreeWeapons.Toggle();
|
||
|
Print("Free weapons is %s.\n", on ? "ON" : "OFF");
|
||
|
|
||
|
if (on) {
|
||
|
//
|
||
|
// Give everyone free weapons right away
|
||
|
//
|
||
|
SLNode<SmartGameObj> * objnode;
|
||
|
for (objnode = GameObjManager::Get_Smart_Game_Obj_List()->Head(); objnode; objnode = objnode->Next()) {
|
||
|
SmartGameObj * p_smart_obj = objnode->Data();
|
||
|
WWASSERT(p_smart_obj != NULL);
|
||
|
if (p_smart_obj->As_SoldierGameObj() != NULL &&
|
||
|
p_smart_obj->Get_Player_Type() != PLAYERTYPE_NEUTRAL) {
|
||
|
p_smart_obj->As_SoldierGameObj()->Give_All_Weapons();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ToggleEmotIconsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_emoticons"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOGGLE_EMOTICONS - Toggle the display of emot icons during conversations."; }
|
||
|
virtual void Activate( const char * /*input*/ ) {
|
||
|
|
||
|
bool display = !ConversationMgrClass::Are_Emot_Icons_Displayed ();
|
||
|
ConversationMgrClass::Display_Emot_Icons (display);
|
||
|
|
||
|
if (display) {
|
||
|
Print( "EmotIcons are now enabled.\n" );
|
||
|
} else {
|
||
|
Print( "EmotIcons are now disabled.\n" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SoldierGhostDebugDisplayConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_ghost_debug_display"; }
|
||
|
virtual const char * Get_Help( void ) { return "toggle_ghost_debug_display - Displays a box around soldiers that are in 'ghost' collision mode."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
bool enable = !SoldierGameObj::Is_Ghost_Collision_Debug_Display_Enabled ();
|
||
|
SoldierGameObj::Enable_Ghost_Collision_Debug_Display (enable);
|
||
|
|
||
|
if (enable) {
|
||
|
Print( "Ghost collision debug display enabled.\n" );
|
||
|
} else {
|
||
|
Print( "Ghost collision debug display disabled.\n" );
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class HUDHelpTextTestConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "hud_help_text"; }
|
||
|
//virtual const char * Get_Help( void ) { return "CnC [vehicle<def_name> | powerup<def_name> |char<class>[minigunner|rocket_soldier|grenadier|engineer|flame_thrower|mutant] <rank>[enlisted|officer|special_forces|boss] ] - Purchases a team vehicle, a player powerup or upgrades the player."; }
|
||
|
virtual const char * Get_Help( void ) { return "hud_help_text - Sets the current HUD help text."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
WideStringClass wide_string;
|
||
|
wide_string.Convert_From (input);
|
||
|
HUDInfo::Set_HUD_Help_Text (wide_string);
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class CnCModeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "cnc"; }
|
||
|
//virtual const char * Get_Help( void ) { return "CnC [vehicle<def_name> | powerup<def_name> |char<class>[minigunner|rocket_soldier|grenadier|engineer|flame_thrower|mutant] <rank>[enlisted|officer|special_forces|boss] ] - Purchases a team vehicle, a player powerup or upgrades the player."; }
|
||
|
virtual const char * Get_Help( void ) { return "CnC - Displays CnC player console (for gods only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cNetwork::I_Am_God()) {
|
||
|
PlayerTerminalClass::Get_Instance ()->Display_Default_Terminal_For_Player (COMBAT_STAR);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class DebugEncyRevealConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "reveal_encyclopedia"; }
|
||
|
virtual const char * Get_Help( void ) { return "reveal_encyclopedia - Shows all entries in the encyclopedia."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
EncyclopediaMgrClass::Reveal_All_Objects ();
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class DebugShowMoveVectorConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "move_vectors"; }
|
||
|
virtual const char * Get_Help( void ) { return "move_vectors - Toggles the debug move vectors."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
bool displayed = PathClass::Are_Move_Vectors_Displayed ();
|
||
|
displayed = !displayed;
|
||
|
PathClass::Display_Move_Vectors (displayed);
|
||
|
if ( displayed ) {
|
||
|
Print( "Move vectors ON.\n" );
|
||
|
} else {
|
||
|
Print( "Move vectors OFF.\n" );
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class MapRevealConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "map_reveal"; }
|
||
|
virtual const char * Get_Help( void ) { return "map_reveal - Removes the cloud from the map."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
MapMgrClass::Clear_All_Cloud_Cells ();
|
||
|
Print( "Map is now visible.\n" );
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ChangeCharacterClassConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "change_character_class"; }
|
||
|
virtual const char * Get_Help( void ) { return "CHANGE_CHARACTER_CLASS <preset_name> - changes your character to the specified class."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
bool success = false;
|
||
|
|
||
|
DefinitionClass *definition = DefinitionMgrClass::Find_Typed_Definition( input, CLASSID_GAME_OBJECT_DEF_SOLDIER );
|
||
|
if (definition != NULL) {
|
||
|
SoldierGameObjDef *soldier_def = reinterpret_cast<SoldierGameObjDef *> (definition);
|
||
|
COMBAT_STAR->Re_Init( *soldier_def );
|
||
|
COMBAT_STAR->Post_Re_Init();
|
||
|
success = true;
|
||
|
}
|
||
|
|
||
|
if (success) {
|
||
|
Print( "Successfully changed character class.\n" );
|
||
|
} else {
|
||
|
Print( "Unable to change character class.\n" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class RenderModeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "render_mode"; }
|
||
|
virtual const char * Get_Alias( void ) { return "rm"; }
|
||
|
virtual const char * Get_Help( void ) { return "RENDER_MODE [0 fill | 1 lines | 2 points] - set the current render mode."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (COMBAT_SCENE != NULL) {
|
||
|
if ((stricmp(input,"points") == 0) || (stricmp(input,"2") == 0)) {
|
||
|
COMBAT_SCENE->Set_Polygon_Mode(SceneClass::POINT);
|
||
|
Print("Polygon mode set to POINT\n");
|
||
|
} else if ((stricmp(input,"lines") == 0) || (stricmp(input,"1") == 0)) {
|
||
|
COMBAT_SCENE->Set_Polygon_Mode(SceneClass::LINE);
|
||
|
Print("Polygon mode set to LINE\n");
|
||
|
} else if ((stricmp(input,"fill") == 0) || (stricmp(input,"0") == 0)) {
|
||
|
COMBAT_SCENE->Set_Polygon_Mode(SceneClass::FILL);
|
||
|
Print("Polygon mode set to FILL\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class RenderModeExtraPassConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "render_mode_extra_pass"; }
|
||
|
virtual const char * Get_Alias( void ) { return "rm"; }
|
||
|
virtual const char * Get_Help( void ) { return "RENDER_MODE_EXTRA_PASS [0 disable | 1 lines | 2 zbuffered]"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (COMBAT_SCENE != NULL) {
|
||
|
if ((stricmp(input,"disable") == 0) || (stricmp(input,"0") == 0)) {
|
||
|
COMBAT_SCENE->Set_Extra_Pass_Polygon_Mode(SceneClass::EXTRA_PASS_DISABLE);
|
||
|
Print("Extra pass polygon mode set to DISABLE\n");
|
||
|
} else if ((stricmp(input,"lines") == 0) || (stricmp(input,"1") == 0)) {
|
||
|
COMBAT_SCENE->Set_Extra_Pass_Polygon_Mode(SceneClass::EXTRA_PASS_LINE);
|
||
|
Print("Extra pass polygon mode set to LINE\n");
|
||
|
} else if ((stricmp(input,"zbuffered") == 0) || (stricmp(input,"2") == 0)) {
|
||
|
COMBAT_SCENE->Set_Extra_Pass_Polygon_Mode(SceneClass::EXTRA_PASS_CLEAR_LINE);
|
||
|
Print("Extra pass polygon mode set to ZBUFFERED\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class TextureFilterModeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "texture_filter_mode"; }
|
||
|
virtual const char * Get_Help( void ) { return "TEXTURE_FILTER_MODE [none|fast|best] - set texture filter and mipmap modes."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (stricmp(input,"none") == 0) {
|
||
|
TextureClass::_Set_Default_Min_Filter(TextureClass::FILTER_TYPE_FAST);
|
||
|
TextureClass::_Set_Default_Mag_Filter(TextureClass::FILTER_TYPE_FAST);
|
||
|
TextureClass::_Set_Default_Mip_Filter(TextureClass::FILTER_TYPE_NONE);
|
||
|
Print("Texture filter mode changed to: none\n");
|
||
|
}
|
||
|
else if (stricmp(input,"fast") == 0) {
|
||
|
TextureClass::_Set_Default_Min_Filter(TextureClass::FILTER_TYPE_FAST);
|
||
|
TextureClass::_Set_Default_Mag_Filter(TextureClass::FILTER_TYPE_FAST);
|
||
|
TextureClass::_Set_Default_Mip_Filter(TextureClass::FILTER_TYPE_FAST);
|
||
|
Print("Texture filter mode changed to: fast\n");
|
||
|
}
|
||
|
if (stricmp(input,"best") == 0) {
|
||
|
TextureClass::_Set_Default_Min_Filter(TextureClass::FILTER_TYPE_BEST);
|
||
|
TextureClass::_Set_Default_Mag_Filter(TextureClass::FILTER_TYPE_BEST);
|
||
|
TextureClass::_Set_Default_Mip_Filter(TextureClass::FILTER_TYPE_BEST);
|
||
|
Print("Texture filter mode changed to: best\n");
|
||
|
}
|
||
|
else {
|
||
|
Print("Valid filter modes are: none|fast|best\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class EnableTriangleRenderConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "enable_triangle_render"; }
|
||
|
virtual const char * Get_Help( void ) { return "ENABLE_TRIANGLE_RENDER [none|opaque|sorting|all] - enable/disable triangle rendering."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (stricmp(input,"none") == 0) {
|
||
|
DX8Wrapper::_Enable_Triangle_Draw(false);
|
||
|
SortingRendererClass::_Enable_Triangle_Draw(false);
|
||
|
Print("All polygon rendering disabled\n");
|
||
|
}
|
||
|
else if (stricmp(input,"opaque") == 0) {
|
||
|
DX8Wrapper::_Enable_Triangle_Draw(true);
|
||
|
SortingRendererClass::_Enable_Triangle_Draw(false);
|
||
|
Print("Only opaque polygons enabled\n");
|
||
|
}
|
||
|
else if (stricmp(input,"sorting") == 0) {
|
||
|
DX8Wrapper::_Enable_Triangle_Draw(false);
|
||
|
SortingRendererClass::_Enable_Triangle_Draw(true);
|
||
|
Print("Only sorting polygons enabled\n");
|
||
|
}
|
||
|
else {
|
||
|
DX8Wrapper::_Enable_Triangle_Draw(true);
|
||
|
SortingRendererClass::_Enable_Triangle_Draw(true);
|
||
|
Print("All polygons enabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class RunFastConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "run_fast"; }
|
||
|
virtual const char * Get_Help( void ) { return "RUN_FAST - set options for fast framerate."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
DebugManager::Option_Enable(DebugManager::DEBUG_DISABLE_LIGHTS, true);
|
||
|
WWASSERT(DebugManager::Option_Is_Enabled(DebugManager::DEBUG_DISABLE_LIGHTS));
|
||
|
Print("Lights disabled.\n");
|
||
|
|
||
|
ConsoleFunctionManager::Parse_Input("Dynamic_LOD_Budget 100");
|
||
|
|
||
|
ConsoleFunctionManager::Parse_Input("Static_LOD_Budget 100");
|
||
|
|
||
|
ConsoleFunctionManager::Parse_Input("Shadow_Mode 0");
|
||
|
|
||
|
ConsoleFunctionManager::Parse_Input("Prelit_Mode 0");
|
||
|
|
||
|
//ConsoleFunctionManager::Parse_Input("Mesh_Draw_Mode 0");
|
||
|
|
||
|
if (COMBAT_SCENE != NULL) {
|
||
|
COMBAT_SCENE->Enable_Dynamic_Projectors(false);
|
||
|
Print("Dynamic Projectors disabled.\n");
|
||
|
COMBAT_SCENE->Enable_Static_Projectors(false);
|
||
|
Print("Static Projectors disabled.\n");
|
||
|
}
|
||
|
|
||
|
WW3D::Set_Texture_Reduction(1);
|
||
|
Print("Texture Resolution set to 1.\n");
|
||
|
|
||
|
ConsoleGameModeClass::Save_Registry_Keys();
|
||
|
|
||
|
if (Get_Text_Display()) {
|
||
|
WWASSERT(Get_Text_Display() != NULL);
|
||
|
Get_Text_Display()->Set_Max_Scroll_Lines(3);
|
||
|
Print("Set_Max_Scroll_Lines(3)\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class RenderBackfacesConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "render_backfaces"; }
|
||
|
virtual const char * Get_Help( void ) { return "RENDER_BACKFACES - toggles debug rendering of backfaced polys."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
/*
|
||
|
** This turns on WW3D backface rendering and also causes the Physics-Scene to
|
||
|
** stop rendering non-occluders so that we can get a better idea of what VIS
|
||
|
** is seeing when it renders the occluders and checks for backfaces
|
||
|
*/
|
||
|
PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance();
|
||
|
if (scene) {
|
||
|
scene->Enable_Backface_Occluder_Debug(!scene->Is_Backface_Occluder_Debug_Enabled());
|
||
|
if (scene->Is_Backface_Occluder_Debug_Enabled()) {
|
||
|
Print("Backface Debug Display ENABLED\n");
|
||
|
} else {
|
||
|
Print("Backface Debug Display DISABLED\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class AmmoConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "ammo"; }
|
||
|
virtual const char * Get_Help( void ) { return "AMMO <count> - sets the players weapon's ammo count."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR != NULL ) {
|
||
|
WeaponClass * weapon = COMBAT_STAR->Get_Weapon();
|
||
|
if ( weapon ) {
|
||
|
int amount = atoi( input );
|
||
|
weapon->Set_Total_Rounds( amount );
|
||
|
Print( "Ammo set to %d rounds\n", amount );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
extern bool ScriptTrace;
|
||
|
class ScriptTraceConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "script_trace"; }
|
||
|
virtual const char * Get_Help( void ) { return "SCRIPT_TRACE - toggles debug trace of all scipt events and commands."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
ScriptTrace = !ScriptTrace;
|
||
|
Print( "ScriptTrace is %s\n", ScriptTrace ? "ON" : "OFF" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class DebugTypeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "debug_type"; }
|
||
|
const char * Get_Alias( void ) { return "dt"; }
|
||
|
virtual const char * Get_Help( void ) { return
|
||
|
"DEBUG_TYPE [type|on|off] - toggles the debug display of type (info, warning, error, script)"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
char str[128];
|
||
|
sprintf(str,"ERROR (%s)\n", input );
|
||
|
if (stricmp(input,"info") == 0) {
|
||
|
DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_INFORMATION );
|
||
|
sprintf(str, "Information Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_INFORMATION ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"warning") == 0) {
|
||
|
DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_WARNING );
|
||
|
sprintf(str, "Warning Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_WARNING ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"error") == 0) {
|
||
|
DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_ERROR );
|
||
|
sprintf(str, "Error Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_ERROR ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"script") == 0) {
|
||
|
DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_SCRIPT );
|
||
|
sprintf(str, "Script Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_SCRIPT ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"netadmin") == 0) {
|
||
|
DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_ADMIN );
|
||
|
sprintf(str, "Network Admin Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_ADMIN ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"netbasic") == 0) {
|
||
|
DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_BASIC );
|
||
|
sprintf(str, "Network Basic Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_BASIC ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"netprolific") == 0) {
|
||
|
DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_PROLIFIC );
|
||
|
sprintf(str, "Network Prolific Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_PROLIFIC ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"net") == 0) {
|
||
|
DebugManager::Disable_Type( DebugManager::DEBUG_TYPE_NETWORK_ADMIN );
|
||
|
DebugManager::Disable_Type( DebugManager::DEBUG_TYPE_NETWORK_BASIC );
|
||
|
DebugManager::Disable_Type( DebugManager::DEBUG_TYPE_NETWORK_PROLIFIC );
|
||
|
sprintf(str, "All network debug types DISABLED\n");
|
||
|
} else if (stricmp(input,"on") == 0) {
|
||
|
DebugManager::Enable_Type( (DebugManager::DebugType)-1 );
|
||
|
sprintf(str, "All Debug Types Enabled\n" );
|
||
|
} else if (stricmp(input,"off") == 0) {
|
||
|
DebugManager::Disable_Type( (DebugManager::DebugType)-1 );
|
||
|
sprintf(str, "All Debug Types Disabled\n" );
|
||
|
}
|
||
|
Print(str);
|
||
|
Debug_Say((str));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
class RadarZoomConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "radar_zoom"; }
|
||
|
virtual const char * Get_Help( void ) { return "RADAR_ZOOM <factor> - Set radar zoom factor."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
float zoom_factor = atof(input);
|
||
|
if (zoom_factor > WWMATH_EPSILON) {
|
||
|
// RadarManager::Set_Zoom_Factor(zoom_factor);
|
||
|
Print( "Radar zoomed\n" );
|
||
|
} else {
|
||
|
Print( "Error - zoom_factor must be small and positive.\n" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class RadarMaxConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "radar_max"; }
|
||
|
virtual const char * Get_Help( void ) { return "RADAR_MAX - zoom out the radar to world extents."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
float world_size = The_Game()->Get_Maximum_World_Distance();
|
||
|
if (world_size > WWMATH_EPSILON) {
|
||
|
// RadarManager::Set_Zoom_Factor(1 / world_size);
|
||
|
Print( "Radar zoomed\n" );
|
||
|
} else {
|
||
|
Print( "Error - world size not set.\n" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
class DefectConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "defect"; }
|
||
|
virtual const char * Get_Help( void ) { return "DEFECT - switch to the opposite team (gods only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
cPlayer * p_player = cNetwork::Get_My_Player_Object();
|
||
|
|
||
|
if (p_player != NULL && p_player->Invulnerable.Is_True()) {
|
||
|
cChangeTeamEvent * p_event = new cChangeTeamEvent;
|
||
|
p_event->Init();
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class RadarToggleConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "radar_toggle"; }
|
||
|
virtual const char * Get_Help( void ) { return "RADAR_TOGGLE - toggles the Radar."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
RadarManager::Set_Hidden( !RadarManager::Is_Hidden() );
|
||
|
Print( "Radar toggled\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ShellCommandConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "shell"; }
|
||
|
virtual const char * Get_Help( void ) { return "SHELL - SHell command (server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (IS_SOLOPLAY || !cNetwork::I_Am_Server()) {
|
||
|
Print("SH is for server only.\n");
|
||
|
} else {
|
||
|
cNetwork::Shell_Command(input);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
class RshCommandConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "rsh"; }
|
||
|
virtual const char * Get_Help( void ) { return "RSH - Remote SHell command (server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (IS_SOLOPLAY || !cNetwork::I_Am_Server()) {
|
||
|
Print("rsh is for server only.\n");
|
||
|
} else {
|
||
|
Print("Sending command to clients...\n");
|
||
|
cNetwork::Send_Server_Rsh_Command(input);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
|
||
|
class LrshCommandConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "lrsh"; }
|
||
|
virtual const char * Get_Help( void ) { return "LRSH - Local and Remote SHell command (server only)."; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
/*
|
||
|
ConsoleFunctionManager::Parse_Input(input);
|
||
|
char rsh_command[500];
|
||
|
WWASSERT(strlen(input) < sizeof(rsh_command) - 10);
|
||
|
sprintf(rsh_command, "rsh %s", input);
|
||
|
ConsoleFunctionManager::Parse_Input(rsh_command);
|
||
|
*/
|
||
|
|
||
|
if (IS_SOLOPLAY || !cNetwork::I_Am_Server() || ::strlen(input) == 0) {
|
||
|
Print(Get_Help());
|
||
|
} else {
|
||
|
cConsoleCommandEvent * p_event = new cConsoleCommandEvent;
|
||
|
p_event->Init(input);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SrshCommandConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "srsh"; }
|
||
|
virtual const char * Get_Help( void ) { return "SRSH - C->S Remote SHell command (client only)."; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cNetwork::I_Am_Only_Client() && ::strlen(input) > 0) {
|
||
|
cCsConsoleCommandEvent * p_event = new cCsConsoleCommandEvent;
|
||
|
p_event->Init(input);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class MainMenuConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "main_menu"; }
|
||
|
virtual const char * Get_Alias( void ) { return "mm"; }
|
||
|
virtual const char * Get_Help( void ) { return "MAIN_MENU - go back to the main menu."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
cDevOptions::GoToMainMenu.Set(true);
|
||
|
cDevOptions::QuickFullExit.Set(true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class MaxFacingPenaltyConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "max_facing_penalty"; }
|
||
|
virtual const char * Get_Alias( void ){ return "mfp"; }
|
||
|
virtual const char * Get_Help( void ) { return "MAX_FACING_PENALTY - set the max facing penalty. Server only. Float. Use zero to disable."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
float f = ::atof(input);
|
||
|
cUserOptions::MaxFacingPenalty.Set(f);
|
||
|
Print( "MaxFacingPenalty set to %5.2f.", f);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class IrrelevancePenaltyConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "irrelevance_penalty"; }
|
||
|
//virtual const char * Get_Alias( void ){ return ""; }
|
||
|
virtual const char * Get_Help( void ) { return "IRRELEVANCE_PENALTY - set the irrelevance penalty. Server only. Float. Use zero to disable."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
float f = ::atof(input);
|
||
|
cUserOptions::IrrelevancePenalty.Set(f);
|
||
|
Print( "IrrelevancePenalty set to %5.2f.", f);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class MissionConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name(void) {return "mission";}
|
||
|
virtual const char * Get_Help(void) {return "MISSION <success/failure> end mission with given status.";}
|
||
|
virtual void Activate(const char * input) {
|
||
|
if (!stricmp(input, "success")) {
|
||
|
CombatManager::Mission_Complete(true);
|
||
|
} else if (!stricmp(input, "failure")) {
|
||
|
CombatManager::Mission_Complete(false);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class MoneyConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name(void) {return "money";}
|
||
|
virtual const char * Get_Help(void) {return "MONEY <amount> - money cheat, for gods only.";}
|
||
|
|
||
|
virtual void Activate(const char * input) {
|
||
|
|
||
|
int amount = ::atoi(input);
|
||
|
|
||
|
if (cNetwork::I_Am_God()) {
|
||
|
cMoneyEvent * p_money = new cMoneyEvent;
|
||
|
p_money->Init(amount);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ScoreConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name(void) {return "score";}
|
||
|
virtual const char * Get_Help(void) {return "SCORE <increment> - score cheat, for gods only.";}
|
||
|
|
||
|
virtual void Activate(const char * input) {
|
||
|
|
||
|
int amount = ::atoi(input);
|
||
|
|
||
|
if (cNetwork::I_Am_God()) {
|
||
|
cScoreEvent * p_score = new cScoreEvent;
|
||
|
p_score->Init(amount);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class MultiHudConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "multihud"; }
|
||
|
virtual const char * Get_Help( void ) { return "MULTIHUD - toggle the multiplayer HUD."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
CombatGameModeClass::Toggle_Multi_Hud();
|
||
|
Print("MultiHud toggled\n");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SetPacketLossConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_packet_loss"; }
|
||
|
virtual const char * Get_Alias( void ) { return "spl"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_PACKET_LOSS <percentage> - simulate packetloss at given percentage"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
double percentage;
|
||
|
percentage = atof(input);
|
||
|
if (percentage > -WWMATH_EPSILON && percentage < 100 + WWMATH_EPSILON) {
|
||
|
cNetwork::Set_Simulated_Packet_Loss_Pc((int)percentage);
|
||
|
ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SetBandwidthBudgetOutToggleConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_sbbo"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOGGLE_SBBO - toggle cSbboManager (server only)."; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
bool is_enabled = cSbboManager::Toggle_Is_Enabled();
|
||
|
Print("cSbboManager %s enabled.\n", is_enabled ? "IS" : "is NOT");
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class SetSendFrequencyConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "send_frequency"; }
|
||
|
virtual const char * Get_Help( void ) { return "send_freqency <delay> - set delay between packet sends."; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
int delay = atoi(input);
|
||
|
PacketManager.Set_Flush_Frequency((unsigned long) delay);
|
||
|
if (delay) {
|
||
|
Print("Packets will be sent no more than %d times per second.\n", 1000 / delay);
|
||
|
} else {
|
||
|
Print("Packets will be sent immediately.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class TogglePacketDeltasConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "packet_delta"; }
|
||
|
virtual const char * Get_Help( void ) { return "packet_delta - toggle packet delta enable flag."; }
|
||
|
|
||
|
virtual void Activate( const char * ) {
|
||
|
bool delta = PacketManager.Toggle_Allow_Deltas();
|
||
|
|
||
|
if (delta) {
|
||
|
Print("Packets can be sent as deltas.\n");
|
||
|
} else {
|
||
|
Print("Packets are not allowed to be sent as deltas.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class TogglePacketComboConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "packet_combo"; }
|
||
|
virtual const char * Get_Help( void ) { return "packet_combo - toggle packet packing."; }
|
||
|
|
||
|
virtual void Activate( const char * ) {
|
||
|
bool combos = PacketManager.Toggle_Allow_Combos();
|
||
|
|
||
|
if (combos) {
|
||
|
Print("Packets of different sizes can be combined into one packet.\n");
|
||
|
} else {
|
||
|
Print("Packets of different sizes cannot be combined into one packet.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class TogglePacketOptConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "packet_opt"; }
|
||
|
virtual const char * Get_Help( void ) { return "packet_opt <state> - enable low level packet optimizations."; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
int on = atoi(input);
|
||
|
|
||
|
if (on) {
|
||
|
PacketManager.Set_Flush_Frequency(1000 / 15);
|
||
|
bool ok = PacketManager.Toggle_Allow_Deltas();
|
||
|
if (!ok) {
|
||
|
PacketManager.Toggle_Allow_Deltas();
|
||
|
}
|
||
|
ok = PacketManager.Toggle_Allow_Combos();
|
||
|
if (!ok) {
|
||
|
PacketManager.Toggle_Allow_Combos();
|
||
|
}
|
||
|
Print("Low level packet optioizations enabled.\n");
|
||
|
} else {
|
||
|
PacketManager.Set_Flush_Frequency(0);
|
||
|
bool ok = PacketManager.Toggle_Allow_Deltas();
|
||
|
if (ok) {
|
||
|
PacketManager.Toggle_Allow_Deltas();
|
||
|
}
|
||
|
ok = PacketManager.Toggle_Allow_Combos();
|
||
|
if (ok) {
|
||
|
PacketManager.Toggle_Allow_Combos();
|
||
|
}
|
||
|
Print("Low level packet optioizations disabled.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class SetLatencyConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "latency"; }
|
||
|
virtual const char * Get_Help( void ) { return "latency <low,high> - set simulated latency on packets."; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
int low,high,current;
|
||
|
int fields = sscanf(input, "%d,%d", &low, &high);
|
||
|
if (fields == 1) {
|
||
|
high = low;
|
||
|
fields = 2;
|
||
|
}
|
||
|
if (fields == 2) {
|
||
|
cConnection::Set_Latency(low, high);
|
||
|
Print("Latency set\n");
|
||
|
}
|
||
|
|
||
|
cConnection::Get_Latency(low, high, current);
|
||
|
Print("Latency set to %d,%d (current latency is %d ms)\n", low, high, current);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class ToggleBandwidthBalancerConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "bw_balance"; }
|
||
|
virtual const char * Get_Help( void ) { return "bw_balance - toggle bandwidth balancer code enable."; }
|
||
|
|
||
|
virtual void Activate( const char * ) {
|
||
|
if (BandwidthBalancer.IsEnabled == false) {
|
||
|
BandwidthBalancer.IsEnabled = true;
|
||
|
Print("Using bandwidth balancer.\n");
|
||
|
} else {
|
||
|
BandwidthBalancer.IsEnabled = false;
|
||
|
Print("Not using bandwidth balancer.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ToggleNewClientUpdateMethodConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "new_update"; }
|
||
|
virtual const char * Get_Help( void ) { return "new_update - toggle new client update method."; }
|
||
|
|
||
|
virtual void Activate( const char * ) {
|
||
|
if (cNetwork::SensibleUpdates == false) {
|
||
|
cNetwork::SensibleUpdates = true;
|
||
|
Print("Using new per object per client update scheme.\n");
|
||
|
} else {
|
||
|
cNetwork::SensibleUpdates = false;
|
||
|
Print("Using old funky distance based update scheme.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class SetDesiredSleepConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_desired_sleep"; }
|
||
|
virtual const char * Get_Alias( void ) { return "sds"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_DESIRED_SLEEP <sleep_ms> - sleep this many ms per frame."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
int desired_sleep = atoi(input);
|
||
|
if (desired_sleep >= 0) {
|
||
|
cNetwork::Set_Desired_Frame_Sleep_Ms(desired_sleep);
|
||
|
Print( "Frame sleep set to %d ms.", desired_sleep );
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SetPacketDuplicationConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_packet_duplication"; }
|
||
|
//virtual const char * Get_Alias( void ) { return "spd"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_PACKET_DUPLICATION <percentage> - simulate packet duplication at given percentage"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
double percentage = atof(input);
|
||
|
if (percentage > -WWMATH_EPSILON && percentage < 100 + WWMATH_EPSILON) {
|
||
|
cNetwork::Set_Simulated_Packet_Duplication_Pc((int)percentage);
|
||
|
ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SetPacketLatencyRangeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_packet_latency_range"; }
|
||
|
virtual const char * Get_Alias( void ) { return "latency"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_PACKET_LATENCY_RANGE <min> <max> - sets a range for simulated latency (in ms)"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
int min_latency_ms;
|
||
|
int max_latency_ms;
|
||
|
int num_args = sscanf(input, "%d %d", &min_latency_ms, &max_latency_ms);
|
||
|
|
||
|
if (num_args == 2 && min_latency_ms >= 0 && max_latency_ms >= 0 &&
|
||
|
min_latency_ms <= max_latency_ms) {
|
||
|
cNetwork::Set_Simulated_Latency_Range_Ms(min_latency_ms, max_latency_ms);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SetSpamCountConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_spam_count"; }
|
||
|
virtual const char * Get_Alias( void ) { return "ssc"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_SPAM_COUNT <count> - S->C state packet is sent this many extra times."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
int spam_count = atoi(input);
|
||
|
if (spam_count >= 0) {
|
||
|
cNetwork::Set_Spam_Count(spam_count);
|
||
|
//Print( "Spam Count set to %d ms.", desired_sleep );
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ClearConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "clear"; }
|
||
|
virtual const char * Get_Help( void ) { return "CLEAR <object> - clear specified object."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cMiscUtil::Is_String_Same(input, "isc")) {
|
||
|
NetworkObjectMgrClass::Reset_Import_State_Counts();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "netstats") ||
|
||
|
cMiscUtil::Is_String_Same(input, "ns")) {
|
||
|
if (cNetwork::PClientConnection != NULL) {
|
||
|
cNetwork::PClientConnection->Init_Stats();
|
||
|
Print("Network stats for client connection reset.\n");
|
||
|
}
|
||
|
if (cNetwork::PServerConnection != NULL) {
|
||
|
cNetwork::PServerConnection->Init_Stats();
|
||
|
Print("Network stats for server connection reset.\n");
|
||
|
}
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "packet_simulation") ||
|
||
|
cMiscUtil::Is_String_Same(input, "ps")) {
|
||
|
ConsoleFunctionManager::Parse_Input("spl 0");
|
||
|
ConsoleFunctionManager::Parse_Input("spd 0");
|
||
|
ConsoleFunctionManager::Parse_Input("latency 0 0");
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "0")) {
|
||
|
ConsoleFunctionManager::Parse_Input("clear ht");
|
||
|
ConsoleFunctionManager::Parse_Input("clear isc");
|
||
|
ConsoleFunctionManager::Parse_Input("clear ns");
|
||
|
ConsoleFunctionManager::Parse_Input("clear ps");
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "")) {
|
||
|
|
||
|
Print("Valid clear objects:\n");
|
||
|
Print(" help_text - clears any help text\n");
|
||
|
Print(" isc - reset the import state count of all smart game objects\n");
|
||
|
Print(" netstats - reinitialize net stats\n");
|
||
|
Print(" packet_simulation - turns off packet simulation (loss, duplication, latency)\n");
|
||
|
|
||
|
} else {
|
||
|
Print("Error: no such clear object.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ClientHintFactorConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "client_hint_factor"; }
|
||
|
virtual const char * Get_Alias( void ){ return "chf"; }
|
||
|
virtual const char * Get_Help( void ) { return "CLIENT_HINT_FACTOR - set the client hint factor (worst:average). Client only. Float. Use zero to disable."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
if (cNetwork::I_Am_Only_Client()) {
|
||
|
float chf = ::atof(input);
|
||
|
cUserOptions::ClientHintFactor.Set(chf);
|
||
|
Print( "ClientHintFactor set to %5.2f.", chf);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class CreateBotConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "create_bot"; }
|
||
|
virtual const char * Get_Alias( void ) { return "cb"; }
|
||
|
virtual const char * Get_Help( void ) { return "CREATE_BOT <number> - create specified number of bots (max 20, server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
int num_bots = 1;
|
||
|
if (strcmp(input, "")) {
|
||
|
num_bots = atoi(input);
|
||
|
}
|
||
|
if (num_bots < 0) {
|
||
|
num_bots = 0;
|
||
|
}
|
||
|
if (num_bots > 20) {
|
||
|
num_bots = 20;
|
||
|
}
|
||
|
for (int i = 0; i < num_bots; i++) {
|
||
|
WWASSERT(PTheGameData != NULL);
|
||
|
if (cPlayerManager::Count() < The_Game()->Get_Max_Players()) {
|
||
|
cGod::Create_Ai_Player();
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class CreateGruntConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "create_grunt"; }
|
||
|
virtual const char * Get_Alias( void ) { return "cg"; }
|
||
|
virtual const char * Get_Help( void ) { return "CREATE_GRUNT <number> - create specified number of grunts (server only, max 20)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( cNetwork::I_Am_Server()) {
|
||
|
int num_grunts = 1;
|
||
|
if (strcmp(input, "")) {
|
||
|
num_grunts = atoi(input);
|
||
|
}
|
||
|
if (num_grunts < 0) {
|
||
|
num_grunts = 0;
|
||
|
}
|
||
|
if (num_grunts > 20) {
|
||
|
num_grunts = 20;
|
||
|
}
|
||
|
|
||
|
if (COMBAT_STAR != NULL) {
|
||
|
Vector3 star_pos;
|
||
|
COMBAT_STAR->Get_Position(&star_pos);
|
||
|
Vector3 star_target_pos = COMBAT_STAR->Get_Targeting_Pos();
|
||
|
//star_pos.Z = 0;
|
||
|
//star_target_pos.Z = 0;
|
||
|
star_target_pos.Z = star_pos.Z;
|
||
|
Vector3 look_vector = star_target_pos - star_pos;
|
||
|
look_vector.Normalize();
|
||
|
Vector3 pos = star_pos + 20 * look_vector;
|
||
|
pos.Z += 0.5;
|
||
|
|
||
|
for (int i = 0; i < num_grunts; i++) {
|
||
|
cGod::Create_Grunt(pos);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class CreateObjectConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "create_object"; }
|
||
|
virtual const char * Get_Alias( void ) { return "co"; }
|
||
|
virtual const char * Get_Help( void ) { return "CREATE_OBJECT <name> - create the named object (server only). Use with caution."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (COMBAT_STAR && cNetwork::I_Am_Server()) {
|
||
|
PhysicalGameObj * obj = ObjectLibraryManager::Create_Object(input);
|
||
|
//if (obj != NULL && obj->As_SmartGameObj() != NULL) {
|
||
|
if (obj != NULL) {
|
||
|
Vector3 position;
|
||
|
COMBAT_STAR->Get_Position(&position);
|
||
|
position.X += 4;
|
||
|
//position.Z += 4;
|
||
|
Matrix3D tm(1);
|
||
|
tm.Set_Translation(position);
|
||
|
obj->Set_Transform(tm);
|
||
|
obj->Start_Observers();
|
||
|
} else {
|
||
|
Print("Failed to create %s.", input);
|
||
|
}
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ListConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "list"; }
|
||
|
//virtual const char * Get_Alias( void ) { return "l"; }
|
||
|
virtual const char * Get_Help( void ) { return "LIST <object> - show list of specified object."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cMiscUtil::Is_String_Same(input, "active_game_modes") ||
|
||
|
cMiscUtil::Is_String_Same(input, "agm")) {
|
||
|
GameModeManager::List_Active_Game_Modes();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "definitions") ||
|
||
|
cMiscUtil::Is_String_Same(input, "d")) {
|
||
|
DefinitionMgrClass::List_Available_Definitions(CLASSID_GAME_OBJECTS);
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "")) {
|
||
|
|
||
|
Print("Valid list objects:\n");
|
||
|
Print(" active_game_modes - list all active game modes\n");
|
||
|
Print(" definitions - list all definition names\n");
|
||
|
|
||
|
} else {
|
||
|
Print("Error: no such list object.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class BreakExecutionConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "break"; }
|
||
|
virtual const char * Get_Help( void ) { return "BREAK - break execution. Do not use this just for fun."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Print("Breaking execution on demand.\n");
|
||
|
_asm int 0x03;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class CrashExecutionConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "crash"; }
|
||
|
virtual const char * Get_Help( void ) { return "CRASH - crash execution. Do not use this just for fun."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Print("Bang....\n");
|
||
|
char *zero = NULL;
|
||
|
*zero = 0;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class GiveWeaponsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "give_weapons"; }
|
||
|
virtual const char * Get_Help( void ) { return "GIVE_WEAPONS - give the commando all the weapons (single-player only)"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
if (IS_SOLOPLAY && COMBAT_STAR ) {
|
||
|
COMBAT_STAR->Give_All_Weapons();
|
||
|
} else {
|
||
|
Print("Use FREE_WEAPONS instead in a multiplayer game.\n");
|
||
|
}
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class GodConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "god"; }
|
||
|
virtual const char * Get_Help( void ) { return "GOD - if you are a true believer, you may toggle your godlike status.\n"; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
StringClass password;
|
||
|
password.Format("%s", input);
|
||
|
|
||
|
if (cNetwork::I_Am_Client() &&
|
||
|
(!password.Is_Empty() || cDevOptions::IBelieveInGod.Is_True())) {
|
||
|
|
||
|
cGodModeEvent * p_event = new cGodModeEvent;
|
||
|
p_event->Init(password);
|
||
|
|
||
|
} else {
|
||
|
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class IBelieveInGodConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "ibelieveingod"; }
|
||
|
virtual const char * Get_Help( void ) { return "IBELIEVEINGOD - toggle philosophical standpoint on this issue.\n"; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
bool believe = cDevOptions::IBelieveInGod.Toggle();
|
||
|
|
||
|
if (believe) {
|
||
|
Print("You believe in god !\n");
|
||
|
} else {
|
||
|
Print("You do NOT believe in god !\n");
|
||
|
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
//
|
||
|
// Reduce any gods to mere mortals
|
||
|
//
|
||
|
for (
|
||
|
SLNode<cPlayer> * player_node = cPlayerManager::Get_Player_Object_List()->Head();
|
||
|
player_node;
|
||
|
player_node = player_node->Next()) {
|
||
|
|
||
|
cPlayer * p_player = player_node->Data();
|
||
|
WWASSERT(p_player != NULL);
|
||
|
|
||
|
if (p_player->Invulnerable.Is_True()) {
|
||
|
p_player->Invulnerable.Set(false);
|
||
|
p_player->Mark_As_Modified();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class HideStarConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "hide_star"; }
|
||
|
virtual const char * Get_Help( void ) { return "HIDE_STAR - toggles display of the commando."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR ) {
|
||
|
RenderObjClass *ro = COMBAT_STAR->Peek_Model();
|
||
|
ro->Set_Hidden( !ro->Is_Hidden() );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class FlyStarConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "fly_star"; }
|
||
|
virtual const char * Get_Help( void ) { return "FLY_STAR - toggles fly mode for the commando."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR != NULL && (IS_SOLOPLAY || cNetwork::I_Am_God() )) {
|
||
|
COMBAT_STAR->Toggle_Fly_Mode();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class WatchConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "watch"; }
|
||
|
//virtual const char * Get_Alias( void ) { return "w"; }
|
||
|
virtual const char * Get_Help( void ) { return "WATCH <object> - show debug output of specified type."; }
|
||
|
static void Get_Verbose_Help(char * buffer, int bufsize) {
|
||
|
WWASSERT(buffer != NULL);
|
||
|
WWASSERT(bufsize >= 1000);
|
||
|
|
||
|
buffer[0] = 0;
|
||
|
strcat(buffer, "\n");
|
||
|
strcat(buffer, "Valid watch objects:\n");
|
||
|
strcat(buffer, " bandwidth (bw)\n");
|
||
|
strcat(buffer, " bandwidth_budget_out (bbo)\n");
|
||
|
//strcat(buffer, " bounty \n");
|
||
|
strcat(buffer, " building_data (bd)\n");
|
||
|
strcat(buffer, " client_fps (client_fps)\n");
|
||
|
strcat(buffer, " client_rhost_data (crd)\n");
|
||
|
strcat(buffer, " diagnostics (diag)\n");
|
||
|
strcat(buffer, " door_data (dd)\n");
|
||
|
strcat(buffer, " DSAPO_data (DSAPO_data)\n");
|
||
|
strcat(buffer, " elevator_data (ed)\n");
|
||
|
strcat(buffer, " fps (fps)\n");
|
||
|
strcat(buffer, " god (god)\n");
|
||
|
strcat(buffer, " import_states_count (isc)\n");
|
||
|
strcat(buffer, " ids (ids)\n");
|
||
|
strcat(buffer, " ip_addresses (ip)\n");
|
||
|
strcat(buffer, " last_contact (lc)\n");
|
||
|
strcat(buffer, " latency (lat)\n");
|
||
|
strcat(buffer, " list_size (ls)\n");
|
||
|
strcat(buffer, " list_packet_size (lps)\n");
|
||
|
strcat(buffer, " list_time (lt)\n");
|
||
|
//strcat(buffer, " menu_stack (ms)\n");
|
||
|
strcat(buffer, " money (money)\n");
|
||
|
strcat(buffer, " names (names)\n");
|
||
|
strcat(buffer, " object_tally (ot)\n");
|
||
|
strcat(buffer, " packets (p)\n");
|
||
|
strcat(buffer, " ping (ping)\n");
|
||
|
strcat(buffer, " powerup_data (pd)\n");
|
||
|
strcat(buffer, " priorities (pri)\n");
|
||
|
strcat(buffer, " server_rhost_data (srd)\n");
|
||
|
strcat(buffer, " soldier_data (sd)\n");
|
||
|
strcat(buffer, " spawner_data (spawn)\n");
|
||
|
strcat(buffer, " vehicle_data (vd)\n");
|
||
|
strcat(buffer, " wol (wol)\n");
|
||
|
strcat(buffer, " wol_location (wl)\n");
|
||
|
|
||
|
strcat(buffer, " PacketsSentServer (pss)\n");
|
||
|
strcat(buffer, " PacketsSentClient (psc)\n");
|
||
|
strcat(buffer, " PacketsRecdServer (prs)\n");
|
||
|
strcat(buffer, " PacketsRecdClient (prc)\n");
|
||
|
strcat(buffer, " AvgSizePacketsSentServer (aspss)\n");
|
||
|
strcat(buffer, " AvgSizePacketsSentClient (aspsc)\n");
|
||
|
strcat(buffer, " AvgSizePacketsRecdServer (asprs)\n");
|
||
|
strcat(buffer, " AvgSizePacketsRecdClient (asprc)\n");
|
||
|
strcat(buffer, " BytesSentServer (bss)\n");
|
||
|
strcat(buffer, " BytesSentClient (bsc)\n");
|
||
|
strcat(buffer, " BytesRecdServer (brs)\n");
|
||
|
strcat(buffer, " BytesRecdClient (brc)\n");
|
||
|
|
||
|
strcat(buffer, " WwnetPacketsSentServer (wpss)\n");
|
||
|
strcat(buffer, " WwnetPacketsSentClient (wpsc)\n");
|
||
|
strcat(buffer, " WwnetPacketsRecdServer (wprs)\n");
|
||
|
strcat(buffer, " WwnetPacketsRecdClient (wprc)\n");
|
||
|
strcat(buffer, " WwnetAvgSizePacketsSentServer (waspss)\n");
|
||
|
strcat(buffer, " WwnetAvgSizePacketsSentClient (waspsc)\n");
|
||
|
strcat(buffer, " WwnetAvgSizePacketsRecdServer (wasprs)\n");
|
||
|
strcat(buffer, " WwnetAvgSizePacketsRecdClient (wasprc)\n");
|
||
|
strcat(buffer, " WwnetBytesSentServer (wbss)\n");
|
||
|
strcat(buffer, " WwnetBytesSentClient (wbsc)\n");
|
||
|
strcat(buffer, " WwnetBytesRecdServer (wbrs)\n");
|
||
|
strcat(buffer, " WwnetBytesRecdClient (wbrc)\n");
|
||
|
|
||
|
}
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cMiscUtil::Is_String_Same(input, "bandwidth") ||
|
||
|
cMiscUtil::Is_String_Same(input, "bw")) {
|
||
|
cDevOptions::ShowBandwidth.Toggle();
|
||
|
//} else if (cMiscUtil::Is_String_Same(input, "bandwidth_budget_out") ||
|
||
|
// cMiscUtil::Is_String_Same(input, "bbo")) {
|
||
|
// cDevOptions::ShowBandwidthBudgetOut.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "client_fps")) {
|
||
|
cDevOptions::ShowClientFps.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "client_rhost_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "crd")) {
|
||
|
cDevOptions::ShowClientRhostData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "diagnostics") ||
|
||
|
cMiscUtil::Is_String_Same(input, "diag")) {
|
||
|
cDevOptions::ShowDiagnostics.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "gs_auth")) {
|
||
|
cDevOptions::ShowGameSpyAuthState.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "ids")) {
|
||
|
cDevOptions::ShowId.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "money")) {
|
||
|
cDevOptions::ShowMoney.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "ping")) {
|
||
|
cDevOptions::ShowPing.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "ip_addresses") ||
|
||
|
cMiscUtil::Is_String_Same(input, "ip")) {
|
||
|
cDevOptions::ShowIpAddresses.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "fps")) {
|
||
|
cDevOptions::ShowFps.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "god")) {
|
||
|
cDevOptions::ShowGodStatus.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "import_states_count") ||
|
||
|
cMiscUtil::Is_String_Same(input, "isc")) {
|
||
|
bool is_shown = cDevOptions::ShowImportStates.Toggle();
|
||
|
if (is_shown) {
|
||
|
Print("You may use RESET_ISC to reset the counts.\n");
|
||
|
}
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "import_states_count_soldiers_vehicles") ||
|
||
|
cMiscUtil::Is_String_Same(input, "iscsv")) {
|
||
|
bool is_shown = cDevOptions::ShowImportStatesSV.Toggle();
|
||
|
if (is_shown) {
|
||
|
Print("You may use RESET_ISC to reset the counts.\n");
|
||
|
}
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "latency") ||
|
||
|
cMiscUtil::Is_String_Same(input, "lat")) {
|
||
|
ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats
|
||
|
cDevOptions::ShowLatency.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "last_contact") ||
|
||
|
cMiscUtil::Is_String_Same(input, "lc")) {
|
||
|
//ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats
|
||
|
cDevOptions::ShowLastContact.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "list_size") ||
|
||
|
cMiscUtil::Is_String_Same(input, "ls")) {
|
||
|
cDevOptions::ShowListSizes.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "list_packet_size") ||
|
||
|
cMiscUtil::Is_String_Same(input, "lps")) {
|
||
|
cDevOptions::ShowListPacketSizes.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "list_time") ||
|
||
|
cMiscUtil::Is_String_Same(input, "lt")) {
|
||
|
cDevOptions::ShowListTimes.Toggle();
|
||
|
/*
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "menu_stack") ||
|
||
|
cMiscUtil::Is_String_Same(input, "ms")) {
|
||
|
cDevOptions::ShowMenuStack.Toggle();
|
||
|
*/
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "names")) {
|
||
|
if (IS_MISSION) {
|
||
|
Print("Name showing is for multiplayer only.\n");
|
||
|
} else {
|
||
|
bool on = cUserOptions::ShowNamesOnSoldier.Toggle();
|
||
|
if (on) {
|
||
|
Print("Name showing is now ON\n");
|
||
|
} else {
|
||
|
Print("Name showing is now OFF\n");
|
||
|
}
|
||
|
}
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "object_tally") ||
|
||
|
cMiscUtil::Is_String_Same(input, "ot")) {
|
||
|
cDevOptions::ShowObjectTally.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "inactive")) {
|
||
|
cDevOptions::ShowInactivePlayers.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "PacketsSentServer") || cMiscUtil::Is_String_Same(input, "pss")) {
|
||
|
cDevOptions::PacketsSentServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "PacketsSentClient") || cMiscUtil::Is_String_Same(input, "psc")) {
|
||
|
cDevOptions::PacketsSentClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "PacketsRecdServer") || cMiscUtil::Is_String_Same(input, "prs")) {
|
||
|
cDevOptions::PacketsRecdServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "PacketsRecdClient") || cMiscUtil::Is_String_Same(input, "prc")) {
|
||
|
cDevOptions::PacketsRecdClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsSentServer") || cMiscUtil::Is_String_Same(input, "aspss")) {
|
||
|
cDevOptions::AvgSizePacketsSentServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsSentClient") || cMiscUtil::Is_String_Same(input, "aspsc")) {
|
||
|
cDevOptions::AvgSizePacketsSentClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsRecdServer") || cMiscUtil::Is_String_Same(input, "asprs")) {
|
||
|
cDevOptions::AvgSizePacketsRecdServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsRecdClient") || cMiscUtil::Is_String_Same(input, "asprc")) {
|
||
|
cDevOptions::AvgSizePacketsRecdClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "BytesSentServer") || cMiscUtil::Is_String_Same(input, "bss")) {
|
||
|
cDevOptions::BytesSentServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "BytesSentClient") || cMiscUtil::Is_String_Same(input, "bsc")) {
|
||
|
cDevOptions::BytesSentClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "BytesRecdServer") || cMiscUtil::Is_String_Same(input, "brs")) {
|
||
|
cDevOptions::BytesRecdServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "BytesRecdClient") || cMiscUtil::Is_String_Same(input, "brc")) {
|
||
|
cDevOptions::BytesRecdClient.Toggle();
|
||
|
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsSentServer") || cMiscUtil::Is_String_Same(input, "wpss")) {
|
||
|
cDevOptions::WwnetPacketsSentServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsSentClient") || cMiscUtil::Is_String_Same(input, "wpsc")) {
|
||
|
cDevOptions::WwnetPacketsSentClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsRecdServer") || cMiscUtil::Is_String_Same(input, "wprs")) {
|
||
|
cDevOptions::WwnetPacketsRecdServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsRecdClient") || cMiscUtil::Is_String_Same(input, "wprc")) {
|
||
|
cDevOptions::WwnetPacketsRecdClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsSentServer") || cMiscUtil::Is_String_Same(input, "waspss")) {
|
||
|
cDevOptions::WwnetAvgSizePacketsSentServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsSentClient") || cMiscUtil::Is_String_Same(input, "waspsc")) {
|
||
|
cDevOptions::WwnetAvgSizePacketsSentClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsRecdServer") || cMiscUtil::Is_String_Same(input, "wasprs")) {
|
||
|
cDevOptions::WwnetAvgSizePacketsRecdServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsRecdClient") || cMiscUtil::Is_String_Same(input, "wasprc")) {
|
||
|
cDevOptions::WwnetAvgSizePacketsRecdClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetBytesSentServer") || cMiscUtil::Is_String_Same(input, "wbss")) {
|
||
|
cDevOptions::WwnetBytesSentServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetBytesSentClient") || cMiscUtil::Is_String_Same(input, "wbsc")) {
|
||
|
cDevOptions::WwnetBytesSentClient.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetBytesRecdServer") || cMiscUtil::Is_String_Same(input, "wbrs")) {
|
||
|
cDevOptions::WwnetBytesRecdServer.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "WwnetBytesRecdClient") || cMiscUtil::Is_String_Same(input, "wbrc")) {
|
||
|
cDevOptions::WwnetBytesRecdClient.Toggle();
|
||
|
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "priorities") ||
|
||
|
cMiscUtil::Is_String_Same(input, "pri")) {
|
||
|
cDevOptions::ShowPriorities.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "server_rhost_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "srd")) {
|
||
|
cDevOptions::ShowServerRhostData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "soldier_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "sd")) {
|
||
|
cDevOptions::ShowSoldierData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "spawner_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "spawn")) {
|
||
|
cDevOptions::ShowSpawnerData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "vehicle_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "vd")) {
|
||
|
cDevOptions::ShowVehicleData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "door_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "dd")) {
|
||
|
cDevOptions::ShowDoorData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "elevator_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "ed")) {
|
||
|
cDevOptions::ShowElevatorData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "DSAPO_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "DSAPO_data")) {
|
||
|
cDevOptions::ShowDSAPOData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "building_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "bd")) {
|
||
|
cDevOptions::ShowBuildingData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "powerup_data") ||
|
||
|
cMiscUtil::Is_String_Same(input, "pd")) {
|
||
|
cDevOptions::ShowPowerupData.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "wol_location") ||
|
||
|
cMiscUtil::Is_String_Same(input, "wl")) {
|
||
|
cDevOptions::ShowWolLocation.Toggle();
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "0")) {
|
||
|
//
|
||
|
// Turn off any watch objects
|
||
|
//
|
||
|
cDevOptions::ShowBandwidth.Set(false);
|
||
|
//cDevOptions::ShowBandwidthBudgetOut.Set(false);
|
||
|
cDevOptions::ShowDiagnostics.Set(false);
|
||
|
cDevOptions::ShowFps.Set(false);
|
||
|
cDevOptions::ShowGodStatus.Set(false);
|
||
|
//cDevOptions::ShowPacketGraphs.Set(false);
|
||
|
cDevOptions::ShowPriorities.Set(false);
|
||
|
cDevOptions::ShowLatency.Set(false);
|
||
|
cDevOptions::ShowLastContact.Set(false);
|
||
|
cDevOptions::ShowListSizes.Set(false);
|
||
|
cDevOptions::ShowListTimes.Set(false);
|
||
|
cDevOptions::ShowListPacketSizes.Set(false);
|
||
|
cDevOptions::ShowMenuStack.Set(false);
|
||
|
cDevOptions::ShowObjectTally.Set(false);
|
||
|
cDevOptions::ShowInactivePlayers.Set(false);
|
||
|
cDevOptions::ShowSoldierData.Set(false);
|
||
|
cDevOptions::ShowSpawnerData.Set(false);
|
||
|
cDevOptions::ShowVehicleData.Set(false);
|
||
|
cDevOptions::ShowDoorData.Set(false);
|
||
|
cDevOptions::ShowElevatorData.Set(false);
|
||
|
cDevOptions::ShowDSAPOData.Set(false);
|
||
|
cDevOptions::ShowBuildingData.Set(false);
|
||
|
cDevOptions::ShowPowerupData.Set(false);
|
||
|
cDevOptions::ShowImportStates.Set(false);
|
||
|
cDevOptions::ShowImportStatesSV.Set(false);
|
||
|
cDevOptions::ShowServerRhostData.Set(false);
|
||
|
cDevOptions::ShowClientRhostData.Set(false);
|
||
|
cDevOptions::ShowClientFps.Set(false);
|
||
|
cDevOptions::ShowWolLocation.Set(false);
|
||
|
cDevOptions::ShowPing.Set(false);
|
||
|
cDevOptions::ShowMoney.Set(false);
|
||
|
cDevOptions::ShowGameSpyAuthState.Set(false);
|
||
|
|
||
|
} else if (cMiscUtil::Is_String_Same(input, "")) {
|
||
|
|
||
|
cDevOptions::ShowWolLocation.Toggle();
|
||
|
|
||
|
if (Get_Text_Display()) {
|
||
|
if (cDevOptions::ShowWolLocation.Is_True())
|
||
|
{
|
||
|
char buffer[10000];
|
||
|
Get_Verbose_Help(buffer, sizeof(buffer));
|
||
|
Get_Text_Display()->Set_Verbose_Help_Text(buffer);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Get_Text_Display()->Set_Verbose_Help_Text("");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
Print("Error: no such watch object.\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SurfaceEffectsDebugConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "surface_effects_debug"; }
|
||
|
virtual const char * Get_Help( void ) { return "SURFACE_EFFECTS_DEBUG - toggles display of surface effects debug info."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
SurfaceEffectsManager::Toggle_Debug();
|
||
|
Print( "Surface Effects Debug Toggled\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SurfaceTypeOverrideConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "surface_type_override"; }
|
||
|
virtual const char * Get_Help( void ) { return "SURFACE_TYPE_OVERRIDE <int> - all surfaces forced to be given type (-1 disables)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
int type = atoi( input );
|
||
|
SurfaceEffectsManager::Set_Override_Surface_Type(type);;
|
||
|
Print( "Override Surface Type Set: %d\n",type );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SurfacePhysicsOverrideConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "surface_physics_override"; }
|
||
|
virtual const char * Get_Help( void ) { return "SURFACE_PHYSICS_OVERRIDE <friction> <drag> - force friction and drag for all surfaces (0.0 disables)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
float friction,drag;
|
||
|
if (sscanf(input, "%f %f", &friction, &drag) == 2) {
|
||
|
PhysicsConstants::Set_Override_Surface_Friction(friction);
|
||
|
PhysicsConstants::Set_Override_Surface_Drag(drag);
|
||
|
Print( "Friction set to: %f Drag set to: %f\n",friction,drag );
|
||
|
} else if (sscanf(input, "%f", &friction) == 1) {
|
||
|
PhysicsConstants::Set_Override_Surface_Friction(friction);
|
||
|
Print( "Friction set to: %f \n",friction);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SwapTeamsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "swap_teams"; }
|
||
|
virtual const char * Get_Help( void ) { return "SWAP_TEAMS - switch everyone to the opposite team (server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
//if (The_Game() != NULL && The_Game()->Is_Team_Game()) {
|
||
|
if (The_Game() != NULL) {
|
||
|
for (
|
||
|
SLNode<cPlayer> * player_node = cPlayerManager::Get_Player_Object_List()->Head();
|
||
|
player_node;
|
||
|
player_node = player_node->Next()) {
|
||
|
|
||
|
cPlayer * p_player = player_node->Data();
|
||
|
WWASSERT(p_player != NULL);
|
||
|
|
||
|
int team = p_player->Get_Player_Type();
|
||
|
|
||
|
WWASSERT(team == PLAYERTYPE_NOD || team == PLAYERTYPE_GDI);
|
||
|
|
||
|
int new_team = PLAYERTYPE_NOD;
|
||
|
if (team == PLAYERTYPE_NOD)
|
||
|
{
|
||
|
new_team = PLAYERTYPE_GDI;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
new_team = PLAYERTYPE_NOD;
|
||
|
}
|
||
|
|
||
|
p_player->Set_Player_Type(new_team);
|
||
|
|
||
|
SoldierGameObj * p_soldier = GameObjManager::Find_Soldier_Of_Client_ID(p_player->Get_Id());
|
||
|
if (p_soldier != NULL)
|
||
|
{
|
||
|
p_soldier->Set_Delete_Pending();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
**
|
||
|
*/
|
||
|
class SetStarHealthConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_star_health"; }
|
||
|
virtual const char * Get_Alias( void ){ return "ssh"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_STAR_HEALTH <strength> - sets the strength of the star."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR ) {
|
||
|
float health = atof( input );
|
||
|
DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object();
|
||
|
WWASSERT(defense != NULL);
|
||
|
if (health > defense->Get_Health_Max()) {
|
||
|
defense->Set_Health_Max( health );
|
||
|
}
|
||
|
defense->Set_Health( health );
|
||
|
Print( "Star Health set to %1.1f\n", defense->Get_Health() );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SetStarSkinConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_star_skin"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_STAR_SKIN <type> - sets the type of the star's skin."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR ) {
|
||
|
DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object();
|
||
|
defense->Set_Skin( ArmorWarheadManager::Get_Armor_Type( input ) );
|
||
|
Print( "Star Skin set to %s\n", ArmorWarheadManager::Get_Armor_Name( defense->Get_Skin() ) );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SetStarShieldStrengthConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_star_shield_strength"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_STAR_SHIELD_STRENGTH <strength> - sets the strength of the star's shield."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR ) {
|
||
|
DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object();
|
||
|
defense->Set_Shield_Strength( atof( input ) );
|
||
|
Print( "Star Shield Strength set to %1.1f\n", defense->Get_Shield_Strength() );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SetStarShieldTypeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_star_shield_type"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_STAR_SHIELD_TYPE <type> - sets the type of the star's shield."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR ) {
|
||
|
DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object();
|
||
|
defense->Set_Shield_Type( ArmorWarheadManager::Get_Armor_Type( input ) );
|
||
|
Print( "Star Sheild_Type set to %s\n", ArmorWarheadManager::Get_Armor_Name( defense->Get_Shield_Type() ) );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class BuByeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "bubye"; }
|
||
|
virtual const char * Get_Help( void ) { return "BUBYE <mindist> - kills everything but the star if they are at least mindist away."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Vector3 star_pos(0,0,0);
|
||
|
if ( COMBAT_STAR ) {
|
||
|
COMBAT_STAR->Get_Position( &star_pos );
|
||
|
}
|
||
|
float min_dist = atof( input );
|
||
|
|
||
|
int count = 0;
|
||
|
SLNode<SmartGameObj> *objnode;
|
||
|
for ( objnode = GameObjManager::Get_Smart_Game_Obj_List()->Head(); objnode; objnode = objnode->Next() ) {
|
||
|
if ( objnode->Data() != (SmartGameObj*)COMBAT_STAR ) {
|
||
|
Vector3 obj_pos;
|
||
|
objnode->Data()->Get_Position( &obj_pos );
|
||
|
obj_pos -= star_pos;
|
||
|
if ( obj_pos.Length() > min_dist ) {
|
||
|
objnode->Data()->Set_Delete_Pending();
|
||
|
count++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Print( "%d others say \"Bye Now!\"\n", count );
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class KillConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual LPCSTR Get_Name(void) {return "kill";}
|
||
|
virtual LPCSTR Get_Help(void) {return "KILL <object types> <percent=n> <id=xxxxx> - kills % of types (vehicles,soldiers,powerups,c4s,armeds,smarts,all). Server only";}
|
||
|
virtual void Activate(LPCSTR input) {
|
||
|
|
||
|
/*
|
||
|
if (!cNetwork::I_Am_Server()) {
|
||
|
Print(Get_Help());
|
||
|
return;
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
if (strcmp(input, "")) {
|
||
|
|
||
|
//
|
||
|
// C & S can both use id=xxxxxx format
|
||
|
//
|
||
|
char * p_id = ::strstr(input, "id=");
|
||
|
if (p_id != NULL) {
|
||
|
int id = -1;
|
||
|
::sscanf(p_id, "id=%d", &id);
|
||
|
if (cNetwork::I_Am_Client()) {
|
||
|
cRequestKillEvent * p_event = new cRequestKillEvent;
|
||
|
p_event->Init(id);
|
||
|
} else {
|
||
|
NetworkObjectClass * p_object = NetworkObjectMgrClass::Find_Object(id);
|
||
|
if (p_object != NULL) {
|
||
|
p_object->Set_Delete_Pending();
|
||
|
}
|
||
|
}
|
||
|
return;
|
||
|
} else if (!cNetwork::I_Am_Server()) {
|
||
|
Print(Get_Help());
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Remaining functionality only for server.
|
||
|
//
|
||
|
|
||
|
char * p_pc = strstr(input, "percent=");
|
||
|
int percent = 100;
|
||
|
if (p_pc != NULL) {
|
||
|
sscanf(p_pc, "percent=%d", &percent);
|
||
|
if (percent < 0) {
|
||
|
percent = 0;
|
||
|
} else if (percent > 100) {
|
||
|
percent = 100;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int count = 0;
|
||
|
PhysicalGameObj * p_object = NULL;
|
||
|
for (SLNode<BaseGameObj> * objnode = GameObjManager::Get_Game_Obj_List()->Head(); objnode != NULL; objnode = objnode->Next()) {
|
||
|
|
||
|
p_object = objnode->Data()->As_PhysicalGameObj();
|
||
|
if (p_object == NULL) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (p_object->As_SmartGameObj() != NULL && p_object == COMBAT_STAR) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if ((strstr(input, "vehicles") && p_object->As_VehicleGameObj() != NULL) ||
|
||
|
(strstr(input, "soldiers") && p_object->As_SoldierGameObj() != NULL) ||
|
||
|
// (strstr(input, "commandos") && p_object->As_CommandoGameObj() != NULL) ||
|
||
|
(strstr(input, "powerups") && p_object->As_PowerUpGameObj() != NULL) ||
|
||
|
(strstr(input, "c4s") && p_object->As_C4GameObj() != NULL) ||
|
||
|
(strstr(input, "armeds") && p_object->As_ArmedGameObj() != NULL) ||
|
||
|
(strstr(input, "smarts") && p_object->As_SmartGameObj() != NULL) ||
|
||
|
(strstr(input, "all")) ||
|
||
|
(strstr(input, "-9"))) {
|
||
|
|
||
|
if (rand() % 101 <= percent) {
|
||
|
objnode->Data()->Set_Delete_Pending();
|
||
|
count++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Print("Killed a total of %d objects. Hope you're happy now.\n", count);
|
||
|
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
Print("\n Object types: vehicles, soldiers, commandos, powerups, c4s, armeds, smarts, all\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SkeletonSliderDemoConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "skeleton_slider_demo"; }
|
||
|
virtual const char * Get_Help( void ) { return "SKELETON_SLIDER_DEMO - toggles the Skeleton Slider Demo."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
CombatManager::Toggle_Skeleton_Slider_Demo();
|
||
|
Print( "Skeleton Slider Demo Toggles\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SkeletonStandersConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "skeleton_standers"; }
|
||
|
virtual const char * Get_Help( void ) { return "SKELETON_STANDERS - creates 4 skeleton demos."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
char * skel_names[ 4 ] = {
|
||
|
"human_bt",
|
||
|
"human_st",
|
||
|
"human_bw",
|
||
|
"human_sw",
|
||
|
};
|
||
|
|
||
|
for ( int i = 0; i < 4; i++ ) {
|
||
|
PhysicalGameObjDef * def = (PhysicalGameObjDef *)DefinitionMgrClass::Find_Typed_Definition( "Commando", CLASSID_GAME_OBJECT_DEF_SOLDIER );
|
||
|
WWASSERT( def );
|
||
|
PhysicalGameObj * obj = (PhysicalGameObj *)def->Create();
|
||
|
WWASSERT( obj );
|
||
|
Matrix3D tm;
|
||
|
tm.Set_Translation( Vector3( 0, i*1.2f, 0 ) );
|
||
|
obj->Set_Transform( tm );
|
||
|
HTreeClass *tree = WW3DAssetManager::Get_Instance()->Get_HTree( skel_names[i] );
|
||
|
if ( tree ) {
|
||
|
Animatable3DObjClass * robj = (Animatable3DObjClass *)obj->Peek_Model();
|
||
|
robj->Set_HTree( tree );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Print( "Skeleton Standers Created\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class GroupControllerTestConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "group_controller_test"; }
|
||
|
virtual const char * Get_Help( void ) { return "GROUP_CONTROLLER_TEST - tests group controller code."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
#if 0
|
||
|
GroupControllerClass * group = new TestGroupControllerClass();
|
||
|
|
||
|
for ( int i = 0; i < 3; i++) {
|
||
|
SoldierGameObjDef * def = (SoldierGameObjDef *)DefinitionMgrClass::Find_Definition( "Nod Minigunner" );
|
||
|
WWASSERT( def );
|
||
|
SoldierGameObj * obj = (SoldierGameObj *)def->Create();
|
||
|
WWASSERT( obj );
|
||
|
obj->Set_Control_Owner( SmartGameObj::SERVER_CONTROL_OWNER );
|
||
|
obj->Set_Player_Type( PLAYERTYPE_NOD );
|
||
|
Vector3 pos( 3*i, 3*i, 1 );
|
||
|
obj->Set_Position( pos );
|
||
|
|
||
|
obj->Add_Observer( group );
|
||
|
// group->Add_Unit( obj );
|
||
|
}
|
||
|
|
||
|
GroupControllerManager::Add_Controller( group );
|
||
|
|
||
|
Print( "Group Controller Test Started\n" );
|
||
|
#else
|
||
|
Print( "Group Controller Test BROKEN\n" );
|
||
|
#endif
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class StarVisibilityConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "star_visibility"; }
|
||
|
virtual const char * Get_Help( void ) { return "STAR_VISIBILITY - toggles the logical visibility of the star."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_STAR ) {
|
||
|
COMBAT_STAR->Set_Is_Visible( !COMBAT_STAR->Is_Visible() );
|
||
|
Print( "Star is %svisible.\n", COMBAT_STAR->Is_Visible() ? "" : "in" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
class StealthConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "stealth"; }
|
||
|
virtual const char * Get_Help( void ) { return "STEALTH - toggle stealth ability on star (client only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
//if (COMBAT_STAR != NULL) {
|
||
|
// COMBAT_STAR->Toggle_Stealth();
|
||
|
// Print("Star %s stealth ability\n", COMBAT_STAR->Is_Stealth_Enabled() ? "has" : "does NOT have");
|
||
|
//}
|
||
|
if (cNetwork::I_Am_Client()) {
|
||
|
|
||
|
cPlayer * p_player = cNetwork::Get_My_Player_Object();
|
||
|
|
||
|
if (p_player == NULL) {
|
||
|
Print("Error: you don't have a player object.");
|
||
|
} else {
|
||
|
|
||
|
bool i_can_stealth = p_player->StealthEnabled.Toggle();
|
||
|
|
||
|
Print("You %s stealth ability\n", i_can_stealth ? "have" : "do NOT have");
|
||
|
|
||
|
if (cNetwork::I_Am_Only_Client())
|
||
|
{
|
||
|
cStealthEvent * p_event = new cStealthEvent;
|
||
|
p_event->Init(p_player->StealthEnabled.Get());
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
p_player->Mark_As_Modified();
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
Print("Error: you are not a client.");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
|
||
|
class ProfileConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "profile"; }
|
||
|
virtual const char * Get_Help( void ) { return "PROFILE - send a profile command (on,off,up,<#>)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Get_Console()->Profile_Command( input );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class QuickStatsConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "quick_stats"; }
|
||
|
virtual const char * Get_Alias( void ){ return "qs"; }
|
||
|
virtual const char * Get_Help( void ) { return "QUICK_STATS - stats profile + profile on."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
ConsoleFunctionManager::Parse_Input("stats profile");
|
||
|
Get_Console()->Profile_Command( "on" );
|
||
|
Get_Console()->Profile_Command( "1" );
|
||
|
Get_Console()->Profile_Command( "reset" );
|
||
|
if (ConsoleBox.Is_Exclusive()) {
|
||
|
ConsoleBox.Set_Profile_Mode(true);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ProfileCollectBeginConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "profile_collect_begin"; }
|
||
|
virtual const char * Get_Help( void ) { return "PROFILE_COLLECT_BEGIN"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWProfileManager::Begin_Collecting();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ProfileCollectEndConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "profile_collect_end"; }
|
||
|
virtual const char * Get_Help( void ) { return "PROFILE_COLLECT_END"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWProfileManager::End_Collecting("profile_log.txt");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SetTheStarConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_the_star"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_THE_STAR <id> - set the star to a different object."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
SmartGameObj * star = GameObjManager::Find_SmartGameObj( atoi( input ) );
|
||
|
if ( star != NULL && star->As_SoldierGameObj() != NULL ) {
|
||
|
CombatManager::Set_The_Star( star->As_SoldierGameObj() );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class TeleportStarConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "teleport_star"; }
|
||
|
virtual const char * Get_Help( void ) { return "TELEPORT_STAR < x, y, z > - teleport the star."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
float x,y,z;
|
||
|
::sscanf( input, "%f, %f, %f", &x, &y, &z );
|
||
|
if ( COMBAT_STAR ) {
|
||
|
COMBAT_STAR->Set_Position( Vector3( x,y,z ) );
|
||
|
Print( "Teleported Star to %f %f %f\n", x,y,z );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ScaleTimeConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "scale_time"; }
|
||
|
virtual const char * Get_Help( void ) { return "SCALE_TIME < factor > - scale time (SP only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if (IS_SOLOPLAY) {
|
||
|
float scale = atof( input );
|
||
|
if ( scale <= 0 ) {
|
||
|
scale = 1;
|
||
|
}
|
||
|
TimeManager::Set_Time_Scale( scale );
|
||
|
Print( "TimeScaling %f\n", scale );
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ParticleToggleConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "particle_toggle"; }
|
||
|
virtual const char * Get_Help( void ) { return "PARTICLE_TOGGLE - toggles particle emission on and off."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
ParticleEmitterClass::Disable_All_Emitters(!ParticleEmitterClass::Are_Emitters_Disabled());
|
||
|
if (ParticleEmitterClass::Are_Emitters_Disabled()) {
|
||
|
Print("Emitters disabled\n");
|
||
|
} else {
|
||
|
Print("Emitters enabled\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class TargetSteeringToggleConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "target_steering_toggle"; }
|
||
|
virtual const char * Get_Help( void ) { return "TARGET_STEERING_TOGGLE - toggles vehicle targetsteering."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Print( "Target Steering %s\n", VehicleGameObj::Toggle_Target_Steering() ? "ON" : "OFF" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class DazzleReloadConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "dazzle_reload"; }
|
||
|
virtual const char * Get_Help( void ) { return "DAZZLE_RELOAD - reloads the dazzle ini file (DANGEROUS!)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
FileClass * dazzle_ini_file = _TheFileFactory->Get_File("DAZZLE.INI");
|
||
|
if (dazzle_ini_file) {
|
||
|
INIClass dazzle_ini(*dazzle_ini_file);
|
||
|
DazzleRenderObjClass::Init_From_INI(&dazzle_ini);
|
||
|
_TheFileFactory->Return_File(dazzle_ini_file);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
**
|
||
|
** Class to print out data safe stats
|
||
|
**
|
||
|
** ST - 7/18/2001 2:06PM
|
||
|
*/
|
||
|
class DataSafeStatsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "safe_stats"; }
|
||
|
virtual const char * Get_Help( void ) { return "SAFE_STATS - Show data safe statistics"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
static char dump_buffer[1024];
|
||
|
GenericDataSafeClass::Dump_Safe_Stats(dump_buffer, 1024);
|
||
|
Print(dump_buffer);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#endif // WWDEBUG, development only commands
|
||
|
|
||
|
class ScreenUVBiasConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "screen_uv_bias"; }
|
||
|
//virtual const char * Get_Alias( void ) { return "sub"; }
|
||
|
virtual const char * Get_Help( void ) { return "SCREEN_UV_BIAS - toggles the half pixel bias in screen text."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3D::Set_Screen_UV_Bias( !WW3D::Is_Screen_UV_Biased() );
|
||
|
Print( "Screen UV Bias Switched\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SetBandwidthBudgetOutConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "set_bw_budget_out"; }
|
||
|
virtual const char * Get_Alias( void ) { return "sbbo"; }
|
||
|
virtual const char * Get_Help( void ) { return "SET_BW_BUDGET_OUT <bps> - set total bps budget out."; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
ULONG bbo = (ULONG) ::atol(input);
|
||
|
if (bbo > 0) {
|
||
|
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
cNetwork::PServerConnection->Set_Bandwidth_Budget_Out(bbo);
|
||
|
}
|
||
|
|
||
|
if (cNetwork::I_Am_Client()) {
|
||
|
cNetwork::PClientConnection->Set_Bandwidth_Budget_Out(bbo);
|
||
|
|
||
|
//
|
||
|
// Notify the server
|
||
|
//
|
||
|
cClientBboEvent * p_event = new cClientBboEvent;
|
||
|
p_event->Init(bbo);
|
||
|
}
|
||
|
|
||
|
int bw_scale = (bbo * 2) / 10;
|
||
|
bw_scale = (bw_scale / 1000) * 1000;
|
||
|
cBandwidthGraph::Set_Scale(bw_scale);
|
||
|
|
||
|
if (cNetwork::PClientConnection != NULL) {
|
||
|
cNetwork::PClientConnection->Init_Stats();
|
||
|
Print("Network stats for client connection reset.\n");
|
||
|
}
|
||
|
if (cNetwork::PServerConnection != NULL) {
|
||
|
cNetwork::PServerConnection->Init_Stats();
|
||
|
Print("Network stats for server connection reset.\n");
|
||
|
}
|
||
|
//ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class GameOverConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "gameover"; }
|
||
|
virtual const char * Get_Help( void ) { return "GAMEOVER - end current game (server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
bool print_help = false;
|
||
|
if (IS_MISSION) {
|
||
|
//
|
||
|
// Fail the mission
|
||
|
//
|
||
|
#ifdef WWDEBUG
|
||
|
ConsoleFunctionManager::Parse_Input("mission failure");
|
||
|
#else //WWDEBUG
|
||
|
print_help = true;
|
||
|
#endif //WWDEBUG
|
||
|
} else if (!cNetwork::I_Am_Server()) {
|
||
|
print_help = true;
|
||
|
} else {
|
||
|
if (cNetwork::I_Am_Only_Server()) {
|
||
|
Print("Terminating game on demand...\n");
|
||
|
cGameData::Set_Manual_Restart(true);
|
||
|
} else {
|
||
|
#ifdef WWDEBUG
|
||
|
cGameData::Set_Manual_Restart(true);
|
||
|
#else //WWDEBUG
|
||
|
print_help = true;
|
||
|
#endif //WWDEBUG
|
||
|
}
|
||
|
}
|
||
|
if (print_help) {
|
||
|
Print("GAMEOVER is for dedicated server only\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ToggleSortingConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_sorting"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOGGLE_SORTING - toggles WW3D sorting."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3D::Enable_Sorting(!WW3D::Is_Sorting_Enabled());
|
||
|
Print( WW3D::Is_Sorting_Enabled() ? "Sorting Enabled\n" : "Sorting Disabled\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ExtrasConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "extras"; }
|
||
|
virtual const char * Get_Help( void ) { return "EXTRAS <key>"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
#if 0
|
||
|
//int crc = CRC_String("quantifigon");//not any more, pw changed...
|
||
|
|
||
|
//WWDEBUG_SAY(("*E* %d\n", CRC_String(input)));
|
||
|
|
||
|
//bool onoff = (CRC_String(input) == 0xa8452331);
|
||
|
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(false); // Just to scramble code
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(false); // Just to scramble code
|
||
|
bool onoff = (CRC_String(input) == 65729409);
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(onoff); // Just to scramble code
|
||
|
|
||
|
if (The_Game()->IsLaddered.Is_True()) {
|
||
|
onoff = false;
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(onoff); // Just to scramble code
|
||
|
Print("Not allowed in laddered games\r\n");
|
||
|
}
|
||
|
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(onoff);
|
||
|
if (CNCPurchaseMainMenuClass::Are_Secrets_Enabled()) {
|
||
|
Print("extras ENABLED!\r\n");
|
||
|
}
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(onoff); // Just to scramble code
|
||
|
#else
|
||
|
// (gth) secrets don't need a password any more...
|
||
|
if (The_Game()->IsLaddered.Is_True()) {
|
||
|
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(false);
|
||
|
Print("Not allowed in laddered games\r\n");
|
||
|
|
||
|
} else {
|
||
|
|
||
|
CNCPurchaseMainMenuClass::Enable_Secrets(true);
|
||
|
if (CNCPurchaseMainMenuClass::Are_Secrets_Enabled()) {
|
||
|
Print("extras ENABLED!\r\n");
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class DebugDeviceConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "debug_device"; }
|
||
|
const char * Get_Alias( void ) { return "dd"; }
|
||
|
virtual const char * Get_Help( void ) { return
|
||
|
"DEBUG_DEVICE [device|on|off] - toggles the debug device (screen, mono, dbwin32, log, windows)"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
char str[128];
|
||
|
sprintf(str,"ERROR (%s)\n", input );
|
||
|
if (stricmp(input,"screen") == 0) {
|
||
|
DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_SCREEN );
|
||
|
sprintf(str, "Screen Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_SCREEN ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"mono") == 0) {
|
||
|
DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_MONO );
|
||
|
sprintf(str, "Mono Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_MONO ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"dbwin32") == 0) {
|
||
|
DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_DBWIN32 );
|
||
|
sprintf(str, "DBWin32 Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_DBWIN32 ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"log") == 0) {
|
||
|
DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_LOG );
|
||
|
sprintf(str, "Log File Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_LOG ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"windows") == 0) {
|
||
|
DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_WINDOWS );
|
||
|
sprintf(str, "Windows Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_WINDOWS ) ? "Enabled" : "Disabled" );
|
||
|
} else if (stricmp(input,"on") == 0) {
|
||
|
DebugManager::Enable_Device( (DebugManager::DebugDevice)-1 );
|
||
|
sprintf(str, "All Debug Devices Enabled\n" );
|
||
|
} else if (stricmp(input,"off") == 0) {
|
||
|
DebugManager::Disable_Device( (DebugManager::DebugDevice)-1 );
|
||
|
sprintf(str, "All Debug Devices Disabled\n" );
|
||
|
}
|
||
|
Print(str);
|
||
|
Debug_Say((str));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class AdminMessageConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "admin_message"; }
|
||
|
const char * Get_Alias( void ) { return "amsg"; }
|
||
|
virtual const char * Get_Help( void ) { return
|
||
|
"ADMIN_MESSAGE <message> - sends an admin message to all clients. Host only."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
if (cNetwork::I_Am_Server() && ::strlen(input) > 0) {
|
||
|
WideStringClass widestring;
|
||
|
widestring.Convert_From(input);
|
||
|
cScTextObj * p_message = new cScTextObj;
|
||
|
p_message->Init(widestring, TEXT_MESSAGE_PUBLIC, true, HOST_TEXT_SENDER, -1);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class MessageConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "message"; }
|
||
|
const char * Get_Alias( void ) { return "msg"; }
|
||
|
virtual const char * Get_Help( void ) { return "MESSAGE <message> - sends a chat message to all clients. Host only."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
if (cNetwork::I_Am_Server() && ::strlen(input) > 0) {
|
||
|
WideStringClass widestring(input, true);
|
||
|
cScTextObj *event_obj = new cScTextObj;
|
||
|
event_obj->Init(widestring, TEXT_MESSAGE_PUBLIC, false, HOST_TEXT_SENDER, -1);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
#ifndef FREEDEDICATEDSERVER
|
||
|
class FPSConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "fps"; }
|
||
|
const char * Get_Alias( void ) { return "fps"; }
|
||
|
virtual const char * Get_Help( void ) { return "FPS - toggle FPS display."; }
|
||
|
virtual void Activate( const char * ) {
|
||
|
// if (!cNetwork::I_Am_Server()) {
|
||
|
cDevOptions::ShowFps.Toggle();
|
||
|
// }
|
||
|
}
|
||
|
};
|
||
|
#endif //FREEDEDICATEDSERVER
|
||
|
|
||
|
#if 1
|
||
|
class ClientPhysicsOptimizationConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "client_physics_optimization"; }
|
||
|
const char * Get_Alias( void ) { return "cpo"; }
|
||
|
virtual const char * Get_Help( void ) { return "CLIENT_PHYSICS_OPTIMIZATION [0|1] - Update only visible physic objects on client."; }
|
||
|
virtual void Activate( const char * input) {
|
||
|
if (!cNetwork::I_Am_Server()) {
|
||
|
int state = 0;
|
||
|
int argcount=::sscanf(input, "%d", &state);
|
||
|
if (argcount==1) {
|
||
|
state=!!state;
|
||
|
}
|
||
|
else {
|
||
|
state=!COMBAT_SCENE->Get_Update_Only_Visible_Objects();
|
||
|
}
|
||
|
COMBAT_SCENE->Set_Update_Only_Visible_Objects(state==1);
|
||
|
|
||
|
Print( "Client physics optimization %s\n", state ? "ENABLED" : "DISABLED");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
class StatsConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "stats"; }
|
||
|
virtual const char * Get_Help( void ) { return "STATS <off|fps|dx8|star|sr_history|sr|gerd|collision|culling|physics|vehicle|ai|wol|profile|memory> - changes stats display."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
StatisticsDisplayManager::Set_Display( input );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class ResolutionConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "resolution"; }
|
||
|
virtual const char * Get_Help( void ) { return "RESOLUTION [+|-]"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
int w,h,bits;
|
||
|
bool windowed;
|
||
|
WW3D::Get_Device_Resolution(w,h,bits,windowed);
|
||
|
const RenderDeviceDescClass& desc=WW3D::Get_Render_Device_Desc();
|
||
|
const DynamicVectorClass<ResolutionDescClass> & resos=desc.Enumerate_Resolutions();
|
||
|
for (int i=0;i<resos.Count();++i) {
|
||
|
if (resos[i].Width==w && resos[i].Height==h && resos[i].BitDepth==bits) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
unsigned char sign;
|
||
|
if (sscanf (input, "%c", &sign) == 1 && (sign=='+' || sign=='-')) {
|
||
|
|
||
|
if (sign=='+') i++;
|
||
|
else i--;
|
||
|
|
||
|
if (i>=resos.Count()) i=0;
|
||
|
else if (i<0) i=resos.Count()-1;
|
||
|
|
||
|
WW3DErrorType error=WW3D::Set_Device_Resolution(
|
||
|
resos[i].Width,
|
||
|
resos[i].Height,
|
||
|
resos[i].BitDepth,
|
||
|
-1,
|
||
|
true );
|
||
|
if (error==WW3D_ERROR_OK) {
|
||
|
RectClass rect;
|
||
|
rect.Left = 0;
|
||
|
rect.Top = 0;
|
||
|
rect.Right = resos[i].Width;
|
||
|
rect.Bottom = resos[i].Height;
|
||
|
|
||
|
Render2DClass::Set_Screen_Resolution(rect);
|
||
|
Print( "Resolution changed to %d * %d, %d bits\n", resos[i].Width,resos[i].Height,resos[i].BitDepth);
|
||
|
}
|
||
|
else {
|
||
|
Print( "Failed to set resolution to %d * %d, %d bits\n", resos[i].Width,resos[i].Height,resos[i].BitDepth);
|
||
|
error=WW3D::Set_Device_Resolution(
|
||
|
w,
|
||
|
h,
|
||
|
bits,
|
||
|
-1,
|
||
|
true );
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
Print("Resolution is %d * %d, %d bits\n",w,h,bits);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class ToggleSurfaceEffectsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "toggle_surface_effects"; }
|
||
|
virtual const char * Get_Help( void ) { return "TOGGLE_SURFACE_EFFECTS - toggles surface effects."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
SurfaceEffectsManager::Enable_Effects(!SurfaceEffectsManager::Are_Effects_Enabled());
|
||
|
Print( SurfaceEffectsManager::Are_Effects_Enabled() ? "Surface Effects Enabled\n" : "Surface Effects Disabled\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// SHIPPING CONSOLE FUNCTIONS ONLY
|
||
|
// THESE MUST BE DEBUGGED! THEY ARE PRESENT IN RELEASE BUILDS!!!
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
class DisplayFindpathConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "display_findpath"; }
|
||
|
virtual const char * Get_Help( void ) { return "DISPLAY_FINDPATH - Toggles the display of findpath lines."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Toggle_Display_Findpaths();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class DonateConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
StringClass HelpText;
|
||
|
public:
|
||
|
virtual const char * Get_Name(void) {return "donate";}
|
||
|
virtual const char * Get_Help(void) {
|
||
|
HelpText.Format("DONATE <credits> <teammate> - donate money (minimum %d credits) to teammate.",
|
||
|
cDonateEvent::Get_Minimum_Acceptable_Donation());
|
||
|
return HelpText.Peek_Buffer();;
|
||
|
}
|
||
|
|
||
|
virtual void Activate(const char * input) {
|
||
|
|
||
|
int amount = 0;
|
||
|
char recipient[1000];
|
||
|
::sscanf(input, "%d %s", &amount, recipient);
|
||
|
|
||
|
cPlayer * p_me = cNetwork::Get_My_Player_Object();
|
||
|
cPlayer * p_recipient = cPlayerManager::Find_Player(recipient);
|
||
|
|
||
|
if (p_me != NULL &&
|
||
|
p_recipient != NULL &&
|
||
|
amount >= cDonateEvent::Get_Minimum_Acceptable_Donation() &&
|
||
|
(p_me->Get_Player_Type() == p_recipient->Get_Player_Type()) &&
|
||
|
p_me->Get_Money() >= amount) {
|
||
|
|
||
|
cDonateEvent * p_event = new cDonateEvent;
|
||
|
p_event->Init(amount, p_recipient->Get_Id());
|
||
|
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class DoStuffConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "do_stuff"; }
|
||
|
virtual const char * Get_Help( void ) { return "DO_STUFF - Execute some task..."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
//
|
||
|
// This command is for executing some test... put whatever code
|
||
|
// you want here...
|
||
|
//
|
||
|
|
||
|
/*
|
||
|
int recipient_id = atoi(input);
|
||
|
|
||
|
WideStringClass msg;
|
||
|
msg.Format(L"Hola amigo!");
|
||
|
|
||
|
if (cNetwork::I_Am_Client()) {
|
||
|
cCsTextObj * p_message = new cCsTextObj;
|
||
|
p_message->Init(msg, TEXT_MESSAGE_PRIVATE, cNetwork::Get_My_Id(), recipient_id);
|
||
|
} else {
|
||
|
cScTextObj * p_message = new cScTextObj;
|
||
|
p_message->Init(msg, TEXT_MESSAGE_PRIVATE, HOST_TEXT_SENDER, recipient_id);
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
//::exit(1);
|
||
|
|
||
|
//::Sleep(::atoi(input));
|
||
|
/*
|
||
|
#if 0
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
float x, y, z;
|
||
|
::sscanf(input, "%f, %f, %f", &x, &y, &z);
|
||
|
Vector3 position;
|
||
|
position.Set(Vector3(x, y, z));
|
||
|
|
||
|
cScExplosionEvent * p_event = new cScExplosionEvent;
|
||
|
p_event->Init(1, position);
|
||
|
}
|
||
|
#endif
|
||
|
*/
|
||
|
|
||
|
cPlayer * p_player = cPlayerManager::Find_Player(input);
|
||
|
if (p_player != NULL) {
|
||
|
int id = p_player->Get_Id();
|
||
|
cNetwork::Server_Kill_Connection(id);
|
||
|
cNetwork::Cleanup_After_Client(id);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
//
|
||
|
// REQUIRED for shipping dedicated server.
|
||
|
//
|
||
|
class QuitConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "quit"; }
|
||
|
virtual const char * Get_Help( void ) {
|
||
|
if (!SlaveMaster.Am_I_Slave()) {
|
||
|
return ("QUIT - End game and quit to desktop (dedicated server only).\n");
|
||
|
} else {
|
||
|
return ("QUIT - End game and restart slave server.\nTo exit without restarting use 'QUIT_SLAVE' on master server\n");
|
||
|
}
|
||
|
}
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (!IS_MISSION) {
|
||
|
if (AutoRestart.Is_Active()) {
|
||
|
AutoRestart.Set_Restart_Flag(false);
|
||
|
Set_Exit_On_Exception(true);
|
||
|
cGameData::Set_Manual_Exit(true);
|
||
|
} else {
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
if (The_Game() && The_Game()->IsDedicated.Is_True()) {
|
||
|
|
||
|
if (!SlaveMaster.Am_I_Slave()) {
|
||
|
Print("Terminating slaves on demand...\n");
|
||
|
SlaveMaster.Shutdown_Slaves();
|
||
|
}
|
||
|
|
||
|
Print("Terminating game on demand...\n");
|
||
|
AutoRestart.Set_Restart_Flag(false);
|
||
|
Set_Exit_On_Exception(true);
|
||
|
cGameData::Set_Manual_Exit(true);
|
||
|
} else {
|
||
|
Print("QUIT is for dedicated server only.\n");
|
||
|
}
|
||
|
} else {
|
||
|
/*
|
||
|
** I_Am_Server may not report true if we just started up and we aren't a server yet.
|
||
|
*/
|
||
|
if (ConsoleBox.Is_Exclusive()) {
|
||
|
AutoRestart.Set_Restart_Flag(false);
|
||
|
Set_Exit_On_Exception(true);
|
||
|
cGameData::Set_Manual_Exit(true);
|
||
|
} else {
|
||
|
Print("QUIT is for dedicated server only.\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// REQUIRED for shipping dedicated server.
|
||
|
//
|
||
|
class QuitSlaveConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "quit_slave"; }
|
||
|
virtual const char * Get_Help( void ) { return "QUIT_SLAVE slavename - Shutdown a slave server (dedicated master server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (!IS_MISSION) {
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
if (The_Game() && The_Game()->IsDedicated.Is_True()) {
|
||
|
|
||
|
if (!SlaveMaster.Am_I_Slave()) {
|
||
|
Print("Terminating slave %s on demand...\n", input);
|
||
|
if (SlaveMaster.Shutdown_Slave((char*)input)) {
|
||
|
Print("Slave %s terminated\n", input);
|
||
|
} else {
|
||
|
Print("Slave %s not found\n", input);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Print("QUIT_SLAVE is for dedicated master server only.\n");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class NetUpdateRateConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "net_update_rate"; }
|
||
|
virtual const char * Get_Alias( void ){ return "nur"; }
|
||
|
virtual const char * Get_Help( void ) { return "NET_UPDATE_RATE - set the max. net update think rate (times per second)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WWASSERT(input != NULL);
|
||
|
int rate = ::atoi(input);
|
||
|
#ifdef WWDEBUG
|
||
|
if (rate > 0) {
|
||
|
#else //WWDEBUG
|
||
|
if (rate >= 5 && rate <= 30) {
|
||
|
#endif //WWDEBUG
|
||
|
cUserOptions::NetUpdateRate.Set(rate);
|
||
|
Print( "NetUpdateRate set to %d.", rate);
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class GameInfoConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "game_info"; }
|
||
|
virtual const char * Get_Help( void ) { return "GAME_INFO - Print info about a game in progress to console box"; }
|
||
|
virtual void Activate(const char *) {
|
||
|
|
||
|
bool active = false;
|
||
|
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
|
||
|
if (The_Game() && The_Game()->IsDedicated.Is_True()) {
|
||
|
|
||
|
char upstring[256] = "?";
|
||
|
char timestr[256] = "?";
|
||
|
FILETIME creation;
|
||
|
FILETIME exit;
|
||
|
FILETIME kernel;
|
||
|
FILETIME user;
|
||
|
int ok = GetProcessTimes(GetCurrentProcess(), &creation, &exit, &kernel, &user);
|
||
|
if (ok) {
|
||
|
FILETIME local;
|
||
|
if (FileTimeToLocalFileTime(&creation, &local)) {
|
||
|
SYSTEMTIME time;
|
||
|
if (FileTimeToSystemTime(&local, &time)) {
|
||
|
GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &time, NULL, upstring, 256);
|
||
|
GetTimeFormat(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, &time, NULL, timestr, 256);
|
||
|
strcat(upstring, " - ");
|
||
|
strcat(upstring, timestr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
GameModeClass* game = GameModeManager::Find("Combat");
|
||
|
if (game && game->Is_Active()) {
|
||
|
game = GameModeManager::Find("WOL");
|
||
|
if (game && game->Is_Active()) {
|
||
|
ConsoleBox.Print("Westwood Online mode active since %s\n", upstring);
|
||
|
active = true;
|
||
|
} else {
|
||
|
game = GameModeManager::Find("LAN");
|
||
|
if (game && game->Is_Active()) {
|
||
|
if (cGameSpyAdmin::Get_Is_Server_Gamespy_Listed()) {
|
||
|
ConsoleBox.Print("GameSpy mode active since %s\n", upstring);
|
||
|
} else {
|
||
|
ConsoleBox.Print("LAN mode active since %s\n", upstring);
|
||
|
}
|
||
|
active = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (active && The_Game()) {
|
||
|
|
||
|
unsigned long time = The_Game()->Get_Time_Remaining_Seconds();
|
||
|
unsigned long seconds = time % 60;
|
||
|
unsigned long minutes = (time / 60) % 60;
|
||
|
unsigned long hours = (time / (60*60));
|
||
|
|
||
|
|
||
|
if (The_Game()->Is_Gameplay_Permitted()) {
|
||
|
ConsoleBox.Print("Gameplay in progress\n");
|
||
|
} else {
|
||
|
ConsoleBox.Print("Gameplay Pending\n");
|
||
|
}
|
||
|
|
||
|
char buf[256];
|
||
|
sprintf(buf, " Map : %s\n", The_Game()->Get_Map_Name().Peek_Buffer());
|
||
|
ConsoleBox.Print(buf);
|
||
|
|
||
|
sprintf(buf, " Time : %d.%02d.%02d\n", hours, minutes, seconds);
|
||
|
ConsoleBox.Print(buf);
|
||
|
|
||
|
sprintf(buf, " Fps : %d\n", cNetwork::Get_Fps());
|
||
|
ConsoleBox.Print(buf);
|
||
|
|
||
|
sprintf(buf, " GDI : %d/%d players %d points\n",
|
||
|
cPlayerManager::Tally_Team_Size(PLAYERTYPE_GDI),
|
||
|
The_Game()->Get_Max_Players(),
|
||
|
(int)cTeamManager::Find_Team(PLAYERTYPE_GDI)->Get_Score());
|
||
|
ConsoleBox.Print(buf);
|
||
|
|
||
|
sprintf(buf, " NOD : %d/%d players %d points\n",
|
||
|
cPlayerManager::Tally_Team_Size(PLAYERTYPE_NOD),
|
||
|
The_Game()->Get_Max_Players(),
|
||
|
(int)cTeamManager::Find_Team(PLAYERTYPE_NOD)->Get_Score());
|
||
|
ConsoleBox.Print(buf);
|
||
|
|
||
|
ConsoleBox.Print("\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class PlayerInfoConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "player_info"; }
|
||
|
virtual const char * Get_Help( void ) { return "PLAYER_INFO - Print info about players in the game to the console box"; }
|
||
|
virtual void Activate(const char *) {
|
||
|
|
||
|
if (cNetwork::I_Am_Server() && The_Game() && The_Game()->IsDedicated.Is_True() && cNetwork::PServerConnection != NULL) {
|
||
|
|
||
|
unsigned long time = TIMEGETTIME();
|
||
|
unsigned long bw = 0;
|
||
|
|
||
|
if (cNetwork::PServerConnection->Get_Num_RHosts() == 0) {
|
||
|
ConsoleBox.Print("No players\n");
|
||
|
} else {
|
||
|
|
||
|
ConsoleBox.Print("\rId Name Score Side\tPing\tAddress Kbits/s Time\n\n");
|
||
|
|
||
|
for (int i=cNetwork::PServerConnection->Get_Min_RHost() ; i <= cNetwork::PServerConnection->Get_Max_RHost() ; i++) {
|
||
|
|
||
|
cRemoteHost *client = cNetwork::PServerConnection->Get_Remote_Host(i);
|
||
|
|
||
|
if (client) {
|
||
|
cPlayer * playerptr = cPlayerManager::Find_Player(i);
|
||
|
|
||
|
if (playerptr) {
|
||
|
WideStringClass name(playerptr->Get_Name(), true);
|
||
|
StringClass short_name;
|
||
|
name.Convert_To(short_name);
|
||
|
int len = name.Get_Length();
|
||
|
char temp_name[256];
|
||
|
strcpy(temp_name, short_name.Peek_Buffer());
|
||
|
strncat(temp_name, " ", 14-len);
|
||
|
|
||
|
unsigned long dur = (time - client->Get_Creation_Time()) / 1000;
|
||
|
|
||
|
unsigned long seconds = dur % 60;
|
||
|
unsigned long minutes = (dur / 60) % 60;
|
||
|
unsigned long hours = (dur / (60*60));
|
||
|
|
||
|
bw += PacketManager.Get_Compressed_Bandwidth_Out(&client->Get_Address());
|
||
|
|
||
|
char addr_string[128];
|
||
|
sockaddr_in *addr = &client->Get_Address();
|
||
|
sprintf(addr_string, "%d.%d.%d.%d;%d", (int)(addr->sin_addr.S_un.S_un_b.s_b1),
|
||
|
(int)(addr->sin_addr.S_un.S_un_b.s_b2),
|
||
|
(int)(addr->sin_addr.S_un.S_un_b.s_b3),
|
||
|
(int)(addr->sin_addr.S_un.S_un_b.s_b4),
|
||
|
unsigned int(ntohs(addr->sin_port)));
|
||
|
int addr_string_len = strlen(addr_string);
|
||
|
char local_addr_string[128];
|
||
|
strcpy(local_addr_string, addr_string);
|
||
|
if (addr_string_len < 21) {
|
||
|
strncat(local_addr_string, " ", 21-addr_string_len);
|
||
|
}
|
||
|
|
||
|
Vector3 color = playerptr->Get_Color();
|
||
|
char buffer[256];
|
||
|
sprintf(buffer, "%3d %s%- 6d %s\t%d\t%s%- 7d %03d.%02d.%02d\n", i, temp_name,
|
||
|
(int)playerptr->Get_Score(),
|
||
|
(playerptr->Get_Player_Type() == PLAYERTYPE_NOD) ? "NOD" : "GDI",
|
||
|
(int)client->Get_Average_Internal_Pingtime_Ms(),
|
||
|
local_addr_string,
|
||
|
(int)(PacketManager.Get_Compressed_Bandwidth_Out(&client->Get_Address()) / 1024),
|
||
|
hours, minutes, seconds);
|
||
|
|
||
|
WideStringClass ws(buffer, true);
|
||
|
ConsoleBox.Add_Message(&ws, &color, true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
ConsoleBox.Print("Total current bandwidth usage for players is %d kilobits per second\n", bw / 1024);
|
||
|
}
|
||
|
} else {
|
||
|
Print("player_info is for dedicated server only\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class KickConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "kick"; }
|
||
|
virtual const char * Get_Help( void ) { return "KICK [<Nickname>|<Id>] - Kick a user from the game."; }
|
||
|
bool KickWOLUser(const WideStringClass & user_name) {
|
||
|
|
||
|
GameModeClass* game = GameModeManager::Find("WOL");
|
||
|
|
||
|
if (game && game->Is_Active()) {
|
||
|
|
||
|
if (user_name.Get_Length() > 0) {
|
||
|
WolGameModeClass* wolgame = reinterpret_cast<WolGameModeClass*>(game);
|
||
|
|
||
|
if (wolgame->Kick_Player(user_name)) {
|
||
|
StringClass smallstring(true);
|
||
|
user_name.Convert_To(smallstring);
|
||
|
ConsoleBox.Print("%s was kicked\n", smallstring.Peek_Buffer());
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
bool KickWOLUser(int id) {
|
||
|
cPlayer *player = cPlayerManager::Find_Player(id);
|
||
|
if (player) {
|
||
|
return KickWOLUser(player->Get_Name());
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
bool KickGameSpyUser(int id) {
|
||
|
if (cGameSpyAdmin::Is_Gamespy_Game()) {
|
||
|
return GameSpyBanList.Kick_Player(id);
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
bool KickGameSpyUser(const WideStringClass & user_name) {
|
||
|
if (cGameSpyAdmin::Is_Gamespy_Game()) {
|
||
|
cPlayer *player = NULL;
|
||
|
|
||
|
for (SLNode<cPlayer> *player_node = cPlayerManager::Get_Player_Object_List ()->Head ()
|
||
|
; player_node != NULL; player_node = player_node->Next ()) {
|
||
|
|
||
|
player = player_node->Data ();
|
||
|
WWASSERT (player != NULL);
|
||
|
|
||
|
if (player->Get_Is_Active().Is_False() || !player->Is_Human()) {
|
||
|
continue;
|
||
|
}
|
||
|
if (stricmp(StringClass(user_name), StringClass(player->Get_Name())) == 0) {
|
||
|
KickGameSpyUser(player->Get_Id());
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
if (!input || !(*input)) return;
|
||
|
bool kicked = false;
|
||
|
WideStringClass user_name(input, true);
|
||
|
|
||
|
kicked = KickWOLUser(user_name);
|
||
|
if (!kicked) kicked = KickGameSpyUser(user_name);
|
||
|
|
||
|
if (!kicked) {
|
||
|
// try to kick by Id number
|
||
|
// make sure this is a decimal number since atoi returns 0 on error
|
||
|
// and we don't want to kick player 0 unless they really mean to
|
||
|
const char *t = input;
|
||
|
if (!(*t)) t = NULL;
|
||
|
while (t && *t) {
|
||
|
if (!isdigit(*t)) t = NULL;
|
||
|
else t++;
|
||
|
}
|
||
|
if (t) {
|
||
|
kicked = KickWOLUser(atoi(input));
|
||
|
if (!kicked) kicked = KickGameSpyUser(atoi(input));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!kicked) {
|
||
|
ConsoleBox.Print("%s not found\n", input);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class BanConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "ban"; }
|
||
|
virtual const char * Get_Help( void ) { return "BAN [<Nickname>|<Id>] - Permanently ban a user from this server(GameSpy & WOL mode only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
GameModeClass* wolgame = GameModeManager::Find("WOL");
|
||
|
bool is_wol = false;
|
||
|
if (wolgame && wolgame->Is_Active()) {
|
||
|
is_wol = true;
|
||
|
}
|
||
|
//if (cGameSpyAdmin::Is_Gamespy_Game() && cNetwork::I_Am_Server()) {
|
||
|
if ((cGameSpyAdmin::Is_Gamespy_Game() || is_wol) && cNetwork::I_Am_Server()) {
|
||
|
|
||
|
if (!input || !(*input)) return;
|
||
|
cPlayer *player = NULL;
|
||
|
|
||
|
for (SLNode<cPlayer> *player_node = cPlayerManager::Get_Player_Object_List ()->Head ()
|
||
|
; player_node != NULL; player_node = player_node->Next ()) {
|
||
|
|
||
|
player = player_node->Data ();
|
||
|
WWASSERT (player != NULL);
|
||
|
|
||
|
if (player->Get_Is_Active().Is_False() || !player->Is_Human()) {
|
||
|
continue;
|
||
|
}
|
||
|
if (stricmp(StringClass(input), StringClass(player->Get_Name())) == 0) {
|
||
|
if (is_wol) {
|
||
|
((WolGameModeClass*)wolgame)->Ban_Player(player->Get_Name(), player->Get_Ip_Address());
|
||
|
} else {
|
||
|
if (player->Get_GameSpy_Hash_Id().Is_Empty()) {
|
||
|
GameSpyBanList.Ban_User(input);
|
||
|
} else {
|
||
|
GameSpyBanList.Ban_User(input, player->Get_GameSpy_Hash_Id());
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (player_node == NULL) {
|
||
|
// make sure this is a decimal number since atoi returns 0 on error
|
||
|
// and we don't want to kick player 0 unless they really mean to
|
||
|
const char *t = input;
|
||
|
if (!(*t)) t = NULL;
|
||
|
while (t && *t) {
|
||
|
if (!isdigit(*t)) t = NULL;
|
||
|
else t++;
|
||
|
}
|
||
|
if (t) {
|
||
|
player = cPlayerManager::Find_Player(atoi(input));
|
||
|
if (player) {
|
||
|
if (is_wol) {
|
||
|
((WolGameModeClass*)wolgame)->Ban_Player(player->Get_Name(), player->Get_Ip_Address());
|
||
|
} else {
|
||
|
if (player->Get_GameSpy_Hash_Id().Is_Empty() && !player->Get_Name().Is_Empty()) {
|
||
|
GameSpyBanList.Ban_User(StringClass(player->Get_Name()));
|
||
|
} else if (!player->Get_GameSpy_Hash_Id().Is_Empty()) {
|
||
|
GameSpyBanList.Ban_User(StringClass(player->Get_Name()), player->Get_GameSpy_Hash_Id());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
ConsoleBox.Print("%s not found\n", input);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class AllowConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "allow"; }
|
||
|
virtual const char * Get_Help( void ) { return "ALLOW [<Nickname>|<Id>] - Remove user channel ban from this server (WOL mode only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
GameModeClass* game = GameModeManager::Find("WOL");
|
||
|
|
||
|
if (!input || !(*input)) return;
|
||
|
|
||
|
if (game && game->Is_Active()) {
|
||
|
|
||
|
WideStringClass wname(input, true);
|
||
|
|
||
|
if (wname.Get_Length() > 0 && wname.Get_Length() <15) {
|
||
|
RefPtr<WWOnline::Session> wol_session = WWOnline::Session::GetInstance(false);
|
||
|
if (wol_session.IsValid()) {
|
||
|
wol_session->BanUser(wname, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class PageConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "page"; }
|
||
|
virtual const char * Get_Help( void ) { return "PAGE Nickname Message - Page a Westwood Online user."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
static unsigned long last_page = 0;
|
||
|
|
||
|
GameModeClass* wolgame = GameModeManager::Find("WOL");
|
||
|
bool is_wol = false;
|
||
|
if (wolgame && wolgame->Is_Active()) {
|
||
|
is_wol = true;
|
||
|
}
|
||
|
|
||
|
if (is_wol) {
|
||
|
RefPtr<WWOnline::Session> wol_session = WWOnline::Session::GetInstance(false);
|
||
|
if (wol_session.IsValid()) {
|
||
|
|
||
|
unsigned long time = TIMEGETTIME();
|
||
|
if (time < last_page || time - last_page > 1000) {
|
||
|
last_page = time;
|
||
|
|
||
|
char temp[1024];
|
||
|
strncpy(temp, input, 1023);
|
||
|
char *name = temp;
|
||
|
char *message = strchr(temp, ' ');
|
||
|
if (message) {
|
||
|
*message++ = 0;
|
||
|
|
||
|
if (strlen(name) && strlen(message)) {
|
||
|
WideStringClass wname(name, true);
|
||
|
WideStringClass wmessage(message, true);
|
||
|
wol_session->PageUser(wname, wmessage);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// REQUIRED for shipping dedicated server.
|
||
|
//
|
||
|
class RestartConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "restart"; }
|
||
|
virtual const char * Get_Help( void ) { return "RESTART - Quit to desktop and restart process (dedicated server only)."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
if (!IS_MISSION) {
|
||
|
if (AutoRestart.Is_Active()) {
|
||
|
AutoRestart.Set_Restart_Flag(true);
|
||
|
Set_Exit_On_Exception(true);
|
||
|
cGameData::Set_Manual_Exit(true);
|
||
|
} else {
|
||
|
if (cNetwork::I_Am_Server()) {
|
||
|
if (The_Game() && The_Game()->IsDedicated.Is_True()) {
|
||
|
|
||
|
if (SlaveMaster.Am_I_Slave() == false) {
|
||
|
Print("Terminating slaves on demand...\n");
|
||
|
SlaveMaster.Shutdown_Slaves();
|
||
|
}
|
||
|
|
||
|
Print("Restarting game on demand...\n");
|
||
|
AutoRestart.Set_Restart_Flag(true);
|
||
|
Set_Exit_On_Exception(true);
|
||
|
cGameData::Set_Manual_Exit(true);
|
||
|
} else {
|
||
|
Print("RESTART is for dedicated server only.\n");
|
||
|
}
|
||
|
} else {
|
||
|
Print("RESTART is for dedicated server only.\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class LogMeshStatsConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "log_mesh_stats"; }
|
||
|
virtual const char * Get_Help( void ) { return "LOG_MESH_STATS - log stats to debug window or file."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
TheDX8MeshRenderer.Request_Log_Statistics();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class LogTexturesConsoleFunctionClass : public ConsoleFunctionClass
|
||
|
{
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "log_textures"; }
|
||
|
virtual const char * Get_Help( void ) { return "LOG_TEXTURES - log texture statistics to debug window or file."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3DAssetManager::Get_Instance()->Log_All_Textures();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class DeviceInfoConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "device_info"; }
|
||
|
virtual const char * Get_Help( void ) { return "DEVICE_INFO - get device driver info."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
const RenderDeviceDescClass & rddesc = WW3D::Get_Render_Device_Desc();
|
||
|
Print( "Render Device: %s\n", rddesc.Get_Device_Name() );
|
||
|
Print( "Graphics Hardware: %s\n",rddesc.Get_Hardware_Name() );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
//
|
||
|
// TEMP DEBUG CODE
|
||
|
//
|
||
|
class NewTCADOConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "newtcado"; }
|
||
|
virtual const char * Get_Help( void ) { return "newtcado - Toggle new TCADO code"; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
bool is_new_tcado = cDevOptions::UseNewTCADO.Toggle();
|
||
|
Print(is_new_tcado ? "Using new TCADO.\n" : "Using old TCADO.\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class TimeOfDayConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("time_of_day");}
|
||
|
virtual const char * Get_Help (void) {return ("TIME_OF_DAY <hours [0..23]> <minutes [0..59]> - sets the time of day for the background.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
if (COMBAT_SCENE != NULL) {
|
||
|
|
||
|
unsigned hours, minutes;
|
||
|
|
||
|
if (sscanf (input, "%d %d", &hours, &minutes) == 2) {
|
||
|
if (BackgroundMgrClass::Set_Time_Of_Day (hours, minutes)) {
|
||
|
|
||
|
const float theta = (((hours * 60.0f) + minutes) / 1440.0f) * 2.0f * WWMATH_PI;
|
||
|
|
||
|
BackgroundMgrClass::Set_Light_Source_Type (BackgroundMgrClass::LIGHT_SOURCE_TYPE_SUN);
|
||
|
COMBAT_SCENE->Set_Sun_Light_Orientation (0.0f, theta + (WWMATH_PI * 1.5f));
|
||
|
Print ("Time of day changed\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class CloudsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("clouds");}
|
||
|
virtual const char * Get_Help (void) {return ("CLOUDS <cloudcover [0..1]> <gloominess [0..1]> [ramptime [0+]]");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "Clouds changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float cloudcover, gloominess, ramptime;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f %f", &cloudcover, &gloominess, &ramptime);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 2:
|
||
|
success = BackgroundMgrClass::Set_Clouds (cloudcover, gloominess);
|
||
|
break;
|
||
|
|
||
|
case 3:
|
||
|
success = BackgroundMgrClass::Set_Clouds (cloudcover, gloominess, ramptime);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class CopyLogsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("copy_logs");}
|
||
|
virtual const char * Get_Help (void) {return ("COPY_LOGS <on/off> - enable/disable error logging to network.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
if (!::stricmp(input, "on")) {
|
||
|
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int("SystemInfoLogDisable", FALSE);
|
||
|
registry.Set_Int("DisableLogCopying", FALSE);
|
||
|
|
||
|
Print("Log copying is ON.");
|
||
|
|
||
|
} else if (!::stricmp(input, "off")) {
|
||
|
|
||
|
RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG);
|
||
|
WWASSERT(registry.Is_Valid());
|
||
|
registry.Set_Int("SystemInfoLogDisable", TRUE);
|
||
|
registry.Set_Int("DisableLogCopying", TRUE);
|
||
|
|
||
|
Print("Log copying is OFF.");
|
||
|
|
||
|
} else {
|
||
|
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SkyTintConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("sky_tint");}
|
||
|
virtual const char * Get_Help (void) {return ("SKY_TINT <tintfactor [0..1]> [ramptime [0+]]");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "Sky tint changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float skytintfactor, ramptime;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f %f", &skytintfactor, &ramptime);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 1:
|
||
|
success = BackgroundMgrClass::Set_Sky_Tint (skytintfactor);
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
success = BackgroundMgrClass::Set_Sky_Tint (skytintfactor, ramptime);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class InfoDebugToggle : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "info_debug_toggle"; }
|
||
|
virtual const char * Get_Help( void ) { return "INFO_DEBUG_TOGGLE - Toggles display of debug info on object info."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
extern bool InfoDebug;
|
||
|
InfoDebug = !InfoDebug;
|
||
|
Print( "Toggled Info Debug\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class MeshRenderSnapshotFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "mesh_render_snapshot"; }
|
||
|
virtual const char * Get_Help( void ) { return "MESH_RENDER_SNAPSHOT - Logs one frame of mesh render system."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
WW3D::Activate_Snapshot(true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class UmbraToggleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name(void) { return "umbra_toggle"; }
|
||
|
virtual const char * Get_Help(void) { return "UMBRA_TOGGLE - toggles umbra culling (if compiled into this build)."; }
|
||
|
virtual void Activate(const char * input) {
|
||
|
#if (UMBRASUPPORT)
|
||
|
UmbraSupport::Enable_Umbra(!UmbraSupport::Is_Umbra_Enabled());
|
||
|
Print("Umbra %s\n",(UmbraSupport::Is_Umbra_Enabled() ? "enabled." : "disabled."));
|
||
|
#else
|
||
|
Print("Umbra support not compiled into this build.\n");
|
||
|
#endif
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class UnusedSpawnerFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "unused_spawners"; }
|
||
|
virtual const char * Get_Help( void ) { return "UNUSED_SPAWNERS - Displays the ID of spawns which have spawned nothing."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
SpawnManager::Display_Unused_Spawners();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class VipConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "vip"; }
|
||
|
virtual const char * Get_Help( void ) { return "VIP <password> - Toggle VIP mode. Client only.\n"; }
|
||
|
|
||
|
virtual void Activate( const char * input ) {
|
||
|
|
||
|
StringClass password;
|
||
|
password.Format("%s", input);
|
||
|
|
||
|
if (cNetwork::I_Am_Client()) {// && !password.Is_Empty()) {
|
||
|
|
||
|
cVipModeEvent * p_event = new cVipModeEvent;
|
||
|
p_event->Init(password);
|
||
|
|
||
|
} else {
|
||
|
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class AllowKillingHibernatingSpawnFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "allow_killing_hibernating_spawn"; }
|
||
|
virtual const char * Get_Help( void ) { return "ALLOW_KILLING_HIBERNATING_SPAWN - Toggles the global ability for spawners to kill hibernating spawn."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( SpawnManager::Toggle_Allow_Killing_Hibernating_Spawn() ) {
|
||
|
Print("Killing Hibernating Spawn Allowed\n");
|
||
|
} else {
|
||
|
Print("Killing Hibernating Spawn Disallowed\n");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class DisplayHibernatingFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "display_hibernating"; }
|
||
|
virtual const char * Get_Help( void ) { return "DISPLAY_HIBERNATING - Toggles displaying of objects begining and ending hibernation."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
extern bool _DisplayHibernating;
|
||
|
_DisplayHibernating = !_DisplayHibernating;
|
||
|
Print("Display Hibernating now %s\n", _DisplayHibernating ? "ON" : "OFF" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class HideHUDPointsFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "hide_hud_points"; }
|
||
|
virtual const char * Get_Help( void ) { return "HIDE_HUD_POINTS - Toggles displaying of points on the HUD."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
Print("HUD points toggled\n" );
|
||
|
HUDClass::Toggle_Hide_Points();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class SnapShotModeToggleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "snap_shot_mode_toggle"; }
|
||
|
virtual const char * Get_Alias( void ){ return "ssm"; }
|
||
|
virtual const char * Get_Help( void ) { return "SNAP_SHOT_MODE_TOGGLE - Toggles Snap Shot Mode."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
if ( COMBAT_CAMERA ) {
|
||
|
COMBAT_CAMERA->Set_Snap_Shot_Mode( !COMBAT_CAMERA->Is_Snap_Shot_Mode() );
|
||
|
Print( "Snap Shot Mode %s\n", COMBAT_CAMERA->Is_Snap_Shot_Mode() ? "ON" : "OFF" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class LightningConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("lightning");}
|
||
|
virtual const char * Get_Help (void) {return ("LIGHTNING <intensity [0..1]> [<start [0..1]> <end [0..1]> <heading [0..360]> <distribution [0..1]>] [ramptime [0+]] - Sets lightning.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "Lightning changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float arg0, arg1, arg2, arg3, arg4, arg5;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f %f %f %f %f", &arg0, &arg1, &arg2, &arg3, &arg4, &arg5);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 1:
|
||
|
success = BackgroundMgrClass::Set_Lightning_Intensity (arg0);
|
||
|
break;
|
||
|
|
||
|
case 5:
|
||
|
success = BackgroundMgrClass::Set_Lightning (arg0, arg1, arg2, arg3, arg4);
|
||
|
break;
|
||
|
|
||
|
case 6:
|
||
|
success = BackgroundMgrClass::Set_Lightning (arg0, arg1, arg2, arg3, arg4, arg5);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class WarBlitzConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("warblitz");}
|
||
|
virtual const char * Get_Help (void) {return ("WARBLITZ <intensity [0..1]> [<start [0..1]> <end [0..1]> <heading [0..360]> <distribution [0..1]>] [ramptime [0+]] - Sets war blitz.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "War blitz changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float arg0, arg1, arg2, arg3, arg4, arg5;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f %f %f %f %f", &arg0, &arg1, &arg2, &arg3, &arg4, &arg5);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 1:
|
||
|
success = BackgroundMgrClass::Set_War_Blitz (arg0);
|
||
|
break;
|
||
|
|
||
|
case 5:
|
||
|
success = BackgroundMgrClass::Set_War_Blitz (arg0, arg1, arg2, arg3, arg4);
|
||
|
break;
|
||
|
|
||
|
case 6:
|
||
|
success = BackgroundMgrClass::Set_War_Blitz (arg0, arg1, arg2, arg3, arg4, arg5);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class WarpConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("warp");}
|
||
|
virtual const char * Get_Help (void) {return ("WARP <player name> - warp to first other player or named player (client only).");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
if (cNetwork::I_Am_Client()) {
|
||
|
|
||
|
WideStringClass player_name;
|
||
|
player_name.Convert_From(input);
|
||
|
|
||
|
cWarpEvent * p_warp = new cWarpEvent;
|
||
|
p_warp->Init(player_name);
|
||
|
|
||
|
} else {
|
||
|
Print(Get_Help());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class WhoIsConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("whois");}
|
||
|
virtual const char * Get_Help (void) {return ("WHOIS <player name> - who the heck is this annoying bugger? (server only)\n");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
cPlayer * p_player = cPlayerManager::Find_Player(input);
|
||
|
|
||
|
if (!cNetwork::I_Am_Server() || p_player == NULL) {
|
||
|
Print(Get_Help());
|
||
|
} else {
|
||
|
|
||
|
ULONG ip = p_player->Get_Ip_Address();
|
||
|
HOSTENT * p_host = ::gethostbyaddr((char *) &ip, sizeof(ip), AF_INET);
|
||
|
char resolved_ip[100] = "";
|
||
|
if (p_host != NULL) {
|
||
|
::sprintf(resolved_ip, "(%s)", p_host->h_name);
|
||
|
}
|
||
|
|
||
|
Print("%s is at ip %s %s\n",
|
||
|
input, cNetUtil::Address_To_String(ip), resolved_ip);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class WindConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("wind");}
|
||
|
virtual const char * Get_Help (void) {return ("WIND <heading [0..360]> <speed [0+]> <variability [0..1]> [ramptime [0+]] - Sets wind.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "Wind changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float heading, speed, variability, ramptime;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f %f %f", &heading, &speed, &variability, &ramptime);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 3:
|
||
|
success = WeatherMgrClass::Set_Wind (heading, speed, variability);
|
||
|
break;
|
||
|
|
||
|
case 4:
|
||
|
success = WeatherMgrClass::Set_Wind (heading, speed, variability, ramptime);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class RainConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("rain");}
|
||
|
virtual const char * Get_Help (void) {return ("RAIN <density [0+]> [ramptime [0+]] - Sets rain.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "Rain changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float arg0, arg1;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f", &arg0, &arg1);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 1:
|
||
|
success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_RAIN, arg0);
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_RAIN, arg0, arg1);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class SnowConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("snow");}
|
||
|
virtual const char * Get_Help (void) {return ("SNOW <density [0+]> [ramptime [0+]] - Sets snow.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "Snow changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float arg0, arg1;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f", &arg0, &arg1);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 1:
|
||
|
success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_SNOW, arg0);
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_SNOW, arg0, arg1);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class AppPacketTypesResetConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name( void ) { return "app_packet_types_reset"; }
|
||
|
virtual const char * Get_Alias( void ){ return "aptr"; }
|
||
|
virtual const char * Get_Help( void ) { return "APP_PACKET_TYPES_RESET - reset app packet stats."; }
|
||
|
virtual void Activate( const char * input ) {
|
||
|
cAppPacketStats::Reset();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
class AshConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("ash");}
|
||
|
virtual const char * Get_Help (void) {return ("ASH <density [0+]> [ramptime [0+]] - Sets ash.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
|
||
|
const char *feedbackstring = "Ash changed\n";
|
||
|
|
||
|
int argcount;
|
||
|
float arg0, arg1;
|
||
|
bool success = false;
|
||
|
|
||
|
argcount = sscanf (input, "%f %f", &arg0, &arg1);
|
||
|
switch (argcount) {
|
||
|
|
||
|
case 1:
|
||
|
success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_ASH, arg0);
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_ASH, arg0, arg1);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// Do nothing.
|
||
|
break;
|
||
|
}
|
||
|
if (success) Print (feedbackstring);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
**
|
||
|
*/
|
||
|
class CinematicFreezeConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("cinematic_freeze");}
|
||
|
virtual const char * Get_Help (void) {return ("CINEMATIC_FREEZE - Toggles Cinematic Freeze.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
GameObjManager::Toggle_Cinematic_Freeze();
|
||
|
Print( "Cinematic Freeze %s\n",
|
||
|
GameObjManager::Is_Cinematic_Freeze_Active() ? "ON" : "OFF" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class EditVehicleConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("edit_vehicle");}
|
||
|
virtual const char * Get_Help (void) {return ("EDIT_VEHICLE - Edit the parameters of the currently driven vehicle.");}
|
||
|
virtual void Activate (const char *input)
|
||
|
{
|
||
|
// Only do this in single player or 1-player multiplay games
|
||
|
if (IS_SOLOPLAY || ((PTheGameData != NULL) && (PTheGameData->Get_Max_Players() == 1)) )
|
||
|
{
|
||
|
VehicleGameObj * vehicle = COMBAT_STAR->Get_Vehicle();
|
||
|
if ((vehicle != NULL) && (vehicle->Peek_Vehicle_Phys() != NULL)) {
|
||
|
VehiclePhysClass * pobj = vehicle->Peek_Vehicle_Phys();
|
||
|
|
||
|
TrackedVehicleClass * tv = pobj->As_TrackedVehicleClass();
|
||
|
WheeledVehicleClass * wv = pobj->As_WheeledVehicleClass();
|
||
|
|
||
|
if (tv != NULL) {
|
||
|
|
||
|
float wheel_radius = 0.0f;
|
||
|
for (int i=0; i<tv->Get_Wheel_Count(); i++) {
|
||
|
WheelClass * wheel = (WheelClass*)tv->Peek_Wheel(i);
|
||
|
if (wheel->Get_Flag(SuspensionElementClass::ENGINE)) {
|
||
|
wheel_radius = wheel->Get_Radius();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TrackedVehicleDefClass * def = (TrackedVehicleDefClass *)tv->Get_TrackedVehicleDef();
|
||
|
|
||
|
EditTrackedVehicleDialogClass * popup = new EditTrackedVehicleDialogClass(def,wheel_radius);
|
||
|
popup->Start_Dialog();
|
||
|
popup->Release_Ref();
|
||
|
|
||
|
} else if (wv != NULL) {
|
||
|
|
||
|
float wheel_radius = 0.0f;
|
||
|
for (int i=0; i<wv->Get_Wheel_Count(); i++) {
|
||
|
WheelClass * wheel = (WheelClass*)wv->Peek_Wheel(i);
|
||
|
if (wheel->Get_Flag(SuspensionElementClass::ENGINE)) {
|
||
|
wheel_radius = wheel->Get_Radius();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
WheeledVehicleDefClass * def = (WheeledVehicleDefClass *)wv->Get_WheeledVehicleDef();
|
||
|
EditWheeledVehicleDialogClass * popup = new EditWheeledVehicleDialogClass(def,wheel_radius);
|
||
|
popup->Start_Dialog();
|
||
|
popup->Release_Ref();
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
**
|
||
|
*/
|
||
|
class ToggleUseLetencyInterpretConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("toggle_latency_interpret");}
|
||
|
virtual const char * Get_Help (void) {return ("TOGGLE_LATENCY_INTERPRET - Toggles Latency Interpret logic.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
extern bool _UseLatencyInterpret;
|
||
|
_UseLatencyInterpret = !_UseLatencyInterpret;
|
||
|
Print( "UseLetencyInterpret %s\n",
|
||
|
_UseLatencyInterpret ? "ON" : "OFF" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
**
|
||
|
*/
|
||
|
class ToggleHitReticleConsoleFunctionClass : public ConsoleFunctionClass {
|
||
|
public:
|
||
|
virtual const char * Get_Name (void) {return ("toggle_hit_reticle");}
|
||
|
virtual const char * Get_Help (void) {return ("TOGGLE_HIT_RETICLE - Toggles the center reticle dot.");}
|
||
|
virtual void Activate (const char *input) {
|
||
|
CombatManager::Toggle_Hit_Reticle_Enabled();
|
||
|
Print( "Hit Reticle Toggled\n" );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
/*
|
||
|
** Console Function Manager
|
||
|
*/
|
||
|
DynamicVectorClass<ConsoleFunctionClass *> ConsoleFunctionManager::FunctionList;
|
||
|
|
||
|
void ConsoleFunctionManager::Init( void )
|
||
|
{
|
||
|
|
||
|
#ifdef WWDEBUG
|
||
|
//
|
||
|
// DEVELOPMENT CONSOLE FUNCTIONS ONLY
|
||
|
// ONLY PRESENT IN DEBUG AND PROFILE BUILDS
|
||
|
//
|
||
|
|
||
|
FunctionList.Add( new AllowKillingHibernatingSpawnFunctionClass() );
|
||
|
FunctionList.Add( new AmbientLightConsoleFunctionClass() );
|
||
|
FunctionList.Add( new AmmoConsoleFunctionClass() );
|
||
|
FunctionList.Add( new AppPacketTypesResetConsoleFunctionClass() );
|
||
|
FunctionList.Add( new AshConsoleFunctionClass() );
|
||
|
FunctionList.Add( new BreakExecutionConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CrashExecutionConsoleFunctionClass() );
|
||
|
FunctionList.Add( new BuByeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new BuildingStateConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CameraConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CinematicFreezeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ClearConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ClientHintFactorConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CloudsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CopyLogsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SkyTintConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CreateBotConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CreateGruntConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CreateObjectConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DazzleReloadConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DebugTypeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DefectConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DisplayFindpathConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DisplayHibernatingFunctionClass() );
|
||
|
FunctionList.Add( new DirtyCullDebugConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DonateConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DoStuffConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DSAPOResetConsoleFunctionClass() );
|
||
|
FunctionList.Add( new EnableTriangleRenderConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ExposePrelitConsoleFunctionClass() );
|
||
|
FunctionList.Add( new FlashTextureConsoleFunctionClass() );
|
||
|
FunctionList.Add( new FlyStarConsoleFunctionClass() );
|
||
|
FunctionList.Add( new FogRangeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new FogToggleConsoleFunctionClass() );
|
||
|
FunctionList.Add( new FrameTexturesConsoleFunctionClass() );
|
||
|
FunctionList.Add( new FreeWeaponsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new GiveWeaponsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new GodConsoleFunctionClass() );
|
||
|
FunctionList.Add( new IBelieveInGodConsoleFunctionClass() );
|
||
|
FunctionList.Add( new IrrelevancePenaltyConsoleFunctionClass() );
|
||
|
FunctionList.Add( new GroupControllerTestConsoleFunctionClass() );
|
||
|
FunctionList.Add( new HideStarConsoleFunctionClass() );
|
||
|
FunctionList.Add( new HideHUDPointsFunctionClass() );
|
||
|
FunctionList.Add( new InvalidateMeshCacheConsoleFunctionClass() );
|
||
|
FunctionList.Add( new InvalidateTexturesConsoleFunctionClass() );
|
||
|
FunctionList.Add( new InfoDebugToggle() );
|
||
|
FunctionList.Add( new HUDConsoleFunctionClass() );
|
||
|
FunctionList.Add( new KillConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ListConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LightModeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LightDebugToggleConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LightCalcConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LightLODConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LightningConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LrshCommandConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LogMeshStatsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new LogTexturesConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MainMenuConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MaxFacingPenaltyConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MeshDebuggerDisableMeshConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MeshDebuggerEnableConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MeshDebuggerEnableMeshConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MeshRenderSnapshotFunctionClass() );
|
||
|
FunctionList.Add( new MissionConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MoneyConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MultiHudConsoleFunctionClass() );
|
||
|
FunctionList.Add( new NextRenderConsoleFunctionClass() );
|
||
|
FunctionList.Add( new OneShotKillsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new OpenConsoleFunctionClass() );
|
||
|
FunctionList.Add( new Phys3NetConsoleFunctionClass() );
|
||
|
FunctionList.Add( new PhysicsDebugConsoleFunctionClass() );
|
||
|
FunctionList.Add( new PlayerPositionConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ProfileCollectBeginConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ProfileCollectEndConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ProjectorDebugConsoleFunctionClass() );
|
||
|
//FunctionList.Add( new RadarMaxConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RadarToggleConsoleFunctionClass() );
|
||
|
//FunctionList.Add( new RadarZoomConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RBodyNetConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RenderBackfacesConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RenderBoxesConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RenderModeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RenderModeExtraPassConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ResolutionConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RunFastConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ParticleToggleConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ProfileConsoleFunctionClass() );
|
||
|
FunctionList.Add( new QuickStatsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RainConsoleFunctionClass() );
|
||
|
//FunctionList.Add( new RshCommandConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ScaleTimeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ScoreConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SnowConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SrshCommandConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DebugObjectivesConsoleFunctionClass() );
|
||
|
FunctionList.Add( new CnCModeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new HUDHelpTextTestConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DebugEncyRevealConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DebugShowMoveVectorConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ChangeCharacterClassConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MapRevealConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ScriptTraceConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetBandwidthBudgetOutToggleConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetDesiredSleepConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetPacketDuplicationConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetPacketLatencyRangeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetPacketLossConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetSpamCountConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetStarHealthConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetStarSkinConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetStarShieldStrengthConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetStarShieldTypeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetTheStarConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShadowAttenuationConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShadowBlobTextureConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShadowCountConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShadowElevationConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShadowIntensityConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShadowPerPolyCullingConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShadowResolutionConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ShellCommandConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SkeletonSliderDemoConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SkeletonStandersConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SnapShotModeToggleFunctionClass() );
|
||
|
FunctionList.Add( new SoldierGhostDebugDisplayConsoleFunctionClass() );
|
||
|
FunctionList.Add( new StarVisibilityConsoleFunctionClass() );
|
||
|
FunctionList.Add( new StatsConsoleFunctionClass() );
|
||
|
//FunctionList.Add( new StealthConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SuicideConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SurfaceEffectsDebugConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SurfaceTypeOverrideConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SurfacePhysicsOverrideConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SwapTeamsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TargetSteeringToggleConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TeleportStarConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TextureFilterModeConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TextureMemoryCounterConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TexturingEnableConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TimeOfDayConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleAssetPreloadingConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleEmotIconsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleHitReticleConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleUseLetencyInterpretConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleSimulationConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleRenderingConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TomConsoleFunctionClass() );
|
||
|
FunctionList.Add( new UmbraToggleFunctionClass() );
|
||
|
FunctionList.Add( new UnusedSpawnerFunctionClass() );
|
||
|
FunctionList.Add( new VipConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisInvertConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisGridDisplayConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisGridDebugConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisHierarchicalConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisLockConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisSectorDisplayConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VisSectorHistoryConsoleFunctionClass() );
|
||
|
FunctionList.Add( new VblankSyncConsoleFunctionClass() );
|
||
|
FunctionList.Add( new WatchConsoleFunctionClass() );
|
||
|
FunctionList.Add( new WarBlitzConsoleFunctionClass() );
|
||
|
FunctionList.Add( new WarpConsoleFunctionClass() );
|
||
|
FunctionList.Add( new WhoIsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new WindConsoleFunctionClass() );
|
||
|
FunctionList.Add( new WOLConsoleFunctionClass() );
|
||
|
FunctionList.Add( new DataSafeStatsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new PatsDebugConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetSendFrequencyConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TogglePacketDeltasConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TogglePacketComboConsoleFunctionClass() );
|
||
|
FunctionList.Add( new TogglePacketOptConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetLatencyConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleNewClientUpdateMethodConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleBandwidthBalancerConsoleFunctionClass() );
|
||
|
FunctionList.Add( new NewTCADOConsoleFunctionClass() );
|
||
|
|
||
|
FunctionList.Add( new DebugDeviceConsoleFunctionClass() );
|
||
|
FunctionList.Add( new StatsConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleSurfaceEffectsConsoleFunctionClass() );
|
||
|
|
||
|
FunctionList.Add( new DeviceInfoConsoleFunctionClass() );
|
||
|
|
||
|
#endif // WWDEBUG (development commands)
|
||
|
|
||
|
//
|
||
|
// SHIPPING CONSOLE FUNCTIONS ONLY
|
||
|
//
|
||
|
|
||
|
FunctionList.Add( new GameOverConsoleFunctionClass() );
|
||
|
FunctionList.Add( new AdminMessageConsoleFunctionClass() );
|
||
|
FunctionList.Add( new GameInfoConsoleFunctionClass() );
|
||
|
FunctionList.Add( new KickConsoleFunctionClass() );
|
||
|
FunctionList.Add( new AllowConsoleFunctionClass() );
|
||
|
|
||
|
FunctionList.Add( new BanConsoleFunctionClass() );
|
||
|
FunctionList.Add( new MessageConsoleFunctionClass() );
|
||
|
FunctionList.Add( new PlayerInfoConsoleFunctionClass() );
|
||
|
FunctionList.Add( new QuitConsoleFunctionClass() );
|
||
|
FunctionList.Add( new QuitSlaveConsoleFunctionClass() );
|
||
|
FunctionList.Add( new RestartConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ScreenUVBiasConsoleFunctionClass() );
|
||
|
FunctionList.Add( new SetBandwidthBudgetOutConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ToggleSortingConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ExtrasConsoleFunctionClass() ); /// CHEATS? MAY NEED TO BE DEV ONLY!!!!
|
||
|
FunctionList.Add( new EditVehicleConsoleFunctionClass() );
|
||
|
FunctionList.Add( new NetUpdateRateConsoleFunctionClass() );
|
||
|
FunctionList.Add( new ClientPhysicsOptimizationConsoleFunctionClass() );
|
||
|
#ifndef FREEDEDICATEDSERVER
|
||
|
FunctionList.Add( new FPSConsoleFunctionClass() ); // Steve W wanted this.
|
||
|
#endif //FREEDEDICATEDSERVER
|
||
|
#ifdef FREEDEDICATEDSERVER
|
||
|
FunctionList.Add( new PageConsoleFunctionClass() );
|
||
|
#endif //FREEDEDICATEDSERVER
|
||
|
|
||
|
|
||
|
SystemSettings::Add_Console_Functions( FunctionList );
|
||
|
|
||
|
Sort_Function_List();
|
||
|
|
||
|
//
|
||
|
// Dump list to a file
|
||
|
//
|
||
|
Verbose_Help_File();
|
||
|
}
|
||
|
|
||
|
void ConsoleFunctionManager::Shutdown( void )
|
||
|
{
|
||
|
while ( FunctionList.Count() ) {
|
||
|
delete FunctionList[ FunctionList.Count()-1 ];
|
||
|
FunctionList.Delete( FunctionList.Count()-1 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
|
||
|
void ConsoleFunctionManager::Sort_Function_List( void )
|
||
|
{
|
||
|
// ARGH!! Bubblesort!!!
|
||
|
bool done = false;
|
||
|
int count = FunctionList.Count();
|
||
|
while ( !done ) {
|
||
|
done = true;
|
||
|
count--;
|
||
|
for ( int index = 0; index < count; index++) {
|
||
|
if ( stricmp( FunctionList[index]->Get_Name(),
|
||
|
FunctionList[index+1]->Get_Name() ) > 0 ) {
|
||
|
ConsoleFunctionClass * temp = FunctionList[index];
|
||
|
FunctionList[index] = FunctionList[index+1];
|
||
|
FunctionList[index+1] = temp;
|
||
|
done = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
|
||
|
void ConsoleFunctionManager::Help( const char * function_name )
|
||
|
{
|
||
|
char string[120];
|
||
|
|
||
|
// Eat leading spaces
|
||
|
while ( function_name && *function_name == ' ' ) {
|
||
|
function_name++;
|
||
|
}
|
||
|
|
||
|
if ( ( function_name == NULL ) || ( function_name[0] == 0 ) ) {
|
||
|
// Show name of each function...
|
||
|
Print( "------ Available commands -------\n" );
|
||
|
*string = 0;
|
||
|
for ( int index = 0; index < FunctionList.Count(); index++) {
|
||
|
ConsoleFunctionClass * function = FunctionList[index];
|
||
|
if ( *string ) {
|
||
|
strcat( string, ", " );
|
||
|
}
|
||
|
strcat( string, function->Get_Name() );
|
||
|
if ( ( strlen( string ) > (sizeof( string ) / 2) ) || (index == FunctionList.Count()-1) ) {
|
||
|
strcat( string, "\n" );
|
||
|
Print( string );
|
||
|
*string = 0;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
// Show help for a certian function
|
||
|
for ( int index = 0; index < FunctionList.Count(); index++) {
|
||
|
ConsoleFunctionClass * function = FunctionList[index];
|
||
|
if ( !stricmp( function->Get_Name(), function_name ) ) {
|
||
|
Print( function->Get_Help() );
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
Print( "Help not found for \"%s\"\n", function_name );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
int ConsoleFunctionManager::Get_Function_Count(void)
|
||
|
{
|
||
|
return FunctionList.Count();
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
void ConsoleFunctionManager::Verbose_Help_File(void)
|
||
|
{
|
||
|
//
|
||
|
// Log function list to a file
|
||
|
//
|
||
|
FILE * file = fopen("commands.txt", "w");
|
||
|
if ( file ) {
|
||
|
char buffer[500];
|
||
|
sprintf(buffer, "RENEGADE COMMANDS as at %s\n\n", cMiscUtil::Get_Text_Time());
|
||
|
fwrite(buffer, 1, strlen(buffer), file);
|
||
|
for ( int index = 0; index < FunctionList.Count(); index++) {
|
||
|
ConsoleFunctionClass * function = FunctionList[index];
|
||
|
WWASSERT(function != NULL);
|
||
|
sprintf(buffer, "%s", function->Get_Help());
|
||
|
if (function->Get_Alias() != NULL) {
|
||
|
char alias_string[100];
|
||
|
sprintf(alias_string, " (%s)", function->Get_Alias());
|
||
|
strcat(buffer, alias_string);
|
||
|
}
|
||
|
strcat(buffer, "\n");
|
||
|
fwrite(buffer, 1, strlen(buffer), file);
|
||
|
}
|
||
|
|
||
|
#ifdef WWDEBUG
|
||
|
char watch_help_buffer[5000];
|
||
|
WatchConsoleFunctionClass::Get_Verbose_Help(watch_help_buffer, sizeof(watch_help_buffer));
|
||
|
fwrite(watch_help_buffer, 1, strlen(watch_help_buffer), file);
|
||
|
#endif
|
||
|
|
||
|
fclose(file);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
void ConsoleFunctionManager::Next_Verbose_Help_Screen(void)
|
||
|
{
|
||
|
//
|
||
|
// Show name of each function on a separate line...
|
||
|
//
|
||
|
char buffer[5000];
|
||
|
buffer[0] = 0;
|
||
|
|
||
|
static int page_number = -1;
|
||
|
page_number++;
|
||
|
|
||
|
if ( page_number >= 0 ) {
|
||
|
int command_number = 0;
|
||
|
for ( int index = 0; index < FunctionList.Count(); index++) {
|
||
|
command_number++;
|
||
|
int per_page = 57;
|
||
|
if (floor(command_number / per_page) == page_number) {
|
||
|
ConsoleFunctionClass * function = FunctionList[index];
|
||
|
WWASSERT(function != NULL);
|
||
|
strcat( buffer, function->Get_Help() );
|
||
|
strcat( buffer, "\n" );
|
||
|
|
||
|
if ( index == FunctionList.Count() - 1 ) { // if this is the last line,
|
||
|
page_number = -2; // turn it off for next time
|
||
|
|
||
|
#ifdef WWDEBUG
|
||
|
//
|
||
|
// Also, show help for watch objects
|
||
|
//
|
||
|
strcat( buffer, "\n" );
|
||
|
char watch_help_buffer[10000];
|
||
|
WatchConsoleFunctionClass::Get_Verbose_Help(watch_help_buffer, sizeof(watch_help_buffer));
|
||
|
strcat( buffer, watch_help_buffer );
|
||
|
#endif // WWDEBUG
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (Get_Text_Display()) {
|
||
|
Get_Text_Display()->Set_Verbose_Help_Text( buffer );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
void ConsoleFunctionManager::Parse_Input( const char * string )
|
||
|
{
|
||
|
if (!strnicmp(string, "help", 4)) {
|
||
|
Help( string + 4 );
|
||
|
} else {
|
||
|
for ( int index = 0; index < FunctionList.Count(); index++) {
|
||
|
ConsoleFunctionClass * function = FunctionList[index];
|
||
|
|
||
|
if ( !strnicmp( string, function->Get_Name(), strlen( function->Get_Name() ) ) ) {
|
||
|
|
||
|
const char *s = string + strlen (function->Get_Name());
|
||
|
|
||
|
// The next input character must be either a string terminator or space character
|
||
|
// in order for the input string to match the function list string.
|
||
|
if ((*s == '\0') || (*s == ' ')) {
|
||
|
|
||
|
// Remove any trailing white space.
|
||
|
while (*s == ' ') s++;
|
||
|
|
||
|
function->Activate (s);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Check short-form alias too
|
||
|
// There has to be a space (or nothing) following the alias for
|
||
|
// it to match
|
||
|
//
|
||
|
if (function->Get_Alias() != NULL &&
|
||
|
strlen(function->Get_Alias()) > 0) {
|
||
|
char alias[100];
|
||
|
WWASSERT(strlen(function->Get_Alias()) < sizeof(alias));
|
||
|
strcpy(alias, function->Get_Alias());
|
||
|
int alias_len = strlen(alias);
|
||
|
int string_len = strlen(string);
|
||
|
if (!strnicmp(string, alias, alias_len) &&
|
||
|
(string_len == alias_len || string[alias_len] == ' ')) {
|
||
|
string += alias_len;
|
||
|
while ( string && *string == ' ' ) string++;
|
||
|
function->Activate( string );
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (ConsoleBox.Is_Exclusive()) {
|
||
|
Print( "\"%s\" is not a command. To send a message, use \"msg\" and \"amsg\"\n", string );
|
||
|
} else {
|
||
|
Print( "\"%s\" is not a command. To send a message, Use F2 and F3\n", string );
|
||
|
}
|
||
|
Print( "For a list of available commands, use the \"help\" command !\n" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool ConsoleFunctionManager::Get_Command_Suggestion
|
||
|
(
|
||
|
const char * input, // what user has typed,
|
||
|
const char * cur_suggestion, // last suggestion we gave (move to next if not null)
|
||
|
char * set_suggestion, // copy suggestion into this string
|
||
|
char * set_help, // copy help into this string
|
||
|
int len // don't copy more than this many characters.
|
||
|
)
|
||
|
{
|
||
|
ConsoleFunctionClass * function = NULL;
|
||
|
int node_index = 0;
|
||
|
|
||
|
/*
|
||
|
** If user is passing in a 'cur_suggestion', then we need to first find that
|
||
|
** function in the list and search past it. If we don't find a suggestion, we
|
||
|
** will drop through and search from the head of the list.
|
||
|
*/
|
||
|
if (cur_suggestion != NULL) {
|
||
|
|
||
|
node_index = Find_Function_Node(cur_suggestion);
|
||
|
|
||
|
/*
|
||
|
** Try to find a suggestion after this node.
|
||
|
*/
|
||
|
if (node_index != -1) {
|
||
|
function = Find_Command_Suggestion(input,node_index+1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** Find a suggestion starting at the head of the list
|
||
|
*/
|
||
|
if (function == NULL) {
|
||
|
function = Find_Command_Suggestion(input,0);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** If we found a suggestion, copy its command into 'set_suggestion' and its help
|
||
|
** into 'set_help'
|
||
|
*/
|
||
|
if (function != NULL) {
|
||
|
if (set_suggestion != NULL) {
|
||
|
strncpy(set_suggestion,function->Get_Name(),len);
|
||
|
}
|
||
|
if (set_help != NULL) {
|
||
|
strncpy(set_help,function->Get_Help(),len);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
int ConsoleFunctionManager::Find_Function_Node(const char * name)
|
||
|
{
|
||
|
for ( int index = 0; index < FunctionList.Count(); index++) {
|
||
|
ConsoleFunctionClass * function = FunctionList[index];
|
||
|
if (stricmp(name,function->Get_Name()) == 0) {
|
||
|
return index;
|
||
|
}
|
||
|
}
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
ConsoleFunctionClass * ConsoleFunctionManager::Find_Command_Suggestion
|
||
|
(
|
||
|
const char * input, // incomplete function name
|
||
|
int start_index // node to start searching from
|
||
|
)
|
||
|
{
|
||
|
for ( int index = start_index; index < FunctionList.Count(); index++) {
|
||
|
ConsoleFunctionClass * function = FunctionList[index];
|
||
|
if (_strnicmp(input,function->Get_Name(),strlen(input)) == 0) {
|
||
|
return function;
|
||
|
}
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
void ConsoleFunctionManager::Print( const char *format, ... )
|
||
|
{
|
||
|
va_list arg_list;
|
||
|
va_start (arg_list, format);
|
||
|
StringClass string;
|
||
|
string.Format_Args( format, arg_list );
|
||
|
if (Get_Text_Display()) {
|
||
|
WWASSERT( Get_Text_Display() );
|
||
|
Get_Text_Display()->Print_System( string );
|
||
|
}
|
||
|
ConsoleBox.Print(string.Peek_Buffer());
|
||
|
va_end (arg_list);
|
||
|
}
|
||
|
|