Advertisement
Firex

zm_bo2 DeployableObj v.1.1

Jul 12th, 2014
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.18 KB | None | 0 0
  1. // Black Ops 2 - Zombies
  2. // DeployableObj v.1.1, by Firex
  3.  
  4. //example:
  5. // //name_of_object, model_of_object, zomb_attract_mindist, max_withstand_dmg, place_origin_offset, onplace_callback
  6. // DeployableObj_Add( "fx_defense_shield", "t6_wpn_zmb_shield_world", 2000, 7000, ( 0, 0, 26 ) );
  7. // player DeployableObj_Give( "fx_defense_shield" );
  8.  
  9. DeployableObj_Add( objname, objmodel, attractdist, maxdmg, orgoffset, ondeploycallback, ondestroycallback )
  10. {
  11.     if( !isDefined( level.deployableobjects ) ) {
  12.         level.deployableobjects = [];
  13.     }
  14.     level.deployableobjects[objname] = spawnstruct();
  15.     level.deployableobjects[objname].objname = objname;
  16.     level.deployableobjects[objname].objmodel = objmodel;
  17.     level.deployableobjects[objname].attractdist = attractdist;
  18.     level.deployableobjects[objname].earndmg = maxdmg;
  19.     level.deployableobjects[objname].offset = orgoffset;
  20.     if( isDefined( ondeploycallback ) ) {
  21.         level.deployableobjects[objname].ondeploycallback = ondeploycallback;
  22.     }
  23.     if( isDefined( ondestroycallback ) ) {
  24.         level.deployableobjects[objname].ondestroycallback = ondestroycallback;
  25.     }  
  26.     return 1;
  27. }
  28.  
  29. DeployableObj_Give( objname )
  30. {
  31.     if( isDefined( self.cObj ) ) {
  32.         return 0;
  33.     }
  34.     obj = level.deployableobjects[objname];
  35.    
  36.     self.cObj = spawn( "script_model", self.origin, 1 );
  37.     self.cObj.objName = obj.objName;
  38.     self.cObj.earnDmg = obj.earnDmg;
  39.     self.cObj.earnedDmg = 0;
  40.     self.cObj.placeOffset = obj.offset;
  41.     self.cObj.attractDist = obj.attractDist;
  42.     self.cObj.angles = self.angles;
  43.     self.cObj.owner = self;
  44.     self.cObj setOwner( self );
  45.     self.cObj setModel( obj.objModel );
  46.     self.cObj thread DeployableObj_Link( self );
  47.     self.cObj setScriptMoverFlag( 0 );
  48.     self.cObj thread DeployableObj_trackOwner();
  49.    
  50.     self disableWeapons();
  51.     self playLocalSound("weap_pickup");
  52.     self.cObj thread DeployableObj_Deploy();
  53.     return 1;
  54. }
  55.  
  56. DeployableObj_Link( to )
  57. {
  58.     self endon("object_deployed");
  59.     self endon("object_abortdeploy");
  60.    
  61.     while( isDefined( self ) && isDefined( to ) ) {
  62.         self.origin = to.origin + vectorScale( anglesToForward( to.angles ), 48 ) + self.placeOffset;
  63.         self.angles = to.angles;
  64.         wait 0.05;
  65.     }
  66. }
  67.  
  68. DeployableObj_trackOwner()
  69. {
  70.     self endon("object_deployed");
  71.     self.owner waittill_any( "death", "weapons_taken_for_last_stand", "disconnect" );
  72.    
  73.     self notify("object_abortdeploy");
  74.         wait 0.05;
  75.     if( isDefined( self.owner ) ) {
  76.         self.owner enableweapons();
  77.         self.owner.cObj = undefined;
  78.     }
  79.     self DeployableObj_Destroy();
  80. }
  81.  
  82. DeployableObj_Deploy()
  83. {
  84.     self endon("object_abortdeploy");
  85.  
  86.     wait 1;
  87.     while (1)
  88.     {
  89.         if( self.owner attackButtonPressed() ) {
  90.             eyepos = self GetEye();
  91.             newpos = playerPhysicsTrace( self.origin, self.origin - ( 0,0, 1000 ) );
  92.             if( bulletTrace( eyepos, newpos, false, self )["fraction"] == 1 && bulletTrace( eyepos, newpos + (0,0,48), false, self )["fraction"] == 1 && bulletTrace( newpos, newpos + (0,0,48), false, self )["fraction"] == 1 ) {
  93.                 self notify( "object_deployed" );
  94.                 wait 0.05;
  95.                 self.origin = newpos + self.placeoffset;
  96.                 self.angles = self.angles;
  97.                 // ---
  98.                 self thread DeployableObj_watchStuckZombies();
  99.                 if( isDefined( level.deployableobjects[self.objname].ondeploycallback ) ) {
  100.                     self thread [[ level.deployableobjects[self.objname].ondeploycallback ]]();
  101.                 }
  102.                 // ---
  103.                 self.owner enableWeapons();
  104.                 self.owner iPrintLnBold("^2Object deployed!");
  105.                 self.owner.cObj = undefined;
  106.                
  107.                 return 0;
  108.             } else {
  109.                 self.owner iPrintLnBold("^1Unable to deploy here!");
  110.                 wait 1;
  111.             }
  112.         }
  113.         wait 0.05;
  114.     }
  115. }
  116.  
  117. DeployableObj_watchStuckZombies()
  118. {
  119.     self endon( "object_destroy" );
  120.    
  121.     while( 1 )
  122.     {
  123.         ai = getaiarray( level.zombie_team );
  124.         for( i = 0; i < ai.size; i++ ) {
  125.             if( isDefined( ai[ i ] ) ) {
  126.                 vdist = abs( ai[ i ].origin[ 2 ] - self.origin[ 2 ] );
  127.                 dist2d = distance2dsquared( ai[ i ].origin, self.origin );
  128.                 if( dist2d < self.attractdist ) {
  129.                     self thread DeployableObj_doAttack( ai[ i ] );
  130.                     maps/mp/zombies/_zm_equipment::item_choke();
  131.                 }
  132.                 maps/mp/zombies/_zm_equipment::item_choke();
  133.             }
  134.         }
  135.         wait 0.1;
  136.     }  
  137. }
  138.  
  139. DeployableObj_doAttack( zomb )
  140. {
  141.     zomb endon( "death" );
  142.     self endon( "object_destroy" );
  143.     zomb endon( "start_inert" );
  144.    
  145.     if( isDefined( zomb.doing_equipment_attack ) && zomb.doing_equipment_attack ) {
  146.         return 0;
  147.     }
  148.     if ( !isDefined( zomb ) || !isAlive( zomb ) ) {
  149.         return 0;
  150.     }
  151.     if( getDvar( "zombie_equipment_attack_freq" ) == "" ) {
  152.         setdvar( "zombie_equipment_attack_freq", "15" );
  153.     }
  154.     self thread DeployableObj_stopAttack( zomb );
  155.    
  156.     zomb.item = self;
  157.     zomb.doing_equipment_attack = 1;
  158.     zomb thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", zomb.animname );
  159.  
  160.     melee_anim = "zm_window_melee";
  161.     if( !zomb.has_legs ) {
  162.         melee_anim = "zm_walk_melee_crawl";
  163.         if( zomb.a.gib_ref == "no_legs" ) {
  164.             melee_anim = "zm_stumpy_melee";
  165.         }
  166.         else if( zomb.zombie_move_speed == "run" || zomb.zombie_move_speed == "sprint" ) {
  167.             melee_anim = "zm_run_melee_crawl";
  168.         }
  169.     }
  170.     zomb orientmode( "face point", self.origin );
  171.     zomb animscripted( zomb.origin, flat_angle( vectorToAngles( self.origin - zomb.origin )[1] ), melee_anim );
  172.    
  173.     self thread DeployableObj_onDamage( 100 );
  174.     wait ( randomint( 100 ) / 100 );
  175.    
  176.     zomb orientmode( "face default", undefined );
  177.     zomb.doing_equipment_attack = 0;
  178. }
  179.  
  180. DeployableObj_stopAttack( zomb )
  181. {
  182.     zomb notify( "attack_item_stop" );
  183.     zomb endon( "attack_item_stop" );
  184.     zomb endon( "death" );
  185.     self waittill( "object_destroy" );
  186.    
  187.     zomb stopanimscripted();
  188.     zomb.doing_equipment_attack = 0;
  189.     zomb.item = undefined;
  190. }
  191.  
  192. DeployableObj_onDamage( damage )
  193. {
  194.     self.earnedDmg += damage;
  195.     self playsound( "fly_riotshield_zm_impact_flesh" );
  196.    
  197.     if( self.earnedDmg >= self.earnDmg ) {
  198.         self DeployableObj_Destroy( 1 );
  199.     }
  200. }
  201.  
  202. DeployableObj_Destroy( state )
  203. {
  204.     self notify("object_destroy");
  205.    
  206.     if( isDefined( state ) ) {
  207.         playSoundAtPosition( "wpn_riotshield_zm_destroy", self.origin );
  208.         if( isDefined( level.deployableobjects[self.objname].ondestroycallback ) ) {
  209.             self [[ level.deployableobjects[self.objname].ondestroycallback ]]();
  210.         }
  211.     }
  212.     if( isDefined( self ) ) {
  213.         self notsolid();
  214.         self setclientflag( 14 );
  215.         self delete();
  216.     }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement