[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