Files
Recompilable-gscs-for-BO2-z…/zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc

354 lines
12 KiB
Plaintext

#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++;
}
}