void CEnvExplosion::Smoke(void) { if (!(pev->spawnflags & SF_ENVEXPLOSION_NOSMOKE)) { MESSAGE_BEGIN(MSG_PAS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SMOKE); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z); WRITE_SHORT(g_sModelIndexSmoke); WRITE_BYTE((BYTE)m_spriteScale); // scale * 10 WRITE_BYTE(12); // framerate MESSAGE_END(); } if (!(pev->spawnflags & SF_ENVEXPLOSION_REPEATABLE)) { UTIL_Remove(this); } }
void CGrenade::Smoke( void ) { if (UTIL_PointContents ( pev->origin ) == CONTENTS_WATER) { UTIL_Bubbles( pev->origin - Vector( 64, 64, 64 ), pev->origin + Vector( 64, 64, 64 ), 100 ); } else { MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( (pev->dmg - 50) * 0.80 ); // scale * 10 WRITE_BYTE( 12 ); // framerate MESSAGE_END(); } UTIL_Remove( this ); }
int CHgun::AddToPlayer( CBasePlayer *pPlayer ) { if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) ) { #ifndef CLIENT_DLL if ( g_pGameRules->IsMultiplayer() ) { // in multiplayer, all hivehands come full. pPlayer->m_rgAmmo[ PrimaryAmmoIndex() ] = HORNET_MAX_CARRY; } #endif MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev ); WRITE_BYTE( m_iId ); MESSAGE_END(); return TRUE; } return FALSE; }
/* ======================== ClientUserInfoChanged called after the player changes userinfo - gives dll a chance to modify it before it gets sent into the rest of the engine. ======================== */ void ClientUserInfoChanged( edict_t *pEntity, char *infobuffer ) { // Is the client spawned yet? if ( !pEntity->pvPrivateData ) return; // msg everyone if someone changes their name, and it isn't the first time (changing no name to current name) if ( pEntity->v.netname && STRING(pEntity->v.netname)[0] != 0 && !FStrEq( STRING(pEntity->v.netname), g_engfuncs.pfnInfoKeyValue( infobuffer, "name" )) ) { char text[256]; sprintf( text, "* %s changed name to %s\n", STRING(pEntity->v.netname), g_engfuncs.pfnInfoKeyValue( infobuffer, "name" ) ); MESSAGE_BEGIN( MSG_ALL, gmsgSayText, NULL ); WRITE_BYTE( ENTINDEX(pEntity) ); WRITE_STRING( text ); MESSAGE_END(); UTIL_LogPrintf( "\"%s<%i>\" changed name to \"%s<%i>\"\n", STRING( pEntity->v.netname ), GETPLAYERUSERID( pEntity ), g_engfuncs.pfnInfoKeyValue( infobuffer, "name" ), GETPLAYERUSERID( pEntity ) ); } g_pGameRules->ClientUserInfoChanged( GetClassPtr((CBasePlayer *)&pEntity->v), infobuffer ); }
// Let the player know there is a particleemitter void CParticleEmitter::MakeAware( CBaseEntity *pEnt ) { ALERT(at_console, "CParticleEmitter :: MakeAware\n"); bool bTurnOn = true; // lets give them everything MESSAGE_BEGIN(MSG_ONE, gmsgParticles, NULL, pEnt->pev); WRITE_SHORT(iID); WRITE_BYTE(0); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z); WRITE_COORD(pev->angles.x); WRITE_COORD(pev->angles.y); WRITE_COORD(pev->angles.z); WRITE_SHORT(0); WRITE_STRING(STRING(pev->message)); WRITE_STRING(sParticleDefintionFile); MESSAGE_END(); }
static cell AMX_NATIVE_CALL esf_set_maxhealth(AMX *amx, cell *params) // esf_set_maxhealth(index, health); = 2 args { // Set maxhealth to a player // params[1] = index // params[2] = health // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); *((int *)pPlayer->pvPrivateData + ESFX_MAXHEALTH_OFFSET) = params[ 2 ]; // Writing maxhealth message to client... MESSAGE_BEGIN(MSG_ONE, GET_USER_MSG_ID(PLID, "MaxHealth", NULL), NULL, pPlayer); WRITE_BYTE(params[ 2 ]); MESSAGE_END(); return 1; }
NOXREF void UTIL_DrawBeamFromEnt(int iIndex, Vector vecEnd, int iLifetime, byte bRed, byte bGreen, byte bBlue) { MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, vecEnd); WRITE_BYTE(TE_BEAMENTPOINT); WRITE_SHORT(iIndex); WRITE_COORD(vecEnd.x); WRITE_COORD(vecEnd.y); WRITE_COORD(vecEnd.z); WRITE_SHORT(s_iBeamSprite); WRITE_BYTE(0); WRITE_BYTE(0); WRITE_BYTE(iLifetime); WRITE_BYTE(10); WRITE_BYTE(0); WRITE_BYTE(bRed); WRITE_BYTE(bGreen); WRITE_BYTE(bBlue); WRITE_BYTE(255); WRITE_BYTE(0); MESSAGE_END(); }
void CGrenade::Smoke3_A( void ) { if( UTIL_PointContents( pev->origin ) == CONTENTS_WATER ) { UTIL_Bubbles( pev->origin - Vector( 64, 64, 64 ), pev->origin + Vector( 64, 64, 64 ), 100 ); } else { MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( pev->origin.x + RANDOM_FLOAT( -128, 128 ) ); WRITE_COORD( pev->origin.y + RANDOM_FLOAT( -128, 128 ) ); WRITE_COORD( pev->origin.z + RANDOM_FLOAT( -10, 10 ) ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( 15 + RANDOM_FLOAT( 0, 10 ) ); // scale * 10 WRITE_BYTE( 12 ); // framerate MESSAGE_END(); } UTIL_Remove( this ); }
void UTIL_BloodStream( const Vector &origin, const Vector &direction, int color, int amount ) { if ( !UTIL_ShouldShowBlood( color ) ) return; if ( g_Language == LANGUAGE_GERMAN && color == BLOOD_COLOR_RED ) color = 0; MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, origin ); WRITE_BYTE( TE_BLOODSTREAM ); WRITE_COORD( origin.x ); WRITE_COORD( origin.y ); WRITE_COORD( origin.z ); WRITE_COORD( direction.x ); WRITE_COORD( direction.y ); WRITE_COORD( direction.z ); WRITE_BYTE( color ); WRITE_BYTE( min( amount, 255 ) ); MESSAGE_END(); }
void CSmoker::Think( void ) { Vector vecOrigin = GetAbsOrigin(); // lots of smoke MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecOrigin ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( vecOrigin.x + RANDOM_FLOAT( -pev->dmg, pev->dmg )); WRITE_COORD( vecOrigin.y + RANDOM_FLOAT( -pev->dmg, pev->dmg )); WRITE_COORD( vecOrigin.z ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( RANDOM_LONG( pev->scale, pev->scale * 1.1 )); WRITE_BYTE( RANDOM_LONG( 8, 14 ) ); // framerate MESSAGE_END(); pev->health--; if ( pev->health > 0 ) pev->nextthink = gpGlobals->time + RANDOM_FLOAT(0.1, 0.2); else UTIL_Remove( this ); }
void UTIL_Bubbles( Vector mins, Vector maxs, int count ) { Vector mid = (mins + maxs) * 0.5; float flHeight = UTIL_WaterLevel( mid, mid.z, mid.z + 1024 ); flHeight = flHeight - mins.z; MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, mid ); WRITE_BYTE( TE_BUBBLES ); WRITE_COORD( mins.x ); // mins WRITE_COORD( mins.y ); WRITE_COORD( mins.z ); WRITE_COORD( maxs.x ); // maxz WRITE_COORD( maxs.y ); WRITE_COORD( maxs.z ); WRITE_COORD( flHeight ); // height WRITE_SHORT( g_sModelIndexBubbles ); WRITE_BYTE( count ); // count WRITE_COORD( 8 ); // speed MESSAGE_END(); }
void CRpgRocket::CreateTrail(void) { if (!b_setup) { // make rocket sound after save\load EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/rocket1.wav", 1, 0.5); // restore rocket trail MESSAGE_BEGIN(MSG_BROADCAST, SVC_TEMPENTITY); WRITE_BYTE(TE_BEAMFOLLOW); WRITE_SHORT(entindex()); // entity WRITE_SHORT(m_iTrail); // model WRITE_BYTE(30); // life WRITE_BYTE(5); // width WRITE_BYTE(200); // r, g, b WRITE_BYTE(200); // r, g, b WRITE_BYTE(200); // r, g, b WRITE_BYTE(200); // brightness MESSAGE_END(); // move PHS/PVS data sending into here (SEND_ALL, SEND_PVS, SEND_PHS) b_setup = TRUE; } }
void CHalfLifeMultiplay :: GoToIntermission( void ) { if ( g_fGameOver ) return; // intermission has already been triggered, so ignore. MESSAGE_BEGIN(MSG_ALL, SVC_INTERMISSION); MESSAGE_END(); // 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 = gpGlobals->time + ( (int)mp_chattime.value ); g_flIntermissionStartTime = gpGlobals->time; g_fGameOver = true; m_iEndIntermissionButtonHit = FALSE; }
void CCrossbowBolt::ExplodeThink( void ) { int iContents = UTIL_PointContents ( pev->origin ); int iScale; pev->dmg = 40; iScale = 10; MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_EXPLOSION); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); if (iContents != CONTENTS_WATER) { WRITE_SHORT( g_sModelIndexFireball ); } else { WRITE_SHORT( g_sModelIndexWExplosion ); } WRITE_BYTE( iScale ); // scale * 10 WRITE_BYTE( 15 ); // framerate WRITE_BYTE( TE_EXPLFLAG_NONE ); MESSAGE_END(); 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 ::RadiusDamage( pev->origin, pev, pevOwner, pev->dmg, 128, CLASS_NONE, DMG_BLAST | DMG_ALWAYSGIB ); UTIL_Remove(this); }
void FlashFade( Vector vecSrc ) { UTIL_EmitAmbientSound( ENT(0), vecSrc, "weapons/flashbang_explode.wav", 1, ATTN_NORM, 0, 100 ); MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecSrc ); WRITE_BYTE( TE_DLIGHT ); WRITE_COORD( vecSrc.x ); WRITE_COORD( vecSrc.y ); WRITE_COORD( vecSrc.z ); WRITE_BYTE( 200 ); WRITE_BYTE( 255 ); WRITE_BYTE( 255 ); WRITE_BYTE( 255 ); WRITE_BYTE( 1 ); WRITE_BYTE( 1 ); MESSAGE_END(); TraceResult tr; CBaseEntity *pEntity = NULL; for( int i = 1; i <= 32; i++ ) { pEntity = UTIL_PlayerByIndex( i ); if( pEntity ) { UTIL_TraceLine( vecSrc, pEntity->pev->origin, ignore_monsters, ENT( pEntity->pev ), &tr ); if( tr.flFraction >= 1 ) { Vector Angles = UTIL_VecToAngles( vecSrc - pEntity->pev->origin ) - pEntity->pev->angles; float a = 255; if( Angles.y >= 135 && Angles.y <= 225 ) a = 200; UTIL_ScreenFade( pEntity, Vector( 255, 255, 255 ), 5, 2, a, 0 ); } } } }
void UTIL_GunshotDecalTrace( TraceResult *pTrace, int decalNumber ) { //Prevent array index out of bounds here - Solokiller if ( decalNumber < 0 || static_cast<size_t>( decalNumber ) >= gDecalsSize ) return; int index = gDecals[ decalNumber ].index; if ( index < 0 ) return; if (pTrace->flFraction == 1.0) return; MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, pTrace->vecEndPos ); WRITE_BYTE( TE_GUNSHOTDECAL ); WRITE_COORD( pTrace->vecEndPos.x ); WRITE_COORD( pTrace->vecEndPos.y ); WRITE_COORD( pTrace->vecEndPos.z ); WRITE_SHORT( (short)ENTINDEX(pTrace->pHit) ); WRITE_BYTE( index ); MESSAGE_END(); }
void CNihilanthHVR :: AbsorbInit( void ) { SetThink( &CNihilanthHVR::DissipateThink ); pev->renderamt = 255; MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_BEAMENTS ); WRITE_SHORT( this->entindex() ); WRITE_SHORT( m_hTargetEnt->entindex() + 0x1000 ); WRITE_SHORT( g_sModelIndexLaser ); WRITE_BYTE( 0 ); // framestart WRITE_BYTE( 0 ); // framerate WRITE_BYTE( 50 ); // life WRITE_BYTE( 80 ); // width WRITE_BYTE( 80 ); // noise WRITE_BYTE( 255 ); // r, g, b WRITE_BYTE( 128 ); // r, g, b WRITE_BYTE( 64 ); // r, g, b WRITE_BYTE( 255 ); // brightness WRITE_BYTE( 30 ); // speed MESSAGE_END(); }
// rewards the winning team (scores, winning sound, etc) void CBaseRoundRules::AwardWinners() { // - check team num is always a valid team or null (tie) if((m_iWinningTeam < UNDEFINED) || (m_iWinningTeam >= SPECS)) { ALERT(at_console, "Bad Winning Team - (%i)\n", (int)m_iWinningTeam); UTIL_LogPrintf(ROUND_LOGGING, "World triggered \"Bad Winning Team\" (respawn_style \"%i\") (round_state \"%i\") (winning_team \"%i\")\n", (int)GetRespawnStyle(), (int)GetRoundState(), m_iWinningTeam); return; } // - no sound if tie if(m_iWinningTeam == UNDEFINED) return; // - send updated team score to client g_pBGRules->GiveTeamPoints(m_iWinningTeam, (int)iWinBonus); // - play winning sound for(iCount = 0; iCount <= gpGlobals->maxClients; iCount++) { CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(iCount); if(pPlayer) { PLAYBACK_EVENT_FULL( FEV_HOSTONLY, pPlayer->edict(), g_pBGRules->m_usRoundEnd, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, m_iWinningTeam, 0, 0, 0 ); } } // - lets tell the player's who won extern int gmsgPredefinedMessage; MESSAGE_BEGIN(MSG_ALL, gmsgPredefinedMessage); WRITE_SHORT(iRoundWon); WRITE_SHORT(m_iWinningTeam); MESSAGE_END(); // Ben Contrib - Logging Winners (Demo Contrib) // -log the wins UTIL_LogPrintf(ROUND_LOGGING, "Team \"%s\" triggered \"Round Win\" (respawn_style \"%i\")\n", szTeamNames[m_iWinningTeam], (int)GetRespawnStyle()); // Ben Contrib End }
BOOL CItemLongJump::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer) { if (pPlayer->m_fLongJump) return FALSE; if (pPlayer->pev->weapons & (1 << WEAPON_SUIT)) { // player now has longjump module pPlayer->m_fLongJump = TRUE; SET_PHYSICS_KEY_VALUE(pPlayer->edict(), "slj", "1"); MESSAGE_BEGIN(MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev); WRITE_STRING(STRING(pev->classname)); MESSAGE_END(); // Play the longjump sound UNDONE: Kelly? correct sound? EMIT_SOUND_SUIT(pPlayer->edict(), "!HEV_A1"); return TRUE; } return FALSE; }
void CHalfLifeTeamplay::ChangePlayerTeam( CBasePlayer *pPlayer, const char *pTeamName, BOOL bKill, BOOL bGib ) { int damageFlags = DMG_GENERIC; int clientIndex = pPlayer->entindex(); if ( !bGib ) { damageFlags |= DMG_NEVERGIB; } else { damageFlags |= DMG_ALWAYSGIB; } if ( bKill ) { // kill the player, remove a death, and let them start on the new team m_DisableDeathMessages = TRUE; m_DisableDeathPenalty = TRUE; entvars_t *pevWorld = VARS( INDEXENT(0) ); pPlayer->TakeDamage( pevWorld, pevWorld, 900, damageFlags ); m_DisableDeathMessages = FALSE; m_DisableDeathPenalty = FALSE; } // copy out the team name from the model strncpy( pPlayer->m_szTeamName, pTeamName, TEAM_NAME_LENGTH ); g_engfuncs.pfnSetClientKeyValue( clientIndex, g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model", pPlayer->m_szTeamName ); g_engfuncs.pfnSetClientKeyValue( clientIndex, g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "team", pPlayer->m_szTeamName ); // notify everyone's HUD of the team change MESSAGE_BEGIN( MSG_ALL, gmsgTeamInfo ); WRITE_BYTE( clientIndex ); WRITE_STRING( pPlayer->m_szTeamName ); MESSAGE_END(); }
bool MyTouch( CBasePlayer *pPlayer ) override { if ( pPlayer->m_fLongJump ) { return false; } if ( ( pPlayer->pev->weapons & (1<<WEAPON_SUIT) ) ) { pPlayer->m_fLongJump = true;// player now has longjump module g_engfuncs.pfnSetPhysicsKeyValue( pPlayer->edict(), "slj", "1" ); MESSAGE_BEGIN( MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev ); WRITE_STRING( STRING(pev->classname) ); MESSAGE_END(); EMIT_SOUND_SUIT( pPlayer->edict(), "!HEV_A1" ); // Play the longjump sound UNDONE: Kelly? correct sound? return true; } return false; }
//========================================================= // InitHUD //========================================================= void CHalfLifeTeamplay::InitHUD( CBasePlayer *pPlayer ) { int i; SetDefaultPlayerTeam( pPlayer ); CHalfLifeMultiplay::InitHUD( pPlayer ); RecountTeams(); char *mdls = g_engfuncs.pfnInfoKeyValue( g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model" ); // update the current player of the team he is joining char text[1024]; if ( !strcmp( mdls, pPlayer->m_szTeamName ) ) { sprintf( text, "* you are on team \'%s\'\n", pPlayer->m_szTeamName ); } else { sprintf( text, "* assigned to team %s\n", pPlayer->m_szTeamName ); } ChangePlayerTeam( pPlayer, pPlayer->m_szTeamName, FALSE, FALSE ); UTIL_SayText( text, pPlayer ); int clientIndex = pPlayer->entindex(); RecountTeams(); // update this player with all the other players team info // loop through all active players and send their team info to the new client for ( i = 1; i <= gpGlobals->maxClients; i++ ) { CBaseEntity *plr = UTIL_PlayerByIndex( i ); if ( plr && IsValidTeam( plr->TeamID() ) ) { MESSAGE_BEGIN( MSG_ONE, gmsgTeamInfo, NULL, pPlayer->edict() ); WRITE_BYTE( plr->entindex() ); WRITE_STRING( plr->TeamID() ); MESSAGE_END(); } } }
void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd, float ScaleSplash1, float ScaleSplash2 ) { if( !( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) ) return; float len = Vector( vecEnd - vecSrc).Length(); Vector vecTemp = ( vecEnd + vecSrc ) / 2; while( len >= 1 ) { if( POINT_CONTENTS( vecTemp ) == CONTENTS_WATER ) vecEnd = vecTemp; else vecSrc = vecTemp; vecTemp = ( vecEnd + vecSrc ) / 2; len = Vector( vecEnd - vecSrc).Length(); } MESSAGE_BEGIN(MSG_ALL, gmsgWaterSplash); WRITE_COORD( vecTemp.x ); WRITE_COORD( vecTemp.y ); WRITE_COORD( vecTemp.z ); WRITE_COORD( ScaleSplash1 ); WRITE_COORD( ScaleSplash2 ); MESSAGE_END(); switch( RANDOM_LONG( 1, 3 ) ) { case 1: UTIL_EmitAmbientSound( ENT(0), vecTemp, "items/water_splash/water_splash1.wav", 1, ATTN_NORM, 0, 100 ); break; case 2: UTIL_EmitAmbientSound( ENT(0), vecTemp, "items/water_splash/water_splash2.wav", 1, ATTN_NORM, 0, 100 ); break; case 3: UTIL_EmitAmbientSound( ENT(0), vecTemp, "items/water_splash/water_splash3.wav", 1, ATTN_NORM, 0, 100 ); break; } }
void CHalfLifeMultiplay :: SendMOTDToClient( edict_t *client ) { // read from the MOTD.txt file int length, char_count = 0; char *pFileList; char *aFileList = pFileList = (char*)LOAD_FILE_FOR_ME( "motd.txt", &length ); // Send the message of the day // read it chunk-by-chunk, and send it in parts while ( pFileList && *pFileList && char_count < MAX_MOTD_LENGTH ) { char chunk[MAX_MOTD_CHUNK+1]; if ( strlen( pFileList ) < MAX_MOTD_CHUNK ) { strcpy( chunk, pFileList ); } else { strncpy( chunk, pFileList, MAX_MOTD_CHUNK ); chunk[MAX_MOTD_CHUNK] = 0; // strncpy doesn't always append the null terminator } char_count += strlen( chunk ); if ( char_count < MAX_MOTD_LENGTH ) pFileList = aFileList + char_count; else *pFileList = 0; MESSAGE_BEGIN( MSG_ONE, gmsgMOTD, NULL, client ); WRITE_BYTE( *pFileList ? FALSE : TRUE ); // FALSE means there is still more message to come WRITE_STRING( chunk ); MESSAGE_END(); } FREE_FILE( aFileList ); }
bool MyTouch( CBasePlayer *pPlayer ) override { if ( pPlayer->pev->deadflag != DEAD_NO ) { return false; } if ((pPlayer->pev->armorvalue < MAX_NORMAL_BATTERY) && (pPlayer->pev->weapons & (1<<WEAPON_SUIT))) { int pct; char szcharge[64]; pPlayer->pev->armorvalue += gSkillData.batteryCapacity; pPlayer->pev->armorvalue = min(pPlayer->pev->armorvalue, MAX_NORMAL_BATTERY); EMIT_SOUND( pPlayer->edict(), CHAN_ITEM, "items/gunpickup2.wav", 1, ATTN_NORM ); MESSAGE_BEGIN( MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev ); WRITE_STRING( STRING(pev->classname) ); MESSAGE_END(); // Suit reports new power level // For some reason this wasn't working in release build -- round it. pct = (int)( (float)(pPlayer->pev->armorvalue * 100.0) * (1.0/MAX_NORMAL_BATTERY) + 0.5); pct = (pct / 5); if (pct > 0) pct--; sprintf( szcharge,"!HEV_%1dP", pct ); //EMIT_SOUND_SUIT(ENT(pev), szcharge); pPlayer->SetSuitUpdate(szcharge, SUIT_SENTENCE, SUIT_NEXT_IN_30SEC); return true; } return false; }
BOOL SendUrlMOTD(edict_t *client,const char *URL) { BINTRACE int char_count = 0; char Msg[MAX_MOTD_LENGTH+1]; strncpy(Msg, URL, MAX_MOTD_LENGTH); Msg[MAX_MOTD_LENGTH] = '\0'; char *pMSG = Msg; char chunk[MAX_MOTD_CHUNK + 1]; while (pMSG && *pMSG && char_count < MAX_MOTD_LENGTH) { if (strlen(pMSG) < MAX_MOTD_CHUNK) { strcpy(chunk, pMSG); } else { strncpy(chunk, pMSG, MAX_MOTD_CHUNK); chunk[MAX_MOTD_CHUNK] = '\0'; } char_count += strlen(chunk); if (char_count < MAX_MOTD_LENGTH) pMSG += strlen(chunk); else *pMSG = 0; MESSAGE_BEGIN(client?MSG_ONE:MSG_ALL, gmsgMOTD, NULL, client); WRITE_BYTE(*pMSG ? FALSE : TRUE); WRITE_STRING(chunk); MESSAGE_END(); } return TRUE; }
void CApache :: FireRocket( void ) { static float side = 1.0; static int count; if (m_iRockets <= 0) return; UTIL_MakeAimVectors( pev->angles ); Vector vecSrc = pev->origin + 1.5 * (gpGlobals->v_forward * 21 + gpGlobals->v_right * 70 * side + gpGlobals->v_up * -79); switch( m_iRockets % 5) { case 0: vecSrc = vecSrc + gpGlobals->v_right * 10; break; case 1: vecSrc = vecSrc - gpGlobals->v_right * 10; break; case 2: vecSrc = vecSrc + gpGlobals->v_up * 10; break; case 3: vecSrc = vecSrc - gpGlobals->v_up * 10; break; case 4: break; } MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecSrc ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( vecSrc.x ); WRITE_COORD( vecSrc.y ); WRITE_COORD( vecSrc.z ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( 20 ); // scale * 10 WRITE_BYTE( 12 ); // framerate MESSAGE_END(); CBaseEntity *pRocket = CBaseEntity::Create( "hvr_rocket", vecSrc, pev->angles, edict() ); if (pRocket) pRocket->pev->velocity = pev->velocity + gpGlobals->v_forward * 100; m_iRockets--; side = - side; }
void AvHBaseBuildable::TriggerDeathAudioVisuals(bool isRecycled) { AvHClassType theTeamType = AVH_CLASS_TYPE_UNDEFINED; AvHTeam* theTeam = GetGameRules()->GetTeam((AvHTeamNumber)this->pev->team); if(theTeam) { theTeamType = theTeam->GetTeamType(); } switch(theTeamType) { case AVH_CLASS_TYPE_ALIEN: AvHSUPlayParticleEvent(kpsChamberDeath, this->edict(), this->pev->origin); break; case AVH_CLASS_TYPE_MARINE: // lots of smoke // puzl: 980 // Less smoke for recycled buildings int smokeScale = isRecycled ? 15 : 25; MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( RANDOM_FLOAT( pev->absmin.x, pev->absmax.x ) ); WRITE_COORD( RANDOM_FLOAT( pev->absmin.y, pev->absmax.y ) ); WRITE_COORD( RANDOM_FLOAT( pev->absmin.z, pev->absmax.z ) ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( smokeScale ); // scale * 10 WRITE_BYTE( 10 ); // framerate MESSAGE_END(); break; } char* theKilledSound = this->GetKilledSound(); if(theKilledSound) { EMIT_SOUND(ENT(this->pev), CHAN_AUTO, theKilledSound, 1.0, ATTN_IDLE); } }
// Let the player know there is a grass system void CGrass::MakeAware( CBaseEntity *pEnt ) { // don't want to send a to tree again if(pEnt->IsPlayer() == false) return; // particle system has been triggered off or starts off if(bIsOn == false) return; // lets give them everything MESSAGE_BEGIN(MSG_ONE, gmsgGrassParticles, NULL, pEnt->pev); WRITE_SHORT(iID); WRITE_BYTE(0); WRITE_COORD(pev->absmax.x); WRITE_COORD(pev->absmax.y); WRITE_COORD(pev->absmax.z); WRITE_COORD(pev->absmin.x); WRITE_COORD(pev->absmin.y); WRITE_COORD(pev->absmin.z); WRITE_STRING(sParticleDefintionFile); MESSAGE_END(); }
void UTIL_DrawBeamPoints(Vector vecStart, Vector vecEnd, int iLifetime, byte bRed, byte bGreen, byte bBlue) { MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, vecStart); WRITE_BYTE(TE_BEAMPOINTS); WRITE_COORD(vecStart.x); WRITE_COORD(vecStart.y); WRITE_COORD(vecStart.z); WRITE_COORD(vecEnd.x); WRITE_COORD(vecEnd.y); WRITE_COORD(vecEnd.z); WRITE_SHORT(s_iBeamSprite); WRITE_BYTE(0); WRITE_BYTE(0); WRITE_BYTE(iLifetime); WRITE_BYTE(10); WRITE_BYTE(0); WRITE_BYTE(bRed); WRITE_BYTE(bGreen); WRITE_BYTE(bBlue); WRITE_BYTE(255); WRITE_BYTE(0); MESSAGE_END(); }