X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fspawnpoints.qc;h=a1abfa58fc2f02e926d6e0de50c264b8aa4fa08c;hb=2b648ce3fb116f3bdfa69e22348a989ecb000e4d;hp=4cad8866422175099de63a63806d09764c0461c6;hpb=1556aa4ea70b3b275afb1cb4587e555fb44f71c3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/spawnpoints.qc b/qcsrc/server/spawnpoints.qc index 4cad88664..a1abfa58f 100644 --- a/qcsrc/server/spawnpoints.qc +++ b/qcsrc/server/spawnpoints.qc @@ -1,15 +1,16 @@ #include "spawnpoints.qh" -#include "_all.qh" -#include "mutators/mutators_include.qh" +#include "mutators/all.qh" #include "g_world.qh" #include "race.qh" #include "../common/constants.qh" #include "../common/teams.qh" +#include "../common/triggers/subs.qh" #include "../common/util.qh" -#include "../warpzonelib/util_server.qh" +#include "../lib/warpzone/common.qh" +#include "../lib/warpzone/util_server.qh" -float SpawnPoint_Send(entity to, int sf) +bool SpawnPoint_Send(entity this, entity to, int sf) { WriteByte(MSG_ENTITY, ENT_CLIENT_SPAWNPOINT); @@ -21,7 +22,7 @@ float SpawnPoint_Send(entity to, int sf) return true; } -float SpawnEvent_Send(entity to, int sf) +bool SpawnEvent_Send(entity this, entity to, int sf) { float send; @@ -45,19 +46,30 @@ float SpawnEvent_Send(entity to, int sf) return send; } -void spawnpoint_use() +.vector spawnpoint_prevorigin; +void spawnpoint_think() { + self.nextthink = time + 0.1; + if(self.origin != self.spawnpoint_prevorigin) + { + self.spawnpoint_prevorigin = self.origin; + self.SendFlags |= 1; + } +} + +void spawnpoint_use() +{SELFPARAM(); if(teamplay) if(have_team_spawns > 0) { self.team = activator.team; some_spawn_has_been_used = 1; } - LOG_INFO("spawnpoint was used!\n"); + //LOG_INFO("spawnpoint was used!\n"); } void relocate_spawnpoint() -{ +{SELFPARAM(); // nudge off the floor setorigin(self, self.origin + '0 0 1'); @@ -90,6 +102,8 @@ void relocate_spawnpoint() } self.use = spawnpoint_use; + self.think = spawnpoint_think; + self.nextthink = time + 0.5 + random() * 2; // shouldn't need it for a little second self.team_saved = self.team; if (!self.cnt) self.cnt = 1; @@ -141,27 +155,65 @@ void relocate_spawnpoint() { Net_LinkEntity(self, false, 0, SpawnPoint_Send); } } -void spawnfunc_info_player_survivor (void) +spawnfunc(info_player_survivor) { - spawnfunc_info_player_deathmatch(); + spawnfunc_info_player_deathmatch(this); } -void spawnfunc_info_player_start (void) +spawnfunc(info_player_start) { - spawnfunc_info_player_deathmatch(); + spawnfunc_info_player_deathmatch(this); } -void spawnfunc_info_player_deathmatch (void) +spawnfunc(info_player_deathmatch) { self.classname = "info_player_deathmatch"; relocate_spawnpoint(); } +/*QUAKED spawnfunc_info_player_team1 (1 0 0) (-16 -16 -24) (16 16 24) +Starting point for a player in team one (Red). +Keys: "angle" viewing angle when spawning. */ +spawnfunc(info_player_team1) +{ + this.team = NUM_TEAM_1; // red + spawnfunc_info_player_deathmatch(this); +} + + +/*QUAKED spawnfunc_info_player_team2 (1 0 0) (-16 -16 -24) (16 16 24) +Starting point for a player in team two (Blue). +Keys: "angle" viewing angle when spawning. */ +spawnfunc(info_player_team2) +{ + this.team = NUM_TEAM_2; // blue + spawnfunc_info_player_deathmatch(this); +} + +/*QUAKED spawnfunc_info_player_team3 (1 0 0) (-16 -16 -24) (16 16 24) +Starting point for a player in team three (Yellow). +Keys: "angle" viewing angle when spawning. */ +spawnfunc(info_player_team3) +{ + this.team = NUM_TEAM_3; // yellow + spawnfunc_info_player_deathmatch(this); +} + + +/*QUAKED spawnfunc_info_player_team4 (1 0 0) (-16 -16 -24) (16 16 24) +Starting point for a player in team four (Purple). +Keys: "angle" viewing angle when spawning. */ +spawnfunc(info_player_team4) +{ + this.team = NUM_TEAM_4; // purple + spawnfunc_info_player_deathmatch(this); +} + // Returns: // _x: prio (-1 if unusable) // _y: weight vector Spawn_Score(entity spot, float mindist, float teamcheck) -{ +{SELFPARAM(); float shortest, thisdist; float prio; entity player; @@ -212,10 +264,9 @@ vector Spawn_Score(entity spot, float mindist, float teamcheck) ++found; if(ent.spawn_evalfunc) { - entity oldself = self; - self = ent; - spawn_score = ent.spawn_evalfunc(oldself, spot, spawn_score); - self = oldself; + WITH(entity, self, ent, { + spawn_score = ent.spawn_evalfunc(this, spot, spawn_score); + }); if(spawn_score.x < 0) return spawn_score; } @@ -286,7 +337,7 @@ Finds a point to respawn ============= */ entity SelectSpawnPoint (float anypoint) -{ +{SELFPARAM(); float teamcheck; entity spot, firstspot;