695 lines
22 KiB
Plaintext
695 lines
22 KiB
Plaintext
/****************************************************************************
|
|
Changes:
|
|
Added training logic from Call of Duty: Modern Warfare Remastered. It means that you can run other courses or just running to the Captain Price.
|
|
Changed objective logic for Sgt. Newcastle and Mac: one visible objective.
|
|
If player skip the Mac course then add line if player have bad time 'letyouskip'
|
|
Change the M203 and C4 hint for PC.
|
|
****************************************************************************/
|
|
|
|
|
|
#include common_scripts\utility;
|
|
#include maps\_utility;
|
|
|
|
main()
|
|
{
|
|
precachestring( &"IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING" );
|
|
precachestring( &"IW3SP_MOD_LOC_KILLHOUSE_RUN_THE_OBSTACLE_COURSE" );
|
|
|
|
flag_init("cargoshipTutoDone");
|
|
|
|
level.player_completed_demolitions_training = false;
|
|
level.player_completed_obstacle_course_training = false;
|
|
level.player_skipped_obstacle_course = false;
|
|
car = getent ( "destructible", "targetname" );
|
|
car thread do_in_order( ::waittill_msg, "destroyed", ::flag_set, "car_destroyed" );
|
|
car destructible_disable_explosion();
|
|
|
|
ReplaceFunc(maps\killhouse::melee_training, ::melee_training);
|
|
}
|
|
|
|
melee_training()
|
|
{
|
|
//while( !flag( "melee_entered" ) )
|
|
// wait ( 0.05 );
|
|
level notify ( "melee_training" );
|
|
|
|
maps\killhouse_code::registerObjective( "obj_melee", &"KILLHOUSE_MELEE_THE_WATERMELON", getEnt( "scr_watermelon", "targetname" ) );
|
|
maps\killhouse_code::setObjectiveState( "obj_melee", "current" );
|
|
|
|
if ( !flag ( "melee_complete" ) )
|
|
thread maps\killhouse_code::generic_compass_hint_reminder( "melee_complete", 12 );
|
|
|
|
//level.waters thread walk_to ( getnode ( "melon_node", "script_noteworthy" ) );
|
|
|
|
if ( !flag ( "near_melee" ) && !flag ( "melee_complete" ) )
|
|
{
|
|
thread maps\killhouse_code::hint( &"KILLHOUSE_HINT_APPROACH_MELEE", 9999 );
|
|
|
|
//All right Soap, come this way.
|
|
level.waters maps\killhouse_code::execDialog( "comethisway" );
|
|
}
|
|
|
|
thread maps\killhouse::melee_run_dialog();
|
|
|
|
if ( !flag ( "melee_complete" ) )
|
|
flag_wait ( "near_melee" );
|
|
|
|
while ( !flag ( "melee_complete" ) )
|
|
maps\killhouse_code::keyHint( "melee" );
|
|
|
|
flag_wait ( "melee_complete" );
|
|
|
|
maps\killhouse_code::clear_hints();
|
|
thread maps\killhouse::open_firing_range_door();
|
|
|
|
|
|
flag_wait ( "melee_run_dialog" );
|
|
|
|
wait .5;
|
|
|
|
|
|
flag_set ( "spawn_frags" );
|
|
|
|
|
|
//Lovely. Your fruit killing skills are remarkable.
|
|
thread maps\killhouse_code::gaz_animation( "killhouse_gaz_talk_side" );
|
|
level.waters maps\killhouse_code::execDialog( "fruitkilling" );
|
|
|
|
maps\killhouse_code::setObjectiveState( "obj_melee", "done" );
|
|
|
|
level notify ( "meleeTraining_end" );
|
|
flag_clear ( "aa_sidearm_melee" );
|
|
autosave_by_name( "melee_complete" );
|
|
|
|
if ( level.short_training )
|
|
{
|
|
level.waters maps\killhouse_code::execDialog( "wantstosee" );
|
|
//thread add_dialogue_line( "GAZ", "Captain Price wants to see you." );
|
|
thread player_skipped_the_optional_objectives();
|
|
thread maps\killhouse::report_to_price();
|
|
wait 1;
|
|
thread frag_training();
|
|
thread obstacle_training();
|
|
|
|
//KILLHOUSE_DEMOLITIONS_TRAINING
|
|
//KILLHOUSE_RUN_THE_OBSTACLE_COURSE
|
|
|
|
if(AssetIsExisting(22, "IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING"))
|
|
objectiveText = &"IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING";
|
|
else
|
|
objectiveText = &"KILLHOUSE_GO_OUTSIDE_AND_REPORT";
|
|
|
|
if(AssetIsExisting(22, "IW3SP_MOD_LOC_KILLHOUSE_RUN_THE_OBSTACLE_COURSE"))
|
|
objectiveCourse = &"IW3SP_MOD_LOC_KILLHOUSE_RUN_THE_OBSTACLE_COURSE";
|
|
else
|
|
objectiveCourse = &"KILLHOUSE_RUN_THE_OBSTACLE_COURSE";
|
|
|
|
maps\killhouse_code::registerobjective( "obj_demolitions", objectiveText, getent( "obj_frag_ammo", "targetname" ) );
|
|
maps\killhouse_code::setobjectivestate( "obj_demolitions", "active" );
|
|
maps\killhouse_code::registerobjective( "obj_obstacle", objectiveCourse, getent( "obstacleTraining_objective", "targetname" ) );
|
|
maps\killhouse_code::setobjectivestate( "obj_obstacle", "active" );
|
|
}
|
|
else
|
|
{
|
|
level.waters maps\killhouse_code::execDialog( "allgoodhere" );
|
|
//level.waters thread walk_to ( getnode ( "door_node", "script_noteworthy" ) );
|
|
|
|
thread maps\killhouse::frag_Training();
|
|
}
|
|
}
|
|
|
|
frag_Training()
|
|
{
|
|
level endon ( "PlayerSkipTheOptionalCourses" );
|
|
|
|
if( flag( "cargoshipTutoDone" ) )
|
|
return;
|
|
|
|
flag_set ( "aa_frag" );
|
|
level notify ( "fragTraining_begin" );
|
|
|
|
autosave_by_name( "frag_training" );
|
|
|
|
flag_set ( "start_frag_training" );
|
|
|
|
//thread generic_compass_hint_reminder( "got_frags", 7 );
|
|
|
|
// maps\killhouse_code::registerObjective( "obj_demolitions", &"KILLHOUSE_GO_OUTSIDE_AND_REPORT", getEnt( "obj_frag_ammo", "targetname" ) );
|
|
// maps\killhouse_code::setObjectiveState( "obj_demolitions", "current" );
|
|
|
|
flag_wait ( "near_grenade_area" );
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PICK_UP_THE_FRAG_GRENADES" );
|
|
maps\killhouse_code::setObjectiveState( "obj_demolitions", "current" );
|
|
|
|
//It's time for some fun mate. Let's blow some shit up...
|
|
level.newcastle maps\killhouse_code::execDialog( "timeforfun" );
|
|
|
|
if ( !( level.player GetWeaponAmmoStock( "fraggrenade" ) ) && (!( maps\killhouse_code::in_pit() ) ) )
|
|
{
|
|
//Pick up those frag grenades and get in the safety pit.
|
|
level.newcastle maps\killhouse_code::execDialog( "pickupfrag" );
|
|
}
|
|
|
|
while ( level.player GetWeaponAmmoStock( "fraggrenade" ) < 3 )
|
|
wait ( 0.05 );
|
|
|
|
flag_set ( "got_frags" );
|
|
|
|
getEnt( "grenade_too_low", "targetname" ) thread maps\killhouse_code::frag_too_low_hint();
|
|
|
|
thread maps\killhouse_code::frag_trigger_think( "frag_target_1", getEnt( "grenade_damage_trigger1", "targetname" ) );
|
|
thread maps\killhouse_code::frag_trigger_think( "frag_target_2", getEnt( "grenade_damage_trigger2", "targetname" ) );
|
|
thread maps\killhouse_code::frag_trigger_think( "frag_target_3", getEnt( "grenade_damage_trigger3", "targetname" ) );
|
|
|
|
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_ENTER_THE_SAFETY_PIT" );
|
|
|
|
thread maps\killhouse_code::dialog_nag_till_in_pit();
|
|
|
|
getEnt( "safety_pit", "targetname" ) waittill ( "trigger" );
|
|
flag_set ( "in_pit_with_frags" );
|
|
|
|
//level.newcastle thread walk_to( getnode ( "watch_pit_node", "script_noteworthy" ) );
|
|
level.newcastle setgoalnode ( getnode ( "watch_pit_node", "script_noteworthy" ) );
|
|
|
|
//Now throw a grenade into windows two, three and four.
|
|
level.newcastle thread maps\killhouse_code::execDialog( "throwgrenade" );
|
|
thread maps\killhouse_code::keyHint( "frag" );
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_THROW_A_GRENADE_INTO" );
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
|
|
|
|
wait ( 0.1 );
|
|
|
|
numRemaining = 0;
|
|
for ( index = 1; index < 4; index++ )
|
|
{
|
|
if ( flag( "frag_target_" + index ) )
|
|
continue;
|
|
|
|
numRemaining++;
|
|
}
|
|
|
|
|
|
//level.marine4 execDialog( "firstwindow" );
|
|
|
|
//level.marine4.lastNagTime = getTime();
|
|
while( numRemaining )
|
|
{
|
|
curRemaining = 0;
|
|
|
|
nextTarget = "";
|
|
if ( !flag( "frag_target_1" ) )
|
|
{
|
|
curRemaining++;
|
|
nextTarget = "firstwindow";
|
|
}
|
|
if ( !flag( "frag_target_2" ) )
|
|
{
|
|
curRemaining++;
|
|
if ( nextTarget == "" )
|
|
nextTarget = "secondwindow";
|
|
}
|
|
if ( !flag( "frag_target_3" ) )
|
|
{
|
|
curRemaining++;
|
|
if ( nextTarget == "" )
|
|
nextTarget = "dumpster";
|
|
}
|
|
|
|
if ( !curRemaining )
|
|
break;
|
|
|
|
if ( curRemaining != numRemaining )
|
|
{
|
|
//level.marine4 execDialog( nextTarget );
|
|
//level.marine4.lastNagTime = getTime();
|
|
}
|
|
else
|
|
{
|
|
//level.marine4 nagPlayer( nextTarget + "again", 10.0 );
|
|
}
|
|
|
|
numRemaining = curRemaining;
|
|
|
|
wait ( 0.05 );
|
|
}
|
|
|
|
//maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
|
|
|
|
wait ( 1.0 );
|
|
//level.marine4 thread execDialog( "gotorange" );
|
|
|
|
flag_set ( "fragTraining_end" );
|
|
thread launcherTraining();
|
|
flag_clear ( "aa_frag" );
|
|
}
|
|
|
|
launcherTraining()
|
|
{
|
|
level endon ( "PlayerSkipTheOptionalCourses" );
|
|
|
|
if( flag( "cargoshipTutoDone" ) )
|
|
return;
|
|
|
|
flag_set ( "aa_launcher" );
|
|
level notify ( "launcherTraining_begin" );
|
|
|
|
autosave_by_name( "launcher_training" );
|
|
|
|
flag_set ( "spawn_launcher" );
|
|
|
|
level.newcastle setgoalnode ( getnode ( "watch_table_node", "script_noteworthy" ) );
|
|
//level.newcastle thread walk_to ( getnode ( "watch_table_node", "script_noteworthy" ) );
|
|
|
|
//Now let's try something with a little more 'mojo'. I don't know how much experience you've got with demolitions, so just do as I say, all right?
|
|
//level.newcastle execDialog( "moremojo" );
|
|
|
|
if ( !level.player hasWeapon( "m203_m4" ) )
|
|
{
|
|
//Come back here and pick up this grenade launcher.
|
|
level.newcastle maps\killhouse_code::execDialog( "pickuplauncher" );
|
|
}
|
|
|
|
flag_trigger_init( "launcher_wall_target", getEnt( "launcher_wall_trigger", "script_noteworthy" ) );
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PICK_UP_THE_RIFLE_WITH" );
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "obj_frag_ammo", "targetname" ) );
|
|
|
|
thread maps\killhouse_code::keyHint( "swap_launcher" );
|
|
|
|
while ( !level.player hasWeapon( "m203_m4" ) )
|
|
wait ( 0.05 );
|
|
maps\killhouse_code::clear_hints();
|
|
thread scripts\killhouse\hint::M203_icon_hint();
|
|
RefreshHudAmmoCounter();
|
|
|
|
|
|
level.player giveMaxAmmo( "m203_m4" );
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_RETURN_TO_THE_SAFETY" );
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
|
|
|
|
//Notice you now have an icon of a grenade launcher on your HUD.
|
|
//level.newcastle execDialog( "icononhud" );
|
|
|
|
if ( !( level.player istouching( getEnt( "safety_pit", "targetname" ) ) ) )
|
|
{
|
|
//Now get back into the safety pit.
|
|
level.newcastle maps\killhouse_code::execDialog( "nowbacktopit" );
|
|
}
|
|
getEnt( "safety_pit", "targetname" ) waittill ( "trigger" );
|
|
|
|
//level.newcastle thread walk_to( getnode ( "watch_pit_node", "script_noteworthy" ) );
|
|
level.newcastle setgoalnode ( getnode ( "watch_pit_node", "script_noteworthy" ) );
|
|
|
|
if ( !(level.player getCurrentWeapon() == "m203_m4") )
|
|
{
|
|
//Equip the grenade launcher.
|
|
level.newcastle maps\killhouse_code::execDialog( "equiplauncher" );
|
|
thread maps\killhouse_code::keyHint( "firemode" );
|
|
RefreshHudAmmoCounter();
|
|
}
|
|
|
|
while ( !(level.player getCurrentWeapon() == "m203_m4") )
|
|
{
|
|
thread maps\killhouse_code::keyHint( "firemode" );
|
|
wait ( 1.0 );
|
|
}
|
|
|
|
maps\killhouse_code::clear_hints();
|
|
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_FIRE_AT_THE_WALL_WITH" );
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
|
|
wait ( 0.1 );
|
|
|
|
//Fire at the wall with the number one on it.
|
|
level.newcastle maps\killhouse_code::execDialog( "firewall1" );
|
|
|
|
if ( level.xenon )
|
|
thread maps\killhouse_code::keyHint( "attack" );
|
|
else
|
|
thread maps\killhouse_code::keyHint( "pc_attack" );//PC and PS3 are both press
|
|
|
|
while ( !flag( "launcher_wall_target" ) )
|
|
{
|
|
//level.player giveMaxAmmo( "m203_m4" );
|
|
wait ( 0.05 );
|
|
}
|
|
maps\killhouse_code::clear_hints();
|
|
wait ( 0.1 );
|
|
|
|
//Notice it didn't explode.
|
|
level.newcastle maps\killhouse_code::execDialog( "didntexplode" );
|
|
|
|
//As you know, all grenade launchers have a minimum safe arming distance.
|
|
level.newcastle maps\killhouse_code::execDialog( "safearming" );
|
|
|
|
//The grenade wont explode unless it travels that distance.
|
|
//level.newcastle execDialog( "wontexplode" );
|
|
|
|
//Right. Now pop a grenade in each window, five, six and seven.
|
|
level.newcastle thread maps\killhouse_code::execDialog( "56and7" );
|
|
|
|
|
|
array_thread ( getEntArray( "gl_too_low", "targetname" ), maps\killhouse::gl_too_low_hint );
|
|
|
|
thread maps\killhouse::launcher_trigger_think( "launcher_target_1", getEnt( "launcher_damage_trigger1", "targetname" ) );
|
|
thread maps\killhouse::launcher_trigger_think( "launcher_target_2", getEnt( "launcher_damage_trigger2", "targetname" ) );
|
|
thread maps\killhouse::launcher_trigger_think( "launcher_target_3", getEnt( "launcher_damage_trigger3", "targetname" ) );
|
|
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_FIRE_YOUR_GRENADE_LAUNCHER" );
|
|
|
|
numRemaining = 0;
|
|
for ( index = 1; index < 4; index++ )
|
|
{
|
|
if ( flag( "launcher_target_" + index ) )
|
|
continue;
|
|
|
|
numRemaining++;
|
|
}
|
|
|
|
|
|
//level.marine5.lastNagTime = getTime();
|
|
while( numRemaining )
|
|
{
|
|
curRemaining = 0;
|
|
|
|
nextTarget = "";
|
|
if ( !flag( "launcher_target_1" ) )
|
|
{
|
|
curRemaining++;
|
|
nextTarget = "hittwo";
|
|
}
|
|
if ( !flag( "launcher_target_2" ) )
|
|
{
|
|
curRemaining++;
|
|
if ( nextTarget == "" )
|
|
nextTarget = "hitthree";
|
|
}
|
|
if ( !flag( "launcher_target_3" ) )
|
|
{
|
|
curRemaining++;
|
|
if ( nextTarget == "" )
|
|
nextTarget = "hitfour";
|
|
}
|
|
|
|
if ( !curRemaining )
|
|
break;
|
|
|
|
//level.player giveMaxAmmo( "m203_m4" );
|
|
|
|
if ( curRemaining != numRemaining )
|
|
{
|
|
//level.marine5.lastNagTime = getTime();
|
|
}
|
|
else
|
|
{
|
|
//level.marine5 nagPlayer( nextTarget, 8.0 );
|
|
}
|
|
|
|
numRemaining = curRemaining;
|
|
|
|
wait ( 0.05 );
|
|
}
|
|
|
|
level notify ( "launcherTraining_end" );
|
|
//maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
|
|
|
|
wait ( 1.0 );
|
|
//level.marine5 execDialog( "oorah" );
|
|
wait ( 1.0 );
|
|
|
|
flag_clear ( "aa_launcher" );
|
|
thread c4_Training();
|
|
}
|
|
|
|
c4_Training()
|
|
{
|
|
level endon ( "PlayerSkipTheOptionalCourses" );
|
|
|
|
if( flag( "cargoshipTutoDone" ) )
|
|
return;
|
|
|
|
flag_set ( "aa_c4" );
|
|
level notify ( "explosivesTraining_begin" );
|
|
|
|
autosave_by_name( "c4_training" );
|
|
|
|
pickupTrigger = flag_trigger_init( "explosives_pickup", getEnt( "c4_pickup", "targetname" ) );
|
|
C4_models = getEntArray( pickupTrigger.target, "targetname" );
|
|
|
|
pickupTrigger setHintString (&"KILLHOUSE_C4_PICKUP");
|
|
pickupTrigger trigger_on();
|
|
for ( i = 0; i < C4_models.size; i++ )
|
|
C4_models[ i ] show();
|
|
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", pickupTrigger );
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PICK_UP_THE_C4_EXPLOSIVE" );
|
|
|
|
//Come back around and pick up some C4 off the table.
|
|
level.newcastle thread maps\killhouse_code::execDialog( "c4offtable" );
|
|
|
|
//level.newcastle thread walk_to ( getnode ( "watch_c4_node", "script_noteworthy" ) );
|
|
level.newcastle setgoalnode ( getnode ( "watch_c4_node", "script_noteworthy" ) );
|
|
|
|
thread maps\killhouse_code::keyHint( "swap_explosives" );
|
|
|
|
while ( !flag( "explosives_pickup" ) )
|
|
wait ( 0.05 );
|
|
|
|
level.player playsound ( "detpack_pickup" );
|
|
for ( i = 0; i < C4_models.size; i++ )
|
|
C4_models[ i ] hide();
|
|
pickupTrigger trigger_off();
|
|
old_weapon = level.player GetCurrentWeapon ();
|
|
level.player giveWeapon("c4");
|
|
level.player SetWeaponAmmoClip( "c4", 1 );
|
|
level.player SetActionSlot( 2, "weapon" , "c4" );
|
|
|
|
thread scripts\killhouse\hint::C4_icon_hint();
|
|
RefreshHudAmmoCounter();
|
|
thread maps\killhouse::flag_when_c4_thrown();
|
|
|
|
wait .5;
|
|
|
|
if ( !(level.player getCurrentWeapon() == "c4") )
|
|
{
|
|
level.newcastle maps\killhouse_code::execDialog( "equipc4" ); //Equip the C4, Soap.
|
|
//thread keyHint( "equip_C4" );
|
|
level notify ( "c4_equiped" );
|
|
level.hintElem setText( &"KILLHOUSE_HINT_EQUIP_C4" );
|
|
RefreshHudAmmoCounter();
|
|
}
|
|
|
|
while ( !(level.player getCurrentWeapon() == "c4") )
|
|
{
|
|
wait ( 1.0 );
|
|
}
|
|
|
|
|
|
flag_set ( "c4_equiped" );
|
|
level.hintbackground destroy();
|
|
double_line = true;
|
|
maps\killhouse_code::add_hint_background( double_line );
|
|
level.hintElem setText( &"KILLHOUSE_HINT_HUD_CHANGES" );
|
|
RefreshHudAmmoCounter();
|
|
//thread hint( &"KILLHOUSE_HINT_HUD_CHANGES", 9999 );
|
|
|
|
//It seems my ex-wife was kind enough to donate her car to furthering your education Soap.
|
|
level.newcastle maps\killhouse_code::execDialog( "exwifecar" );
|
|
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "c4_target", "targetname" ) );
|
|
|
|
level notify ( "C4_the_car" );
|
|
|
|
if ( !flag ( "c4_thrown" ) )
|
|
level.newcastle maps\killhouse_code::execDialog( "throwc4car" ); //Throw some C4 on the car.
|
|
|
|
if ( ( !flag ( "near_car" ) ) && ( !flag ( "c4_thrown" ) ) )
|
|
{
|
|
//thread hint( &"KILLHOUSE_HINT_APPROACH_C4_THROW", 9999 );
|
|
level.hintbackground destroy();
|
|
maps\killhouse_code::add_hint_background();
|
|
level.hintElem setText( &"KILLHOUSE_HINT_APPROACH_C4_THROW" );
|
|
flag_wait ( "near_car" );
|
|
}
|
|
|
|
|
|
if ( !flag ( "c4_thrown" ) )
|
|
maps\killhouse_code::keyHint( "throw_C4" );
|
|
|
|
flag_wait ( "c4_thrown" );
|
|
|
|
wait .5;
|
|
|
|
//Sgt Newcastle - When planting C4 is your objective, you will see a glowing marker in the world that indicates where to plant it.
|
|
//thread add_dialogue_line( "newcastle", "When planting C4 is your objective, you will see a glowing marker in the world that indicates where to plant it." );
|
|
double_line = true;
|
|
thread maps\killhouse_code::hint( &"KILLHOUSE_C4_OBJECTIVE", 9999, double_line );
|
|
wait 4;
|
|
|
|
//Place the C4 on the indicated spot.
|
|
level.newcastle thread maps\killhouse_code::execDialog( "placec4" );
|
|
|
|
c4_target = getent( "c4_target", "targetname" );
|
|
c4_target maps\_c4::c4_location( undefined, undefined, undefined, c4_target.origin );
|
|
level thread do_in_order( ::waittill_msg, "c4_in_place", ::flag_set, "C4_planted" );
|
|
|
|
wait ( 1.0 );
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PLANT_THE_C4_EXPLOSIVE" );
|
|
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", c4_target );
|
|
|
|
thread maps\killhouse_code::keyhint( "plant_explosives", 9999, 1 );
|
|
|
|
flag_wait ( "C4_planted" );
|
|
|
|
c4_target thread maps\killhouse::force_detonation();
|
|
|
|
maps\killhouse_code::clear_hints();
|
|
|
|
// maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
|
|
|
|
//level.newcastle execDialog( "morec4" ); //Go get some more C4 from the table.
|
|
//level.newcastle execDialog( "behindwall" ); //Now come over here behind the safety wall.
|
|
|
|
if( !flag( "car_destroyed" ) )
|
|
level.newcastle maps\killhouse_code::execDialog( "safedistance" ); //Now get to a safe distance from the explosives.
|
|
|
|
|
|
while ( ( distance( c4_target.origin, level.player.origin ) <= 256 ) && !flag( "car_destroyed" ) )
|
|
wait 0.05;
|
|
|
|
if( !flag( "car_destroyed" ) )
|
|
{
|
|
level.newcastle maps\killhouse_code::execDialog( "fireinhole" ); //Fire in the hole!
|
|
thread maps\killhouse_code::keyHint( "detonate_C4", 9999 );
|
|
}
|
|
|
|
flag_wait ( "car_destroyed" );
|
|
thread maps\killhouse::switch_in_two( old_weapon );
|
|
|
|
maps\killhouse_code::clear_hints();
|
|
|
|
if(AssetIsExisting(22, "IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING"))
|
|
objectiveText = &"IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING";
|
|
else
|
|
objectiveText = &"KILLHOUSE_GO_OUTSIDE_AND_REPORT";
|
|
|
|
maps\killhouse_code::setObjectiveString( "obj_demolitions", objectiveText );
|
|
maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
|
|
|
|
level.player_completed_demolitions_training = true;
|
|
|
|
thread C4_complete_dialog();
|
|
|
|
level notify ( "explosivesTraining_end" );
|
|
flag_clear ( "aa_c4" );
|
|
}
|
|
|
|
C4_complete_dialog()
|
|
{
|
|
level.newcastle maps\killhouse_code::execDialog( "chuckle" ); //< satisfied chuckling >
|
|
level.newcastle maps\killhouse_code::execDialog( "muchimproved" ); //Much improved.
|
|
|
|
if ( !flag( "start_obstacle" ) )
|
|
level.newcastle maps\killhouse_code::execDialog( "passedeval" ); //All right Soap, you passed the weapons evaluation.
|
|
}
|
|
|
|
obstacle_Training()
|
|
{
|
|
level endon ( "PlayerSkipTheOptionalCourses" );
|
|
|
|
if( flag( "cargoshipTutoDone" ) )
|
|
return;
|
|
|
|
flag_set ( "aa_obstacle" );
|
|
level notify ( "obstacleTraining_start" );
|
|
|
|
// maps\killhouse_code::registerObjective( "obj_obstacle", &"KILLHOUSE_RUN_THE_OBSTACLE_COURSE", getEnt( "obstacleTraining_objective", "targetname" ) );
|
|
// maps\killhouse_code::setObjectiveState( "obj_obstacle", "current" );
|
|
|
|
//thread generic_compass_hint_reminder( "start_obstacle", 7 );
|
|
|
|
getEnt( "obstacle_course_start", "targetname" ) waittill ( "trigger" );
|
|
|
|
flag_set ( "start_obstacle" );
|
|
|
|
flag_trigger_init( "prone_entered", getEnt( "obstacleTraining_prone", "targetname" ) );
|
|
thread maps\killhouse_code::obstacleTraining_buddies();
|
|
|
|
thread maps\killhouse::obstacleTraining_dialog();
|
|
|
|
flag_wait( "start_course" );
|
|
|
|
maps\killhouse_code::setObjectiveLocation( "obj_obstacle", getEnt( "obj_course_end", "targetname" ) );
|
|
|
|
move_mac_triggers = getentarray( "move_mac", "targetname" );
|
|
array_thread( move_mac_triggers, maps\killhouse_code::move_mac );
|
|
|
|
getEnt( "obstacleTraining_mantle", "targetname" ) waittill ( "trigger" );
|
|
thread maps\killhouse_code::keyHint( "mantle", 5.0 );
|
|
|
|
flag_wait( "obstacleTraining_crouch" );
|
|
thread maps\killhouse_code::keyHint( "crouch" );
|
|
|
|
flag_wait( "obstacleTraining_mantle2" );
|
|
thread maps\killhouse_code::keyHint( "mantle", 5.0 );
|
|
|
|
flag_wait( "prone_entered" );
|
|
thread maps\killhouse_code::keyHint( "prone" );
|
|
|
|
getEnt( "obstacleTraining_Standup", "targetname" ) waittill ( "trigger" );
|
|
thread maps\killhouse_code::keyHint( "stand", 5.0 );
|
|
maps\killhouse_code::clear_hints_on_stand();
|
|
|
|
wait .1;
|
|
|
|
//player must sprint
|
|
if ( level.xenon )// ghetto but PS3 requires "Press X" and 360 requires "Click X"
|
|
maps\killhouse_code::keyHint( "sprint" );
|
|
else
|
|
maps\killhouse_code::keyHint( "sprint_pc" );
|
|
|
|
flag_set ( "player_sprinted" );
|
|
|
|
if( !flag( "obstacle_course_end" ) )
|
|
thread maps\killhouse_code::second_sprint_hint();
|
|
|
|
flag_wait( "obstacle_course_end" );
|
|
level notify ( "kill_sprint_hint" );
|
|
maps\killhouse_code::clear_hints();
|
|
maps\killhouse_code::setObjectiveState( "obj_obstacle", "done" );
|
|
level.player_completed_obstacle_course_training = true;
|
|
flag_clear ( "aa_obstacle" );
|
|
}
|
|
|
|
player_skipped_the_optional_objectives()
|
|
{
|
|
while( true )
|
|
{
|
|
if(flag( "open_ship_hanger" ) )
|
|
{
|
|
if(!level.player_completed_demolitions_training)
|
|
maps\killhouse_code::setObjectiveState( "obj_demolitions", "empty" );
|
|
|
|
if(!level.player_completed_obstacle_course_training)
|
|
{
|
|
level.player_skipped_obstacle_course = true;
|
|
maps\killhouse_code::setObjectiveState( "obj_obstacle", "empty" );
|
|
}
|
|
|
|
flag_set( "cargoshipTutoDone" );
|
|
level notify("in_pit_with_frags");
|
|
level notify("PlayerSkipTheOptionalCourses");
|
|
level notify("obstacleTraining_end"); //for skip the Mac dialog
|
|
break;
|
|
}
|
|
wait (0.05);
|
|
}
|
|
} |