1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -05:00
BO2-Reimagined/scripts/zm/replaced/_zm_equipment.gsc
2023-12-16 21:11:47 -08:00

157 lines
3.9 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
show_equipment_hint(equipment)
{
if (is_true(self.do_not_display_equipment_pickup_hint))
{
return;
}
self notify("kill_previous_show_equipment_hint_thread");
self endon("kill_previous_show_equipment_hint_thread");
self endon("death");
self endon("disconnect");
wait 0.5;
text = maps\mp\zombies\_zm_equipment::get_equipment_howto_hint(equipment);
self maps\mp\zombies\_zm_equipment::show_equipment_hint_text(text);
}
placed_equipment_think(model, equipname, origin, angles, tradius, toffset)
{
pickupmodel = spawn("script_model", origin);
if (isDefined(angles))
{
pickupmodel.angles = angles;
}
pickupmodel setmodel(model);
if (isDefined(level.equipment_safe_to_drop))
{
if (!(self [[level.equipment_safe_to_drop]](pickupmodel)))
{
maps\mp\zombies\_zm_equipment::equipment_disappear_fx(pickupmodel.origin, undefined, pickupmodel.angles);
pickupmodel delete();
self maps\mp\zombies\_zm_equipment::equipment_take(equipname);
return undefined;
}
}
watchername = getsubstr(equipname, 0, equipname.size - 3);
if (isDefined(level.retrievehints[watchername]))
{
hint = level.retrievehints[watchername].hint;
}
else
{
hint = &"MP_GENERIC_PICKUP";
}
icon = maps\mp\zombies\_zm_equipment::get_equipment_icon(equipname);
if (!isDefined(tradius))
{
tradius = 32;
}
torigin = origin;
if (isDefined(toffset))
{
tforward = anglesToForward(angles);
torigin += toffset * tforward;
}
tup = anglesToUp(angles);
eq_unitrigger_offset = 12 * tup;
pickupmodel.stub = maps\mp\zombies\_zm_equipment::generate_equipment_unitrigger("trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, maps\mp\zombies\_zm_equipment::placed_equipment_unitrigger_think, pickupmodel.canmove);
pickupmodel.stub.model = pickupmodel;
pickupmodel.stub.equipname = equipname;
pickupmodel.equipname = equipname;
pickupmodel thread item_watch_damage();
if (maps\mp\zombies\_zm_equipment::is_limited_equipment(equipname))
{
if (!isDefined(level.dropped_equipment))
{
level.dropped_equipment = [];
}
if (isDefined(level.dropped_equipment[equipname]) && isDefined(level.dropped_equipment[equipname].model))
{
level.dropped_equipment[equipname].model maps\mp\zombies\_zm_equipment::dropped_equipment_destroy(1);
}
level.dropped_equipment[equipname] = pickupmodel.stub;
}
maps\mp\zombies\_zm_equipment::destructible_equipment_list_add(pickupmodel);
return pickupmodel;
}
item_watch_damage()
{
self endon("death");
self setcandamage(1);
while (1)
{
self.health = 1000000;
self waittill("damage", amount);
self item_damage(amount);
}
}
item_damage(damage)
{
if (isdefined(self.isriotshield) && self.isriotshield)
{
if (isdefined(level.riotshield_damage_callback) && isdefined(self.owner))
self.owner [[level.riotshield_damage_callback]](damage, 0);
else if (isdefined(level.deployed_riotshield_damage_callback))
self [[level.deployed_riotshield_damage_callback]](damage);
}
else if (isdefined(self.owner))
{
self.owner player_damage_equipment(self.equipname, damage, self.origin, self.stub);
}
else
{
if (!isdefined(self.damage))
self.damage = 0;
self.damage += damage;
if (self.damage >= 1500)
self thread maps\mp\zombies\_zm_equipment::dropped_equipment_destroy(1);
}
}
player_damage_equipment(equipment, damage, origin, stub)
{
if (!isdefined(self.equipment_damage))
self.equipment_damage = [];
if (!isdefined(self.equipment_damage[equipment]))
self.equipment_damage[equipment] = 0;
self.equipment_damage[equipment] += damage;
if (self.equipment_damage[equipment] >= 1500)
{
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger(stub);
if (isdefined(level.placeable_equipment_destroy_fn[equipment]))
self [[level.placeable_equipment_destroy_fn[equipment]]]();
else
equipment_disappear_fx(origin);
self equipment_release(equipment);
}
}