mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
uploading 17 zm_highrise_patch/mp scripts as a baseline
This commit is contained in:
parent
28b4f9edf7
commit
9763aea127
12
zm_highrise_patch/maps/mp/_sticky_grenade.gsc
Normal file
12
zm_highrise_patch/maps/mp/_sticky_grenade.gsc
Normal file
@ -0,0 +1,12 @@
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
|
||||
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" );
|
||||
}
|
||||
|
||||
watch_bolt_detonation( owner )
|
||||
{
|
||||
}
|
1803
zm_highrise_patch/maps/mp/zm_highrise.gsc
Normal file
1803
zm_highrise_patch/maps/mp/zm_highrise.gsc
Normal file
File diff suppressed because it is too large
Load Diff
193
zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc
Normal file
193
zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc
Normal file
@ -0,0 +1,193 @@
|
||||
#include maps/mp/gametypes_zm/_globallogic_score;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
level thread achievement_highrise_sidequest();
|
||||
level thread achievement_mad_without_power();
|
||||
level.achievement_sound_func = ::achievement_sound_func;
|
||||
onplayerconnect_callback( ::onplayerconnect );
|
||||
}
|
||||
|
||||
achievement_sound_func( achievement_name_lower )
|
||||
{
|
||||
self thread do_player_general_vox( "general", "achievement" );
|
||||
}
|
||||
|
||||
init_player_achievement_stats()
|
||||
{
|
||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_highrise_sidequest", 0 );
|
||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 );
|
||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 );
|
||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 );
|
||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 );
|
||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 );
|
||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 );
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
{
|
||||
self thread achievement_vertigoner();
|
||||
self thread achievement_slippery_when_undead();
|
||||
self thread achievement_facing_the_dragon();
|
||||
self thread achievement_im_my_own_best_friend();
|
||||
self thread achievement_shafted();
|
||||
}
|
||||
|
||||
achievement_highrise_sidequest()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
level waittill( "highrise_sidequest_achieved" );
|
||||
/#
|
||||
iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" );
|
||||
#/
|
||||
level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 );
|
||||
}
|
||||
|
||||
achievement_vertigoner()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
self.num_zombies_flung = 0;
|
||||
max_zombies_flung = 10;
|
||||
while ( self.num_zombies_flung < max_zombies_flung )
|
||||
{
|
||||
self waittill( "zombie_flung" );
|
||||
wait 0,1;
|
||||
}
|
||||
/#
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
|
||||
}
|
||||
|
||||
achievement_slippery_when_undead()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
self.num_sliquifier_kills = 0;
|
||||
max_kills_with_one_shot = 5;
|
||||
while ( self.num_sliquifier_kills < max_kills_with_one_shot )
|
||||
{
|
||||
self waittill( "sliquifier_kill" );
|
||||
wait 0,01;
|
||||
}
|
||||
/#
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
|
||||
}
|
||||
|
||||
achievement_facing_the_dragon()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
v_achievement_location = ( 2209, 693, 3200 );
|
||||
v_dragon_position = ( 971, 43, 3800 );
|
||||
is_touching_distance = 350;
|
||||
round_number_max = 2;
|
||||
while ( 1 )
|
||||
{
|
||||
if ( level.round_number >= round_number_max )
|
||||
{
|
||||
return;
|
||||
}
|
||||
dist = distance( self.origin, v_achievement_location );
|
||||
if ( dist <= is_touching_distance )
|
||||
{
|
||||
v_dir = vectornormalize( v_dragon_position - self.origin );
|
||||
v_forward = self getweaponforwarddir();
|
||||
dp = vectordot( v_dir, v_forward );
|
||||
if ( dp > 0,95 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,01;
|
||||
}
|
||||
}
|
||||
/#
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
|
||||
}
|
||||
|
||||
achievement_im_my_own_best_friend()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
self waittill( "whos_who_self_revive" );
|
||||
/#
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" );
|
||||
}
|
||||
|
||||
achievement_mad_without_power()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
round_number_max = 10;
|
||||
while ( level.round_number < round_number_max )
|
||||
{
|
||||
level waittill( "start_of_round" );
|
||||
if ( flag( "power_on" ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
/#
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
|
||||
}
|
||||
|
||||
achievement_shafted()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
level.perk_bought_func = ::player_buys_perk_machine;
|
||||
max_unique_perk_machines = 6;
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill_any( "player_buys_perk", "pap_used" );
|
||||
if ( isDefined( self.pap_used ) && self.pap_used == 1 )
|
||||
{
|
||||
if ( isDefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
/#
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
|
||||
}
|
||||
|
||||
player_buys_perk_machine( perk )
|
||||
{
|
||||
if ( !isDefined( self.perk_machines_bought ) )
|
||||
{
|
||||
self.perk_machines_bought = [];
|
||||
}
|
||||
found = 0;
|
||||
i = 0;
|
||||
while ( i < self.perk_machines_bought.size )
|
||||
{
|
||||
if ( perk == self.perk_machines_bought[ i ] )
|
||||
{
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( !found )
|
||||
{
|
||||
self.perk_machines_bought[ self.perk_machines_bought.size ] = perk;
|
||||
self notify( "player_buys_perk" );
|
||||
}
|
||||
}
|
75
zm_highrise_patch/maps/mp/zm_highrise_amb.gsc
Normal file
75
zm_highrise_patch/maps/mp/zm_highrise_amb.gsc
Normal file
@ -0,0 +1,75 @@
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_ambientpackage;
|
||||
|
||||
main()
|
||||
{
|
||||
level thread sndmusicegg();
|
||||
}
|
||||
|
||||
sndmusicegg()
|
||||
{
|
||||
origins = [];
|
||||
origins[ 0 ] = ( 2724, 300, 1347 );
|
||||
origins[ 1 ] = ( 2639, 1831, 1359 );
|
||||
origins[ 2 ] = ( 1230, 1846, 3249 );
|
||||
level.meteor_counter = 0;
|
||||
level.music_override = 0;
|
||||
i = 0;
|
||||
while ( i < origins.size )
|
||||
{
|
||||
level thread sndmusicegg_wait( origins[ i ] );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
sndmusicegg_wait( bear_origin )
|
||||
{
|
||||
temp_ent = spawn( "script_origin", bear_origin );
|
||||
temp_ent playloopsound( "zmb_meteor_loop" );
|
||||
temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
||||
temp_ent waittill( "main_music_egg_hit", player );
|
||||
temp_ent stoploopsound( 1 );
|
||||
player playsound( "zmb_meteor_activate" );
|
||||
level.meteor_counter += 1;
|
||||
if ( level.meteor_counter == 3 )
|
||||
{
|
||||
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 1,5;
|
||||
temp_ent delete();
|
||||
}
|
||||
}
|
||||
|
||||
sndmusicegg_override()
|
||||
{
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
sndmuseggplay( ent, alias, time )
|
||||
{
|
||||
level.music_override = 1;
|
||||
wait 1;
|
||||
ent playsound( alias );
|
||||
level thread sndeggmusicwait( time );
|
||||
level waittill_either( "end_game", "sndSongDone" );
|
||||
ent stopsounds();
|
||||
wait 0,05;
|
||||
ent delete();
|
||||
level.music_override = 0;
|
||||
}
|
||||
|
||||
sndeggmusicwait( time )
|
||||
{
|
||||
level endon( "end_game" );
|
||||
wait time;
|
||||
level notify( "sndSongDone" );
|
||||
}
|
353
zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc
Normal file
353
zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc
Normal file
@ -0,0 +1,353 @@
|
||||
#include maps/mp/zombies/_zm_unitrigger;
|
||||
#include maps/mp/zm_highrise_elevators;
|
||||
#include maps/mp/zombies/_zm_buildables;
|
||||
#include maps/mp/zm_transit_utility;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init_buildables()
|
||||
{
|
||||
level.buildable_piece_count = 13;
|
||||
add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" );
|
||||
add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" );
|
||||
add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
|
||||
add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
|
||||
add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
|
||||
}
|
||||
|
||||
include_buildables()
|
||||
{
|
||||
springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 );
|
||||
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 );
|
||||
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 );
|
||||
springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 );
|
||||
springpad = spawnstruct();
|
||||
springpad.name = "springpad_zm";
|
||||
springpad add_buildable_piece( springpad_door );
|
||||
springpad add_buildable_piece( springpad_flag );
|
||||
springpad add_buildable_piece( springpad_motor );
|
||||
springpad add_buildable_piece( springpad_whistle );
|
||||
springpad.triggerthink = ::springpadbuildable;
|
||||
include_buildable( springpad );
|
||||
slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 );
|
||||
slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 );
|
||||
slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 );
|
||||
slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 );
|
||||
slipgun = spawnstruct();
|
||||
slipgun.name = "slipgun_zm";
|
||||
slipgun add_buildable_piece( slipgun_canister );
|
||||
slipgun add_buildable_piece( slipgun_cooker );
|
||||
slipgun add_buildable_piece( slipgun_foot );
|
||||
slipgun add_buildable_piece( slipgun_throttle );
|
||||
slipgun.onbuyweapon = ::onbuyweapon_slipgun;
|
||||
slipgun.triggerthink = ::slipgunbuildable;
|
||||
slipgun.onuseplantobject = ::onuseplantobject_slipgun;
|
||||
include_buildable( slipgun );
|
||||
key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2,4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 );
|
||||
key_chain.onspawn = ::onspawn_keys;
|
||||
key_chain manage_multiple_pieces( 4 );
|
||||
key = spawnstruct();
|
||||
key.name = "keys_zm";
|
||||
key add_buildable_piece( key_chain );
|
||||
key.triggerthink = ::keysbuildable;
|
||||
key.onuseplantobject = ::onuseplantobject_escapepodkey;
|
||||
key.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
|
||||
include_buildable( key );
|
||||
ekey = spawnstruct();
|
||||
ekey.name = "ekeys_zm";
|
||||
ekey add_buildable_piece( key_chain );
|
||||
ekey.triggerthink = ::ekeysbuildable;
|
||||
ekey.onuseplantobject = ::onuseplantobject_elevatorkey;
|
||||
ekey.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
|
||||
include_buildable( ekey );
|
||||
if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
|
||||
{
|
||||
sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 );
|
||||
sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 128, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 );
|
||||
sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 );
|
||||
sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 );
|
||||
sqcommon = spawnstruct();
|
||||
sqcommon.name = "sq_common";
|
||||
sqcommon add_buildable_piece( sq_common_electricbox );
|
||||
sqcommon add_buildable_piece( sq_common_meteor );
|
||||
sqcommon add_buildable_piece( sq_common_scaffolding );
|
||||
sqcommon add_buildable_piece( sq_common_transceiver );
|
||||
sqcommon.triggerthink = ::sqcommonbuildable;
|
||||
include_buildable( sqcommon );
|
||||
maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
|
||||
}
|
||||
}
|
||||
|
||||
springpadbuildable()
|
||||
{
|
||||
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 );
|
||||
}
|
||||
|
||||
slipgunbuildable()
|
||||
{
|
||||
level thread wait_for_slipgun();
|
||||
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
|
||||
{
|
||||
persist = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
persist = 1;
|
||||
}
|
||||
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
|
||||
}
|
||||
|
||||
keysbuildable()
|
||||
{
|
||||
pod_key = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 );
|
||||
pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt;
|
||||
}
|
||||
|
||||
ekeysbuildable()
|
||||
{
|
||||
elevator_keys = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 );
|
||||
_a143 = elevator_keys;
|
||||
_k143 = getFirstArrayKey( _a143 );
|
||||
while ( isDefined( _k143 ) )
|
||||
{
|
||||
stub = _a143[ _k143 ];
|
||||
stub.prompt_and_visibility_func = ::elevator_key_prompt;
|
||||
stub.buildablezone.stat_name = "keys_zm";
|
||||
_k143 = getNextArrayKey( _a143, _k143 );
|
||||
}
|
||||
}
|
||||
|
||||
ondrop_common( player )
|
||||
{
|
||||
/#
|
||||
println( "ZM >> Common part callback onDrop()" );
|
||||
#/
|
||||
self droponelevator( player );
|
||||
self.piece_owner = undefined;
|
||||
}
|
||||
|
||||
onpickup_common( player )
|
||||
{
|
||||
/#
|
||||
println( "ZM >> Common part callback onPickup()" );
|
||||
#/
|
||||
player playsound( "zmb_buildable_pickup" );
|
||||
self pickupfromelevator();
|
||||
self.piece_owner = player;
|
||||
}
|
||||
|
||||
sqcommonbuildable()
|
||||
{
|
||||
level.sq_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
||||
}
|
||||
|
||||
onbuyweapon_slipgun( player )
|
||||
{
|
||||
player givestartammo( self.stub.weaponname );
|
||||
player switchtoweapon( self.stub.weaponname );
|
||||
level notify( "slipgun_bought" );
|
||||
}
|
||||
|
||||
wait_for_slipgun()
|
||||
{
|
||||
level.zombie_include_weapons[ "slipgun_zm" ] = 0;
|
||||
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
|
||||
{
|
||||
level waittill( "slipgun_bought", player );
|
||||
level.zombie_include_weapons[ "slipgun_zm" ] = 1;
|
||||
level.zombie_weapons[ "slipgun_zm" ].is_in_box = 1;
|
||||
}
|
||||
}
|
||||
|
||||
keyscreateglint()
|
||||
{
|
||||
if ( !isDefined( self.model.glint_fx ) )
|
||||
{
|
||||
playfxontag( level._effect[ "elevator_glint" ], self.model, "tag_origin" );
|
||||
}
|
||||
}
|
||||
|
||||
onspawn_keys()
|
||||
{
|
||||
self keyscreateglint();
|
||||
}
|
||||
|
||||
ondrop_keys( player )
|
||||
{
|
||||
self keyscreateglint();
|
||||
}
|
||||
|
||||
onpickup_keys( player )
|
||||
{
|
||||
}
|
||||
|
||||
escape_pod_key_prompt( player )
|
||||
{
|
||||
if ( !flag( "escape_pod_needs_reset" ) )
|
||||
{
|
||||
self.stub.hint_string = "";
|
||||
self sethintstring( self.stub.hint_string );
|
||||
return 0;
|
||||
}
|
||||
return self buildabletrigger_update_prompt( player );
|
||||
}
|
||||
|
||||
onuseplantobject_escapepodkey( player )
|
||||
{
|
||||
level notify( "reset_escape_pod" );
|
||||
}
|
||||
|
||||
watch_elevator_prompt( player, trig )
|
||||
{
|
||||
player notify( "watch_elevator_prompt" );
|
||||
player endon( "watch_elevator_prompt" );
|
||||
trig endon( "kill_trigger" );
|
||||
while ( 1 )
|
||||
{
|
||||
trig.stub.elevator waittill( "floor_changed" );
|
||||
if ( isDefined( self.stub.elevator ) )
|
||||
{
|
||||
if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
|
||||
{
|
||||
thread maps/mp/zombies/_zm_unitrigger::cleanup_trigger( trig, player );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
elevator_key_prompt( player )
|
||||
{
|
||||
if ( !isDefined( self.stub.elevator ) )
|
||||
{
|
||||
elevatorname = self.stub.script_noteworthy;
|
||||
if ( isDefined( elevatorname ) && isDefined( self.stub.script_parameters ) )
|
||||
{
|
||||
elevator = level.elevators[ elevatorname ];
|
||||
floor = int( self.stub.script_parameters );
|
||||
flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor );
|
||||
self.stub.elevator = elevator;
|
||||
self.stub.floor = flevel;
|
||||
}
|
||||
}
|
||||
/#
|
||||
if ( !isDefined( self.stub.elevator ) )
|
||||
{
|
||||
if ( isDefined( self.stub.script_noteworthy ) )
|
||||
{
|
||||
error( "Cannot locate elevator " + self.stub.script_noteworthy );
|
||||
}
|
||||
else
|
||||
{
|
||||
error( "Cannot locate elevator " );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
color = vectorScale( ( 0, 0, 1 ), 0,7 );
|
||||
stop = self.stub.floor;
|
||||
floor = self.stub.elevator.floors[ "" + stop ].script_location;
|
||||
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
|
||||
if ( getDvarInt( #"B67910B4" ) )
|
||||
{
|
||||
print3d( self.stub.origin, text, color, 1, 0,5, 300 );
|
||||
#/
|
||||
}
|
||||
}
|
||||
if ( isDefined( self.stub.elevator ) )
|
||||
{
|
||||
if ( self.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
|
||||
{
|
||||
self.stub.hint_string = "";
|
||||
self sethintstring( self.stub.hint_string );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if ( !flag( "power_on" ) )
|
||||
{
|
||||
self.stub.hint_string = "";
|
||||
self sethintstring( self.stub.hint_string );
|
||||
return 0;
|
||||
}
|
||||
can_use = self buildabletrigger_update_prompt( player );
|
||||
if ( can_use )
|
||||
{
|
||||
thread watch_elevator_prompt( player, self );
|
||||
}
|
||||
return can_use;
|
||||
}
|
||||
|
||||
onuseplantobject_elevatorkey( player )
|
||||
{
|
||||
elevatorname = self.script_noteworthy;
|
||||
if ( isDefined( elevatorname ) && isDefined( self.script_parameters ) )
|
||||
{
|
||||
floor = int( self.script_parameters );
|
||||
elevator = level.elevators[ elevatorname ];
|
||||
if ( isDefined( elevator ) )
|
||||
{
|
||||
elevator.body.force_starting_floor = floor;
|
||||
elevator.body notify( "forcego" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
droponelevator( player )
|
||||
{
|
||||
if ( isDefined( player ) && isDefined( player maps/mp/zm_highrise_elevators::object_is_on_elevator() ) && player maps/mp/zm_highrise_elevators::object_is_on_elevator() )
|
||||
{
|
||||
self.model linkto( player.elevator_parent );
|
||||
self.linked_to_elevator = 1;
|
||||
self.unitrigger.link_parent = player.elevator_parent;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.unitrigger.link_parent = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
pickupfromelevator()
|
||||
{
|
||||
if ( isDefined( self.linked_to_elevator ) && self.linked_to_elevator )
|
||||
{
|
||||
if ( isDefined( self.model ) )
|
||||
{
|
||||
self.model unlink();
|
||||
}
|
||||
self.linked_to_elevator = undefined;
|
||||
}
|
||||
if ( isDefined( self.unitrigger ) )
|
||||
{
|
||||
self.unitrigger.link_parent = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
onuseplantobject_slipgun( player )
|
||||
{
|
||||
/#
|
||||
println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" );
|
||||
#/
|
||||
buildable = self.buildablezone;
|
||||
first_part = "TAG_COOKER";
|
||||
second_part = "TAG_BASE";
|
||||
i = 0;
|
||||
while ( i < buildable.pieces.size )
|
||||
{
|
||||
if ( buildable.pieces[ i ].part_name == first_part )
|
||||
{
|
||||
if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && player.current_buildable_piece.part_name == first_part )
|
||||
{
|
||||
buildable.stub.model showpart( second_part );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
buildable.stub.model hidepart( second_part );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
1171
zm_highrise_patch/maps/mp/zm_highrise_classic.gsc
Normal file
1171
zm_highrise_patch/maps/mp/zm_highrise_classic.gsc
Normal file
File diff suppressed because it is too large
Load Diff
415
zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc
Normal file
415
zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc
Normal file
@ -0,0 +1,415 @@
|
||||
#include maps/mp/zombies/_zm_ai_basic;
|
||||
#include maps/mp/zombies/_zm_spawner;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
zombie_tracking_init()
|
||||
{
|
||||
level.zombie_respawned_health = [];
|
||||
if ( !isDefined( level.zombie_tracking_dist ) )
|
||||
{
|
||||
level.zombie_tracking_dist = 1000;
|
||||
}
|
||||
if ( !isDefined( level.zombie_tracking_high ) )
|
||||
{
|
||||
level.zombie_tracking_high = 500;
|
||||
}
|
||||
if ( !isDefined( level.zombie_tracking_wait ) )
|
||||
{
|
||||
level.zombie_tracking_wait = 10;
|
||||
}
|
||||
building_trigs = getentarray( "zombie_fell_off", "targetname" );
|
||||
if ( isDefined( building_trigs ) )
|
||||
{
|
||||
array_thread( building_trigs, ::zombies_off_building );
|
||||
}
|
||||
level.distance_tracker_aggressive_distance = 500;
|
||||
level.distance_tracker_aggressive_height = 200;
|
||||
for ( ;; )
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
zombies = get_round_enemy_array();
|
||||
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||
{
|
||||
wait level.zombie_tracking_wait;
|
||||
}
|
||||
}
|
||||
else i = 0;
|
||||
while ( i < zombies.size )
|
||||
{
|
||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
|
||||
{
|
||||
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
wait level.zombie_tracking_wait;
|
||||
}
|
||||
}
|
||||
|
||||
delete_zombie_noone_looking( how_close, how_high )
|
||||
{
|
||||
self endon( "death" );
|
||||
if ( !isDefined( how_close ) )
|
||||
{
|
||||
how_close = 1000;
|
||||
}
|
||||
if ( !isDefined( how_high ) )
|
||||
{
|
||||
how_high = 500;
|
||||
}
|
||||
distance_squared_check = how_close * how_close;
|
||||
height_squared_check = how_high * how_high;
|
||||
too_far_dist = distance_squared_check * 3;
|
||||
if ( isDefined( level.zombie_tracking_too_far_dist ) )
|
||||
{
|
||||
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
|
||||
}
|
||||
self.inview = 0;
|
||||
self.player_close = 0;
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
if ( players[ i ].sessionstate == "spectator" )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else if ( isDefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
can_be_seen = self player_can_see_me( players[ i ] );
|
||||
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
|
||||
{
|
||||
self.inview++;
|
||||
}
|
||||
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high )
|
||||
{
|
||||
self.player_close++;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
wait 0,1;
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
zombies = getaiarray( "axis" );
|
||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
|
||||
{
|
||||
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
|
||||
{
|
||||
level.zombie_total++;
|
||||
if ( self.health < level.zombie_health )
|
||||
{
|
||||
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
|
||||
}
|
||||
}
|
||||
}
|
||||
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
}
|
||||
}
|
||||
|
||||
player_can_see_me( player )
|
||||
{
|
||||
playerangles = player getplayerangles();
|
||||
playerforwardvec = anglesToForward( playerangles );
|
||||
playerunitforwardvec = vectornormalize( playerforwardvec );
|
||||
banzaipos = self.origin;
|
||||
playerpos = player getorigin();
|
||||
playertobanzaivec = banzaipos - playerpos;
|
||||
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
|
||||
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
|
||||
if ( forwarddotbanzai >= 1 )
|
||||
{
|
||||
anglefromcenter = 0;
|
||||
}
|
||||
else if ( forwarddotbanzai <= -1 )
|
||||
{
|
||||
anglefromcenter = 180;
|
||||
}
|
||||
else
|
||||
{
|
||||
anglefromcenter = acos( forwarddotbanzai );
|
||||
}
|
||||
playerfov = getDvarFloat( "cg_fov" );
|
||||
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
|
||||
if ( banzaivsplayerfovbuffer <= 0 )
|
||||
{
|
||||
banzaivsplayerfovbuffer = 0,2;
|
||||
}
|
||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
||||
return playercanseeme;
|
||||
}
|
||||
|
||||
escaped_zombies_cleanup_init()
|
||||
{
|
||||
self endon( "death" );
|
||||
self.zombie_path_bad = 0;
|
||||
while ( 1 )
|
||||
{
|
||||
if ( !self.zombie_path_bad )
|
||||
{
|
||||
self waittill( "bad_path" );
|
||||
}
|
||||
found_player = undefined;
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
if ( self maymovetopoint( players[ i ].origin, 1 ) )
|
||||
{
|
||||
self.favoriteenemy = players[ i ];
|
||||
found_player = 1;
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
n_delete_distance = 800;
|
||||
n_delete_height = 300;
|
||||
if ( is_player_in_inverted_elevator_shaft() )
|
||||
{
|
||||
n_delete_distance = level.distance_tracker_aggressive_distance;
|
||||
n_delete_height = level.distance_tracker_aggressive_height;
|
||||
}
|
||||
if ( !isDefined( found_player ) && isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area )
|
||||
{
|
||||
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
|
||||
self.zombie_path_bad = 1;
|
||||
self escaped_zombies_cleanup();
|
||||
}
|
||||
wait 0,1;
|
||||
}
|
||||
}
|
||||
|
||||
is_player_in_inverted_elevator_shaft()
|
||||
{
|
||||
b_player_is_in_elevator_shaft = 0;
|
||||
a_occupied_zones = get_occupied_zones();
|
||||
i = 0;
|
||||
while ( i < a_occupied_zones.size )
|
||||
{
|
||||
if ( issubstr( a_occupied_zones[ i ], "orange_elevator_shaft" ) )
|
||||
{
|
||||
b_player_is_in_elevator_shaft = 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return b_player_is_in_elevator_shaft;
|
||||
}
|
||||
|
||||
get_occupied_zones()
|
||||
{
|
||||
a_occupied_zones = [];
|
||||
i = 0;
|
||||
while ( i < level.active_zone_names.size )
|
||||
{
|
||||
if ( level.zones[ level.active_zone_names[ i ] ].is_occupied )
|
||||
{
|
||||
a_occupied_zones[ a_occupied_zones.size ] = level.active_zone_names[ i ];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return a_occupied_zones;
|
||||
}
|
||||
|
||||
get_escape_position()
|
||||
{
|
||||
self endon( "death" );
|
||||
str_zone = get_current_zone();
|
||||
if ( isDefined( str_zone ) )
|
||||
{
|
||||
a_zones = get_adjacencies_to_zone( str_zone );
|
||||
a_dog_locations = get_dog_locations_in_zones( a_zones );
|
||||
s_farthest = self get_farthest_dog_location( a_dog_locations );
|
||||
}
|
||||
return s_farthest;
|
||||
}
|
||||
|
||||
get_current_zone()
|
||||
{
|
||||
str_zone = undefined;
|
||||
a_zones = getarraykeys( level.zones );
|
||||
_a310 = a_zones;
|
||||
_k310 = getFirstArrayKey( _a310 );
|
||||
while ( isDefined( _k310 ) )
|
||||
{
|
||||
zone = _a310[ _k310 ];
|
||||
i = 0;
|
||||
while ( i < level.zones[ zone ].volumes.size )
|
||||
{
|
||||
if ( self istouching( level.zones[ zone ].volumes[ i ] ) )
|
||||
{
|
||||
str_zone = zone;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
_k310 = getNextArrayKey( _a310, _k310 );
|
||||
}
|
||||
return str_zone;
|
||||
}
|
||||
|
||||
get_adjacencies_to_zone( str_zone )
|
||||
{
|
||||
a_adjacencies = [];
|
||||
a_adjacencies[ 0 ] = str_zone;
|
||||
a_adjacent_zones = getarraykeys( level.zones[ str_zone ].adjacent_zones );
|
||||
i = 0;
|
||||
while ( i < a_adjacent_zones.size )
|
||||
{
|
||||
if ( level.zones[ str_zone ].adjacent_zones[ a_adjacent_zones[ i ] ].is_connected )
|
||||
{
|
||||
a_adjacencies[ a_adjacencies.size ] = a_adjacent_zones[ i ];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return a_adjacencies;
|
||||
}
|
||||
|
||||
get_dog_locations_in_zones( a_zones )
|
||||
{
|
||||
a_dog_locations = [];
|
||||
_a345 = a_zones;
|
||||
_k345 = getFirstArrayKey( _a345 );
|
||||
while ( isDefined( _k345 ) )
|
||||
{
|
||||
zone = _a345[ _k345 ];
|
||||
a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 );
|
||||
_k345 = getNextArrayKey( _a345, _k345 );
|
||||
}
|
||||
return a_dog_locations;
|
||||
}
|
||||
|
||||
get_farthest_dog_location( a_dog_locations )
|
||||
{
|
||||
n_farthest_index = 0;
|
||||
n_distance_farthest = 0;
|
||||
i = 0;
|
||||
while ( i < a_dog_locations.size )
|
||||
{
|
||||
n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin );
|
||||
if ( n_distance_sq > n_distance_farthest )
|
||||
{
|
||||
n_distance_farthest = n_distance_sq;
|
||||
n_farthest_index = i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return a_dog_locations[ n_farthest_index ];
|
||||
}
|
||||
|
||||
escaped_zombies_cleanup()
|
||||
{
|
||||
self endon( "death" );
|
||||
s_escape = self get_escape_position();
|
||||
self notify( "stop_find_flesh" );
|
||||
self notify( "zombie_acquire_enemy" );
|
||||
if ( isDefined( s_escape ) )
|
||||
{
|
||||
self setgoalpos( s_escape.origin );
|
||||
self thread check_player_available();
|
||||
self waittill_any( "goal", "reaquire_player" );
|
||||
}
|
||||
self.zombie_path_bad = !can_zombie_path_to_any_player();
|
||||
wait 0,1;
|
||||
if ( !self.zombie_path_bad )
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
|
||||
}
|
||||
}
|
||||
|
||||
check_player_available()
|
||||
{
|
||||
self notify( "_check_player_available" );
|
||||
self endon( "_check_player_available" );
|
||||
self endon( "death" );
|
||||
self endon( "goal" );
|
||||
self endon( "reaquire_player" );
|
||||
while ( self.zombie_path_bad )
|
||||
{
|
||||
if ( self can_zombie_see_any_player() )
|
||||
{
|
||||
self notify( "reaquire_player" );
|
||||
}
|
||||
wait randomfloatrange( 0,2, 0,5 );
|
||||
}
|
||||
}
|
||||
|
||||
can_zombie_path_to_any_player()
|
||||
{
|
||||
a_players = get_players();
|
||||
i = 0;
|
||||
while ( i < a_players.size )
|
||||
{
|
||||
if ( findpath( self.origin, a_players[ i ].origin ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
can_zombie_see_any_player()
|
||||
{
|
||||
a_players = get_players();
|
||||
i = 0;
|
||||
while ( i < a_players.size )
|
||||
{
|
||||
if ( self maymovetopoint( a_players[ i ].origin, 1 ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
zombies_off_building()
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
if ( !isplayer( who ) && isDefined( who.is_leaper ) && !who.is_leaper )
|
||||
{
|
||||
zombies = getaiarray( "axis" );
|
||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && who.health >= who.maxhealth )
|
||||
{
|
||||
if ( isDefined( who.exclude_distance_cleanup_adding_to_total ) && !who.exclude_distance_cleanup_adding_to_total && isDefined( who.is_leaper ) && !who.is_leaper )
|
||||
{
|
||||
level.zombie_total++;
|
||||
if ( who.health < level.zombie_health )
|
||||
{
|
||||
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = who.health;
|
||||
}
|
||||
}
|
||||
}
|
||||
who maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
||||
who notify( "zombie_delete" );
|
||||
who dodamage( who.health + 666, who.origin, who );
|
||||
recalc_zombie_array();
|
||||
}
|
||||
wait 0,1;
|
||||
}
|
||||
}
|
1438
zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc
Normal file
1438
zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc
Normal file
File diff suppressed because it is too large
Load Diff
195
zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc
Normal file
195
zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc
Normal file
@ -0,0 +1,195 @@
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_zonemgr;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
main_start()
|
||||
{
|
||||
level thread spawned_collision_ffotd();
|
||||
level thread eject_player_trigger_init();
|
||||
level thread change_bad_spawner();
|
||||
}
|
||||
|
||||
main_end()
|
||||
{
|
||||
level thread eject_player_trigger();
|
||||
}
|
||||
|
||||
spawned_collision_ffotd()
|
||||
{
|
||||
precachemodel( "collision_wall_32x32x10_standard" );
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
if ( !is_true( level.optimise_for_splitscreen ) )
|
||||
{
|
||||
collision1 = spawn( "script_model", ( 2044, 499, 2893 ) );
|
||||
collision1 setmodel( "collision_wall_32x32x10_standard" );
|
||||
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision1 ghost();
|
||||
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
|
||||
collision2 setmodel( "collision_wall_32x32x10_standard" );
|
||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision2 ghost();
|
||||
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
|
||||
collision3 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision3.angles = ( 0, 0, 0 );
|
||||
collision3 ghost();
|
||||
collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) );
|
||||
collision3b setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision3b.angles = ( 0, 0, 0 );
|
||||
collision3b ghost();
|
||||
collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) );
|
||||
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision3.angles = ( 0, 0, 0 );
|
||||
collision3 ghost();
|
||||
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
|
||||
collision4 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision4.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
collision4 ghost();
|
||||
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
|
||||
collision5 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision5.angles = vectorScale( ( 0, 0, 0 ), 347,6 );
|
||||
collision5 ghost();
|
||||
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
|
||||
collision6b setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision6b.angles = ( 0, 270, 12 );
|
||||
collision6b ghost();
|
||||
collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) );
|
||||
collision6c setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision6c.angles = ( 0, 270, 12 );
|
||||
collision6c ghost();
|
||||
collision7 = spawn( "script_model", ( 2157, 839, 3129 ) );
|
||||
collision7 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision7.angles = ( 0, 9,79996, -90 );
|
||||
collision7 ghost();
|
||||
collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) );
|
||||
collision7 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision7.angles = ( 0, 270, 12 );
|
||||
collision7 ghost();
|
||||
}
|
||||
}
|
||||
|
||||
eject_player_trigger_init()
|
||||
{
|
||||
trig1 = spawn( "trigger_box", ( 3172, 1679, 1296,09 ), 0, 64, 10, 64 );
|
||||
trig1.angles = ( 0, 0, 0 );
|
||||
trig1.targetname = "eject_player_pos";
|
||||
trig1.point = spawn( "script_origin", ( 3266, 1703,5, 1325 ) );
|
||||
trig2 = spawn( "trigger_box", ( 3225,5, 1153, 1346,48 ), 0, 64, 10, 64 );
|
||||
trig2.angles = ( 0, 0, 0 );
|
||||
trig2.targetname = "eject_player_pos";
|
||||
trig2.point = spawn( "script_origin", ( 3074, 1137,5, 1282,26 ) );
|
||||
trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751,95 ), 0, 30, 64 );
|
||||
trig3.angles = ( 0, 0, 0 );
|
||||
trig3.targetname = "eject_player_pos";
|
||||
trig3.point = spawn( "script_origin", ( 3590,2, 2068, 2720,34 ) );
|
||||
}
|
||||
|
||||
eject_player_trigger()
|
||||
{
|
||||
trigs = getentarray( "eject_player_pos", "targetname" );
|
||||
array_thread( trigs, ::player_eject_watcher );
|
||||
}
|
||||
|
||||
player_eject_watcher()
|
||||
{
|
||||
time = 0;
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
while ( who istouching( self ) )
|
||||
{
|
||||
time++;
|
||||
if ( time >= 6 )
|
||||
{
|
||||
if ( isDefined( self.point ) )
|
||||
{
|
||||
if ( !positionwouldtelefrag( self.point.origin ) )
|
||||
{
|
||||
who setorigin( self.point.origin );
|
||||
who playlocalsound( level.zmb_laugh_alias );
|
||||
who playrumbleonentity( "damage_light" );
|
||||
earthquake( 0,5, 0,5, who.origin, 100 );
|
||||
who thread ejected_overrun( self );
|
||||
}
|
||||
}
|
||||
}
|
||||
wait 1;
|
||||
}
|
||||
time = 0;
|
||||
}
|
||||
wait 0,1;
|
||||
}
|
||||
}
|
||||
|
||||
ejected_overrun( trig )
|
||||
{
|
||||
if ( !isDefined( trig.ejected ) )
|
||||
{
|
||||
trig.ejected = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
trig.ejected++;
|
||||
if ( trig.ejected >= 3 )
|
||||
{
|
||||
primaries = self getweaponslistprimaries();
|
||||
_a169 = primaries;
|
||||
_k169 = getFirstArrayKey( _a169 );
|
||||
while ( isDefined( _k169 ) )
|
||||
{
|
||||
weapon = _a169[ _k169 ];
|
||||
self takeweapon( weapon );
|
||||
_k169 = getNextArrayKey( _a169, _k169 );
|
||||
}
|
||||
lethal = self get_player_lethal_grenade();
|
||||
if ( isDefined( lethal ) && lethal != "" )
|
||||
{
|
||||
self takeweapon( lethal );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( lethal );
|
||||
}
|
||||
tactical = self get_player_tactical_grenade();
|
||||
if ( isDefined( tactical ) && tactical != "" )
|
||||
{
|
||||
self takeweapon( tactical );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical );
|
||||
}
|
||||
mine = self get_player_placeable_mine();
|
||||
if ( isDefined( mine ) )
|
||||
{
|
||||
self takeweapon( mine );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine );
|
||||
}
|
||||
melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( melee_weapon ) )
|
||||
{
|
||||
self takeweapon( melee_weapon );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( melee_weapon );
|
||||
}
|
||||
self giveweapon( "knife_zm" );
|
||||
self.current_melee_weapon = "knife_zm";
|
||||
self give_start_weapon( 1 );
|
||||
self.currentweapon = "m1911_zm";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
change_bad_spawner()
|
||||
{
|
||||
flag_wait( "always_on" );
|
||||
spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" );
|
||||
_a214 = spawner_array;
|
||||
_k214 = getFirstArrayKey( _a214 );
|
||||
while ( isDefined( _k214 ) )
|
||||
{
|
||||
struct = _a214[ _k214 ];
|
||||
if ( isDefined( struct.origin ) && struct.origin == ( 2154, 748,5, 1312 ) )
|
||||
{
|
||||
struct.script_noteworthy = "riser_location";
|
||||
return;
|
||||
}
|
||||
_k214 = getNextArrayKey( _a214, _k214 );
|
||||
}
|
||||
}
|
114
zm_highrise_patch/maps/mp/zm_highrise_fx.gsc
Normal file
114
zm_highrise_patch/maps/mp/zm_highrise_fx.gsc
Normal file
@ -0,0 +1,114 @@
|
||||
#include maps/mp/_utility;
|
||||
|
||||
#using_animtree( "fxanim_props" );
|
||||
|
||||
main()
|
||||
{
|
||||
precache_createfx_fx();
|
||||
precache_scripted_fx();
|
||||
precache_fxanim_props();
|
||||
maps/mp/createfx/zm_highrise_fx::main();
|
||||
}
|
||||
|
||||
precache_scripted_fx()
|
||||
{
|
||||
level._effect[ "switch_sparks" ] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
|
||||
level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
|
||||
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
|
||||
level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
|
||||
level._effect[ "pandora_box_inverted" ] = loadfx( "maps/zombie/fx_zmb_highrise_marker" );
|
||||
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
|
||||
level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" );
|
||||
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
|
||||
level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" );
|
||||
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" );
|
||||
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" );
|
||||
level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
|
||||
level._effect[ "elevator_tell" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" );
|
||||
level._effect[ "elevator_sparks" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" );
|
||||
level._effect[ "elevator_impact" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" );
|
||||
level._effect[ "elevator_glint" ] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" );
|
||||
level._effect[ "elevator_light" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" );
|
||||
level._effect[ "perk_elevator_idle" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" );
|
||||
level._effect[ "perk_elevator_departing" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" );
|
||||
level._effect[ "perk_elevator_indicator_up" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" );
|
||||
level._effect[ "perk_elevator_indicator_down" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" );
|
||||
level._effect[ "sidequest_dragon_spark_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" );
|
||||
level._effect[ "sidequest_dragon_fireball_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" );
|
||||
level._effect[ "sidequest_dragon_spark_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" );
|
||||
level._effect[ "sidequest_dragon_fireball_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" );
|
||||
level._effect[ "sidequest_flash" ] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" );
|
||||
level._effect[ "sidequest_tower_bolts" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" );
|
||||
}
|
||||
|
||||
precache_createfx_fx()
|
||||
{
|
||||
level._effect[ "fx_highrise_cloud_lg_single" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" );
|
||||
level._effect[ "fx_highrise_cloud_lg_flat" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" );
|
||||
level._effect[ "fx_highrise_cloud_lg_left" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" );
|
||||
level._effect[ "fx_highrise_cloud_lg_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" );
|
||||
level._effect[ "fx_highrise_cloud_sm_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" );
|
||||
level._effect[ "fx_highrise_cloud_sm_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" );
|
||||
level._effect[ "fx_highrise_cloud_bend_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" );
|
||||
level._effect[ "fx_highrise_cloud_bend_01" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" );
|
||||
level._effect[ "fx_highrise_meteor_lg_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" );
|
||||
level._effect[ "fx_highrise_meteor_lg_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" );
|
||||
level._effect[ "fx_highrise_meteor_lg_top2" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" );
|
||||
level._effect[ "fx_highrise_meteor_sm_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" );
|
||||
level._effect[ "fx_highrise_meteor_sm_horizon" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" );
|
||||
level._effect[ "fx_lf_zmb_highrise_sun" ] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" );
|
||||
level._effect[ "fx_zmb_flies" ] = loadfx( "maps/zombie/fx_zmb_flies" );
|
||||
level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" );
|
||||
level._effect[ "fx_highrise_ash_rising_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" );
|
||||
level._effect[ "fx_highrise_bld_crumble_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" );
|
||||
level._effect[ "fx_highrise_ceiling_dust_md_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" );
|
||||
level._effect[ "fx_highrise_ceiling_dust_sm_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" );
|
||||
level._effect[ "fx_highrise_ceiling_dust_edge_100" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" );
|
||||
level._effect[ "fx_highrise_edge_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" );
|
||||
level._effect[ "fx_highrise_point_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" );
|
||||
level._effect[ "fx_highrise_wire_spark" ] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" );
|
||||
level._effect[ "fx_highrise_water_drip_fast" ] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" );
|
||||
level._effect[ "fx_highrise_haze_int_med" ] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" );
|
||||
level._effect[ "fx_highrise_fire_distant" ] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" );
|
||||
level._effect[ "fx_highrise_smk_plume_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" );
|
||||
level._effect[ "fx_highrise_smk_plume_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" );
|
||||
level._effect[ "fx_highrise_smk_plume_xlg" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" );
|
||||
level._effect[ "fx_highrise_moon" ] = loadfx( "maps/zombie_highrise/fx_highrise_moon" );
|
||||
level._effect[ "fx_highrise_god_ray_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" );
|
||||
level._effect[ "fx_highrise_god_ray_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" );
|
||||
level._effect[ "fx_highrise_god_ray_cool_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" );
|
||||
level._effect[ "fx_highrise_god_ray_cool_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" );
|
||||
level._effect[ "fx_highrise_light_bulb" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" );
|
||||
level._effect[ "fx_highrise_light_build_lamp" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" );
|
||||
level._effect[ "fx_highrise_light_fluorescent" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" );
|
||||
level._effect[ "fx_highrise_light_fluorescent_wall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" );
|
||||
level._effect[ "fx_highrise_light_fluorescent_wal2" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" );
|
||||
level._effect[ "fx_highrise_light_recessed" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" );
|
||||
level._effect[ "fx_highrise_light_recessed_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" );
|
||||
level._effect[ "fx_highrise_light_recessed_tall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" );
|
||||
level._effect[ "fx_highrise_light_recessed_tiny" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" );
|
||||
level._effect[ "fx_highrise_light_mall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" );
|
||||
level._effect[ "fx_highrise_light_lantern_red" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" );
|
||||
level._effect[ "fx_highrise_light_lantern_yel" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" );
|
||||
level._effect[ "fx_highrise_light_sconce_glow" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" );
|
||||
level._effect[ "fx_highrise_light_sconce_beam" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" );
|
||||
level._effect[ "fx_highrise_dragon_breath_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" );
|
||||
level._effect[ "fx_highrise_dragon_tower_absorb_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" );
|
||||
level._effect[ "fx_highrise_dragon_tower_glow_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" );
|
||||
level._effect[ "fx_highrise_sidequest_complete" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" );
|
||||
level._effect[ "fx_highrise_dragon_breath_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" );
|
||||
level._effect[ "fx_highrise_dragon_tower_absorb_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" );
|
||||
level._effect[ "fx_highrise_dragon_tower_glow_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" );
|
||||
level._effect[ "fx_highrise_sidequest_complete_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" );
|
||||
}
|
||||
|
||||
precache_fxanim_props()
|
||||
{
|
||||
level.scr_anim[ "fxanim_props" ][ "wirespark_med_lrg" ] = %fxanim_gp_wirespark_med_lrg_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "wirespark_long_lrg" ] = %fxanim_gp_wirespark_long_lrg_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "dragon_a" ] = %fxanim_zom_highrise_dragon_a_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "dragon_b" ] = %fxanim_zom_highrise_dragon_b_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "dragon" ] = %fxanim_zom_highrise_dragon_idle_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "rock_slide" ] = %fxanim_zom_highrise_rock_slide_anim;
|
||||
}
|
13
zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc
Normal file
13
zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc
Normal file
@ -0,0 +1,13 @@
|
||||
#include maps/mp/zm_highrise_classic;
|
||||
#include maps/mp/zm_highrise;
|
||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
||||
#include maps/mp/zombies/_zm_game_module;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
add_map_gamemode( "zclassic", ::maps/mp/zm_highrise::zclassic_preinit, undefined, undefined );
|
||||
add_map_location_gamemode( "zclassic", "rooftop", ::maps/mp/zm_highrise_classic::precache, ::maps/mp/zm_highrise_classic::main );
|
||||
}
|
1157
zm_highrise_patch/maps/mp/zm_highrise_sq.gsc
Normal file
1157
zm_highrise_patch/maps/mp/zm_highrise_sq.gsc
Normal file
File diff suppressed because it is too large
Load Diff
247
zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc
Normal file
247
zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc
Normal file
@ -0,0 +1,247 @@
|
||||
#include maps/mp/zm_highrise_sq;
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
flag_init( "sq_atd_elevator0" );
|
||||
flag_init( "sq_atd_elevator1" );
|
||||
flag_init( "sq_atd_elevator2" );
|
||||
flag_init( "sq_atd_elevator3" );
|
||||
flag_init( "sq_atd_elevator_activated" );
|
||||
flag_init( "sq_atd_drg_puzzle_1st_error" );
|
||||
flag_init( "sq_atd_drg_puzzle_complete" );
|
||||
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
|
||||
sq_atd_dragon_icon_setup();
|
||||
}
|
||||
|
||||
init_stage()
|
||||
{
|
||||
level._cur_stage_name = "atd";
|
||||
clientnotify( "atd" );
|
||||
}
|
||||
|
||||
stage_logic()
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "ATD Started" );
|
||||
#/
|
||||
sq_atd_elevators();
|
||||
sq_atd_drg_puzzle();
|
||||
stage_completed( "sq", level._cur_stage_name );
|
||||
}
|
||||
|
||||
exit_stage_1( success )
|
||||
{
|
||||
}
|
||||
|
||||
sq_atd_dragon_icon_setup()
|
||||
{
|
||||
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
||||
_a51 = a_dragon_icons;
|
||||
_k51 = getFirstArrayKey( _a51 );
|
||||
while ( isDefined( _k51 ) )
|
||||
{
|
||||
m_icon = _a51[ _k51 ];
|
||||
m_icon notsolid();
|
||||
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
|
||||
m_icon.origin = m_icon.m_elevator.origin + vectorScale( ( 0, 0, 1 ), 134 );
|
||||
m_icon.angles = m_icon.m_elevator.angles;
|
||||
m_icon linkto( m_icon.m_elevator );
|
||||
m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
|
||||
if ( isDefined( m_icon.m_lit_icon ) )
|
||||
{
|
||||
m_icon.m_lit_icon notsolid();
|
||||
m_icon.m_lit_icon.origin = m_icon.origin - vectorScale( ( 0, 0, 1 ), 2 );
|
||||
m_icon.m_lit_icon.angles = m_icon.angles;
|
||||
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
||||
}
|
||||
_k51 = getNextArrayKey( _a51, _k51 );
|
||||
}
|
||||
a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" );
|
||||
a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
|
||||
i = 0;
|
||||
while ( i < a_atd2_icons.size )
|
||||
{
|
||||
a_atd2_lit_icons[ i ].origin = a_atd2_icons[ i ].origin - vectorScale( ( 0, 0, 1 ), 5 );
|
||||
a_atd2_lit_icons[ i ].angles = a_atd2_icons[ i ].angles;
|
||||
a_atd2_icons[ i ].lit_icon = a_atd2_lit_icons[ i ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
sq_atd_elevators()
|
||||
{
|
||||
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" );
|
||||
a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
|
||||
i = 0;
|
||||
while ( i < a_elevators.size )
|
||||
{
|
||||
trig_elevator = getent( a_elevators[ i ], "targetname" );
|
||||
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[ i ] );
|
||||
i++;
|
||||
}
|
||||
while ( flag( "sq_atd_elevator0" ) && flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) && !flag( "sq_atd_elevator3" ) )
|
||||
{
|
||||
flag_wait_any_array( a_elevator_flags );
|
||||
wait 0,5;
|
||||
}
|
||||
/#
|
||||
iprintlnbold( "Standing on Elevators Complete" );
|
||||
#/
|
||||
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
||||
_a105 = a_dragon_icons;
|
||||
_k105 = getFirstArrayKey( _a105 );
|
||||
while ( isDefined( _k105 ) )
|
||||
{
|
||||
m_icon = _a105[ _k105 ];
|
||||
v_off_pos = m_icon.m_lit_icon.origin;
|
||||
m_icon.m_lit_icon unlink();
|
||||
m_icon unlink();
|
||||
m_icon.m_lit_icon.origin = m_icon.origin;
|
||||
m_icon.origin = v_off_pos;
|
||||
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
||||
m_icon linkto( m_icon.m_elevator );
|
||||
m_icon playsound( "zmb_sq_symbol_light" );
|
||||
_k105 = getNextArrayKey( _a105, _k105 );
|
||||
}
|
||||
flag_set( "sq_atd_elevator_activated" );
|
||||
vo_richtofen_atd_elevators();
|
||||
level thread vo_maxis_atd_elevators();
|
||||
}
|
||||
|
||||
sq_atd_watch_elevator( str_flag )
|
||||
{
|
||||
level endon( "sq_atd_elevator_activated" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "trigger", e_who );
|
||||
while ( !isplayer( e_who ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
flag_set( str_flag );
|
||||
while ( isalive( e_who ) && e_who istouching( self ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
flag_clear( str_flag );
|
||||
}
|
||||
}
|
||||
|
||||
sq_atd_drg_puzzle()
|
||||
{
|
||||
level.sq_atd_cur_drg = 0;
|
||||
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
|
||||
a_puzzle_trigs = array_randomize( a_puzzle_trigs );
|
||||
i = 0;
|
||||
while ( i < a_puzzle_trigs.size )
|
||||
{
|
||||
a_puzzle_trigs[ i ] thread drg_puzzle_trig_think( i );
|
||||
i++;
|
||||
}
|
||||
while ( level.sq_atd_cur_drg < 4 )
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
flag_set( "sq_atd_drg_puzzle_complete" );
|
||||
level thread vo_maxis_atd_order_complete();
|
||||
/#
|
||||
iprintlnbold( "Dragon Puzzle COMPLETE" );
|
||||
#/
|
||||
}
|
||||
|
||||
drg_puzzle_trig_think( n_order_id )
|
||||
{
|
||||
self.drg_active = 0;
|
||||
m_unlit = getent( self.target, "targetname" );
|
||||
m_lit = m_unlit.lit_icon;
|
||||
v_top = m_unlit.origin;
|
||||
v_hidden = m_lit.origin;
|
||||
while ( !flag( "sq_atd_drg_puzzle_complete" ) )
|
||||
{
|
||||
while ( self.drg_active )
|
||||
{
|
||||
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
|
||||
while ( flag( "sq_atd_drg_puzzle_complete" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
self waittill( "trigger", e_who );
|
||||
if ( level.sq_atd_cur_drg == n_order_id )
|
||||
{
|
||||
m_lit.origin = v_top;
|
||||
m_unlit.origin = v_hidden;
|
||||
m_lit playsound( "zmb_sq_symbol_light" );
|
||||
self.drg_active = 1;
|
||||
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg );
|
||||
level.sq_atd_cur_drg++;
|
||||
/#
|
||||
iprintlnbold( "Dragon " + n_order_id + " Correct" );
|
||||
#/
|
||||
self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !flag( "sq_atd_drg_puzzle_1st_error" ) )
|
||||
{
|
||||
level thread vo_maxis_atd_order_error();
|
||||
}
|
||||
level.sq_atd_cur_drg = 0;
|
||||
level notify( "drg_puzzle_reset" );
|
||||
/#
|
||||
iprintlnbold( "INCORRECT DRAGON" );
|
||||
#/
|
||||
wait 0,5;
|
||||
}
|
||||
while ( e_who istouching( self ) )
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
|
||||
{
|
||||
level endon( "sq_atd_drg_puzzle_complete" );
|
||||
level waittill( "drg_puzzle_reset" );
|
||||
m_unlit.origin = v_top;
|
||||
m_lit.origin = v_hidden;
|
||||
m_unlit playsound( "zmb_sq_symbol_fade" );
|
||||
self.drg_active = 0;
|
||||
}
|
||||
|
||||
vo_richtofen_atd_elevators()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" );
|
||||
}
|
||||
|
||||
vo_maxis_atd_elevators()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" );
|
||||
}
|
||||
|
||||
vo_richtofen_atd_order( n_which )
|
||||
{
|
||||
str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which;
|
||||
maps/mp/zm_highrise_sq::richtofensay( str_vox );
|
||||
}
|
||||
|
||||
vo_richtofen_atd_order_error()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" );
|
||||
}
|
||||
|
||||
vo_maxis_atd_order_error()
|
||||
{
|
||||
flag_set( "sq_atd_drg_puzzle_1st_error" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" );
|
||||
}
|
||||
|
||||
vo_maxis_atd_order_complete()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" );
|
||||
}
|
570
zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc
Normal file
570
zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc
Normal file
@ -0,0 +1,570 @@
|
||||
#include maps/mp/zombies/_zm_unitrigger;
|
||||
#include maps/mp/zm_highrise_sq;
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
#using_animtree( "fxanim_props" );
|
||||
|
||||
init_1()
|
||||
{
|
||||
flag_init( "pts_1_springpads_placed" );
|
||||
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
|
||||
}
|
||||
|
||||
init_2()
|
||||
{
|
||||
flag_init( "pts_2_springpads_placed" );
|
||||
flag_init( "pts_2_generator_1_started" );
|
||||
flag_init( "pts_2_generator_2_started" );
|
||||
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
||||
}
|
||||
|
||||
init_stage_1()
|
||||
{
|
||||
clientnotify( "pts_1" );
|
||||
level.n_launched_zombies = 0;
|
||||
wait 15;
|
||||
level thread richtofen_pts_instructions();
|
||||
level thread richtofen_pts_placed();
|
||||
}
|
||||
|
||||
init_stage_2()
|
||||
{
|
||||
clientnotify( "pts_2" );
|
||||
level.sq_ball_putdown_trigs = [];
|
||||
level thread maxis_pts_instructions();
|
||||
level thread maxis_pts_placed();
|
||||
}
|
||||
|
||||
stage_logic_1()
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "PTS1 Started" );
|
||||
#/
|
||||
watch_player_springpads( 0 );
|
||||
wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" );
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 1 );
|
||||
wait_for_zombies_launched();
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
stage_completed( "sq_1", "pts_1" );
|
||||
}
|
||||
|
||||
wait_for_zombies_launched()
|
||||
{
|
||||
level thread richtofen_zombies_launched();
|
||||
t_tower = getent( "pts_tower_trig", "targetname" );
|
||||
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
|
||||
while ( level.n_launched_zombies < 16 )
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
}
|
||||
|
||||
watch_zombie_flings()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
self endon( "equip_springpad_zm_pickup" );
|
||||
while ( level.n_launched_zombies < 16 )
|
||||
{
|
||||
self waittill( "fling" );
|
||||
level.n_launched_zombies++;
|
||||
if ( level.n_launched_zombies != 1 || level.n_launched_zombies == 5 && level.n_launched_zombies == 10 )
|
||||
{
|
||||
level notify( "pts1_say_next_line" );
|
||||
}
|
||||
wait 0,1;
|
||||
}
|
||||
}
|
||||
|
||||
stage_logic_2()
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "PTS2 Started" );
|
||||
#/
|
||||
watch_player_springpads( 1 );
|
||||
level thread wait_for_balls_launched();
|
||||
flag_wait( "pts_2_generator_1_started" );
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||
flag_wait( "pts_2_generator_2_started" );
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||
level thread maxis_balls_placed();
|
||||
stage_completed( "sq_2", "pts_2" );
|
||||
}
|
||||
|
||||
wait_for_balls_launched()
|
||||
{
|
||||
level.current_generator = 1;
|
||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||
_a138 = a_lion_spots;
|
||||
_k138 = getFirstArrayKey( _a138 );
|
||||
while ( isDefined( _k138 ) )
|
||||
{
|
||||
s_lion_spot = _a138[ _k138 ];
|
||||
s_lion_spot.a_place_ball_trigs = [];
|
||||
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
|
||||
_k138 = getNextArrayKey( _a138, _k138 );
|
||||
}
|
||||
a_players = getplayers();
|
||||
_a145 = a_players;
|
||||
_k145 = getFirstArrayKey( _a145 );
|
||||
while ( isDefined( _k145 ) )
|
||||
{
|
||||
player = _a145[ _k145 ];
|
||||
player.a_place_ball_trigs = [];
|
||||
if ( isDefined( player.zm_sq_has_ball ) )
|
||||
{
|
||||
player thread player_has_ball();
|
||||
}
|
||||
_k145 = getNextArrayKey( _a145, _k145 );
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "zm_ball_picked_up", player );
|
||||
player thread player_has_ball();
|
||||
}
|
||||
}
|
||||
|
||||
player_has_ball()
|
||||
{
|
||||
self thread player_set_down_ball_watcher();
|
||||
}
|
||||
|
||||
player_set_down_ball_watcher()
|
||||
{
|
||||
self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" );
|
||||
pts_putdown_trigs_remove_for_player( self );
|
||||
}
|
||||
|
||||
sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
|
||||
{
|
||||
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
|
||||
t_pickup setcursorhint( "HINT_NOICON" );
|
||||
t_pickup sethintstring( str_hint_string );
|
||||
t_pickup.targetname = "ball_place_trig";
|
||||
t_pickup triggerignoreteam();
|
||||
t_pickup usetriggerrequirelookat();
|
||||
return t_pickup;
|
||||
}
|
||||
|
||||
place_ball_think( t_place_ball, s_lion_spot )
|
||||
{
|
||||
t_place_ball endon( "delete" );
|
||||
t_place_ball waittill( "trigger" );
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
|
||||
self.zm_sq_has_ball = undefined;
|
||||
s_lion_spot.which_ball = self.which_ball;
|
||||
self notify( "zm_sq_ball_used" );
|
||||
s_lion_spot.zm_pts_animating = 1;
|
||||
s_lion_spot.springpad_buddy.zm_pts_animating = 1;
|
||||
flag_set( "pts_2_generator_" + level.current_generator + "_started" );
|
||||
s_lion_spot.which_generator = level.current_generator;
|
||||
level.current_generator++;
|
||||
/#
|
||||
iprintlnbold( "Ball Animating" );
|
||||
#/
|
||||
s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad );
|
||||
self.t_putdown_ball delete();
|
||||
}
|
||||
|
||||
delete_all_springpads()
|
||||
{
|
||||
}
|
||||
|
||||
exit_stage_1( success )
|
||||
{
|
||||
}
|
||||
|
||||
exit_stage_2( success )
|
||||
{
|
||||
}
|
||||
|
||||
watch_player_springpads( is_generator )
|
||||
{
|
||||
level thread springpad_count_watcher( is_generator );
|
||||
a_players = get_players();
|
||||
_a240 = a_players;
|
||||
_k240 = getFirstArrayKey( _a240 );
|
||||
while ( isDefined( _k240 ) )
|
||||
{
|
||||
player = _a240[ _k240 ];
|
||||
player thread pts_watch_springpad_use( is_generator );
|
||||
_k240 = getNextArrayKey( _a240, _k240 );
|
||||
}
|
||||
}
|
||||
|
||||
pts_watch_springpad_use( is_generator )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
while ( !flag( "sq_branch_complete" ) )
|
||||
{
|
||||
self waittill( "equipment_placed", weapon, weapname );
|
||||
if ( weapname == level.springpad_name )
|
||||
{
|
||||
self is_springpad_in_place( weapon, is_generator );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
springpad_count_watcher( is_generator )
|
||||
{
|
||||
level endon( "sq_pts_springad_count4" );
|
||||
str_which_spots = "pts_ghoul";
|
||||
if ( is_generator )
|
||||
{
|
||||
str_which_spots = "pts_lion";
|
||||
}
|
||||
a_spots = getstructarray( str_which_spots, "targetname" );
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "sq_pts_springpad_in_place" );
|
||||
n_count = 0;
|
||||
_a279 = a_spots;
|
||||
_k279 = getFirstArrayKey( _a279 );
|
||||
while ( isDefined( _k279 ) )
|
||||
{
|
||||
s_spot = _a279[ _k279 ];
|
||||
if ( isDefined( s_spot.springpad ) )
|
||||
{
|
||||
n_count++;
|
||||
}
|
||||
_k279 = getNextArrayKey( _a279, _k279 );
|
||||
}
|
||||
level notify( "sq_pts_springad_count" + n_count );
|
||||
}
|
||||
}
|
||||
|
||||
is_springpad_in_place( m_springpad, is_generator )
|
||||
{
|
||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
|
||||
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
|
||||
_a298 = a_spots;
|
||||
_k298 = getFirstArrayKey( _a298 );
|
||||
while ( isDefined( _k298 ) )
|
||||
{
|
||||
s_spot = _a298[ _k298 ];
|
||||
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
|
||||
if ( n_dist < 1024 )
|
||||
{
|
||||
v_spot_forward = vectornormalize( anglesToForward( s_spot.angles ) );
|
||||
v_pad_forward = vectornormalize( anglesToForward( m_springpad.angles ) );
|
||||
n_dot = vectordot( v_spot_forward, v_pad_forward );
|
||||
/#
|
||||
iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
|
||||
#/
|
||||
if ( n_dot > 0,98 )
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
|
||||
#/
|
||||
level notify( "sq_pts_springpad_in_place" );
|
||||
s_spot.springpad = m_springpad;
|
||||
self thread pts_springpad_removed_watcher( m_springpad, s_spot );
|
||||
if ( is_generator )
|
||||
{
|
||||
wait 0,1;
|
||||
level thread pts_should_springpad_create_trigs( s_spot );
|
||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_springpad.fling_scaler = 2;
|
||||
m_springpad thread watch_zombie_flings();
|
||||
}
|
||||
if ( isDefined( s_spot.script_float ) )
|
||||
{
|
||||
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
|
||||
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
|
||||
v_override_dir = vectorScale( v_override_dir, 1024 );
|
||||
m_springpad.direction_vec_override = v_override_dir;
|
||||
m_springpad.fling_scaler = s_spot.script_float;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_k298 = getNextArrayKey( _a298, _k298 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pts_springpad_fling( str_spot_name, m_buddy_springpad )
|
||||
{
|
||||
str_anim1 = undefined;
|
||||
n_anim_length1 = undefined;
|
||||
str_anim2 = undefined;
|
||||
n_anim_length2 = undefined;
|
||||
switch( str_spot_name )
|
||||
{
|
||||
case "lion_pair_1":
|
||||
str_anim1 = "dc";
|
||||
str_anim2 = "cd";
|
||||
break;
|
||||
case "lion_pair_2":
|
||||
str_anim1 = "ab";
|
||||
str_anim2 = "ba";
|
||||
break;
|
||||
case "lion_pair_3":
|
||||
str_anim1 = "cd";
|
||||
str_anim2 = "dc";
|
||||
break;
|
||||
case "lion_pair_4":
|
||||
str_anim1 = "ba";
|
||||
str_anim2 = "ab";
|
||||
break;
|
||||
}
|
||||
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
|
||||
m_anim.angles = ( 0, 0, 0 );
|
||||
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
|
||||
m_anim useanimtree( -1 );
|
||||
m_anim.targetname = "trample_gen_" + str_spot_name;
|
||||
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 );
|
||||
}
|
||||
|
||||
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 )
|
||||
{
|
||||
m_anim endon( "delete" );
|
||||
self endon( "delete" );
|
||||
m_buddy_springpad endon( "delete" );
|
||||
n_anim_length1 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
|
||||
n_anim_length2 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
|
||||
while ( isDefined( m_anim ) )
|
||||
{
|
||||
self notify( "fling" );
|
||||
if ( isDefined( m_anim ) )
|
||||
{
|
||||
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
|
||||
}
|
||||
wait n_anim_length1;
|
||||
m_buddy_springpad notify( "fling" );
|
||||
if ( isDefined( m_anim ) )
|
||||
{
|
||||
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
|
||||
}
|
||||
wait n_anim_length2;
|
||||
}
|
||||
}
|
||||
|
||||
pts_springpad_removed_watcher( m_springpad, s_spot )
|
||||
{
|
||||
self pts_springpad_waittill_removed( m_springpad );
|
||||
s_spot.springpad = undefined;
|
||||
}
|
||||
|
||||
pts_springpad_waittill_removed( m_springpad )
|
||||
{
|
||||
m_springpad endon( "delete" );
|
||||
m_springpad endon( "death" );
|
||||
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
|
||||
}
|
||||
|
||||
wait_for_all_springpads_placed( str_type, str_flag )
|
||||
{
|
||||
a_spots = getstructarray( str_type, "targetname" );
|
||||
while ( !flag( str_flag ) )
|
||||
{
|
||||
is_clear = 0;
|
||||
_a442 = a_spots;
|
||||
_k442 = getFirstArrayKey( _a442 );
|
||||
while ( isDefined( _k442 ) )
|
||||
{
|
||||
s_spot = _a442[ _k442 ];
|
||||
if ( !isDefined( s_spot.springpad ) )
|
||||
{
|
||||
is_clear = 1;
|
||||
}
|
||||
_k442 = getNextArrayKey( _a442, _k442 );
|
||||
}
|
||||
if ( !is_clear )
|
||||
{
|
||||
flag_set( str_flag );
|
||||
}
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
pts_should_player_create_trigs( player )
|
||||
{
|
||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||
_a467 = a_lion_spots;
|
||||
_k467 = getFirstArrayKey( _a467 );
|
||||
while ( isDefined( _k467 ) )
|
||||
{
|
||||
s_lion_spot = _a467[ _k467 ];
|
||||
if ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
|
||||
{
|
||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
||||
}
|
||||
_k467 = getNextArrayKey( _a467, _k467 );
|
||||
}
|
||||
}
|
||||
|
||||
pts_should_springpad_create_trigs( s_lion_spot )
|
||||
{
|
||||
while ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
|
||||
{
|
||||
a_players = getplayers();
|
||||
_a481 = a_players;
|
||||
_k481 = getFirstArrayKey( _a481 );
|
||||
while ( isDefined( _k481 ) )
|
||||
{
|
||||
player = _a481[ _k481 ];
|
||||
if ( isDefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
|
||||
{
|
||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
||||
pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player );
|
||||
}
|
||||
_k481 = getNextArrayKey( _a481, _k481 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player )
|
||||
{
|
||||
if ( isDefined( s_lion_spot.which_ball ) || isDefined( s_lion_spot.springpad_buddy ) && isDefined( s_lion_spot.springpad_buddy.which_ball ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
|
||||
player clientclaimtrigger( t_place_ball );
|
||||
t_place_ball.owner = player;
|
||||
player thread place_ball_think( t_place_ball, s_lion_spot );
|
||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
||||
{
|
||||
s_lion_spot.pts_putdown_trigs = [];
|
||||
}
|
||||
s_lion_spot.pts_putdown_trigs[ player.characterindex ] = t_place_ball;
|
||||
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
|
||||
}
|
||||
|
||||
pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot )
|
||||
{
|
||||
player pts_springpad_waittill_removed( s_lion_spot.springpad );
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
|
||||
level thread pts_reset_ball( s_lion_spot );
|
||||
}
|
||||
|
||||
pts_reset_ball( s_lion_spot )
|
||||
{
|
||||
if ( isDefined( s_lion_spot.which_ball ) )
|
||||
{
|
||||
s_lion_spot.sq_pickup_reset = 1;
|
||||
s_lion_spot.which_ball notify( "sq_pickup_reset" );
|
||||
m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" );
|
||||
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
|
||||
flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" );
|
||||
level.current_generator--;
|
||||
|
||||
s_lion_spot.which_ball = undefined;
|
||||
m_ball_anim delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( s_lion_spot.springpad_buddy.which_ball ) )
|
||||
{
|
||||
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
|
||||
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
|
||||
m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" );
|
||||
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
|
||||
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
|
||||
level.current_generator--;
|
||||
|
||||
s_lion_spot.springpad_buddy.which_ball = undefined;
|
||||
m_ball_anim delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pts_putdown_trigs_remove_for_player( player )
|
||||
{
|
||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||
_a554 = a_lion_spots;
|
||||
_k554 = getFirstArrayKey( _a554 );
|
||||
while ( isDefined( _k554 ) )
|
||||
{
|
||||
s_lion_spot = _a554[ _k554 ];
|
||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
||||
{
|
||||
}
|
||||
else if ( isDefined( s_lion_spot.pts_putdown_trigs[ player.characterindex ] ) )
|
||||
{
|
||||
s_lion_spot.pts_putdown_trigs[ player.characterindex ] delete();
|
||||
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
|
||||
}
|
||||
_k554 = getNextArrayKey( _a554, _k554 );
|
||||
}
|
||||
}
|
||||
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot )
|
||||
{
|
||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
_a575 = s_lion_spot.pts_putdown_trigs;
|
||||
_k575 = getFirstArrayKey( _a575 );
|
||||
while ( isDefined( _k575 ) )
|
||||
{
|
||||
t_putdown = _a575[ _k575 ];
|
||||
t_putdown delete();
|
||||
_k575 = getNextArrayKey( _a575, _k575 );
|
||||
}
|
||||
s_lion_spot.pts_putdown_trigs = [];
|
||||
}
|
||||
|
||||
richtofen_pts_instructions()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" );
|
||||
}
|
||||
|
||||
richtofen_pts_placed()
|
||||
{
|
||||
level waittill( "sq_pts_springad_count1" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" );
|
||||
level waittill( "sq_pts_springad_count2" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
|
||||
level waittill( "sq_pts_springad_count3" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
|
||||
level waittill( "sq_pts_springad_count4" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
|
||||
}
|
||||
|
||||
richtofen_zombies_launched()
|
||||
{
|
||||
level waittill( "pts1_say_next_line" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
|
||||
wait 1;
|
||||
level waittill( "pts1_say_next_line" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
|
||||
wait 1;
|
||||
level waittill( "pts1_say_next_line" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" );
|
||||
}
|
||||
|
||||
maxis_pts_instructions()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" );
|
||||
}
|
||||
|
||||
maxis_pts_placed()
|
||||
{
|
||||
level waittill( "sq_pts_springad_count1" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" );
|
||||
level waittill( "sq_pts_springad_count2" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
|
||||
level waittill( "sq_pts_springad_count4" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
|
||||
}
|
||||
|
||||
maxis_balls_placed()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" );
|
||||
}
|
199
zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc
Normal file
199
zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc
Normal file
@ -0,0 +1,199 @@
|
||||
#include maps/mp/zm_highrise_sq_pts;
|
||||
#include maps/mp/zm_highrise_sq;
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
flag_init( "sq_slb_first_ball_sniped" );
|
||||
flag_init( "sq_slb_richtofen_spoke" );
|
||||
declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 );
|
||||
}
|
||||
|
||||
init_stage()
|
||||
{
|
||||
level._cur_stage_name = "slb";
|
||||
clientnotify( "slb" );
|
||||
level thread vo_maxis_slb_hint();
|
||||
}
|
||||
|
||||
stage_logic()
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "SLB Started" );
|
||||
#/
|
||||
snipe_balls_wait();
|
||||
stage_completed( "sq", level._cur_stage_name );
|
||||
}
|
||||
|
||||
exit_stage_1( success )
|
||||
{
|
||||
}
|
||||
|
||||
snipe_balls_wait()
|
||||
{
|
||||
a_balls = getentarray( "sq_dragon_lion_ball", "targetname" );
|
||||
array_thread( a_balls, ::snipe_balls_watch_ball );
|
||||
is_complete = 0;
|
||||
while ( !is_complete )
|
||||
{
|
||||
level waittill( "zm_ball_shot" );
|
||||
wait 1;
|
||||
is_complete = 1;
|
||||
_a50 = a_balls;
|
||||
_k50 = getFirstArrayKey( _a50 );
|
||||
while ( isDefined( _k50 ) )
|
||||
{
|
||||
m_ball = _a50[ _k50 ];
|
||||
if ( isDefined( m_ball ) )
|
||||
{
|
||||
is_complete = 0;
|
||||
}
|
||||
_k50 = getNextArrayKey( _a50, _k50 );
|
||||
}
|
||||
}
|
||||
/#
|
||||
iprintlnbold( "All Balls Shot" );
|
||||
#/
|
||||
}
|
||||
|
||||
snipe_balls_watch_ball()
|
||||
{
|
||||
self endon( "delete" );
|
||||
a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" );
|
||||
self setcandamage( 1 );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
||||
if ( maps/mp/zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
|
||||
{
|
||||
level notify( "zm_ball_shot" );
|
||||
playsoundatposition( "zmb_sq_ball_ding", self.origin );
|
||||
playfx( level._effect[ "sidequest_flash" ], self.origin );
|
||||
str_noteworthy = self.script_noteworthy;
|
||||
self delete();
|
||||
wait 0,5;
|
||||
clientnotify( str_noteworthy );
|
||||
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
|
||||
if ( str_noteworthy == "m_drg_tail" )
|
||||
{
|
||||
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
|
||||
}
|
||||
playfx( level._effect[ "sidequest_flash" ], m_ball.origin );
|
||||
m_ball show();
|
||||
m_ball thread lion_ball_enable_pickup();
|
||||
if ( !flag( "sq_slb_first_ball_sniped" ) )
|
||||
{
|
||||
flag_set( "sq_slb_first_ball_sniped" );
|
||||
level thread vo_atd_ball1_sniped();
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
level thread vo_maxis_atd_ball2_sniped();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lion_ball_enable_pickup()
|
||||
{
|
||||
self endon( "sq_sliquified" );
|
||||
while ( 1 )
|
||||
{
|
||||
self.can_pickup = 1;
|
||||
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
|
||||
while ( self.can_pickup )
|
||||
{
|
||||
self.t_pickup waittill( "trigger", player );
|
||||
if ( !isDefined( player.zm_sq_has_ball ) )
|
||||
{
|
||||
player.zm_sq_has_ball = 1;
|
||||
player.which_ball = self;
|
||||
self.can_pickup = 0;
|
||||
self.player = player;
|
||||
flag_set( "sq_ball_picked_up" );
|
||||
level thread maps/mp/zm_highrise_sq_pts::pts_should_player_create_trigs( player );
|
||||
level notify( "zm_ball_picked_up" );
|
||||
}
|
||||
}
|
||||
self.t_pickup delete();
|
||||
self hide();
|
||||
self setcandamage( 0 );
|
||||
wait 1;
|
||||
self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
|
||||
self.player clientclaimtrigger( self.t_putdown );
|
||||
self.player.t_putdown_ball = self.t_putdown;
|
||||
self ball_pickup_waittill_change();
|
||||
play_spark = 0;
|
||||
if ( !isDefined( self.t_putdown ) )
|
||||
{
|
||||
self waittill( "sq_pickup_reset" );
|
||||
play_spark = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.t_putdown delete();
|
||||
}
|
||||
self.player notify( "zm_sq_ball_putdown" );
|
||||
if ( play_spark )
|
||||
{
|
||||
self.sq_pickup_reset = undefined;
|
||||
playfx( level._effect[ "sidequest_flash" ], self.origin );
|
||||
}
|
||||
self show();
|
||||
self setcandamage( 1 );
|
||||
self.player.zm_sq_has_ball = undefined;
|
||||
self.player = undefined;
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
ball_pickup_waittill_change()
|
||||
{
|
||||
self endon( "sq_pickup_reset" );
|
||||
self.t_putdown waittill_any_return( "trigger", "delete", "reset" );
|
||||
}
|
||||
|
||||
sq_slb_create_use_trigger( v_origin, radius, height, str_hint_string )
|
||||
{
|
||||
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
|
||||
t_pickup setcursorhint( "HINT_NOICON" );
|
||||
t_pickup sethintstring( str_hint_string );
|
||||
t_pickup.targetname = "ball_pickup_trig";
|
||||
t_pickup triggerignoreteam();
|
||||
t_pickup usetriggerrequirelookat();
|
||||
return t_pickup;
|
||||
}
|
||||
|
||||
vo_richtofen_atd_ball_sniped()
|
||||
{
|
||||
if ( !flag( "sq_slb_richtofen_spoke" ) )
|
||||
{
|
||||
flag_set( "sq_slb_richtofen_spoke" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" );
|
||||
}
|
||||
}
|
||||
|
||||
vo_maxis_slb_hint()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" );
|
||||
}
|
||||
|
||||
vo_maxis_atd_ball1_sniped()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" );
|
||||
}
|
||||
|
||||
vo_maxis_atd_ball2_sniped()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" );
|
||||
}
|
||||
|
||||
vo_atd_ball1_sniped()
|
||||
{
|
||||
vo_richtofen_atd_ball_sniped();
|
||||
level thread vo_maxis_atd_ball1_sniped();
|
||||
}
|
328
zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc
Normal file
328
zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc
Normal file
@ -0,0 +1,328 @@
|
||||
#include maps/mp/zm_highrise_sq;
|
||||
#include maps/mp/zombies/_zm_spawner;
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init_1()
|
||||
{
|
||||
flag_init( "ssp1_ball0_complete" );
|
||||
flag_init( "ssp1_ball1_complete" );
|
||||
flag_init( "ssp1_complete" );
|
||||
declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
|
||||
}
|
||||
|
||||
init_2()
|
||||
{
|
||||
flag_init( "ssp2_maxis_keep_going_said" );
|
||||
flag_init( "ssp2_maxis_reincarnate_said" );
|
||||
flag_init( "ssp2_corpses_in_place" );
|
||||
flag_init( "ssp2_resurrection_done" );
|
||||
flag_init( "ssp2_statue_complete" );
|
||||
maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check );
|
||||
declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
||||
}
|
||||
|
||||
init_stage_1()
|
||||
{
|
||||
clientnotify( "ssp_1" );
|
||||
level thread vo_richtofen_instructions();
|
||||
}
|
||||
|
||||
init_stage_2()
|
||||
{
|
||||
clientnotify( "ssp_2" );
|
||||
level thread vo_maxis_start_ssp();
|
||||
}
|
||||
|
||||
stage_logic_1()
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "SSP1 Started" );
|
||||
#/
|
||||
ssp1_sliquify_balls();
|
||||
stage_completed( "sq_1", "ssp_1" );
|
||||
}
|
||||
|
||||
ssp1_sliquify_balls()
|
||||
{
|
||||
a_balls = getentarray( "sq_sliquify_ball", "targetname" );
|
||||
level thread vo_sliquify_fail_watch();
|
||||
level thread ssp1_advance_dragon();
|
||||
level thread vo_richtofen_sliquify_confirm();
|
||||
level thread vo_maxis_sliquify_fail();
|
||||
i = 0;
|
||||
while ( i < a_balls.size )
|
||||
{
|
||||
a_balls[ i ] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
|
||||
i++;
|
||||
}
|
||||
while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) )
|
||||
{
|
||||
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
||||
wait 0,5;
|
||||
}
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
}
|
||||
|
||||
ssp1_watch_ball( str_complete_flag )
|
||||
{
|
||||
self watch_model_sliquification( 20, str_complete_flag );
|
||||
self thread ssp1_rotate_ball();
|
||||
self playloopsound( "zmb_sq_ball_rotate_loop", 0,25 );
|
||||
}
|
||||
|
||||
ssp1_rotate_ball()
|
||||
{
|
||||
while ( isDefined( self ) )
|
||||
{
|
||||
self rotateyaw( 360, 1 );
|
||||
wait 0,9;
|
||||
}
|
||||
}
|
||||
|
||||
ssp1_advance_dragon()
|
||||
{
|
||||
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
}
|
||||
|
||||
stage_logic_2()
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "SSP2 Started" );
|
||||
#/
|
||||
level thread ssp2_advance_dragon();
|
||||
corpse_room_watcher();
|
||||
stage_completed( "sq_2", "ssp_2" );
|
||||
}
|
||||
|
||||
corpse_room_watcher()
|
||||
{
|
||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||
n_count = 0;
|
||||
while ( !flag( "ssp2_resurrection_done" ) )
|
||||
{
|
||||
level waittill( "ssp2_corpse_made", is_in_room );
|
||||
if ( is_in_room )
|
||||
{
|
||||
n_count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
n_count = 0;
|
||||
}
|
||||
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
|
||||
{
|
||||
flag_set( "ssp2_maxis_keep_going_said" );
|
||||
level thread maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( n_count >= 15 )
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "Corpse Count Reached" );
|
||||
#/
|
||||
level thread vo_maxis_ssp_reincarnate();
|
||||
flag_set( "ssp2_corpses_in_place" );
|
||||
corpse_room_revive_watcher();
|
||||
level notify( "end_revive_watcher" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ssp_2_zombie_death_check()
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||
if ( self istouching( t_corpse_room ) )
|
||||
{
|
||||
level notify( "ssp2_corpse_made" );
|
||||
}
|
||||
else
|
||||
{
|
||||
level notify( "ssp2_corpse_made" );
|
||||
}
|
||||
}
|
||||
|
||||
corpse_room_cleanup_watcher()
|
||||
{
|
||||
level endon( "ssp2_resurrection_done" );
|
||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||
while ( 1 )
|
||||
{
|
||||
wait 1;
|
||||
a_corpses = getcorpsearray();
|
||||
if ( a_corpses.size < 15 )
|
||||
{
|
||||
level thread vo_maxis_ssp_fail();
|
||||
level notify( "end_revive_watcher" );
|
||||
return;
|
||||
}
|
||||
n_count = 0;
|
||||
_a206 = a_corpses;
|
||||
_k206 = getFirstArrayKey( _a206 );
|
||||
while ( isDefined( _k206 ) )
|
||||
{
|
||||
m_corpse = _a206[ _k206 ];
|
||||
if ( m_corpse istouching( t_corpse_room ) )
|
||||
{
|
||||
n_count++;
|
||||
}
|
||||
_k206 = getNextArrayKey( _a206, _k206 );
|
||||
}
|
||||
if ( n_count < 15 )
|
||||
{
|
||||
level thread vo_maxis_ssp_fail();
|
||||
level notify( "end_revive_watcher" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
corpse_room_revive_watcher()
|
||||
{
|
||||
level endon( "end_revive_watcher" );
|
||||
weaponname = "none";
|
||||
str_type = "none";
|
||||
t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" );
|
||||
while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
|
||||
{
|
||||
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
|
||||
if ( isplayer( inflictor ) )
|
||||
{
|
||||
weaponname = inflictor.currentweapon;
|
||||
str_type = type;
|
||||
}
|
||||
}
|
||||
/#
|
||||
iprintlnbold( "Revive Complete" );
|
||||
#/
|
||||
vo_maxis_ssp_complete();
|
||||
flag_set( "ssp2_resurrection_done" );
|
||||
}
|
||||
|
||||
ssp2_advance_dragon()
|
||||
{
|
||||
flag_wait( "ssp2_corpses_in_place" );
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 1 );
|
||||
flag_wait( "ssp2_resurrection_done" );
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||
}
|
||||
|
||||
exit_stage_1( success )
|
||||
{
|
||||
flag_set( "ssp1_complete" );
|
||||
}
|
||||
|
||||
exit_stage_2( success )
|
||||
{
|
||||
}
|
||||
|
||||
watch_model_sliquification( n_end_limit, str_complete_flag )
|
||||
{
|
||||
n_count = 0;
|
||||
self setcandamage( 1 );
|
||||
while ( !flag( str_complete_flag ) )
|
||||
{
|
||||
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
||||
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
|
||||
{
|
||||
n_count++;
|
||||
if ( n_count >= n_end_limit )
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
|
||||
#/
|
||||
self notify( "sq_sliquified" );
|
||||
if ( isDefined( self.t_pickup ) )
|
||||
{
|
||||
self.t_pickup delete();
|
||||
}
|
||||
flag_set( str_complete_flag );
|
||||
break;
|
||||
}
|
||||
else if ( n_count == 1 )
|
||||
{
|
||||
level notify( "ssp1_ball_first_sliquified" );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( n_count == 10 )
|
||||
{
|
||||
level notify( "ssp1_ball_sliquified_2" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vo_richtofen_instructions()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" );
|
||||
wait 10;
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" );
|
||||
}
|
||||
|
||||
vo_sliquify_fail_watch()
|
||||
{
|
||||
flag_wait( "sq_ball_picked_up" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
|
||||
}
|
||||
|
||||
vo_richtofen_sliquify_confirm()
|
||||
{
|
||||
level waittill( "ssp1_ball_first_sliquified" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" );
|
||||
level waittill( "ssp1_ball_sliquified_2" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
|
||||
flag_wait( "ssp1_complete" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
|
||||
wait 10;
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" );
|
||||
}
|
||||
|
||||
vo_maxis_sliquify_fail()
|
||||
{
|
||||
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" );
|
||||
}
|
||||
|
||||
vo_maxis_start_ssp()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" );
|
||||
}
|
||||
|
||||
vo_maxis_ssp_reincarnate()
|
||||
{
|
||||
if ( !flag( "ssp2_maxis_reincarnate_said" ) )
|
||||
{
|
||||
flag_set( "ssp2_maxis_reincarnate_said" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" );
|
||||
}
|
||||
else
|
||||
{
|
||||
flag_clear( "ssp2_maxis_reincarnate_said" );
|
||||
}
|
||||
}
|
||||
|
||||
vo_maxis_ssp_fail()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" );
|
||||
}
|
||||
|
||||
vo_maxis_ssp_complete()
|
||||
{
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" );
|
||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" );
|
||||
}
|
280
zm_highrise_patch/maps/mp/zm_highrise_utility.gsc
Normal file
280
zm_highrise_patch/maps/mp/zm_highrise_utility.gsc
Normal file
@ -0,0 +1,280 @@
|
||||
#include maps/mp/zombies/_zm_ffotd;
|
||||
#include maps/mp/zombies/_zm_zonemgr;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
main_start()
|
||||
{
|
||||
level thread spawned_collision_fix();
|
||||
level thread kill_trigger_spawn();
|
||||
}
|
||||
|
||||
main_end()
|
||||
{
|
||||
connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 );
|
||||
connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 );
|
||||
level thread pathfinding_override_fix();
|
||||
}
|
||||
|
||||
spawned_collision_fix()
|
||||
{
|
||||
precachemodel( "collision_geo_512x512x512_standard" );
|
||||
precachemodel( "collision_geo_32x32x128_standard" );
|
||||
precachemodel( "collision_geo_64x64x256_standard" );
|
||||
precachemodel( "collision_wall_128x128x10_standard" );
|
||||
precachemodel( "collision_wall_256x256x10_standard" );
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
if ( !is_true( level.optimise_for_splitscreen ) )
|
||||
{
|
||||
collision1 = spawn( "script_model", ( 2992, 536, 497 ) );
|
||||
collision1 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision1 ghost();
|
||||
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
|
||||
collision2 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision2 ghost();
|
||||
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
|
||||
collision3 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision3.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision3 ghost();
|
||||
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
|
||||
collision4 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision4.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision4 ghost();
|
||||
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
|
||||
collision5 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision5.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision5 ghost();
|
||||
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
|
||||
collision6 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision6.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision6 ghost();
|
||||
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
|
||||
collision7 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision7.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision7 ghost();
|
||||
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
|
||||
collision8 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision8.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision8 ghost();
|
||||
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
|
||||
collision9 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision9.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision9 ghost();
|
||||
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
|
||||
collision10 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision10.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision10 ghost();
|
||||
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
|
||||
collision11 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision11.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision11 ghost();
|
||||
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
|
||||
collision12 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision12.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision12 ghost();
|
||||
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
|
||||
collisione1 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collisione1.angles = ( 0, 0, 0 );
|
||||
collisione1 ghost();
|
||||
collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) );
|
||||
collisione2 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collisione2.angles = ( 0, 0, 0 );
|
||||
collisione2 ghost();
|
||||
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
|
||||
collisione3 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
collisione3 ghost();
|
||||
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
|
||||
collisione4 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collisione4.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
collisione4 ghost();
|
||||
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
|
||||
collisione5 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collisione5.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
collisione5 ghost();
|
||||
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
|
||||
collisione6 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collisione6.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
collisione6 ghost();
|
||||
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
|
||||
collision13 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision13.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
collision13 ghost();
|
||||
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
|
||||
collision14 setmodel( "collision_geo_512x512x512_standard" );
|
||||
collision14.angles = vectorScale( ( 0, 0, 0 ), 6,20013 );
|
||||
collision14 ghost();
|
||||
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
|
||||
collision15 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision15.angles = ( 0, 240,4, -3,00014 );
|
||||
collision15 ghost();
|
||||
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
|
||||
collision16 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision16.angles = ( 0, 60, -2,60003 );
|
||||
collision16 ghost();
|
||||
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
|
||||
collision17 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision17.angles = ( 0, 60, -2,60003 );
|
||||
collision17 ghost();
|
||||
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
|
||||
collision18 setmodel( "collision_geo_64x64x256_standard" );
|
||||
collision18.angles = vectorScale( ( 0, 0, 0 ), 350 );
|
||||
collision18 ghost();
|
||||
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
|
||||
collision19 setmodel( "collision_geo_32x32x128_standard" );
|
||||
collision19.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision19 ghost();
|
||||
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
|
||||
collision20 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision20.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
||||
collision20 ghost();
|
||||
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
|
||||
collision21 setmodel( "collision_geo_32x32x128_standard" );
|
||||
collision21.angles = vectorScale( ( 0, 0, 0 ), 8,6 );
|
||||
collision21 ghost();
|
||||
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
|
||||
collision22 setmodel( "collision_geo_32x32x128_standard" );
|
||||
collision22.angles = vectorScale( ( 0, 0, 0 ), 3,2 );
|
||||
collision22 ghost();
|
||||
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
|
||||
collision23 setmodel( "collision_geo_32x32x128_standard" );
|
||||
collision23.angles = ( 0, 0, 0 );
|
||||
collision23 ghost();
|
||||
collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) );
|
||||
collision24 setmodel( "collision_geo_32x32x128_standard" );
|
||||
collision24.angles = ( 0, 0, 0 );
|
||||
collision24 ghost();
|
||||
}
|
||||
}
|
||||
|
||||
connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
|
||||
{
|
||||
if ( !isDefined( one_way ) )
|
||||
{
|
||||
one_way = 0;
|
||||
}
|
||||
zone_init( zone_name_a );
|
||||
zone_init( zone_name_b );
|
||||
enable_zone( zone_name_a );
|
||||
enable_zone( zone_name_b );
|
||||
if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) )
|
||||
{
|
||||
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct();
|
||||
}
|
||||
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1;
|
||||
if ( !one_way )
|
||||
{
|
||||
if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) )
|
||||
{
|
||||
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct();
|
||||
}
|
||||
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1;
|
||||
}
|
||||
}
|
||||
|
||||
kill_trigger_spawn()
|
||||
{
|
||||
trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 );
|
||||
trig.angles = vectorScale( ( 0, 0, 0 ), 150 );
|
||||
trig.targetname = "instant_death";
|
||||
trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 );
|
||||
trig2.angles = ( 0, 0, 0 );
|
||||
trig2.targetname = "instant_death";
|
||||
}
|
||||
|
||||
pathfinding_override_fix()
|
||||
{
|
||||
zombie_trigger_origin = ( 2303, 746, 1296 );
|
||||
zombie_trigger_radius = 30;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 2357, 778, 1304 );
|
||||
player_trigger_radius = 40;
|
||||
zombie_goto_point = ( 2361, 738, 1304 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( 3767, 1867, 2790 );
|
||||
zombie_trigger_radius = 64;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 3684, 1772, 2758 );
|
||||
player_trigger_radius = 70;
|
||||
zombie_goto_point = ( 3659, 1872, 2790 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( 3245, 1251, 1347,79 );
|
||||
zombie_trigger_radius = 64;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 3246, 1126, 1347,79 );
|
||||
player_trigger_radius = 64;
|
||||
zombie_goto_point = ( 3031, 1234, 1278,12 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( 3246, 1113, 1347,79 );
|
||||
zombie_trigger_radius = 64;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 3245, 1230, 1347,79 );
|
||||
player_trigger_radius = 44;
|
||||
zombie_goto_point = ( 3023, 1154, 1278,12 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( 3389, 1182, 1364,79 );
|
||||
zombie_trigger_radius = 64;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 3246, 1126, 1347,79 );
|
||||
player_trigger_radius = 64;
|
||||
zombie_goto_point = ( 3381, 1093, 1364,79 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( 3148, 1712, 1299,07 );
|
||||
zombie_trigger_radius = 64;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 3149, 1604, 1302,2 );
|
||||
player_trigger_radius = 44;
|
||||
zombie_goto_point = ( 3259, 1644, 1321,5 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( 3149, 1584, 1302,2 );
|
||||
zombie_trigger_radius = 64;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 3148, 1692, 1299,07 );
|
||||
player_trigger_radius = 44;
|
||||
zombie_goto_point = ( 3291, 1684, 1321,5 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( 3818, 1860, 2789,23 );
|
||||
zombie_trigger_radius = 100;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( 3601, 1961, 2744,95 );
|
||||
player_trigger_radius = 50;
|
||||
zombie_goto_point = ( 3626, 1918, 2750,26 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
all_nodes = getallnodes();
|
||||
_a331 = all_nodes;
|
||||
_k331 = getFirstArrayKey( _a331 );
|
||||
while ( isDefined( _k331 ) )
|
||||
{
|
||||
node = _a331[ _k331 ];
|
||||
if ( node.origin[ 0 ] == 3598,2 )
|
||||
{
|
||||
deletepathnode( node );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k331 = getNextArrayKey( _a331, _k331 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
highrise_link_nodes( a, b )
|
||||
{
|
||||
if ( nodesarelinked( a, b ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
link_nodes( a, b );
|
||||
}
|
||||
|
||||
highrise_unlink_nodes( a, b )
|
||||
{
|
||||
if ( !nodesarelinked( a, b ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
unlink_nodes( a, b );
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user