X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fspawnpoints.qc;h=03b40c5e12864aa7570c19ff0169c0ec107162b2;hb=38c06c5268cda2d14394f627a93f7fb0b7811725;hp=e48840883a589658796b693585badd2d7e4d9bf8;hpb=d01c567581179df7cc68bcdc8dce58efad911bc4;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/spawnpoints.qc b/qcsrc/server/spawnpoints.qc index e48840883..03b40c5e1 100644 --- a/qcsrc/server/spawnpoints.qc +++ b/qcsrc/server/spawnpoints.qc @@ -1,16 +1,18 @@ #include "spawnpoints.qh" -#include "mutators/_mod.qh" +#include #include "g_world.qh" #include "race.qh" +#include "defs.qh" #include "../common/constants.qh" #include #include "../common/teams.qh" -#include "../common/triggers/subs.qh" -#include "../common/triggers/target/spawnpoint.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 bool SpawnPoint_Send(entity this, entity to, int sf) { @@ -246,7 +248,7 @@ vector Spawn_Score(entity this, entity spot, float mindist, float teamcheck) vector spawn_score = prio * '1 0 0' + shortest * '0 1 0'; // filter out spots for assault - if(spot.target != "") + if(spot.target && spot.target != "") { int found = 0; for(entity targ = findchain(targetname, spot.target); targ; targ = targ.chain) @@ -325,14 +327,21 @@ SelectSpawnPoint Finds a point to respawn ============= */ +bool testspawn_checked; +entity testspawn_point; entity SelectSpawnPoint(entity this, bool anypoint) { float teamcheck; - entity spot, firstspot; + entity spot = NULL; - spot = find(NULL, classname, "testplayerstart"); - if (spot) - return spot; + if(!testspawn_checked) + { + testspawn_point = find(NULL, classname, "testplayerstart"); + testspawn_checked = true; + } + + if(testspawn_point) + return testspawn_point; if(this.spawnpoint_targ) return this.spawnpoint_targ; @@ -363,7 +372,16 @@ entity SelectSpawnPoint(entity this, bool anypoint) // get the entire list of spots - firstspot = findchain(classname, "info_player_deathmatch"); + //entity firstspot = findchain(classname, "info_player_deathmatch"); + entity firstspot = IL_FIRST(g_spawnpoints); + entity prev = NULL; + IL_EACH(g_spawnpoints, true, + { + if(prev) + prev.chain = it; + it.chain = NULL; + prev = it; + }); // filter out the bad ones // (note this returns the original list if none survived) if(anypoint)