[nexuiz-commits] r8558 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Jan 25 12:07:26 EST 2010


Author: div0
Date: 2010-01-25 12:07:25 -0500 (Mon, 25 Jan 2010)
New Revision: 8558

Modified:
   trunk/data/qcsrc/server/cheats.qc
   trunk/data/qcsrc/server/t_items.qc
Log:
"give" cheat implemented fully

Modified: trunk/data/qcsrc/server/cheats.qc
===================================================================
--- trunk/data/qcsrc/server/cheats.qc	2010-01-25 17:06:39 UTC (rev 8557)
+++ trunk/data/qcsrc/server/cheats.qc	2010-01-25 17:07:25 UTC (rev 8558)
@@ -618,6 +618,8 @@
 		case "give":
 			if(argv(1) == "all")
 				return CheatImpulse(99); // not gonna duplicate this
+			if(GiveItems(self, 1, argc))
+				goto cheated;
 			break;
 	}
 	return 0;

Modified: trunk/data/qcsrc/server/t_items.qc
===================================================================
--- trunk/data/qcsrc/server/t_items.qc	2010-01-25 17:06:39 UTC (rev 8557)
+++ trunk/data/qcsrc/server/t_items.qc	2010-01-25 17:07:25 UTC (rev 8558)
@@ -1636,3 +1636,217 @@
 {
 	spawnfunc_weapon_fireball();
 }
+
+
+#define OP_SET 0
+#define OP_MIN 1
+#define OP_MAX 2
+#define OP_PLUS 3
+#define OP_MINUS 4
+
+void GiveSound(entity e, float v0, float v1, string snd_incr, string snd_decr)
+{
+	if(v0 > v1)
+	{
+		if(snd_decr != "")
+			sound (e, CHAN_AUTO, snd_decr, VOL_BASE, ATTN_NORM);
+	}
+	else if(v0 < v1)
+	{
+		if(snd_incr != "")
+			sound (e, CHAN_AUTO, snd_incr, VOL_BASE, ATTN_NORM);
+	}
+}
+
+float GiveBit(entity e, .float fld, float bit, float op, float val, string snd_incr, string snd_decr)
+{
+	float v0, v1;
+	v0 = (e.fld & bit);
+	switch(op)
+	{
+		case OP_SET:
+			if(val > 0)
+				e.fld |= bit;
+			else
+				e.fld &~= bit;
+			break;
+		case OP_MIN:
+		case OP_PLUS:
+			if(val > 0)
+				e.fld |= bit;
+			break;
+		case OP_MAX:
+			if(val <= 0)
+				e.fld &~= bit;
+			break;
+		case OP_MINUS:
+			if(val > 0)
+				e.fld &~= bit;
+			break;
+	}
+	v1 = (e.fld & bit);
+	GiveSound(e, v0, v1, snd_incr, snd_decr);
+	return (v0 != v1);
+}
+
+float GiveValue(entity e, .float fld, float op, float val, string snd_incr, string snd_decr)
+{
+	float v0, v1;
+	v0 = e.fld;
+	switch(op)
+	{
+		case OP_SET:
+			e.fld = val;
+			break;
+		case OP_MIN:
+			e.fld = min(e.fld, val);
+			break;
+		case OP_MAX:
+			e.fld = max(e.fld, val);
+			break;
+		case OP_PLUS:
+			e.fld += val;
+			break;
+		case OP_MINUS:
+			e.fld -= val;
+			break;
+	}
+	v1 = e.fld;
+	GiveSound(e, v0, v1, snd_incr, snd_decr);
+	return (v0 != v1);
+}
+
+float GiveValueRot(entity e, .float fld, .float rotfield, float rottime, .float regenfield, float regentime, float op, float val, string snd_incr, string snd_decr)
+{
+	float v0, v1;
+	v0 = e.fld;
+	GiveValue(e, fld, op, val, snd_incr, snd_decr);
+	v1 = e.fld;
+	if(v0 > v1)
+		e.rotfield = max(e.rotfield, time + rottime);
+	else if(v0 < v1)
+		e.regenfield = max(e.regenfield, time + regentime);
+	return (v0 != v1);
+}
+
+float GiveItems(entity e, float beginarg, float endarg)
+{
+	float got, i, j, val, op;
+	float _switchweapon;
+	entity wi;
+	string cmd;
+
+	val = 999;
+	op = OP_SET;
+
+	got = 0;
+
+	_switchweapon = FALSE;
+	if (activator.autoswitch)
+		if (activator.switchweapon == w_getbestweapon(activator))
+			_switchweapon = TRUE;
+
+	if(activator.strength_finished <= time)
+		activator.invincible_finished = time;
+	if(activator.invincible_finished <= time)
+		activator.invincible_finished = time;
+
+	for(i = beginarg; i < endarg; ++i)
+	{
+		cmd = argv(i);
+		if(cmd == "0" || stof(cmd))
+		{
+			val = stof(cmd);
+			continue;
+		}
+		switch(cmd)
+		{
+			case "no":
+				op = OP_MAX;
+				val = 0;
+				continue;
+			case "max":
+				op = OP_MAX;
+				continue;
+			case "min":
+				op = OP_MIN;
+				continue;
+			case "plus":
+				op = OP_PLUS;
+				continue;
+			case "minus":
+				op = OP_MINUS;
+				continue;
+			case "unlimited_ammo":
+				got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val, "misc/powerup.wav", "misc/poweroff.wav");
+				break;
+			case "unlimited_weapon_ammo":
+				got += GiveBit(e, items, IT_UNLIMITED_WEAPON_AMMO, op, val, "misc/powerup.wav", "misc/poweroff.wav");
+				break;
+			case "unlimited_superweapons":
+				got += GiveBit(e, items, IT_UNLIMITED_SUPERWEAPONS, op, val, "misc/powerup.wav", "misc/poweroff.wav");
+				break;
+			case "jetpack":
+				got += GiveBit(e, items, IT_JETPACK, op, val, "misc/itempickup.wav", string_null);
+				break;
+			case "fuel_regen":
+				got += GiveBit(e, items, IT_FUEL_REGEN, op, val, "misc/itempickup.wav", string_null);
+				break;
+			case "strength":
+				got += GiveValue(e, strength_finished, op, time + val, "misc/powerup.wav", "misc/poweroff.wav");
+				break;
+			case "invinicible":
+				got += GiveValue(e, invincible_finished, op, time + val, "misc/powerup_shield.wav", "misc/poweroff.wav");
+				break;
+			case "cells":
+				got += GiveValue(e, ammo_cells, op, val, "misc/itempickup.wav", string_null);
+				break;
+			case "shells":
+				got += GiveValue(e, ammo_shells, op, val, "misc/itempickup.wav", string_null);
+				break;
+			case "nails":
+			case "bullets":
+				got += GiveValue(e, ammo_nails, op, val, "misc/itempickup.wav", string_null);
+				break;
+			case "rockets":
+				got += GiveValue(e, ammo_rockets, op, val, "misc/itempickup.wav", string_null);
+				break;
+			case "health":
+				got += GiveValueRot(e, health, pauserothealth_finished, cvar("g_balance_pause_health_rot"), pauseregen_finished, cvar("g_balance_pause_health_regen"), op, val, "misc/megahealth.wav", string_null);
+				break;
+			case "armor":
+				got += GiveValueRot(e, armorvalue, pauserotarmor_finished, cvar("g_balance_pause_armor_rot"), pauseregen_finished, cvar("g_balance_pause_health_regen"), op, val, "misc/armor25.wav", string_null);
+				break;
+			case "fuel":
+				got += GiveValueRot(e, ammo_fuel, pauserotfuel_finished, cvar("g_balance_pause_fuel_rot"), pauseregen_finished, cvar("g_balance_pause_fuel_regen"), op, val, "misc/itempickup.wav", string_null);
+				break;
+			default:
+				for(j = WEP_FIRST; j <= WEP_LAST; ++j)
+				{
+					wi = get_weaponinfo(j);
+					if(cmd == wi.netname)
+					{
+						got += GiveBit(e, weapons, wi.weapons, op, val, "weapons/weaponpickup.wav", "");
+						break;
+					}
+				}
+				if(j > WEP_LAST)
+					print("give: invalid item ", cmd, "\n");
+				break;
+		}
+		val = 999;
+		op = OP_SET;
+	}
+
+	if(activator.strength_finished <= time)
+		activator.invincible_finished = 0;
+	if(activator.invincible_finished <= time)
+		activator.invincible_finished = 0;
+
+	if not(activator.weapons & W_WeaponBit(activator.switchweapon))
+		_switchweapon = TRUE;
+	if(_switchweapon)
+		W_SwitchWeapon_Force(activator, w_getbestweapon(activator));
+
+	return got;
+}



More information about the nexuiz-commits mailing list