X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fspawnpoints.qc;h=3f4e72c3b3f584b67c0cc4de06f9f033d568f6db;hb=3adaa0873ad9eac20f32e6e3fc0455d4f9e044cd;hp=b84185e52eae3e6ed7b19b59a60352ea2616dc77;hpb=d0b85ebad8d5e857da325eb4fc948d401d725e3b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/spawnpoints.qc b/qcsrc/server/spawnpoints.qc index b84185e52..3f4e72c3b 100644 --- a/qcsrc/server/spawnpoints.qc +++ b/qcsrc/server/spawnpoints.qc @@ -1,39 +1,37 @@ - -.float last_spawn_time; -.float send_spawn; -float Spawn_Send(entity to, float sf) +float SpawnPoint_Send(entity to, float sf) { WriteByte(MSG_ENTITY, ENT_CLIENT_SPAWNPOINT); - WriteByte(MSG_ENTITY, sf); - - if(sf & 1) - { - WriteByte(MSG_ENTITY, self.team); - WriteShort(MSG_ENTITY, self.origin_x); - WriteShort(MSG_ENTITY, self.origin_y); - WriteShort(MSG_ENTITY, self.origin_z); - } - if(sf & 2) - { - WriteLong(MSG_ENTITY, self.last_spawn_time); - } - + + WriteByte(MSG_ENTITY, self.team); + WriteShort(MSG_ENTITY, self.origin_x); + WriteShort(MSG_ENTITY, self.origin_y); + WriteShort(MSG_ENTITY, self.origin_z); + return TRUE; } -void Spawn_Think(void) +float SpawnEvent_Send(entity to, float sf) { - if(self.send_spawn < 0) + float send; + + WriteByte(MSG_ENTITY, ENT_CLIENT_SPAWNEVENT); + + if(autocvar_g_spawn_alloweffects) { - self.send_spawn = 0; - self.SendFlags |= 1; + WriteByte(MSG_ENTITY, num_for_edict(self.owner)); + WriteShort(MSG_ENTITY, self.owner.origin_x); + WriteShort(MSG_ENTITY, self.owner.origin_y); + WriteShort(MSG_ENTITY, self.owner.origin_z); + send = TRUE; } - else + else if((to == self.owner) || (IS_SPEC(to) && (to.enemy == self.owner)) ) { - self.last_spawn_time = self.send_spawn; - self.send_spawn = 0; - self.SendFlags |= 2; + WriteByte(MSG_ENTITY, 0); + send = TRUE; } + else { send = FALSE; } + + return send; } void spawnpoint_use() @@ -45,8 +43,6 @@ void spawnpoint_use() some_spawn_has_been_used = 1; } print("spawnpoint was used!\n"); - self.send_spawn = time; - self.nextthink = time; } void relocate_spawnpoint() @@ -104,11 +100,34 @@ void relocate_spawnpoint() e.solid = SOLID_TRIGGER; } - self.send_spawn = -1; - self.think = Spawn_Think; - self.nextthink = time; - - Net_LinkEntity(self, FALSE, 0, Spawn_Send); + // Don't show team spawns in non-team matches, + // and don't show non-team spawns in team matches. + // (Unless useallspawns is activated) + if( + !( + ( // if this passes, there is a DM spawn on a team match + teamplay + && (self.team != NUM_TEAM_1) + && (self.team != NUM_TEAM_2) + && (self.team != NUM_TEAM_3) + && (self.team != NUM_TEAM_4) + ) + || + ( // if this passes, there is a team spawn on a DM match + !teamplay + && + ( + (self.team == NUM_TEAM_1) + || (self.team == NUM_TEAM_2) + || (self.team == NUM_TEAM_3) + || (self.team == NUM_TEAM_4) + ) + ) + ) + || + autocvar_g_spawn_useallspawns + ) + { Net_LinkEntity(self, FALSE, 0, SpawnPoint_Send); } } void spawnfunc_info_player_survivor (void) @@ -147,7 +166,7 @@ vector Spawn_Score(entity spot, float mindist, float teamcheck) if(spot.target == "") return '-1 0 0'; - if(clienttype(self) == CLIENTTYPE_REAL) + if(IS_REAL_CLIENT(self)) { if(spot.restriction == 1) return '-1 0 0'; @@ -299,12 +318,7 @@ entity SelectSpawnPoint (float anypoint) } else { - float mindist; - if(g_arena && arena_roundbased) - mindist = 800; - else - mindist = 100; - firstspot = Spawn_FilterOutBadSpots(firstspot, mindist, teamcheck); + firstspot = Spawn_FilterOutBadSpots(firstspot, 100, teamcheck); // there is 50/50 chance of choosing a random spot or the furthest spot // (this means that roughly every other spawn will be furthest, so you