1185 lines
39 KiB
Plaintext
1185 lines
39 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
level.killstreakfuncs["odin_support"] = ::tryuseodin;
|
|
level.killstreakfuncs["odin_assault"] = ::tryuseodin;
|
|
level._effect["odin_clouds"] = loadfx( "vfx/gameplay/mp/killstreaks/odin/odin_parallax_clouds" );
|
|
level._effect["odin_fisheye"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_odin_fisheye" );
|
|
level._effect["odin_targeting"] = loadfx( "vfx/gameplay/mp/killstreaks/odin/vfx_marker_odin_cyan" );
|
|
level.odinsettings = [];
|
|
level.odinsettings["odin_support"] = spawnstruct();
|
|
level.odinsettings["odin_support"].timeout = 60.0;
|
|
level.odinsettings["odin_support"].streakname = "odin_support";
|
|
level.odinsettings["odin_support"].vehicleinfo = "odin_mp";
|
|
level.odinsettings["odin_support"].modelbase = "vehicle_odin_mp";
|
|
level.odinsettings["odin_support"].teamsplash = "used_odin_support";
|
|
level.odinsettings["odin_support"].votimedout = "odin_gone";
|
|
level.odinsettings["odin_support"].vokillsingle = "odin_target_killed";
|
|
level.odinsettings["odin_support"].vokillmulti = "odin_targets_killed";
|
|
level.odinsettings["odin_support"].ui_num = 1;
|
|
level.odinsettings["odin_support"].unavailable_string = &"KILLSTREAKS_ODIN_UNAVAILABLE";
|
|
level.odinsettings["odin_support"].weapon["airdrop"] = spawnstruct();
|
|
level.odinsettings["odin_support"].weapon["airdrop"].projectile = "odin_projectile_airdrop_mp";
|
|
level.odinsettings["odin_support"].weapon["airdrop"].rumble = "smg_fire";
|
|
level.odinsettings["odin_support"].weapon["airdrop"].ammoomnvar = "ui_odin_airdrop_ammo";
|
|
level.odinsettings["odin_support"].weapon["airdrop"].airdroptype = "airdrop_support";
|
|
level.odinsettings["odin_support"].weapon["airdrop"].reloadtimer = 20;
|
|
level.odinsettings["odin_support"].weapon["airdrop"].ui_num_fired = -1;
|
|
level.odinsettings["odin_support"].weapon["airdrop"].voairdrop = "odin_carepackage";
|
|
level.odinsettings["odin_support"].weapon["airdrop"].plr_ready_sound = "odin_carepack_ready";
|
|
level.odinsettings["odin_support"].weapon["airdrop"].plr_fire_sound = "odin_carepack_launch";
|
|
level.odinsettings["odin_support"].weapon["marking"] = spawnstruct();
|
|
level.odinsettings["odin_support"].weapon["marking"].projectile = "odin_projectile_marking_mp";
|
|
level.odinsettings["odin_support"].weapon["marking"].rumble = "heavygun_fire";
|
|
level.odinsettings["odin_support"].weapon["marking"].ammoomnvar = "ui_odin_marking_ammo";
|
|
level.odinsettings["odin_support"].weapon["marking"].reloadtimer = 4;
|
|
level.odinsettings["odin_support"].weapon["marking"].ui_num_fired = -1;
|
|
level.odinsettings["odin_support"].weapon["marking"].vomarking = "odin_marking";
|
|
level.odinsettings["odin_support"].weapon["marking"].vomarkedsingle = "odin_marked";
|
|
level.odinsettings["odin_support"].weapon["marking"].vomarkedmulti = "odin_m_marked";
|
|
level.odinsettings["odin_support"].weapon["marking"].plr_ready_sound = "odin_flash_ready";
|
|
level.odinsettings["odin_support"].weapon["marking"].plr_fire_sound = "odin_flash_launch";
|
|
level.odinsettings["odin_support"].weapon["smoke"] = spawnstruct();
|
|
level.odinsettings["odin_support"].weapon["smoke"].projectile = "odin_projectile_smoke_mp";
|
|
level.odinsettings["odin_support"].weapon["smoke"].rumble = "smg_fire";
|
|
level.odinsettings["odin_support"].weapon["smoke"].ammoomnvar = "ui_odin_smoke_ammo";
|
|
level.odinsettings["odin_support"].weapon["smoke"].reloadtimer = 7;
|
|
level.odinsettings["odin_support"].weapon["smoke"].ui_num_fired = -1;
|
|
level.odinsettings["odin_support"].weapon["smoke"].vosmoke = "odin_smoke";
|
|
level.odinsettings["odin_support"].weapon["smoke"].plr_ready_sound = "odin_smoke_ready";
|
|
level.odinsettings["odin_support"].weapon["smoke"].plr_fire_sound = "odin_smoke_launch";
|
|
level.odinsettings["odin_support"].weapon["juggernaut"] = spawnstruct();
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].projectile = "odin_projectile_smoke_mp";
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].rumble = "heavygun_fire";
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].ammoomnvar = "ui_odin_juggernaut_ammo";
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].juggtype = "juggernaut_recon";
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].reloadtimer = level.odinsettings["odin_support"].timeout;
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].ui_num_fired = -1;
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].ui_num_move = -2;
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].ui_num_dead = -3;
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].vojugg = "odin_moving";
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].plr_ready_sound = "null";
|
|
level.odinsettings["odin_support"].weapon["juggernaut"].plr_fire_sound = "odin_jugg_launch";
|
|
level.odinsettings["odin_assault"] = spawnstruct();
|
|
level.odinsettings["odin_assault"].timeout = 60.0;
|
|
level.odinsettings["odin_assault"].streakname = "odin_assault";
|
|
level.odinsettings["odin_assault"].vehicleinfo = "odin_mp";
|
|
level.odinsettings["odin_assault"].modelbase = "vehicle_odin_mp";
|
|
level.odinsettings["odin_assault"].teamsplash = "used_odin_assault";
|
|
level.odinsettings["odin_assault"].votimedout = "loki_gone";
|
|
level.odinsettings["odin_assault"].vokillsingle = "odin_target_killed";
|
|
level.odinsettings["odin_assault"].vokillmulti = "odin_targets_killed";
|
|
level.odinsettings["odin_assault"].ui_num = 2;
|
|
level.odinsettings["odin_assault"].unavailable_string = &"KILLSTREAKS_LOKI_UNAVAILABLE";
|
|
level.odinsettings["odin_assault"].weapon["airdrop"] = spawnstruct();
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].projectile = "odin_projectile_airdrop_mp";
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].rumble = "smg_fire";
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].ammoomnvar = "ui_odin_airdrop_ammo";
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].airdroptype = "airdrop_assault";
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].reloadtimer = 20;
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].ui_num_fired = -1;
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].voairdrop = "odin_carepackage";
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].plr_ready_sound = "odin_carepack_ready";
|
|
level.odinsettings["odin_assault"].weapon["airdrop"].plr_fire_sound = "odin_carepack_launch";
|
|
level.odinsettings["odin_assault"].weapon["large_rod"] = spawnstruct();
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].projectile = "odin_projectile_large_rod_mp";
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].rumble = "heavygun_fire";
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].ammoomnvar = "ui_odin_marking_ammo";
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].reloadtimer = 4;
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].ui_num_fired = -2;
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].plr_ready_sound = "null";
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].plr_fire_sound = "ac130_105mm_fire";
|
|
level.odinsettings["odin_assault"].weapon["large_rod"].npc_fire_sound = "ac130_105mm_fire_npc";
|
|
level.odinsettings["odin_assault"].weapon["small_rod"] = spawnstruct();
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].projectile = "odin_projectile_small_rod_mp";
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].rumble = "smg_fire";
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].ammoomnvar = "ui_odin_smoke_ammo";
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].reloadtimer = 2;
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].ui_num_fired = -2;
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].plr_ready_sound = "null";
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].plr_fire_sound = "ac130_40mm_fire";
|
|
level.odinsettings["odin_assault"].weapon["small_rod"].npc_fire_sound = "ac130_40mm_fire_npc";
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"] = spawnstruct();
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].projectile = "odin_projectile_smoke_mp";
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].rumble = "heavygun_fire";
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].ammoomnvar = "ui_odin_juggernaut_ammo";
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].juggtype = "juggernaut";
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].reloadtimer = level.odinsettings["odin_assault"].timeout;
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].ui_num_fired = -1;
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].ui_num_move = -2;
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].ui_num_dead = -3;
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].vojugg = "odin_moving";
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].plr_ready_sound = "null";
|
|
level.odinsettings["odin_assault"].weapon["juggernaut"].plr_fire_sound = "odin_jugg_launch";
|
|
|
|
if ( !isdefined( level.heli_pilot_mesh ) )
|
|
{
|
|
level.heli_pilot_mesh = getent( "heli_pilot_mesh", "targetname" );
|
|
|
|
if ( !isdefined( level.heli_pilot_mesh ) )
|
|
{
|
|
|
|
}
|
|
else
|
|
level.heli_pilot_mesh.origin = level.heli_pilot_mesh.origin + maps\mp\_utility::gethelipilotmeshoffset();
|
|
}
|
|
|
|
maps\mp\agents\_agents::wait_till_agent_funcs_defined();
|
|
level.agent_funcs["odin_juggernaut"] = level.agent_funcs["player"];
|
|
level.agent_funcs["odin_juggernaut"]["think"] = common_scripts\utility::empty_init_func;
|
|
level.odin_marking_flash_radius_max = 800;
|
|
level.odin_marking_flash_radius_min = 200;
|
|
level.active_odin = [];
|
|
}
|
|
|
|
tryuseodin( var_0, var_1 )
|
|
{
|
|
if ( isdefined( self.underwater ) && self.underwater )
|
|
return 0;
|
|
|
|
var_2 = var_1;
|
|
var_3 = 1;
|
|
|
|
if ( maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_3 >= maps\mp\_utility::maxvehiclesallowed() )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_TOO_MANY_VEHICLES" );
|
|
return 0;
|
|
}
|
|
|
|
if ( isdefined( level.active_odin[var_2] ) )
|
|
{
|
|
self iprintlnbold( level.odinsettings[var_2].unavailable_string );
|
|
return 0;
|
|
}
|
|
|
|
maps\mp\_utility::incrementfauxvehiclecount();
|
|
var_4 = createodin( var_2 );
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
{
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
return 0;
|
|
}
|
|
|
|
var_5 = startodin( var_4 );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 0;
|
|
|
|
return var_5;
|
|
}
|
|
|
|
watchhostmigrationfinishedinit( var_0 )
|
|
{
|
|
var_0 endon( "disconnect" );
|
|
var_0 endon( "joined_team" );
|
|
var_0 endon( "joined_spectators" );
|
|
var_0 endon( "killstreak_disowned" );
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "host_migration_end" );
|
|
var_0 setclientomnvar( "ui_odin", level.odinsettings[self.odintype].ui_num );
|
|
var_0 thermalvisionfofoverlayon();
|
|
playfxontag( level._effect["odin_targeting"], self.targeting_marker, "tag_origin" );
|
|
self.targeting_marker showtoplayer( var_0 );
|
|
}
|
|
}
|
|
|
|
createodin( var_0 )
|
|
{
|
|
var_1 = self.origin * ( 1, 1, 0 ) + ( level.heli_pilot_mesh.origin - maps\mp\_utility::gethelipilotmeshoffset() ) * ( 0, 0, 1 );
|
|
var_2 = ( 0, 0, 0 );
|
|
var_3 = spawnhelicopter( self, var_1, var_2, level.odinsettings[var_0].vehicleinfo, level.odinsettings[var_0].modelbase );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
return;
|
|
|
|
var_3.speed = 40;
|
|
var_3.owner = self;
|
|
var_3.team = self.team;
|
|
var_3.odintype = var_0;
|
|
level.active_odin[var_0] = 1;
|
|
self.odin = var_3;
|
|
var_3 thread odin_watchdeath();
|
|
var_3 thread odin_watchtimeout();
|
|
var_3 thread odin_watchownerloss();
|
|
var_3 thread odin_watchroundend();
|
|
var_3 thread odin_watchtargeting();
|
|
var_3 thread odin_watchobjectivecamera();
|
|
var_3 thread odin_watchoutlines();
|
|
var_3 thread odin_watchplayerkilled();
|
|
var_3 thread odin_dialog_killed_player();
|
|
var_3 thread odin_onplayerconnect();
|
|
var_3.owner maps\mp\_matchdata::logkillstreakevent( level.odinsettings[var_0].streakname, var_1 );
|
|
return var_3;
|
|
}
|
|
|
|
startodin( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 endon( "death" );
|
|
self.restoreangles = vectortoangles( anglestoforward( self.angles ) );
|
|
odin_set_using( var_0 );
|
|
|
|
if ( getdvarint( "camera_thirdPerson" ) )
|
|
maps\mp\_utility::setthirdpersondof( 0 );
|
|
|
|
thread watchintrocleared( var_0 );
|
|
maps\mp\_utility::freezecontrolswrapper( 1 );
|
|
odin_zoom_up( var_0 );
|
|
thread maps\mp\killstreaks\_juggernaut::disablejuggernaut();
|
|
var_1 = maps\mp\killstreaks\_killstreaks::initridekillstreak( var_0.odintype );
|
|
|
|
if ( var_1 != "success" )
|
|
{
|
|
if ( isdefined( self.disabledweapon ) && self.disabledweapon )
|
|
common_scripts\utility::_enableweapon();
|
|
|
|
var_0 notify( "death" );
|
|
return 0;
|
|
}
|
|
|
|
maps\mp\_utility::freezecontrolswrapper( 0 );
|
|
self remotecontrolvehicle( var_0 );
|
|
var_0 thread watchhostmigrationfinishedinit( self );
|
|
var_0.odin_overlay_ent = spawnfxforclient( level._effect["odin_fisheye"], self geteye(), self );
|
|
triggerfx( var_0.odin_overlay_ent );
|
|
var_0.odin_overlay_ent setfxkilldefondelete();
|
|
level thread maps\mp\_utility::teamplayercardsplash( level.odinsettings[var_0.odintype].teamsplash, self );
|
|
self thermalvisionfofoverlayon();
|
|
thread waitandoutlineowner( var_0 );
|
|
return 1;
|
|
}
|
|
|
|
waitandoutlineowner( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
var_0 endon( "death" );
|
|
wait 1.0;
|
|
var_1 = maps\mp\_utility::outlineenableforplayer( self, "cyan", self, 0, "killstreak" );
|
|
var_0 thread removeoutline( var_1, self );
|
|
}
|
|
|
|
odin_zoom_up( var_0 )
|
|
{
|
|
var_1 = spawn( "script_model", var_0.origin + ( 0, 0, 3000 ) );
|
|
var_1.angles = vectortoangles( ( 0, 0, 1 ) );
|
|
var_1 setmodel( "tag_origin" );
|
|
var_1 thread waitanddelete( 5 );
|
|
var_2 = "odin_zoom_up";
|
|
var_3 = var_1 getentitynumber();
|
|
var_4 = self getentitynumber();
|
|
var_5 = bullettrace( self.origin, var_0.origin, 0, self );
|
|
|
|
if ( var_5["surfacetype"] != "none" )
|
|
{
|
|
var_2 = "odin_zoom_down";
|
|
var_3 = var_0 getentitynumber();
|
|
var_4 = var_1 getentitynumber();
|
|
}
|
|
|
|
var_6 = common_scripts\utility::array_add( maps\mp\_utility::get_players_watching(), self );
|
|
|
|
foreach ( var_8 in var_6 )
|
|
{
|
|
var_8 setclientomnvar( "cam_scene_name", var_2 );
|
|
var_8 setclientomnvar( "cam_scene_lead", var_3 );
|
|
var_8 setclientomnvar( "cam_scene_support", var_4 );
|
|
var_8 thread clouds();
|
|
}
|
|
}
|
|
|
|
waitanddelete( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
wait( var_0 );
|
|
self delete();
|
|
}
|
|
|
|
clouds()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = spawn( "script_model", self.origin + ( 0, 0, 250 ) );
|
|
var_0.angles = vectortoangles( ( 0, 0, 1 ) );
|
|
var_0 setmodel( "tag_origin" );
|
|
var_0 thread waitanddelete( 2 );
|
|
wait 0.1;
|
|
playfxontagforclients( level._effect["odin_clouds"], var_0, "tag_origin", self );
|
|
}
|
|
|
|
odin_set_using( var_0 )
|
|
{
|
|
maps\mp\_utility::setusingremote( var_0.odintype );
|
|
self.odin = var_0;
|
|
}
|
|
|
|
odin_clear_using( var_0 )
|
|
{
|
|
var_0.odin_juggernautusetime = undefined;
|
|
var_0.odin_markingusetime = undefined;
|
|
var_0.odin_smokeusetime = undefined;
|
|
var_0.odin_airdropusetime = undefined;
|
|
var_0.odin_largerodusetime = undefined;
|
|
var_0.odin_smallrodusetime = undefined;
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
maps\mp\_utility::clearusingremote();
|
|
self.odin = undefined;
|
|
}
|
|
}
|
|
|
|
watchintrocleared( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "joined_team" );
|
|
self endon( "joined_spectators" );
|
|
level endon( "game_ended" );
|
|
var_0 endon( "death" );
|
|
self waittill( "intro_cleared" );
|
|
self setclientomnvar( "ui_odin", level.odinsettings[var_0.odintype].ui_num );
|
|
watchearlyexit( var_0 );
|
|
}
|
|
|
|
odin_waitfordonefiring( var_0 )
|
|
{
|
|
while ( isdefined( self.is_firing ) && var_0 > 0 )
|
|
{
|
|
wait 0.05;
|
|
var_0 = var_0 - 0.05;
|
|
}
|
|
}
|
|
|
|
odin_watchdeath()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "gone" );
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self.owner ) )
|
|
self.owner odin_endride( self );
|
|
|
|
cleanup_ents();
|
|
odin_waitfordonefiring( 3.0 );
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
level.active_odin[self.odintype] = undefined;
|
|
self delete();
|
|
}
|
|
|
|
odin_watchtimeout()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self.owner endon( "disconnect" );
|
|
self.owner endon( "joined_team" );
|
|
self.owner endon( "joined_spectators" );
|
|
var_0 = level.odinsettings[self.odintype];
|
|
var_1 = var_0.timeout;
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_1 );
|
|
thread odin_leave();
|
|
}
|
|
|
|
odin_watchownerloss()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
self.owner common_scripts\utility::waittill_any( "disconnect", "joined_team", "joined_spectators" );
|
|
thread odin_leave();
|
|
}
|
|
|
|
odin_watchobjectivecamera()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
self.owner endon( "disconnect" );
|
|
self.owner endon( "joined_team" );
|
|
self.owner endon( "joined_spectators" );
|
|
level waittill( "objective_cam" );
|
|
thread odin_leave();
|
|
}
|
|
|
|
odin_watchroundend()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
self.owner endon( "disconnect" );
|
|
self.owner endon( "joined_team" );
|
|
self.owner endon( "joined_spectators" );
|
|
level common_scripts\utility::waittill_any( "round_end_finished", "game_ended" );
|
|
thread odin_leave();
|
|
}
|
|
|
|
odin_leave()
|
|
{
|
|
self endon( "death" );
|
|
self notify( "leaving" );
|
|
var_0 = level.odinsettings[self.odintype];
|
|
maps\mp\_utility::leaderdialog( var_0.votimedout );
|
|
|
|
if ( isdefined( self.owner ) )
|
|
self.owner odin_endride( self );
|
|
|
|
self notify( "gone" );
|
|
cleanup_ents();
|
|
odin_waitfordonefiring( 3.0 );
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
level.active_odin[self.odintype] = undefined;
|
|
self delete();
|
|
}
|
|
|
|
odin_endride( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
self setclientomnvar( "ui_odin", -1 );
|
|
var_0 notify( "end_remote" );
|
|
self notify( "odin_ride_ended" );
|
|
odin_clear_using( var_0 );
|
|
|
|
if ( getdvarint( "camera_thirdPerson" ) )
|
|
maps\mp\_utility::setthirdpersondof( 1 );
|
|
|
|
self thermalvisionfofoverlayoff();
|
|
self remotecontrolvehicleoff( var_0 );
|
|
self setplayerangles( self.restoreangles );
|
|
thread odin_freezebuffer();
|
|
self stoplocalsound( "odin_negative_action" );
|
|
self stoplocalsound( "odin_positive_action" );
|
|
|
|
foreach ( var_2 in level.odinsettings[var_0.odintype].weapon )
|
|
{
|
|
if ( isdefined( var_2.plr_ready_sound ) )
|
|
self stoplocalsound( var_2.plr_ready_sound );
|
|
|
|
if ( isdefined( var_2.plr_fire_sound ) )
|
|
self stoplocalsound( var_2.plr_fire_sound );
|
|
}
|
|
|
|
if ( isdefined( var_0.juggernaut ) )
|
|
var_0.juggernaut maps\mp\bots\_bots_strategy::bot_guard_player( self, 350 );
|
|
}
|
|
}
|
|
|
|
odin_freezebuffer()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
maps\mp\_utility::freezecontrolswrapper( 1 );
|
|
wait 0.5;
|
|
maps\mp\_utility::freezecontrolswrapper( 0 );
|
|
}
|
|
|
|
odin_watchtargeting()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 = self.owner;
|
|
var_0 endon( "disconnect" );
|
|
var_1 = var_0 getvieworigin();
|
|
var_2 = var_1 + anglestoforward( self gettagangles( "tag_player" ) ) * 10000;
|
|
var_3 = bullettrace( var_1, var_2, 0, self );
|
|
var_4 = spawn( "script_model", var_3["position"] );
|
|
var_4.angles = vectortoangles( ( 0, 0, 1 ) );
|
|
var_4 setmodel( "tag_origin" );
|
|
self.targeting_marker = var_4;
|
|
var_4 endon( "death" );
|
|
var_5 = bullettrace( var_4.origin + ( 0, 0, 50 ), var_4.origin + ( 0, 0, -100 ), 0, var_4 );
|
|
var_4.origin = var_5["position"] + ( 0, 0, 50 );
|
|
var_4 hide();
|
|
var_4 showtoplayer( var_0 );
|
|
var_4 childthread monitormarkervisibility( var_0 );
|
|
thread showfx();
|
|
thread watchairdropuse();
|
|
thread watchjuggernautuse();
|
|
|
|
switch ( self.odintype )
|
|
{
|
|
case "odin_support":
|
|
thread watchsmokeuse();
|
|
thread watchmarkinguse();
|
|
break;
|
|
case "odin_assault":
|
|
thread watchlargeroduse();
|
|
thread watchsmallroduse();
|
|
break;
|
|
}
|
|
|
|
self setotherent( var_4 );
|
|
}
|
|
|
|
monitormarkervisibility( var_0 )
|
|
{
|
|
wait 1.5;
|
|
var_1 = [];
|
|
|
|
for (;;)
|
|
{
|
|
var_2 = var_0 maps\mp\_utility::get_players_watching();
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
if ( !common_scripts\utility::array_contains( var_2, var_4 ) )
|
|
{
|
|
var_1 = common_scripts\utility::array_remove( var_1, var_4 );
|
|
self hide();
|
|
self showtoplayer( var_0 );
|
|
}
|
|
}
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
self showtoplayer( var_4 );
|
|
|
|
if ( !common_scripts\utility::array_contains( var_1, var_4 ) )
|
|
{
|
|
var_1 = common_scripts\utility::array_add( var_1, var_4 );
|
|
stopfxontag( level._effect["odin_targeting"], self, "tag_origin" );
|
|
wait 0.05;
|
|
playfxontag( level._effect["odin_targeting"], self, "tag_origin" );
|
|
}
|
|
}
|
|
|
|
wait 0.25;
|
|
}
|
|
}
|
|
|
|
watchairdropuse()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 = self.owner;
|
|
var_0 endon( "disconnect" );
|
|
var_1 = level.odinsettings[self.odintype].weapon["airdrop"];
|
|
self.odin_airdropusetime = 0;
|
|
var_0 setclientomnvar( var_1.ammoomnvar, level.odinsettings[self.odintype].ui_num );
|
|
|
|
if ( !isai( var_0 ) )
|
|
var_0 notifyonplayercommand( "airdrop_action", "+smoke" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "airdrop_action" );
|
|
|
|
if ( isdefined( level.hostmigrationtimer ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_0.odin ) )
|
|
return;
|
|
|
|
if ( gettime() >= self.odin_airdropusetime )
|
|
{
|
|
if ( level.teambased )
|
|
maps\mp\_utility::leaderdialog( var_1.voairdrop, self.team );
|
|
else
|
|
var_0 maps\mp\_utility::leaderdialogonplayer( var_1.voairdrop );
|
|
|
|
self.odin_airdropusetime = odin_fireweapon( "airdrop" );
|
|
var_1 = level.odinsettings[self.odintype].weapon["airdrop"];
|
|
level thread maps\mp\killstreaks\_airdrop::doflyby( var_0, self.targeting_marker.origin, randomfloat( 360 ), var_1.airdroptype );
|
|
}
|
|
else
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_negative_action" );
|
|
|
|
wait 1.0;
|
|
}
|
|
}
|
|
|
|
watchsmokeuse()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 = self.owner;
|
|
var_0 endon( "disconnect" );
|
|
var_1 = level.odinsettings[self.odintype].weapon["smoke"];
|
|
self.odin_smokeusetime = 0;
|
|
var_0 setclientomnvar( var_1.ammoomnvar, level.odinsettings[self.odintype].ui_num );
|
|
|
|
if ( !isai( var_0 ) )
|
|
{
|
|
var_0 notifyonplayercommand( "smoke_action", "+speed_throw" );
|
|
var_0 notifyonplayercommand( "smoke_action", "+ads_akimbo_accessible" );
|
|
|
|
if ( !level.console )
|
|
var_0 notifyonplayercommand( "smoke_action", "+toggleads_throw" );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "smoke_action" );
|
|
|
|
if ( isdefined( level.hostmigrationtimer ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_0.odin ) )
|
|
return;
|
|
|
|
if ( gettime() >= self.odin_smokeusetime )
|
|
{
|
|
if ( level.teambased )
|
|
maps\mp\_utility::leaderdialog( var_1.vosmoke, self.team );
|
|
else
|
|
var_0 maps\mp\_utility::leaderdialogonplayer( var_1.vosmoke );
|
|
|
|
self.odin_smokeusetime = odin_fireweapon( "smoke" );
|
|
}
|
|
else
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_negative_action" );
|
|
|
|
wait 1.0;
|
|
}
|
|
}
|
|
|
|
watchmarkinguse()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 = self.owner;
|
|
var_0 endon( "disconnect" );
|
|
var_1 = level.odinsettings[self.odintype].weapon["marking"];
|
|
self.odin_markingusetime = 0;
|
|
var_0 setclientomnvar( var_1.ammoomnvar, level.odinsettings[self.odintype].ui_num );
|
|
|
|
if ( !isai( var_0 ) )
|
|
{
|
|
var_0 notifyonplayercommand( "marking_action", "+attack" );
|
|
var_0 notifyonplayercommand( "marking_action", "+attack_akimbo_accessible" );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "marking_action" );
|
|
|
|
if ( isdefined( level.hostmigrationtimer ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_0.odin ) )
|
|
return;
|
|
|
|
if ( gettime() >= self.odin_markingusetime )
|
|
{
|
|
self.odin_markingusetime = odin_fireweapon( "marking" );
|
|
thread domarkingflash( self.targeting_marker.origin + ( 0, 0, 10 ) );
|
|
}
|
|
else
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_negative_action" );
|
|
|
|
wait 1.0;
|
|
}
|
|
}
|
|
|
|
watchjuggernautuse()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 = self.owner;
|
|
var_0 endon( "disconnect" );
|
|
var_0 endon( "juggernaut_dead" );
|
|
var_1 = level.odinsettings[self.odintype].weapon["juggernaut"];
|
|
self.odin_juggernautusetime = 0;
|
|
var_0 setclientomnvar( var_1.ammoomnvar, level.odinsettings[self.odintype].ui_num );
|
|
|
|
if ( !isai( var_0 ) )
|
|
var_0 notifyonplayercommand( "juggernaut_action", "+frag" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "juggernaut_action" );
|
|
|
|
if ( isdefined( level.hostmigrationtimer ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_0.odin ) )
|
|
return;
|
|
|
|
if ( gettime() >= self.odin_juggernautusetime )
|
|
{
|
|
var_2 = getjuggstartingpathnode( self.targeting_marker.origin );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
self.odin_juggernautusetime = odin_fireweapon( "juggernaut" );
|
|
thread waitandspawnjugg( var_2 );
|
|
}
|
|
else
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_negative_action" );
|
|
}
|
|
else if ( isdefined( self.juggernaut ) )
|
|
{
|
|
var_2 = getjuggmovingpathnode( self.targeting_marker.origin );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_0 maps\mp\_utility::leaderdialogonplayer( var_1.vojugg );
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_positive_action" );
|
|
var_0 playrumbleonentity( "pistol_fire" );
|
|
self.juggernaut maps\mp\bots\_bots_strategy::bot_protect_point( var_2.origin, 128 );
|
|
var_0 setclientomnvar( var_1.ammoomnvar, level.odinsettings[self.odintype].ui_num );
|
|
}
|
|
else
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_negative_action" );
|
|
}
|
|
|
|
wait 1.1;
|
|
|
|
if ( isdefined( self.juggernaut ) )
|
|
var_0 setclientomnvar( var_1.ammoomnvar, var_1.ui_num_move );
|
|
}
|
|
}
|
|
|
|
watchlargeroduse()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 = self.owner;
|
|
var_0 endon( "disconnect" );
|
|
var_1 = level.odinsettings[self.odintype].weapon["large_rod"];
|
|
self.odin_largerodusetime = 0;
|
|
var_0 setclientomnvar( var_1.ammoomnvar, level.odinsettings[self.odintype].ui_num );
|
|
|
|
if ( !isai( var_0 ) )
|
|
{
|
|
var_0 notifyonplayercommand( "large_rod_action", "+attack" );
|
|
var_0 notifyonplayercommand( "large_rod_action", "+attack_akimbo_accessible" );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "large_rod_action" );
|
|
|
|
if ( isdefined( level.hostmigrationtimer ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_0.odin ) )
|
|
return;
|
|
|
|
if ( gettime() >= self.odin_largerodusetime )
|
|
self.odin_largerodusetime = odin_fireweapon( "large_rod" );
|
|
else
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_negative_action" );
|
|
|
|
wait 1.0;
|
|
}
|
|
}
|
|
|
|
watchsmallroduse()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 = self.owner;
|
|
var_0 endon( "disconnect" );
|
|
var_1 = level.odinsettings[self.odintype].weapon["small_rod"];
|
|
self.odin_smallrodusetime = 0;
|
|
var_0 setclientomnvar( var_1.ammoomnvar, level.odinsettings[self.odintype].ui_num );
|
|
|
|
if ( !isai( var_0 ) )
|
|
{
|
|
var_0 notifyonplayercommand( "small_rod_action", "+speed_throw" );
|
|
var_0 notifyonplayercommand( "small_rod_action", "+ads_akimbo_accessible" );
|
|
|
|
if ( !level.console )
|
|
var_0 notifyonplayercommand( "small_rod_action", "+toggleads_throw" );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "small_rod_action" );
|
|
|
|
if ( isdefined( level.hostmigrationtimer ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_0.odin ) )
|
|
return;
|
|
|
|
if ( gettime() >= self.odin_smallrodusetime )
|
|
self.odin_smallrodusetime = odin_fireweapon( "small_rod" );
|
|
else
|
|
var_0 maps\mp\_utility::_playlocalsound( "odin_negative_action" );
|
|
|
|
wait 1.0;
|
|
}
|
|
}
|
|
|
|
odin_fireweapon( var_0 )
|
|
{
|
|
self.is_firing = 1;
|
|
var_1 = self.owner;
|
|
var_2 = level.odinsettings[self.odintype].weapon[var_0];
|
|
var_3 = anglestoforward( var_1 getplayerangles() );
|
|
var_4 = self.origin + var_3 * 100;
|
|
var_1 setclientomnvar( var_2.ammoomnvar, var_2.ui_num_fired );
|
|
thread watchreload( var_2 );
|
|
var_5 = self.targeting_marker.origin;
|
|
var_6 = gettime() + var_2.reloadtimer * 1000;
|
|
|
|
if ( var_0 == "large_rod" )
|
|
{
|
|
wait 0.5;
|
|
var_1 playrumbleonentity( var_2.rumble );
|
|
earthquake( 0.3, 1.5, self.origin, 1000 );
|
|
var_1 playsoundtoplayer( var_2.plr_fire_sound, var_1 );
|
|
playsoundatpos( self.origin, var_2.npc_fire_sound );
|
|
wait 1.5;
|
|
}
|
|
else if ( var_0 == "small_rod" )
|
|
{
|
|
wait 0.5;
|
|
var_1 playrumbleonentity( var_2.rumble );
|
|
earthquake( 0.2, 1, self.origin, 1000 );
|
|
var_1 playsoundtoplayer( var_2.plr_fire_sound, var_1 );
|
|
playsoundatpos( self.origin, var_2.npc_fire_sound );
|
|
wait 0.3;
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_2.plr_fire_sound ) )
|
|
var_1 playsoundtoplayer( var_2.plr_fire_sound, var_1 );
|
|
|
|
if ( isdefined( var_2.npc_fire_sound ) )
|
|
playsoundatpos( self.origin, var_2.npc_fire_sound );
|
|
|
|
var_1 playrumbleonentity( var_2.rumble );
|
|
}
|
|
|
|
var_7 = magicbullet( var_2.projectile, var_4, var_5, var_1 );
|
|
var_7.type = "odin";
|
|
var_7 thread watchexplosion( var_0 );
|
|
|
|
if ( var_0 == "smoke" || var_0 == "juggernaut" || var_0 == "large_rod" )
|
|
level notify( "smoke", var_7, var_2.projectile );
|
|
|
|
self.is_firing = undefined;
|
|
return var_6;
|
|
}
|
|
|
|
watchexplosion( var_0 )
|
|
{
|
|
self waittill( "explode", var_1 );
|
|
|
|
if ( var_0 == "small_rod" )
|
|
{
|
|
playrumbleonposition( "grenade_rumble", var_1 );
|
|
earthquake( 0.7, 1.0, var_1, 1000 );
|
|
}
|
|
else if ( var_0 == "large_rod" )
|
|
{
|
|
playrumbleonposition( "artillery_rumble", var_1 );
|
|
earthquake( 1.0, 1.0, var_1, 2000 );
|
|
}
|
|
}
|
|
|
|
getjuggstartingpathnode( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_1 = getnodesinradiussorted( var_0, 256, 0, 128, "Path" );
|
|
|
|
if ( !isdefined( var_1[0] ) )
|
|
return;
|
|
|
|
return var_1[0];
|
|
}
|
|
|
|
getjuggmovingpathnode( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_1 = getnodesinradiussorted( var_0, 128, 0, 64, "Path" );
|
|
|
|
if ( !isdefined( var_1[0] ) )
|
|
return;
|
|
|
|
return var_1[0];
|
|
}
|
|
|
|
waitandspawnjugg( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_1 = self.owner;
|
|
var_1 endon( "disconnect" );
|
|
var_2 = self.targeting_marker.origin;
|
|
wait 3.0;
|
|
var_3 = maps\mp\agents\_agents::add_humanoid_agent( "odin_juggernaut", var_1.team, "class1", var_0.origin, vectortoangles( var_2 - var_0.origin ), var_1, 0, 0, "veteran" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_4 = level.odinsettings[self.odintype].weapon["juggernaut"];
|
|
var_3 thread maps\mp\killstreaks\_juggernaut::givejuggernaut( var_4.juggtype );
|
|
var_3 thread maps\mp\killstreaks\_agent_killstreak::sendagentweaponnotify();
|
|
var_3 maps\mp\bots\_bots_strategy::bot_protect_point( var_0.origin, 128 );
|
|
self.juggernaut = var_3;
|
|
thread watchjuggernautdeath();
|
|
var_1 setclientomnvar( var_4.ammoomnvar, var_4.ui_num_move );
|
|
var_5 = maps\mp\_utility::outlineenableforplayer( var_3, "cyan", self.owner, 0, "killstreak" );
|
|
thread removeoutline( var_5, var_3 );
|
|
var_3 maps\mp\_utility::_setnameplatematerial( "player_name_bg_green_agent", "player_name_bg_red_agent" );
|
|
}
|
|
else
|
|
var_1 iprintlnbold( &"KILLSTREAKS_AGENT_MAX" );
|
|
}
|
|
|
|
watchjuggernautdeath()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
self.juggernaut waittill( "death" );
|
|
self.owner notify( "juggernaut_dead" );
|
|
var_0 = level.odinsettings[self.odintype].weapon["juggernaut"];
|
|
self.owner setclientomnvar( var_0.ammoomnvar, var_0.ui_num_dead );
|
|
self.juggernaut = undefined;
|
|
}
|
|
|
|
showfx()
|
|
{
|
|
self endon( "death" );
|
|
wait 1.0;
|
|
playfxontag( level._effect["odin_targeting"], self.targeting_marker, "tag_origin" );
|
|
}
|
|
|
|
watchreload( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_1 = self.owner;
|
|
var_1 endon( "disconnect" );
|
|
var_1 endon( "odin_ride_ended" );
|
|
var_2 = var_0.ammoomnvar;
|
|
var_3 = var_0.reloadtimer;
|
|
var_4 = var_0.plr_ready_sound;
|
|
var_5 = level.odinsettings[self.odintype].ui_num;
|
|
wait( var_3 );
|
|
|
|
if ( !isdefined( var_1.odin ) )
|
|
return;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_1 maps\mp\_utility::_playlocalsound( var_4 );
|
|
|
|
var_1 setclientomnvar( var_2, var_5 );
|
|
}
|
|
|
|
domarkingflash( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_1 = self.owner;
|
|
var_2 = level.odin_marking_flash_radius_max * level.odin_marking_flash_radius_max;
|
|
var_3 = level.odin_marking_flash_radius_min * level.odin_marking_flash_radius_min;
|
|
var_4 = 60;
|
|
var_5 = 40;
|
|
var_6 = 11;
|
|
var_7 = 0;
|
|
|
|
foreach ( var_9 in level.participants )
|
|
{
|
|
if ( !maps\mp\_utility::isreallyalive( var_9 ) || var_9.sessionstate != "playing" )
|
|
continue;
|
|
|
|
if ( level.teambased && var_9.team == self.team )
|
|
continue;
|
|
|
|
var_10 = distancesquared( var_0, var_9.origin );
|
|
|
|
if ( var_10 > var_2 )
|
|
continue;
|
|
|
|
var_11 = var_9 getstance();
|
|
var_12 = var_9.origin;
|
|
|
|
switch ( var_11 )
|
|
{
|
|
case "stand":
|
|
var_12 = ( var_12[0], var_12[1], var_12[2] + var_4 );
|
|
break;
|
|
case "crouch":
|
|
var_12 = ( var_12[0], var_12[1], var_12[2] + var_5 );
|
|
break;
|
|
case "prone":
|
|
var_12 = ( var_12[0], var_12[1], var_12[2] + var_6 );
|
|
break;
|
|
}
|
|
|
|
if ( !bullettracepassed( var_0, var_12, 0, var_9 ) )
|
|
continue;
|
|
|
|
if ( var_10 <= var_3 )
|
|
var_13 = 1.0;
|
|
else
|
|
var_13 = 1.0 - ( var_10 - var_3 ) / ( var_2 - var_3 );
|
|
|
|
var_14 = anglestoforward( var_9 getplayerangles() );
|
|
var_15 = var_0 - var_12;
|
|
var_15 = vectornormalize( var_15 );
|
|
var_16 = 0.5 * ( 1.0 + vectordot( var_14, var_15 ) );
|
|
var_17 = 1;
|
|
var_9 notify( "flashbang", var_0, var_13, var_16, var_1, var_17 );
|
|
var_7++;
|
|
|
|
if ( !enemynotaffectedbyodinoutline( var_9 ) )
|
|
{
|
|
if ( level.teambased )
|
|
var_18 = maps\mp\_utility::outlineenableforteam( var_9, "orange", self.team, 0, "killstreak" );
|
|
else
|
|
var_18 = maps\mp\_utility::outlineenableforplayer( var_9, "orange", self.owner, 0, "killstreak" );
|
|
|
|
thread removeoutline( var_18, var_9, 3.0 );
|
|
}
|
|
}
|
|
|
|
var_20 = level.odinsettings[self.odintype].weapon["marking"];
|
|
|
|
if ( var_7 == 1 )
|
|
{
|
|
if ( level.teambased )
|
|
maps\mp\_utility::leaderdialog( var_20.vomarkedsingle, self.team );
|
|
else
|
|
var_1 maps\mp\_utility::leaderdialogonplayer( var_20.vomarkedsingle );
|
|
}
|
|
else if ( var_7 > 1 )
|
|
{
|
|
if ( level.teambased )
|
|
maps\mp\_utility::leaderdialog( var_20.vomarkedmulti, self.team );
|
|
else
|
|
var_1 maps\mp\_utility::leaderdialogonplayer( var_20.vomarkedmulti );
|
|
}
|
|
|
|
var_21 = maps\mp\gametypes\_weapons::getempdamageents( var_0, 512, 0 );
|
|
|
|
foreach ( var_23 in var_21 )
|
|
{
|
|
if ( isdefined( var_23.owner ) && !maps\mp\gametypes\_weapons::friendlyfirecheck( self.owner, var_23.owner ) )
|
|
continue;
|
|
|
|
var_23 notify( "emp_damage", self.owner, 8.0 );
|
|
}
|
|
}
|
|
|
|
applyoutline( var_0 )
|
|
{
|
|
if ( level.teambased && var_0.team == self.team )
|
|
return;
|
|
else if ( !level.teambased && var_0 == self.owner )
|
|
return;
|
|
|
|
if ( enemynotaffectedbyodinoutline( var_0 ) )
|
|
return;
|
|
|
|
var_1 = maps\mp\_utility::outlineenableforplayer( var_0, "orange", self.owner, 1, "killstreak" );
|
|
thread removeoutline( var_1, var_0 );
|
|
}
|
|
|
|
enemynotaffectedbyodinoutline( var_0 )
|
|
{
|
|
return var_0 maps\mp\_utility::_hasperk( "specialty_noplayertarget" );
|
|
}
|
|
|
|
removeoutline( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_1 endon( "disconnect" );
|
|
|
|
level endon( "game_ended" );
|
|
var_3 = [ "leave", "death" ];
|
|
|
|
if ( isdefined( var_2 ) )
|
|
common_scripts\utility::waittill_any_in_array_or_timeout_no_endon_death( var_3, var_2 );
|
|
else
|
|
common_scripts\utility::waittill_any_in_array_return_no_endon_death( var_3 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
maps\mp\_utility::outlinedisable( var_0, var_1 );
|
|
}
|
|
|
|
odin_watchoutlines()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
|
|
foreach ( var_1 in level.participants )
|
|
applyoutline( var_1 );
|
|
}
|
|
|
|
odin_watchplayerkilled()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
self.enemieskilledintimewindow = 0;
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "odin_killed_player", var_0 );
|
|
self.enemieskilledintimewindow++;
|
|
self notify( "odin_enemy_killed" );
|
|
}
|
|
}
|
|
|
|
odin_dialog_killed_player( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_1 = level.odinsettings[self.odintype];
|
|
var_2 = 1.0;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "odin_enemy_killed" );
|
|
wait( var_2 );
|
|
|
|
if ( self.enemieskilledintimewindow > 1 )
|
|
self.owner maps\mp\_utility::leaderdialogonplayer( var_1.vokillmulti );
|
|
else
|
|
self.owner maps\mp\_utility::leaderdialogonplayer( var_1.vokillsingle );
|
|
|
|
self.enemieskilledintimewindow = 0;
|
|
}
|
|
}
|
|
|
|
odin_onplayerconnect()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_0 );
|
|
var_0 thread odin_onplayerspawned( self );
|
|
}
|
|
}
|
|
|
|
odin_onplayerspawned( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
self waittill( "spawned_player" );
|
|
var_0 applyoutline( self );
|
|
}
|
|
|
|
cleanup_ents()
|
|
{
|
|
if ( isdefined( self.targeting_marker ) )
|
|
self.targeting_marker delete();
|
|
|
|
if ( isdefined( self.odin_overlay_ent ) )
|
|
self.odin_overlay_ent delete();
|
|
}
|
|
|
|
watchearlyexit( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 endon( "death" );
|
|
var_0 thread maps\mp\killstreaks\_killstreaks::allowridekillstreakplayerexit();
|
|
var_0 waittill( "killstreakExit" );
|
|
var_1 = level.odinsettings[var_0.odintype];
|
|
maps\mp\_utility::leaderdialog( var_1.votimedout );
|
|
var_0 notify( "death" );
|
|
}
|