//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTeam::AwardAchievement( int iAchievement ) { Assert( iAchievement >= 0 && iAchievement < 255 ); // must fit in byte CRecipientFilter filter; int iNumPlayers = GetNumPlayers(); for ( int i=0; i<iNumPlayers; i++ ) { if ( GetPlayer(i) ) { filter.AddRecipient( GetPlayer(i) ); } } UserMessageBegin( filter, "AchievementEvent" ); WRITE_BYTE( iAchievement ); MessageEnd(); }
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; }
static target_size RemoveEscapes( char *buf, const char *inbuf, target_size ilen ) { int c; target_size olen; bool error; const unsigned char *end; const unsigned char *p = (const unsigned char *)inbuf; olen = 0; error = false; end = p + ilen; while( p < end ) { c = *p++; if( c == '\\' ) { c = ESCChar( *p, &p, &error ); if( CompFlags.wide_char_string ) { WRITE_BYTE( c ); c = c >> 8; } } else {
// 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(); }
/* ======================== 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 ); }
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; }
void CShockBeam::Explode() { const Contents contents = UTIL_PointContents( GetAbsOrigin() ); if( m_pSprite ) { UTIL_Remove( m_pSprite ); m_pSprite = nullptr; } if( m_pBeam1 ) { UTIL_Remove( m_pBeam1 ); m_pBeam1 = nullptr; } if( m_pBeam2 ) { UTIL_Remove( m_pBeam2 ); m_pBeam2 = nullptr; } SetDamage( 40 ); MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, GetAbsOrigin() ); WRITE_BYTE( TE_DLIGHT ); WRITE_COORD_VECTOR( GetAbsOrigin() ); WRITE_BYTE( 8 ); WRITE_BYTE( 0 ); WRITE_BYTE( 253 ); WRITE_BYTE( 253 ); WRITE_BYTE( 5 ); WRITE_BYTE( 10 ); MESSAGE_END(); SetOwner( nullptr ); EMIT_SOUND_DYN( this, CHAN_WEAPON, "weapons/shock_impact.wav", UTIL_RandomFloat( 0.8, 0.9 ), ATTN_NORM, 0, PITCH_NORM ); }
void NetworkedClass::SetupServerClass() { int iType = PN_NONE; try { iType = boost::python::call_method<int>(m_PyClass.ptr(), "GetPyNetworkType"); m_pServerClass->SetupServerClass( iType ); PyObject_SetAttrString(m_PyClass.ptr(), "pyServerClass", bp::object(bp::ptr((ServerClass *)m_pServerClass)).ptr()); } catch(bp::error_already_set &) { PyErr_Print(); PyErr_Clear(); } // Send message to all clients CReliableBroadcastRecipientFilter filter; UserMessageBegin(filter, "PyNetworkCls"); WRITE_BYTE(iType); WRITE_STRING(m_pServerClass->GetName()); WRITE_STRING(m_pServerClass->m_pNetworkedClass->m_pNetworkName); MessageEnd(); }
//========================================================= // 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(); } } }
BOOL CItemAssaultSuit::__MAKE_VHOOK(MyTouch)(CBasePlayer *pPlayer) { pPlayer->m_iKevlar = ARMOR_VESTHELM; pPlayer->pev->armorvalue = 100; EMIT_SOUND(pPlayer->edict(), CHAN_ITEM, "items/ammopickup2.wav", VOL_NORM, ATTN_NORM); MESSAGE_BEGIN(MSG_ONE, gmsgItemPickup, NULL, pPlayer->pev); WRITE_STRING(STRING(pev->classname)); MESSAGE_END(); MESSAGE_BEGIN(MSG_ONE, gmsgArmorType, NULL, pPlayer->pev); WRITE_BYTE(1); MESSAGE_END(); if (TheTutor != NULL) { TheTutor->OnEvent(EVENT_PLAYER_BOUGHT_SOMETHING, pPlayer); } return TRUE; }
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(); }
/* warning - don't pass here const string */ void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name) { if (!gmsgMOTD) return; // :TODO: Maybe output a warning log? if (gmsgServerName) { MESSAGE_BEGIN(MSG_ONE, gmsgServerName, NULL, client); WRITE_STRING(name); MESSAGE_END(); } char *n = motd; char c = 0; int a; while (*n) { a = mlen; if (a > 175) a = 175; mlen -= a; c = *(n += a); *n = 0; MESSAGE_BEGIN(MSG_ONE, gmsgMOTD, NULL, client); WRITE_BYTE(c ? FALSE : TRUE); WRITE_STRING(motd); MESSAGE_END(); *n = c; motd = n; } if (gmsgServerName) { MESSAGE_BEGIN(MSG_ONE, gmsgServerName, NULL, client); WRITE_STRING(hostname->string); MESSAGE_END(); } }
void main(void) { unsigned char n, user; restart_hw(); // Hardware zurücksetzen restart_prot(); // Protokoll-relevante Parameter zurücksetzen restart_app(); // Anwendungsspezifische Einstellungen zurücksetzen wiegand=0; do { if (TF0) { // timeout bei Wiegand-Protokoll empfangen TR0=0; TF0=0; EKBI=0; // keyboard interrupt sperren user=((wiegand>>1)&0xFF)-1; // user-no ab 2. Bit im Wiegand Telegramm wiegand=0; if (user<16) schalten(1,user); // user 1-16 den objekten 0-15 zuordnen, nur Schalten! EKBI=1; // keyboard interrupt freigeben } TASTER=1; // Pin als Eingang schalten um Taster abzufragen if(!TASTER) { // Taster gedrückt for(n=0;n<100;n++) {} // Entprell-Zeit while(!TASTER); // warten bis Taster losgelassen EA=0; START_WRITECYCLE; WRITE_BYTE(0x00,0x60,userram[0x60] ^ 0x81); // Prog-Bit und Parity-Bit im system_state toggeln STOP_WRITECYCLE; EA=1; } TASTER=!(userram[0x060] & 0x01); // LED entsprechend Prog-Bit schalten (low=LED an) for(n=0;n<100;n++) {} // falls Hauptroutine keine Zeit verbraucht, der LED etwas Zeit geben, damit sie auch leuchten kann } while(1); }
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 :: 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 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; }
// 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 CEnvFunnel::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) { MESSAGE_BEGIN(MSG_BROADCAST, SVC_TEMPENTITY); WRITE_BYTE(TE_LARGEFUNNEL); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z); WRITE_SHORT(m_iSprite); if (pev->spawnflags & SF_FUNNEL_REVERSE)// funnel flows in reverse? { WRITE_SHORT(1); } else { WRITE_SHORT(0); } MESSAGE_END(); SetThink(&CEnvFunnel::SUB_Remove); pev->nextthink = gpGlobals->time; }
/* ------------------------------------------------------------------------- Stop Card Hardware ------------------------------------------------------------------------- */ static void stop_pri_hardware (PISDN_ADAPTER IoAdapter) { dword i; byte __iomem *p; dword volatile __iomem *cfgReg = (void __iomem *)DIVA_OS_MEM_ATTACH_CFG(IoAdapter); WRITE_DWORD(&cfgReg[3], 0); WRITE_DWORD(&cfgReg[1], 0); DIVA_OS_MEM_DETACH_CFG(IoAdapter, cfgReg); IoAdapter->a.ram_out (&IoAdapter->a, &RAM->SWReg, SWREG_HALT_CPU) ; i = 0 ; while ( (i < 100) && (IoAdapter->a.ram_in (&IoAdapter->a, &RAM->SWReg) != 0) ) { diva_os_wait (1) ; i++ ; } DBG_TRC(("%s: PRI stopped (%d)", IoAdapter->Name, i)) cfgReg = (void __iomem *)DIVA_OS_MEM_ATTACH_CFG(IoAdapter); WRITE_DWORD(&cfgReg[0],((dword)(~0x03E00000))); DIVA_OS_MEM_DETACH_CFG(IoAdapter, cfgReg); diva_os_wait (1) ; p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); WRITE_BYTE(p, _MP_RISC_RESET | _MP_LED1 | _MP_LED2); DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); }
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_ShowMenu(edict_t* pEdict, int keybits, int time, char *menu, int mlen) { char *n = menu; char c = 0; int a; do { a = mlen; if (a > 175) a = 175; mlen -= a; c = *(n+=a); *n = 0; MESSAGE_BEGIN(MSG_ONE, gmsgShowMenu, NULL, pEdict); WRITE_SHORT(keybits); WRITE_CHAR(time); WRITE_BYTE(c ? TRUE : FALSE); WRITE_STRING(menu); MESSAGE_END(); *n = c; menu = n; } while (*n); }
void CMonsterSoul::Killed( entvars_t *pevAttacker, int iGib ) { // shut off balls /* m_iBall[0] = 0; m_iBallTime[0] = gpGlobals->time + 4.0; m_iBall[1] = 0; m_iBallTime[1] = gpGlobals->time + 4.0; */ // fade balls if (m_pBall[0]) { m_pBall[0]->SUB_StartFadeOut(); m_pBall[0] = NULL; } if (m_pBall[1]) { m_pBall[1]->SUB_StartFadeOut(); m_pBall[1] = NULL; } MESSAGE_BEGIN(MSG_ALL, gmsgParticles); WRITE_SHORT(0); WRITE_BYTE(0); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_COORD( 0 ); WRITE_COORD( 0 ); WRITE_COORD( 0 ); WRITE_SHORT(iSoulDie); MESSAGE_END(); CSquadMonster::Killed( pevAttacker, iGib ); }
void Message::Send() { msgparam *pParam = NULL; for (size_t i=1; i<=m_CurParam; i++) { pParam = m_Params[i]; switch (pParam->type) { case arg_byte: WRITE_BYTE(pParam->v.iData); break; case arg_char: WRITE_CHAR(pParam->v.iData); break; case arg_short: WRITE_SHORT(pParam->v.iData); break; case arg_long: WRITE_LONG(pParam->v.iData); break; case arg_angle: WRITE_ANGLE(pParam->v.fData); break; case arg_coord: WRITE_COORD(pParam->v.fData); break; case arg_string: WRITE_STRING(pParam->szData.chars()); break; case arg_entity: WRITE_ENTITY(pParam->v.iData); break; } } }
void print_client(edict_t *pEdict, int type, const char *fmt, ...) { //don't do this to bots if (pEdict->v.flags & FL_FAKECLIENT) return; char buffer[255]; va_list ap; va_start(ap, fmt); vsnprintf(buffer, sizeof(buffer)-1, fmt, ap); va_end(ap); if (!g_TextMsg) { g_TextMsg = GET_USER_MSG_ID(PLID, "TextMsg", NULL); if (!g_TextMsg) return; } MESSAGE_BEGIN(pEdict ? MSG_ONE : MSG_BROADCAST, g_TextMsg, NULL, pEdict); WRITE_BYTE(type); WRITE_STRING(buffer); MESSAGE_END(); }
void CDecal :: TriggerDecal ( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { // this is set up as a USE function for infodecals that have targetnames, so that the // decal doesn't get applied until it is fired. (usually by a scripted sequence) TraceResult trace; int entityIndex; UTIL_TraceLine( pev->origin - Vector(5,5,5), pev->origin + Vector(5,5,5), ignore_monsters, ENT(pev), &trace ); MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY); WRITE_BYTE( TE_BSPDECAL ); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_SHORT( (int)pev->skin ); entityIndex = (short)ENTINDEX(trace.pHit); WRITE_SHORT( entityIndex ); if ( entityIndex ) WRITE_SHORT( (int)VARS(trace.pHit)->modelindex ); MESSAGE_END(); SetThink( SUB_Remove ); pev->nextthink = gpGlobals->time + 0.1; }
void DecalTrace (entvars_t *pev, TraceResult *trace, int logotypeIndex) { // this function draw spraypaint depending on the tracing results. static Array <String> logotypes; if (logotypes.IsEmpty ()) { logotypes = String ("{biohaz;{graf004;{graf005;{lambda06;{target;{hand1").Split (";"); } int entityIndex = -1, message = TE_DECAL; int decalIndex = (*g_engfuncs.pfnDecalIndex) (logotypes[logotypeIndex]); if (decalIndex < 0) decalIndex = (*g_engfuncs.pfnDecalIndex) ("{lambda06"); if (trace->flFraction == 1.0f) return; if (!FNullEnt (trace->pHit)) { if (trace->pHit->v.solid == SOLID_BSP || trace->pHit->v.movetype == MOVETYPE_PUSHSTEP) entityIndex = ENTINDEX (trace->pHit); else return; } else entityIndex = 0; if (entityIndex != 0) { if (decalIndex > 255) { message = TE_DECALHIGH; decalIndex -= 256; } } else { message = TE_WORLDDECAL; if (decalIndex > 255) { message = TE_WORLDDECALHIGH; decalIndex -= 256; } } if (logotypes[logotypeIndex].Has ("{")) { MESSAGE_BEGIN (MSG_BROADCAST, SVC_TEMPENTITY); WRITE_BYTE (TE_PLAYERDECAL); WRITE_BYTE (ENTINDEX (ENT (pev))); WRITE_COORD (trace->vecEndPos.x); WRITE_COORD (trace->vecEndPos.y); WRITE_COORD (trace->vecEndPos.z); WRITE_SHORT (static_cast <short> (ENTINDEX (trace->pHit))); WRITE_BYTE (decalIndex); MESSAGE_END (); } else { MESSAGE_BEGIN (MSG_BROADCAST, SVC_TEMPENTITY); WRITE_BYTE (message); WRITE_COORD (trace->vecEndPos.x); WRITE_COORD (trace->vecEndPos.y); WRITE_COORD (trace->vecEndPos.z); WRITE_BYTE (decalIndex); if (entityIndex) WRITE_SHORT (entityIndex); MESSAGE_END(); } }
void CGlock::GlockFire( float flSpread , float flCycleTime, BOOL fUseAutoAim ) { if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.2; } return; } m_iClip--; m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); #ifndef CLIENT_DLL MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_DLIGHT ); WRITE_COORD( pev->origin.x ); // origin WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_BYTE( 16 ); // radius WRITE_BYTE( 255 ); // R WRITE_BYTE( 255 ); // G WRITE_BYTE( 160 ); // B WRITE_BYTE( 0 ); // life * 10 WRITE_BYTE( 0 ); // decay MESSAGE_END(); #endif // silenced if (pev->body == 1) { m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; } else { // non-silenced m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH; } Vector vecSrc = m_pPlayer->GetGunPosition( ); Vector vecAiming; if ( fUseAutoAim ) { vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES ); } else { vecAiming = gpGlobals->v_forward; } Vector vecDir; vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, Vector( flSpread, flSpread, flSpread ), 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), fUseAutoAim ? m_usFireGlock1 : m_usFireGlock2, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, ( m_iClip == 0 ) ? 1 : 0, 0 ); m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + flCycleTime; if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) // HEV suit - indicate out of ammo condition m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); }
void CBaseTurret :: TurretDeath( void ) { BOOL iActive = FALSE; StudioFrameAdvance( ); pev->nextthink = gpGlobals->time + 0.1; if (pev->deadflag != DEAD_DEAD) { pev->deadflag = DEAD_DEAD; float flRndSound = RANDOM_FLOAT ( 0 , 1 ); if ( flRndSound <= 0.33 ) EMIT_SOUND(ENT(pev), CHAN_BODY, "turret/tu_die.wav", 1.0, ATTN_NORM); else if ( flRndSound <= 0.66 ) EMIT_SOUND(ENT(pev), CHAN_BODY, "turret/tu_die2.wav", 1.0, ATTN_NORM); else EMIT_SOUND(ENT(pev), CHAN_BODY, "turret/tu_die3.wav", 1.0, ATTN_NORM); EMIT_SOUND_DYN(ENT(pev), CHAN_STATIC, "turret/tu_active2.wav", 0, 0, SND_STOP, 100); if (m_iOrientation == 0) m_vecGoalAngles.x = -15; else m_vecGoalAngles.x = -90; SetTurretAnim(TURRET_ANIM_DIE); EyeOn( ); } EyeOff( ); if (pev->dmgtime + RANDOM_FLOAT( 0, 2 ) > gpGlobals->time) { // lots of smoke 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( pev->origin.z - m_iOrientation * 64 ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( 25 ); // scale * 10 WRITE_BYTE( 10 - m_iOrientation * 5); // framerate MESSAGE_END(); } if (pev->dmgtime + RANDOM_FLOAT( 0, 5 ) > gpGlobals->time) { Vector vecSrc = Vector( RANDOM_FLOAT( pev->absmin.x, pev->absmax.x ), RANDOM_FLOAT( pev->absmin.y, pev->absmax.y ), 0 ); if (m_iOrientation == 0) vecSrc = vecSrc + Vector( 0, 0, RANDOM_FLOAT( pev->origin.z, pev->absmax.z ) ); else vecSrc = vecSrc + Vector( 0, 0, RANDOM_FLOAT( pev->absmin.z, pev->origin.z ) ); UTIL_Sparks( vecSrc ); } if (m_fSequenceFinished && !MoveTurret( ) && pev->dmgtime + 5 < gpGlobals->time) { pev->framerate = 0; SetThink( NULL ); } }
void CSentry :: SentryDeath( void ) { BOOL iActive = FALSE; StudioFrameAdvance( ); pev->nextthink = gpGlobals->time + 0.1; if (pev->deadflag != DEAD_DEAD) { pev->deadflag = DEAD_DEAD; float flRndSound = RANDOM_FLOAT ( 0 , 1 ); if ( flRndSound <= 0.33 ) EMIT_SOUND(ENT(pev), CHAN_BODY, "turret/tu_die.wav", 1.0, ATTN_NORM); else if ( flRndSound <= 0.66 ) EMIT_SOUND(ENT(pev), CHAN_BODY, "turret/tu_die2.wav", 1.0, ATTN_NORM); else EMIT_SOUND(ENT(pev), CHAN_BODY, "turret/tu_die3.wav", 1.0, ATTN_NORM); EMIT_SOUND_DYN(ENT(pev), CHAN_STATIC, "turret/tu_active2.wav", 0, 0, SND_STOP, 100); SetBoneController( 0, 0 ); SetBoneController( 1, 0 ); SetTurretAnim(TURRET_ANIM_DIE); pev->solid = SOLID_NOT; pev->angles.y = UTIL_AngleMod( pev->angles.y + RANDOM_LONG( 0, 2 ) * 120 ); EyeOn( ); } EyeOff( ); Vector vecSrc, vecAng; GetAttachment( 1, vecSrc, vecAng ); if (pev->dmgtime + RANDOM_FLOAT( 0, 2 ) > gpGlobals->time) { // lots of smoke MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( vecSrc.x + RANDOM_FLOAT( -16, 16 ) ); WRITE_COORD( vecSrc.y + RANDOM_FLOAT( -16, 16 ) ); WRITE_COORD( vecSrc.z - 32 ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( 15 ); // scale * 10 WRITE_BYTE( 8 ); // framerate MESSAGE_END(); } if (pev->dmgtime + RANDOM_FLOAT( 0, 8 ) > gpGlobals->time) { UTIL_Sparks( vecSrc ); } if (m_fSequenceFinished && pev->dmgtime + 5 < gpGlobals->time) { pev->framerate = 0; SetThink( NULL ); } }
//========================================================= // Hornet is flying, gently tracking target //========================================================= void CHornet :: TrackTarget ( void ) { Vector vecFlightDir; Vector vecDirToEnemy; float flDelta; StudioFrameAdvance( ); if (gpGlobals->time > m_flStopAttack) { SetTouch( NULL ); SetThink( SUB_Remove ); pev->nextthink = gpGlobals->time + 0.1; return; } // UNDONE: The player pointer should come back after returning from another level if ( m_hEnemy == NULL ) {// enemy is dead. Look( 512 ); m_hEnemy = BestVisibleEnemy( ); } if ( m_hEnemy != NULL && FVisible( m_hEnemy )) { m_vecEnemyLKP = m_hEnemy->BodyTarget( GetAbsOrigin() ); } else { m_vecEnemyLKP = m_vecEnemyLKP + GetAbsVelocity() * m_flFlySpeed * 0.1; } vecDirToEnemy = ( m_vecEnemyLKP - GetAbsOrigin() ).Normalize(); if (GetAbsVelocity().Length() < 0.1) vecFlightDir = vecDirToEnemy; else vecFlightDir = GetAbsVelocity().Normalize(); // measure how far the turn is, the wider the turn, the slow we'll go this time. flDelta = DotProduct ( vecFlightDir, vecDirToEnemy ); if ( flDelta < 0.5 ) {// hafta turn wide again. play sound switch (RANDOM_LONG(0,2)) { case 0: EMIT_SOUND( ENT(pev), CHAN_VOICE, "hornet/ag_buzz1.wav", HORNET_BUZZ_VOLUME, ATTN_NORM); break; case 1: EMIT_SOUND( ENT(pev), CHAN_VOICE, "hornet/ag_buzz2.wav", HORNET_BUZZ_VOLUME, ATTN_NORM); break; case 2: EMIT_SOUND( ENT(pev), CHAN_VOICE, "hornet/ag_buzz3.wav", HORNET_BUZZ_VOLUME, ATTN_NORM); break; } } if ( flDelta <= 0 && m_iHornetType == HORNET_TYPE_RED ) {// no flying backwards, but we don't want to invert this, cause we'd go fast when we have to turn REAL far. flDelta = 0.25; } SetAbsVelocity(( vecFlightDir + vecDirToEnemy).Normalize() ); if( pev->owner && ( pev->owner->v.flags & FL_MONSTER )) { // random pattern only applies to hornets fired by monsters, not players. Vector vecVelocity = GetAbsVelocity(); vecVelocity.x += RANDOM_FLOAT ( -0.10, 0.10 );// scramble the flight dir a bit. vecVelocity.y += RANDOM_FLOAT ( -0.10, 0.10 ); vecVelocity.z += RANDOM_FLOAT ( -0.10, 0.10 ); SetAbsVelocity( vecVelocity ); } switch ( m_iHornetType ) { case HORNET_TYPE_RED: SetAbsVelocity( GetAbsVelocity() * ( m_flFlySpeed * flDelta ));// scale the dir by the ( speed * width of turn ) pev->nextthink = gpGlobals->time + RANDOM_FLOAT( 0.1, 0.3 ); break; case HORNET_TYPE_ORANGE: SetAbsVelocity( GetAbsVelocity() * m_flFlySpeed ); // do not have to slow down to turn. pev->nextthink = gpGlobals->time + 0.1;// fixed think time break; } SetAbsAngles( UTIL_VecToAngles( GetAbsVelocity())); pev->solid = SOLID_BBOX; // if hornet is close to the enemy, jet in a straight line for a half second. // (only in the single player game) if ( m_hEnemy != NULL && !g_pGameRules->IsMultiplayer() ) { if ( flDelta >= 0.4 && ( GetAbsOrigin() - m_vecEnemyLKP ).Length() <= 300 ) { Vector vecOrigin = GetAbsOrigin(); MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecOrigin ); WRITE_BYTE( TE_SPRITE ); WRITE_COORD( vecOrigin.x ); // pos WRITE_COORD( vecOrigin.y ); WRITE_COORD( vecOrigin.z ); WRITE_SHORT( iHornetPuff ); // model // WRITE_BYTE( 0 ); // life * 10 WRITE_BYTE( 2 ); // size * 10 WRITE_BYTE( 128 ); // brightness MESSAGE_END(); switch( RANDOM_LONG( 0, 2 )) { case 0: EMIT_SOUND( ENT(pev), CHAN_VOICE, "hornet/ag_buzz1.wav", HORNET_BUZZ_VOLUME, ATTN_NORM ); break; case 1: EMIT_SOUND( ENT(pev), CHAN_VOICE, "hornet/ag_buzz2.wav", HORNET_BUZZ_VOLUME, ATTN_NORM ); break; case 2: EMIT_SOUND( ENT(pev), CHAN_VOICE, "hornet/ag_buzz3.wav", HORNET_BUZZ_VOLUME, ATTN_NORM ); break; } SetAbsVelocity( GetAbsVelocity() * 2 ); pev->nextthink = gpGlobals->time + 1.0; // don't attack again m_flStopAttack = gpGlobals->time; } } }