h1-mod/data/cdata/scripts/mp_patches/custom_weapons.gsc
2023-01-29 00:59:05 +01:00

384 lines
8.7 KiB
Plaintext

main()
{
replacefunc(maps\mp\gametypes\_class::isvalidprimary, ::isvalidprimary);
replacefunc(maps\mp\gametypes\_class::isvalidsecondary, ::isvalidsecondary);
replacefunc(maps\mp\gametypes\_class::isvalidweapon, ::isvalidweapon);
replacefunc(maps\mp\gametypes\_class::buildweaponname, ::buildweaponname);
replacefunc(maps\mp\gametypes\_weapons::watchweaponchange, ::watchweaponchange);
}
find_in_table(csv, weap)
{
rows = tablegetrowcount(csv);
for (i = 0; i < rows; i++)
{
if (tablelookupbyrow(csv, i, 0) == weap)
{
return true;
}
}
return false;
}
get_attachment_override(weapon, attachment)
{
csv = "mp/attachoverrides.csv";
rows = tablegetrowcount(csv);
if (!issubstr(weapon, "_mp"))
{
weapon += "_mp";
}
for (i = 0; i < rows; i++)
{
if (tablelookupbyrow(csv, i, 0) == weapon && tablelookupbyrow(csv, i, 1) == attachment)
{
return tablelookupbyrow(csv, i, 2);
}
}
}
get_attachment_name(weapon, attachment)
{
name = tablelookup("mp/attachkits.csv", 1, attachment, 2);
override = get_attachment_override(weapon, name);
if (isdefined(override) && override != "")
{
return override;
}
return name;
}
is_custom_weapon(weap)
{
return find_in_table("mp/customweapons.csv", weap);
}
watchweaponchange()
{
self endon("death");
self endon("disconnect");
self endon("faux_spawn");
thread maps\mp\gametypes\_weapons::watchstartweaponchange();
self.lastdroppableweapon = self.currentweaponatspawn;
self.hitsthismag = [];
var_0 = self getcurrentweapon();
if (maps\mp\_utility::iscacprimaryweapon(var_0) && !isdefined(self.hitsthismag[var_0]))
{
self.hitsthismag[var_0] = weaponclipsize(var_0);
}
self.bothbarrels = undefined;
if (issubstr(var_0, "ranger"))
{
thread maps\mp\gametypes\_weapons::watchrangerusage(var_0);
}
var_1 = 1;
for (;;)
{
if (!var_1)
{
self waittill("weapon_change");
}
var_1 = 0;
var_0 = self getcurrentweapon();
if (var_0 == "none")
{
continue;
}
var_2 = getweaponattachments(var_0);
self.has_opticsthermal = 0;
self.has_target_enhancer = 0;
self.has_stock = 0;
self.has_laser = 0;
if (isdefined(var_2))
{
foreach (var_4 in var_2)
{
if (var_4 == "opticstargetenhancer")
{
self.has_target_enhancer = 1;
continue;
}
if (var_4 == "stock")
{
self.has_stock = 1;
continue;
}
if (var_4 == "lasersight")
{
self.has_laser = 1;
continue;
}
if (issubstr(var_4, "opticsthermal"))
{
self.has_opticsthermal = 1;
}
}
}
if (maps\mp\_utility::isbombsiteweapon(var_0))
{
continue;
}
var_6 = maps\mp\_utility::getweaponnametokens(var_0);
self.bothbarrels = undefined;
if (issubstr(var_0, "ranger"))
{
thread maps\mp\gametypes\_weapons::watchrangerusage(var_0);
}
if (var_6[0] == "alt")
{
var_7 = getsubstr(var_0, 4);
var_0 = var_7;
var_6 = maps\mp\_utility::getweaponnametokens(var_0);
}
if (var_0 != "none" && var_6[0] != "iw5" && var_6[0] != "iw6" && var_6[0] != "h1" && var_6[0] != "h2")
{
if (maps\mp\_utility::iscacprimaryweapon(var_0) && !isdefined(self.hitsthismag[var_0 + "_mp"]))
{
self.hitsthismag[var_0 + "_mp"] = weaponclipsize(var_0 + "_mp");
}
}
else if (var_0 != "none" && (var_6[0] == "iw5" || var_6[0] == "iw6" || var_6[0] == "h1" || var_6[0] == "h2"))
{
if (maps\mp\_utility::iscacprimaryweapon(var_0) && !isdefined(self.hitsthismag[var_0]))
{
self.hitsthismag[var_0] = weaponclipsize(var_0);
}
}
if (maps\mp\gametypes\_weapons::maydropweapon(var_0))
{
self.lastdroppableweapon = var_0;
}
self.changingweapon = undefined;
}
}
buildweaponname(var_0, var_1, var_2, var_3, var_4, var_5)
{
if (!isdefined(var_0) || var_0 == "none" || var_0 == "")
{
return var_0;
}
if (!isdefined(level.lettertonumber))
{
level.lettertonumber = maps\mp\gametypes\_class::makeletterstonumbers();
}
var_6 = "";
if (issubstr(var_0, "iw5_") || issubstr(var_0, "h1_") || issubstr(var_0, "h2_"))
{
var_7 = var_0 + "_mp";
var_8 = var_0.size;
if (issubstr(var_0, "h1_") || issubstr(var_0, "h2_"))
{
var_6 = getsubstr(var_0, 3, var_8);
}
else
{
var_6 = getsubstr(var_0, 4, var_8);
}
}
else
{
var_7 = var_0;
var_6 = var_0;
}
if (var_7 == "h1_junsho_mp")
{
var_1 = "akimbohidden";
}
var_9 = isdefined(var_1) && var_1 != "none";
var_10 = isdefined(var_2) && var_2 != "none";
if (!var_10)
{
var_11 = tablelookuprownum("mp/furniturekits/base.csv", 0, var_7);
if (var_11 >= 0)
{
var_2 = "base";
var_10 = 1;
}
}
if (!issubstr(var_0, "h1_"))
{
if (var_9)
{
name = get_attachment_name(var_0, var_1);
if (isdefined(name) && name != "")
{
var_7 += "_" + name;
}
}
}
else if (var_9 || var_10)
{
if (!var_9)
var_1 = "none";
if (!var_10)
var_2 = "base";
var_7 += ("_a#" + var_1);
var_7 += ("_f#" + var_2);
}
if (issubstr(var_7, "iw5_") || issubstr(var_7, "h1_") || issubstr(var_7, "h2_"))
{
var_7 = maps\mp\gametypes\_class::buildweaponnamereticle(var_7, var_4);
var_7 = maps\mp\gametypes\_class::buildweaponnameemblem(var_7, var_5);
var_7 = maps\mp\gametypes\_class::buildweaponnamecamo(var_7, var_3);
return var_7;
}
else if (!isvalidweapon(var_7 + "_mp"))
{
return var_0 + "_mp";
}
else
{
var_7 = maps\mp\gametypes\_class::buildweaponnamereticle(var_7, var_4);
var_7 = maps\mp\gametypes\_class::buildweaponnameemblem(var_7, var_5);
var_7 = maps\mp\gametypes\_class::buildweaponnamecamo(var_7, var_3);
return var_7 + "_mp";
}
}
isvalidweapon(var_0, var_1)
{
if (!isdefined(level.weaponrefs))
{
level.weaponrefs = [];
foreach (var_3 in level.weaponlist)
{
level.weaponrefs[var_3] = 1;
}
}
if (isdefined(level.weaponrefs[var_0]))
{
return 1;
}
return 0;
}
isvalidsecondary(var_0, var_1)
{
if (maps\mp\_utility::is_true(var_1))
{
return isvalidprimary(var_0);
}
if (maps\mp\_utility::islootweapon(var_0))
{
var_0 = maps\mp\gametypes\_class::getbasefromlootversion(var_0);
}
if (is_custom_weapon(var_0))
{
return true;
}
switch (var_0)
{
case "none":
case "h1_beretta":
case "h1_colt45":
case "h1_deserteagle":
case "h1_deserteagle55":
case "h1_usp":
case "h1_janpst":
case "h1_aprpst":
case "h1_augpst":
case "h1_rpg":
return 1;
default:
return 0;
}
return 0;
}
isvalidprimary(var_0, var_1)
{
if (is_custom_weapon(var_0))
{
return true;
}
switch (var_0)
{
case "h1_ak47":
case "h1_g3":
case "h1_g36c":
case "h1_m14":
case "h1_m16":
case "h1_m4":
case "h1_mp44":
case "h1_xmlar":
case "h1_aprast":
case "h1_augast":
case "h1_ak74u":
case "h1_mp5":
case "h1_p90":
case "h1_skorpion":
case "h1_uzi":
case "h1_febsmg":
case "h1_aprsmg":
case "h1_augsmg":
case "h1_m1014":
case "h1_winchester1200":
case "h1_kam12":
case "h1_junsho":
case "h1_m60e4":
case "h1_rpd":
case "h1_saw":
case "h1_feblmg":
case "h1_junlmg":
case "h1_barrett":
case "h1_dragunov":
case "h1_m21":
case "h1_m40a3":
case "h1_remington700":
case "h1_febsnp":
case "h1_junsnp":
return 1;
default:
return 0;
}
return 0;
}