void CGrenade::C4Think(void) { if (!IsInWorld()) { UTIL_Remove(this); return; } pev->nextthink = gpGlobals->time + 0.12; if (gpGlobals->time >= m_flNextFreq) { m_flNextFreq = gpGlobals->time + m_flNextFreqInterval; m_flNextFreqInterval *= 0.9; switch (m_iCurWave) { case 0: { m_sBeepName = "weapons/c4_beep1.wav"; m_fAttenu = 1.5; if (UTIL_IsGame("czero")) { MESSAGE_BEGIN(MSG_ALL, gmsgScenarioIcon); WRITE_BYTE(1); WRITE_STRING("bombticking"); WRITE_BYTE(255); WRITE_SHORT(140); WRITE_SHORT(0); MESSAGE_END(); } break; } case 1: { m_sBeepName = "weapons/c4_beep2.wav"; m_fAttenu = 1.0; if (UTIL_IsGame("czero")) { MESSAGE_BEGIN(MSG_ALL, gmsgScenarioIcon); WRITE_BYTE(1); WRITE_STRING("bombticking"); WRITE_BYTE(255); WRITE_SHORT(70); WRITE_SHORT(0); MESSAGE_END(); } break; } case 2: { m_sBeepName = "weapons/c4_beep3.wav"; m_fAttenu = 0.8; if (UTIL_IsGame("czero")) { MESSAGE_BEGIN(MSG_ALL, gmsgScenarioIcon); WRITE_BYTE(1); WRITE_STRING("bombticking"); WRITE_BYTE(255); WRITE_SHORT(40); WRITE_SHORT(0); MESSAGE_END(); } break; } case 3: { m_sBeepName = "weapons/c4_beep4.wav"; m_fAttenu = 0.5; if (UTIL_IsGame("czero")) { MESSAGE_BEGIN(MSG_ALL, gmsgScenarioIcon); WRITE_BYTE(1); WRITE_STRING("bombticking"); WRITE_BYTE(255); WRITE_SHORT(30); WRITE_SHORT(0); MESSAGE_END(); } break; } case 4: { m_sBeepName = "weapons/c4_beep5.wav"; m_fAttenu = 0.2; if (UTIL_IsGame("czero")) { MESSAGE_BEGIN(MSG_ALL, gmsgScenarioIcon); WRITE_BYTE(1); WRITE_STRING("bombticking"); WRITE_BYTE(255); WRITE_SHORT(20); WRITE_SHORT(0); MESSAGE_END(); } break; } } ++m_iCurWave; } if (m_flNextBeep < gpGlobals->time) { m_flNextBeep = gpGlobals->time + 1.4; EMIT_SOUND(ENT(pev), CHAN_VOICE, m_sBeepName, VOL_NORM, m_fAttenu); // TODO: Adds support for bots. // TheBots->OnEvent( EVENT_BOMB_BEEP, this, NULL ); } if (m_flNextBlink < gpGlobals->time) { m_flNextBlink = gpGlobals->time + 2.0; MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_GLOWSPRITE); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z + 5.0); WRITE_SHORT(g_sModelIndexC4Glow); WRITE_BYTE(1); WRITE_BYTE(3); WRITE_BYTE(255); MESSAGE_END(); } CHalfLifeMultiplay *pGameRules = (CHalfLifeMultiplay*)g_pGameRules; if (m_flC4Blow <= gpGlobals->time) { // TODO: Adds support for bots. // TheBots->OnEvent( EVENT_BOMB_EXPLODED, NULL, NULL ); MESSAGE_BEGIN(MSG_ALL, gmsgScenarioIcon); WRITE_BYTE(0); MESSAGE_END(); if (m_pentCurBombTarget) { CBaseEntity *pEntity = CBaseEntity::Instance(m_pentCurBombTarget); if (pEntity) { CBaseEntity* pPlayer = CBaseEntity::Instance(pev->owner); if (pPlayer) { pEntity->Use(pPlayer, this, USE_TOGGLE, 0); } } } CBasePlayer* pPlayer = (CBasePlayer *)CBaseEntity::Instance(pev->owner); if (pPlayer) { pPlayer->pev->frags += 3; } MESSAGE_BEGIN(MSG_ALL, gmsgBombPickup); MESSAGE_END(); pGameRules->m_bBombDropped = false; if (pev->waterlevel) UTIL_Remove(this); else SetThink(&CGrenade::Detonate2); } if (m_bStartDefuse) { CBasePlayer* pDefuser = (CBasePlayer *)((CBaseEntity *)m_pBombDefuser); if (pDefuser && m_flDefuseCountDown > gpGlobals->time) { BOOL isOnGround = !!(pDefuser->pev->flags & FL_ONGROUND); if (!isOnGround || m_fNextDefuse < gpGlobals->time) { if (!isOnGround) { ClientPrint(pDefuser->pev, HUD_PRINTCENTER, "#C4_Defuse_Must_Be_On_Ground"); } pDefuser->ResetMaxSpeed(); pDefuser->SetProgressBarTime(0); pDefuser->m_bIsDefusing = false; m_bStartDefuse = false; m_flDefuseCountDown = 0.0; // TODO: Adds support for bots. // TheBots->OnEvent( EVENT_DEFUSE_ABORTED, NULL, NULL ); } } else { // TODO: Adds support for bots. // TheBots->OnEvent( EVENT_BOMB_DEFUSED, pDefuser, NULL ); Broadcast("BOMBDEF"); MESSAGE_BEGIN(MSG_SPEC, SVC_DIRECTOR); WRITE_BYTE(9); WRITE_BYTE(DRC_CMD_EVENT); WRITE_SHORT(ENTINDEX(this->edict())); WRITE_SHORT(NULL); WRITE_ENTITY(DRC_FLAG_FINAL | DRC_FLAG_FACEPLAYER | DRC_FLAG_DRAMATIC | 15); MESSAGE_END(); UTIL_LogPrintf("\"%s<%i><%s><CT>\" triggered \"Defused_The_Bomb\"\n", STRING(pDefuser->pev->netname), GETPLAYERAUTHID(pDefuser->edict()), GETPLAYERUSERID(pDefuser->edict())); UTIL_EmitAmbientSound(ENT(pev), pev->origin, "weapons/c4_beep5.wav", 0, ATTN_NONE, SND_STOP, 0); EMIT_SOUND(ENT(pDefuser->pev), CHAN_WEAPON, "weapons/c4_disarmed.wav", 0.8, ATTN_NORM); UTIL_Remove(this); m_bJustBlew = true; pDefuser->ResetMaxSpeed(); pDefuser->m_bIsDefusing = false; MESSAGE_BEGIN(MSG_ALL, gmsgScenarioIcon); WRITE_BYTE(0); MESSAGE_END(); if (pGameRules->IsCareer()) { TheCareerTasks->HandleEvent(EVENT_BOMB_DEFUSED, pDefuser, NULL); } pGameRules->m_bBombDefused = true; pGameRules->CheckWinConditions(); pDefuser->pev->frags += 3; MESSAGE_BEGIN(MSG_ALL, gmsgBombPickup); MESSAGE_END(); pGameRules->m_bBombDropped = FALSE; m_bStartDefuse = false; } } }
/* <36c3c2> ../cstrike/dlls/bot/cs_bot_manager.cpp:903 */ NOBODY bool CCSBotManager::BotAddCommand(BotProfileTeamType team, bool isFromConsole) { if (IMPLEMENT_ARRAY(m_isLearningMap) || ENG_CHECK_PARM("-nobots", NULL)) return false; const BotProfile *profile = NULL; if (!isFromConsole || CMD_ARGC() < 2) { if (team == BOT_TEAM_ANY) { // if team not specified, check cv_bot_join_team cvar for preference if (!Q_stricmp(cv_bot_join_team.string, "T")) team = BOT_TEAM_T; else if (!Q_stricmp(cv_bot_join_team.string, "CT")) team = BOT_TEAM_CT; else { TeamName defaultTeam = SelectDefaultTeam(); if (defaultTeam == TERRORIST) team = BOT_TEAM_T; else if (defaultTeam == CT) team = BOT_TEAM_CT; } } // try to add a bot by name profile = TheBotProfiles->GetRandomProfile(GetDifficultyLevel(), team); if (profile == NULL) { CONSOLE_ECHO("All bot profiles at this difficulty level are in use.\n"); return true; } } else { // in career, ignore humans bool ignoreHumans = false; CHalfLifeMultiplay *mp = g_pGameRules; if (mp && mp->IsCareer()) ignoreHumans = true; if (UTIL_IsNameTaken(CMD_ARGV(1), ignoreHumans)) { CONSOLE_ECHO("Error - %s is already in the game.\n", CMD_ARGV(1)); return true; } profile = TheBotProfiles->GetProfile(CMD_ARGV(1), team); if (profile == NULL) { CONSOLE_ECHO("Error - no profile for '%s' exists.\n", CMD_ARGV(1)); return true; } } // create the bot if (CCSBotManager::AddBot(profile, team)) // TODO: Reverse me { if (isFromConsole) { // increase the bot quota to account for manually added bot CVAR_SET_FLOAT("bot_quota", cv_bot_quota.value + 1); } } return true; }
void CGrenade::Explode2(TraceResult* pTrace, int bitsDamageType) // Last check: 2013, May 28 { CHalfLifeMultiplay *pGameRules = (CHalfLifeMultiplay*)g_pGameRules; pev->model = iStringNull; // invisible pev->solid = SOLID_NOT; // intangible pev->takedamage = DAMAGE_NO; UTIL_ScreenShake(pTrace->vecEndPos, 25.0, 150.0, 1.0, 3000.0); pGameRules->m_bTargetBombed = true; if (pGameRules->IsCareer()) { TheCareerTasks->LatchRoundEndMessage(); } m_bJustBlew = true; pGameRules->CheckWinConditions(); if (pTrace->flFraction != 1.0) { pev->origin = pTrace->vecEndPos + (pTrace->vecPlaneNormal * (pev->dmg - 24) * 0.6); } bool isInWater = UTIL_PointContents(pev->origin) == CONTENTS_WATER; MESSAGE_BEGIN(MSG_PAS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SPRITE); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z - 10.0); WRITE_SHORT(g_sModelIndexFireball3); WRITE_BYTE((pev->dmg - 275) * 0.6); WRITE_BYTE(150); MESSAGE_END(); MESSAGE_BEGIN(MSG_PAS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SPRITE); WRITE_COORD(pev->origin.x + RANDOM_FLOAT(-512, 512)); WRITE_COORD(pev->origin.y + RANDOM_FLOAT(-512, 512)); WRITE_COORD(pev->origin.z + RANDOM_FLOAT(-10, 10)); WRITE_SHORT(g_sModelIndexFireball2); WRITE_BYTE(floor((pev->dmg - 275) * 0.6)); WRITE_BYTE(150); MESSAGE_END(); MESSAGE_BEGIN(MSG_PAS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SPRITE); WRITE_COORD(pev->origin.x + RANDOM_FLOAT(-512, 512)); WRITE_COORD(pev->origin.y + RANDOM_FLOAT(-512, 512)); WRITE_COORD(pev->origin.z + RANDOM_FLOAT(-10, 10)); WRITE_SHORT(g_sModelIndexFireball3); WRITE_BYTE(floor((pev->dmg - 275) * 0.6)); WRITE_BYTE(150); MESSAGE_END(); MESSAGE_BEGIN(MSG_PAS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SPRITE); WRITE_COORD(pev->origin.x + RANDOM_FLOAT(-512, 512)); WRITE_COORD(pev->origin.y + RANDOM_FLOAT(-512, 512)); WRITE_COORD(pev->origin.z + RANDOM_FLOAT(-10, 10)); WRITE_SHORT(g_sModelIndexFireball); WRITE_BYTE(floor((pev->dmg - 275) * 0.6)); WRITE_BYTE(17); MESSAGE_END(); EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/c4_explode1.wav", VOL_NORM, 0.25); CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3.0); entvars_t *pevOwner; if (pev->owner) pevOwner = VARS(pev->owner); else pevOwner = NULL; pev->owner = NULL; // Can't traceline attack owner if this is set. // TODO: Fix me. //RadiusDamage( pev, pevOwner, pev->dmg, g_pGameRules->m_flBombRadius, CLASS_NONE, bitsDamageType ); if (pGameRules->IsCareer()) { TheCareerTasks->UnlatchRoundEndMessage(); } MESSAGE_BEGIN(MSG_SPEC, SVC_DIRECTOR); WRITE_BYTE(9); WRITE_BYTE(DRC_CMD_EVENT); WRITE_SHORT(ENTINDEX(this->edict())); WRITE_SHORT(NULL); WRITE_ENTITY(DRC_FLAG_FINAL | DRC_FLAG_PRIO_MASK); MESSAGE_END(); UTIL_DecalTrace(pTrace, RANDOM_FLOAT(0, 1) < 0.5 ? DECAL_SCORCH1 : DECAL_SCORCH2); switch (RANDOM_LONG(0, 2)) { case 0: EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/debris1.wav", 0.55, ATTN_NORM); break; case 1: EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/debris2.wav", 0.55, ATTN_NORM); break; case 2: EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/debris3.wav", 0.55, ATTN_NORM); break; } pev->effects |= EF_NODRAW; SetThink(&CGrenade::Smoke2); pev->velocity = g_vecZero; pev->nextthink = gpGlobals->time + 0.85; if (!isInWater) { int sparkCount = RANDOM_LONG(0, 3); for (int i = 0; i < sparkCount; i++) { Create("spark_shower", pev->origin, pTrace->vecPlaneNormal, NULL); } } }