Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Black Ops 2 - Zombies
- // DeployableObj v.1 API, by Firex
- //example:
- // //name_of_object, model_of_object, zomb_attract_mindist, max_withstand_dmg, place_origin_offset, onplace_callback
- // DeployableObj_Add( "fx_defense_shield", "t6_wpn_zmb_shield_world", 2000, 7000, ( 0, 0, 26 ) );
- // player DeployableObj_Give( "fx_defense_shield" );
- DeployableObj_Add( objname, objmodel, attractdist, maxdmg, orgoffset, ondeploycallback )
- {
- if( !isDefined( level.deployableobjects ) ) {
- level.deployableobjects = [];
- }
- level.deployableobjects[objname] = spawnstruct();
- level.deployableobjects[objname].objname = objname;
- level.deployableobjects[objname].objmodel = objmodel;
- level.deployableobjects[objname].attractdist = attractdist;
- level.deployableobjects[objname].earndmg = maxdmg;
- level.deployableobjects[objname].offset = orgoffset;
- if( isDefined( ondeploycallback ) ) {
- level.deployableobjects[objname].ondeploycallback = ondeploycallback;
- }
- return 1;
- }
- DeployableObj_Give( objname )
- {
- if( isDefined( self.cObj ) ) {
- return 0;
- }
- obj = level.deployableobjects[objname];
- self.cObj = spawn( "script_model", self.origin, 1 );
- self.cObj.objName = obj.objName;
- self.cObj.earnDmg = obj.earnDmg;
- self.cObj.earnedDmg = 0;
- self.cObj.placeOffset = obj.offset;
- self.cObj.attractDist = obj.attractDist;
- self.cObj.angles = self.angles;
- self.cObj.owner = self;
- self.cObj setOwner( self );
- self.cObj setModel( obj.objModel );
- self.cObj thread DeployableObj_Link( self );
- self.cObj setScriptMoverFlag( 0 );
- self.cObj thread DeployableObj_trackOwner();
- self disableWeapons();
- self playLocalSound("weap_pickup");
- self.cObj thread DeployableObj_Deploy();
- return 1;
- }
- DeployableObj_Link( to )
- {
- self endon("object_deployed");
- self endon("object_abortdeploy");
- while( isDefined( self ) && isDefined( to ) ) {
- self.origin = to.origin + vectorScale( anglesToForward( to.angles ), 48 ) + self.placeOffset;
- self.angles = to.angles;
- wait 0.05;
- }
- }
- DeployableObj_trackOwner()
- {
- self endon("object_deployed");
- self.owner waittill_any( "death", "weapons_taken_for_last_stand", "disconnect" );
- self notify("object_abortdeploy");
- wait 0.05;
- if( isDefined( self.owner ) ) {
- self.owner enableweapons();
- self.owner.cObj = undefined;
- }
- self DeployableObj_Destroy();
- }
- DeployableObj_Deploy()
- {
- self endon("object_abortdeploy");
- wait 1;
- while (1)
- {
- if( self.owner attackButtonPressed() ) {
- eyepos = self GetEye();
- newpos = playerPhysicsTrace( self.origin, self.origin - ( 0,0, 1000 ) );
- 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 ) {
- self notify( "object_deployed" );
- wait 0.05;
- self.origin = newpos + self.placeoffset;
- self.angles = self.angles;
- // ---
- self thread DeployableObj_watchStuckZombies();
- if( isDefined( level.deployableobjects[self.objname].ondeploycallback ) ) {
- self thread [[ level.deployableobjects[self.objname].ondeploycallback ]]();
- }
- // ---
- self.owner enableWeapons();
- self.owner iPrintLnBold("^2Object deployed!");
- self.owner.cObj = undefined;
- return 0;
- } else {
- self.owner iPrintLnBold("^1Unable to deploy here!");
- wait 1;
- }
- }
- wait 0.05;
- }
- }
- DeployableObj_watchStuckZombies()
- {
- self endon( "object_destroy" );
- while( 1 )
- {
- ai = getaiarray( level.zombie_team );
- for( i = 0; i < ai.size; i++ ) {
- if( isDefined( ai[ i ] ) ) {
- vdist = abs( ai[ i ].origin[ 2 ] - self.origin[ 2 ] );
- dist2d = distance2dsquared( ai[ i ].origin, self.origin );
- if( dist2d < self.attractdist ) {
- self thread DeployableObj_doAttack( ai[ i ] );
- maps/mp/zombies/_zm_equipment::item_choke();
- }
- maps/mp/zombies/_zm_equipment::item_choke();
- }
- }
- wait 0.1;
- }
- }
- DeployableObj_doAttack( zomb )
- {
- zomb endon( "death" );
- self endon( "object_destroy" );
- zomb endon( "start_inert" );
- if( isDefined( zomb.doing_equipment_attack ) && zomb.doing_equipment_attack ) {
- return 0;
- }
- if ( !isDefined( zomb ) || !isAlive( zomb ) ) {
- return 0;
- }
- if( getDvar( "zombie_equipment_attack_freq" ) == "" ) {
- setdvar( "zombie_equipment_attack_freq", "15" );
- }
- self thread DeployableObj_stopAttack( zomb );
- zomb.item = self;
- zomb.doing_equipment_attack = 1;
- zomb thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", zomb.animname );
- melee_anim = "zm_window_melee";
- if( !zomb.has_legs ) {
- melee_anim = "zm_walk_melee_crawl";
- if( zomb.a.gib_ref == "no_legs" ) {
- melee_anim = "zm_stumpy_melee";
- }
- else if( zomb.zombie_move_speed == "run" || zomb.zombie_move_speed == "sprint" ) {
- melee_anim = "zm_run_melee_crawl";
- }
- }
- zomb orientmode( "face point", self.origin );
- zomb animscripted( zomb.origin, flat_angle( vectorToAngles( self.origin - zomb.origin )[1] ), melee_anim );
- self thread DeployableObj_onDamage( 100 );
- wait ( randomint( 100 ) / 100 );
- zomb orientmode( "face default", undefined );
- zomb.doing_equipment_attack = 0;
- }
- DeployableObj_stopAttack( zomb )
- {
- zomb notify( "attack_item_stop" );
- zomb endon( "attack_item_stop" );
- zomb endon( "death" );
- self waittill( "object_destroy" );
- zomb stopanimscripted();
- zomb.doing_equipment_attack = 0;
- zomb.item = undefined;
- }
- DeployableObj_onDamage( damage )
- {
- self.earnedDmg += damage;
- self playsound( "fly_riotshield_zm_impact_flesh" );
- if( self.earnedDmg >= self.earnDmg ) {
- self DeployableObj_Destroy( 1 );
- }
- }
- DeployableObj_Destroy( state )
- {
- self notify("object_destroy");
- if( isDefined( state ) ) {
- playSoundAtPosition( "wpn_riotshield_zm_destroy", self.origin );
- }
- if( isDefined( self ) ) {
- self notsolid();
- self setclientflag( 14 );
- self delete();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement