summaryrefslogtreecommitdiff
path: root/src/game/g_target.c
diff options
context:
space:
mode:
authorChristopher Schwarz <lakitu7@gmail.com>2009-10-03 12:33:57 +0000
committerTim Angus <tim@ngus.net>2013-01-03 00:16:04 +0000
commit106b80cb16f76af0f6dc51bbd922c740e7ddb16a (patch)
tree888076256579274b5affbf88748a5dbccaca3e20 /src/game/g_target.c
parent6f893383847667c5187ccc0a15ea642c841b4b90 (diff)
* (bug 3948) prevent buggy maps from crashing .so servers via g_target.c (Rezyn)
Diffstat (limited to 'src/game/g_target.c')
-rw-r--r--src/game/g_target.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/game/g_target.c b/src/game/g_target.c
index 6dacfdf2..c545c299 100644
--- a/src/game/g_target.c
+++ b/src/game/g_target.c
@@ -63,6 +63,9 @@ The activator is given this many points.
*/
void Use_Target_Score( gentity_t *ent, gentity_t *other, gentity_t *activator )
{
+ if( !activator )
+ return;
+
AddScore( activator, ent->count );
}
@@ -83,7 +86,7 @@ If "private", only the activator gets the message. If no checks, all clients ge
*/
void Use_Target_Print( gentity_t *ent, gentity_t *other, gentity_t *activator )
{
- if( activator->client && ( ent->spawnflags & 4 ) )
+ if( activator && activator->client && ( ent->spawnflags & 4 ) )
{
trap_SendServerCommand( activator-g_entities, va( "cp \"%s\"", ent->message ) );
return;
@@ -135,7 +138,7 @@ void Use_Target_Speaker( gentity_t *ent, gentity_t *other, gentity_t *activator
else
{
// normal sound
- if( ent->spawnflags & 8 )
+ if( ent->spawnflags & 8 && activator )
G_AddEvent( activator, EV_GENERAL_SOUND, ent->noise_index );
else if( ent->spawnflags & 4 )
G_AddEvent( ent, EV_GLOBAL_SOUND, ent->noise_index );
@@ -196,7 +199,7 @@ void target_teleporter_use( gentity_t *self, gentity_t *other, gentity_t *activa
{
gentity_t *dest;
- if( !activator->client )
+ if( !activator || !activator->client )
return;
dest = G_PickTarget( self->target );
@@ -231,11 +234,11 @@ if RANDOM is checked, only one of the targets will be fired, not all of them
*/
void target_relay_use( gentity_t *self, gentity_t *other, gentity_t *activator )
{
- if( ( self->spawnflags & 1 ) && activator->client &&
+ if( ( self->spawnflags & 1 ) && activator && activator->client &&
activator->client->ps.stats[ STAT_TEAM ] != TEAM_HUMANS )
return;
- if( ( self->spawnflags & 2 ) && activator->client &&
+ if( ( self->spawnflags & 2 ) && activator && activator->client &&
activator->client->ps.stats[ STAT_TEAM ] != TEAM_ALIENS )
return;
@@ -266,6 +269,9 @@ Kills the activator.
*/
void target_kill_use( gentity_t *self, gentity_t *other, gentity_t *activator )
{
+ if( !activator )
+ return;
+
G_Damage( activator, NULL, NULL, NULL, NULL, 100000, DAMAGE_NO_PROTECTION, MOD_TELEFRAG );
}
@@ -448,7 +454,7 @@ target_hurt_use
void target_hurt_use( gentity_t *self, gentity_t *other, gentity_t *activator )
{
// hurt the activator
- if( !activator->takedamage )
+ if( !activator || !activator->takedamage )
return;
G_Damage( activator, self, self, NULL, NULL, self->damage, 0, MOD_TRIGGER_HURT );