1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -05:00
Jbleezy 98d48564cc Ballista: add wallbuy chalk
Override wallbuys correctly
2023-12-31 19:22:04 -08:00

402 lines
12 KiB
Plaintext

#include common_scripts\utility;
#include maps\mp\zombies\_load;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_melee_weapon;
#include maps\mp\zombies\_zm_weap_claymore;
#include maps\mp\zombies\_zm_weap_ballistic_knife;
#include maps\mp\zombies\_zm_equipment;
#include maps\mp\zombies\_zm_magicbox;
struct_class_init()
{
level.struct_class_names = [];
level.struct_class_names["target"] = [];
level.struct_class_names["targetname"] = [];
level.struct_class_names["script_noteworthy"] = [];
level.struct_class_names["script_linkname"] = [];
level.struct_class_names["script_unitrigger_type"] = [];
foreach (s_struct in level.struct)
{
if (isDefined(s_struct.targetname))
{
if (!isDefined(level.struct_class_names["targetname"][s_struct.targetname]))
{
level.struct_class_names["targetname"][s_struct.targetname] = [];
}
size = level.struct_class_names["targetname"][s_struct.targetname].size;
level.struct_class_names["targetname"][s_struct.targetname][size] = s_struct;
}
if (isDefined(s_struct.target))
{
if (!isDefined(level.struct_class_names["target"][s_struct.target]))
{
level.struct_class_names["target"][s_struct.target] = [];
}
size = level.struct_class_names["target"][s_struct.target].size;
level.struct_class_names["target"][s_struct.target][size] = s_struct;
}
if (isDefined(s_struct.script_noteworthy))
{
if (!isDefined(level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy]))
{
level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] = [];
}
size = level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy].size;
level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy][size] = s_struct;
}
if (isDefined(s_struct.script_linkname))
{
level.struct_class_names["script_linkname"][s_struct.script_linkname][0] = s_struct;
}
if (isDefined(s_struct.script_unitrigger_type))
{
if (!isDefined(level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type]))
{
level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] = [];
}
size = level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type].size;
level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type][size] = s_struct;
}
}
gametype = getDvar("g_gametype");
location = getDvar("ui_zm_mapstartlocation");
if (array_validate(level.add_struct_gamemode_location_funcs))
{
if (array_validate(level.add_struct_gamemode_location_funcs[gametype]))
{
if (array_validate(level.add_struct_gamemode_location_funcs[gametype][location]))
{
for (i = 0; i < level.add_struct_gamemode_location_funcs[gametype][location].size; i++)
{
[[level.add_struct_gamemode_location_funcs[gametype][location][i]]]();
}
}
}
}
}
add_struct(s_struct)
{
if (isDefined(s_struct.targetname))
{
if (!isDefined(level.struct_class_names["targetname"][s_struct.targetname]))
{
level.struct_class_names["targetname"][s_struct.targetname] = [];
}
size = level.struct_class_names["targetname"][s_struct.targetname].size;
level.struct_class_names["targetname"][s_struct.targetname][size] = s_struct;
}
if (isDefined(s_struct.script_noteworthy))
{
if (!isDefined(level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy]))
{
level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy] = [];
}
size = level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy].size;
level.struct_class_names["script_noteworthy"][s_struct.script_noteworthy][size] = s_struct;
}
if (isDefined(s_struct.target))
{
if (!isDefined(level.struct_class_names["target"][s_struct.target]))
{
level.struct_class_names["target"][s_struct.target] = [];
}
size = level.struct_class_names["target"][s_struct.target].size;
level.struct_class_names["target"][s_struct.target][size] = s_struct;
}
if (isDefined(s_struct.script_linkname))
{
level.struct_class_names["script_linkname"][s_struct.script_linkname][0] = s_struct;
}
if (isDefined(s_struct.script_unitrigger_type))
{
if (!isDefined(level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type]))
{
level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type] = [];
}
size = level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type].size;
level.struct_class_names["script_unitrigger_type"][s_struct.script_unitrigger_type][size] = s_struct;
}
}
register_perk_struct(name, model, origin, angles)
{
perk_struct = spawnStruct();
perk_struct.targetname = "zm_perk_machine";
perk_struct.origin = origin;
perk_struct.angles = angles;
perk_struct.script_noteworthy = name;
perk_struct.model = model;
if (name == "specialty_weapupgrade")
{
flag_struct = spawnStruct();
flag_struct.targetname = "weapupgrade_flag_targ";
flag_struct.origin = origin + (anglesToForward(angles) * 29) + (anglesToRight(angles) * -13.5) + (anglesToUp(angles) * 49.5);
flag_struct.angles = angles + (0, 180, 180);
flag_struct.model = "zombie_sign_please_wait";
perk_struct.target = flag_struct.targetname;
add_struct(flag_struct);
}
add_struct(perk_struct);
}
register_map_spawn_group(origin, zone, dist)
{
spawn_group_struct = spawnStruct();
spawn_group_struct.targetname = "player_respawn_point";
spawn_group_struct.origin = origin;
spawn_group_struct.locked = !zone_is_enabled(zone);
spawn_group_struct.script_int = dist;
spawn_group_struct.script_noteworthy = zone;
spawn_group_struct.script_string = getDvar("g_gametype") + "_" + getDvar("ui_zm_mapstartlocation");
spawn_group_struct.target = zone + "_player_spawns";
add_struct(spawn_group_struct);
}
register_map_spawn(origin, angles, zone, team_num)
{
spawn_struct = spawnStruct();
spawn_struct.targetname = zone + "_player_spawns";
spawn_struct.origin = origin;
spawn_struct.angles = angles;
spawn_struct.script_string = getDvar("g_gametype") + "_" + getDvar("ui_zm_mapstartlocation");
if (isDefined(team_num))
{
spawn_struct.script_noteworthy = "initial_spawn";
spawn_struct.script_int = team_num;
}
add_struct(spawn_struct);
}
wallbuy(weapon_name, target, targetname, origin, angles, play_chalk_fx = 1)
{
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = origin;
unitrigger_stub.angles = angles;
model_name = undefined;
if (weapon_name == "sticky_grenade_zm")
{
model_name = "semtex_bag";
}
else if (weapon_name == "claymore_zm")
{
model_name = "t6_wpn_claymore_world";
}
wallmodel = spawn_weapon_model(weapon_name, model_name, origin, angles);
wallmodel.targetname = target;
wallmodel useweaponhidetags(weapon_name);
wallmodel hide();
absmins = wallmodel getabsmins();
absmaxs = wallmodel getabsmaxs();
bounds = absmaxs - absmins;
unitrigger_stub.script_length = 64;
unitrigger_stub.script_width = bounds[1];
unitrigger_stub.script_height = bounds[2];
unitrigger_stub.target = target;
unitrigger_stub.targetname = targetname;
unitrigger_stub.cursor_hint = "HINT_NOICON";
// move model forward so it always shows in front of chalk
wallmodel.origin += anglesToRight(wallmodel.angles) * -0.3;
unitrigger_stub.origin += anglesToRight(wallmodel.angles) * -0.3;
if (unitrigger_stub.targetname == "weapon_upgrade")
{
unitrigger_stub.cost = get_weapon_cost(weapon_name);
if (!is_true(level.monolingustic_prompt_format))
{
unitrigger_stub.hint_string = get_weapon_hint(weapon_name);
unitrigger_stub.hint_parm1 = unitrigger_stub.cost;
}
else
{
unitrigger_stub.hint_parm1 = get_weapon_display_name(weapon_name);
if (!isDefined(unitrigger_stub.hint_parm1) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none")
{
unitrigger_stub.hint_parm1 = "missing weapon name " + weapon_name;
}
unitrigger_stub.hint_parm2 = unitrigger_stub.cost;
unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
}
}
unitrigger_stub.weapon_upgrade = weapon_name;
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.require_look_at = 1;
unitrigger_stub.require_look_from = 0;
unitrigger_stub.zombie_weapon_upgrade = weapon_name;
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers(unitrigger_stub, 1);
if (is_melee_weapon(weapon_name))
{
melee_weapon = undefined;
foreach (melee_weapon in level._melee_weapons)
{
if (melee_weapon.weapon_name == weapon_name)
{
break;
}
}
if (isDefined(melee_weapon))
{
unitrigger_stub.cost = melee_weapon.cost;
unitrigger_stub.hint_string = melee_weapon.hint_string;
unitrigger_stub.weapon_name = melee_weapon.weapon_name;
unitrigger_stub.flourish_weapon_name = melee_weapon.flourish_weapon_name;
unitrigger_stub.ballistic_weapon_name = melee_weapon.ballistic_weapon_name;
unitrigger_stub.ballistic_upgraded_weapon_name = melee_weapon.ballistic_upgraded_weapon_name;
unitrigger_stub.vo_dialog_id = melee_weapon.vo_dialog_id;
unitrigger_stub.flourish_fn = melee_weapon.flourish_fn;
unitrigger_stub.cursor_hint = "HINT_WEAPON";
unitrigger_stub.cursor_hint_weapon = melee_weapon.weapon_name;
}
if (weapon_name == "tazer_knuckles_zm")
{
unitrigger_stub.origin += (anglesToForward(angles) * -7) + (anglesToRight(angles) * -2);
}
wallmodel.origin += anglesToForward(angles) * -8; // _zm_melee_weapon::melee_weapon_show moves this back
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger(unitrigger_stub, ::melee_weapon_think);
}
else if (weapon_name == "claymore_zm")
{
wallmodel.angles += (0, 90, 0);
wallmodel.script_int = 90; // fix for model sliding right to left
unitrigger_stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_weap_claymore::claymore_unitrigger_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger(unitrigger_stub, scripts\zm\replaced\_zm_weap_claymore::buy_claymores);
}
else
{
if (is_lethal_grenade(unitrigger_stub.zombie_weapon_upgrade))
unitrigger_stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_weapons::lethal_grenade_update_prompt;
else
unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger(unitrigger_stub, scripts\zm\replaced\_zm_weapons::weapon_spawn_think);
}
if (weaponType(weapon_name) == "grenade")
{
unitrigger_stub thread wallbuy_grenade_model_fix();
}
if (play_chalk_fx)
{
chalk_fx = get_chalk_fx_name(weapon_name);
level thread play_chalk_fx(chalk_fx, origin, angles);
}
}
get_chalk_fx_name(weapon_name)
{
return weapon_name + "_fx";
}
play_chalk_fx(effect, origin, angles)
{
while (1)
{
fx = SpawnFX(level._effect[effect], origin, AnglesToForward(angles), AnglesToUp(angles));
TriggerFX(fx);
level waittill("connected", player);
fx Delete();
}
}
// fixes grenade wallbuy model doing first trigger animation everytime
wallbuy_grenade_model_fix()
{
model = getent(self.target, "targetname");
if (!isDefined(model))
{
return;
}
model waittill("movedone");
self.target = undefined;
}
barrier(model, origin, angles, not_solid)
{
if (!isDefined(level.survival_barriers))
{
level.survival_barriers = [];
level.survival_barriers_index = 0;
}
level.survival_barriers[level.survival_barriers_index] = spawn("script_model", origin);
level.survival_barriers[level.survival_barriers_index] setModel(model);
level.survival_barriers[level.survival_barriers_index] rotateTo(angles, 0.1);
if (is_true(not_solid))
{
level.survival_barriers[level.survival_barriers_index] notSolid();
}
level.survival_barriers_index++;
}
add_struct_location_gamemode_func(gametype, location, func)
{
if (!isDefined(level.add_struct_gamemode_location_funcs))
{
level.add_struct_gamemode_location_funcs = [];
}
if (!isDefined(level.add_struct_gamemode_location_funcs[gametype]))
{
level.add_struct_gamemode_location_funcs[gametype] = [];
}
if (!isDefined(level.add_struct_gamemode_location_funcs[gametype][location]))
{
level.add_struct_gamemode_location_funcs[gametype][location] = [];
}
level.add_struct_gamemode_location_funcs[gametype][location][level.add_struct_gamemode_location_funcs[gametype][location].size] = func;
}