r3020 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Wed Dec 12 13:46:03 EST 2007
Author: kadaverjack
Date: 2007-12-12 13:46:02 -0500 (Wed, 12 Dec 2007)
New Revision: 3020
Modified:
trunk/data/qcsrc/server/arena.qc
trunk/data/qcsrc/server/bots.qc
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/cl_physics.qc
trunk/data/qcsrc/server/cl_weapons.qc
trunk/data/qcsrc/server/cl_weaponsystem.qc
trunk/data/qcsrc/server/clientcommands.qc
trunk/data/qcsrc/server/defs.qh
trunk/data/qcsrc/server/domination.qc
trunk/data/qcsrc/server/g_damage.qc
trunk/data/qcsrc/server/g_hook.qc
trunk/data/qcsrc/server/g_world.qc
trunk/data/qcsrc/server/havocbot_roles.qc
trunk/data/qcsrc/server/keyhunt.qc
trunk/data/qcsrc/server/keyhunt.qh
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/runematch.qc
trunk/data/qcsrc/server/teamplay.qc
Log:
- changed sv_ready_restart to use a qc based restart function as suggested by nifrek (still experimental, please test! assault, arena & onslaught are still using the "restart" command atm)
- added missing variable for g_runematch cvar
- moved precaching to a new function which is called after all cvars are read (InitGameplayMode() is now the only place where gamemode cvars are read)
Modified: trunk/data/qcsrc/server/arena.qc
===================================================================
--- trunk/data/qcsrc/server/arena.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/arena.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -15,21 +15,72 @@
void(entity e) DropFlag;
void(entity e) ReturnFlag;
void(entity e) removedecor;
+void dom_controlpoint_setup();
void reset_map()
{
+ if(g_arena)
if(cvar("g_arena_warmup"))
warmup = time + cvar("g_arena_warmup");
+ lms_lowest_lives = 999;
+ lms_next_place = player_count;
+
self = nextent(world);
while(self)
{
- if(self.classname == "droppedweapon" // cleanup
+ if(self.flags & FL_CLIENT) // reset all players
+ {
+ if(time < restart_countdown)
+ {
+ self.frags = (g_lms)?LMS_NewPlayerLives():0;
+ self.deaths = 0;
+ self.killcount = 0;
+ self.classname = "player";
+ PutClientInServer();
+ }
+ else if(g_arena)
+ {
+ if(self.spawned)
+ PutClientInServer();
+ else
+ PutObserverInServer();
+ }
+ }
+ else if(self.classname == STR_ITEM_KH_KEY)
+ {
+ kh_Key_AssignTo(self, world);
+ //if(self.owner)
+ // kh_Key_DropAll(self.owner, TRUE);
+ kh_Key_Remove(self);
+ }
+ else if(self.classname == "droppedweapon" // cleanup
|| self.classname == "gib"
|| self.classname == "body")
{
remove(self);
}
+ else if(self.items & (IT_KEY1 | IT_KEY2))
+ {
+ DropFlag(self);
+ ReturnFlag(self);
+ }
+ else if(self.classname == "rune")
+ {
+ if(self.owner)
+ if(self.owner.classname != "runematch_spawn_point")
+ DropAllRunes(self.owner);
+ rune_respawn();
+ }
+ else if(self.classname == "sprite_waypoint")
+ {
+ if(self.health | g_keyhunt)
+ WaypointSprite_Kill(self);
+ }
+ else if(self.classname == "dom_controlpoint")
+ {
+ dom_controlpoint_setup();
+ }
else if(self.flags & FL_ITEM) // reset items
{
self.model = self.mdl;
@@ -48,17 +99,13 @@
{
removedecor(self);
}
- else if(self.flags & FL_CLIENT) // reset all players
- {
- if(self.spawned)
- PutClientInServer();
- else
- PutObserverInServer();
- }
-
self = nextent(self);
}
+ if(g_keyhunt)
+ kh_Controller_SetThink(cvar("g_balance_keyhunt_delay_round")+RESTART_COUNTDOWN, "", kh_StartRound);
+
+ if(g_arena)
if(champion)
UpdateFrags(champion, +1);
}
@@ -117,7 +164,7 @@
float f;
string msg;
- if(!arena_roundbased)
+ if(!g_arena || !arena_roundbased || (time < restart_countdown))
return;
f = rint(warmup - time);
Modified: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/bots.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -1783,7 +1783,7 @@
//self.bot_painintensity = self.bot_painintensity + self.bot_oldhealth - self.health;
//self.bot_painintensity = bound(0, self.bot_painintensity, 100);
- if(cvar("g_campaign") && !campaign_bots_may_start)
+ if(time < restart_countdown || ((cvar("g_campaign") && !campaign_bots_may_start)))
{
self.nextthink = time + 0.5;
return;
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_client.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -670,7 +670,7 @@
bot_clientconnect();
- //if(cvar("g_domination"))
+ //if(g_domination)
// dom_player_join_team(self);
//JoinBestTeam(self, FALSE);
@@ -700,7 +700,7 @@
bprint ("^4",self.netname);
bprint ("^4 connected");
- if(cvar("g_domination") || g_ctf)
+ if(g_domination || g_ctf)
{
bprint(" and joined the ");
bprint(ColoredTeamName(self.team));
@@ -753,16 +753,9 @@
if(g_lms)
{
- self.frags = cvar("fraglimit");
- // no fraglimit was set, so player gets 999 lives
- if(self.frags < 1)
- self.frags = 999;
-
self.frags = LMS_NewPlayerLives();
if(!self.frags)
- {
self.frags = -666;
- }
}
else if(g_arena)
{
@@ -1355,8 +1348,7 @@
dist_z = 0;
self.lms_traveled_distance += fabs(vlen(dist));
- if(cvar("g_campaign"))
- if(!campaign_bots_may_start)
+ if((cvar("g_campaign") && !campaign_bots_may_start) || (time < restart_countdown))
{
self.lms_nextcheck = time + cvar("g_lms_campcheck_interval")*2;
self.lms_traveled_distance = 0;
@@ -1585,16 +1577,37 @@
UpdateChatBubble();
UpdateTeamBubble();
if (self.impulse)
- ImpulseCommands ();
+ ImpulseCommands();
if (intermission_running)
return; // intermission or finale
//PrintWelcomeMessage(self);
//if (TetrisPostFrame()) return;
+
+ // restart countdown
+ if(time < restart_countdown)
+ {
+ string s;
+ float sec;
+
+ sec = ceil(restart_countdown-time);
+ s = strcat(NEWLINES, "^1Game starts in ", ftos(sec), " seconds");
+ centerprint(self, s);
+ self.movetype = MOVETYPE_NONE;
+ self.velocity = '0 0 0';
+ self.avelocity = '0 0 0';
+ self.movement = '0 0 0';
+ }
+ else if(self.movetype == MOVETYPE_NONE)
+ {
+ self.movetype = MOVETYPE_WALK;
+ centerprint(self, "\n");
+ }
} else if (self.classname == "observer") {
//do nothing
} else if (self.classname == "spectator") {
//do nothing
}
+
Arena_Warmup();
}
Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_physics.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -49,7 +49,7 @@
if (!(self.flags & FL_JUMPRELEASED))
return;
- if(cvar("g_runematch"))
+ if(g_runematch)
{
if(self.runes & RUNE_SPEED)
{
@@ -162,7 +162,7 @@
maxspd_mod = 1;
- if(cvar("g_runematch"))
+ if(g_runematch)
{
if(self.runes & RUNE_SPEED)
{
Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_weapons.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -210,8 +210,7 @@
// Bringed back weapon frame
void() W_WeaponFrame =
{
- if(arena_roundbased)
- if(time < warmup)
+ if((arena_roundbased && time < warmup) || (time < restart_countdown))
return;
if (!self.weaponentity || self.health < 1)
Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -392,7 +392,7 @@
backtrace("Tried to override initial weapon think function - should this really happen?");
}
- if(cvar("g_runematch"))
+ if(g_runematch)
{
if(self.runes & RUNE_SPEED)
{
Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/clientcommands.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -427,9 +427,14 @@
} else if(argv(0) == "ready") {
if(cvar("sv_ready_restart"))
{
- self.ready = TRUE;
- bprint(self.netname, "^2 is ready\n");
- ReadyCount();
+ if(!restart_countdown)
+ {
+ self.ready = TRUE;
+ bprint(self.netname, "^2 is ready\n");
+ ReadyCount();
+ } else {
+ sprint(self, "^1game has already been restarted\n");
+ }
}
} else if(argv(0) == "maplist") {
local float i, n;
@@ -691,6 +696,7 @@
} // else still running
}
+float timelimit_orig;
void ReadyCount()
{
@@ -704,9 +710,26 @@
r += 1;
}
- if(p && r == p)
+ if(!p || r < p)
+ return;
+
+ bprint("^1Server is restarting...\n");
+
+ // no arena, assault & onslaught support yet...
+ if(g_arena | g_assault | g_onslaught | gameover | intermission_running)
+ localcmd("restart\n");
+
+ restart_countdown = time + RESTART_COUNTDOWN;
+ if(0<cvar("timelimit"))
{
- bprint("^1Server is restarting...\n");
- localcmd("restart\n");
+ // remember original timelimit on first restart
+ if(!timelimit_orig)
+ timelimit_orig = cvar("timelimit");
+ cvar_set("timelimit", ftos(timelimit_orig + ceil(restart_countdown)/60));
}
+
+ reset_map();
+
+ if(cvar("sv_eventlog"))
+ GameLogEcho(":restart", FALSE);
}
Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/defs.qh 2007-12-12 18:46:02 UTC (rev 3020)
@@ -1,6 +1,6 @@
// Globals
-float g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms;
+float g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms, g_runematch;
float g_cloaked, g_footsteps, g_grappling_hook, g_instagib, g_laserguided_missile, g_midair, g_minstagib, g_nixnex, g_nixnex_with_laser, g_norecoil, g_rocketarena, g_vampire;
float sv_cheats;
@@ -270,6 +270,8 @@
.float nextstep;
.float ready;
+#define RESTART_COUNTDOWN 10
+float restart_countdown;
.float winning;
.float deaths;
Modified: trunk/data/qcsrc/server/domination.qc
===================================================================
--- trunk/data/qcsrc/server/domination.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/domination.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -99,21 +99,9 @@
// give points
- if (gameover) // game has ended, don't keep giving points
+ if (gameover || self.delay > time || time < restart_countdown) // game has ended, don't keep giving points
return;
- if(self.delay > time)
- return;
-
-/*
- if(self.state == 1)
- {
- self.state = 0;
- dompoint_captured();
- return;
- }
-*/
-
waittime = cvar("g_domination_point_rate");
if(!waittime)
waittime = self.wait;
@@ -480,7 +468,7 @@
*/
void() dom_controlpoint =
{
- if(!cvar("g_domination"))
+ if(!g_domination)
{
remove(self);
return;
Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/g_damage.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -15,13 +15,13 @@
if(cvar("g_arena_roundbased"))
return;
- if(cvar("g_domination"))
+ if(g_domination)
{
if(cvar("g_domination_disable_frags"))
if(f > 0)
return;
}
- else if(cvar("g_runematch"))
+ else if(g_runematch)
{
if(f > 0)
f = RunematchHandleFrags(attacker, targ, f);
@@ -450,7 +450,7 @@
damage = damage * cvar("g_balance_powerup_invincible_takedamage");
- if(cvar("g_runematch"))
+ if(g_runematch)
{
// apply strength rune
if (attacker.runes & RUNE_STRENGTH)
@@ -503,7 +503,7 @@
{
attacker.health += damage;
}
- if(cvar("g_runematch"))
+ if(g_runematch)
{
if (attacker.runes & RUNE_VAMPIRE)
{
Modified: trunk/data/qcsrc/server/g_hook.qc
===================================================================
--- trunk/data/qcsrc/server/g_hook.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/g_hook.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -201,8 +201,7 @@
local entity missile;
local vector org;
- if(arena_roundbased)
- if(time < warmup)
+ if((arena_roundbased && time < warmup) || (time < restart_countdown))
return;
makevectors(self.v_angle);
Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/g_world.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -84,16 +84,12 @@
float world_already_spawned;
void worldspawn (void)
{
- float globhandle, i, n;
-
dprint_load(); // load dprint status from cvar
if(world_already_spawned)
error("world already spawned - you may have EXACTLY ONE worldspawn!");
world_already_spawned = TRUE;
- sv_cheats = cvar("sv_cheats");
-
/*
TODO sound pack system
// initialize sound pack system
@@ -103,145 +99,6 @@
soundpack = strzone(soundpack);
*/
- // gamemode related things
- precache_model ("models/misc/chatbubble.spr");
- precache_model ("models/misc/teambubble.spr");
- if (cvar("g_runematch"))
- {
- precache_model ("models/runematch/curse.mdl");
- precache_model ("models/runematch/rune.mdl");
- }
-
- // Precache all player models if desired
- if (cvar("sv_precacheplayermodels"))
- {
- globhandle = search_begin("models/player/*.zym", TRUE, FALSE);
- n = search_getsize(globhandle);
- for(i = 0; i < n; ++i)
- {
- //print(search_getfilename(globhandle, i), "\n");
- precache_model(search_getfilename(globhandle, i));
- }
- search_end(globhandle);
- //precache_model("models/player/carni.zym");
- //precache_model("models/player/crash.zym");
- //precache_model("models/player/grunt.zym");
- //precache_model("models/player/headhunter.zym");
- //precache_model("models/player/insurrectionist.zym");
- //precache_model("models/player/jeandarc.zym");
- //precache_model("models/player/lurk.zym");
- //precache_model("models/player/lycanthrope.zym");
- //precache_model("models/player/marine.zym");
- //precache_model("models/player/nexus.zym");
- //precache_model("models/player/pyria.zym");
- //precache_model("models/player/shock.zym");
- //precache_model("models/player/skadi.zym");
- //precache_model("models/player/specop.zym");
- //precache_model("models/player/visitant.zym");
- }
-
- if (cvar("g_footsteps"))
- {
- precache_sound ("misc/footstep01.wav");
- precache_sound ("misc/footstep02.wav");
- precache_sound ("misc/footstep03.wav");
- precache_sound ("misc/footstep04.wav");
- precache_sound ("misc/footstep05.wav");
- precache_sound ("misc/footstep06.wav");
- }
-
- // gore and miscellaneous sounds
- //precache_sound ("misc/h2ohit.wav");
- precache_model ("models/gibs/bloodyskull.md3");
- precache_model ("models/gibs/chunk.mdl");
- precache_model ("models/gibs/eye.md3");
- precache_model ("models/gibs/gib1.md3");
- precache_model ("models/gibs/gib1.mdl");
- precache_model ("models/gibs/gib2.mdl");
- precache_model ("models/gibs/gib3.mdl");
- precache_model ("models/gibs/gib5.md3");
- precache_model ("models/hook.md3");
- precache_sound ("misc/armorimpact.wav");
- precache_sound ("misc/bodyimpact1.wav");
- precache_sound ("misc/bodyimpact2.wav");
- precache_sound ("misc/gib.wav");
- precache_sound ("misc/gib_splat01.wav");
- precache_sound ("misc/gib_splat02.wav");
- precache_sound ("misc/gib_splat03.wav");
- precache_sound ("misc/gib_splat04.wav");
- precache_sound ("misc/hit.wav");
- precache_sound ("misc/hitground1.wav");
- precache_sound ("misc/hitground2.wav");
- precache_sound ("misc/hitground3.wav");
- precache_sound ("misc/hitground4.wav");
- precache_sound ("misc/null.wav");
- precache_sound ("misc/spawn.wav");
- precache_sound ("misc/talk.wav");
- precache_sound ("misc/teleport.wav");
- precache_sound ("player/lava.wav");
- precache_sound ("player/slime.wav");
-
- // announcer sounds - male
- //precache_sound ("announcer/male/electrobitch.wav");
- precache_sound ("announcer/male/03kills.wav");
- precache_sound ("announcer/male/05kills.wav");
- precache_sound ("announcer/male/10kills.wav");
- precache_sound ("announcer/male/15kills.wav");
- precache_sound ("announcer/male/20kills.wav");
- precache_sound ("announcer/male/25kills.wav");
- precache_sound ("announcer/male/30kills.wav");
- precache_sound ("announcer/male/botlike.wav");
- precache_sound ("announcer/male/yoda.wav");
-
- // announcer sounds - robotic
- precache_sound ("announcer/robotic/1fragleft.wav");
- precache_sound ("announcer/robotic/1minuteremains.wav");
- precache_sound ("announcer/robotic/2fragsleft.wav");
- precache_sound ("announcer/robotic/3fragsleft.wav");
- if (cvar("g_minstagib"))
- {
- precache_sound ("announcer/robotic/lastsecond.wav");
- precache_sound ("announcer/robotic/narrowly.wav");
- precache_sound ("announcer/robotic/1.wav");
- precache_sound ("announcer/robotic/2.wav");
- precache_sound ("announcer/robotic/3.wav");
- precache_sound ("announcer/robotic/4.wav");
- precache_sound ("announcer/robotic/5.wav");
- precache_sound ("announcer/robotic/6.wav");
- precache_sound ("announcer/robotic/7.wav");
- precache_sound ("announcer/robotic/8.wav");
- precache_sound ("announcer/robotic/9.wav");
- precache_sound ("announcer/robotic/10.wav");
- }
-
- // common weapon precaches
- precache_sound ("weapons/weapon_switch.wav");
- precache_sound ("weapons/weaponpickup.wav");
- if (cvar("g_grappling_hook"))
- {
- precache_sound ("weapons/hook_fire.wav"); // hook
- precache_sound ("weapons/hook_impact.wav"); // hook
- }
-
- if (cvar("sv_precacheweapons") || cvar("g_nixnex"))
- {
- //precache weapon models/sounds
- local float wep;
- wep = WEP_FIRST;
- while (wep <= WEP_LAST)
- {
- weapon_action(wep, WR_PRECACHE);
- wep = wep + 1;
- }
- }
-
- // plays music for the level if there is any
- if (self.noise)
- {
- precache_sound (self.noise);
- ambientsound ('0 0 0', self.noise, 1.00, ATTN_NONE);
- }
-
// 0 normal
lightstyle(0, "m");
@@ -298,10 +155,12 @@
CampaignPreInit();
InitGameplayMode();
+ readlevelcvars();
+ precache();
WaypointSprite_Init();
- //if (cvar("g_domination"))
+ //if (g_domination)
// dom_init();
local entity head;
@@ -361,8 +220,6 @@
fteqcc_testbugs();
- readlevelcvars();
-
Ban_LoadBans();
#ifdef MAPINFO
@@ -1419,7 +1276,7 @@
else
ClearWinners();
- if (!cvar("g_runematch"))
+ if (!g_runematch)
if (checkrules_leaderfrags != checkrules_oldleaderfrags)
{
if (checkrules_leaderfrags == fraglimit - 1)
@@ -1462,7 +1319,7 @@
AddWinners(team, COLOR_TEAM4);
}
- if(!cvar("g_runematch") && !cvar("g_domination"))
+ if(!g_runematch && !g_domination)
if(tdm_max_score != tdm_old_score)
{
if(tdm_max_score == fraglimit - 1)
@@ -1739,7 +1596,7 @@
{
if(teams_matter)
{
- if(g_tdm || cvar("g_runematch") || g_ctf || cvar("g_domination") || g_keyhunt)
+ if(g_tdm || g_runematch || g_ctf || g_domination || g_keyhunt)
status = WinningCondition_MaxTeamSum(fraglimit);
//else if()
// status = WinningCondition_MaxTeamMax(fraglimit);
Modified: trunk/data/qcsrc/server/havocbot_roles.qc
===================================================================
--- trunk/data/qcsrc/server/havocbot_roles.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/havocbot_roles.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -711,7 +711,7 @@
self.bot_strategytime = -1;
if (g_ctf)
havocbot_chooserole_ctf();
- else if (cvar("g_domination"))
+ else if (g_domination)
havocbot_chooserole_dom();
else if (g_keyhunt)
havocbot_chooserole_kh();
Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/keyhunt.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -1,4 +1,3 @@
-string STR_ITEM_KH_KEY = "item_kh_key";
#define FOR_EACH_KH_KEY(v) for(v = world; (v = find(v, classname, STR_ITEM_KH_KEY)); )
// #define KH_PLAYER_USE_ATTACHMENT
@@ -22,8 +21,6 @@
vector KH_KEY_MAX = '10 10 3';
float KH_KEY_BRIGHTNESS = 2;
-typedef void(void) kh_Think_t;
-var kh_Think_t kh_Controller_Thinkfunc;
string kh_Controller_Waitmsg;
float kh_Team_ByID(float t)
Modified: trunk/data/qcsrc/server/keyhunt.qh
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qh 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/keyhunt.qh 2007-12-12 18:46:02 UTC (rev 3020)
@@ -24,3 +24,9 @@
void kh_setstatus();
float kh_HandleFrags(entity attacker, entity targ, float f);
float kh_Key_AllOwnedByWhichTeam();
+
+#define STR_ITEM_KH_KEY "item_kh_key"
+typedef void(void) kh_Think_t;
+var kh_Think_t kh_Controller_Thinkfunc;
+void kh_Controller_SetThink(float t, string msg, kh_Think_t func)
+void kh_Key_Remove(entity key)
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -687,6 +687,7 @@
void readlevelcvars(void)
{
+ sv_cheats = cvar("sv_cheats");
g_cloaked = cvar("g_cloaked");
g_footsteps = cvar("g_footsteps");
g_grappling_hook = cvar("g_grappling_hook");
@@ -873,3 +874,147 @@
play2(head, filename);
}
}
+
+void precache()
+{
+ float globhandle, i, n;
+
+ // gamemode related things
+ precache_model ("models/misc/chatbubble.spr");
+ precache_model ("models/misc/teambubble.spr");
+ if (g_runematch)
+ {
+ precache_model ("models/runematch/curse.mdl");
+ precache_model ("models/runematch/rune.mdl");
+ }
+
+ // Precache all player models if desired
+ if (cvar("sv_precacheplayermodels"))
+ {
+ globhandle = search_begin("models/player/*.zym", TRUE, FALSE);
+ n = search_getsize(globhandle);
+ for(i = 0; i < n; ++i)
+ {
+ //print(search_getfilename(globhandle, i), "\n");
+ precache_model(search_getfilename(globhandle, i));
+ }
+ search_end(globhandle);
+ //precache_model("models/player/carni.zym");
+ //precache_model("models/player/crash.zym");
+ //precache_model("models/player/grunt.zym");
+ //precache_model("models/player/headhunter.zym");
+ //precache_model("models/player/insurrectionist.zym");
+ //precache_model("models/player/jeandarc.zym");
+ //precache_model("models/player/lurk.zym");
+ //precache_model("models/player/lycanthrope.zym");
+ //precache_model("models/player/marine.zym");
+ //precache_model("models/player/nexus.zym");
+ //precache_model("models/player/pyria.zym");
+ //precache_model("models/player/shock.zym");
+ //precache_model("models/player/skadi.zym");
+ //precache_model("models/player/specop.zym");
+ //precache_model("models/player/visitant.zym");
+ }
+
+ if (g_footsteps)
+ {
+ precache_sound ("misc/footstep01.wav");
+ precache_sound ("misc/footstep02.wav");
+ precache_sound ("misc/footstep03.wav");
+ precache_sound ("misc/footstep04.wav");
+ precache_sound ("misc/footstep05.wav");
+ precache_sound ("misc/footstep06.wav");
+ }
+
+ // gore and miscellaneous sounds
+ //precache_sound ("misc/h2ohit.wav");
+ precache_model ("models/gibs/bloodyskull.md3");
+ precache_model ("models/gibs/chunk.mdl");
+ precache_model ("models/gibs/eye.md3");
+ precache_model ("models/gibs/gib1.md3");
+ precache_model ("models/gibs/gib1.mdl");
+ precache_model ("models/gibs/gib2.mdl");
+ precache_model ("models/gibs/gib3.mdl");
+ precache_model ("models/gibs/gib5.md3");
+ precache_model ("models/hook.md3");
+ precache_sound ("misc/armorimpact.wav");
+ precache_sound ("misc/bodyimpact1.wav");
+ precache_sound ("misc/bodyimpact2.wav");
+ precache_sound ("misc/gib.wav");
+ precache_sound ("misc/gib_splat01.wav");
+ precache_sound ("misc/gib_splat02.wav");
+ precache_sound ("misc/gib_splat03.wav");
+ precache_sound ("misc/gib_splat04.wav");
+ precache_sound ("misc/hit.wav");
+ precache_sound ("misc/hitground1.wav");
+ precache_sound ("misc/hitground2.wav");
+ precache_sound ("misc/hitground3.wav");
+ precache_sound ("misc/hitground4.wav");
+ precache_sound ("misc/null.wav");
+ precache_sound ("misc/spawn.wav");
+ precache_sound ("misc/talk.wav");
+ precache_sound ("misc/teleport.wav");
+ precache_sound ("player/lava.wav");
+ precache_sound ("player/slime.wav");
+
+ // announcer sounds - male
+ //precache_sound ("announcer/male/electrobitch.wav");
+ precache_sound ("announcer/male/03kills.wav");
+ precache_sound ("announcer/male/05kills.wav");
+ precache_sound ("announcer/male/10kills.wav");
+ precache_sound ("announcer/male/15kills.wav");
+ precache_sound ("announcer/male/20kills.wav");
+ precache_sound ("announcer/male/25kills.wav");
+ precache_sound ("announcer/male/30kills.wav");
+ precache_sound ("announcer/male/botlike.wav");
+ precache_sound ("announcer/male/yoda.wav");
+
+ // announcer sounds - robotic
+ precache_sound ("announcer/robotic/1fragleft.wav");
+ precache_sound ("announcer/robotic/1minuteremains.wav");
+ precache_sound ("announcer/robotic/2fragsleft.wav");
+ precache_sound ("announcer/robotic/3fragsleft.wav");
+ if (g_minstagib)
+ {
+ precache_sound ("announcer/robotic/lastsecond.wav");
+ precache_sound ("announcer/robotic/narrowly.wav");
+ precache_sound ("announcer/robotic/1.wav");
+ precache_sound ("announcer/robotic/2.wav");
+ precache_sound ("announcer/robotic/3.wav");
+ precache_sound ("announcer/robotic/4.wav");
+ precache_sound ("announcer/robotic/5.wav");
+ precache_sound ("announcer/robotic/6.wav");
+ precache_sound ("announcer/robotic/7.wav");
+ precache_sound ("announcer/robotic/8.wav");
+ precache_sound ("announcer/robotic/9.wav");
+ precache_sound ("announcer/robotic/10.wav");
+ }
+
+ // common weapon precaches
+ precache_sound ("weapons/weapon_switch.wav");
+ precache_sound ("weapons/weaponpickup.wav");
+ if (cvar("g_grappling_hook"))
+ {
+ precache_sound ("weapons/hook_fire.wav"); // hook
+ precache_sound ("weapons/hook_impact.wav"); // hook
+ }
+
+ if (cvar("sv_precacheweapons") || g_nixnex)
+ {
+ //precache weapon models/sounds
+ local float wep;
+ wep = WEP_FIRST;
+ while (wep <= WEP_LAST)
+ {
+ weapon_action(wep, WR_PRECACHE);
+ wep = wep + 1;
+ }
+ }
+
+ // plays music for the level if there is any
+ if (self.noise)
+ {
+ precache_sound (self.noise);
+ ambientsound ('0 0 0', self.noise, 1.00, ATTN_NONE);
+ }
+}
Modified: trunk/data/qcsrc/server/runematch.qc
===================================================================
--- trunk/data/qcsrc/server/runematch.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/runematch.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -33,7 +33,7 @@
void runematch_spawn_point()
{
- if(!cvar("g_runematch"))
+ if(!g_runematch)
{
remove(self);
return;
@@ -151,7 +151,7 @@
vector ang;
entity rune;
- if(self.owner.classname != "player")
+ if(self.owner.classname != "player" || time < restart_countdown)
{
rune_respawn();
return;
@@ -181,7 +181,7 @@
void rune_touch()
{
- if(other.classname != "player" || other.health < 2)
+ if(other.classname != "player" || other.health < 1)
return;
if(self.wait > time)
return; // "notouch" time isn't finished
@@ -619,7 +619,7 @@
void runematch_init()
{
- if(!cvar("g_runematch"))
+ if(!g_runematch)
return;
entity e;
@@ -636,7 +636,7 @@
{
entity rune;
- if(!cvar("g_runematch") || !cvar("g_runematch_pointamt"))
+ if(!g_runematch || !cvar("g_runematch_pointamt"))
return;
if(gameover)
Modified: trunk/data/qcsrc/server/teamplay.qc
===================================================================
--- trunk/data/qcsrc/server/teamplay.qc 2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/teamplay.qc 2007-12-12 18:46:02 UTC (rev 3020)
@@ -280,38 +280,18 @@
fraglimit_override = cvar("fraglimit_override");
}*/
- // enforce the server's universal frag/time limits
- if(!cvar("g_campaign"))
- {
- if(fraglimit_override >= 0)
- cvar_set("fraglimit", ftos(fraglimit_override));
- if(timelimit_override >= 0)
- cvar_set("timelimit", ftos(timelimit_override));
- }
-
- if (game == GAME_DOMINATION)//cvar("g_domination"))
- dom_init();
- else if (game == GAME_CTF)//cvar("g_ctf"))
- ctf_init();
- else if (game == GAME_RUNEMATCH)//cvar("g_runematch"))
- runematch_init();
- else if (game == GAME_TEAM_DEATHMATCH)//cvar("g_runematch"))
- tdm_init();
- else if (game == GAME_KEYHUNT)//cvar("g_keyhunt"))
- kh_init();
-
// those mutators rule each other out
- if(g_minstagib)
+ if(cvar("g_minstagib"))
{
cvar_set("g_instagib", "0");
cvar_set("g_rocketarena", "0");
}
- if(g_instagib)
+ if(cvar("g_instagib"))
{
cvar_set("g_minstagib", "0");
cvar_set("g_rocketarena", "0");
}
- if(g_rocketarena)
+ if(cvar("g_rocketarena"))
{
cvar_set("g_instagib", "0");
cvar_set("g_minstagib", "0");
@@ -326,10 +306,31 @@
g_ctf = cvar("g_ctf");
g_lms = cvar("g_lms");
g_tdm = cvar("g_tdm");
+ g_runematch = cvar("g_runematch");
g_keyhunt = cvar("g_keyhunt");
g_onslaught = cvar("g_onslaught");
g_assault = cvar("g_assault");
g_arena = cvar("g_arena");
+
+ // enforce the server's universal frag/time limits
+ if(!cvar("g_campaign"))
+ {
+ if(fraglimit_override >= 0)
+ cvar_set("fraglimit", ftos(fraglimit_override));
+ if(timelimit_override >= 0)
+ cvar_set("timelimit", ftos(timelimit_override));
+ }
+
+ if (game == GAME_DOMINATION)//cvar("g_domination"))
+ dom_init();
+ else if (game == GAME_CTF)//cvar("g_ctf"))
+ ctf_init();
+ else if (game == GAME_RUNEMATCH)//cvar("g_runematch"))
+ runematch_init();
+ else if (game == GAME_TEAM_DEATHMATCH)//cvar("g_runematch"))
+ tdm_init();
+ else if (game == GAME_KEYHUNT)//cvar("g_keyhunt"))
+ kh_init();
}
string GetClientVersionMessage(float v) {
@@ -423,6 +424,9 @@
if(modifications != "")
s = strcat(s, "^8\nactive modifications: ^3", modifications, "^8\n");
+ if(time < restart_countdown)
+ s = strcat(s, "\n^1Game starts in ", ftos(ceil(restart_countdown-time)), " seconds^7");
+
if((self.classname == "observer" || self.classname == "spectator") && self.version == cvar("gameversion")) {
if(!g_arena)
s = strcat(s,"^7\n\n\npress jump to play\npress attack to spectate other players\n\n");
More information about the nexuiz-commits
mailing list