[nexuiz-commits] r7342 - in trunk/data: . qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Aug 5 05:54:07 EDT 2009


Author: div0
Date: 2009-08-05 05:54:04 -0400 (Wed, 05 Aug 2009)
New Revision: 7342

Added:
   trunk/data/dragboxes.cfg
Modified:
   trunk/data/qcsrc/server/clientcommands.qc
   trunk/data/qcsrc/server/miscfunctions.qc
Log:
drag box editor in sv_cheats; good for quick and dirty race-checkpointing of mikee maps


Added: trunk/data/dragboxes.cfg
===================================================================
--- trunk/data/dragboxes.cfg	                        (rev 0)
+++ trunk/data/dragboxes.cfg	2009-08-05 09:54:04 UTC (rev 7342)
@@ -0,0 +1,12 @@
+sv_cheats 1
+r_showbboxes 1.5
+restart
+
+bind mouse2 "+button8"
+bind q "cmd dragpoint_spawn"
+bind e "cmd dragbox_spawn"
+bind r "cmd drag_remove"
+bind + "cmd drag_setcnt *+1"
+bind - "cmd drag_setcnt *-1"
+bind x "cmd drag_save foo.cfg; cmd drag_saveraceent foo.ent"
+bind , "exec data/foo.cfg"

Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc	2009-08-05 08:43:21 UTC (rev 7341)
+++ trunk/data/qcsrc/server/clientcommands.qc	2009-08-05 09:54:04 UTC (rev 7342)
@@ -97,6 +97,42 @@
 	return world;
 }
 
+float drag_lastcnt;
+void DragBox_Think()
+{
+	if(self.aiment && self.enemy)
+	{
+		self.origin_x = (self.aiment.origin_x + self.enemy.origin_x) * 0.5;
+		self.origin_y = (self.aiment.origin_y + self.enemy.origin_y) * 0.5;
+		self.origin_z = (self.aiment.origin_z + self.enemy.origin_z) * 0.5;
+		self.maxs_x = fabs(self.aiment.origin_x - self.enemy.origin_x) * 0.5;
+		self.maxs_y = fabs(self.aiment.origin_y - self.enemy.origin_y) * 0.5;
+		self.maxs_z = fabs(self.aiment.origin_z - self.enemy.origin_z) * 0.5;
+		self.mins = -1 * self.maxs;
+		setorigin(self, self.origin); setsize(self, self.mins, self.maxs); // link edict
+	}
+
+	if(self.cnt == -1) // actually race_place -1
+	{
+		// show "10 10" for qualifying spawns
+		setmodel(self.killindicator, "models/sprites/10.spr32");
+		setmodel(self.killindicator.killindicator, "models/sprites/10.spr32");
+	}
+	else if(self.cnt == -2) // actually race_place 0
+	{
+		// show "10 0" for loser spawns
+		setmodel(self.killindicator, "models/sprites/10.spr32");
+		setmodel(self.killindicator.killindicator, "models/sprites/0.spr32");
+	}
+	else
+	{
+		setmodel(self.killindicator, strcat("models/sprites/", ftos(mod(self.cnt, 10)), ".spr32"));
+		setmodel(self.killindicator.killindicator, strcat("models/sprites/", ftos(floor(self.cnt / 10)), ".spr32"));
+	}
+
+	self.nextthink = time;
+}
+
 //float ctf_clientcommand();
 float readyrestart_happened;
 .float lms_spectate_warning;
@@ -388,6 +424,233 @@
 			race_ImposePenaltyTime(self, stof(argv(1)), argv(2));
 		else
 			sprint(self, "Usage: sv_cheats 1; restart; cmd penalty 5.0 AHAHAHAHAHAHAH))\n");
