From: havoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Sun, 18 Mar 2007 22:44:59 +0000 (+0000)
Subject: changed bestweapon command to match the one in proquake - taking each weapon identifi... 
X-Git-Tag: xonotic-v0.1.0preview~3419
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=6f282f35c6365a2e4ad72e1409fc4843f74294dd;p=xonotic%2Fdarkplaces.git

changed bestweapon command to match the one in proquake - taking each weapon identifier as a separate parameter, rather than one string of them, I don't know why the person asking for bestweapon support gave me an example of a single parameter as no other engine seems to do it that way


git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6998 d7cf8633-e32d-0410-b094-e92efae38249
---

diff --git a/cl_input.c b/cl_input.c
index 96e57d9d..c8b9515e 100644
--- a/cl_input.c
+++ b/cl_input.c
@@ -197,47 +197,55 @@ void IN_JumpUp (void) {KeyUp(&in_jump);}
 
 void IN_Impulse (void) {in_impulse=atoi(Cmd_Argv(1));}
 
-int in_bestweapon_info[][5] =
+struct
 {
-	{'1', 1, IT_AXE, STAT_SHELLS, 0},
-	{'2', 2, IT_SHOTGUN, STAT_SHELLS, 1},
-	{'3', 3, IT_SUPER_SHOTGUN, STAT_SHELLS, 1},
-	{'4', 4, IT_NAILGUN, STAT_NAILS, 1},
-	{'5', 5, IT_SUPER_NAILGUN, STAT_NAILS, 1},
-	{'6', 6, IT_GRENADE_LAUNCHER, STAT_ROCKETS, 1},
-	{'7', 7, IT_ROCKET_LAUNCHER, STAT_ROCKETS, 1},
-	{'8', 8, IT_LIGHTNING, STAT_CELLS, 1},
-	{'9', 9, 128, STAT_CELLS, 1}, // generic energy weapon for mods
-	{'p', 209, 128, STAT_CELLS, 1}, // dpmod plasma gun
-	{'w', 210, 8388608, STAT_CELLS, 1}, // dpmod plasma wave cannon
-	{'l', 225, HIT_LASER_CANNON, STAT_CELLS, 1}, // hipnotic laser cannon
-	{'h', 226, HIT_MJOLNIR, STAT_CELLS, 0}, // hipnotic mjolnir hammer
-	{-1, 0, 0, 0, 0}
+	const char *name;
+	int impulse;
+	int weaponbit;
+	int ammostat;
+	int ammomin;
+}
+in_bestweapon_info[] =
+{
+	{"1", 1, IT_AXE, STAT_SHELLS, 0},
+	{"2", 2, IT_SHOTGUN, STAT_SHELLS, 1},
+	{"3", 3, IT_SUPER_SHOTGUN, STAT_SHELLS, 1},
+	{"4", 4, IT_NAILGUN, STAT_NAILS, 1},
+	{"5", 5, IT_SUPER_NAILGUN, STAT_NAILS, 1},
+	{"6", 6, IT_GRENADE_LAUNCHER, STAT_ROCKETS, 1},
+	{"7", 7, IT_ROCKET_LAUNCHER, STAT_ROCKETS, 1},
+	{"8", 8, IT_LIGHTNING, STAT_CELLS, 1},
+	{"9", 9, 128, STAT_CELLS, 1}, // generic energy weapon for mods
+	{"p", 209, 128, STAT_CELLS, 1}, // dpmod plasma gun
+	{"w", 210, 8388608, STAT_CELLS, 1}, // dpmod plasma wave cannon
+	{"l", 225, HIT_LASER_CANNON, STAT_CELLS, 1}, // hipnotic laser cannon
+	{"h", 226, HIT_MJOLNIR, STAT_CELLS, 0}, // hipnotic mjolnir hammer
+	{NULL, 0, 0, 0, 0}
 };
 void IN_BestWeapon (void)
 {
 	int i, n;
-	const char *s;
-	if (Cmd_Argc() != 2)
+	const char *t;
+	if (Cmd_Argc() < 2)
 	{
-		Con_Printf("bestweapon requires 1 parameter\n");
+		Con_Printf("bestweapon requires 1 or more parameters\n");
 		return;
 	}
-	s = Cmd_Argv(1);
-	for (i = 0;s[i];i++)
+	for (i = 1;i < Cmd_Argc();i++)
 	{
+		t = Cmd_Argv(i);
 		// figure out which weapon this character refers to
-		for (n = 0;in_bestweapon_info[n][0] >= 0;n++)
+		for (n = 0;in_bestweapon_info[n].name;n++)
 		{
-			if (in_bestweapon_info[n][0] == s[i])
+			if (!strcmp(in_bestweapon_info[n].name, t))
 			{
 				// we found out what weapon this character refers to
 				// check if the inventory contains the weapon and enough ammo
-				if ((cl.stats[STAT_ITEMS] & in_bestweapon_info[n][2]) && (cl.stats[in_bestweapon_info[n][3]] >= in_bestweapon_info[n][4]))
+				if ((cl.stats[STAT_ITEMS] & in_bestweapon_info[n].weaponbit) && (cl.stats[in_bestweapon_info[n].ammostat] >= in_bestweapon_info[n].ammomin))
 				{
 					// we found one of the weapons the player wanted
 					// send an impulse to switch to it
-					in_impulse = in_bestweapon_info[n][1];
+					in_impulse = in_bestweapon_info[n].impulse;
 					return;
 				}
 				break;
@@ -1667,7 +1675,7 @@ void CL_InitInput (void)
 	Cmd_AddCommand ("-button16", IN_Button16Up, "deactivate button16");
 
 	// LordHavoc: added bestweapon command
-	Cmd_AddCommand ("bestweapon", IN_BestWeapon, "send an impulse number to server to select the first usable weapon out of several (example: 87654321)");
+	Cmd_AddCommand ("bestweapon", IN_BestWeapon, "send an impulse number to server to select the first usable weapon out of several (example: 8 7 6 5 4 3 2 1)");
 
 	Cvar_RegisterVariable(&cl_movement);
 	Cvar_RegisterVariable(&cl_movement_minping);
diff --git a/todo b/todo
index 1b46fa8f..0415f3c1 100644
--- a/todo
+++ b/todo
@@ -1,4 +1,5 @@
 - todo: difficulty ratings are: 0 = trivial, 1 = easy, 2 = easy-moderate, 3 = moderate, 4 = moderate-hard, 5 = hard, 6 = hard++, 7 = nightmare, d = done, -d = done but have not notified the people who asked for it, f = failed, -f = failed but have not notified the people who asked for it
+0 bug darkplaces client: if you press 1 during the demo loop when quake starts, escape doesn't do anything until you hit some other key (daemon)
 0 bug darkplaces client: can't move mouse around in nexuiz menu if vid_mouse is 0
 0 bug darkplaces client: decals are not sticking to submodels
 0 bug darkplaces loader: make rtlight entity loader support q3map/q3map2 lights properly, they use a spawnflag for LINEAR mode, by default they use 1/(x*x) falloff (Carni, motorsep)