Advertisement
Guest User

Untitled

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