diff --git a/README.md b/README.md index be3b4e0a..b409e3d8 100644 --- a/README.md +++ b/README.md @@ -426,6 +426,7 @@ * Increased bus speed by 100% * Powerups dropped within the bus are linked to the bus * Players can sprint and go prone on the bus +* Bus wallbuy trigger functions the same as other wallbuy triggers * Lava in starting area activates after the power is on * Lava destroys grenades instantly * Decreased brightness at Power Station diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index 7d5bbcc9..20b7a6ee 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -52,6 +52,7 @@ main() replaceFunc(maps\mp\zombies\_zm_laststand::revive_give_back_weapons, scripts\zm\replaced\_zm_laststand::revive_give_back_weapons); replaceFunc(maps\mp\zombies\_zm_laststand::revive_hud_think, scripts\zm\replaced\_zm_laststand::revive_hud_think); replaceFunc(maps\mp\zombies\_zm_laststand::auto_revive, scripts\zm\replaced\_zm_laststand::auto_revive); + replaceFunc(maps\mp\zombies\_zm_weapons::init_weapon_upgrade, scripts\zm\replaced\_zm_weapons::init_weapon_upgrade); replaceFunc(maps\mp\zombies\_zm_weapons::weapon_give, scripts\zm\replaced\_zm_weapons::weapon_give); replaceFunc(maps\mp\zombies\_zm_weapons::ammo_give, scripts\zm\replaced\_zm_weapons::ammo_give); replaceFunc(maps\mp\zombies\_zm_weapons::get_upgraded_ammo_cost, scripts\zm\replaced\_zm_weapons::get_upgraded_ammo_cost); diff --git a/scripts/zm/replaced/_zm_weapons.gsc b/scripts/zm/replaced/_zm_weapons.gsc index edfe64ce..830d0f6f 100644 --- a/scripts/zm/replaced/_zm_weapons.gsc +++ b/scripts/zm/replaced/_zm_weapons.gsc @@ -3,6 +3,18 @@ #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_weapons; +init_weapon_upgrade() +{ + init_spawnable_weapon_upgrade(); + weapon_spawns = []; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + { + scripts\zm\replaced\utility::wallbuy( weapon_spawns[i].zombie_weapon_upgrade, weapon_spawns[i].target + "_weapon_upgrade", weapon_spawns[i].targetname, weapon_spawns[i].origin, weapon_spawns[i].angles, 0 ); + } +} + weapon_give( weapon, is_upgrade, magic_box, nosound ) { primaryweapons = self getweaponslistprimaries(); diff --git a/scripts/zm/replaced/utility.gsc b/scripts/zm/replaced/utility.gsc index 4631de03..45af9c59 100644 --- a/scripts/zm/replaced/utility.gsc +++ b/scripts/zm/replaced/utility.gsc @@ -169,7 +169,7 @@ register_map_initial_spawnpoint( origin, angles, team_num ) level.struct_class_names[ "script_noteworthy" ][ "initial_spawn" ][ player_initial_spawnpoint_size ] = spawnpoint_struct; } -wallbuy( weapon_name, target, targetname, origin, angles ) +wallbuy( weapon_name, target, targetname, origin, angles, play_chalk_fx = 1 ) { unitrigger_stub = spawnstruct(); unitrigger_stub.origin = origin; @@ -290,13 +290,16 @@ wallbuy( weapon_name, target, targetname, origin, angles ) maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); } - chalk_fx = weapon_name + "_fx"; - level thread playchalkfx( chalk_fx, origin, angles ); - if(weaponType(weapon_name) == "grenade") { unitrigger_stub thread wallbuy_grenade_model_fix(); } + + if (play_chalk_fx) + { + chalk_fx = weapon_name + "_fx"; + level thread playchalkfx( chalk_fx, origin, angles ); + } } playchalkfx( effect, origin, angles ) diff --git a/scripts/zm/replaced/zm_transit_bus.gsc b/scripts/zm/replaced/zm_transit_bus.gsc index 56c3d022..ed0656b8 100644 --- a/scripts/zm/replaced/zm_transit_bus.gsc +++ b/scripts/zm/replaced/zm_transit_bus.gsc @@ -441,6 +441,103 @@ begin_arrival_slowdown() self setspeed( 10, 10, 10 ); } +buspathblockersetup() +{ + self.path_blockers = getentarray( "bus_path_blocker", "targetname" ); + + for ( i = 0; i < self.path_blockers.size; i++ ) + self.path_blockers[i] linkto( self, "", self worldtolocalcoords( self.path_blockers[i].origin ), self.path_blockers[i].angles + self.angles ); + + cow_catcher_blocker = getent( "cow_catcher_path_blocker", "targetname" ); + + if ( isdefined( cow_catcher_blocker ) ) + cow_catcher_blocker linkto( self, "", self worldtolocalcoords( cow_catcher_blocker.origin ), cow_catcher_blocker.angles + self.angles ); + + trig = getent( "bus_buyable_weapon1", "script_noteworthy" ); + trig enablelinkto(); + trig linkto( self, "", self worldtolocalcoords( trig.origin ), ( 0, 0, 0 ) ); + trig setinvisibletoall(); + self.buyable_weapon = trig; + level._spawned_wallbuys[level._spawned_wallbuys.size] = trig; + weapon_model = getent( trig.target, "targetname" ); + weapon_model linkto( self, "", self worldtolocalcoords( weapon_model.origin ), weapon_model.angles + self.angles ); + weapon_model setmovingplatformenabled( 1 ); + weapon_model._linked_ent = trig; + weapon_model hide(); + + self thread bus_buyable_weapon_unitrigger_setup(trig); +} + +bus_buyable_weapon_unitrigger_setup(trig) +{ + unitrigger = undefined; + while (!isDefined(unitrigger)) + { + for(i = 0; i < level._unitriggers.trigger_stubs.size; i++) + { + if(IsDefined(level._unitriggers.trigger_stubs[i].zombie_weapon_upgrade) && level._unitriggers.trigger_stubs[i].zombie_weapon_upgrade == "beretta93r_zm") + { + unitrigger = level._unitriggers.trigger_stubs[i]; + break; + } + } + + wait 1; + } + + unitrigger.origin_parent = trig; + unitrigger.link_parent = trig; + unitrigger.originfunc = ::bus_buyable_weapon_get_unitrigger_origin; + unitrigger.onspawnfunc = ::bus_buyable_weapon_on_spawn_trigger; + + unitrigger.target = undefined; // remove other wallbuy weapon model from showing +} + +bus_buyable_weapon_get_unitrigger_origin() +{ + return self.origin_parent.origin + (0, 0, -32); +} + +bus_buyable_weapon_on_spawn_trigger(trigger) +{ + trigger enablelinkto(); + trigger linkto(self.link_parent); + trigger setmovingplatformenabled(1); +} + +busthink() +{ + no_danger = 0; + self thread busupdatechasers(); + self thread busupdateplayers(); + self thread busupdatenearzombies(); + + while ( true ) + { + waittillframeend; + self busupdatespeed(); + self busupdateignorewindows(); + + if ( self.ismoving ) + self busupdatenearequipment(); + + if ( !( isdefined( level.bus_zombie_danger ) && level.bus_zombie_danger ) && ( self.numplayersonroof || self.numplayersinsidebus ) ) + { + no_danger++; + + if ( no_danger > 40 ) + { + level thread do_player_bus_zombie_vox( "bus_zom_none", 40, 60 ); + no_danger = 0; + } + } + else + no_danger = 0; + + wait 0.1; + } +} + busupdateplayers() { level endon( "end_game" ); @@ -532,7 +629,6 @@ busupdateplayers() if ( !playerisinbus && ( isdefined( player.isonbus ) && player.isonbus ) ) { bbprint( "zombie_events", "category %s type %s round %d playername %s", "BUS", "player_exit", level.round_number, player.name ); - self.buyable_weapon setinvisibletoplayer( player ); player setclientplayerpushamount( 1 ); player notify( "left bus" ); player clientnotify( "LBS" ); @@ -551,12 +647,10 @@ busupdateplayers() if ( isdefined( player.isonbusroof ) && player.isonbusroof ) { - self.buyable_weapon setinvisibletoplayer( player ); self.numplayersonroof++; } else if ( isdefined( player.isonbus ) && player.isonbus ) { - self.buyable_weapon setvisibletoplayer( player ); self.numplayersinsidebus++; } diff --git a/scripts/zm/zm_transit/zm_transit_reimagined.gsc b/scripts/zm/zm_transit/zm_transit_reimagined.gsc index ee1f3a45..3cabcdbe 100644 --- a/scripts/zm/zm_transit/zm_transit_reimagined.gsc +++ b/scripts/zm/zm_transit/zm_transit_reimagined.gsc @@ -23,7 +23,6 @@ main() replaceFunc(maps\mp\zm_transit_utility::solo_tombstone_removal, scripts\zm\replaced\zm_transit_utility::solo_tombstone_removal); replaceFunc(maps\mp\zm_transit_bus::bussetup, scripts\zm\replaced\zm_transit_bus::bussetup); replaceFunc(maps\mp\zm_transit_bus::busscheduleadd, scripts\zm\replaced\zm_transit_bus::busscheduleadd); - replaceFunc(maps\mp\zm_transit_bus::busupdateplayers, scripts\zm\replaced\zm_transit_bus::busupdateplayers); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_detach, scripts\zm\replaced\_zm_ai_screecher::screecher_detach); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_cleanup, scripts\zm\replaced\_zm_ai_screecher::screecher_cleanup); replaceFunc(maps\mp\zombies\_zm_riotshield::doriotshielddeploy, scripts\zm\replaced\_zm_riotshield::doriotshielddeploy); @@ -65,7 +64,6 @@ init() path_exploit_fixes(); level thread power_local_electric_doors_globally(); - level thread b23r_hint_string_fix(); level thread power_station_vision_change(); level thread attach_powerups_to_bus(); } @@ -200,25 +198,6 @@ power_local_electric_doors_globally() } } -b23r_hint_string_fix() -{ - flag_wait( "initial_blackscreen_passed" ); - wait 0.05; - - trigs = getentarray("weapon_upgrade", "targetname"); - foreach (trig in trigs) - { - if (trig.zombie_weapon_upgrade == "beretta93r_zm") - { - level.zombie_weapons[trig.zombie_weapon_upgrade].hint = "Hold ^3[{+activate}]^7 for &&1 [Cost: &&2], Ammo [Cost: &&3], \n Upgraded Ammo [Cost: &&4]"; - hint = level.zombie_weapons[trig.zombie_weapon_upgrade].hint; - cost = level.zombie_weapons[trig.zombie_weapon_upgrade].cost; - display_name = getweapondisplayname(trig.zombie_weapon_upgrade); - trig sethintstring(hint, display_name, cost, cost / 2, 2500); - } - } -} - grenade_safe_to_bounce( player, weapname ) { if ( !is_offhand_weapon( weapname ) )