void(entity e, string s) clientcommand = #440
float(string s) tokenize = #441;
string(float n) argv = #442;

string(string s, float start, float length) substring = #116;
float(string str, string sub) strstrofs = #221;

float(string desc) itemtoslot =
{
	local float slot;
	local float coma;

	while((coma = strstrofs(desc, "+")) > 0)
	{
		slot = itemtoslot(substring(desc, 0, coma));
		if (slot)
			return slot;
		desc = substring(desc, coma+1, -1);
	}

	slot = stof(desc);
	if (slot >= 1 && slot <= MAXSLOTS)
		return slot;

	if (desc == "current")
		return self.current_slot;
	slot = ItemIDOfName(desc);
	if (!slot)
	{
		sprint(self, PRINT_HIGH, "Not an item name\n");
		return 0;
	}
	else
	{
		slot = SlotOfItem(self, slot);
		if (slot)
			return slot;
		return 0;
	}
};

float(entity x, float slotno) DecreaseDestroySlotOther =
{
	local float it;
	local float iid;
	local float num;
	local entity oself;

	oself = self;
	self = x;

	it = ItemInSlot(self, slotno);
	if (ToStatus(it) <= 1)
	{
		SetItemSlot(self, slotno, 0);
		return true;
	}
	else
	{
		iid = ToIID(it);
		num = ToStatus(it);
		num = num - 1;
		it = SlotVal(iid, num);
		SetItemSlot(self, slotno, it);
		return false;
	}

	self = oself;
};

float(float slotno) DecreaseDestroySlot =
{
	local float it;
	local float iid;
	local float num;
	it = ItemInSlot(self, slotno);
	if (ToStatus(it) <= 1)
	{
		SetItemSlot(self, slotno, 0);
		return true;
	}
	else
	{
		iid = ToIID(it);
		num = ToStatus(it);
		num = num - 1;
		it = SlotVal(iid, num);
		SetItemSlot(self, slotno, it);
		return false;
	}
};

void(string arg1) Cmd_InvUse =
{
	local float it, iid;
	local float slotno, w;
	slotno = itemtoslot(arg1);
	if (!slotno)
	{
		sprint(self, PRINT_MEDIUM, "can't use - you don't have one\n");
		return;
	}


	it = ItemInSlot(self, slotno);
	iid = ToIID(it);
	w = SlotOfItem(self, iid);

	if (iid == 0)
		return;

	if (iid >= IID_GREN_FRAG && iid <= IID_GREN_STUN)
	{
		if (w != 5 && w != 6)
			return;

		self.rtime = time + 1;
		self.grenslot = w;
		player_pull1();
		return;
	}

	if (WeaponAmmoType(iid))
	{
		//weapons are reloaded
		ReloadWeapon(slotno);
		return;
	}


	if (iid == IID_CHEM_MEDICALBAG)
	{
		UseMedicalBag();
		return;
	}

	if (iid == IID_CHEM_STIMPACK)
	{
		UseStimpack();
		return;
	}

	if (iid == IID_GREN_FLARE)
	{
		ToggleFlare();
		return;
	}

	if (iid == IID_CHEM_SUPERSTIM)
	{
		UseSuperStim();
		return;
	}

	if (iid == IID_CHEM_ADRENALINE ||
	    iid == IID_CHEM_PSYCHO ||
	    iid == IID_CHEM_RADX ||
	    iid == IID_CHEM_BESERK)
	{
		if (UseBoostingChem(iid))
			DecreaseDestroySlot(slotno);
		return;
	}

	if (iid == IID_BUILD_MRAMMO ||
	    iid == IID_BUILD_SHIELDGEN ||
	    iid == IID_BUILD_AUTODOC ||
	    iid == IID_BUILD_ROBOFANG ||
	    iid == IID_BUILD_TTURRET || 
	    iid == IID_BUILD_RTURRET ||
	    iid == IID_BUILD_GTURRET)
	{
		if (spawn_station(iid))
			DecreaseDestroySlot(slotno);
		return;
	}

	if (iid == IID_EQUIP_CLIMBINGGEAR)
	{
		if (self.equipment_slot == slotno)
		{
			self.equipment_slot = 0;
			sprint(self, PRINT_HIGH, "Climbing gear deactivated\n");
		}
		else
		{
			self.equipment_slot = slotno;
			sprint(self, PRINT_HIGH, "Climbing gear activated\n");
		}
		return;
	}
	if (iid == IID_EQUIP_SPRINTKIT)
	{
		if (self.equipment_slot == slotno)
		{
			self.equipment_slot = 0;
			sprint(self, PRINT_HIGH, "What a downer\n");
		}
		else
		{
			self.equipment_slot = slotno;
			sprint(self, PRINT_HIGH, "SUGAR RUSH!!!\n");
		}
		return;
	}
	if (iid == IID_EQUIP_STEALTHBOY)
	{
		Sneak();
		return;
	}
	if (iid == IID_EQUIP_SILENCER)
	{
		AttachSilencer();
		return;
	}
	if (iid == IID_WP_WRENCH)
	{
		FireToolkit();
		return;
	}
	if (iid == IID_EQUIP_HOVERBOOTS)
	{
		if (self.equipment_slot == slotno)
		{
			self.equipment_slot = 0;
			sprint(self, PRINT_HIGH, "Hoverboots deactivated\n");
		}
		else
		{
			self.equipment_slot = slotno;
			sprint(self, PRINT_HIGH, "Hoverboots activated\n");
		}
		return;
	}

	sprint(self, PRINT_HIGH, "Don't know how to 'use' item\n");
};

