mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
2974 lines
58 KiB
Plaintext
2974 lines
58 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: sanfran_util.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 168
|
|
* Decompile Time: 2430 ms
|
|
* Timestamp: 4/22/2024 2:36:03 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
spawn_squad(param_00)
|
|
{
|
|
level.burke = getent("spawner_burke_bridge","targetname") maps\_utility::spawn_ai(1);
|
|
level.saint = getent("spawner_saint_bridge","targetname") maps\_utility::spawn_ai(1);
|
|
level.burke setup_hero("Burke");
|
|
level.saint setup_hero("Saint");
|
|
if(isdefined(param_00))
|
|
{
|
|
var_01 = getent(param_00 + "_burke","targetname");
|
|
level.burke teleport(var_01.origin,var_01.angles);
|
|
level.burke setgoalpos(level.burke.origin);
|
|
var_02 = getent(param_00 + "_saint","targetname");
|
|
level.saint teleport(var_02.origin,var_02.angles);
|
|
level.saint setgoalpos(level.saint.origin);
|
|
}
|
|
|
|
level.player setthreatbiasgroup("sentinel");
|
|
}
|
|
|
|
//Function Number: 2
|
|
setup_hero(param_00)
|
|
{
|
|
maps\_utility::magic_bullet_shield();
|
|
self.animname = param_00;
|
|
if(!isdefined(level.heroes))
|
|
{
|
|
level.heroes = [];
|
|
}
|
|
|
|
level.heroes[level.heroes.size] = self;
|
|
maps\_utility::make_hero();
|
|
self setthreatbiasgroup("sentinel");
|
|
}
|
|
|
|
//Function Number: 3
|
|
set_player_start(param_00)
|
|
{
|
|
var_01 = getent(param_00,"targetname");
|
|
level.player maps\_utility::teleport_player(var_01);
|
|
}
|
|
|
|
//Function Number: 4
|
|
give_boost_jump()
|
|
{
|
|
maps\_player_exo::player_exo_add_single("high_jump");
|
|
}
|
|
|
|
//Function Number: 5
|
|
remove_boost_jump()
|
|
{
|
|
maps\_player_exo::player_exo_remove_single("high_jump");
|
|
}
|
|
|
|
//Function Number: 6
|
|
squad_ignore_all_start()
|
|
{
|
|
foreach(var_01 in level.heroes)
|
|
{
|
|
var_01.ignoreall = 1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
squad_ignore_all_stop()
|
|
{
|
|
foreach(var_01 in level.heroes)
|
|
{
|
|
var_01.ignoreall = 0;
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
setup_squad_for_scene()
|
|
{
|
|
foreach(var_01 in level.heroes)
|
|
{
|
|
var_01.old_name = var_01.name;
|
|
var_01.name = " ";
|
|
}
|
|
}
|
|
|
|
//Function Number: 9
|
|
setup_squad_for_gameplay()
|
|
{
|
|
foreach(var_01 in level.heroes)
|
|
{
|
|
var_01.name = var_01.old_name;
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
squad_careful_all_start()
|
|
{
|
|
foreach(var_01 in level.heroes)
|
|
{
|
|
var_01 maps\_utility::enable_careful();
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
squad_careful_all_stop()
|
|
{
|
|
foreach(var_01 in level.heroes)
|
|
{
|
|
var_01 maps\_utility::disable_careful();
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
show_ents_by_targetname(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
var_03 show();
|
|
}
|
|
}
|
|
|
|
//Function Number: 13
|
|
hide_ents_by_targetname(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
var_03 hide();
|
|
}
|
|
}
|
|
|
|
//Function Number: 14
|
|
solid_ents_by_targetname(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
var_03 solid();
|
|
}
|
|
}
|
|
|
|
//Function Number: 15
|
|
notsolid_ents_by_targetname(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
var_03 notsolid();
|
|
}
|
|
}
|
|
|
|
//Function Number: 16
|
|
connectpaths_ents_by_targetname(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
if(var_03.classname == "script_brushmodel")
|
|
{
|
|
var_03 connectpaths();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
disconnectpaths_ents_by_targetname(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
if(var_03.classname == "script_brushmodel")
|
|
{
|
|
var_03 disconnectpaths();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 18
|
|
delete_ents_by_targetname(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
var_03 delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 19
|
|
hide_fallen_bridge()
|
|
{
|
|
hide_ents_by_targetname("bridge_section_fallen");
|
|
hide_ents_by_targetname("bridge_section_far");
|
|
}
|
|
|
|
//Function Number: 20
|
|
show_fallen_bridge()
|
|
{
|
|
show_ents_by_targetname("bridge_section_fallen");
|
|
}
|
|
|
|
//Function Number: 21
|
|
show_far_bridge()
|
|
{
|
|
show_ents_by_targetname("bridge_section_far");
|
|
}
|
|
|
|
//Function Number: 22
|
|
hide_intact_bridge()
|
|
{
|
|
hide_ents_by_targetname("bridge_section_remove");
|
|
}
|
|
|
|
//Function Number: 23
|
|
remove_intact_bridge()
|
|
{
|
|
connectpaths_ents_by_targetname("bridge_section_remove");
|
|
delete_ents_by_targetname("bridge_section_remove");
|
|
}
|
|
|
|
//Function Number: 24
|
|
hide_crash_traffic()
|
|
{
|
|
notsolid_ents_by_targetname("after_crash_traffic");
|
|
hide_ents_by_targetname("after_crash_traffic");
|
|
}
|
|
|
|
//Function Number: 25
|
|
show_crash_traffic()
|
|
{
|
|
solid_ents_by_targetname("after_crash_traffic");
|
|
show_ents_by_targetname("after_crash_traffic");
|
|
}
|
|
|
|
//Function Number: 26
|
|
hide_chase_scene()
|
|
{
|
|
hide_ents_by_targetname("bus_crash_final_pos_col");
|
|
notsolid_ents_by_targetname("bus_crash_final_pos_col");
|
|
hide_ents_by_targetname("pitbull_crash_collision");
|
|
notsolid_ents_by_targetname("pitbull_crash_collision");
|
|
}
|
|
|
|
//Function Number: 27
|
|
put_bridge_in_proper_place()
|
|
{
|
|
var_00 = getentarray("bridge_section_remove","targetname");
|
|
foreach(var_02 in var_00)
|
|
{
|
|
var_02.origin = var_02.origin + (0,-9216,0);
|
|
if(var_02.classname == "script_brushmodel")
|
|
{
|
|
var_02 disconnectpaths();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 28
|
|
put_roadsurface_in_proper_place()
|
|
{
|
|
var_00 = getentarray("bridge_roadsurface_intro","targetname");
|
|
foreach(var_02 in var_00)
|
|
{
|
|
var_02.origin = var_02.origin + (0,-5120,5);
|
|
}
|
|
}
|
|
|
|
//Function Number: 29
|
|
delete_roadsurface_bridge()
|
|
{
|
|
delete_ents_by_targetname("bridge_roadsurface_intro");
|
|
}
|
|
|
|
//Function Number: 30
|
|
setup_intro()
|
|
{
|
|
hide_fallen_bridge();
|
|
hide_crash_traffic();
|
|
hide_chase_scene();
|
|
make_bridge_normal();
|
|
put_bridge_in_proper_place();
|
|
put_roadsurface_in_proper_place();
|
|
thread maps\sanfran_fx::traffic_fx_init();
|
|
thread maps\_vehicle_traffic::traffic_init(::maps\sanfran_fx::traffic_collision_hit_func);
|
|
}
|
|
|
|
//Function Number: 31
|
|
trigger_bridge_small()
|
|
{
|
|
self waittill("trigger");
|
|
make_bridge_normal();
|
|
}
|
|
|
|
//Function Number: 32
|
|
make_bridge_big()
|
|
{
|
|
hide_ents_by_targetname("bridge_tower_small");
|
|
show_ents_by_targetname("bridge_tower_big");
|
|
}
|
|
|
|
//Function Number: 33
|
|
make_bridge_normal()
|
|
{
|
|
show_ents_by_targetname("bridge_tower_small");
|
|
hide_ents_by_targetname("bridge_tower_big");
|
|
}
|
|
|
|
//Function Number: 34
|
|
toggle_off_real_mob()
|
|
{
|
|
hide_ents_by_targetname("mob_brushmodel");
|
|
hide_ents_by_targetname("mob_models");
|
|
}
|
|
|
|
//Function Number: 35
|
|
toggle_on_real_mob()
|
|
{
|
|
hide_ents_by_targetname("fake_mob");
|
|
show_ents_by_targetname("mob_brushmodel");
|
|
show_ents_by_targetname("mob_models");
|
|
}
|
|
|
|
//Function Number: 36
|
|
toggle_all_boats_on_trigger()
|
|
{
|
|
self waittill("trigger");
|
|
toggle_all_boats_on();
|
|
}
|
|
|
|
//Function Number: 37
|
|
toggle_all_boats_on()
|
|
{
|
|
var_00 = [];
|
|
var_00[var_00.size] = getent("cargo_ship_2","targetname");
|
|
var_00[var_00.size] = getent("cargo_ship","targetname");
|
|
var_01 = getentarray("navy_ship_right","targetname");
|
|
var_00 = common_scripts\utility::array_combine(var_00,var_01);
|
|
var_01 = getentarray("navy_ship","targetname");
|
|
var_00 = common_scripts\utility::array_combine(var_00,var_01);
|
|
var_00[var_00.size] = getent("fake_mob","targetname");
|
|
foreach(var_03 in var_00)
|
|
{
|
|
var_03 show();
|
|
}
|
|
}
|
|
|
|
//Function Number: 38
|
|
toggle_all_boats_off()
|
|
{
|
|
var_00 = [];
|
|
var_00[var_00.size] = getent("cargo_ship_2","targetname");
|
|
var_00[var_00.size] = getent("cargo_ship","targetname");
|
|
var_01 = getentarray("navy_ship_right","targetname");
|
|
var_00 = common_scripts\utility::array_combine(var_00,var_01);
|
|
var_01 = getentarray("navy_ship","targetname");
|
|
var_00 = common_scripts\utility::array_combine(var_00,var_01);
|
|
var_00[var_00.size] = getent("fake_mob","targetname");
|
|
foreach(var_03 in var_00)
|
|
{
|
|
var_03 hide();
|
|
}
|
|
}
|
|
|
|
//Function Number: 39
|
|
toggle_boat_visibility()
|
|
{
|
|
level thread toggle_boat_visibility_group("right");
|
|
level thread toggle_boat_visibility_group("left");
|
|
}
|
|
|
|
//Function Number: 40
|
|
toggle_boat_visibility_group(param_00)
|
|
{
|
|
level endon("stop_toggle_boat_visibility");
|
|
var_01 = [];
|
|
if(param_00 == "right")
|
|
{
|
|
var_02 = getentarray("trigger_toggle_cant_see_ships_right","targetname");
|
|
var_01[var_01.size] = getent("cargo_ship_2","targetname");
|
|
var_03 = getentarray("navy_ship_right","targetname");
|
|
var_01 = common_scripts\utility::array_combine(var_01,var_03);
|
|
}
|
|
else if(var_02 == "left")
|
|
{
|
|
var_02 = getentarray("trigger_toggle_cant_see_ships_left","targetname");
|
|
var_02[var_02.size] = getent("cargo_ship","targetname");
|
|
var_03 = getentarray("navy_ship","targetname");
|
|
var_01 = common_scripts\utility::array_combine(var_01,var_03);
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
thread make_all_boats_visible(var_01);
|
|
for(;;)
|
|
{
|
|
for(;;)
|
|
{
|
|
var_04 = 0;
|
|
foreach(var_06 in var_02)
|
|
{
|
|
if(level.player istouching(var_06))
|
|
{
|
|
var_04 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(var_04 == 1)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
|
|
foreach(var_09 in var_01)
|
|
{
|
|
var_09 hide();
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
var_04 = 0;
|
|
foreach(var_06 in var_02)
|
|
{
|
|
if(level.player istouching(var_06))
|
|
{
|
|
var_04 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(var_04 == 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
|
|
foreach(var_09 in var_01)
|
|
{
|
|
var_09 show();
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 41
|
|
make_all_boats_visible(param_00)
|
|
{
|
|
level waittill("stop_toggle_boat_visibility");
|
|
foreach(var_02 in param_00)
|
|
{
|
|
var_02 show();
|
|
}
|
|
}
|
|
|
|
//Function Number: 42
|
|
show_water_intro()
|
|
{
|
|
show_ents_by_targetname("ship_water_intro");
|
|
hide_ents_by_targetname("ship_water_waves");
|
|
}
|
|
|
|
//Function Number: 43
|
|
show_water_final()
|
|
{
|
|
hide_ents_by_targetname("ship_water_intro");
|
|
show_ents_by_targetname("ship_water_waves");
|
|
}
|
|
|
|
//Function Number: 44
|
|
drone_lookat_ent(param_00,param_01,param_02,param_03)
|
|
{
|
|
self notify("start_new_drone_lookat");
|
|
self endon("start_new_drone_lookat");
|
|
if(!isdefined(param_03))
|
|
{
|
|
param_03 = (0,0,0);
|
|
}
|
|
|
|
var_04 = getent(param_00,"targetname");
|
|
var_05 = vectortoangles(var_04.origin - self.origin);
|
|
if(!isdefined(param_01) || param_01 == 0)
|
|
{
|
|
self.angles = var_05;
|
|
}
|
|
else
|
|
{
|
|
self rotateto(var_05 + param_03,param_01,param_01 / 5,param_01 / 5);
|
|
self waittill("rotatedone");
|
|
self notify("drone_lookat_done");
|
|
}
|
|
|
|
if(isdefined(param_02) && param_02)
|
|
{
|
|
for(;;)
|
|
{
|
|
var_05 = vectortoangles(var_04.origin - self.origin) + param_03;
|
|
self rotateto(var_05,0.05,0,0);
|
|
wait(0.05);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 45
|
|
drone_moveto_ent(param_00,param_01)
|
|
{
|
|
var_02 = getent(param_00,"targetname");
|
|
self moveto(var_02.origin,param_01,param_01 / 5,param_01 / 5);
|
|
self waittill("movedone");
|
|
self notify("drone_moveto_done");
|
|
}
|
|
|
|
//Function Number: 46
|
|
drone_view_shake(param_00)
|
|
{
|
|
self notify("start_new_intro_shake");
|
|
self endon("start_new_intro_shake");
|
|
for(;;)
|
|
{
|
|
if(common_scripts\utility::flag("flag_intro_transition_to_driving"))
|
|
{
|
|
break;
|
|
}
|
|
|
|
earthquake(param_00,0.1,level.player.origin,200);
|
|
wait(0.1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 47
|
|
setup_move_player_pitbull(param_00)
|
|
{
|
|
level.player_pitbull = maps\_vehicle::spawn_vehicle_from_targetname("player_pitbull");
|
|
thread maps\_vehicle_traffic::add_script_car(level.player_pitbull);
|
|
var_01 = getent(param_00,"targetname");
|
|
level.player_pitbull vehicle_teleport(var_01.origin,var_01.angles);
|
|
}
|
|
|
|
//Function Number: 48
|
|
setup_move_friendly_pitbull(param_00)
|
|
{
|
|
level.friendly_pitbull = maps\_vehicle::spawn_vehicle_from_targetname("friendly_pitbull");
|
|
thread maps\_vehicle_traffic::add_script_car(level.friendly_pitbull);
|
|
level.friendly_pitbull setup_start_vehicle_on_path(param_00);
|
|
}
|
|
|
|
//Function Number: 49
|
|
setup_move_chase_van(param_00)
|
|
{
|
|
level.chase_van = maps\_vehicle::spawn_vehicle_from_targetname("chase_van");
|
|
thread maps\_vehicle_traffic::add_script_car(level.chase_van);
|
|
level.chase_van setup_start_vehicle_on_path(param_00);
|
|
}
|
|
|
|
//Function Number: 50
|
|
setup_start_vehicle_on_path(param_00)
|
|
{
|
|
var_01 = getent(param_00,"targetname");
|
|
self vehicle_teleport(var_01.origin,var_01.angles);
|
|
var_02 = getvehiclenode(var_01.target,"targetname");
|
|
thread maps\_vehicle_code::_vehicle_paths(var_02);
|
|
self startpath(var_02);
|
|
}
|
|
|
|
//Function Number: 51
|
|
enable_pitbull_shooting()
|
|
{
|
|
level.player_pitbull maps\_utility::ent_flag_set("pitbull_allow_shooting");
|
|
level.friendly_pitbull maps\_utility::ent_flag_set("pitbull_allow_shooting");
|
|
}
|
|
|
|
//Function Number: 52
|
|
chase_van_set_close()
|
|
{
|
|
self waittill("trigger");
|
|
level.chase_van.lead_pos = "close";
|
|
}
|
|
|
|
//Function Number: 53
|
|
chase_van_set_medium()
|
|
{
|
|
self waittill("trigger");
|
|
level.chase_van.lead_pos = "medium";
|
|
}
|
|
|
|
//Function Number: 54
|
|
chase_van_set_far()
|
|
{
|
|
self waittill("trigger");
|
|
level.chase_van.lead_pos = "far";
|
|
}
|
|
|
|
//Function Number: 55
|
|
friendly_pitbull_shadow_chase_van()
|
|
{
|
|
self waittill("trigger");
|
|
level.friendly_pitbull.shadow_pos = "van";
|
|
}
|
|
|
|
//Function Number: 56
|
|
friendly_pitbull_shadow_player()
|
|
{
|
|
self waittill("trigger");
|
|
level.friendly_pitbull.shadow_pos = "player";
|
|
}
|
|
|
|
//Function Number: 57
|
|
wait_for_crash_at_end()
|
|
{
|
|
self waittill("reached_end_node");
|
|
self dodamage(1000000000,self.origin);
|
|
playfxontag(level._effect["tanker_explosion"],self,"tag_origin");
|
|
soundscripts\_snd::snd_message("car_chase_crash");
|
|
wait(4);
|
|
stopfxontag(level._effect["tanker_explosion"],self,"tag_origin");
|
|
}
|
|
|
|
//Function Number: 58
|
|
get_dist_to_end_in_miles(param_00)
|
|
{
|
|
if(!isdefined(self.currentnode.target))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = getvehiclenode(self.currentnode.target,"targetname");
|
|
if(!isdefined(var_01))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_02 = 0;
|
|
var_03 = self;
|
|
for(;;)
|
|
{
|
|
var_02 = var_02 + distance(var_03.origin,var_01.origin);
|
|
if(!isdefined(var_01.target))
|
|
{
|
|
if(isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if(isdefined(param_00) && isdefined(var_01.script_noteworthy) && var_01.script_noteworthy == param_00)
|
|
{
|
|
break;
|
|
}
|
|
|
|
var_03 = var_01;
|
|
var_01 = getvehiclenode(var_01.target,"targetname");
|
|
if(!isdefined(var_01))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
return var_02 / 63360;
|
|
}
|
|
|
|
//Function Number: 59
|
|
get_vehicles_to_point_at_same_time(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
param_00 endon("death");
|
|
param_02 endon("death");
|
|
if(isdefined(param_04))
|
|
{
|
|
level endon(param_04);
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
var_05 = param_00 get_dist_to_end_in_miles(param_01);
|
|
var_06 = param_02 get_dist_to_end_in_miles(param_03);
|
|
var_07 = param_00 vehicle_getspeed();
|
|
if(var_07 > 0)
|
|
{
|
|
var_08 = var_05 / var_07;
|
|
if(var_08 > 0)
|
|
{
|
|
var_09 = var_06 / var_08;
|
|
}
|
|
else
|
|
{
|
|
var_09 = 50;
|
|
}
|
|
|
|
param_02 vehicle_setspeed(var_09,100,5);
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 60
|
|
vehicle_chase_target(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
|
|
{
|
|
self notify("one_vehicle_chase_target");
|
|
self endon("one_vehicle_chase_target");
|
|
level endon("flag_player_crashed");
|
|
self endon("stop_chase_target");
|
|
self endon("death");
|
|
thread chase_cleanup_after_player_crash();
|
|
self.oscillate_speed = 0;
|
|
if(param_03 >= 0 && param_04 > 0)
|
|
{
|
|
thread vehicle_oscillate_location(param_03,param_04);
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
var_0A = param_00 vehicle_getspeed();
|
|
var_0B = vectornormalize(anglestoforward(param_00.angles));
|
|
var_0C = self.origin - param_00.origin;
|
|
var_0D = vectordot(var_0B,var_0C) * var_0B;
|
|
var_0E = length(var_0D);
|
|
var_0F = vectornormalize(var_0C);
|
|
var_10 = vectordot(var_0B,var_0F);
|
|
if(var_10 < 0)
|
|
{
|
|
if(param_05)
|
|
{
|
|
var_0A = var_0A * 1.5;
|
|
}
|
|
else if(var_0E < param_01)
|
|
{
|
|
var_0A = var_0A * 0.8;
|
|
}
|
|
else if(var_0E > param_02 * 1.5)
|
|
{
|
|
var_0A = var_0A * 1.35;
|
|
}
|
|
else if(var_0E > param_02 * 1.2)
|
|
{
|
|
var_0A = var_0A * 1.2;
|
|
}
|
|
else if(var_0E > param_02)
|
|
{
|
|
var_0A = var_0A * 1.1;
|
|
}
|
|
else
|
|
{
|
|
var_0A = var_0A + self.oscillate_speed;
|
|
}
|
|
}
|
|
else if(param_06)
|
|
{
|
|
var_0A = var_0A * 0.5;
|
|
}
|
|
else if(var_0E < param_01)
|
|
{
|
|
var_0A = var_0A * 1.2;
|
|
}
|
|
else if(var_0E > param_02 * 1.5)
|
|
{
|
|
var_0A = var_0A * 0.7;
|
|
}
|
|
else if(var_0E > param_02 * 1.2)
|
|
{
|
|
var_0A = var_0A * 0.85;
|
|
}
|
|
else if(var_0E > param_02)
|
|
{
|
|
var_0A = var_0A * 0.95;
|
|
}
|
|
else
|
|
{
|
|
var_0A = var_0A + self.oscillate_speed;
|
|
}
|
|
|
|
if(param_07 && isdefined(level.player_pitbull))
|
|
{
|
|
if(vectordot(level.player_pitbull.origin - self.origin,anglestoforward(self.angles)) > 0)
|
|
{
|
|
var_11 = maps\_vehicle_traffic::time_and_distance_of_closest_approach(self.origin,self vehicle_getvelocity(),level.player_pitbull.origin,level.player_pitbull vehicle_getvelocity(),0.1,234,0);
|
|
var_12 = var_11[0];
|
|
var_13 = var_11[1];
|
|
if(var_12 < 2 && var_13 < 234)
|
|
{
|
|
var_0A = level.player_pitbull vehicle_getspeed() * 0.6;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(param_08)
|
|
{
|
|
var_0A = clamp(var_0A,0,200);
|
|
}
|
|
else if(isdefined(param_09))
|
|
{
|
|
var_0A = clamp(var_0A,param_09,200);
|
|
}
|
|
else
|
|
{
|
|
var_0A = clamp(var_0A,20,200);
|
|
}
|
|
|
|
self vehicle_setspeed(var_0A,100,100);
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 61
|
|
chase_cleanup_after_player_crash()
|
|
{
|
|
self notify("one_chase_cleanup_after_player_crash");
|
|
self endon("one_chase_cleanup_after_player_crash");
|
|
self endon("stop_chase_target");
|
|
self endon("death");
|
|
common_scripts\utility::flag_wait("flag_player_crashed");
|
|
wait(0.5);
|
|
self resumespeed(100);
|
|
}
|
|
|
|
//Function Number: 62
|
|
vehicle_oscillate_location(param_00,param_01)
|
|
{
|
|
self notify("one_vehicle_oscillate_location");
|
|
self endon("one_vehicle_oscillate_location");
|
|
level endon("flag_player_crashed");
|
|
self endon("stop_chase_target");
|
|
self endon("death");
|
|
var_02 = gettime();
|
|
param_01 = param_01 * 1000;
|
|
for(;;)
|
|
{
|
|
var_03 = gettime() - var_02;
|
|
var_04 = var_03 % param_01;
|
|
var_04 = var_04 / param_01;
|
|
var_04 = var_04 * 365;
|
|
var_05 = param_00 * sin(var_04);
|
|
self.oscillate_speed = var_05;
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 63
|
|
jumping_take_down(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
var_01 = common_scripts\utility::array_randomize(var_01);
|
|
var_02 = undefined;
|
|
var_03 = undefined;
|
|
var_04 = undefined;
|
|
var_05 = [];
|
|
foreach(var_07 in var_01)
|
|
{
|
|
var_03 = undefined;
|
|
var_04 = undefined;
|
|
var_08 = vectornormalize(anglestoforward(var_07.angles));
|
|
var_09 = vectornormalize(-1 * anglestoright(var_07.angles));
|
|
var_03 = get_closest_ai_to_origin(var_07.origin,"axis",0,150);
|
|
if(!isdefined(var_03))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_04 = get_closest_ai_to_origin(var_07.origin,"allies",350,800,0,20,var_09);
|
|
if(isdefined(var_03) && isdefined(var_04))
|
|
{
|
|
var_02 = var_07;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(var_03) || !isdefined(var_04))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_05[0] = var_04;
|
|
var_05[0].ignoreme = 1;
|
|
var_05[0].ignoreall = 1;
|
|
var_05[1] = var_03;
|
|
var_05[1].ignoreme = 1;
|
|
var_05[1].ignoreall = 1;
|
|
var_0B[0] = "boost_jump_kick_02_atk";
|
|
var_0B[1] = "boost_jump_kick_02_def";
|
|
var_02 anim_reach_together_with_overrides(var_05,"boost_jump_kick_02",var_0B);
|
|
if(isalive(var_05[0]) && isalive(var_05[1]))
|
|
{
|
|
var_02 thread maps\_anim::anim_single_solo(var_05[0],"boost_jump_kick_02",undefined,undefined,var_0B[0]);
|
|
var_02 thread maps\_anim::anim_single_solo(var_05[1],"boost_jump_kick_02",undefined,undefined,var_0B[1]);
|
|
var_02 waittill("boost_jump_kick_02");
|
|
var_02 waittill("boost_jump_kick_02");
|
|
var_03 kill_no_react();
|
|
var_04 maps\_utility::enable_ai_color_dontmove();
|
|
}
|
|
|
|
var_05[0].ignoreme = 0;
|
|
var_05[0].ignoreall = 0;
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 64
|
|
lunging_take_down(param_00,param_01,param_02)
|
|
{
|
|
var_03 = getnodearray(param_00,"targetname");
|
|
var_03 = common_scripts\utility::array_randomize(var_03);
|
|
var_04 = undefined;
|
|
var_05 = undefined;
|
|
var_06 = undefined;
|
|
var_07 = [];
|
|
foreach(var_09 in var_03)
|
|
{
|
|
var_05 = undefined;
|
|
var_06 = undefined;
|
|
var_0A = vectornormalize(anglestoforward(var_09.angles));
|
|
var_0B = vectornormalize(-1 * anglestoright(var_09.angles));
|
|
var_05 = get_closest_ai_to_origin(var_09.origin,"axis",0,150);
|
|
if(!isdefined(var_05))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_06 = get_closest_ai_to_origin(var_09.origin,"allies",450,900,0,20,var_0B);
|
|
if(isdefined(var_05) && isdefined(var_06))
|
|
{
|
|
var_04 = var_09;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(isdefined(param_01))
|
|
{
|
|
var_06 = param_01;
|
|
}
|
|
|
|
if(isdefined(param_02))
|
|
{
|
|
var_05 = param_02;
|
|
}
|
|
|
|
if(!isdefined(var_05) || !isdefined(var_06))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(var_04))
|
|
{
|
|
var_04 = var_03[0];
|
|
}
|
|
|
|
var_07[0] = var_06;
|
|
var_07[0].ignoreme = 1;
|
|
var_07[0].ignoreall = 1;
|
|
var_07[1] = var_05;
|
|
var_07[1].ignoreme = 1;
|
|
var_07[1].ignoreall = 1;
|
|
var_0D[0] = "boost_jump_kick_01_atk";
|
|
var_0D[1] = "boost_jump_kick_01_def";
|
|
var_04 anim_reach_together_with_overrides(var_07,"boost_jump_kick_01",var_0D);
|
|
if(isalive(var_07[0]) && isalive(var_07[1]))
|
|
{
|
|
var_04 thread maps\_anim::anim_single_solo(var_07[0],"boost_jump_kick_01",undefined,0.25,var_0D[0]);
|
|
var_04 thread maps\_anim::anim_single_solo(var_07[1],"boost_jump_kick_01",undefined,undefined,var_0D[1]);
|
|
var_04 waittill("boost_jump_kick_01");
|
|
var_04 waittill("boost_jump_kick_01");
|
|
var_05 kill_no_react();
|
|
var_06 maps\_utility::enable_ai_color_dontmove();
|
|
}
|
|
|
|
var_07[0].ignoreme = 0;
|
|
var_07[0].ignoreall = 0;
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 65
|
|
get_closest_ai_to_origin(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
param_02 = validate_min_value(param_02,0);
|
|
param_03 = validate_max_value(param_03,param_02,999999);
|
|
param_04 = validate_min_value(param_04,0);
|
|
param_05 = validate_max_value(param_05,param_04,180);
|
|
var_07 = cos(param_04);
|
|
var_08 = cos(param_05);
|
|
var_09 = [];
|
|
if(isdefined(param_01))
|
|
{
|
|
var_09 = getaiarray(param_01);
|
|
}
|
|
else
|
|
{
|
|
var_09 = getaiarray();
|
|
}
|
|
|
|
var_0A = undefined;
|
|
var_0B = 99999;
|
|
foreach(var_0D in var_09)
|
|
{
|
|
var_0E = distance(var_0D.origin,param_00);
|
|
if(var_0E < param_02 || var_0E > param_03)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(param_06))
|
|
{
|
|
var_0F = vectornormalize(var_0D.origin - param_00);
|
|
var_10 = vectordot(var_0F,param_06);
|
|
if(var_10 < var_08 || var_10 > var_07)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if(var_0E < var_0B)
|
|
{
|
|
var_0B = var_0E;
|
|
var_0A = var_0D;
|
|
}
|
|
}
|
|
|
|
return var_0A;
|
|
}
|
|
|
|
//Function Number: 66
|
|
validate_min_value(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_00) || param_00 < param_01)
|
|
{
|
|
return param_01;
|
|
}
|
|
|
|
return param_00;
|
|
}
|
|
|
|
//Function Number: 67
|
|
validate_max_value(param_00,param_01,param_02)
|
|
{
|
|
if(isdefined(param_00) && param_00 < param_01)
|
|
{
|
|
return param_01;
|
|
}
|
|
else if(!isdefined(param_00))
|
|
{
|
|
return param_02;
|
|
}
|
|
|
|
return param_00;
|
|
}
|
|
|
|
//Function Number: 68
|
|
kill_no_react()
|
|
{
|
|
if(!isalive(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.allowdeath = 1;
|
|
self.a.nodeath = 1;
|
|
thread maps\_utility::set_battlechatter(0);
|
|
self kill();
|
|
}
|
|
|
|
//Function Number: 69
|
|
anim_reach_together_with_overrides(param_00,param_01,param_02)
|
|
{
|
|
thread maps\_anim::modify_moveplaybackrate_together(param_00);
|
|
var_03 = self.origin;
|
|
var_04 = self.angles;
|
|
var_05 = spawnstruct();
|
|
var_06 = 0;
|
|
for(var_07 = 0;var_07 < param_00.size;var_07++)
|
|
{
|
|
if(isdefined(level.scr_anim[param_02[var_07]][param_01]))
|
|
{
|
|
if(isarray(level.scr_anim[param_02[var_07]][param_01]))
|
|
{
|
|
var_08 = getstartorigin(var_03,var_04,level.scr_anim[param_02[var_07]][param_01][0]);
|
|
}
|
|
else
|
|
{
|
|
var_08 = getstartorigin(var_03,var_04,level.scr_anim[param_02[var_07]][param_01]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_08 = var_03;
|
|
}
|
|
|
|
var_06++;
|
|
param_00[var_07] thread maps\_anim::begin_anim_reach(var_05,var_08,::maps\_anim::reach_with_standard_adjustments_begin,::maps\_anim::reach_with_standard_adjustments_end);
|
|
}
|
|
|
|
while(var_06)
|
|
{
|
|
var_05 waittill("reach_notify");
|
|
var_06--;
|
|
}
|
|
|
|
foreach(var_0A in param_00)
|
|
{
|
|
if(!isalive(var_0A))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_0A.goalradius = var_0A.oldgoalradius;
|
|
var_0A.scriptedarrivalent = undefined;
|
|
var_0A.stopanimdistsq = 0;
|
|
}
|
|
}
|
|
|
|
//Function Number: 70
|
|
open_car_doors()
|
|
{
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_compact_both",::open_car_door,"compact","open_door_both");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_compact_left",::open_car_door,"compact","open_door_left");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_compact_right",::open_car_door,"compact","open_door_right");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_truck_both",::open_car_door,"truck","open_door_both");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_truck_left",::open_car_door,"truck","open_door_left");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_truck_right",::open_car_door,"truck","open_door_right");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_atlas_suv_both",::open_car_door,"atlas_suv","open_door_both");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_atlas_suv_left",::open_car_door,"atlas_suv","open_door_left");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_atlas_suv_right",::open_car_door,"atlas_suv","open_door_right");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_sedan_both",::open_car_door,"sedan","open_door_both");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_sedan_left",::open_car_door,"sedan","open_door_left");
|
|
common_scripts\utility::run_thread_on_noteworthy("door_open_sedan_right",::open_car_door,"sedan","open_door_right");
|
|
}
|
|
|
|
//Function Number: 71
|
|
open_car_door(param_00,param_01)
|
|
{
|
|
if(self.classname != "script_model")
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.animname = param_00;
|
|
self useanimtree(#animtree);
|
|
self setanim(maps\_utility::getanim(param_01));
|
|
}
|
|
|
|
//Function Number: 72
|
|
container_death_anims()
|
|
{
|
|
self.specialdeathfunc = ::use_container_death;
|
|
}
|
|
|
|
//Function Number: 73
|
|
use_container_death()
|
|
{
|
|
if(isdefined(self.script_noteworthy) && self.script_noteworthy == "container_death")
|
|
{
|
|
self.deathanim = maps\_utility::getgenericanim("container_death");
|
|
animscripts\death::playdeathanim(self.deathanim);
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 74
|
|
balcony_death_anims()
|
|
{
|
|
self.animname = "generic";
|
|
self.deathfunction = ::try_balcony_death;
|
|
}
|
|
|
|
//Function Number: 75
|
|
try_balcony_death()
|
|
{
|
|
if(!isdefined(self))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(self.a.pose == "prone")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(self.script_noteworthy) && self.script_noteworthy == "container_death")
|
|
{
|
|
self.deathanim = maps\_utility::getgenericanim("container_death");
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(self.prevnode))
|
|
{
|
|
if(isdefined(self.prevnode.script_balcony))
|
|
{
|
|
var_00 = self.angles[1];
|
|
if(var_00 > 180)
|
|
{
|
|
var_00 = var_00 - 360;
|
|
}
|
|
|
|
var_01 = self.prevnode.angles[1];
|
|
if(var_01 > 180)
|
|
{
|
|
var_01 = var_01 - 360;
|
|
}
|
|
|
|
var_02 = abs(var_00 - var_01);
|
|
if(var_02 > 90)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_03 = distance(self.origin,self.prevnode.origin);
|
|
if(var_03 > 92)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(level.last_balcony_death))
|
|
{
|
|
level.last_balcony_death = -4000;
|
|
}
|
|
|
|
var_04 = gettime() - level.last_balcony_death;
|
|
if(var_04 < 2000)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_05 = maps\_utility::getgenericanim("balcony_death");
|
|
self.deathanim = var_05[randomint(var_05.size)];
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 76
|
|
temp_subtitle(param_00,param_01,param_02)
|
|
{
|
|
var_03 = newhudelem();
|
|
var_03.x = 0;
|
|
var_03.y = -42;
|
|
var_03 settext(param_00);
|
|
var_03.fontscale = 1.46;
|
|
var_03.alignx = "center";
|
|
var_03.aligny = "middle";
|
|
var_03.horzalign = "center";
|
|
var_03.vertalign = "bottom";
|
|
var_03.sort = 1;
|
|
wait(param_01);
|
|
var_03 destroy();
|
|
}
|
|
|
|
//Function Number: 77
|
|
init_bobbing_boats()
|
|
{
|
|
level.bobbing_objects = [];
|
|
var_00 = maps\_bobbing_boats::createdefaultbobsettings();
|
|
var_01 = getentarray("bobbing_ship","script_noteworthy");
|
|
maps\_bobbing_boats::prep_bobbing(var_01,::maps\_bobbing_boats::bobbingobject,var_00,0);
|
|
level.bobbing_objects = maps\_shg_utility::array_combine_unique(level.bobbing_objects,var_01);
|
|
var_02 = maps\_bobbing_boats::createdefaultbobsettings();
|
|
var_02.max_pitch = 1;
|
|
var_03 = getentarray("bobbing_ship_big","script_noteworthy");
|
|
maps\_bobbing_boats::prep_bobbing(var_03,::maps\_bobbing_boats::bobbingobject,var_02,0);
|
|
level.bobbing_objects = maps\_shg_utility::array_combine_unique(level.bobbing_objects,var_03);
|
|
maps\_bobbing_boats::start_bobbing(level.bobbing_objects);
|
|
}
|
|
|
|
//Function Number: 78
|
|
intro_drive_hint()
|
|
{
|
|
common_scripts\utility::flag_wait("flag_intro_give_player_driving");
|
|
maps\_utility::hintdisplayhandler("drive_hint");
|
|
var_00 = gettime();
|
|
while(gettime() < var_00 + 4000)
|
|
{
|
|
if(level.player_pitbull.veh_speed > 5)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_B"))
|
|
{
|
|
break;
|
|
}
|
|
|
|
level.player_pitbull vehphys_setspeed(35);
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 79
|
|
player_is_driving()
|
|
{
|
|
if(common_scripts\utility::flag("missionfailed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(level.player_pitbull.veh_speed > 50)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 80
|
|
intro_shoot_hint()
|
|
{
|
|
maps\_utility::hintdisplayhandler("shoot_hint");
|
|
}
|
|
|
|
//Function Number: 81
|
|
player_is_shooting()
|
|
{
|
|
if(common_scripts\utility::flag("missionfailed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("flag_final_crash_scene_playing"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("flag_reverse_hint_displayed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(!level.console && !level.player common_scripts\utility::is_player_gamepad_enabled() && level.player attackbuttonpressed())
|
|
{
|
|
common_scripts\utility::flag_set("flag_player_has_shot_pitbull");
|
|
return 1;
|
|
}
|
|
else if(level.player common_scripts\utility::is_player_gamepad_enabled() && level.player adsbuttonpressed())
|
|
{
|
|
common_scripts\utility::flag_set("flag_player_has_shot_pitbull");
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 82
|
|
boost_jump_hint()
|
|
{
|
|
maps\_utility::display_hint("boost_hint");
|
|
}
|
|
|
|
//Function Number: 83
|
|
player_has_jumped()
|
|
{
|
|
if(common_scripts\utility::flag("missionfailed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(level.player jumpbuttonpressed())
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 84
|
|
player_too_far_hint()
|
|
{
|
|
if(common_scripts\utility::flag("flag_hint_player_too_far"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_set("flag_hint_player_too_far");
|
|
maps\_utility::hintdisplayhandler("too_far_hint");
|
|
}
|
|
|
|
//Function Number: 85
|
|
player_has_caught_up()
|
|
{
|
|
if(common_scripts\utility::flag("missionfailed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("flag_hint_player_too_far"))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 86
|
|
player_left_road_hint()
|
|
{
|
|
if(common_scripts\utility::flag("flag_hint_player_left_road"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_set("flag_hint_player_left_road");
|
|
maps\_utility::hintdisplayhandler("left_road_hint");
|
|
}
|
|
|
|
//Function Number: 87
|
|
player_has_returned_to_road()
|
|
{
|
|
if(common_scripts\utility::flag("missionfailed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("flag_hint_player_left_road"))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 88
|
|
player_left_squad_hint()
|
|
{
|
|
if(common_scripts\utility::flag("flag_hint_player_left_squad"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_set("flag_hint_player_left_squad");
|
|
maps\_utility::display_hint("left_squad_hint");
|
|
}
|
|
|
|
//Function Number: 89
|
|
player_has_returned_to_squad()
|
|
{
|
|
if(common_scripts\utility::flag("missionfailed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("flag_hint_player_left_squad"))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 90
|
|
start_civilian_group(param_00,param_01)
|
|
{
|
|
if(isdefined(param_01))
|
|
{
|
|
wait(param_01);
|
|
}
|
|
|
|
if(!isdefined(level.civilian_group))
|
|
{
|
|
level.civilian_group = [];
|
|
}
|
|
|
|
var_02 = getentarray(param_00,"targetname");
|
|
maps\_utility::array_spawn_function_targetname(param_00,::civilian_drone_setup);
|
|
level.aud.bridge_civs = [];
|
|
common_scripts\utility::array_thread(var_02,::maps\_utility::spawn_ai);
|
|
soundscripts\_snd::snd_message("panic_walla",param_00);
|
|
}
|
|
|
|
//Function Number: 91
|
|
civilian_drone_setup()
|
|
{
|
|
self endon("death");
|
|
self endon("delete");
|
|
level.aud.bridge_civs[level.aud.bridge_civs.size] = self;
|
|
self.goalradius = 32;
|
|
self.ignoreall = 1;
|
|
self.ignoreme = 1;
|
|
self.animname = "drone";
|
|
self.drone_move_callback = ::civilian_drone_run_override;
|
|
level.civilian_group[level.civilian_group.size] = self;
|
|
thread civilian_drone_runner_collision();
|
|
soundscripts\_snd::snd_message("panic_walla_oneshots",self);
|
|
self waittill("goal");
|
|
self stopanimscripted();
|
|
self notify("drone_stop");
|
|
self notify("stop_loop");
|
|
self notify("single anim","end");
|
|
self notify("looping anim","end");
|
|
thread maps\_anim::anim_loop_solo(self,"civilian_cower");
|
|
for(;;)
|
|
{
|
|
wait(0.5);
|
|
if(distance(level.player.origin,self.origin) > 1000)
|
|
{
|
|
if(!maps\_utility::player_looking_at(self.origin,undefined,1))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 92
|
|
street_civilian_clean_up()
|
|
{
|
|
if(isdefined(level.civilian_group))
|
|
{
|
|
maps\_utility::ai_delete_when_out_of_sight(level.civilian_group,200);
|
|
level.civilian_group = common_scripts\utility::array_removeundefined(level.civilian_group);
|
|
}
|
|
}
|
|
|
|
//Function Number: 93
|
|
civilian_drone_run_override()
|
|
{
|
|
var_00 = undefined;
|
|
if(!isdefined(self.drone_run_number))
|
|
{
|
|
self.drone_run_number = randomintrange(1,8);
|
|
}
|
|
|
|
if(!isdefined(self.drone_move_time))
|
|
{
|
|
self.drone_move_time = -1000;
|
|
}
|
|
|
|
if(gettime() > self.drone_move_time)
|
|
{
|
|
var_00 = spawnstruct();
|
|
var_01 = level.scr_anim["drone"]["run_0" + self.drone_run_number];
|
|
if(isarray(var_01))
|
|
{
|
|
var_01 = common_scripts\utility::array_randomize(var_01);
|
|
var_00.runanim = var_01[0];
|
|
}
|
|
else
|
|
{
|
|
var_00.runanim = var_01;
|
|
}
|
|
|
|
var_02 = maps\_drone::get_anim_data(var_00.runanim);
|
|
var_00.anim_relative = var_02.anim_relative;
|
|
var_00.run_speed = var_02.run_speed;
|
|
self.drone_move_time = gettime() + var_02.anim_time / self.moveplaybackrate * 1000;
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 94
|
|
civilian_drone_runner_collision()
|
|
{
|
|
self endon("goal");
|
|
self endon("death");
|
|
while(isdefined(self))
|
|
{
|
|
while(distance(self.origin,level.player.origin) > 100)
|
|
{
|
|
wait(0.1);
|
|
}
|
|
|
|
var_00 = self setcontents(0);
|
|
while(distance(self.origin,level.player.origin) <= 100)
|
|
{
|
|
wait(0.1);
|
|
}
|
|
|
|
self setcontents(var_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 95
|
|
civilian_get_out_of_car_setup(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
var_05 = get_civilian_car(param_00);
|
|
var_06 = get_civilian(param_01,var_05["model"].animname);
|
|
level thread civilian_in_car_get_out(var_05,var_06,param_02,param_03,param_04);
|
|
}
|
|
|
|
//Function Number: 96
|
|
get_civilian_car(param_00)
|
|
{
|
|
var_01 = getentarray(param_00,"targetname");
|
|
var_02 = [];
|
|
foreach(var_04 in var_01)
|
|
{
|
|
if(var_04.classname == "script_model")
|
|
{
|
|
var_02["model"] = var_04;
|
|
continue;
|
|
}
|
|
|
|
if(var_04.classname == "script_brushmodel")
|
|
{
|
|
if(isdefined(var_04.script_noteworthy) && var_04.script_noteworthy == "door_open_col")
|
|
{
|
|
var_02["door"] = var_04;
|
|
var_02["door"] notsolid();
|
|
var_02["door"] connectpaths();
|
|
}
|
|
else
|
|
{
|
|
var_02["col"] = var_04;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if(issubstr(var_02["model"].model,"sedan"))
|
|
{
|
|
var_02["model"].animname = "sedan";
|
|
var_02["model"] useanimtree(#animtree);
|
|
}
|
|
else if(issubstr(var_02["model"].model,"compact") || issubstr(var_02["model"].model,"economy"))
|
|
{
|
|
var_02["model"].animname = "compact";
|
|
var_02["model"] useanimtree(#animtree);
|
|
}
|
|
else if(issubstr(var_02["model"].model,"truck"))
|
|
{
|
|
var_02["model"].animname = "truck";
|
|
var_02["model"] useanimtree(#animtree);
|
|
}
|
|
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 97
|
|
get_civilian(param_00,param_01)
|
|
{
|
|
var_02 = [];
|
|
var_03 = getent(param_00,"targetname");
|
|
var_02["ai"] = var_03 maps\_utility::spawn_ai(1,0);
|
|
var_02["ai"].ignoresonicaoe = 1;
|
|
level.civilian_group[level.civilian_group.size] = var_02["ai"];
|
|
var_02["ai"].ignoreall = 1;
|
|
var_02["ai"].animname = param_01 + "_driver";
|
|
if(isdefined(var_03.target))
|
|
{
|
|
var_02["goal"] = getnode(var_03.target,"targetname");
|
|
}
|
|
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 98
|
|
civilian_in_car_get_out(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
level.player endon("death");
|
|
if(!isdefined(level.last_car_exit_index))
|
|
{
|
|
level.last_car_exit_index = -1;
|
|
}
|
|
|
|
var_05 = undefined;
|
|
if(isdefined(param_04))
|
|
{
|
|
var_05 = param_04;
|
|
level.last_car_exit_index = var_05;
|
|
}
|
|
else
|
|
{
|
|
for(;;)
|
|
{
|
|
if(isdefined(param_03) && param_03 == 1)
|
|
{
|
|
var_05 = randomintrange(4,8);
|
|
}
|
|
else
|
|
{
|
|
var_05 = randomintrange(1,4);
|
|
}
|
|
|
|
if(var_05 != level.last_car_exit_index)
|
|
{
|
|
level.last_car_exit_index = var_05;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
param_00["model"] thread maps\_anim::anim_loop_solo(param_01["ai"],"loop_0" + var_05,"stop_driver_loop","tag_driver");
|
|
level waittill(param_02);
|
|
wait(randomfloatrange(0,2));
|
|
param_01["ai"] maps\_utility::set_run_anim("run_0" + var_05,1);
|
|
param_01["ai"].run_override_weights = undefined;
|
|
param_00["model"] notify("stop_driver_loop");
|
|
param_00["model"] thread maps\_anim::anim_single_solo(param_00["model"],"get_out_0" + var_05);
|
|
param_00["model"] maps\_anim::anim_single_solo_run(param_01["ai"],"get_out_0" + var_05,"tag_driver");
|
|
param_01["ai"].ignoresonicaoe = 0;
|
|
param_01["ai"] thread maps\_spawner::go_to_node(param_01["goal"]);
|
|
soundscripts\_snd::snd_message("panic_walla_oneshots",param_01["ai"]);
|
|
param_01["ai"] thread cower_cleanup_civs_on_goal();
|
|
for(;;)
|
|
{
|
|
var_06 = 0;
|
|
if(level.player istouching(param_00["door"]))
|
|
{
|
|
var_06 = 1;
|
|
}
|
|
|
|
var_07 = getaiarray();
|
|
foreach(param_01 in var_07)
|
|
{
|
|
if(isalive(param_01) && param_01 istouching(param_00["door"]))
|
|
{
|
|
var_06 = 1;
|
|
}
|
|
}
|
|
|
|
if(!var_06)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
|
|
param_00["door"] disconnectpaths();
|
|
param_00["door"] solid();
|
|
}
|
|
|
|
//Function Number: 99
|
|
cleanup_on_goal()
|
|
{
|
|
self waittill("goal");
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 100
|
|
cower_cleanup_civs_on_goal()
|
|
{
|
|
self waittill("goal");
|
|
self stopanimscripted();
|
|
self notify("drone_stop");
|
|
self notify("stop_loop");
|
|
self notify("single anim","end");
|
|
self notify("looping anim","end");
|
|
thread maps\_anim::anim_loop_solo(self,"civilian_cower");
|
|
for(;;)
|
|
{
|
|
wait(0.5);
|
|
if(distance(level.player.origin,self.origin) > 1000)
|
|
{
|
|
if(!maps\_utility::player_looking_at(self.origin,undefined,1))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 101
|
|
civilian_loop_setup(param_00,param_01,param_02)
|
|
{
|
|
var_03 = [];
|
|
var_04 = getent(param_00,"targetname");
|
|
var_03[0] = var_04 maps\_utility::spawn_ai(1,0);
|
|
if(!isdefined(var_03[0]))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_03[0].animname = "civilian";
|
|
var_03[0].ignoreall = 1;
|
|
if(isdefined(param_01))
|
|
{
|
|
var_05 = getent(param_01,"targetname");
|
|
var_03[1] = var_05 maps\_utility::spawn_ai(1,0);
|
|
if(!isdefined(var_03[1]))
|
|
{
|
|
var_03[0].script_noteworthy = "seated";
|
|
}
|
|
else
|
|
{
|
|
var_03[1].animname = "civilian_b";
|
|
var_03[1].ignoreall = 1;
|
|
}
|
|
}
|
|
|
|
level thread start_civilian_loop_anims(var_03,param_02);
|
|
if(isdefined(var_04.target))
|
|
{
|
|
var_03[0] thread civilian_loop_vo_trigger(var_04);
|
|
}
|
|
|
|
foreach(var_07 in var_03)
|
|
{
|
|
var_07 thread no_civilian_friendly_fire_until_seen();
|
|
}
|
|
}
|
|
|
|
//Function Number: 102
|
|
no_civilian_friendly_fire_until_seen()
|
|
{
|
|
self endon("death");
|
|
self.no_friendly_fire_penalty = 1;
|
|
var_00 = 0.05;
|
|
if(level.currentgen)
|
|
{
|
|
var_00 = 1;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
if(maps\_utility::player_can_see_ai(self))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(player_can_see_civ(self))
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(var_00);
|
|
}
|
|
|
|
self.no_friendly_fire_penalty = undefined;
|
|
}
|
|
|
|
//Function Number: 103
|
|
player_can_see_civ(param_00)
|
|
{
|
|
if(!common_scripts\utility::within_fov(level.player.origin,level.player.angles,param_00.origin,0.743))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = level.player geteye();
|
|
var_02 = undefined;
|
|
for(var_03 = 0;var_03 < 2;var_03++)
|
|
{
|
|
var_04 = param_00.origin;
|
|
var_05 = param_00 geteye();
|
|
var_06 = var_05 + var_04 * 0.5;
|
|
var_07 = bullettrace(var_01,var_06,0,var_02);
|
|
if(var_07["fraction"] < 0.99)
|
|
{
|
|
if(isdefined(var_07["entity"]) && isai(var_07["entity"]) && var_07["entity"] != param_00)
|
|
{
|
|
var_02 = var_07["entity"];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(!isdefined(var_02))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 104
|
|
start_civilian_loop_anims(param_00,param_01)
|
|
{
|
|
wait(randomfloatrange(0,1));
|
|
if(isalive(param_00[0]))
|
|
{
|
|
param_00[0] maps\_utility::magic_bullet_shield();
|
|
param_00[0] thread civ_damage_check();
|
|
}
|
|
|
|
if(isalive(param_00[1]))
|
|
{
|
|
param_00[1] maps\_utility::magic_bullet_shield();
|
|
param_00[1] thread civ_damage_check();
|
|
}
|
|
|
|
if(isalive(param_00[0]) && !isalive(param_00[1]))
|
|
{
|
|
if(param_00[0].script_noteworthy == "paired")
|
|
{
|
|
param_00[0].script_noteworthy = "seated";
|
|
}
|
|
}
|
|
else if(!isalive(param_00[0]) && isalive(param_00[1]))
|
|
{
|
|
param_00[0] = param_00[1];
|
|
param_00[1] = undefined;
|
|
param_00[0].script_noteworthy = "seated";
|
|
}
|
|
else if(!isalive(param_00[0]) && !isalive(param_00[1]))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(param_00[0].script_noteworthy))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(param_00[0].script_noteworthy == "laying")
|
|
{
|
|
if(randomint(100) < 50)
|
|
{
|
|
var_02 = "laying_1";
|
|
}
|
|
else
|
|
{
|
|
var_02 = "laying_2";
|
|
}
|
|
|
|
param_00[0] thread maps\_anim::anim_loop_solo(param_00[0],var_02,param_01);
|
|
}
|
|
else if(param_00[0].script_noteworthy == "seated")
|
|
{
|
|
var_03 = randomint(100);
|
|
if(var_03 < 33)
|
|
{
|
|
var_02 = "seated_1";
|
|
}
|
|
else if(var_02 < 66)
|
|
{
|
|
var_02 = "seated_2";
|
|
}
|
|
else
|
|
{
|
|
var_02 = "seated_3";
|
|
}
|
|
|
|
param_00[0] thread maps\_anim::anim_loop_solo(param_00[0],var_02,param_01);
|
|
}
|
|
else if(param_00[0].script_noteworthy == "paired")
|
|
{
|
|
if(randomint(100) < 50)
|
|
{
|
|
var_02 = "paired_1";
|
|
}
|
|
else
|
|
{
|
|
var_02 = "paired_2";
|
|
}
|
|
|
|
param_00[0] thread maps\_anim::anim_loop(param_00,var_02,param_01);
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
level thread civilian_clean_up(param_00,param_01);
|
|
}
|
|
|
|
//Function Number: 105
|
|
civ_damage_check()
|
|
{
|
|
self endon("death");
|
|
self waittill("damage",var_00,var_01,var_02,var_03,var_04);
|
|
if(isplayer(var_01))
|
|
{
|
|
if(isdefined(self.magic_bullet_shield))
|
|
{
|
|
maps\_utility::stop_magic_bullet_shield();
|
|
}
|
|
|
|
self startragdoll();
|
|
}
|
|
}
|
|
|
|
//Function Number: 106
|
|
civilian_loop_vo_trigger(param_00)
|
|
{
|
|
self endon("death");
|
|
var_01 = getent(param_00.target,"targetname");
|
|
var_01 endon("death");
|
|
if(isdefined(var_01))
|
|
{
|
|
for(;;)
|
|
{
|
|
var_01 waittill("trigger",var_02);
|
|
if(var_02 == level.player)
|
|
{
|
|
maps\sanfran_vo::play_civilian_dialog(self);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 107
|
|
civilian_clean_up(param_00,param_01)
|
|
{
|
|
level waittill(param_01);
|
|
wait(1);
|
|
foreach(var_03 in param_00)
|
|
{
|
|
if(isalive(var_03))
|
|
{
|
|
if(isdefined(var_03.magic_bullet_shield))
|
|
{
|
|
var_03 maps\_utility::stop_magic_bullet_shield();
|
|
var_03 notify(param_01);
|
|
var_03 delete();
|
|
continue;
|
|
}
|
|
|
|
var_03 notify(param_01);
|
|
var_03 delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 108
|
|
add_spawn_behavior(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
foreach(var_07 in self.spawn_functions)
|
|
{
|
|
var_08 = 1;
|
|
if(var_07["function"] != param_00)
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
else
|
|
{
|
|
if(isdefined(var_07["param1"]))
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
else if(var_07["param1"] != param_01)
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
}
|
|
else if(isdefined(param_01))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
|
|
if(isdefined(var_07["param2"]))
|
|
{
|
|
if(!isdefined(param_02))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
else if(var_07["param2"] != param_02)
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
}
|
|
else if(isdefined(param_02))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
|
|
if(isdefined(var_07["param3"]))
|
|
{
|
|
if(!isdefined(param_03))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
else if(var_07["param3"] != param_03)
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
}
|
|
else if(isdefined(param_03))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
|
|
if(isdefined(var_07["param4"]))
|
|
{
|
|
if(!isdefined(param_04))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
else if(var_07["param4"] != param_04)
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
}
|
|
else if(isdefined(param_04))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
|
|
if(isdefined(var_07["param5"]))
|
|
{
|
|
if(!isdefined(param_05))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
else if(var_07["param5"] != param_05)
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
}
|
|
else if(isdefined(param_05))
|
|
{
|
|
var_08 = 0;
|
|
}
|
|
}
|
|
|
|
if(var_08 == 1)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
var_0A = [];
|
|
var_0A["function"] = param_00;
|
|
var_0A["param1"] = param_01;
|
|
var_0A["param2"] = param_02;
|
|
var_0A["param3"] = param_03;
|
|
var_0A["param4"] = param_04;
|
|
var_0A["param5"] = param_05;
|
|
self.spawn_functions[self.spawn_functions.size] = var_0A;
|
|
}
|
|
|
|
//Function Number: 109
|
|
ai_run_behavior_until_condition(param_00,param_01,param_02)
|
|
{
|
|
self endon("death");
|
|
if(isdefined(param_00))
|
|
{
|
|
[[ param_00 ]](self);
|
|
}
|
|
|
|
if(isdefined(param_02))
|
|
{
|
|
[[ param_02 ]](self);
|
|
}
|
|
|
|
if(isdefined(param_01))
|
|
{
|
|
[[ param_01 ]](self);
|
|
}
|
|
}
|
|
|
|
//Function Number: 110
|
|
ai_cond_reached_goal(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
param_00 waittill("goal");
|
|
}
|
|
|
|
//Function Number: 111
|
|
ai_cond_reached_path_end(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
param_00 waittill("reached_path_end");
|
|
}
|
|
|
|
//Function Number: 112
|
|
ai_cond_player_at_police_battle(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait("flag_player_at_police_battle");
|
|
}
|
|
|
|
//Function Number: 113
|
|
ai_cond_player_at_tanker_battle(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait("flag_player_at_tanker_battle");
|
|
}
|
|
|
|
//Function Number: 114
|
|
ai_cond_player_at_ambient_battle(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait("flag_player_at_ambient_battle");
|
|
}
|
|
|
|
//Function Number: 115
|
|
ai_cond_player_at_pitbull_battle(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait("flag_player_at_pitbull_battle");
|
|
if(param_00 == level.bravo)
|
|
{
|
|
param_00 waittill("dialog_done");
|
|
}
|
|
}
|
|
|
|
//Function Number: 116
|
|
ai_cond_player_at_escape_battle(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait("flag_player_at_escape_battle");
|
|
}
|
|
|
|
//Function Number: 117
|
|
ai_cond_player_at_standoff_battle(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait("flag_player_at_standoff_battle");
|
|
}
|
|
|
|
//Function Number: 118
|
|
ai_cond_player_at_standoff_battle_or_danger_zone(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait_either("flag_player_at_standoff_battle","railing_danger_zone_touching");
|
|
}
|
|
|
|
//Function Number: 119
|
|
ai_cond_player_at_van(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
common_scripts\utility::flag_wait("flag_van_explosion_deploy");
|
|
}
|
|
|
|
//Function Number: 120
|
|
ai_empty(param_00)
|
|
{
|
|
}
|
|
|
|
//Function Number: 121
|
|
ai_start_magic_bullet_shield(param_00)
|
|
{
|
|
param_00 maps\_utility::magic_bullet_shield();
|
|
}
|
|
|
|
//Function Number: 122
|
|
ai_end_magic_bullet_shield(param_00)
|
|
{
|
|
if(isdefined(param_00.magic_bullet_shield) && param_00.magic_bullet_shield == 1)
|
|
{
|
|
param_00 maps\_utility::stop_magic_bullet_shield();
|
|
}
|
|
}
|
|
|
|
//Function Number: 123
|
|
ai_start_ignore_all(param_00)
|
|
{
|
|
param_00.ignoreall = 1;
|
|
}
|
|
|
|
//Function Number: 124
|
|
ai_end_ignore_all(param_00)
|
|
{
|
|
param_00.ignoreall = 0;
|
|
}
|
|
|
|
//Function Number: 125
|
|
ai_start_ignore_me(param_00)
|
|
{
|
|
param_00.ignoreme = 1;
|
|
}
|
|
|
|
//Function Number: 126
|
|
ai_end_ignore_me(param_00)
|
|
{
|
|
param_00.ignoreme = 0;
|
|
}
|
|
|
|
//Function Number: 127
|
|
ai_start_pacifist(param_00)
|
|
{
|
|
param_00.pacifist = 1;
|
|
}
|
|
|
|
//Function Number: 128
|
|
ai_end_fixed_node(param_00)
|
|
{
|
|
param_00.fixednode = 0;
|
|
}
|
|
|
|
//Function Number: 129
|
|
ai_delete_self(param_00)
|
|
{
|
|
if(isdefined(param_00.magic_bullet_shield) && param_00.magic_bullet_shield == 1)
|
|
{
|
|
param_00 maps\_utility::stop_magic_bullet_shield();
|
|
}
|
|
|
|
wait(0.1);
|
|
param_00 delete();
|
|
}
|
|
|
|
//Function Number: 130
|
|
ai_shot_by_player_team_notify()
|
|
{
|
|
self endon("death");
|
|
level endon("ai_shot_by_player_team");
|
|
for(;;)
|
|
{
|
|
self waittill("damage",var_00,var_01);
|
|
if(var_01 == level.player)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(common_scripts\utility::array_contains(level.heroes,var_01))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
level notify("ai_shot_by_player_team");
|
|
}
|
|
|
|
//Function Number: 131
|
|
get_single_living_ent(param_00,param_01)
|
|
{
|
|
var_02 = getentarray(param_00,param_01);
|
|
if(!isdefined(var_02))
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
var_03 = undefined;
|
|
foreach(var_05 in var_02)
|
|
{
|
|
if(!isalive(var_05))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03 = var_05;
|
|
}
|
|
|
|
return var_03;
|
|
}
|
|
|
|
//Function Number: 132
|
|
ai_start_balcony_death(param_00)
|
|
{
|
|
param_00 notify("stop_death_function");
|
|
param_00 balcony_death_anims();
|
|
}
|
|
|
|
//Function Number: 133
|
|
ai_start_respawn_death(param_00)
|
|
{
|
|
param_00 notify("stop_death_function");
|
|
if(!isdefined(param_00.spawner))
|
|
{
|
|
return;
|
|
}
|
|
|
|
param_00.respawn_spawner = param_00.spawner;
|
|
if(!weaponclass(param_00.weapon) == "rocketlauncher")
|
|
{
|
|
param_00.deathfunction = ::try_respawn_death;
|
|
return;
|
|
}
|
|
|
|
param_00 thread wait_till_death_try_respawn_death();
|
|
}
|
|
|
|
//Function Number: 134
|
|
ai_stop_death_function(param_00)
|
|
{
|
|
param_00.deathfunction = undefined;
|
|
param_00 notify("stop_death_function");
|
|
}
|
|
|
|
//Function Number: 135
|
|
wait_till_death_try_respawn_death()
|
|
{
|
|
self endon("stop_death_function");
|
|
self waittill("death");
|
|
try_respawn_death();
|
|
}
|
|
|
|
//Function Number: 136
|
|
try_respawn_death()
|
|
{
|
|
if(!isdefined(self.respawn_spawner))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.respawn_spawner.count++;
|
|
if(isdefined(self.respawn_spawner.script_aigroup))
|
|
{
|
|
self.respawn_spawner thread maps\_spawner::aigroup_spawnerthink(level._ai_group[self.respawn_spawner.script_aigroup]);
|
|
}
|
|
|
|
level thread respawn_death_spawn(self.respawn_spawner);
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 137
|
|
respawn_death_spawn(param_00)
|
|
{
|
|
wait(randomfloatrange(2,6));
|
|
param_00 maps\_utility::spawn_ai(1,0);
|
|
}
|
|
|
|
//Function Number: 138
|
|
ai_add_player_only_damage(param_00)
|
|
{
|
|
param_00 maps\_utility::add_damage_function(::ai_player_only_damage_func);
|
|
}
|
|
|
|
//Function Number: 139
|
|
ai_remove_player_only_damage(param_00)
|
|
{
|
|
param_00 maps\_utility::remove_damage_function(::ai_player_only_damage_func);
|
|
}
|
|
|
|
//Function Number: 140
|
|
ai_player_only_damage_func(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
if(!isplayer(param_01))
|
|
{
|
|
if(isdefined(param_01) && param_01.classname == "trigger_hurt")
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.health = self.health + param_00;
|
|
}
|
|
}
|
|
|
|
//Function Number: 141
|
|
ai_add_twenty_percent_damage(param_00)
|
|
{
|
|
param_00 maps\_utility::add_damage_function(::ai_twenty_percent_damage_func);
|
|
}
|
|
|
|
//Function Number: 142
|
|
ai_remove_twenty_percent_damage(param_00)
|
|
{
|
|
param_00 maps\_utility::remove_damage_function(::ai_twenty_percent_damage_func);
|
|
}
|
|
|
|
//Function Number: 143
|
|
ai_twenty_percent_damage_func(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
if(!isplayer(param_01))
|
|
{
|
|
if(isdefined(param_01) && param_01.classname == "trigger_hurt")
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_07 = int(param_00 * 0.8);
|
|
if(self.health + var_07 > 0)
|
|
{
|
|
self.health = self.health + var_07;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 144
|
|
notify_drones_all_dead(param_00,param_01)
|
|
{
|
|
for(;;)
|
|
{
|
|
var_02 = 0;
|
|
foreach(var_04 in param_00)
|
|
{
|
|
if(isalive(var_04))
|
|
{
|
|
var_02 = 1;
|
|
}
|
|
}
|
|
|
|
if(!var_02)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
|
|
common_scripts\utility::flag_set(param_01);
|
|
}
|
|
|
|
//Function Number: 145
|
|
heli_shoot_enemies()
|
|
{
|
|
self endon("death");
|
|
var_00 = heli_get_shooters();
|
|
foreach(var_02 in var_00)
|
|
{
|
|
var_03 = spawn("script_model",(0,0,0));
|
|
var_03 setmodel("tag_laser");
|
|
var_03.origin = var_02 gettagorigin("tag_flash");
|
|
var_03.angles = var_02 gettagangles("tag_flash");
|
|
var_03 laseron();
|
|
var_02.fake_laser = var_03;
|
|
var_02 thread delete_laser_on_death();
|
|
var_02 thread force_fake_laser_origin_link();
|
|
thread heli_shoot_enemy_trace_then_fire(var_02);
|
|
}
|
|
}
|
|
|
|
//Function Number: 146
|
|
force_fake_laser_origin_link()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
self.fake_laser.origin = self gettagorigin("tag_flash");
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 147
|
|
delete_laser_on_death()
|
|
{
|
|
self waittill("death");
|
|
self.fake_laser delete();
|
|
}
|
|
|
|
//Function Number: 148
|
|
heli_shoot_enemy_trace_then_fire(param_00)
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
wait(0.05);
|
|
var_01 = getaiarray("axis");
|
|
if(var_01.size <= 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01 = common_scripts\utility::array_randomize(var_01);
|
|
var_02 = 0;
|
|
if(randomint(100) < 25)
|
|
{
|
|
var_02 = 1;
|
|
}
|
|
|
|
var_03 = undefined;
|
|
if(var_02)
|
|
{
|
|
var_03 = get_accurate_target(var_01,param_00);
|
|
if(!isdefined(var_03))
|
|
{
|
|
var_03 = var_01[0];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_03 = var_01[0];
|
|
}
|
|
|
|
var_04 = gettime() + randomfloatrange(8,12) * 1000;
|
|
while(gettime() < var_04 && isalive(var_03))
|
|
{
|
|
if(var_03.a.pose == "stand")
|
|
{
|
|
var_05 = var_03.origin + (0,0,64) - param_00.fake_laser.origin;
|
|
}
|
|
else
|
|
{
|
|
var_05 = var_03.origin + (0,0,32) - param_00.fake_laser.origin;
|
|
}
|
|
|
|
var_06 = vectortoangles(var_05);
|
|
param_00.fake_laser rotateto(var_06,0.25);
|
|
wait(0.25);
|
|
}
|
|
|
|
if(maps\_utility::ent_flag("heli_can_shoot") && isalive(var_03))
|
|
{
|
|
var_07 = param_00 gettagorigin("tag_flash");
|
|
if(var_03.a.pose == "stand" || var_02 == 0)
|
|
{
|
|
var_08 = var_03.origin + (0,0,64);
|
|
}
|
|
else
|
|
{
|
|
var_08 = var_04.origin + (0,0,32);
|
|
}
|
|
|
|
var_09 = bullettrace(var_07,var_08,1);
|
|
magicbullet("iw5_mors_sp",var_07,var_08);
|
|
bullettracer(var_07,var_08);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 149
|
|
get_accurate_target(param_00,param_01)
|
|
{
|
|
var_02 = param_01 gettagorigin("tag_flash");
|
|
foreach(var_04 in param_00)
|
|
{
|
|
var_05 = var_04.origin + (0,0,64);
|
|
var_06 = bullettrace(var_02,var_05,1);
|
|
if(isdefined(var_06["entity"]) && var_06["entity"] == var_04)
|
|
{
|
|
return var_04;
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
//Function Number: 150
|
|
heli_get_shooters()
|
|
{
|
|
var_00 = [];
|
|
foreach(var_02 in self.riders)
|
|
{
|
|
if(var_02.vehicle_position == 0 || var_02.vehicle_position == 1)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_00[var_00.size] = var_02;
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 151
|
|
heli_toggle_shoot()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
self waittill("allow_heli_shoot");
|
|
maps\_utility::ent_flag_set("heli_can_shoot");
|
|
common_scripts\utility::flag_set("flag_dialog_street_helo_onsite");
|
|
}
|
|
}
|
|
|
|
//Function Number: 152
|
|
riders_no_damage()
|
|
{
|
|
foreach(var_01 in self.riders)
|
|
{
|
|
var_01 maps\_utility::deletable_magic_bullet_shield();
|
|
}
|
|
}
|
|
|
|
//Function Number: 153
|
|
player_can_see(param_00,param_01)
|
|
{
|
|
var_02 = anglestoforward(level.player.angles);
|
|
var_03 = vectornormalize(param_00 - level.player.origin);
|
|
var_04 = vectordot(var_02,var_03);
|
|
if(var_04 > cos(param_01))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 154
|
|
get_black_overlay()
|
|
{
|
|
if(!isdefined(level.black_overlay))
|
|
{
|
|
level.black_overlay = maps\_hud_util::create_client_overlay("black",0,level.player);
|
|
}
|
|
|
|
level.black_overlay.sort = -1;
|
|
level.black_overlay.foreground = 1;
|
|
return level.black_overlay;
|
|
}
|
|
|
|
//Function Number: 155
|
|
get_white_overlay()
|
|
{
|
|
if(!isdefined(level.white_overlay))
|
|
{
|
|
level.white_overlay = maps\_hud_util::create_client_overlay("white",0,level.player);
|
|
}
|
|
|
|
level.white_overlay.sort = -1;
|
|
level.white_overlay.foreground = 1;
|
|
return level.white_overlay;
|
|
}
|
|
|
|
//Function Number: 156
|
|
blackout(param_00,param_01)
|
|
{
|
|
fadeoverlay(param_00,1,param_01);
|
|
}
|
|
|
|
//Function Number: 157
|
|
restorevision(param_00,param_01)
|
|
{
|
|
fadeoverlay(param_00,0,param_01);
|
|
}
|
|
|
|
//Function Number: 158
|
|
fadeoverlay(param_00,param_01,param_02)
|
|
{
|
|
self fadeovertime(param_00);
|
|
self.alpha = param_01;
|
|
setblur(param_02,param_00);
|
|
wait(param_00);
|
|
}
|
|
|
|
//Function Number: 159
|
|
setup_dont_leave_hint()
|
|
{
|
|
level endon("mission failed");
|
|
for(;;)
|
|
{
|
|
common_scripts\utility::flag_wait("player_leaving_map");
|
|
maps\_utility::display_hint("hint_dont_leave_mission");
|
|
common_scripts\utility::flag_wait_either("player_leaving_map","player_returning_to_map");
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 160
|
|
should_break_dont_leave()
|
|
{
|
|
if(common_scripts\utility::flag("missionfailed"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("player_returning_to_map"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 161
|
|
setup_dont_leave_failure()
|
|
{
|
|
common_scripts\utility::flag_wait("player_left_map");
|
|
level notify("mission failed");
|
|
setdvar("ui_deadquote",&"SANFRAN_FAIL_SKIP_OBJECTIVE");
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
//Function Number: 162
|
|
fall_fail()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
self waittill("trigger",var_00);
|
|
if(var_00 == level.player)
|
|
{
|
|
setblur(5,0.5);
|
|
thread player_falling_kill_logic(1.5);
|
|
level.player disableweapons();
|
|
var_01 = spawn("script_origin",level.player.origin);
|
|
var_01.angles = (-90,360,0);
|
|
var_01 movegravity(level.player getvelocity(),15);
|
|
level.player playerlinktoblend(var_01,undefined,1.2);
|
|
setdvar("ui_deadquote",&"SANFRAN_FAIL_SKIP_OBJECTIVE");
|
|
thread introscreen_generic_fade_out("black",999,0,1);
|
|
maps\_utility::missionfailedwrapper();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 163
|
|
fail_player_for_abandon()
|
|
{
|
|
for(;;)
|
|
{
|
|
var_00 = -1;
|
|
foreach(var_02 in level.heroes)
|
|
{
|
|
if(var_02.origin[0] > level.player.origin[0])
|
|
{
|
|
var_00 = -1;
|
|
break;
|
|
}
|
|
|
|
var_03 = level.player.origin[0] - var_02.origin[0];
|
|
if(var_03 < var_00 || var_00 == -1)
|
|
{
|
|
var_00 = var_03;
|
|
}
|
|
}
|
|
|
|
if(var_00 != -1)
|
|
{
|
|
if(var_00 > 3000)
|
|
{
|
|
setdvar("ui_deadquote",&"SANFRAN_FAIL_LEAVING_SQUAD");
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
else if(var_00 > 2500)
|
|
{
|
|
player_left_squad_hint();
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_clear("flag_hint_player_left_squad");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_clear("flag_hint_player_left_squad");
|
|
}
|
|
|
|
wait(0.15);
|
|
}
|
|
}
|
|
|
|
//Function Number: 164
|
|
player_abandon_squad_distance_think()
|
|
{
|
|
level endon("gg_start_bridge_collapse");
|
|
level.axis_global_accuracy_mod = 0;
|
|
var_00 = 1200;
|
|
var_01 = undefined;
|
|
var_02 = -1;
|
|
for(;;)
|
|
{
|
|
if(level.burke.origin[0] < level.player.origin[0])
|
|
{
|
|
wait(1);
|
|
var_01 = undefined;
|
|
continue;
|
|
}
|
|
|
|
var_03 = level.burke.origin[0] - level.player.origin[0];
|
|
if(var_03 < var_02 || var_02 == -1)
|
|
{
|
|
var_02 = var_03;
|
|
}
|
|
|
|
if(isdefined(var_01) && var_03 < var_00)
|
|
{
|
|
var_01 = undefined;
|
|
level.axis_global_accuracy_mod = 0;
|
|
level notify("global_accuracy_mod_event");
|
|
}
|
|
|
|
if(var_03 > var_00)
|
|
{
|
|
var_01 = var_03 - var_00;
|
|
var_04 = var_01 / 100;
|
|
if(var_04 > 10)
|
|
{
|
|
var_04 = 10;
|
|
}
|
|
|
|
level.axis_global_accuracy_mod = var_04;
|
|
level notify("global_accuracy_mod_event");
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 165
|
|
player_falling_kill_logic(param_00)
|
|
{
|
|
var_01 = int(tablelookup("sp/deathQuoteTable.csv",1,"size",0));
|
|
var_02 = randomint(var_01);
|
|
var_03 = "player_falling_kill_in_progress";
|
|
if(common_scripts\utility::flag(var_03))
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set(var_03);
|
|
}
|
|
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 3;
|
|
}
|
|
|
|
common_scripts\utility::flag_clear("can_save");
|
|
var_04 = gettime() + param_00 * 1000;
|
|
while(!level.player isonground() && gettime() < var_04)
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
if(level.player isonground())
|
|
{
|
|
level.player kill();
|
|
return;
|
|
}
|
|
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
//Function Number: 166
|
|
introscreen_generic_fade_out(param_00,param_01,param_02,param_03)
|
|
{
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = 1.5;
|
|
}
|
|
|
|
var_04 = newhudelem();
|
|
var_04.x = 0;
|
|
var_04.y = 0;
|
|
var_04.horzalign = "fullscreen";
|
|
var_04.vertalign = "fullscreen";
|
|
var_04.foreground = 0;
|
|
var_04 setshader(param_00,640,480);
|
|
if(isdefined(param_03) && param_03 > 0)
|
|
{
|
|
var_04.alpha = 0;
|
|
var_04 fadeovertime(param_03);
|
|
var_04.alpha = 1;
|
|
wait(param_03);
|
|
}
|
|
|
|
wait(param_01);
|
|
if(isdefined(param_02) && param_02 > 0)
|
|
{
|
|
var_04.alpha = 1;
|
|
var_04 fadeovertime(param_02);
|
|
var_04.alpha = 0;
|
|
}
|
|
|
|
var_04 destroy();
|
|
}
|
|
|
|
//Function Number: 167
|
|
player_damage_atlas_flag_set(param_00)
|
|
{
|
|
self endon("death");
|
|
self endon("flag_already_set");
|
|
var_01 = undefined;
|
|
var_02 = undefined;
|
|
for(;;)
|
|
{
|
|
self waittill("damage",var_02,var_01);
|
|
if(isdefined(var_01) && var_01 == level.player)
|
|
{
|
|
if(common_scripts\utility::flag(param_00))
|
|
{
|
|
self notify("flag_already_set");
|
|
waittillframeend;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::flag_set(param_00);
|
|
}
|
|
|
|
//Function Number: 168
|
|
waittill_aigroupcount_or_flag(param_00,param_01,param_02)
|
|
{
|
|
level endon(param_02);
|
|
if(!common_scripts\utility::flag(param_02))
|
|
{
|
|
maps\_utility::waittill_aigroupcount(param_00,param_01);
|
|
}
|
|
} |