From e8e1f5dba8e909a8f81f6c9eabb502548f9bf8a0 Mon Sep 17 00:00:00 2001 From: kadaverjack Date: Fri, 7 Apr 2006 21:01:11 +0000 Subject: [PATCH] - Hooray, more dirty traceline hacks! (spawnpoints are relocted on worldspawn now, to ensure the don't drop players through the floor) - logscores lists all clients now - fixed some spawnpoint angles on nexdm06 git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1244 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/maps/nexdm06.ent | 15 ++++++++------- data/qcsrc/server/gamec/cl_client.c | 15 ++++++++++++++- data/qcsrc/server/gamec/ctf.c | 4 ++++ data/qcsrc/server/gamec/defs.h | 1 + data/qcsrc/server/gamec/g_world.c | 2 +- data/qcsrc/server/gamec/miscfunctions.c | 17 +++++++++++++++++ data/qcsrc/server/gamec/t_items.c | 6 +----- 7 files changed, 46 insertions(+), 14 deletions(-) diff --git a/data/maps/nexdm06.ent b/data/maps/nexdm06.ent index e08908920..72d0c26e5 100644 --- a/data/maps/nexdm06.ent +++ b/data/maps/nexdm06.ent @@ -207,6 +207,7 @@ } { "origin" "-432 -464 -168" +"angle" "90" "classname" "info_player_deathmatch" } { @@ -706,37 +707,37 @@ { "classname" "info_player_team1" "origin" "630 -1280 88" -"angle" "-90" +"angle" "0" } { "classname" "info_player_team1" "origin" "770 -1280 88" -"angle" "-90" +"angle" "85" } { "classname" "info_player_team1" "origin" "570 -1000 -72" -"angle" "-90" +"angle" "-25" } { "classname" "info_player_team1" "origin" "830 -1010 -72" -"angle" "-90" +"angle" "90" } { "classname" "info_player_team1" "origin" "1080 -1370 88" -"angle" "-90" +"angle" "135" } { "classname" "info_player_team2" "origin" "-220 780 -168" -"angle" "90" +"angle" "-90" } { "classname" "info_player_team2" "origin" "-100 780 -168" -"angle" "90" +"angle" "-45" } { "classname" "info_player_team2" diff --git a/data/qcsrc/server/gamec/cl_client.c b/data/qcsrc/server/gamec/cl_client.c index f7ae1bd09..e5228fbae 100644 --- a/data/qcsrc/server/gamec/cl_client.c +++ b/data/qcsrc/server/gamec/cl_client.c @@ -1,10 +1,12 @@ void info_player_start (void) { self.classname = "info_player_deathmatch"; + relocate_spawnpoint(); } void info_player_deathmatch (void) { + relocate_spawnpoint(); } float spawn_allbad; @@ -145,7 +147,12 @@ entity SelectSpawnPoint (float anypoint) spot = Spawn_FurthestPoint(firstspot, playerlist); if (!spot) - error ("PutClientInServer: no start points on level"); + { + if(cvar("spawn_debug")) + GotoNextMap(); + else + error ("PutClientInServer: no start points on level"); + } return spot; } @@ -231,6 +238,12 @@ void PutObserverInServer (void) self.weaponframe = 0; self.weaponentity = world; self.killcount = -666; + self.velocity = '0 0 0'; + self.avelocity = '0 0 0'; + self.punchangle = '0 0 0'; + self.punchvector = '0 0 0'; + self.oldvelocity = self.velocity; + if(!cvar("g_lms")) self.frags = -666; //stuffcmd(self, "set viewsize 120 \n"); diff --git a/data/qcsrc/server/gamec/ctf.c b/data/qcsrc/server/gamec/ctf.c index d3ddf034f..f416acc3f 100644 --- a/data/qcsrc/server/gamec/ctf.c +++ b/data/qcsrc/server/gamec/ctf.c @@ -356,6 +356,7 @@ void() info_player_team1 = { self.classname = "info_player_deathmatch"; self.team = 5; // red + relocate_spawnpoint(); }; //self.team = 4;self.classname = "info_player_start";info_player_start();}; @@ -371,6 +372,7 @@ void() info_player_team2 = { self.classname = "info_player_deathmatch"; self.team = 14; // blue + relocate_spawnpoint(); }; //self.team = 13;self.classname = "info_player_start";info_player_start();}; @@ -386,6 +388,7 @@ void() info_player_team3 = { self.classname = "info_player_deathmatch"; self.team = 10; // purple + relocate_spawnpoint(); }; @@ -401,6 +404,7 @@ void() info_player_team4 = { self.classname = "info_player_deathmatch"; self.team = 13; // yellow + relocate_spawnpoint(); }; diff --git a/data/qcsrc/server/gamec/defs.h b/data/qcsrc/server/gamec/defs.h index 567834189..5be663624 100644 --- a/data/qcsrc/server/gamec/defs.h +++ b/data/qcsrc/server/gamec/defs.h @@ -249,3 +249,4 @@ float GRAPHOOK_RELEASE = 21; .float playerid; float playerid_last; +.float noalign; // if set to 1, the item or spawnpoint won't be dropped to the floor diff --git a/data/qcsrc/server/gamec/g_world.c b/data/qcsrc/server/gamec/g_world.c index 62c52fcab..a927b7430 100644 --- a/data/qcsrc/server/gamec/g_world.c +++ b/data/qcsrc/server/gamec/g_world.c @@ -656,7 +656,7 @@ void() DumpStats = fputs(file, strcat(s, "\n")); } - other = findchain(classname, "player"); + other = findchainflags(flags, FL_CLIENT); while (other) { if ((clienttype(other) == CLIENTTYPE_REAL) || (clienttype(other) == CLIENTTYPE_BOT && cvar("sv_logscores_bots"))) diff --git a/data/qcsrc/server/gamec/miscfunctions.c b/data/qcsrc/server/gamec/miscfunctions.c index 9818b53fb..a51d53b7d 100644 --- a/data/qcsrc/server/gamec/miscfunctions.c +++ b/data/qcsrc/server/gamec/miscfunctions.c @@ -84,3 +84,20 @@ string linewrap(string s, float l) } return strcat(t, s); } + +vector find_floor(vector org) +{ + traceline(org + '0 0 5', org - '0 0 255', TRUE, self); + if (trace_fraction < 1) + return trace_endpos; + else + return org; +} + +void relocate_spawnpoint() +{ + if(self.noalign) + return; + + setorigin(self, find_floor(self.origin) + '0 0 30'); +} diff --git a/data/qcsrc/server/gamec/t_items.c b/data/qcsrc/server/gamec/t_items.c index 7db1ad45b..7f0927a82 100644 --- a/data/qcsrc/server/gamec/t_items.c +++ b/data/qcsrc/server/gamec/t_items.c @@ -173,8 +173,6 @@ void RemoveItem(void) = { remove(self); } -.float noalign; - void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, string itemname, float itemid, float itemflags) { vector org; @@ -272,9 +270,7 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, z_offset = '0 0 1' * 3; self.movetype = MOVETYPE_NONE; - traceline(self.origin, self.origin - '0 0 1' * 512, TRUE, self); - if (trace_fraction < 1) - setorigin(self, trace_endpos + z_offset); + setorigin(self, find_floor(org) + z_offset); } else { -- 2.39.2