X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fspawnpoints.qc;h=3f4e72c3b3f584b67c0cc4de06f9f033d568f6db;hp=c45f357f6788e0751a133c43b95c0054a559f9e5;hb=31bf64ba7821ebb5c0aba8a154472810074ed11e;hpb=b80f804933b243e66d35d5ae2820dc914979de24 diff --git a/qcsrc/server/spawnpoints.qc b/qcsrc/server/spawnpoints.qc index c45f357f6..3f4e72c3b 100644 --- a/qcsrc/server/spawnpoints.qc +++ b/qcsrc/server/spawnpoints.qc @@ -1,21 +1,37 @@ -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); + + return TRUE; +} + +float SpawnEvent_Send(entity to, float sf) +{ + float send; + + WriteByte(MSG_ENTITY, ENT_CLIENT_SPAWNEVENT); + + if(autocvar_g_spawn_alloweffects) { - WriteByte(MSG_ENTITY, self.team); - WriteShort(MSG_ENTITY, self.origin_x); - WriteShort(MSG_ENTITY, self.origin_y); - WriteShort(MSG_ENTITY, self.origin_z); + 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; } - if(sf & 2) + else if((to == self.owner) || (IS_SPEC(to) && (to.enemy == self.owner)) ) { - WriteLong(MSG_ENTITY, self.last_spawn_time); + WriteByte(MSG_ENTITY, 0); + send = TRUE; } - - return TRUE; + else { send = FALSE; } + + return send; } void spawnpoint_use() @@ -27,8 +43,6 @@ void spawnpoint_use() some_spawn_has_been_used = 1; } print("spawnpoint was used!\n"); - self.last_spawn_time = time; - Spawn_Send_Think; } void relocate_spawnpoint() @@ -86,10 +100,34 @@ void relocate_spawnpoint() e.solid = SOLID_TRIGGER; } - //self.think = Spawn_Send_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) @@ -128,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'; @@ -280,12 +318,7 @@ entity SelectSpawnPoint (float anypoint) } else { - float mindist; - if (arena_roundbased && !g_ca) - 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