burc_2004

_zm_ai_mechz_dev.gsc

Oct 22nd, 2015
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.95 KB | None | 0 0
  1. #include maps/mp/animscripts/zm_shared;
  2. #include maps/mp/zombies/_zm_ai_mechz;
  3. #include maps/mp/animscripts/zm_utility;
  4. #include maps/mp/zombies/_zm_net;
  5. #include maps/mp/zombies/_zm_utility;
  6. #include maps/mp/_utility;
  7. #include common_scripts/utility;
  8.  
  9. #using_animtree( "mechz_claw" );
  10.  
  11. mechz_debug()
  12. {
  13. /#
  14.     while ( 1 )
  15.     {
  16.         debug_level = getDvarInt( #"E7121222" );
  17.         while ( isDefined( debug_level ) && debug_level )
  18.         {
  19.             while ( debug_level == 1 )
  20.             {
  21.                 mechz_array = getentarray( "mechz_zombie_ai" );
  22.                 i = 0;
  23.                 while ( i < mechz_array.size )
  24.                 {
  25.                     if ( isDefined( mechz_array[ i ].goal_pos ) )
  26.                     {
  27.                         debugstar( mechz_array[ i ].goal_pos, ( 0, 0, 1 ), 1 );
  28.                         line( mechz_array[ i ].goal_pos, mechz_array[ i ].origin, ( 0, 0, 1 ), 0, 1 );
  29.                     }
  30.                     i++;
  31.                 }
  32.             }
  33.         }
  34. #/
  35.     }
  36. }
  37.  
  38. setup_devgui()
  39. {
  40. /#
  41.     setdvar( "spawn_Mechz", "off" );
  42.     setdvar( "force_mechz_jump", "off" );
  43.     setdvar( "test_mechz_tank", "off" );
  44.     setdvar( "test_mechz_robot", "off" );
  45.     setdvar( "reset_mechz_thinking", "off" );
  46.     setdvar( "test_mechz_sprint", "off" );
  47.     setdvar( "mechz_force_behavior", "none" );
  48.     setdvarint( "mechz_behavior_orient", 0 );
  49.     setdvarint( "mechz_behavior_dist", 300 );
  50.     adddebugcommand( "devgui_cmd "Zombies/Zombie Spawning:2/Spawn Zombie:1/Mech Zombie:1" "spawn_Mechz on"\n" );
  51.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Jump In:1" "mechz_force_behavior jump_in"\n" );
  52.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Jump Out:2" "mechz_force_behavior jump_out"\n" );
  53.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Flamethrower:3" "mechz_force_behavior flamethrower"\n" );
  54.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Damage Armor:4" "mechz_force_behavior damage_armor"\n" );
  55.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Damage Faceplate:5" "mechz_force_behavior damage_faceplate"\n" );
  56.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Claw Attack:5" "mechz_force_behavior claw_attack"\n" );
  57.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Melee:6" "mechz_force_behavior melee"\n" );
  58.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/zero degrees:1" "mechz_behavior_orient 0"\n" );
  59.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/forty-five degrees:2" "mechz_behavior_orient 45"\n" );
  60.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/ninety degrees:3" "mechz_behavior_orient 90"\n" );
  61.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/one thirty five degrees:4" "mechz_behavior_orient 135"\n" );
  62.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/one eighty degrees:5" "mechz_behavior_orient 180"\n" );
  63.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/two twenty five degrees:6" "mechz_behavior_orient 225"\n" );
  64.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/two seventy degrees:7" "mechz_behavior_orient 270"\n" );
  65.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Angles:7/three fifteen degrees:8" "mechz_behavior_orient 315"\n" );
  66.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/one hundred:1" "mechz_behavior_dist 100"\n" );
  67.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/two hundred:2" "mechz_behavior_dist 200"\n" );
  68.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/three hundred:3" "mechz_behavior_dist 300"\n" );
  69.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/four hundred:4" "mechz_behavior_dist 400"\n" );
  70.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Force Behavior:1/Distance:8/five hundred:5" "mechz_behavior_dist 500"\n" );
  71.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Test Tank Knockdown:2" "test_mechz_tank on"\n" );
  72.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Test Robot Knockdown:3" "test_mechz_robot on"\n" );
  73.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Test Sprint:4" "test_mechz_sprint on"\n" );
  74.     adddebugcommand( "devgui_cmd "Zombies/MechZ:3/Reset Mech:5" "reset_mechz_thinking on"\n" );
  75.     level thread watch_devgui_mechz();
  76. #/
  77. }
  78.  
  79. watch_devgui_mechz()
  80. {
  81. /#
  82.     while ( 1 )
  83.     {
  84.         if ( getDvar( "spawn_Mechz" ) == "on" )
  85.         {
  86.             mechz_health_increases();
  87.             level.mechz_left_to_spawn = 1;
  88.             if ( getDvarInt( "zombie_cheat" ) >= 2 )
  89.             {
  90.                 level.round_number++;
  91.             }
  92.             level notify( "spawn_mechz" );
  93.             setdvar( "spawn_Mechz", "off" );
  94.             level.mechz_last_spawn_round = 0;
  95.         }
  96.         if ( getDvar( "mechz_force_behavior" ) != "none" )
  97.         {
  98.             behavior = getDvar( "mechz_force_behavior" );
  99.             zombies = getaiarray( "axis" );
  100.             i = 0;
  101.             while ( i < zombies.size )
  102.             {
  103.                 if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz )
  104.                 {
  105.                     zombies[ i ] thread mechz_force_behavior( behavior );
  106.                 }
  107.                 i++;
  108.             }
  109.             setdvar( "mechz_force_behavior", "none" );
  110.         }
  111.         if ( getDvar( "test_mechz_tank" ) == "on" )
  112.         {
  113.             setdvar( "test_mechz_tank", "off" );
  114.             mechz = undefined;
  115.             zombies = getaiarray( "axis" );
  116.             i = 0;
  117.             while ( i < zombies.size )
  118.             {
  119.                 if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz )
  120.                 {
  121.                     mechz = zombies[ i ];
  122.                 }
  123.                 i++;
  124.             }
  125.             while ( !isDefined( mechz ) )
  126.             {
  127.                 continue;
  128.             }
  129.             mechz.not_interruptable = 1;
  130.             mechz mechz_stop_basic_find_flesh();
  131.             mechz.ai_state = "devgui";
  132.             mechz.goal_pos = ( 446, -4318, 200 );
  133.             mechz setgoalpos( mechz.goal_pos );
  134.         }
  135.         if ( getDvar( "test_mechz_robot" ) == "on" )
  136.         {
  137.             setdvar( "test_mechz_robot", "off" );
  138.             mechz = undefined;
  139.             zombies = getaiarray( "axis" );
  140.             i = 0;
  141.             while ( i < zombies.size )
  142.             {
  143.                 if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz )
  144.                 {
  145.                     mechz = zombies[ i ];
  146.                 }
  147.                 i++;
  148.             }
  149.             while ( !isDefined( mechz ) )
  150.             {
  151.                 continue;
  152.             }
  153.             mechz.not_interruptable = 1;
  154.             mechz mechz_stop_basic_find_flesh();
  155.             mechz.ai_state = "devgui";
  156.             mechz.goal_pos = ( 1657, -336, 92 );
  157.             mechz setgoalpos( mechz.goal_pos );
  158.         }
  159.         while ( getDvar( "test_mechz_sprint" ) == "on" )
  160.         {
  161.             setdvar( "test_mechz_sprint", "off" );
  162.             zombies = getaiarray( "axis" );
  163.             i = 0;
  164.             while ( i < zombies.size )
  165.             {
  166.                 if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz )
  167.                 {
  168.                     zombies[ i ].force_sprint = 1;
  169.                 }
  170.                 i++;
  171.             }
  172.         }
  173.         while ( getDvar( "reset_mechz_thinking" ) == "on" )
  174.         {
  175.             setdvar( "reset_mechz_thinking", "off" );
  176.             zombies = getaiarray( "axis" );
  177.             i = 0;
  178.             while ( i < zombies.size )
  179.             {
  180.                 if ( isDefined( zombies[ i ].is_mechz ) && zombies[ i ].is_mechz )
  181.                 {
  182.                     zombies[ i ].not_interruptable = 0;
  183.                     zombies[ i ].force_sprint = 0;
  184.                 }
  185.                 i++;
  186.             }
  187.         }
  188.         wait 0,1;
  189. #/
  190.     }
  191. }
  192.  
  193. mechz_force_behavior( behavior )
  194. {
  195. /#
  196.     self notify( "kill_force_behavior" );
  197.     self thread mechz_stop_basic_find_flesh();
  198.     self.ignoreall = 1;
  199.     self.force_behavior = 1;
  200.     if ( behavior == "jump_in" )
  201.     {
  202.         self thread mechz_force_jump_in();
  203.     }
  204.     if ( behavior == "jump_out" )
  205.     {
  206.         self thread mechz_force_jump_out();
  207.     }
  208.     if ( behavior == "flamethrower" )
  209.     {
  210.         self thread mechz_force_flamethrower();
  211.     }
  212.     if ( behavior == "claw_attack" )
  213.     {
  214.         self thread mechz_force_claw_attack();
  215.     }
  216.     if ( behavior == "damage_armor" )
  217.     {
  218.         self thread mechz_force_damage_armor();
  219.     }
  220.     if ( behavior == "damage_faceplate" )
  221.     {
  222.         self thread mechz_force_damage_faceplate();
  223.     }
  224.     if ( behavior == "melee" )
  225.     {
  226.         self thread mechz_force_melee();
  227.     }
  228.     if ( behavior == "none" )
  229.     {
  230.         self.ignoreall = 0;
  231.         self.force_behavior = 0;
  232.         self notify( "kill_force_behavior" );
  233. #/
  234.     }
  235. }
  236.  
  237. get_behavior_orient()
  238. {
  239. /#
  240.     behavior_orient = getDvarInt( #"2F660A7B" );
  241.     return level.players[ 0 ].angles + vectorScale( ( 0, 0, 1 ), 180 ) + ( 0, behavior_orient, 0 );
  242. #/
  243. }
  244.  
  245. setup_force_behavior()
  246. {
  247. /#
  248.     if ( !isDefined( level.test_align_struct ) )
  249.     {
  250.         player = get_players()[ 0 ];
  251.         pos = player.origin;
  252.         offset = anglesToForward( player.angles );
  253.         offset = vectornormalize( offset );
  254.         level.test_align_struct = spawn( "script_model", pos + ( 300 * offset ) );
  255.         level.test_align_struct setmodel( "tag_origin" );
  256.         level.test_align_struct.angles = player.angles + vectorScale( ( 0, 0, 1 ), 180 );
  257.         level.test_align_struct thread align_test_struct();
  258.         level.test_align_struct.angles = player.angles + vectorScale( ( 0, 0, 1 ), 180 );
  259.     }
  260.     self linkto( level.test_align_struct, "tag_origin", ( 0, 0, 1 ), ( 0, 0, 1 ) );
  261.     self.fx_field &= 64;
  262.     self.fx_field &= 128;
  263.     self.fx_field &= 256;
  264. #/
  265. }
  266.  
  267. align_test_struct()
  268. {
  269. /#
  270.     while ( 1 )
  271.     {
  272.         pos = level.players[ 0 ].origin;
  273.         offset = anglesToForward( level.players[ 0 ].angles );
  274.         offset = vectornormalize( offset );
  275.         dist = getDvarInt( #"6DCD047E" );
  276.         level.test_align_struct.origin = pos + ( dist * offset );
  277.         level.test_align_struct.angles = get_behavior_orient();
  278.         wait 0,05;
  279. #/
  280.     }
  281. }
  282.  
  283. scripted_behavior( anim_scripted_name, notify_name )
  284. {
  285. /#
  286.     self animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name );
  287.     self maps/mp/animscripts/zm_shared::donotetracks( notify_name );
  288. #/
  289. }
  290.  
  291. mechz_force_jump_in()
  292. {
  293. /#
  294.     self endon( "kill_force_behavior" );
  295.     self setup_force_behavior();
  296.     while ( 1 )
  297.     {
  298.         self animscripted( self.origin, self.angles, "zm_idle" );
  299.         wait 0,2;
  300.         self scripted_behavior( "zm_spawn", "jump_anim" );
  301. #/
  302.     }
  303. }
  304.  
  305. mechz_force_jump_out()
  306. {
  307. /#
  308.     self endon( "kill_force_behavior" );
  309.     self setup_force_behavior();
  310.     while ( 1 )
  311.     {
  312.         self animscripted( self.origin, self.angles, "zm_idle" );
  313.         wait 0,2;
  314.         self scripted_behavior( "zm_fly_out", "jump_anim" );
  315.         self ghost();
  316.         self animscripted( self.origin, self.angles, "zm_fly_hover" );
  317.         wait level.mechz_jump_delay;
  318.         self show();
  319.         self scripted_behavior( "zm_fly_in", "jump_anim" );
  320. #/
  321.     }
  322. }
  323.  
  324. mechz_force_flamethrower()
  325. {
  326. /#
  327.     self endon( "kill_force_behavior" );
  328.     self setup_force_behavior();
  329.     curr_aim_anim = 1;
  330.     curr_timer = 0;
  331.     self animscripted( self.origin, self.angles, "zm_idle" );
  332.     wait 0,2;
  333.     self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" );
  334.     while ( 1 )
  335.     {
  336.         if ( curr_timer > 3 )
  337.         {
  338.             curr_aim_anim++;
  339.             curr_timer = 0;
  340.             if ( curr_aim_anim < 10 )
  341.             {
  342.                 iprintln( "Testing aim_" + curr_aim_anim );
  343.             }
  344.         }
  345.         if ( curr_aim_anim >= 10 )
  346.         {
  347.             iprintln( "Testing flamethrower sweep" );
  348.             curr_aim_anim = 1;
  349.             self scripted_behavior( "zm_flamethrower_sweep", "flamethrower_anim" );
  350.             self.fx_field |= 64;
  351.             self setclientfield( "mechz_fx", self.fx_field );
  352.             continue;
  353.         }
  354.         else
  355.         {
  356.             length = self getanimlengthfromasd( "zm_flamethrower_aim_" + curr_aim_anim, 0 );
  357.             self clearanim( %root, 0 );
  358.             self scripted_behavior( "zm_flamethrower_aim_" + curr_aim_anim, "flamethrower_anim" );
  359.             curr_timer += length;
  360.         }
  361. #/
  362.     }
  363. }
  364.  
  365. fake_launch_claw()
  366. {
  367. /#
  368.     self.launching_claw = 1;
  369.     v_claw_origin = self gettagorigin( "tag_claw" );
  370.     v_claw_angles = vectorToAngle( self.origin - level.players[ 0 ].origin );
  371.     self.fx_field |= 256;
  372.     self setclientfield( "mechz_fx", self.fx_field );
  373.     self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
  374.     self.m_claw unlink();
  375.     self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) );
  376.     self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" );
  377.     self.m_claw.fx_ent setmodel( "tag_origin" );
  378.     self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" );
  379.     network_safe_play_fx_on_tag( "mech_claw", 1, level._effect[ "mechz_claw" ], self.m_claw.fx_ent, "tag_origin" );
  380.     self.m_claw clearanim( %root, 0,2 );
  381.     self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0,2, 1 );
  382.     offset = anglesToForward( self.angles );
  383.     offset = vectornormalize( offset );
  384.     target_pos = self.origin + ( offset * 500 ) + vectorScale( ( 0, 0, 1 ), 36 );
  385.     n_time = 0,08333334;
  386.     self.m_claw moveto( target_pos, n_time );
  387.     self.m_claw waittill( "movedone" );
  388.     self.m_claw clearanim( %root, 0,2 );
  389.     self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0,2, 1 );
  390.     wait 0,5;
  391.     self.m_claw moveto( v_claw_origin, 0,5 );
  392.     self.m_claw waittill( "movedone" );
  393.     self.m_claw.fx_ent delete();
  394.     self.fx_field &= 256;
  395.     self setclientfield( "mechz_fx", self.fx_field );
  396.     v_claw_origin = self gettagorigin( "tag_claw" );
  397.     v_claw_angles = self gettagangles( "tag_claw" );
  398.     self.m_claw.origin = v_claw_origin;
  399.     self.m_claw.angles = v_claw_angles;
  400.     self.m_claw linkto( self, "tag_claw" );
  401.     self.launching_claw = 0;
  402. #/
  403. }
  404.  
  405. mechz_force_claw_attack()
  406. {
  407. /#
  408.     self endon( "kill_force_behavior" );
  409.     self setup_force_behavior();
  410.     while ( 1 )
  411.     {
  412.         self animscripted( self.origin, self.angles, "zm_idle" );
  413.         wait 0,2;
  414.         self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" );
  415.         self thread fake_launch_claw();
  416.         while ( isDefined( self.launching_claw ) && self.launching_claw )
  417.         {
  418.             self clearanim( %root, 0 );
  419.             wait 0,05;
  420.             self scripted_behavior( "zm_grapple_aim_5", "grapple_anim" );
  421.         }
  422.         self scripted_behavior( "zm_flamethrower_claw_victim", "flamethrower_anim" );
  423. #/
  424.     }
  425. }
  426.  
  427. mechz_force_damage_armor()
  428. {
  429. /#
  430.     self endon( "kill_force_behavior" );
  431.     self setup_force_behavior();
  432.     if ( !isDefined( self.next_armor_piece ) )
  433.     {
  434.         self.next_armor_piece = 0;
  435.     }
  436.     self thread scripted_behavior( "zm_idle", "idle_anim" );
  437.     if ( self.next_armor_piece == self.armor_state.size )
  438.     {
  439.         self.next_armor_piece = 0;
  440.         i = 0;
  441.         while ( i < self.armor_state.size )
  442.         {
  443.             self.fx_field &= 1 << self.armor_state[ i ].index;
  444.             if ( isDefined( self.armor_state[ i ].model ) )
  445.             {
  446.                 self attach( self.armor_state[ i ].model, self.armor_state[ i ].tag );
  447.             }
  448.             i++;
  449.         }
  450.     }
  451.     else self.fx_field |= 1 << self.armor_state[ self.next_armor_piece ].index;
  452.     if ( isDefined( self.armor_state[ self.next_armor_piece ].model ) )
  453.     {
  454.         self detach( self.armor_state[ self.next_armor_piece ].model, self.armor_state[ self.next_armor_piece ].tag );
  455.     }
  456.     self.next_armor_piece++;
  457.     self setclientfield( "mechz_fx", self.fx_field );
  458.     while ( 1 )
  459.     {
  460.         self scripted_behavior( "zm_idle", "idle_anim" );
  461. #/
  462.     }
  463. }
  464.  
  465. mechz_force_damage_faceplate()
  466. {
  467. /#
  468.     self endon( "kill_force_behavior" );
  469.     self setup_force_behavior();
  470.     self thread scripted_behavior( "zm_idle", "idle_anim" );
  471.     if ( isDefined( self.has_helmet ) && self.has_helmet )
  472.     {
  473.         self.has_helmet = 0;
  474.         self detach( "c_zom_mech_faceplate", "J_Helmet" );
  475.         self.fx_field |= 1024;
  476.         self.fx_field &= 2048;
  477.     }
  478.     else
  479.     {
  480.         self.has_helmet = 1;
  481.         self.fx_field &= 1024;
  482.         self.fx_field |= 2048;
  483.         self attach( "c_zom_mech_faceplate", "J_Helmet" );
  484.     }
  485.     self setclientfield( "mechz_fx", self.fx_field );
  486.     while ( 1 )
  487.     {
  488.         self scripted_behavior( "zm_idle", "idle_anim" );
  489. #/
  490.     }
  491. }
  492.  
  493. mechz_force_melee()
  494. {
  495. /#
  496.     self endon( "kill_force_behavior" );
  497.     self setup_force_behavior();
  498.     while ( 1 )
  499.     {
  500.         self animscripted( self.origin, self.angles, "zm_idle" );
  501.         wait 0,2;
  502.         self scripted_behavior( "zm_melee_stand", "melee_anim" );
  503. #/
  504.     }
  505. }
Advertisement
Add Comment
Please, Sign In to add comment