iw6-scripts-dev/maps/mp/mp_warhawk.gsc
2024-12-11 11:28:08 +01:00

170 lines
5.0 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
main()
{
maps\mp\mp_warhawk_precache::main();
maps\createart\mp_warhawk_art::main();
maps\mp\mp_warhawk_fx::main();
maps\mp\mp_warhawk_events::precache();
//These events are before _load::main so they can be triggered during createfx
min_wait_time = 50.0;
max_wait_time = 70.0;
level thread maps\mp\mp_warhawk_events::random_destruction( min_wait_time, max_wait_time );
level thread maps\mp\mp_warhawk_events::air_raid();
level.mapCustomCrateFunc = ::warhawkCustomCrateFunc;
level.mapCustomKillstreakFunc = ::warhawkCustomKillstreakFunc;
level.mapCustomBotKillstreakFunc = ::warhawkCustomBotKillstreakFunc;
maps\mp\_load::main();
thread maps\mp\_fx::func_glass_handler(); // Text on glass
maps\mp\_compass::setupMiniMap( "compass_map_mp_warhawk" );
SetDvar( "r_lightGridEnableTweaks", 1 );
SetDvar( "r_lightGridIntensity" , 1.33 );
setdvar_cg_ng( "r_diffuseColorScale", 1.2, 1.5 );
setdvar_cg_ng( "r_specularcolorscale", 1.5, 9 );
setdvar( "r_ssaorejectdepth", 1500);
setdvar( "r_ssaofadedepth", 1200);
if( level.ps3 )
{
setdvar( "sm_sunShadowScale", "0.6" ); // optimization
}
else if( level.xenon )
{
setdvar( "sm_sunShadowScale", "0.7" ); // optimization
}
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis";
level thread maps\mp\mp_warhawk_events::plane_crash();
level thread maps\mp\mp_warhawk_events::heli_anims();
level thread maps\mp\mp_warhawk_events::chain_gate();
level thread maps\mp\mp_warhawk_events::exploders_watch_late_players();
level thread maps\mp\_breach::main();
level._effect[ "default" ] = loadfx( "vfx/moments/mp_warhawk/vfx_mp_warhawk_breach_01" );
/#
SetDvarIfUninitialized("allow_dynamic_events", "1");
level thread watch_allow_dynamic_events();
#/
level thread initExtraCollision();
}
initExtraCollision()
{
model1 = spawn( "script_model", (-449.855,640.906,203.344) );
model1 setModel( "afr_corrugated_metal8x8" );
model1.angles = (0,0,0);
model2 = spawn( "script_model", (1457, 159.5, 143) );
model2 setModel( "afr_corrugated_metal8x8" );
model2.angles = (0,0,0);
}
watch_allow_dynamic_events()
{
while(GetDvarInt("allow_dynamic_events"))
{
wait .05;
}
level notify("stop_dynamic_events");
}
WARHAWK_MORTARS_WEIGHT = 85;
warhawkCustomCrateFunc()
{
if(!IsDefined(game["player_holding_level_killstrek"]))
game["player_holding_level_killstrek"] = false;
if(!allowLevelKillstreaks() || game["player_holding_level_killstrek"])
return;
maps\mp\killstreaks\_airdrop::addCrateType( "airdrop_assault", "warhawk_mortars", WARHAWK_MORTARS_WEIGHT, maps\mp\killstreaks\_airdrop::killstreakCrateThink, maps\mp\killstreaks\_airdrop::get_friendly_crate_model(), maps\mp\killstreaks\_airdrop::get_enemy_crate_model(), &"KILLSTREAKS_HINTS_WARHAWK_MORTARS" );
level thread watch_for_warhawk_mortars_crate();
}
watch_for_warhawk_mortars_crate()
{
while(1)
{
level waittill("createAirDropCrate", dropCrate);
if(IsDefined(dropCrate) && IsDefined(dropCrate.crateType) && dropCrate.crateType=="warhawk_mortars")
{
maps\mp\killstreaks\_airdrop::changeCrateWeight("airdrop_assault", "warhawk_mortars", 0);
captured = wait_for_capture(dropCrate);
if(!captured)
{
//reEnable warhawk mortars care packages if it expires with out anyone picking it up
maps\mp\killstreaks\_airdrop::changeCrateWeight("airdrop_assault", "warhawk_mortars", WARHAWK_MORTARS_WEIGHT);
}
else
{
//Once its picked up it needs to remain off.
game["player_holding_level_killstrek"] = true;
break;
}
}
}
}
//death and capture are sent on the same frame but death is processed first :(
wait_for_capture(dropCrate)
{
result = watch_for_air_drop_death(dropCrate);
return !IsDefined(result); //If !isdefined the captured notify was also sent.
}
watch_for_air_drop_death(dropCrate)
{
dropCrate endon("captured");
dropCrate waittill("death");
waittillframeend;
return true;
}
warhawkCustomKillstreakFunc()
{
AddDebugCommand("devgui_cmd \"MP/Killstreak/Level Event:5/Care Package/Warhawk Mortars\" \"set scr_devgivecarepackage warhawk_mortars; set scr_devgivecarepackagetype airdrop_assault\"\n");
AddDebugCommand("devgui_cmd \"MP/Killstreak/Level Event:5/Warhawk Mortars\" \"set scr_givekillstreak warhawk_mortars\"\n");
level.killStreakFuncs[ "warhawk_mortars" ] = ::tryUseWarhawkMortars;
level.killstreakWeildWeapons["warhawk_mortar_mp"] ="warhawk_mortars";
}
warhawkCustomBotKillstreakFunc()
{
AddDebugCommand("devgui_cmd \"MP/Bots(Killstreak)/Level Events:5/Warhawk Mortars\" \"set scr_testclients_givekillstreak warhawk_mortars\"\n");
maps\mp\bots\_bots_ks::bot_register_killstreak_func( "warhawk_mortars", maps\mp\bots\_bots_ks::bot_killstreak_simple_use );
}
tryUseWarhawkMortars(lifeId, streakName)
{
if(level.air_raid_active)
{
self iPrintLnBold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
return false;
}
game["player_holding_level_killstrek"] = false;
level notify("warhawk_mortar_killstreak", self);
return true;
}