#include "spawnpoints.qh"
-#include <server/mutators/_mod.qh>
-#include "g_world.qh"
-#include "race.qh"
-#include "defs.qh"
-#include "../common/constants.qh"
+#include <common/constants.qh>
+#include <common/gamemodes/_mod.qh>
+#include <common/mapobjects/subs.qh>
+#include <common/mapobjects/target/spawnpoint.qh>
+#include <common/mapobjects/triggers.qh>
#include <common/net_linked.qh>
-#include "../common/teams.qh"
-#include <common/mapinfo.qh>
-#include "../common/mapobjects/subs.qh"
-#include "../common/mapobjects/target/spawnpoint.qh"
-#include "../common/util.qh"
-#include "../lib/warpzone/common.qh"
-#include "../lib/warpzone/util_server.qh"
+#include <common/stats.qh>
+#include <common/teams.qh>
+#include <common/util.qh>
+#include <common/weapons/_all.qh>
+#include <lib/warpzone/common.qh>
+#include <lib/warpzone/util_server.qh>
+#include <server/command/vote.qh>
+#include <server/intermission.qh>
+#include <server/mutators/_mod.qh>
+#include <server/race.qh>
#include <server/utils.qh>
+#include <server/world.qh>
bool SpawnPoint_Send(entity this, entity to, int sf)
{
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(
- !(
- ( // if this passes, there is a DM spawn on a team match
- teamplay
- && (this.team != NUM_TEAM_1)
- && (this.team != NUM_TEAM_2)
- && (this.team != NUM_TEAM_3)
- && (this.team != NUM_TEAM_4)
- )
- ||
- ( // if this passes, there is a team spawn on a DM match
- !teamplay
- &&
- (
- (this.team == NUM_TEAM_1)
- || (this.team == NUM_TEAM_2)
- || (this.team == NUM_TEAM_3)
- || (this.team == NUM_TEAM_4)
- )
- )
- )
- ||
- autocvar_g_spawn_useallspawns
- )
- { 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)
spawnfunc(info_player_deathmatch)
{
- this.classname = "info_player_deathmatch";
IL_PUSH(g_spawnpoints, this);
relocate_spawnpoint(this);
}
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;