2006-01-02 02:45:34 +00:00
|
|
|
void(entity e, string s) clientcommand = #440
|
|
|
|
float(string s) tokenize = #441;
|
|
|
|
string(float n) argv = #442;
|
|
|
|
|
2006-01-09 02:52:18 +00:00
|
|
|
string(string s, float start, float length) substring = #116;
|
|
|
|
float(string str, string sub) strstrofs = #221;
|
|
|
|
|
2009-11-05 04:20:47 +00:00
|
|
|
|
|
|
|
|
2006-01-02 02:45:34 +00:00
|
|
|
float(string desc) itemtoslot =
|
|
|
|
{
|
|
|
|
local float slot;
|
2006-01-09 02:52:18 +00:00
|
|
|
local float coma;
|
|
|
|
|
|
|
|
while((coma = strstrofs(desc, "+")) > 0)
|
|
|
|
{
|
|
|
|
slot = itemtoslot(substring(desc, 0, coma));
|
|
|
|
if (slot)
|
|
|
|
return slot;
|
|
|
|
desc = substring(desc, coma+1, -1);
|
|
|
|
}
|
|
|
|
|
2006-01-02 02:45:34 +00:00
|
|
|
slot = stof(desc);
|
|
|
|
if (slot >= 1 && slot <= MAXSLOTS)
|
|
|
|
return slot;
|
|
|
|
|
2006-01-09 02:52:18 +00:00
|
|
|
if (desc == "current")
|
|
|
|
return self.current_slot;
|
2006-01-06 01:52:52 +00:00
|
|
|
slot = ItemIDOfName(desc);
|
|
|
|
if (!slot)
|
|
|
|
{
|
|
|
|
sprint(self, PRINT_HIGH, "Not an item name\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2006-01-06 17:38:51 +00:00
|
|
|
slot = SlotOfItem(self, slot);
|
|
|
|
if (slot)
|
|
|
|
return slot;
|
2006-01-06 01:52:52 +00:00
|
|
|
return 0;
|
|
|
|
}
|
2006-01-02 02:45:34 +00:00
|
|
|
};
|
|
|
|
|
2009-11-05 03:40:39 +00:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
2006-01-02 02:45:34 +00:00
|
|
|
float(float slotno) DecreaseDestroySlot =
|
|
|
|
{
|
2006-01-04 20:45:08 +00:00
|
|
|
local float it;
|
|
|
|
local float iid;
|
|
|
|
local float num;
|
2006-01-02 02:45:34 +00:00
|
|
|
it = ItemInSlot(self, slotno);
|
|
|
|
if (ToStatus(it) <= 1)
|
|
|
|
{
|
|
|
|
SetItemSlot(self, slotno, 0);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2006-01-04 20:45:08 +00:00
|
|
|
iid = ToIID(it);
|
|
|
|
num = ToStatus(it);
|
|
|
|
num = num - 1;
|
|
|
|
it = SlotVal(iid, num);
|
|
|
|
SetItemSlot(self, slotno, it);
|
2006-01-02 02:45:34 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
void(string arg1) Cmd_InvUse =
|
|
|
|
{
|
|
|
|
local float it, iid;
|
2009-11-05 03:40:39 +00:00
|
|
|
local float slotno, w;
|
2006-01-02 02:45:34 +00:00
|
|
|
slotno = itemtoslot(arg1);
|
|
|
|
if (!slotno)
|
|
|
|
{
|
2009-11-05 03:40:39 +00:00
|
|
|
sprint(self, PRINT_MEDIUM, "can't use - you don't have one\n");
|
2006-01-02 02:45:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
it = ItemInSlot(self, slotno);
|
|
|
|
iid = ToIID(it);
|
2009-11-05 03:40:39 +00:00
|
|
|
w = SlotOfItem(self, iid);
|
2006-01-02 02:45:34 +00:00
|
|
|
|
|
|
|
if (iid == 0)
|
|
|
|
return;
|
|
|
|
|
2009-11-05 03:40:39 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2006-01-02 02:45:34 +00:00
|
|
|
if (WeaponAmmoType(iid))
|
|
|
|
{
|
|
|
|
//weapons are reloaded
|
|
|
|
ReloadWeapon(slotno);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2009-11-05 03:40:39 +00:00
|
|
|
|
|
|
|
if (iid == IID_CHEM_MEDICALBAG)
|
2006-01-02 02:45:34 +00:00
|
|
|
{
|
2009-11-05 03:40:39 +00:00
|
|
|
UseMedicalBag();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (iid == IID_CHEM_STIMPACK)
|
|
|
|
{
|
|
|
|
UseStimpack();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (iid == IID_GREN_FLARE)
|
|
|
|
{
|
|
|
|
ToggleFlare();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (iid == IID_CHEM_SUPERSTIM)
|
|
|
|
{
|
|
|
|
UseSuperStim();
|
2006-01-02 02:45:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (iid == IID_CHEM_ADRENALINE ||
|
|
|
|
iid == IID_CHEM_PSYCHO ||
|
2009-11-05 03:40:39 +00:00
|
|
|
iid == IID_CHEM_RADX ||
|
2006-01-02 02:45:34 +00:00
|
|
|
iid == IID_CHEM_BESERK)
|
|
|
|
{
|
|
|
|
if (UseBoostingChem(iid))
|
|
|
|
DecreaseDestroySlot(slotno);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (iid == IID_BUILD_MRAMMO ||
|
|
|
|
iid == IID_BUILD_SHIELDGEN ||
|
|
|
|
iid == IID_BUILD_AUTODOC ||
|
2006-01-09 02:52:18 +00:00
|
|
|
iid == IID_BUILD_ROBOFANG ||
|
2006-01-15 01:38:45 +00:00
|
|
|
iid == IID_BUILD_TTURRET ||
|
|
|
|
iid == IID_BUILD_RTURRET ||
|
|
|
|
iid == IID_BUILD_GTURRET)
|
2006-01-02 02:45:34 +00:00
|
|
|
{
|
|
|
|
if (spawn_station(iid))
|
|
|
|
DecreaseDestroySlot(slotno);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2006-01-09 02:52:18 +00:00
|
|
|
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;
|
|
|
|
}
|
2006-01-15 01:38:45 +00:00
|
|
|
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)
|
|
|
|
{
|
2009-11-05 03:40:39 +00:00
|
|
|
Sneak();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (iid == IID_EQUIP_SILENCER)
|
|
|
|
{
|
|
|
|
AttachSilencer();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (iid == IID_WP_WRENCH)
|
|
|
|
{
|
|
|
|
FireToolkit();
|
2006-01-15 01:38:45 +00:00
|
|
|
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;
|
|
|
|
}
|
2006-01-09 02:52:18 +00:00
|
|
|
|
2006-01-02 02:45:34 +00:00
|
|
|
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)
|
|
|
|
{
|
2006-01-09 02:52:18 +00:00
|
|
|
sprint(self, PRINT_MEDIUM, "Can't drop - you don't have one\n");
|
2006-01-02 02:45:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
it = ItemInSlot(self, slotno);
|
|
|
|
iid = ToIID(it);
|
|
|
|
|
|
|
|
if (iid == 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
DropFromSlot(slotno, true, false);
|
|
|
|
};
|
|
|
|
|
2009-11-05 03:40:39 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2006-01-02 02:45:34 +00:00
|
|
|
void(string arg1, string arg2) Cmd_InvSwap =
|
|
|
|
{
|
|
|
|
local float old1, old2;
|
|
|
|
local float slotno1;
|
|
|
|
local float slotno2;
|
|
|
|
slotno1 = itemtoslot(arg1);
|
|
|
|
if (!slotno1)
|
|
|
|
{
|
2006-01-09 02:52:18 +00:00
|
|
|
sprint(self, PRINT_HIGH, "No item\n");
|
2006-01-02 02:45:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
slotno2 = itemtoslot(arg2);
|
|
|
|
if (!slotno2)
|
|
|
|
{
|
2006-01-09 02:52:18 +00:00
|
|
|
sprint(self, PRINT_HIGH, "No item\n");
|
2006-01-02 02:45:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
old1 = ItemInSlot(self, slotno1);
|
|
|
|
old2 = ItemInSlot(self, slotno2);
|
2006-01-09 02:52:18 +00:00
|
|
|
if (old1 == old2)
|
|
|
|
return;
|
|
|
|
|
2006-01-04 20:45:08 +00:00
|
|
|
if (!FitsInSlot(slotno1, ToIID(old2)))
|
2006-01-02 02:45:34 +00:00
|
|
|
{
|
|
|
|
sprint(self, PRINT_HIGH, "Not allowed to exchange items\n");
|
|
|
|
return;
|
|
|
|
}
|
2006-01-04 20:45:08 +00:00
|
|
|
if (!FitsInSlot(slotno2, ToIID(old1)))
|
2006-01-02 02:45:34 +00:00
|
|
|
{
|
|
|
|
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();
|
2006-01-09 02:52:18 +00:00
|
|
|
|
2006-01-15 01:38:45 +00:00
|
|
|
//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;
|
|
|
|
|
2006-01-09 02:52:18 +00:00
|
|
|
self.rtime = time + 2; //we don't check this here though - cost to get into inventory.
|
2006-01-02 02:45:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
void(string arg1, float iid, float num) Cmd_InvGive =
|
|
|
|
{
|
|
|
|
local float slotno;
|
|
|
|
slotno = itemtoslot(arg1);
|
|
|
|
if (!slotno)
|
|
|
|
{
|
2006-01-09 02:52:18 +00:00
|
|
|
sprint(self, PRINT_MEDIUM, "Can't give to that slot\n");
|
2006-01-02 02:45:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2006-01-15 01:38:45 +00:00
|
|
|
if (!FitsInSlot(slotno, iid))
|
|
|
|
{
|
|
|
|
sprint(self, PRINT_MEDIUM, "Can't give that item in that slot\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2006-01-02 02:45:34 +00:00
|
|
|
if (num <= 0)
|
|
|
|
num = 1;
|
|
|
|
SetItemSlot(self, slotno, SlotVal(iid, num));
|
2006-01-02 22:04:05 +00:00
|
|
|
|
|
|
|
if (slotno == self.current_slot)
|
|
|
|
W_SetCurrentAmmo();
|
2006-01-02 02:45:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
void(string line) SV_ParseClientCommand =
|
|
|
|
{
|
|
|
|
local string cmd;
|
|
|
|
tokenize(line);
|
|
|
|
|
|
|
|
cmd = argv(0);
|
2006-01-09 02:52:18 +00:00
|
|
|
if (cmd == "invuse")
|
2006-01-02 02:45:34 +00:00
|
|
|
{
|
2006-01-15 22:36:09 +00:00
|
|
|
if (self.deadflag || self.current_slot==0)
|
2006-01-09 02:52:18 +00:00
|
|
|
return;
|
2006-01-02 02:45:34 +00:00
|
|
|
Cmd_InvUse(argv(1));
|
|
|
|
}
|
|
|
|
else if (cmd == "invdrop")
|
|
|
|
{
|
2006-01-15 22:36:09 +00:00
|
|
|
if (self.deadflag || self.current_slot==0)
|
2006-01-09 02:52:18 +00:00
|
|
|
return;
|
2006-01-02 02:45:34 +00:00
|
|
|
Cmd_InvDrop(argv(1));
|
|
|
|
}
|
2009-11-05 03:40:39 +00:00
|
|
|
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));
|
|
|
|
}
|
2006-01-02 02:45:34 +00:00
|
|
|
else if (cmd == "invswap")
|
|
|
|
{
|
2006-01-15 22:36:09 +00:00
|
|
|
if (self.deadflag || self.current_slot==0)
|
2006-01-09 02:52:18 +00:00
|
|
|
return;
|
2006-01-02 02:45:34 +00:00
|
|
|
Cmd_InvSwap(argv(1), argv(2));
|
|
|
|
}
|
|
|
|
else if (cmd == "invgive")
|
|
|
|
{
|
2006-01-15 22:36:09 +00:00
|
|
|
if (self.deadflag || self.current_slot==0)
|
2006-01-09 02:52:18 +00:00
|
|
|
return;
|
2006-01-02 02:45:34 +00:00
|
|
|
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);
|
|
|
|
};
|