/* <ada23> ../cstrike/dlls/gamerules.cpp:157 */ NOBODY __declspec(naked) CGameRules *InstallGameRules(void) { __asm { jmp pInstallGameRules } #if 0 SERVER_COMMAND("exec game.cfg\n"); SERVER_EXECUTE(); if (!gpGlobals->deathmatch) { return new CHalfLifeTraining; } return new CHalfLifeMultiplay; #endif }
// called by ClientKill and DeadThink void respawn(entvars_t* pev, BOOL fCopyCorpse) { if (gpGlobals->coop || gpGlobals->deathmatch) { if ( fCopyCorpse ) { // make a copy of the dead body for appearances sake CopyToBodyQue(pev); } // respawn player GetClassPtr( (CBasePlayer *)pev)->Spawn( ); } else { // restart the entire server SERVER_COMMAND("reload\n"); } }
CGameRules *InstallGameRules( void ) { SERVER_COMMAND( "exec game.cfg\n" ); SERVER_EXECUTE( ); if ( !gpGlobals->deathmatch ) { // generic half-life return new CHalfLifeRules; } else { // Discwar's always in teamplay mode. //CVAR_SET_FLOAT( "mp_teamplay", 1 ); //return new CHalfLifeTeamplay; return new CHalfLifeMultiplay; } }
// // Doors not tied to anything (e.g. button, another door) can be touched, to make them activate. // void CBaseDoor::DoorTouch( CBaseEntity *pOther ) { entvars_t* pevToucher = pOther->pev; //EDIT: si estamos tocando la puerta, mandar mensaje y terminar funcion if ( FBitSet ( pev->spawnflags, SF_DOOR_USE_ONLY ) )//si tiene flag "solo uso" { if ( pOther->IsPlayer())//si el que la toca es un jugador { if (FStringNull(pev->targetname))//si tiene vacio el campo de "nombre" { ClientPrint(pOther->pev, HUD_PRINTCENTER, "#PressUseForOpen"); //digamos al cliente que presione E SERVER_COMMAND("neardoor 1\n"); return;//terminar } } } // Ignore touches by anything but players if (!FClassnameIs(pevToucher, "player")) return; // If door has master, and it's not ready to trigger, // play 'locked' sound if (m_sMaster && !UTIL_IsMasterTriggered(m_sMaster, pOther)) PlayLockSounds(pev, &m_ls, TRUE, FALSE); // If door is somebody's target, then touching does nothing. // You have to activate the owner (e.g. button). if (!FStringNull(pev->targetname)) { // play locked sound PlayLockSounds(pev, &m_ls, TRUE, FALSE); return; } m_hActivator = pOther;// remember who activated the door if (DoorActivate( )) SetTouch( NULL ); // Temporarily disable the touch function, until movement is finished. }
void ServerActivate( edict_t *pEdictList, int edictCount, int clientMax ) { int i; CBaseEntity *pClass; // Every call to ServerActivate should be matched by a call to ServerDeactivate g_serveractive = 1; // Clients have not been initialized yet for ( i = 0; i < edictCount; i++ ) { if ( pEdictList[i].free ) continue; // Clients aren't necessarily initialized until ClientPutInServer() if ( i < clientMax || !pEdictList[i].pvPrivateData ) continue; pClass = CBaseEntity::Instance( &pEdictList[i] ); // Activate this entity if it's got a class & isn't dormant if ( pClass && !(pClass->pev->flags & FL_DORMANT) ) { pClass->Activate(); } else { ALERT( at_console, "Can't instance %s\n", STRING(pEdictList[i].v.classname) ); } } // Link user messages here to make sure first client can get them... LinkUserMessages(); // Set max speed SERVER_COMMAND( "sv_maxspeed 320\n" ); // Reset Arena Count g_iNextArenaGroupInfo = 0; }
CGameRules *InstallGameRules( void ) { SERVER_COMMAND( "exec game.rc\n" ); g_engfuncs.pfnServerExecute(); ALERT( at_aiconsole, "InstallGameRules\n" ); if ( !gpGlobals->deathmatch ) { // generic half-life g_teamplay = 0; return new CHalfLifeRules; } else { if( CVAR_GET_FLOAT( "mp_teamplay" ) > 0 ) { // teamplay g_teamplay = 1; return new CHalfLifeTeamplay; } if ((int)gpGlobals->deathmatch == 1) { // vanilla deathmatch g_teamplay = 0; return new CHalfLifeMultiplay; } else { // vanilla deathmatch?? g_teamplay = 0; return new CHalfLifeMultiplay; } } }
CHalfLifeMultiplay :: CHalfLifeMultiplay() { g_VoiceGameMgr.Init(&g_GameMgrHelper, gpGlobals->maxClients); RefreshSkillData(); m_flIntermissionEndTime = 0; g_flIntermissionStartTime = 0; // 11/8/98 // Modified by YWB: Server .cfg file is now a cvar, so that // server ops can run multiple game servers, with different server .cfg files, // from a single installed directory. // Mapcyclefile is already a cvar. // 3/31/99 // Added lservercfg file cvar, since listen and dedicated servers should not // share a single config file. (sjb) if ( IS_DEDICATED_SERVER() ) { // this code has been moved into engine, to only run server.cfg once } else { // listen server char *lservercfgfile = (char *)CVAR_GET_STRING( "lservercfgfile" ); if ( lservercfgfile && lservercfgfile[0] ) { char szCommand[256]; ALERT( at_console, "Executing listen server config file\n" ); sprintf( szCommand, "exec %s\n", lservercfgfile ); SERVER_COMMAND( szCommand ); } } }
// Register your console variables here // This gets called one time when the game is initialied void GameDLLInit( void ) { // Register cvars here: /* CRASH FORT: */ Cam::OnInit(); g_psv_gravity = CVAR_GET_POINTER( "sv_gravity" ); g_psv_aim = CVAR_GET_POINTER( "sv_aim" ); g_footsteps = CVAR_GET_POINTER( "mp_footsteps" ); CVAR_REGISTER (&displaysoundlist); CVAR_REGISTER( &allow_spectators ); CVAR_REGISTER (&teamplay); CVAR_REGISTER (&fraglimit); CVAR_REGISTER (&timelimit); CVAR_REGISTER (&fragsleft); CVAR_REGISTER (&timeleft); CVAR_REGISTER (&friendlyfire); CVAR_REGISTER (&falldamage); CVAR_REGISTER (&weaponstay); CVAR_REGISTER (&forcerespawn); CVAR_REGISTER (&flashlight); CVAR_REGISTER (&aimcrosshair); CVAR_REGISTER (&decalfrequency); CVAR_REGISTER (&teamlist); CVAR_REGISTER (&teamoverride); CVAR_REGISTER (&defaultteam); CVAR_REGISTER (&allowmonsters); CVAR_REGISTER (&mp_chattime); // REGISTER CVARS FOR SKILL LEVEL STUFF // Agrunt CVAR_REGISTER ( &sk_agrunt_health1 );// {"sk_agrunt_health1","0"}; CVAR_REGISTER ( &sk_agrunt_health2 );// {"sk_agrunt_health2","0"}; CVAR_REGISTER ( &sk_agrunt_health3 );// {"sk_agrunt_health3","0"}; CVAR_REGISTER ( &sk_agrunt_dmg_punch1 );// {"sk_agrunt_dmg_punch1","0"}; CVAR_REGISTER ( &sk_agrunt_dmg_punch2 );// {"sk_agrunt_dmg_punch2","0"}; CVAR_REGISTER ( &sk_agrunt_dmg_punch3 );// {"sk_agrunt_dmg_punch3","0"}; // Apache CVAR_REGISTER ( &sk_apache_health1 );// {"sk_apache_health1","0"}; CVAR_REGISTER ( &sk_apache_health2 );// {"sk_apache_health2","0"}; CVAR_REGISTER ( &sk_apache_health3 );// {"sk_apache_health3","0"}; // Barney CVAR_REGISTER ( &sk_barney_health1 );// {"sk_barney_health1","0"}; CVAR_REGISTER ( &sk_barney_health2 );// {"sk_barney_health2","0"}; CVAR_REGISTER ( &sk_barney_health3 );// {"sk_barney_health3","0"}; // Bullsquid CVAR_REGISTER ( &sk_bullsquid_health1 );// {"sk_bullsquid_health1","0"}; CVAR_REGISTER ( &sk_bullsquid_health2 );// {"sk_bullsquid_health2","0"}; CVAR_REGISTER ( &sk_bullsquid_health3 );// {"sk_bullsquid_health3","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_bite1 );// {"sk_bullsquid_dmg_bite1","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_bite2 );// {"sk_bullsquid_dmg_bite2","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_bite3 );// {"sk_bullsquid_dmg_bite3","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_whip1 );// {"sk_bullsquid_dmg_whip1","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_whip2 );// {"sk_bullsquid_dmg_whip2","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_whip3 );// {"sk_bullsquid_dmg_whip3","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_spit1 );// {"sk_bullsquid_dmg_spit1","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_spit2 );// {"sk_bullsquid_dmg_spit2","0"}; CVAR_REGISTER ( &sk_bullsquid_dmg_spit3 );// {"sk_bullsquid_dmg_spit3","0"}; CVAR_REGISTER ( &sk_bigmomma_health_factor1 );// {"sk_bigmomma_health_factor1","1.0"}; CVAR_REGISTER ( &sk_bigmomma_health_factor2 );// {"sk_bigmomma_health_factor2","1.0"}; CVAR_REGISTER ( &sk_bigmomma_health_factor3 );// {"sk_bigmomma_health_factor3","1.0"}; CVAR_REGISTER ( &sk_bigmomma_dmg_slash1 );// {"sk_bigmomma_dmg_slash1","50"}; CVAR_REGISTER ( &sk_bigmomma_dmg_slash2 );// {"sk_bigmomma_dmg_slash2","50"}; CVAR_REGISTER ( &sk_bigmomma_dmg_slash3 );// {"sk_bigmomma_dmg_slash3","50"}; CVAR_REGISTER ( &sk_bigmomma_dmg_blast1 );// {"sk_bigmomma_dmg_blast1","100"}; CVAR_REGISTER ( &sk_bigmomma_dmg_blast2 );// {"sk_bigmomma_dmg_blast2","100"}; CVAR_REGISTER ( &sk_bigmomma_dmg_blast3 );// {"sk_bigmomma_dmg_blast3","100"}; CVAR_REGISTER ( &sk_bigmomma_radius_blast1 );// {"sk_bigmomma_radius_blast1","250"}; CVAR_REGISTER ( &sk_bigmomma_radius_blast2 );// {"sk_bigmomma_radius_blast2","250"}; CVAR_REGISTER ( &sk_bigmomma_radius_blast3 );// {"sk_bigmomma_radius_blast3","250"}; // Gargantua CVAR_REGISTER ( &sk_gargantua_health1 );// {"sk_gargantua_health1","0"}; CVAR_REGISTER ( &sk_gargantua_health2 );// {"sk_gargantua_health2","0"}; CVAR_REGISTER ( &sk_gargantua_health3 );// {"sk_gargantua_health3","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_slash1 );// {"sk_gargantua_dmg_slash1","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_slash2 );// {"sk_gargantua_dmg_slash2","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_slash3 );// {"sk_gargantua_dmg_slash3","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_fire1 );// {"sk_gargantua_dmg_fire1","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_fire2 );// {"sk_gargantua_dmg_fire2","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_fire3 );// {"sk_gargantua_dmg_fire3","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_stomp1 );// {"sk_gargantua_dmg_stomp1","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_stomp2 );// {"sk_gargantua_dmg_stomp2","0"}; CVAR_REGISTER ( &sk_gargantua_dmg_stomp3 );// {"sk_gargantua_dmg_stomp3","0"}; // Hassassin CVAR_REGISTER ( &sk_hassassin_health1 );// {"sk_hassassin_health1","0"}; CVAR_REGISTER ( &sk_hassassin_health2 );// {"sk_hassassin_health2","0"}; CVAR_REGISTER ( &sk_hassassin_health3 );// {"sk_hassassin_health3","0"}; // Headcrab CVAR_REGISTER ( &sk_headcrab_health1 );// {"sk_headcrab_health1","0"}; CVAR_REGISTER ( &sk_headcrab_health2 );// {"sk_headcrab_health2","0"}; CVAR_REGISTER ( &sk_headcrab_health3 );// {"sk_headcrab_health3","0"}; CVAR_REGISTER ( &sk_headcrab_dmg_bite1 );// {"sk_headcrab_dmg_bite1","0"}; CVAR_REGISTER ( &sk_headcrab_dmg_bite2 );// {"sk_headcrab_dmg_bite2","0"}; CVAR_REGISTER ( &sk_headcrab_dmg_bite3 );// {"sk_headcrab_dmg_bite3","0"}; // Hgrunt CVAR_REGISTER ( &sk_hgrunt_health1 );// {"sk_hgrunt_health1","0"}; CVAR_REGISTER ( &sk_hgrunt_health2 );// {"sk_hgrunt_health2","0"}; CVAR_REGISTER ( &sk_hgrunt_health3 );// {"sk_hgrunt_health3","0"}; CVAR_REGISTER ( &sk_hgrunt_kick1 );// {"sk_hgrunt_kick1","0"}; CVAR_REGISTER ( &sk_hgrunt_kick2 );// {"sk_hgrunt_kick2","0"}; CVAR_REGISTER ( &sk_hgrunt_kick3 );// {"sk_hgrunt_kick3","0"}; CVAR_REGISTER ( &sk_hgrunt_pellets1 ); CVAR_REGISTER ( &sk_hgrunt_pellets2 ); CVAR_REGISTER ( &sk_hgrunt_pellets3 ); CVAR_REGISTER ( &sk_hgrunt_gspeed1 ); CVAR_REGISTER ( &sk_hgrunt_gspeed2 ); CVAR_REGISTER ( &sk_hgrunt_gspeed3 ); // Houndeye CVAR_REGISTER ( &sk_houndeye_health1 );// {"sk_houndeye_health1","0"}; CVAR_REGISTER ( &sk_houndeye_health2 );// {"sk_houndeye_health2","0"}; CVAR_REGISTER ( &sk_houndeye_health3 );// {"sk_houndeye_health3","0"}; CVAR_REGISTER ( &sk_houndeye_dmg_blast1 );// {"sk_houndeye_dmg_blast1","0"}; CVAR_REGISTER ( &sk_houndeye_dmg_blast2 );// {"sk_houndeye_dmg_blast2","0"}; CVAR_REGISTER ( &sk_houndeye_dmg_blast3 );// {"sk_houndeye_dmg_blast3","0"}; // ISlave CVAR_REGISTER ( &sk_islave_health1 );// {"sk_islave_health1","0"}; CVAR_REGISTER ( &sk_islave_health2 );// {"sk_islave_health2","0"}; CVAR_REGISTER ( &sk_islave_health3 );// {"sk_islave_health3","0"}; CVAR_REGISTER ( &sk_islave_dmg_claw1 );// {"sk_islave_dmg_claw1","0"}; CVAR_REGISTER ( &sk_islave_dmg_claw2 );// {"sk_islave_dmg_claw2","0"}; CVAR_REGISTER ( &sk_islave_dmg_claw3 );// {"sk_islave_dmg_claw3","0"}; CVAR_REGISTER ( &sk_islave_dmg_clawrake1 );// {"sk_islave_dmg_clawrake1","0"}; CVAR_REGISTER ( &sk_islave_dmg_clawrake2 );// {"sk_islave_dmg_clawrake2","0"}; CVAR_REGISTER ( &sk_islave_dmg_clawrake3 );// {"sk_islave_dmg_clawrake3","0"}; CVAR_REGISTER ( &sk_islave_dmg_zap1 );// {"sk_islave_dmg_zap1","0"}; CVAR_REGISTER ( &sk_islave_dmg_zap2 );// {"sk_islave_dmg_zap2","0"}; CVAR_REGISTER ( &sk_islave_dmg_zap3 );// {"sk_islave_dmg_zap3","0"}; // Icthyosaur CVAR_REGISTER ( &sk_ichthyosaur_health1 );// {"sk_ichthyosaur_health1","0"}; CVAR_REGISTER ( &sk_ichthyosaur_health2 );// {"sk_ichthyosaur_health2","0"}; CVAR_REGISTER ( &sk_ichthyosaur_health3 );// {"sk_ichthyosaur_health3","0"}; CVAR_REGISTER ( &sk_ichthyosaur_shake1 );// {"sk_ichthyosaur_health3","0"}; CVAR_REGISTER ( &sk_ichthyosaur_shake2 );// {"sk_ichthyosaur_health3","0"}; CVAR_REGISTER ( &sk_ichthyosaur_shake3 );// {"sk_ichthyosaur_health3","0"}; // Leech CVAR_REGISTER ( &sk_leech_health1 );// {"sk_leech_health1","0"}; CVAR_REGISTER ( &sk_leech_health2 );// {"sk_leech_health2","0"}; CVAR_REGISTER ( &sk_leech_health3 );// {"sk_leech_health3","0"}; CVAR_REGISTER ( &sk_leech_dmg_bite1 );// {"sk_leech_dmg_bite1","0"}; CVAR_REGISTER ( &sk_leech_dmg_bite2 );// {"sk_leech_dmg_bite2","0"}; CVAR_REGISTER ( &sk_leech_dmg_bite3 );// {"sk_leech_dmg_bite3","0"}; // Controller CVAR_REGISTER ( &sk_controller_health1 ); CVAR_REGISTER ( &sk_controller_health2 ); CVAR_REGISTER ( &sk_controller_health3 ); CVAR_REGISTER ( &sk_controller_dmgzap1 ); CVAR_REGISTER ( &sk_controller_dmgzap2 ); CVAR_REGISTER ( &sk_controller_dmgzap3 ); CVAR_REGISTER ( &sk_controller_speedball1 ); CVAR_REGISTER ( &sk_controller_speedball2 ); CVAR_REGISTER ( &sk_controller_speedball3 ); CVAR_REGISTER ( &sk_controller_dmgball1 ); CVAR_REGISTER ( &sk_controller_dmgball2 ); CVAR_REGISTER ( &sk_controller_dmgball3 ); // Nihilanth CVAR_REGISTER ( &sk_nihilanth_health1 );// {"sk_nihilanth_health1","0"}; CVAR_REGISTER ( &sk_nihilanth_health2 );// {"sk_nihilanth_health2","0"}; CVAR_REGISTER ( &sk_nihilanth_health3 );// {"sk_nihilanth_health3","0"}; CVAR_REGISTER ( &sk_nihilanth_zap1 ); CVAR_REGISTER ( &sk_nihilanth_zap2 ); CVAR_REGISTER ( &sk_nihilanth_zap3 ); // Scientist CVAR_REGISTER ( &sk_scientist_health1 );// {"sk_scientist_health1","0"}; CVAR_REGISTER ( &sk_scientist_health2 );// {"sk_scientist_health2","0"}; CVAR_REGISTER ( &sk_scientist_health3 );// {"sk_scientist_health3","0"}; // Snark CVAR_REGISTER ( &sk_snark_health1 );// {"sk_snark_health1","0"}; CVAR_REGISTER ( &sk_snark_health2 );// {"sk_snark_health2","0"}; CVAR_REGISTER ( &sk_snark_health3 );// {"sk_snark_health3","0"}; CVAR_REGISTER ( &sk_snark_dmg_bite1 );// {"sk_snark_dmg_bite1","0"}; CVAR_REGISTER ( &sk_snark_dmg_bite2 );// {"sk_snark_dmg_bite2","0"}; CVAR_REGISTER ( &sk_snark_dmg_bite3 );// {"sk_snark_dmg_bite3","0"}; CVAR_REGISTER ( &sk_snark_dmg_pop1 );// {"sk_snark_dmg_pop1","0"}; CVAR_REGISTER ( &sk_snark_dmg_pop2 );// {"sk_snark_dmg_pop2","0"}; CVAR_REGISTER ( &sk_snark_dmg_pop3 );// {"sk_snark_dmg_pop3","0"}; // Zombie CVAR_REGISTER ( &sk_zombie_health1 );// {"sk_zombie_health1","0"}; CVAR_REGISTER ( &sk_zombie_health2 );// {"sk_zombie_health3","0"}; CVAR_REGISTER ( &sk_zombie_health3 );// {"sk_zombie_health3","0"}; CVAR_REGISTER ( &sk_zombie_dmg_one_slash1 );// {"sk_zombie_dmg_one_slash1","0"}; CVAR_REGISTER ( &sk_zombie_dmg_one_slash2 );// {"sk_zombie_dmg_one_slash2","0"}; CVAR_REGISTER ( &sk_zombie_dmg_one_slash3 );// {"sk_zombie_dmg_one_slash3","0"}; CVAR_REGISTER ( &sk_zombie_dmg_both_slash1 );// {"sk_zombie_dmg_both_slash1","0"}; CVAR_REGISTER ( &sk_zombie_dmg_both_slash2 );// {"sk_zombie_dmg_both_slash2","0"}; CVAR_REGISTER ( &sk_zombie_dmg_both_slash3 );// {"sk_zombie_dmg_both_slash3","0"}; //Turret CVAR_REGISTER ( &sk_turret_health1 );// {"sk_turret_health1","0"}; CVAR_REGISTER ( &sk_turret_health2 );// {"sk_turret_health2","0"}; CVAR_REGISTER ( &sk_turret_health3 );// {"sk_turret_health3","0"}; // MiniTurret CVAR_REGISTER ( &sk_miniturret_health1 );// {"sk_miniturret_health1","0"}; CVAR_REGISTER ( &sk_miniturret_health2 );// {"sk_miniturret_health2","0"}; CVAR_REGISTER ( &sk_miniturret_health3 );// {"sk_miniturret_health3","0"}; // Sentry Turret CVAR_REGISTER ( &sk_sentry_health1 );// {"sk_sentry_health1","0"}; CVAR_REGISTER ( &sk_sentry_health2 );// {"sk_sentry_health2","0"}; CVAR_REGISTER ( &sk_sentry_health3 );// {"sk_sentry_health3","0"}; // PLAYER WEAPONS // Crowbar whack CVAR_REGISTER ( &sk_plr_crowbar1 );// {"sk_plr_crowbar1","0"}; CVAR_REGISTER ( &sk_plr_crowbar2 );// {"sk_plr_crowbar2","0"}; CVAR_REGISTER ( &sk_plr_crowbar3 );// {"sk_plr_crowbar3","0"}; // Glock Round CVAR_REGISTER ( &sk_plr_9mm_bullet1 );// {"sk_plr_9mm_bullet1","0"}; CVAR_REGISTER ( &sk_plr_9mm_bullet2 );// {"sk_plr_9mm_bullet2","0"}; CVAR_REGISTER ( &sk_plr_9mm_bullet3 );// {"sk_plr_9mm_bullet3","0"}; // 357 Round CVAR_REGISTER ( &sk_plr_357_bullet1 );// {"sk_plr_357_bullet1","0"}; CVAR_REGISTER ( &sk_plr_357_bullet2 );// {"sk_plr_357_bullet2","0"}; CVAR_REGISTER ( &sk_plr_357_bullet3 );// {"sk_plr_357_bullet3","0"}; // MP5 Round CVAR_REGISTER ( &sk_plr_9mmAR_bullet1 );// {"sk_plr_9mmAR_bullet1","0"}; CVAR_REGISTER ( &sk_plr_9mmAR_bullet2 );// {"sk_plr_9mmAR_bullet2","0"}; CVAR_REGISTER ( &sk_plr_9mmAR_bullet3 );// {"sk_plr_9mmAR_bullet3","0"}; // M203 grenade CVAR_REGISTER ( &sk_plr_9mmAR_grenade1 );// {"sk_plr_9mmAR_grenade1","0"}; CVAR_REGISTER ( &sk_plr_9mmAR_grenade2 );// {"sk_plr_9mmAR_grenade2","0"}; CVAR_REGISTER ( &sk_plr_9mmAR_grenade3 );// {"sk_plr_9mmAR_grenade3","0"}; // Shotgun buckshot CVAR_REGISTER ( &sk_plr_buckshot1 );// {"sk_plr_buckshot1","0"}; CVAR_REGISTER ( &sk_plr_buckshot2 );// {"sk_plr_buckshot2","0"}; CVAR_REGISTER ( &sk_plr_buckshot3 );// {"sk_plr_buckshot3","0"}; // Crossbow CVAR_REGISTER ( &sk_plr_xbow_bolt_monster1 );// {"sk_plr_xbow_bolt1","0"}; CVAR_REGISTER ( &sk_plr_xbow_bolt_monster2 );// {"sk_plr_xbow_bolt2","0"}; CVAR_REGISTER ( &sk_plr_xbow_bolt_monster3 );// {"sk_plr_xbow_bolt3","0"}; CVAR_REGISTER ( &sk_plr_xbow_bolt_client1 );// {"sk_plr_xbow_bolt1","0"}; CVAR_REGISTER ( &sk_plr_xbow_bolt_client2 );// {"sk_plr_xbow_bolt2","0"}; CVAR_REGISTER ( &sk_plr_xbow_bolt_client3 );// {"sk_plr_xbow_bolt3","0"}; // RPG CVAR_REGISTER ( &sk_plr_rpg1 );// {"sk_plr_rpg1","0"}; CVAR_REGISTER ( &sk_plr_rpg2 );// {"sk_plr_rpg2","0"}; CVAR_REGISTER ( &sk_plr_rpg3 );// {"sk_plr_rpg3","0"}; // Gauss Gun CVAR_REGISTER ( &sk_plr_gauss1 );// {"sk_plr_gauss1","0"}; CVAR_REGISTER ( &sk_plr_gauss2 );// {"sk_plr_gauss2","0"}; CVAR_REGISTER ( &sk_plr_gauss3 );// {"sk_plr_gauss3","0"}; // Egon Gun CVAR_REGISTER ( &sk_plr_egon_narrow1 );// {"sk_plr_egon_narrow1","0"}; CVAR_REGISTER ( &sk_plr_egon_narrow2 );// {"sk_plr_egon_narrow2","0"}; CVAR_REGISTER ( &sk_plr_egon_narrow3 );// {"sk_plr_egon_narrow3","0"}; CVAR_REGISTER ( &sk_plr_egon_wide1 );// {"sk_plr_egon_wide1","0"}; CVAR_REGISTER ( &sk_plr_egon_wide2 );// {"sk_plr_egon_wide2","0"}; CVAR_REGISTER ( &sk_plr_egon_wide3 );// {"sk_plr_egon_wide3","0"}; // Hand Grendade CVAR_REGISTER ( &sk_plr_hand_grenade1 );// {"sk_plr_hand_grenade1","0"}; CVAR_REGISTER ( &sk_plr_hand_grenade2 );// {"sk_plr_hand_grenade2","0"}; CVAR_REGISTER ( &sk_plr_hand_grenade3 );// {"sk_plr_hand_grenade3","0"}; // Satchel Charge CVAR_REGISTER ( &sk_plr_satchel1 );// {"sk_plr_satchel1","0"}; CVAR_REGISTER ( &sk_plr_satchel2 );// {"sk_plr_satchel2","0"}; CVAR_REGISTER ( &sk_plr_satchel3 );// {"sk_plr_satchel3","0"}; // Tripmine CVAR_REGISTER ( &sk_plr_tripmine1 );// {"sk_plr_tripmine1","0"}; CVAR_REGISTER ( &sk_plr_tripmine2 );// {"sk_plr_tripmine2","0"}; CVAR_REGISTER ( &sk_plr_tripmine3 );// {"sk_plr_tripmine3","0"}; // WORLD WEAPONS CVAR_REGISTER ( &sk_12mm_bullet1 );// {"sk_12mm_bullet1","0"}; CVAR_REGISTER ( &sk_12mm_bullet2 );// {"sk_12mm_bullet2","0"}; CVAR_REGISTER ( &sk_12mm_bullet3 );// {"sk_12mm_bullet3","0"}; CVAR_REGISTER ( &sk_9mmAR_bullet1 );// {"sk_9mm_bullet1","0"}; CVAR_REGISTER ( &sk_9mmAR_bullet2 );// {"sk_9mm_bullet1","0"}; CVAR_REGISTER ( &sk_9mmAR_bullet3 );// {"sk_9mm_bullet1","0"}; CVAR_REGISTER ( &sk_9mm_bullet1 );// {"sk_9mm_bullet1","0"}; CVAR_REGISTER ( &sk_9mm_bullet2 );// {"sk_9mm_bullet2","0"}; CVAR_REGISTER ( &sk_9mm_bullet3 );// {"sk_9mm_bullet3","0"}; // HORNET CVAR_REGISTER ( &sk_hornet_dmg1 );// {"sk_hornet_dmg1","0"}; CVAR_REGISTER ( &sk_hornet_dmg2 );// {"sk_hornet_dmg2","0"}; CVAR_REGISTER ( &sk_hornet_dmg3 );// {"sk_hornet_dmg3","0"}; // HEALTH/SUIT CHARGE DISTRIBUTION CVAR_REGISTER ( &sk_suitcharger1 ); CVAR_REGISTER ( &sk_suitcharger2 ); CVAR_REGISTER ( &sk_suitcharger3 ); CVAR_REGISTER ( &sk_battery1 ); CVAR_REGISTER ( &sk_battery2 ); CVAR_REGISTER ( &sk_battery3 ); CVAR_REGISTER ( &sk_healthcharger1 ); CVAR_REGISTER ( &sk_healthcharger2 ); CVAR_REGISTER ( &sk_healthcharger3 ); CVAR_REGISTER ( &sk_healthkit1 ); CVAR_REGISTER ( &sk_healthkit2 ); CVAR_REGISTER ( &sk_healthkit3 ); CVAR_REGISTER ( &sk_scientist_heal1 ); CVAR_REGISTER ( &sk_scientist_heal2 ); CVAR_REGISTER ( &sk_scientist_heal3 ); // monster damage adjusters CVAR_REGISTER ( &sk_monster_head1 ); CVAR_REGISTER ( &sk_monster_head2 ); CVAR_REGISTER ( &sk_monster_head3 ); CVAR_REGISTER ( &sk_monster_chest1 ); CVAR_REGISTER ( &sk_monster_chest2 ); CVAR_REGISTER ( &sk_monster_chest3 ); CVAR_REGISTER ( &sk_monster_stomach1 ); CVAR_REGISTER ( &sk_monster_stomach2 ); CVAR_REGISTER ( &sk_monster_stomach3 ); CVAR_REGISTER ( &sk_monster_arm1 ); CVAR_REGISTER ( &sk_monster_arm2 ); CVAR_REGISTER ( &sk_monster_arm3 ); CVAR_REGISTER ( &sk_monster_leg1 ); CVAR_REGISTER ( &sk_monster_leg2 ); CVAR_REGISTER ( &sk_monster_leg3 ); // player damage adjusters CVAR_REGISTER ( &sk_player_head1 ); CVAR_REGISTER ( &sk_player_head2 ); CVAR_REGISTER ( &sk_player_head3 ); CVAR_REGISTER ( &sk_player_chest1 ); CVAR_REGISTER ( &sk_player_chest2 ); CVAR_REGISTER ( &sk_player_chest3 ); CVAR_REGISTER ( &sk_player_stomach1 ); CVAR_REGISTER ( &sk_player_stomach2 ); CVAR_REGISTER ( &sk_player_stomach3 ); CVAR_REGISTER ( &sk_player_arm1 ); CVAR_REGISTER ( &sk_player_arm2 ); CVAR_REGISTER ( &sk_player_arm3 ); CVAR_REGISTER ( &sk_player_leg1 ); CVAR_REGISTER ( &sk_player_leg2 ); CVAR_REGISTER ( &sk_player_leg3 ); // END REGISTER CVARS FOR SKILL LEVEL STUFF SERVER_COMMAND( "exec skill.cfg\n" ); }
void GameDLLInit(void) { g_psv_gravity = CVAR_GET_POINTER("sv_gravity"); g_psv_aim = CVAR_GET_POINTER("sv_aim"); g_footsteps = CVAR_GET_POINTER("mp_footsteps"); g_psv_accelerate = CVAR_GET_POINTER("sv_accelerate"); g_psv_friction = CVAR_GET_POINTER("sv_friction"); g_psv_stopspeed = CVAR_GET_POINTER("sv_stopspeed"); CVAR_REGISTER(&displaysoundlist); CVAR_REGISTER(&timelimit); CVAR_REGISTER(&friendlyfire); CVAR_REGISTER(&flashlight); CVAR_REGISTER(&decalfrequency); CVAR_REGISTER(&allowmonsters); CVAR_REGISTER(&roundtime); CVAR_REGISTER(&buytime); CVAR_REGISTER(&freezetime); CVAR_REGISTER(&c4timer); CVAR_REGISTER(&ghostfrequency); CVAR_REGISTER(&autokick); CVAR_REGISTER(&restartround); CVAR_REGISTER(&sv_restart); CVAR_REGISTER(&limitteams); CVAR_REGISTER(&autoteambalance); CVAR_REGISTER(&tkpunish); CVAR_REGISTER(&hostagepenalty); CVAR_REGISTER(&mirrordamage); CVAR_REGISTER(&logmessages); CVAR_REGISTER(&forcecamera); CVAR_REGISTER(&forcechasecam); CVAR_REGISTER(&mapvoteratio); CVAR_REGISTER(&maxrounds); CVAR_REGISTER(&winlimit); CVAR_REGISTER(&windifference); CVAR_REGISTER(&fadetoblack); CVAR_REGISTER(&logdetail); CVAR_REGISTER(&startmoney); CVAR_REGISTER(&playerid); CVAR_REGISTER(&allow_spectators); CVAR_REGISTER(&mp_chattime); CVAR_REGISTER(&kick_percent); CVAR_REGISTER(&fragsleft); CVAR_REGISTER(&timeleft); CVAR_REGISTER(&humans_join_team); CVAR_REGISTER(&sk_plr_9mm_bullet1); CVAR_REGISTER(&sk_plr_9mm_bullet2); CVAR_REGISTER(&sk_plr_9mm_bullet3); CVAR_REGISTER(&sk_plr_357_bullet1); CVAR_REGISTER(&sk_plr_357_bullet2); CVAR_REGISTER(&sk_plr_357_bullet3); CVAR_REGISTER(&sk_plr_9mmAR_bullet1); CVAR_REGISTER(&sk_plr_9mmAR_bullet2); CVAR_REGISTER(&sk_plr_9mmAR_bullet3); CVAR_REGISTER(&sk_plr_9mmAR_grenade1); CVAR_REGISTER(&sk_plr_9mmAR_grenade2); CVAR_REGISTER(&sk_plr_9mmAR_grenade3); CVAR_REGISTER(&sk_plr_buckshot1); CVAR_REGISTER(&sk_plr_buckshot2); CVAR_REGISTER(&sk_plr_buckshot3); CVAR_REGISTER(&sk_plr_rpg1); CVAR_REGISTER(&sk_plr_rpg2); CVAR_REGISTER(&sk_plr_rpg3); CVAR_REGISTER(&sk_12mm_bullet1); CVAR_REGISTER(&sk_12mm_bullet2); CVAR_REGISTER(&sk_12mm_bullet3); CVAR_REGISTER(&sk_9mmAR_bullet1); CVAR_REGISTER(&sk_9mmAR_bullet2); CVAR_REGISTER(&sk_9mmAR_bullet3); CVAR_REGISTER(&sk_9mm_bullet1); CVAR_REGISTER(&sk_9mm_bullet2); CVAR_REGISTER(&sk_9mm_bullet3); CVAR_REGISTER(&sk_suitcharger1); CVAR_REGISTER(&sk_suitcharger2); CVAR_REGISTER(&sk_suitcharger3); CVAR_REGISTER(&sk_battery1); CVAR_REGISTER(&sk_battery2); CVAR_REGISTER(&sk_battery3); CVAR_REGISTER(&sk_healthcharger1); CVAR_REGISTER(&sk_healthcharger2); CVAR_REGISTER(&sk_healthcharger3); CVAR_REGISTER(&sk_healthkit1); CVAR_REGISTER(&sk_healthkit2); CVAR_REGISTER(&sk_healthkit3); CVAR_REGISTER(&sk_scientist_heal1); CVAR_REGISTER(&sk_scientist_heal2); CVAR_REGISTER(&sk_scientist_heal3); SERVER_COMMAND("exec skill.cfg\n"); }
/* <36ace2> ../cstrike/dlls/bot/cs_bot_manager.cpp:484 */ void CCSBotManager::__MAKE_VHOOK(ServerCommand)(const char *pcmd) { if (!m_bServerActive || !UTIL_IsGame("czero")) return; char buffer[400]; const char *msg = CMD_ARGV(1); if (FStrEq(pcmd, "bot_about")) { Q_sprintf(buffer, "\n--------------------------------------------------------------------------\nThe Official Counter-Strike Bot V%d.%02d\nCreated by Michael S. Booth\nWeb: www.turtlerockstudios.com\\csbot\nE-mail: [email protected]\n--------------------------------------------------------------------------\n\n", CSBOT_VERSION_MAJOR, CSBOT_VERSION_MINOR); CONSOLE_ECHO(buffer); HintMessageToAllPlayers(buffer); } else if (FStrEq(pcmd, "bot_add")) { BotAddCommand(BOT_TEAM_ANY); } else if (FStrEq(pcmd, "bot_add_t")) { BotAddCommand(BOT_TEAM_T); } else if (FStrEq(pcmd, "bot_add_ct")) { BotAddCommand(BOT_TEAM_CT); } else if (FStrEq(pcmd, "bot_kill")) { bool killThemAll; if (CMD_ARGC() == 1 || FStrEq(msg, "all")) killThemAll = true; else killThemAll = false; for (int iIndex = 1; iIndex <= gpGlobals->maxClients; iIndex++) { CBasePlayer *pPlayer = (CBasePlayer *)UTIL_PlayerByIndex(iIndex); if (pPlayer == NULL) continue; if (FNullEnt(pPlayer->pev)) continue; const char *name = STRING(pPlayer->pev->netname); if (FStrEq(name, "")) continue; if (pPlayer->IsBot()) { if (killThemAll || FStrEq(name, msg)) { pPlayer->TakeDamage(pPlayer->pev, pPlayer->pev, 9999.9f, DMG_CRUSH); } } } } else if (FStrEq(pcmd, "bot_kick")) { bool kickThemAll; if (CMD_ARGC() == 1 || FStrEq(msg, "all")) kickThemAll = true; else kickThemAll = false; for (int iIndex = 1; iIndex <= gpGlobals->maxClients; iIndex++) { CBasePlayer *pPlayer = (CBasePlayer *)UTIL_PlayerByIndex(iIndex); if (pPlayer == NULL) continue; if (FNullEnt(pPlayer->pev)) continue; const char *name = STRING(pPlayer->pev->netname); if (FStrEq(name, "")) continue; if (pPlayer->IsBot()) { if (kickThemAll || FStrEq(name, msg)) { SERVER_COMMAND(UTIL_VarArgs("kick \"%s\"\n", name)); CVAR_SET_FLOAT("bot_quota", cv_bot_quota.value - 1); } } } if (kickThemAll || cv_bot_quota.value < 0.0f) { CVAR_SET_FLOAT("bot_quota", 0); } } else if (FStrEq(pcmd, "bot_knives_only")) { CVAR_SET_FLOAT("bot_allow_pistols", 0); CVAR_SET_FLOAT("bot_allow_shotguns", 0); CVAR_SET_FLOAT("bot_allow_sub_machine_guns", 0); CVAR_SET_FLOAT("bot_allow_rifles", 0); CVAR_SET_FLOAT("bot_allow_machine_guns", 0); CVAR_SET_FLOAT("bot_allow_grenades", 0); CVAR_SET_FLOAT("bot_allow_snipers", 0); CVAR_SET_FLOAT("bot_allow_shield", 0); } else if (FStrEq(pcmd, "bot_pistols_only")) { CVAR_SET_FLOAT("bot_allow_pistols", 1); CVAR_SET_FLOAT("bot_allow_shotguns", 0); CVAR_SET_FLOAT("bot_allow_sub_machine_guns", 0); CVAR_SET_FLOAT("bot_allow_rifles", 0); CVAR_SET_FLOAT("bot_allow_machine_guns", 0); CVAR_SET_FLOAT("bot_allow_grenades", 0); CVAR_SET_FLOAT("bot_allow_snipers", 0); CVAR_SET_FLOAT("bot_allow_shield", 0); } else if (FStrEq(pcmd, "bot_snipers_only")) { CVAR_SET_FLOAT("bot_allow_pistols", 1); CVAR_SET_FLOAT("bot_allow_shotguns", 0); CVAR_SET_FLOAT("bot_allow_sub_machine_guns", 0); CVAR_SET_FLOAT("bot_allow_rifles", 0); CVAR_SET_FLOAT("bot_allow_machine_guns", 0); CVAR_SET_FLOAT("bot_allow_grenades", 0); CVAR_SET_FLOAT("bot_allow_snipers", 1); CVAR_SET_FLOAT("bot_allow_shield", 0); } else if (FStrEq(pcmd, "bot_all_weapons")) { CVAR_SET_FLOAT("bot_allow_pistols", 1); CVAR_SET_FLOAT("bot_allow_shotguns", 1); CVAR_SET_FLOAT("bot_allow_sub_machine_guns", 1); CVAR_SET_FLOAT("bot_allow_rifles", 1); CVAR_SET_FLOAT("bot_allow_machine_guns", 1); CVAR_SET_FLOAT("bot_allow_grenades", 1); CVAR_SET_FLOAT("bot_allow_snipers", 1); CVAR_SET_FLOAT("bot_allow_shield", 1); } else if (FStrEq(pcmd, "entity_dump")) { PrintAllEntities(); } else if (FStrEq(pcmd, "bot_nav_delete")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_DELETE; } else if (FStrEq(pcmd, "bot_nav_split")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_SPLIT; } else if (FStrEq(pcmd, "bot_nav_merge")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_MERGE; } else if (FStrEq(pcmd, "bot_nav_mark")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_MARK; } else if (FStrEq(pcmd, "bot_nav_begin_area")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_BEGIN_AREA; } else if (FStrEq(pcmd, "bot_nav_end_area")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_END_AREA; } else if (FStrEq(pcmd, "bot_nav_connect")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_CONNECT; } else if (FStrEq(pcmd, "bot_nav_disconnect")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_DISCONNECT; } else if (FStrEq(pcmd, "bot_nav_splice")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_SPLICE; } else if (FStrEq(pcmd, "bot_nav_crouch")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_ATTRIB_CROUCH; } else if (FStrEq(pcmd, "bot_nav_jump")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_ATTRIB_JUMP; } else if (FStrEq(pcmd, "bot_nav_precise")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_ATTRIB_PRECISE; } else if (FStrEq(pcmd, "bot_nav_no_jump")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_ATTRIB_NO_JUMP; } else if (FStrEq(pcmd, "bot_nav_analyze")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_isAnalysisRequested) = true; } else if (FStrEq(pcmd, "bot_nav_strip")) { StripNavigationAreas();// TODO: reverse me } else if (FStrEq(pcmd, "bot_nav_save")) { GET_GAME_DIR(buffer); buffer[ Q_strlen(buffer) ] = '\\'; Q_strcat(buffer, CBotManager::GetNavMapFilename()); if (SaveNavigationMap(buffer))// TODO: reverse me CONSOLE_ECHO("Navigation map '%s' saved.\n", buffer); else CONSOLE_ECHO("ERROR: Cannot save navigation map '%s'.\n", buffer); } else if (FStrEq(pcmd, "bot_nav_load")) { ValidateMapData(); } else if (FStrEq(pcmd, "bot_nav_use_place")) { if (CMD_ARGC() == 1) { int i = 0; const BotPhraseList *placeList = TheBotPhrases->GetPlaceList(); for (BotPhraseList::const_iterator iter = placeList->begin(); iter != placeList->end(); ++iter, i++) { if ((*iter)->GetID() == GetNavPlace()) CONSOLE_ECHO("--> %-26s", (*iter)->GetName()); else CONSOLE_ECHO("%-30s", (*iter)->GetName()); if (!(i % 3)) CONSOLE_ECHO("\n"); } CONSOLE_ECHO("\n"); } else { const BotPhraseList *placeList = TheBotPhrases->GetPlaceList(); const BotPhrase *found = NULL; bool isAmbiguous = false; for (BotPhraseList::const_iterator iter = placeList->begin(); iter != placeList->end(); ++iter) { if (!Q_strnicmp((*iter)->GetName(), msg, Q_strlen(msg))) { if (!Q_strcmp((*iter)->GetName(), msg)) { found = (*iter); break; } if (found != NULL) isAmbiguous = true; else found = (*iter); } } if (isAmbiguous) { CONSOLE_ECHO("Ambiguous\n"); return; } if (found != NULL) { CONSOLE_ECHO("Current place set to '%s'\n", found->GetName()); m_navPlace = found->GetID(); } } } else if (FStrEq(pcmd, "bot_nav_toggle_place_mode")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_TOGGLE_PLACE_MODE; } else if (FStrEq(pcmd, "bot_nav_place_floodfill")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_PLACE_FLOODFILL; } else if (FStrEq(pcmd, "bot_nav_place_pick")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_PLACE_PICK; } else if (FStrEq(pcmd, "bot_nav_toggle_place_painting")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_TOGGLE_PLACE_PAINTING; } else if (FStrEq(pcmd, "bot_goto_mark")) { // tell the first bot we find to go to our marked area CNavArea *area = GetMarkedArea();// TODO: reverse me if (area != NULL) { CBaseEntity *pEntity = NULL; while ((pEntity = UTIL_FindEntityByClassname(pEntity, "player")) != NULL) { if (!pEntity->IsPlayer()) continue; if ((pEntity->pev->flags & FL_DORMANT) == FL_DORMANT) continue; CBasePlayer *playerOrBot = GetClassPtr((CBasePlayer *)pEntity->pev); if (playerOrBot->IsBot()) { CCSBot *bot = reinterpret_cast<CCSBot *>(playerOrBot); bot->MoveTo(&area->m_center, FASTEST_ROUTE);// TODO: reverse me return; } } } } else if (FStrEq(pcmd, "bot_memory_usage")) { CONSOLE_ECHO("Memory usage:\n"); CONSOLE_ECHO(" %d bytes per bot\b", sizeof(CCSBot)); CONSOLE_ECHO(" %d Navigation Areas @ %d bytes each = %d bytes\n", TheNavAreaGrid.GetNavAreaCount(), sizeof(CNavArea), TheNavAreaGrid.GetNavAreaCount() * sizeof(CNavArea)); CONSOLE_ECHO(" %d Hiding Spots @ %d bytes each = %d bytes\n", TheHidingSpotList.size(), sizeof(HidingSpot), sizeof(HidingSpot) * TheHidingSpotList.size()); unsigned int encounterMem = 0; for (NavAreaList::iterator iter = TheNavAreaList.begin(); iter != TheNavAreaList.end(); ++iter) { CNavArea *area = (*iter); for (SpotEncounterList::iterator siter = area->m_spotEncounterList.begin(); siter != area->m_spotEncounterList.end(); ++siter) { // TODO: Fix me, this is crashed in HOOK_GAMEDLL SpotEncounter se = (*siter); encounterMem += sizeof(SpotEncounter); encounterMem += sizeof(SpotOrder) * se.spotList.size(); } } CONSOLE_ECHO(" Encounter Spot data = %d bytes\n", encounterMem); } else if (FStrEq(pcmd, "bot_nav_mark_unnamed")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_MARK_UNNAMED; } else if (FStrEq(pcmd, "bot_nav_warp")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_WARP_TO_MARK; } else if (FStrEq(pcmd, "bot_nav_corner_select")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_SELECT_CORNER; } else if (FStrEq(pcmd, "bot_nav_corner_raise")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_RAISE_CORNER; } else if (FStrEq(pcmd, "bot_nav_corner_lower")) { IMPLEMENT_ARRAY_CLASS(CCSBotManager, m_editCmd) = EDIT_LOWER_CORNER; } else if (FStrEq(pcmd, "bot_nav_check_consistency")) { if (CMD_ARGC() != 2) { CONSOLE_ECHO("usage: bot_nav_check_consistency <filename>\n"); return; } SanityCheckNavigationMap(msg);// TODO: reverse me } }
void CHeadQuartersRules :: Think ( void ) { if( gamemode.value != 4 ) SERVER_COMMAND( "restart\n" ); HeadQThink(); g_VoiceGameMgr.Update(gpGlobals->frametime); ///// Check game rules ///// static int last_frags; static int last_time; int frags_remaining = 0; int time_remaining = 0; if ( g_fGameOver ) // someone else quit the game already { // bounds check int time = (int)CVAR_GET_FLOAT( "mp_chattime" ); if ( time < 1 ) CVAR_SET_STRING( "mp_chattime", "1" ); else if ( time > MAX_INTERMISSION_TIME ) CVAR_SET_STRING( "mp_chattime", UTIL_dtos1( MAX_INTERMISSION_TIME ) ); m_flIntermissionEndTime = g_flIntermissionStartTime + mp_chattime.value; // check to see if we should change levels now if ( m_flIntermissionEndTime < gpGlobals->time ) { if ( m_iEndIntermissionButtonHit // check that someone has pressed a key, or the max intermission time is over || ( ( g_flIntermissionStartTime + MAX_INTERMISSION_TIME ) < gpGlobals->time) ) ChangeLevel(); // intermission is over } return; } float flTimeLimit = timelimit.value * 60; float flFragLimit = fraglimit.value; time_remaining = (int)(flTimeLimit ? ( flTimeLimit - gpGlobals->time ) : 0); if ( flTimeLimit != 0 && gpGlobals->time >= flTimeLimit ) { GoToIntermission(); return; } if ( flFragLimit ) { int bestfrags = 9999; int remain; // check if any player is over the frag limit for ( int i = 1; i <= gpGlobals->maxClients; i++ ) { CBaseEntity *pPlayer = UTIL_PlayerByIndex( i ); if ( pPlayer && pPlayer->pev->frags >= flFragLimit ) { GoToIntermission(); return; } if ( pPlayer ) { remain = flFragLimit - pPlayer->pev->frags; if ( remain < bestfrags ) { bestfrags = remain; } } } frags_remaining = bestfrags; } // Updates when frags change if ( frags_remaining != last_frags ) { g_engfuncs.pfnCvar_DirectSet( &fragsleft, UTIL_VarArgs( "%i", frags_remaining ) ); } // Updates once per second if ( timeleft.value != last_time ) { g_engfuncs.pfnCvar_DirectSet( &timeleft, UTIL_VarArgs( "%i", time_remaining ) ); } last_frags = frags_remaining; last_time = time_remaining; }
/* ========================================================= UpdateClientData resends any changed player HUD info to the client. Called every frame by PlayerPreThink Also called at start of demo recording and playback by ForceClientDllUpdate to ensure the demo gets messages reflecting all of the HUD state info. ========================================================= */ void CBasePlayer::UpdateClientData() { if( m_bNeedsNewConnectTime ) { m_bNeedsNewConnectTime = false; m_flConnectTime = gpGlobals->time; } if( !m_bWeaponValidationReceived && m_flConnectTime + WEAPON_VALIDATION_GRACE_TIME < gpGlobals->time ) { //If the client didn't send the message in time, drop the client. - Solokiller //Set it to true to avoid running this multiple times. - Solokiller m_bWeaponValidationReceived = true; UTIL_LogPrintf( "Player \"%s\" didn't send weapon validation in time, disconnecting\n", GetNetName() ); if( !IS_DEDICATED_SERVER() ) { //Listen server hosts usually don't have logging enabled, so echo to console unconditionally for them. - Solokiller UTIL_ServerPrintf( "Player \"%s\" didn't send weapon validation in time, disconnecting\n", GetNetName() ); } if( IS_DEDICATED_SERVER() || entindex() != 1 ) { SERVER_COMMAND( UTIL_VarArgs( "kick \"%s\" \"No weapon validation received\"\n", GetNetName() ) ); } else { //The local player can't be kicked, so terminate the session instead - Solokiller CLIENT_COMMAND( edict(), "disconnect\n" ); } } //The engine will not call ClientPutInServer after transitions, so we'll have to catch this event every map change. - Solokiller if( !m_bSentInitData ) { m_bSentInitData = true; //Update Hud colors. - Solokiller CMap::GetInstance()->SendHudColors( this, true ); } if( m_fInitHUD ) { m_fInitHUD = false; gInitHUD = false; MESSAGE_BEGIN( MSG_ONE, gmsgResetHUD, NULL, this ); WRITE_BYTE( 0 ); MESSAGE_END(); if( !m_fGameHUDInitialized ) { MESSAGE_BEGIN( MSG_ONE, gmsgInitHUD, NULL, this ); MESSAGE_END(); g_pGameRules->InitHUD( this ); m_fGameHUDInitialized = true; m_iObserverLastMode = OBS_ROAMING; if( g_pGameRules->IsMultiplayer() ) { FireTargets( "game_playerjoin", this, this, USE_TOGGLE, 0 ); } } FireTargets( "game_playerspawn", this, this, USE_TOGGLE, 0 ); InitStatusBar(); SendWeatherUpdate(); } if( m_iHideHUD != m_iClientHideHUD ) { MESSAGE_BEGIN( MSG_ONE, gmsgHideWeapon, NULL, this ); WRITE_BYTE( m_iHideHUD ); MESSAGE_END(); m_iClientHideHUD = m_iHideHUD; } if( m_iFOV != m_iClientFOV ) { MESSAGE_BEGIN( MSG_ONE, gmsgSetFOV, NULL, this ); WRITE_BYTE( m_iFOV ); MESSAGE_END(); // cache FOV change at end of function, so weapon updates can see that FOV has changed } // HACKHACK -- send the message to display the game title if( gDisplayTitle ) { MESSAGE_BEGIN( MSG_ONE, gmsgShowGameTitle, NULL, this ); WRITE_BYTE( 0 ); MESSAGE_END(); gDisplayTitle = false; } if( pev->health != m_iClientHealth ) { int iHealth = clamp( static_cast<int>( pev->health ), 0, 255 ); // make sure that no negative health values are sent if( pev->health > 0.0f && pev->health <= 1.0f ) iHealth = 1; // send "health" update message MESSAGE_BEGIN( MSG_ONE, gmsgHealth, NULL, this ); WRITE_BYTE( iHealth ); MESSAGE_END(); m_iClientHealth = pev->health; } if( pev->armorvalue != m_iClientBattery ) { m_iClientBattery = pev->armorvalue; ASSERT( gmsgBattery > 0 ); // send "health" update message MESSAGE_BEGIN( MSG_ONE, gmsgBattery, NULL, this ); WRITE_SHORT( ( int ) pev->armorvalue ); MESSAGE_END(); } if( pev->dmg_take || pev->dmg_save || m_bitsHUDDamage != m_bitsDamageType ) { // Comes from inside me if not set Vector damageOrigin = GetAbsOrigin(); // send "damage" message // causes screen to flash, and pain compass to show direction of damage edict_t *other = pev->dmg_inflictor; if( other ) { CBaseEntity *pEntity = CBaseEntity::Instance( other ); if( pEntity ) damageOrigin = pEntity->Center(); } // only send down damage type that have hud art int visibleDamageBits = m_bitsDamageType & DMG_SHOWNHUD; MESSAGE_BEGIN( MSG_ONE, gmsgDamage, NULL, this ); WRITE_BYTE( pev->dmg_save ); WRITE_BYTE( pev->dmg_take ); WRITE_LONG( visibleDamageBits ); WRITE_COORD( damageOrigin.x ); WRITE_COORD( damageOrigin.y ); WRITE_COORD( damageOrigin.z ); MESSAGE_END(); //TODO: both of these can probably be removed. - Solokiller pev->dmg_take = 0; pev->dmg_save = 0; m_bitsHUDDamage = m_bitsDamageType; // Clear off non-time-based damage indicators m_bitsDamageType &= DMG_TIMEBASED; } // Update Flashlight if( ( m_flFlashLightTime ) && ( m_flFlashLightTime <= gpGlobals->time ) ) { if( FlashlightIsOn() ) { if( m_iFlashBattery ) { m_flFlashLightTime = FLASH_DRAIN_TIME + gpGlobals->time; m_iFlashBattery--; if( !m_iFlashBattery ) FlashlightTurnOff(); } } else { if( m_iFlashBattery < 100 ) { m_flFlashLightTime = FLASH_CHARGE_TIME + gpGlobals->time; m_iFlashBattery++; } else m_flFlashLightTime = 0; } MESSAGE_BEGIN( MSG_ONE, gmsgFlashBattery, NULL, this ); WRITE_BYTE( m_iFlashBattery ); MESSAGE_END(); } if( m_iTrain & TRAIN_NEW ) { ASSERT( gmsgTrain > 0 ); // send "health" update message MESSAGE_BEGIN( MSG_ONE, gmsgTrain, NULL, this ); WRITE_BYTE( m_iTrain & 0xF ); MESSAGE_END(); m_iTrain &= ~TRAIN_NEW; } SendAmmoUpdate(); // Update all the items for( int i = 0; i < MAX_WEAPON_SLOTS; i++ ) { if( m_rgpPlayerItems[ i ] ) // each item updates it's successors m_rgpPlayerItems[ i ]->UpdateClientData( this ); } // Cache and client weapon change m_pClientActiveItem = m_pActiveItem; m_iClientFOV = m_iFOV; // Update Status Bar if( m_flNextSBarUpdateTime < gpGlobals->time ) { UpdateStatusBar(); m_flNextSBarUpdateTime = gpGlobals->time + 0.2; } }
void FireOnEntry( CBaseEntity *pOther ) { SERVER_COMMAND( "autosave\n" ); }
void CClient::Kick() { // kick this client away from the server SERVER_COMMAND(va("kick \"%s\"\n", GetNetName())); }
/* <18b4aa> ../cstrike/dlls/training_gamerules.cpp:52 */ void CHalfLifeTraining::__MAKE_VHOOK(PlayerThink)(CBasePlayer *pPlayer) { if (pPlayer->pev->radsuit_finished && gpGlobals->time > pPlayer->pev->radsuit_finished) { SERVER_COMMAND("reload\n"); } if (!pPlayer->m_iAccount) { if (pPlayer->pev->scale) { pPlayer->m_iAccount = (int)pPlayer->pev->scale; } } if (pPlayer->m_iTeam == UNASSIGNED) { pPlayer->SetProgressBarTime(0); pPlayer->m_bHasDefuser = pPlayer->pev->ideal_yaw != 0; } m_iHostagesRescued = 0; m_iRoundTimeSecs = (int)(gpGlobals->time + 1.0f); m_bFreezePeriod = FALSE; g_fGameOver = FALSE; pPlayer->m_iTeam = CT; pPlayer->m_bCanShoot = true; pPlayer->m_fLastMovement = gpGlobals->time; if (pPlayer->m_pActiveItem) pPlayer->m_iHideHUD &= ~HIDEHUD_WEAPONS; else pPlayer->m_iHideHUD |= HIDEHUD_WEAPONS; if (pPlayer->HasNamedPlayerItem("weapon_c4")) { if (pPlayer->m_rgAmmo[ pPlayer->GetAmmoIndex("C4") ] <= 0) { pPlayer->m_bHasC4 = false; CBasePlayerWeapon *pWeapon = (CBasePlayerWeapon *)pPlayer->m_pActiveItem; if (FClassnameIs(pWeapon->pev, "weapon_c4")) { pPlayer->pev->weapons &= ~(1 << pWeapon->m_iId); pPlayer->RemovePlayerItem(pWeapon); pWeapon->Drop(); } } else pPlayer->m_bHasC4 = true; } if (!pPlayer->m_bVGUIMenus) { if (fVGUIMenus) { pPlayer->m_bVGUIMenus = fVGUIMenus; } } CGrenade *pBomb = NULL; while ((pBomb = (CGrenade *)UTIL_FindEntityByClassname(pBomb, "grenade")) != NULL) { if (pBomb->m_pentCurBombTarget != NULL) pBomb->m_bStartDefuse = true; } if (pPlayer->m_signals.GetState() & SIGNAL_BUY) { if (!fInBuyArea) { FillAccountTime = 1; if (!fVisitedBuyArea) { MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pPlayer->pev); WRITE_BYTE(STATUSICON_FLASH); WRITE_STRING("buyzone"); WRITE_BYTE(0); WRITE_BYTE(160); WRITE_BYTE(0); MESSAGE_END(); } } fInBuyArea = TRUE; if (pPlayer->m_iAccount < 16000 && FillAccountTime == 0.0f) FillAccountTime = gpGlobals->time + 5; if (FillAccountTime != 0.0f && gpGlobals->time > FillAccountTime) { if (!fVisitedBuyArea) { MESSAGE_BEGIN(MSG_ONE, gmsgBlinkAcct, NULL, pPlayer->pev); WRITE_BYTE(3); MESSAGE_END(); MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pPlayer->pev); WRITE_BYTE(STATUSICON_SHOW); WRITE_STRING("buyzone"); WRITE_BYTE(0); WRITE_BYTE(160); WRITE_BYTE(0); MESSAGE_END(); fVisitedBuyArea = TRUE; } pPlayer->AddAccount(16000 - pPlayer->m_iAccount); FillAccountTime = 0; } } else if (fInBuyArea && fVisitedBuyArea) { fInBuyArea = FALSE; } pPlayer->pev->scale = pPlayer->m_iAccount; pPlayer->pev->ideal_yaw = pPlayer->m_bHasDefuser; if (TheBots != NULL) { TheBots->OnEvent(EVENT_PLAYER_CHANGED_TEAM, pPlayer); } }
/* ============== ChangeLevel Server is changing to a new level, check mapcycle.txt for map name and setup info ============== */ void CHalfLifeMultiplay :: ChangeLevel( void ) { static char szPreviousMapCycleFile[ 256 ]; static mapcycle_t mapcycle; char szNextMap[32]; char szFirstMapInList[32]; char szCommands[ 1500 ]; char szRules[ 1500 ]; int minplayers = 0, maxplayers = 0; strcpy( szFirstMapInList, "hldm1" ); // the absolute default level is hldm1 int curplayers; BOOL do_cycle = TRUE; // find the map to change to char *mapcfile = (char*)CVAR_GET_STRING( "mapcyclefile" ); ASSERT( mapcfile != NULL ); szCommands[ 0 ] = '\0'; szRules[ 0 ] = '\0'; curplayers = CountPlayers(); // Has the map cycle filename changed? if ( stricmp( mapcfile, szPreviousMapCycleFile ) ) { strcpy( szPreviousMapCycleFile, mapcfile ); DestroyMapCycle( &mapcycle ); if ( !ReloadMapCycleFile( mapcfile, &mapcycle ) || ( !mapcycle.items ) ) { ALERT( at_console, "Unable to load map cycle file %s\n", mapcfile ); do_cycle = FALSE; } } if ( do_cycle && mapcycle.items ) { BOOL keeplooking = FALSE; BOOL found = FALSE; mapcycle_item_s *item; // Assume current map strcpy( szNextMap, STRING(gpGlobals->mapname) ); strcpy( szFirstMapInList, STRING(gpGlobals->mapname) ); // Traverse list for ( item = mapcycle.next_item; item->next != mapcycle.next_item; item = item->next ) { keeplooking = FALSE; ASSERT( item != NULL ); if ( item->minplayers != 0 ) { if ( curplayers >= item->minplayers ) { found = TRUE; minplayers = item->minplayers; } else { keeplooking = TRUE; } } if ( item->maxplayers != 0 ) { if ( curplayers <= item->maxplayers ) { found = TRUE; maxplayers = item->maxplayers; } else { keeplooking = TRUE; } } if ( keeplooking ) continue; found = TRUE; break; } if ( !found ) { item = mapcycle.next_item; } // Increment next item pointer mapcycle.next_item = item->next; // Perform logic on current item strcpy( szNextMap, item->mapname ); ExtractCommandString( item->rulebuffer, szCommands ); strcpy( szRules, item->rulebuffer ); } if ( !IS_MAP_VALID(szNextMap) ) { strcpy( szNextMap, szFirstMapInList ); } g_fGameOver = TRUE; ALERT( at_console, "CHANGE LEVEL: %s\n", szNextMap ); if ( minplayers || maxplayers ) { ALERT( at_console, "PLAYER COUNT: min %i max %i current %i\n", minplayers, maxplayers, curplayers ); } if ( strlen( szRules ) > 0 ) { ALERT( at_console, "RULES: %s\n", szRules ); } CHANGE_LEVEL( szNextMap, NULL ); if ( strlen( szCommands ) > 0 ) { SERVER_COMMAND( szCommands ); } }
void bounce_check(void) { if((int)CVAR_GET_FLOAT("bounce")==1) { LOG_MESSAGE(PLID, "Exiting server at end of map (bounce==1)"); SERVER_COMMAND("quit\n"); } }