X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fspawnpoints.qc;h=177e4bc98ce1a5bb7b58beea21f6bd5e2dc1e5c3;hb=3a035cb2732af064519135410c5664c2e1b3f501;hp=8f656d731f7de4d0ed2646e2cdf0d4767feeb0ab;hpb=6f37a8f8076a572097afb13de2c367a72717c927;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/spawnpoints.qc b/qcsrc/server/spawnpoints.qc index 8f656d731..177e4bc98 100644 --- a/qcsrc/server/spawnpoints.qc +++ b/qcsrc/server/spawnpoints.qc @@ -1,5 +1,5 @@ #include "spawnpoints.qh" -#include "_.qh" +#include "_all.qh" #include "mutators/mutators_include.qh" #include "g_world.qh" @@ -10,7 +10,7 @@ #include "../warpzonelib/util_server.qh" float SpawnPoint_Send(entity to, int sf) -{ +{SELFPARAM(); WriteByte(MSG_ENTITY, ENT_CLIENT_SPAWNPOINT); WriteByte(MSG_ENTITY, self.team); @@ -22,7 +22,7 @@ float SpawnPoint_Send(entity to, int sf) } float SpawnEvent_Send(entity to, int sf) -{ +{SELFPARAM(); float send; WriteByte(MSG_ENTITY, ENT_CLIENT_SPAWNEVENT); @@ -46,38 +46,38 @@ float SpawnEvent_Send(entity to, int sf) } void spawnpoint_use() -{ +{SELFPARAM(); if(teamplay) if(have_team_spawns > 0) { self.team = activator.team; some_spawn_has_been_used = 1; } - print("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'); - tracebox(self.origin, PL_MIN, PL_MAX, self.origin, true, self); + tracebox(self.origin, PL_MIN_CONST, PL_MAX_CONST, self.origin, true, self); if (trace_startsolid) { vector o; o = self.origin; - self.mins = PL_MIN; - self.maxs = PL_MAX; + self.mins = PL_MIN_CONST; + self.maxs = PL_MAX_CONST; if (!move_out_of_solid(self)) objerror("could not get out of solid at all!"); - print("^1NOTE: this map needs FIXING. Spawnpoint at ", vtos(o - '0 0 1')); - print(" needs to be moved out of solid, e.g. by '", ftos(self.origin.x - o.x)); - print(" ", ftos(self.origin.y - o.y)); - print(" ", ftos(self.origin.z - o.z), "'\n"); + LOG_INFO("^1NOTE: this map needs FIXING. Spawnpoint at ", vtos(o - '0 0 1')); + LOG_INFO(" needs to be moved out of solid, e.g. by '", ftos(self.origin.x - o.x)); + LOG_INFO(" ", ftos(self.origin.y - o.y)); + LOG_INFO(" ", ftos(self.origin.z - o.z), "'\n"); if (autocvar_g_spawnpoints_auto_move_out_of_solid) { if (!spawnpoint_nag) - print("\{1}^1NOTE: this map needs FIXING (it contains spawnpoints in solid, see server log)\n"); + LOG_INFO("\{1}^1NOTE: this map needs FIXING (it contains spawnpoints in solid, see server log)\n"); spawnpoint_nag = 1; } else @@ -152,16 +152,62 @@ void spawnfunc_info_player_start (void) } void spawnfunc_info_player_deathmatch (void) -{ +{SELFPARAM(); 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. */ +void spawnfunc_info_player_team1() +{SELFPARAM(); + if(g_assault) { remove(self); return; } + + self.team = NUM_TEAM_1; // red + spawnfunc_info_player_deathmatch(); +} + + +/*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. */ +void spawnfunc_info_player_team2() +{SELFPARAM(); + if(g_assault) { remove(self); return; } + + self.team = NUM_TEAM_2; // blue + spawnfunc_info_player_deathmatch(); +} + +/*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. */ +void spawnfunc_info_player_team3() +{SELFPARAM(); + if(g_assault) { remove(self); return; } + + self.team = NUM_TEAM_3; // yellow + spawnfunc_info_player_deathmatch(); +} + + +/*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. */ +void spawnfunc_info_player_team4() +{SELFPARAM(); + if(g_assault) { remove(self); return; } + + self.team = NUM_TEAM_4; // purple + spawnfunc_info_player_deathmatch(); +} + // 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 +258,8 @@ 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; + spawn_score = SELFCALL(ent, ent.spawn_evalfunc(this, spot, spawn_score)); + SELFCALL_DONE(); if(spawn_score.x < 0) return spawn_score; } @@ -223,12 +267,12 @@ vector Spawn_Score(entity spot, float mindist, float teamcheck) if(!found) { - dprint("WARNING: spawnpoint at ", vtos(spot.origin), " could not find its target ", spot.target, "\n"); + LOG_TRACE("WARNING: spawnpoint at ", vtos(spot.origin), " could not find its target ", spot.target, "\n"); return '-1 0 0'; } } - MUTATOR_CALLHOOK(Spawn_Score); + MUTATOR_CALLHOOK(Spawn_Score, self, spawn_spot, spawn_score); return spawn_score; } @@ -286,7 +330,7 @@ Finds a point to respawn ============= */ entity SelectSpawnPoint (float anypoint) -{ +{SELFPARAM(); float teamcheck; entity spot, firstspot;