mirror of
https://github.com/JezuzLizard/t6-fastfile-mods.git
synced 2025-04-20 21:45:44 +00:00
Allow ai to do any traversal. Fix nuketown perk explosion script error on custom ais.
This commit is contained in:
parent
adfdb35216
commit
234014e640
@ -385,7 +385,12 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
|
||||
self.custom_item_dmg = 1000;
|
||||
self.brutus_lockdown_state = 0;
|
||||
recalc_zombie_array();
|
||||
self setphysparams( 20, 0, 60 );
|
||||
width = 15;
|
||||
if ( level.script == "zm_prison" )
|
||||
{
|
||||
width = 20;
|
||||
}
|
||||
self setphysparams( width, 0, 60 );
|
||||
self.zombie_init_done = 1;
|
||||
self notify( "zombie_init_done" );
|
||||
self.allowpain = 0;
|
||||
|
@ -151,6 +151,12 @@ init()
|
||||
level.mechz_powerplant_stun_time = 4;
|
||||
flag_init( "mechz_launching_claw" );
|
||||
flag_init( "mechz_claw_move_complete" );
|
||||
if ( level.script == "zm_tomb" )
|
||||
{
|
||||
registerclientfield( "actor", "mechz_fx", 14000, 12, "int" );
|
||||
registerclientfield( "toplayer", "mechz_grab", 14000, 1, "int" );
|
||||
}
|
||||
|
||||
level thread init_flamethrower_triggers();
|
||||
|
||||
if ( isdefined( level.mechz_spawning_logic_override_func ) )
|
||||
@ -571,7 +577,12 @@ mechz_spawn()
|
||||
self.meleedamage = 75;
|
||||
self.custom_item_dmg = 2000;
|
||||
recalc_zombie_array();
|
||||
self setphysparams( 20, 0, 80 );
|
||||
width = 15;
|
||||
if ( level.script == "zm_tomb" )
|
||||
{
|
||||
width = 20;
|
||||
}
|
||||
self setphysparams( width, 0, 80 );
|
||||
self setcandamage( 0 );
|
||||
self.zombie_init_done = 1;
|
||||
self notify( "zombie_init_done" );
|
||||
@ -1681,7 +1692,7 @@ mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon,
|
||||
|
||||
mechz_non_attacker_damage_override( damage, weapon, attacker )
|
||||
{
|
||||
if ( attacker == level.vh_tank )
|
||||
if ( isDefined( level.vh_tank ) && attacker == level.vh_tank )
|
||||
self thread mechz_tank_hit_callback();
|
||||
|
||||
return false;
|
||||
|
@ -55,6 +55,10 @@ mechz_flamethrower_initial_setup()
|
||||
|
||||
get_flamethrower_trigger()
|
||||
{
|
||||
if ( getDvar( "mapname" ) != "zm_tomb" )
|
||||
{
|
||||
return undefined;
|
||||
}
|
||||
for ( i = 0; i < level.flamethrower_trigger_array.size; i++ )
|
||||
{
|
||||
if ( !( isdefined( level.flamethrower_trigger_array[i].in_use ) && level.flamethrower_trigger_array[i].in_use ) )
|
||||
|
@ -112,7 +112,11 @@ zone_hud()
|
||||
}
|
||||
|
||||
zone = self get_current_zone();
|
||||
|
||||
if ( !isDefined( zone ) )
|
||||
{
|
||||
wait 1;
|
||||
continue;
|
||||
}
|
||||
if ( prev_zone != zone )
|
||||
{
|
||||
prev_zone = zone;
|
||||
@ -203,7 +207,7 @@ draw_zome_spawn_location_info_text( origin, color, zone_name, location_type_name
|
||||
draw_specific_zombie_spawn_locations( loc_array, zone_name, color, type )
|
||||
{
|
||||
draw_type = getDvar( "zm_ai_pack_debug_spawn_loc_draw_type" );
|
||||
if ( draw_type == "" || draw_type != type )
|
||||
if ( draw_type == "" || ( draw_type != "all" && draw_type != type ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -222,6 +226,8 @@ draw_zombie_spawn_locations()
|
||||
wait 1;
|
||||
}
|
||||
|
||||
flag_wait( "initial_blackscreen_passed" );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
while ( getDvarInt( "zm_ai_pack_debug" ) <= 0 )
|
||||
@ -272,6 +278,10 @@ draw_node( origin, color, type )
|
||||
|
||||
draw_node_info( node, type )
|
||||
{
|
||||
if ( !level.players[ 0 ] is_player_looking_at( node.origin, 0.9, false ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
offset = ( 0, 0, 0 );
|
||||
origin = node.origin;
|
||||
print3d( origin + ( 0, 0, 49 ), "ORIGIN:" + origin );
|
||||
@ -328,6 +338,8 @@ draw_node_data( node, color, type )
|
||||
|
||||
draw_nodes()
|
||||
{
|
||||
flag_wait( "initial_blackscreen_passed" );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
while ( getDvarInt( "zm_ai_pack_debug" ) <= 0 )
|
||||
|
@ -12,6 +12,14 @@
|
||||
main()
|
||||
{
|
||||
replaceFunc( maps\mp\_visionset_mgr::init, ::visionset_mgr_init_override );
|
||||
replaceFunc( maps\mp\animscripts\traverse\zm_shared::dotraverse, ::dotraverse_override );
|
||||
perk_machine_knockdown_zombie_func = getFunction( "maps/mp/zm_nuked_perks", "perk_machine_knockdown_zombie" );
|
||||
|
||||
if ( isDefined( perk_machine_knockdown_zombie_func ) )
|
||||
{
|
||||
replaceFunc( perk_machine_knockdown_zombie_func, ::perk_machine_knockdown_zombie_override );
|
||||
}
|
||||
|
||||
level.script = toLower( getDvar( "mapname" ) );
|
||||
level.gametype = toLower( getDvar( "g_gametype" ) );
|
||||
|
||||
@ -101,3 +109,160 @@ visionset_mgr_init_override()
|
||||
level thread maps\mp\_visionset_mgr::onplayerconnect();
|
||||
run_visionset_callbacks();
|
||||
}
|
||||
|
||||
stop_basic_find_flesh()
|
||||
{
|
||||
if ( isdefined( self.ai_state ) && self.ai_state == "find_flesh" )
|
||||
{
|
||||
self.ai_state = undefined;
|
||||
self notify( "stop_find_flesh" );
|
||||
self notify( "zombie_acquire_enemy" );
|
||||
}
|
||||
}
|
||||
|
||||
dotraverse_teleport( no_powerups )
|
||||
{
|
||||
if ( isDefined( self.is_traversing ) && self.is_traversing )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self endon( "death" );
|
||||
|
||||
endnode = self getnegotiationendnode();
|
||||
startnode = self getnegotiationstartnode();
|
||||
if ( !isdefined( endnode ) || !isdefined( startnode ) )
|
||||
{
|
||||
print( "dotraverse_teleport() missing endnode or startnode" );
|
||||
return;
|
||||
}
|
||||
|
||||
units_per_frame = 2.5;
|
||||
original_origin = self.origin;
|
||||
steps = int( distance( original_origin, endnode.origin ) / units_per_frame );
|
||||
|
||||
forward = vectorNormalize( endnode.origin - original_origin );
|
||||
forward *= units_per_frame;
|
||||
for ( i = 1; i < steps; i++ )
|
||||
{
|
||||
self.is_traversing = true;
|
||||
self stop_basic_find_flesh();
|
||||
self.ai_state = "idle";
|
||||
//self setanimstatefromasd( "zm_idle" );
|
||||
self animmode( "noclip" );
|
||||
self orientmode( "face angle", startnode.angles[1] );
|
||||
self.origin = original_origin + ( forward * i );
|
||||
self setGoalPos( self.origin );
|
||||
wait 0.05;
|
||||
if ( distanceSquared( self.origin, endnode.origin ) <= units_per_frame * units_per_frame )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
self.origin = endnode.origin;
|
||||
|
||||
print( "Ending custom traverse" );
|
||||
self animmode( "none" );
|
||||
self.is_traversing = false;
|
||||
}
|
||||
|
||||
dotraverse_override( traversestate, traversealias, no_powerups )
|
||||
{
|
||||
if ( !self HasAnimStateFromASD( traversestate ) || self getanimsubstatefromasd( traversestate, traversealias ) == -1 )
|
||||
{
|
||||
self thread dotraverse_teleport( no_powerups );
|
||||
return;
|
||||
}
|
||||
self endon( "killanimscript" );
|
||||
self traversemode( "nogravity" );
|
||||
self traversemode( "noclip" );
|
||||
old_powerups = 0;
|
||||
|
||||
if ( isdefined( no_powerups ) && no_powerups )
|
||||
{
|
||||
old_powerups = self.no_powerups;
|
||||
self.no_powerups = 1;
|
||||
}
|
||||
|
||||
self.is_traversing = 1;
|
||||
self notify( "zombie_start_traverse" );
|
||||
self.traversestartnode = self getnegotiationstartnode();
|
||||
assert( isdefined( self.traversestartnode ) );
|
||||
self orientmode( "face angle", self.traversestartnode.angles[1] );
|
||||
self.traversestartz = self.origin[2];
|
||||
|
||||
if ( isdefined( self.pre_traverse ) )
|
||||
self [[ self.pre_traverse ]]();
|
||||
|
||||
self setanimstatefromasd( traversestate, traversealias );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "traverse_anim" );
|
||||
self traversemode( "gravity" );
|
||||
self.a.nodeath = 0;
|
||||
|
||||
if ( isdefined( self.post_traverse ) )
|
||||
self [[ self.post_traverse ]]();
|
||||
|
||||
self maps\mp\animscripts\zm_run::needsupdate();
|
||||
|
||||
if ( !self.isdog )
|
||||
self maps\mp\animscripts\zm_run::moverun();
|
||||
|
||||
self.is_traversing = 0;
|
||||
self notify( "zombie_end_traverse" );
|
||||
|
||||
if ( isdefined( no_powerups ) && no_powerups )
|
||||
self.no_powerups = old_powerups;
|
||||
}
|
||||
|
||||
perk_machine_knockdown_zombie_override( origin )
|
||||
{
|
||||
damage = int( self.health * 0.25 );
|
||||
if ( isDefined( self.animname ) && self.animname == "zombie" )
|
||||
{
|
||||
self.a.gib_ref = random( array( "guts", "right_arm", "left_arm" ) );
|
||||
self thread maps\mp\animscripts\zm_death::do_gib();
|
||||
level.zombie_total++;
|
||||
level.zombie_total_subtract++;
|
||||
damage = self.health + 100;
|
||||
}
|
||||
|
||||
self dodamage( damage, origin );
|
||||
}
|
||||
|
||||
get_idle_anim()
|
||||
{
|
||||
idle_anim = "";
|
||||
if ( isDefined( self.animname ) )
|
||||
{
|
||||
switch ( self.animname )
|
||||
{
|
||||
case "zombie_dog":
|
||||
idle_anim = "zm_stop_idle";
|
||||
break;
|
||||
case "mechz_zombie":
|
||||
case "brutus_zombie":
|
||||
case "ghost_zombie":
|
||||
case "zombie":
|
||||
if ( isDefined( self.has_legs ) && !self.has_legs )
|
||||
{
|
||||
idle_anim = "zm_idle_crawl";
|
||||
}
|
||||
else
|
||||
{
|
||||
idle_anim = "zm_idle";
|
||||
}
|
||||
break;
|
||||
case "screecher":
|
||||
case "leaper_zombie":
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
else if ( isDefined( self.is_avogadro ) && self.is_avogadro )
|
||||
{
|
||||
idle_anim = "zm_chamber_idle";
|
||||
}
|
||||
|
||||
return idle_anim;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user