void(string arg1) Cmd_InvDrop =
{
	local float it, iid;
	local float slotno;
	slotno = itemtoslot(arg1);
	if (!slotno)
	{
		sprint(self, PRINT_MEDIUM, "Can't drop - you don't have one\n");
		return;
	}


	it = ItemInSlot(self, slotno);
	iid = ToIID(it);

	if (iid == 0)
		return;

	DropFromSlot(slotno, true, false);
};

void(string arg1) Cmd_InvSell =
{
	local float it, iid, x;
	local float slotno;
	local string y, z;

	slotno = itemtoslot(arg1);
	if (!slotno)
	{
		sprint(self, 2, "can't sell - you don't have one\n");
		return;
	}

	if (slotno <= 4)
	{
		sprint(self, 2, "put it in your inventory first!\n");
		return;
	}

	it = ItemInSlot(self, slotno);
	iid = ToIID(it);

	if (iid == 0)
		return;

	self.missionbrief = 0;

	SetItemSlot(self, slotno, 0);
	x = GetBaseValue(iid);
	y = ftos(x);
	z = GetItemName(iid);

	self.ammo_shells += x;
	sprint(self, 2, "you sell ");
	sprint(self, 2, z);
	sprint(self, 2, " for $");
	sprint(self, 2, y);
	sprint(self, 2, ".\n");

};

void(string arg1) Cmd_InvMix =
{
	local float it, iid;
	local float slotno, x;
	slotno = itemtoslot(arg1);

	if (!slotno)
	{
		sprint(self, PRINT_MEDIUM, "Can't drop - you don't have one\n");
		return;
	}


	it = ItemInSlot(self, slotno);
	iid = ToIID(it);


	if (iid == 0)
		return;

	if (iid == IID_MISC_NUKACOLA)
	{
		x = SlotOfItem(self, IID_MISC_CHEMICALS);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need (1) nukacola and (1) chemicals\n");
			return;
		}
		DecreaseDestroySlot(slotno);
		DecreaseDestroySlot(x);

		TryGiveStackable(self, IID_CHEM_STIMPACK, 1);
		sprint(self, PRINT_MEDIUM, "stimpack created\n");
	}
	if (iid == IID_MISC_AEROSOL)
	{
		x = SlotOfItem(self, IID_MISC_CHEMICALS);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need (1) aerosol can and (1) chemicals\n");
			return;
		}
		DecreaseDestroySlot(slotno);
		DecreaseDestroySlot(x);

		TryGiveStackable(self, IID_CHEM_RADX, 3);
		sprint(self, PRINT_MEDIUM, "rad-x created\n");
	}
	if (iid == IID_MISC_RDXCRYSTAL)
	{
		x = SlotOfItem(self, IID_MISC_CHEMICALS);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need (1) rdx crystal and (1) chemicals\n");
			return;
		}
		DecreaseDestroySlot(slotno);
		DecreaseDestroySlot(x);

		TryGiveStackable(self, IID_CHEM_PSYCHO, 2);
		sprint(self, PRINT_MEDIUM, "psycho created\n");
	}
	if (iid == IID_CHEM_STIMPACK)
	{
		if (ToStatus(slotno) <= 1)
		{
			sprint(self, PRINT_MEDIUM, "you need (2) stimpacks and (1) chemicals\n");
			return;
		}
		x = SlotOfItem(self, IID_MISC_CHEMICALS);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need (2) stimpacks and (1) chemicals\n");
			return;
		}
		DecreaseDestroySlot(slotno);
		DecreaseDestroySlot(slotno);
		DecreaseDestroySlot(x);

		TryGiveStackable(self, IID_CHEM_SUPERSTIM, 1);
		sprint(self, PRINT_MEDIUM, "superstim created.\n");
	}



};

