コード例 #1
0
ファイル: ggrenade.cpp プロジェクト: Chuvi-w/CSSDK
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;
		}
	}
}
コード例 #2
0
/* <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;
}
コード例 #3
0
ファイル: ggrenade.cpp プロジェクト: Chuvi-w/CSSDK
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);
		}
	}
}