#include <server/mutators/_mod.qh>
#include "g_world.qh"
+#include "miscfunctions.qh"
#include "race.qh"
#include "defs.qh"
#include "../common/constants.qh"
#include <common/net_linked.qh>
#include "../common/teams.qh"
-#include <common/mapinfo.qh>
+#include <common/gamemodes/_mod.qh>
#include "../common/mapobjects/subs.qh"
#include "../common/mapobjects/target/spawnpoint.qh"
#include "../common/util.qh"
this.SendFlags |= 1; // update team since it was restored during reset
}
+void link_spawnpoint(entity this)
+{
+ bool anypoint = (autocvar_g_spawn_useallspawns || (teamplay && have_team_spawns <= 0)); // TODO: check if available teams is equal to spawnpoints available
+
+ // Don't show team spawns in non-team matches,
+ // and don't show non-team spawns in team matches.
+ // (Unless useallspawns is activated)
+ if(anypoint || !((teamplay && !Team_IsValidTeam(this.team)) || (!teamplay && Team_IsValidTeam(this.team))))
+ Net_LinkEntity(this, false, 0, SpawnPoint_Send);
+}
+
void relocate_spawnpoint(entity this)
{
// nudge off the floor
e.solid = SOLID_TRIGGER;
}
- // Don't show team spawns in non-team matches,
- // and don't show non-team spawns in team matches.
- // (Unless useallspawns is activated)
- if(autocvar_g_spawn_useallspawns || !((teamplay && !Team_IsValidTeam(this.team)) || (!teamplay && Team_IsValidTeam(this.team))))
- Net_LinkEntity(this, false, 0, SpawnPoint_Send);
+ // network it after all spawnpoints are setup, so that we can check if team spawnpoints are used
+ InitializeEntity(this, link_spawnpoint, INITPRIO_FINDTARGET);
}
spawnfunc(info_player_survivor)
float prio = 0;
float shortest = vlen(world.maxs - world.mins);
- FOREACH_CLIENT(IS_PLAYER(it) && it != this, {
+ FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it) && it != this, {
float thisdist = vlen(it.origin - spot.origin);
if (thisdist < shortest)
shortest = thisdist;