void env_afx_teleporter_touch( gentity_t *self, gentity_t *other, trace_t* ) { gentity_t *dest; if ( self->s.eFlags & EF_NODRAW ) { return; } if ( !other->client ) { return; } if ( other->client->ps.pm_type == PM_DEAD ) { return; } // Spectators only? if ( ( self->spawnflags & 1 ) && other->client->sess.spectatorState == SPECTATOR_NOT ) { return; } dest = G_PickRandomTargetFor( self ); if ( !dest ) return; G_TeleportPlayer( other, dest->s.origin, dest->s.angles, self->config.speed ); }
/* ================================================================================= target_teleporter ================================================================================= */ void target_teleporter_act( gentity_t *self, gentity_t *other, gentity_t *activator ) { gentity_t *dest; if ( !activator || !activator->client ) { return; } dest = G_PickRandomTargetFor( self ); if ( !dest ) return; G_TeleportPlayer( activator, dest->s.origin, dest->s.angles, self->config.speed ); }
static void target_teleporter_use( edict_t *self, edict_t *other, edict_t *activator ) { edict_t *dest; if( !G_PlayerCanTeleport( activator ) ) return; if( ( self->s.team != TEAM_SPECTATOR ) && ( self->s.team != activator->s.team ) ) return; if( self->spawnflags & 1 && activator->r.client->ps.pmove.pm_type != PM_SPECTATOR ) return; dest = G_Find( NULL, FOFS( targetname ), self->target ); if( !dest ) { if( developer->integer ) G_Printf( "Couldn't find destination.\n" ); return; } G_TeleportPlayer( activator, dest ); }