+	} else if(argv(0) == "dragbox_spawn") {
+		if(sv_cheats || self.maycheat)
+		{
+			e = spawn();
+			e.classname = "dragbox_box";
+			e.think = DragBox_Think;
+			e.nextthink = time;
+			e.solid = -1; // black
+			setmodel(e, "null"); // network it
+			if(tokens == 4)
+				e.cnt = stof(argv(1));
+			else
+				e.cnt = max(0, drag_lastcnt);
+
+			e.aiment = spawn();
+			e.aiment.classname = "dragbox_corner_1";
+			e.aiment.owner = e;
+			setmodel(e.aiment, "models/marker.md3");
+			e.aiment.skin = 0;
+			setsize(e.aiment, '0 0 0', '0 0 0');
+			if(tokens == 4)
+				setorigin(e.aiment, stov(argv(2)));
+			else
+				setorigin(e.aiment, self.cursor_trace_endpos);
+
+			e.enemy = spawn();
+			e.enemy.classname = "dragbox_corner_2";
+			e.enemy.owner = e;
+			setmodel(e.enemy, "models/marker.md3");
+			e.enemy.skin = 1;
+			setsize(e.enemy, '0 0 0', '0 0 0');
+			end = normalize(self.cursor_trace_start - e.aiment.origin);
+			end_x = (end_x > 0) * 2 - 1;
+			end_y = (end_y > 0) * 2 - 1;
+			end_z = (end_z > 0) * 2 - 1;
+			if(tokens == 4)
+				setorigin(e.enemy, stov(argv(3)));
+			else
+				setorigin(e.enemy, e.aiment.origin + 32 * end);
+
+			e.killindicator = spawn();
+			e.killindicator.classname = "drag_digit";
+			e.killindicator.owner = e;
+			setattachment(e.killindicator, e, "");
+			setorigin(e.killindicator, '0 0 -8');
+			e.killindicator.killindicator = spawn();
+			e.killindicator.killindicator.classname = "drag_digit";
+			e.killindicator.killindicator.owner = e;
+			setattachment(e.killindicator.killindicator, e, "");
+			setorigin(e.killindicator.killindicator, '0 0 8');
+		}
+		else
+			sprint(self, "Usage: sv_cheats 1; r_showbboxes 1.5; restart; cmd dragbox_spawn\n");
+	} else if(argv(0) == "dragpoint_spawn") {
+		if(sv_cheats || self.maycheat)
+		{
+			e = spawn();
+			e.classname = "dragpoint";
+			e.think = DragBox_Think;
+			e.nextthink = time;
+			e.solid = 0; // nothing special
+			setmodel(e, "models/marker.md3");
+			setsize(e, PL_MIN, PL_MAX);
+			e.skin = 2;
+			if(tokens == 3)
+				e.cnt = stof(argv(1));
+			else
+				e.cnt = drag_lastcnt;
+			if(tokens == 3)
+				setorigin(e, stov(argv(2)));
+			else
+			{
+				setorigin(e, self.cursor_trace_endpos + normalize(self.cursor_trace_start - self.cursor_trace_endpos));
+				move_out_of_solid(e);
+			}
+
+			e.killindicator = spawn();
+			e.killindicator.classname = "drag_digit";
+			e.killindicator.owner = e;
+			setattachment(e.killindicator, e, "");
+			setorigin(e.killindicator, '0 0 40');
+			e.killindicator.killindicator = spawn();
+			e.killindicator.killindicator.classname = "drag_digit";
+			e.killindicator.killindicator.owner = e;
+			setattachment(e.killindicator.killindicator, e, "");
+			setorigin(e.killindicator.killindicator, '0 0 56');
+		}
+		else
+			sprint(self, "Usage: sv_cheats 1; r_showbboxes 1.5; restart; cmd dragbox_spawn\n");
+	} else if(argv(0) == "drag_remove") {
+		if(sv_cheats || self.maycheat)
+		{
+			RandomSelection_Init();
+			for(e = world; (e = find(e, classname, "dragbox_box")); )
+				RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - self.cursor_trace_endpos));
+			for(e = world; (e = find(e, classname, "dragpoint")); )
+				RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - self.cursor_trace_endpos));
+			if(RandomSelection_chosen_ent)
+			{
+				remove(RandomSelection_chosen_ent.killindicator.killindicator);
+				remove(RandomSelection_chosen_ent.killindicator);
+				if(RandomSelection_chosen_ent.aiment)
+					remove(RandomSelection_chosen_ent.aiment);
+				if(RandomSelection_chosen_ent.enemy)
+					remove(RandomSelection_chosen_ent.enemy);
+				remove(RandomSelection_chosen_ent);
+			}
+		}
+		else
+			sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_remove\n");
+	} else if(argv(0) == "drag_setcnt") {
+		if((sv_cheats || self.maycheat) && tokens >= 2)
+		{
+			RandomSelection_Init();
+			for(e = world; (e = find(e, classname, "dragbox_box")); )
+				RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - self.cursor_trace_endpos));
+			for(e = world; (e = find(e, classname, "dragpoint")); )
+				RandomSelection_Add(e, 0, string_null, 1, 1 / vlen(e.origin + (e.mins + e.maxs) * 0.5 - self.cursor_trace_endpos));
+			if(RandomSelection_chosen_ent)
+			{
+				if(substring(argv(1), 0, 1) == "*")
+					RandomSelection_chosen_ent.cnt = drag_lastcnt = RandomSelection_chosen_ent.cnt + stof(substring(argv(1), 1, -1));
+				else
+					RandomSelection_chosen_ent.cnt = drag_lastcnt = stof(argv(1));
+			}
+		}
+		else
+			sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_setcnt cnt\n");
+	} else if(argv(0) == "drag_save") {
+		if((sv_cheats || self.maycheat) && tokens >= 2)
+		{
+			f = fopen(argv(1), FILE_WRITE);
+			fputs(f, "cmd drag_clear\n");
+			for(e = world; (e = find(e, classname, "dragbox_box")); )
+			{
+				fputs(f, strcat("cmd dragbox_spawn ", ftos(e.cnt), " \"", vtos(e.aiment.origin), "\" \"", vtos(e.enemy.origin), "\"\n"));
+			}
+			for(e = world; (e = find(e, classname, "dragpoint")); )
+			{
+				fputs(f, strcat("cmd dragpoint_spawn ", ftos(e.cnt), " \"", vtos(e.origin), "\"\n"));
+			}
+			fclose(f);
+		}
+		else
+			sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_save filename\n");
+	} else if(argv(0) == "drag_saveraceent") {
+		if((sv_cheats || self.maycheat) && tokens >= 2)
+		{
+			f = fopen(argv(1), FILE_WRITE);
+			for(e = world; (e = find(e, classname, "dragbox_box")); )
+			{
+				fputs(f, "{\n");
+				fputs(f, "\"classname\" \"trigger_race_checkpoint\"\n");
+				fputs(f, strcat("\"origin\" \"", substring(vtos(e.absmin), 1, -2), "\"\n"));
+				fputs(f, strcat("\"maxs\" \"", substring(vtos(e.absmax - e.absmin), 1, -2), "\"\n"));
+				fputs(f, strcat("\"cnt\" \"", ftos(e.cnt), "\"\n"));
+				fputs(f, strcat("\"targetname\" \"cp", ftos(e.cnt), "\"\n"));
+				fputs(f, "}\n");
+			}
+			for(e = world; (e = find(e, classname, "dragpoint")); )
+			{
+				start = '0 0 0';
+				effectnum = 0;
+				for(oldself = world; (oldself = find(oldself, classname, "dragbox_box")); )
+				{
+					if(e.cnt <= 0 && oldself.cnt == 0 || e.cnt == oldself.cnt)
+					{
+						start = start + oldself.origin;
+						++effectnum;
+					}
+				}
+				start *= 1 / effectnum;
+				fputs(f, "{\n");
+				fputs(f, "\"classname\" \"info_player_race\"\n");
+				fputs(f, strcat("\"angle\" \"", ftos(vectoyaw(start - e.origin)), "\"\n"));
+				fputs(f, strcat("\"origin\" \"", substring(vtos(e.origin), 1, -2), "\"\n"));
+				if(e.cnt == -2)
+				{
+					fputs(f, "\"target\" \"cp0\"\n");
+					fputs(f, "\"race_place\" \"0\"\n");
+				}
+				else if(e.cnt == -1)
+				{
+					fputs(f, "\"target\" \"cp0\"\n");
+					fputs(f, "\"race_place\" \"-1\"\n");
+				}
+				else
+				{
+					fputs(f, strcat("\"target\" \"cp", ftos(e.cnt), "\"\n"));
+					if(e.cnt == 0)
+					{
+						// these need race_place
+						// counting...
+						effectnum = 1;
+						for(oldself = world; (oldself = find(oldself, classname, "dragpoint")); )
+						if(oldself.cnt == 0)
+						{
+							if(vlen(oldself.origin - start) < vlen(e.origin - start))
+								++effectnum;
+							else if(vlen(oldself.origin - start) == vlen(e.origin - start) && num_for_edict(oldself) < num_for_edict(e))
+								++effectnum;
+						}
+						fputs(f, strcat("\"race_place\" \"", ftos(effectnum), "\"\n"));
+					}
+				}
+				fputs(f, "}\n");
+			}
+			fclose(f);
+		}
+		else
+			sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_save filename\n");
+	} else if(argv(0) == "drag_clear") {
+		if(sv_cheats || self.maycheat)
+		{
+			for(e = world; (e = find(e, classname, "dragbox_box")); )
+				remove(e);
+			for(e = world; (e = find(e, classname, "dragbox_corner_1")); )
+				remove(e);
+			for(e = world; (e = find(e, classname, "dragbox_corner_2")); )
+				remove(e);
+			for(e = world; (e = find(e, classname, "dragpoint")); )
+				remove(e);
+			for(e = world; (e = find(e, classname, "drag_digit")); )
+				remove(e);
+		}
+		else
+			sprint(self, "Usage: sv_cheats 1; restart; cmd dragbox_clear\n");
 	} else {
 		//if(ctf_clientcommand())
 		//	return;

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2009-08-05 08:43:21 UTC (rev 7341)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2009-08-05 09:54:04 UTC (rev 7342)
@@ -1504,6 +1504,7 @@
         precache_sound ("announcer/robotic/narrowly.wav");
     }
 
+    precache_model ("models/sprites/0.spr32");
     precache_model ("models/sprites/1.spr32");
     precache_model ("models/sprites/2.spr32");
     precache_model ("models/sprites/3.spr32");



More information about the nexuiz-commits mailing list