void(string arg1) Cmd_InvCreate =
{
	local float it, iid;
	local float slotno, q, w, x, y, z;
	local float weap;

	if (arg1 == "flash")
	{

		x = SlotOfItem(self, IID_MISC_NUKACOLA);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need nukacola + chemicals + aerosol can\n");
			return;
		}

		y = SlotOfItem(self, IID_MISC_CHEMICALS);
		if (y == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need nukacola + chemicals + aerosol can\n");
			return;
		}

		z = SlotOfItem(self, IID_MISC_AEROSOL);
		if (z == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need nukacola + chemicals + aerosol can\n");
			return;
		}

		DecreaseDestroySlot(x);
		DecreaseDestroySlot(y);
		DecreaseDestroySlot(z);

		if ((random()<0.50) && (self.class == 1))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a flash bomb.\n");
			return;
		}
		if ((random()<0.25) && (self.class == 2))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a flash bomb.\n");
			return;
		}
		if ((random()<0.75) && (self.class == 3))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a flash bomb.\n");
			return;
		}

		TryGiveStackable(self, IID_GREN_FLASH, 1);
		sprint(self, PRINT_MEDIUM, "flash bomb created.\n");
	}
	if (arg1 == "grenade")
	{
		x = SlotOfItem(self, IID_MISC_RDXCRYSTAL);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need rdx crystals, chemicals, aerosol can\n");
			return;
		}

		y = SlotOfItem(self, IID_MISC_CHEMICALS);
		if (y == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need rdx crystals, chemicals, aerosol can\n");
			return;
		}

		z = SlotOfItem(self, IID_MISC_AEROSOL);
		if (z == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need rdx crystals, chemicals, aerosol can\n");
			return;
		}

		DecreaseDestroySlot(x);
		DecreaseDestroySlot(y);
		DecreaseDestroySlot(z);

		if ((random()<0.75) && (self.class == 1))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a grenade.\n");
			return;
		}
		if ((random()<0.75) && (self.class == 2))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a grenade.\n");
			return;
		}
		if ((random()<0.75) && (self.class == 3))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a grenade.\n");
			return;
		}

		TryGiveStackable(self, IID_GREN_FRAG, 1);
		sprint(self, PRINT_MEDIUM, "homemade bomb created.\n");
	}
	if (arg1 == "silencer")
	{
		x = SlotOfItem(self, IID_MISC_DUCKTAPE);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need junk + aerosol can + duck tape\n");
			return;
		}
		y = SlotOfItem(self, IID_MISC_JUNK);
		if (y == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need junk + aerosol can + duck tape\n");
			return;
		}
		z = SlotOfItem(self, IID_MISC_AEROSOL);
		if (z == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need junk + aerosol can + duck tape\n");
			return;
		}

		DecreaseDestroySlot(x);
		DecreaseDestroySlot(y);
		DecreaseDestroySlot(z);

		if ((random()<0.25) && (self.class == 1))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a silencer.\n");
			return;
		}
		if ((random()<0.10) && (self.class == 2))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a silencer.\n");
			return;
		}
		if ((random()<0.50) && (self.class == 3))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a silencer.\n");
			return;
		}
		AddNonStackable(self, IID_EQUIP_SILENCER, 1);
		sprint(self, PRINT_MEDIUM, "silencer created.\n");
	}
	if (arg1 == "stun")
	{
		x = SlotOfItem(self, IID_MISC_NUKACOLA);
		if (x == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need nukacola + chemicals\n");
			return;
		}

		y = SlotOfItem(self, IID_MISC_CHEMICALS);
		if (y == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need nukacola + chemicals\n");
			return;
		}
		DecreaseDestroySlot(x);
		DecreaseDestroySlot(y);

		if ((random()<0.40) && (self.class < 4))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create a stun grenade.\n");
			return;
		}

		TryGiveStackable(self, IID_GREN_STUN, 1);
		sprint(self, PRINT_MEDIUM, "stun grenade created.\n");
	}
	if (arg1 == "extender")
	{
		y = SlotOfItem(self, IID_MISC_STEELPIPE);
		if (y == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need steel pipe + duck tape\n");
			return;
		}

		z = SlotOfItem(self, IID_MISC_DUCKTAPE);
		if (z == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need junk, aerosol can\n");
			return;
		}

		DecreaseDestroySlot(y);
		DecreaseDestroySlot(z);

		AddNonStackable(self, IID_EQUIP_EXTENDER, 1);
		sprint(self, PRINT_MEDIUM, "barrel extender created.\n");
	}
	if (arg1 == "xray")
	{
		y = SlotOfItem(self, IID_MISC_LCD);
		if (y == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
			return;
		}
		y = SlotOfItem(self, IID_MISC_CIRCUITBOARD);
		if (y == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
			return;
		}

		z = SlotOfItem(self, IID_MISC_GUM);
		if (z == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
			return;
		}
		q = SlotOfItem(self, IID_MISC_XRAYTUBE);
		if (q == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
			return;
		}
		w = SlotOfItem(self, IID_MISC_COPPERWIRE);
		if (w == 0)
		{
			sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
			return;
		}

		DecreaseDestroySlot(q);
		DecreaseDestroySlot(w);
		DecreaseDestroySlot(x);
		DecreaseDestroySlot(y);
		DecreaseDestroySlot(z);

		if ((random()<0.90) && (self.class < 4))
		{
			sprint(self, PRINT_MEDIUM, "you failed to create an x-ray device.\n");
			return;
		}

		AddNonStackable(self, IID_EQUIP_XRAY, 1);
		sprint(self, PRINT_MEDIUM, "x-ray device created!\n");
	}
	if (arg1 == "modify")
	{
			weap = ToIID(self.(SlotField(self.current_slot)));

		if (weap == IID_WP_PULSERIFLE)
		{
			y = SlotOfItem(self, IID_MISC_DUCKTAPE);
			if (y == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			x = SlotOfItem(self, IID_MISC_CIRCUITBOARD);
			if (x == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			z = SlotOfItem(self, IID_MISC_NUKACOLA);
			if (z == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			q = SlotOfItem(self, IID_MISC_XRAYTUBE);
			if (q == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			w = SlotOfItem(self, IID_MISC_COPPERWIRE);
			if (w == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}

			DecreaseDestroySlot(q);
			DecreaseDestroySlot(w);
			DecreaseDestroySlot(x);
			DecreaseDestroySlot(y);
			DecreaseDestroySlot(z);

			if (ToIID(self.islot1) == IID_WP_PULSERIFLE)
				SetItemSlot(self, 1, SlotVal(IID_WP_TURBOPLASMA, 40));
			else if (ToIID(self.islot2) == IID_WP_PULSERIFLE)
				SetItemSlot(self, 2, SlotVal(IID_WP_TURBOPLASMA, 40));


			if ((random()<0.25))
			{
				sprint(self, PRINT_MEDIUM, "you try to modify your plasma rifle by hotwiring\n");
				sprint(self, PRINT_MEDIUM, "the bolt carrier and venting off excess gasses  \n");
				sprint(self, PRINT_MEDIUM, "but you end up destroying it...\n");
				return;
			}
			AddNonStackable(self, IID_WP_TURBOPLASMA, 1);
			sprint(self, PRINT_MEDIUM, "turbo plasma rifle created\n");
		}
		if (weap == IID_WP_AK112)
		{
			y = SlotOfItem(self, IID_MISC_DUCKTAPE);
			if (y == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			x = SlotOfItem(self, IID_MISC_JUNK);
			if (x == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			z = SlotOfItem(self, IID_MISC_AEROSOL);
			if (z == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			w = SlotOfItem(self, IID_MISC_COPPERWIRE);
			if (w == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}

			DecreaseDestroySlot(y);
			DecreaseDestroySlot(w);
			DecreaseDestroySlot(x);
			DecreaseDestroySlot(z);

			if (ToIID(self.islot1) == IID_WP_AK112)
				SetItemSlot(self, 1, SlotVal(IID_WP_AK112_M, 50));
			else if (ToIID(self.islot2) == IID_WP_AK112)
				SetItemSlot(self, 2, SlotVal(IID_WP_AK112_M, 50));

			sprint(self, PRINT_MEDIUM, "created expanded magazine for ak-112\n");
		}
		if (weap == IID_WP_DEAGLE)
		{
			y = SlotOfItem(self, IID_MISC_DUCKTAPE);
			if (y == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			x = SlotOfItem(self, IID_MISC_JUNK);
			if (x == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			z = SlotOfItem(self, IID_MISC_AEROSOL);
			if (z == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}
			w = SlotOfItem(self, IID_MISC_COPPERWIRE);
			if (w == 0)
			{
				sprint(self, PRINT_MEDIUM, "you need the proper ingredients...\n");
				return;
			}

			DecreaseDestroySlot(y);
			DecreaseDestroySlot(w);
			DecreaseDestroySlot(x);
			DecreaseDestroySlot(z);

			if (ToIID(self.islot1) == IID_WP_DEAGLE)
				SetItemSlot(self, 1, SlotVal(IID_WP_DEAGLE_M, 10));
			else if (ToIID(self.islot2) == IID_WP_DEAGLE)
				SetItemSlot(self, 2, SlotVal(IID_WP_DEAGLE_M, 10));

			sprint(self, PRINT_MEDIUM, "created expanded magazine for deagle\n");
		}
		else
		{
			sprint(self, PRINT_MEDIUM, "can't modify currently held weapon.\n");
			return;
		}
	}
};

void(string arg1, string arg2) Cmd_InvSwap =
{
	local float old1, old2;
	local float slotno1;
	local float slotno2;
	slotno1 = itemtoslot(arg1);
	if (!slotno1)
	{
		sprint(self, PRINT_HIGH, "No item\n");
		return;
	}
	slotno2 = itemtoslot(arg2);
	if (!slotno2)
	{
		sprint(self, PRINT_HIGH, "No item\n");
		return;
	}

	old1 = ItemInSlot(self, slotno1);
	old2 = ItemInSlot(self, slotno2);
	if (old1 == old2)
		return;

	if (!FitsInSlot(slotno1, ToIID(old2)))
	{
		sprint(self, PRINT_HIGH, "Not allowed to exchange items\n");
		return;
	}
	if (!FitsInSlot(slotno2, ToIID(old1)))
	{
		sprint(self, PRINT_HIGH, "Not allowed to exchange items\n");
		return;
	}
	SetItemSlot(self, slotno1, old2);
	SetItemSlot(self, slotno2, old1);

	if (slotno1 == self.current_slot || slotno2 == self.current_slot)
		W_SetCurrentAmmo();

//swap the equipment_slot over too.
	if (self.equipment_slot == slotno1)
		self.equipment_slot = slotno2;
	else if (self.equipment_slot == slotno2)
		self.equipment_slot = slotno1;

	self.rtime = time + 2;	//we don't check this here though - cost to get into inventory.
};

void(string arg1, float iid, float num) Cmd_InvGive =
{
	local float slotno;
	slotno = itemtoslot(arg1);
	if (!slotno)
	{
		sprint(self, PRINT_MEDIUM, "Can't give to that slot\n");
		return;
	}

	if (!FitsInSlot(slotno, iid))
	{
		sprint(self, PRINT_MEDIUM, "Can't give that item in that slot\n");
		return;
	}

	if (num <= 0)
		num = 1;
	SetItemSlot(self, slotno, SlotVal(iid, num));

	if (slotno == self.current_slot)
		W_SetCurrentAmmo();
};

void(string line) SV_ParseClientCommand =
{
	local string cmd;
	tokenize(line);

	cmd = argv(0);
	if (cmd == "invuse")
	{
		if (self.deadflag || self.current_slot==0)
			return;
		Cmd_InvUse(argv(1));
	}
	else if (cmd == "invdrop")
	{
		if (self.deadflag || self.current_slot==0)
			return;
		Cmd_InvDrop(argv(1));
	}
	else if (cmd == "invsell")
	{
		if (self.deadflag || self.current_slot==0)
			return;
		Cmd_InvSell(argv(1));
	}
	else if (cmd == "invmix")
	{
		if (self.deadflag)
			return;
		Cmd_InvMix(argv(1));
	}
	else if (cmd == "create")
	{
		if (self.deadflag)
			return;
		Cmd_InvCreate(argv(1));
	}
	else if (cmd == "invswap")
	{
		if (self.deadflag || self.current_slot==0)
			return;
		Cmd_InvSwap(argv(1), argv(2));
	}
	else if (cmd == "invgive")
	{
		if (self.deadflag || self.current_slot==0)
			return;
		Cmd_InvGive(argv(1), stof(argv(2)), stof(argv(3)));
	}
	else if (cmd == "god")
	{
		sprint(self, PRINT_HIGH, "sorry, but I'm an athiest\n");
	}
	else
		clientcommand(self, line);
};