mirror of
https://github.com/JezuzLizard/t6-fastfile-mods.git
synced 2025-06-10 11:17:59 -05:00
Allow ai to do any traversal. Fix nuketown perk explosion script error on custom ais.
This commit is contained in:
@ -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" ) );
|
||||
|
||||
@ -100,4 +108,161 @@ visionset_mgr_init_override()
|
||||
level thread maps\mp\_visionset_mgr::monitor();
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user