From 72285cf4fddc2b8fb420329db17801353f6ba628 Mon Sep 17 00:00:00 2001 From: kadaverjack Date: Sun, 18 Jun 2006 18:45:56 +0000 Subject: [PATCH] - fixed arena bug (http://www.alientrap.org/forum/viewtopic.php?t=480) - fixed bug that eyeball was still visible with cl_nogibs 1 - removed powerups in arena by default git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1643 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/default.cfg | 1 + data/qcsrc/server/arena.qc | 42 ++++++++++++++++++--------------- data/qcsrc/server/cl_client.qc | 10 +++++++- data/qcsrc/server/cl_weapons.qc | 2 +- data/qcsrc/server/g_hook.qc | 2 +- data/qcsrc/server/g_violence.qc | 6 ++--- data/qcsrc/server/t_items.qc | 9 +++++++ 7 files changed, 47 insertions(+), 25 deletions(-) diff --git a/data/default.cfg b/data/default.cfg index 63476a952..0751b0cbf 100644 --- a/data/default.cfg +++ b/data/default.cfg @@ -337,6 +337,7 @@ set g_arena 0 set g_arena_maxspawned 2 // maximum number of players to spawn at once (the rest is spectating, waiting for their turn) set g_arena_roundbased 1 // if disabled, the next player will spawn as soon as someone dies set g_arena_warmup 5 // time, newly spawned players have to prepare themselves in round based matches +set g_arena_powerups 0 // enables powerups (superhealth, strength and shield), which are removed by default // server game balance settings set g_balance_armor_regen 0 diff --git a/data/qcsrc/server/arena.qc b/data/qcsrc/server/arena.qc index 1cddda369..54cfca57b 100644 --- a/data/qcsrc/server/arena.qc +++ b/data/qcsrc/server/arena.qc @@ -8,7 +8,7 @@ float arena_roundbased; entity spawnqueue_first; entity spawnqueue_last; entity champion; -.float arena_warmup_end; +float warmup; void PutObserverInServer(); void PutClientInServer(); @@ -18,12 +18,10 @@ void(entity e) removedecor; void reset_map() { - float warmup; - + if(cvar("g_arena_warmup")) + warmup = time + cvar("g_arena_warmup"); + self = nextent(world); - - warmup = cvar("g_arena_warmup"); - while(self) { if(self.classname == "droppedweapon" // cleanup @@ -53,14 +51,11 @@ void reset_map() else if(self.flags & FL_CLIENT) // reset all players { if(self.spawned) - { - if(warmup) - self.arena_warmup_end = time + warmup; - PutClientInServer(); - } - else if(self.deadflag) PutClientInServer(); + else + PutObserverInServer(); } + self = nextent(self); } @@ -119,22 +114,22 @@ void Spawnqueue_Mark(entity e) void Arena_Warmup() { + float f; string msg; if(!arena_roundbased) return; + f = rint(warmup - time); + msg = newlines; - if(time < self.arena_warmup_end) + if(time < warmup && self.spawned) { - float f; - f = rint(self.arena_warmup_end - time); - if(champion) msg = strcat(msg, "The Champion is ", champion.netname, "^7\n\n\n"); if(f) - msg = strcat(msg, "Round will start in ", ftos(rint(self.arena_warmup_end - time))); + msg = strcat(msg, "Round will start in ", ftos(f)); else { if(self.spawned) @@ -145,6 +140,11 @@ void Arena_Warmup() if(self.spawned) self.movetype = MOVETYPE_NONE; + + self.velocity = '0 0 0'; + self.avelocity = '0 0 0'; + self.movement = '0 0 0'; + self.fixangle = TRUE; } else if(self.movetype == MOVETYPE_NONE) { @@ -157,6 +157,9 @@ void Arena_Warmup() float next_round; void Spawnqueue_Check() { + if(time < warmup + 1) + return; + if(!next_round) if(numspawned < 2) next_round = time + 3; @@ -172,6 +175,9 @@ void Spawnqueue_Check() champion = find(champion, classname, "player"); } + if(arena_roundbased) + reset_map(); + while(numspawned < maxspawned && spawnqueue_first) { self = spawnqueue_first; @@ -184,7 +190,5 @@ void Spawnqueue_Check() self.classname = "player"; PutClientInServer(); } - if(arena_roundbased) - reset_map(); } } diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index 08b062c93..860d5bf00 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -196,6 +196,9 @@ float Client_customizeentityforclient() float distance; float f; + if(self.flags & FL_NOTARGET) // we don't need LOD for spectators + return TRUE; + if(other.cvar_cl_playerdetailreduction <= 0) { if(other.cvar_cl_playerdetailreduction <= -2) @@ -323,7 +326,8 @@ void PutObserverInServer (void) self.angles = spot.angles; self.angles_z = 0; self.fixangle = TRUE; - self.crouch = FALSE; + self.crouch = FALSE;:q + self.view_ofs = PL_VIEW_OFS; setorigin (self, spot.origin); setsize (self, '0 0 0', '0 0 0'); @@ -340,6 +344,7 @@ void PutObserverInServer (void) self.punchangle = '0 0 0'; self.punchvector = '0 0 0'; self.oldvelocity = self.velocity; + self.customizeentityforclient = Client_customizeentityforclient; if(cvar("g_arena")) { @@ -566,7 +571,10 @@ void PutClientInServer (void) } if(cvar("g_arena")) + { Spawnqueue_Remove(self); + Spawnqueue_Mark(self); + } self.event_damage = PlayerDamage; diff --git a/data/qcsrc/server/cl_weapons.qc b/data/qcsrc/server/cl_weapons.qc index d4b31a560..8aea6bb23 100644 --- a/data/qcsrc/server/cl_weapons.qc +++ b/data/qcsrc/server/cl_weapons.qc @@ -240,7 +240,7 @@ void() W_PreviousWeapon = void() W_WeaponFrame = { if(arena_roundbased) - if(time < self.arena_warmup_end) + if(time < warmup) return; if (!self.weaponentity || self.health < 1) diff --git a/data/qcsrc/server/g_hook.qc b/data/qcsrc/server/g_hook.qc index bdbee8ede..35b931456 100644 --- a/data/qcsrc/server/g_hook.qc +++ b/data/qcsrc/server/g_hook.qc @@ -205,7 +205,7 @@ void FireGrapplingHook (void) local vector org; if(arena_roundbased) - if(time < self.arena_warmup_end) + if(time < warmup) return; makevectors(self.v_angle); diff --git a/data/qcsrc/server/g_violence.qc b/data/qcsrc/server/g_violence.qc index aab8c8dd6..9b0f2484d 100644 --- a/data/qcsrc/server/g_violence.qc +++ b/data/qcsrc/server/g_violence.qc @@ -38,13 +38,13 @@ float() Gib_customizeentityforclient = if(self.classname == "player") // the eye { if(self.gibrandom > other.cvar_cl_nogibs) - self.modelindex = self.gibmodelindex; + setmodel(self, self.model); else - self.modelindex = 0; + setmodel(self, ""); return TRUE; } else // other gibs - don't even need to send them - return self.gibrandom > other.cvar_cl_nogibs; + return (self.gibrandom > other.cvar_cl_nogibs); }; // changes by LordHavoc on 03/30/04 diff --git a/data/qcsrc/server/t_items.qc b/data/qcsrc/server/t_items.qc index 5c3ea7cf8..e64a0b9a2 100644 --- a/data/qcsrc/server/t_items.qc +++ b/data/qcsrc/server/t_items.qc @@ -503,6 +503,9 @@ void item_health100 (void) { if(!cvar("g_powerup_superhealth")) return; + if(cvar("g_arena") && !cvar("g_arena_powerups")) + return; + if(cvar("g_minstagib")) { minstagib_items(IT_NAILS); } else { @@ -515,6 +518,9 @@ void item_strength (void) { if(!cvar("g_powerup_strength")) return; + if(cvar("g_arena") && !cvar("g_arena_powerups")) + return; + if(cvar("g_minstagib")) { minstagib_items(IT_STRENGTH); } else { @@ -527,6 +533,9 @@ void item_invincible (void) { if(!cvar("g_powerup_shield")) return; + if(cvar("g_arena") && !cvar("g_arena_powerups")) + return; + if(cvar("g_minstagib")) { minstagib_items(IT_INVINCIBLE); } else { -- 2.39.2