void CNihilanthHVR :: TeleportThink( void ) { pev->nextthink = gpGlobals->time + 0.1; // check world boundaries if (m_hEnemy == NULL || !m_hEnemy->IsAlive() || pev->origin.x < -4096 || pev->origin.x > 4096 || pev->origin.y < -4096 || pev->origin.y > 4096 || pev->origin.z < -4096 || pev->origin.z > 4096) { STOP_SOUND(edict(), CHAN_WEAPON, "x/x_teleattack1.wav" ); UTIL_Remove( this ); return; } if ((m_hEnemy->Center() - pev->origin).Length() < 128) { STOP_SOUND(edict(), CHAN_WEAPON, "x/x_teleattack1.wav" ); UTIL_Remove( this ); if (m_hTargetEnt != NULL) m_hTargetEnt->Use( m_hEnemy, m_hEnemy, USE_ON, 1.0 ); if ( m_hTouch != NULL && m_hEnemy != NULL ) m_hTouch->Touch( m_hEnemy ); } else { MovetoTarget( m_hEnemy->Center( ) ); } MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_ELIGHT ); WRITE_SHORT( entindex( ) ); // entity, attachment WRITE_COORD( pev->origin.x ); // origin WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_COORD( 256 ); // radius WRITE_BYTE( 0 ); // R WRITE_BYTE( 255 ); // G WRITE_BYTE( 0 ); // B WRITE_BYTE( 10 ); // life * 10 WRITE_COORD( 256 ); // decay MESSAGE_END(); pev->frame = (int)(pev->frame + 1) % 20; }
void CNihilanthHVR::TeleportTouch( CBaseEntity *pOther ) { CBaseEntity *pEnemy = m_hEnemy; if (pOther == pEnemy) { if (m_hTargetEnt != NULL) m_hTargetEnt->Use( pEnemy, pEnemy, USE_ON, 1.0 ); if (m_hTouch != NULL && pEnemy != NULL ) m_hTouch->Touch( pEnemy ); } else { m_pNihilanth->MakeFriend( pev->origin ); } SetTouch( NULL ); STOP_SOUND(edict(), CHAN_WEAPON, "x/x_teleattack1.wav" ); UTIL_Remove( this ); }