UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

BO2 & BO3 Perks

broken avatar :(
Created 3 years ago
by shippuden1592
0 Members and 1 Guest are viewing this topic.
2,399 views
broken avatar :(
×
broken avatar :(
Location: mxGuanajuato
Date Registered: 5 May 2013
Last active: 10 days ago
Posts
225
Respect
Forum Rank
Mr. Elemental
Primary Group
Member
My Contact & Social Links
More
Personal Quote
If you do not take risks, you can not create a fut
×
shippuden1592's Groups
www.mediafire.com

How to install
​​​​​​
1.- In radiant create a script_origin with these values:
Code Snippet
Plaintext
targetname    zombiegoto
2.0 - Go to your _zombiemode.gsc and replace all this function award_grenades_for_survivors() with this one:
Code Snippet
Plaintext
award_grenades_for_survivors()
{
    players = get_players();

    for (i = 0; i < players.size; i++)
    {
        if (!players[i].is_zombie)
        {
            if ( players[i] hasPerk( "specialty_extraammo" ))
            {
                if ( !players[i] hasWeapon( "bo3_zm_widows_grenade" ) )
                {
                    players[i] giveWeapon( "bo3_zm_widows_grenade" );
                }
               
                // Extra precautions
                if ( players[i] HasWeapon( "frag_grenade_zm" ) )
                {
                    players[i] TakeWeapon( "frag_grenade_zm" );
                }
               
                clip_ammo = players[i] GetWeaponAmmoClip( "bo3_zm_widows_grenade" );        
   
                if ( !isDefined( clip_ammo ) )
                {
                    clip_ammo = 0;
                }

                clip_ammo += 2;
                if ( clip_ammo > 4 )
                {
                    clip_ammo = 4;
                }
       
                players SetWeaponAmmoClip( "bo3_zm_widows_grenade", clip_ammo );

                self set_player_lethal_grenade( "bo3_zm_widows_grenade" );
            }
            else
            {
                if( !players[i] HasWeapon( "frag_grenade_zm" ) )
                {
                    players[i] GiveWeapon( "frag_grenade_zm" );    
                    players[i] SetWeaponAmmoClip( "frag_grenade_zm", 0 );
                }
               
                // Extra precautions
                if ( players[i] HasWeapon( "bo3_zm_widows_grenade" ) )
                {
                    players[i] TakeWeapon( "bo3_zm_widows_grenade" );
                }

                if ( players[i] GetFractionMaxAmmo( "frag_grenade_zm" ) < .25 )
                {
                    players[i] SetWeaponAmmoClip( "frag_grenade_zm", 2 );
                }    
                else if (players[i] GetFractionMaxAmmo( "frag_grenade_zm" ) < .5 )
                {
                    players[i] SetWeaponAmmoClip( "frag_grenade_zm", 3 );
                }
                else
                {
                    players[i] SetWeaponAmmoClip( "frag_grenade_zm", 4 );
                }

                self set_player_lethal_grenade( "frag_grenade_zm" );
            }            
        }
    }
}
2.1 - In the same file go to round_start() and comment the following:
Code Snippet
Plaintext
//players[i] giveweapon( players[i] get_player_lethal_grenade() );   
        //players[i] setweaponammoclip( players[i] get_player_lethal_grenade(), 0);
It would look like this:
Code Snippet
Plaintext
// so players get init'ed with grenades
        players = get_players();
        for (i = 0; i < players.size; i++)
        {
            //players[i] giveweapon( players[i] get_player_lethal_grenade() );  
            //players[i] setweaponammoclip( players[i] get_player_lethal_grenade(), 0);
            players[i] SetClientDvars( "ammoCounterHide", "0", "miniscoreboardhide", "0" );
            //players[i] thread maps\_zombiemode_ability::give_round1_abilities();
        }
3.0 - Go to your _zombiemode_spawner.gsc file and find this function: zombie_gib_on_damage()
Above this line:
Code Snippet
Plaintext
if( !self zombie_should_gib( amount, attacker, type ) )
        {
            continue;
        }
add this:
Code Snippet
Plaintext
self thread maps\_zombiemode_perks_functions::perks_zombie_hit_effect(amount, attacker, point, type);
and below this line:
Code Snippet
Plaintext
if( !self zombie_should_gib( amount, attacker, type ) )
        {
            continue;
        }
add this:
Code Snippet
Plaintext
// Double tap 2.0
        if( isDefined(attacker) && isplayer(attacker) && isAlive(attacker) )
            {
            if(attacker HasPerk("specialty_rof") && ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) )
                  {
                //iprintln( "Si entra Double Tap" );
                self harrybo21_perks_doubletap_damage( amount, self.origin, attacker, self.damageLocation );
            }            
            if ( ( self.damageLocation == "head" || self.damageLocation == "helmet" ) && attacker hasPerk( "specialty_deadshot" )  )
            {
                //iprintln( "Si entra Death Shot" );
                self harrybo21_perks_deadshot_damage( amount, attacker, type, self.damageLocation );
            }
        }
        // Double tap 2.0
3.1 - Find the find_flesh() function and replace with this function:
Code Snippet
Plaintext
// the seeker logic for zombies
find_flesh()
{
    self endon( "death" );
    level endon( "intermission" );
    self endon( "stop_find_flesh" );

    if( level.intermission )
    {
        return;
    }
   
    self.helitarget = true;
    self.ignoreme = false; // don't let attack dogs give chase until the zombie is in the playable area
    self.noDodgeMove = true; // WW (0107/2011) - script_forcegoal KVP overwites this variable which allows zombies to push the player in laststand

    //PI_CHANGE - 7/2/2009 JV Changing this to an array for the meantime until we get a more substantial fix
    //for ignoring multiple players - Reenabling change 274916 (from DLC3)
    self.ignore_player = ;

    self zombie_history( "find flesh -> start" );

    self.goalradius = 32;
    while( 1 )
    {
        zombie_poi = undefined;
        // try to split the zombies up when the bunch up
        // see if a bunch zombies are already near my current target; if there's a bunch
        // and I'm still far enough away, ignore my current target and go after another one
        near_zombies = getaiarray("axis");
        same_enemy_count = 0;
        for (i = 0; i < near_zombies.size; i++)
        {
            if ( isdefined( near_zombies[i] ) && isalive( near_zombies[i] ) )
            {
                if ( isdefined( near_zombies[i].favoriteenemy ) && isdefined( self.favoriteenemy )
                &&    near_zombies[i].favoriteenemy == self.favoriteenemy )
                {
                    if ( distancesquared( near_zombies[i].origin, self.favoriteenemy.origin ) < 225 * 225
                    &&     distancesquared( near_zombies[i].origin, self.origin ) > 525 * 525)
                    {
                        same_enemy_count++;
                    }
                }
            }
        }
       
        if (same_enemy_count > 12)
        {
            self.ignore_player[self.ignore_player.size] = self.favoriteenemy;
        }

        //PI_CHANGE_BEGIN - 6/18/09 JV It was requested that we use the poi functionality to set the "wait" point while all players  
        //are in the process of teleportation. It should not intefere with the monkey.  The way it should work is, if all players are in teleportation,
        //zombies should go and wait at the stage, but if there is a valid player not in teleportation, they should go to him
        if (isDefined(level.zombieTheaterTeleporterSeekLogicFunc) )
        {
                   self [[ level.zombieTheaterTeleporterSeekLogicFunc ]]();
               }
               //PI_CHANGE_END
           
            if( IsDefined( level._poi_override ) )
            {
                zombie_poi = self [[ level._poi_override ]]();
            }
   
            if( !IsDefined( zombie_poi ) )
            {
                zombie_poi = self get_zombie_point_of_interest( self.origin );    
            }
   
        players = get_players();
                   
        // If playing single player, never ignore the player
        if( players.size == 1 )
        {
            self.ignore_player = ;
        }
        //PI_CHANGE_BEGIN - 7/2/2009 JV Reenabling change 274916 (from DLC3)
        else
        {
            for(i = 0; i < self.ignore_player.size; i++)
            {
                if( IsDefined( self.ignore_player[i] ) && IsDefined( self.ignore_player[i].ignore_counter ) && self.ignore_player[i].ignore_counter > 3 )
                {
                    self.ignore_player[i].ignore_counter = 0;
                    self.ignore_player = array_remove( self.ignore_player, self.ignore_player[i] );
                }
            }
        }
        //PI_CHANGE_END

        player = maps\_zombiemode_perks_functions::get_closest_valid_player_plus_perks( self.origin, self.ignore_player );

        if( !isDefined( player ) )
        {
            if ( isDefined( level.zombiegoto ) && !isDefined( zombie_poi ) )
                    {
                        self SetGoalPos( level.zombiegoto.origin );
                        wait randomfloatrange( 1, 2 );
                        continue;
                    }
                    else if ( !isDefined( zombie_poi ) )
                    {
                        self zombie_history( "find flesh -> can't find player, continue" );
                        if( IsDefined( self.ignore_player ) )
                        {
                                self.ignore_player = ;
                        }

                        wait( 1 );
                        continue;
                    }
        }
       
        //PI_CHANGE - 7/2/2009 JV Reenabling change 274916 (from DLC3)
        //self.ignore_player = undefined;
        if ( !isDefined( level.check_for_alternate_poi ) || ![[level.check_for_alternate_poi]]() )
        {
            self.enemyoverride = zombie_poi;
            self.favoriteenemy = player;
        }
       
        self thread zombie_pathing();
       
        //PI_CHANGE_BEGIN - 7/2/2009 JV Reenabling change 274916 (from DLC3)
        if( players.size > 1 )
        {
            for(i = 0; i < self.ignore_player.size; i++)
            {
                if( IsDefined( self.ignore_player[i] ) )
                {
                    if( !IsDefined( self.ignore_player[i].ignore_counter ) )
                        self.ignore_player[i].ignore_counter = 0;
                    else
                        self.ignore_player[i].ignore_counter += 1;
                }
            }
        }
        //PI_CHANGE_END

        self thread attractors_generated_listener();
        self.zombie_path_timer = GetTime() + ( RandomFloatRange( 1, 3 ) * 1000 );// + path_timer_extension;
        while( GetTime() < self.zombie_path_timer )
        {
            wait( 0.1 );
        }
        self notify( "path_timer_done" );

        self zombie_history( "find flesh -> bottom of loop" );

        debug_print( "Zombie is re-acquiring enemy, ending breadcrumb search" );
        self notify( "zombie_acquire_enemy" );
    }
}
3.2 - Go to the window_notetracks() function and replace with this:
Code Snippet
Plaintext
window_notetracks(msg)
{
    while(1)
    {
        self waittill( msg, notetrack );

        if( notetrack == "end" )
        {
            //self waittill("end");
            self teleport(self.old_origin);

            return;
        }
        if( notetrack == "fire" )
        {
            if(self.ignoreall)
            {
                self.ignoreall = false;
            }

            // just hit a player
            if ( isDefined( self.first_node ) )
            {
                _MELEE_DIST_SQ = 90*90;
                _TRIGGER_DIST_SQ = 51*51;

                for ( i = 0; i < self.player_targets.size; i++ )
                {
                    // !!=====!! Widow's Wine
                    if ( self.player_targets[i] hasPerk("specialty_extraammo") )
                    {
                        self.player_targets[i] notify("widows_wine_melee", self);
                        wait_network_frame();
                    }

                               playerDistSq = Distance2DSquared( self.player_targets[i].origin, self.origin );
                              heightDiff = abs( self.player_targets[i].origin[2] - self.origin[2] ); // be sure we're on the same floor
                               if ( playerDistSq < _MELEE_DIST_SQ && (heightDiff * heightDiff) < _MELEE_DIST_SQ )
                               {
                                  triggerDistSq = Distance2DSquared( self.player_targets[i].origin, self.first_node.trigger_location.origin );
                                  heightDiff = abs( self.player_targets[i].origin[2] - self.first_node.trigger_location.origin[2] ); // be sure we're on the same floor
                                  if ( triggerDistSq < _TRIGGER_DIST_SQ && (heightDiff * heightDiff) < _TRIGGER_DIST_SQ )
                                  {
                                         self.player_targets[i] DoDamage( self.meleeDamage, self.origin, self, 0, "MOD_MELEE" );
                                         break;
                                  }
                               }
                        }
                 }
                 else
                 {
                        self melee();
                 }
             }
       }
}
3.3 At the end of the file add this:
Code Snippet
Plaintext
// Double tap 2.0
harrybo21_perks_doubletap_damage( amount, origin, attacker, location, direction_vec, point, type )
{
    self endon( "death" );
    self.damageLocation = location;
    wait_network_frame();
    setPlayerIgnoreRadiusDamage( true );
    self.attacker radiusDamage( self.origin, 1, amount, amount, self.attacker, self.damagemod );
    setPlayerIgnoreRadiusDamage( false );
    // self doDamage( amount, origin, attacker );
    self.damageLocation = location;
    wait_network_frame();
}

harrybo21_perks_deadshot_damage( amount, origin, attacker, location )
{
    self endon( "death" );
    self.deadshot_hit = true;
    new_damage = amount / 4;
    if ( attacker hasPerk( "specialty_rof" ) )
        new_damage = new_damage * 2;

    if ( new_damage > self.health )
    {
        score = 40;
        if ( isDefined( level.zombie_vars["zombie_powerup_point_doubler_on"] ) && level.zombie_vars["zombie_powerup_point_doubler_on"] )
            score = score * 2;

        attacker maps\_zombiemode_score::add_to_player_score( score );
    }
    self.damageLocation = location;
    wait_network_frame();
    self.attacker radiusDamage( self.origin, 1, amount, amount, self.attacker, self.damagemod );
    // self doDamage( new_damage, origin, attacker );
    wait_network_frame();
    self.deadshot_hit = undefined;
}
// Double tap 2.0
4.0 Go to animscripts/zombie_melee.gsc and look for this line:
Code Snippet
Plaintext
self waittill("meleeanim", note);
below find this line
Code Snippet
Plaintext
if ( !IsDefined( self.enemy ) )
            {
               break;
            }
below that line add this:
Code Snippet
Plaintext
// !!=====!! Widow's Wine
            if ( self.enemy hasPerk("specialty_extraammo") )
            {
                self.enemy notify("widows_wine_melee", self);
                wait_network_frame();
            }
5.0 In your zombie_mapname below this line:
Code Snippet
Plaintext
maps\_zombiemode::main();
add this:
Code Snippet
Plaintext
thread fix_Health();
and at the end of the file add this:
Code Snippet
Plaintext
fix_Health()
{
    flag_wait("all_players_connected");
     players = get_players();
     for(i=0;i<players.size;i++)
     {
        players[i] thread return_fix();
     }
}

return_fix()
{
    while(1)
    {
        self waittill_any_return( "player_revived", "spawned_player");
        self SetMaxHealth( 150 );

        //iprintln("150 de vida");
    }
}
6.0 The following files added to your map:
Code Snippet
Plaintext
_zombiemode_perks
_zombiemode_perks_functions
_zombiemode_perks_items
7.0 In your mod.csv add this:
Code Snippet
Plaintext
//Perks
sound,map_sounds
material,specialty_cherry_zombies
material,specialty_vulture_zombies
material,specialty_vulture_zombies_glow
material,specialty_widowswine_zombies
material,vending_widows_grenade_indicator
fx,cherry\cherry_1
fx,cherry\cherry_2
fx,cherry\cherry_3
fx,cherry\cherry_4
fx,maps\zombie\fx_zombie_tesla_bolt_secondary
fx,maps\zombie\fx_zombie_tesla_shock
fx,maps\zombie\fx_zombie_tesla_shock_secondary
fx,maps\zombie\fx_zombie_tesla_shock_eyes
fx,vulture_powerup
fx,vulture_smell
fx,vulture\fx_vulture_box
fx,vulture\fx_vulture_pap
fx,vulture\fx_vulture_rifle
fx,vulture\fx_vulture_revive
fx,vulture\fx_vulture_speed
fx,vulture\fx_vulture_jugg
fx,vulture\fx_vulture_double
fx,vulture\fx_vulture_deadshot
fx,vulture\fx_vulture_stamin
fx,vulture\fx_vulture_mule
fx,vulture\fx_vulture_phd
fx,vulture\fx_vulture_cherry
fx,vulture\fx_vulture_vulture
fx,vulture\fx_vulture_widow
fx,widowswine\fx_widows_wine_explode
fx,widowswine\fx_widows_wine_zombie
weapon,sp/zombie_perk_bottle_cherry
weapon,sp/zombie_perk_bottle_vulture
weapon,sp/zombie_perk_bottle_widowswine
weapon,sp/bo3_zm_widows_grenade
xmodel,bo2_p6_zm_vending_electric_cherry_on
xmodel,bo2_zombie_vending_vultureaid_on
xmodel,bo2_p6_zm_perk_vulture_ammo
xmodel,bo2_p6_zm_perk_vulture_points
xmodel,bo3_p7_zm_vending_widows_wine_on
xmodel,bo3_t7_ww_grenade_proj
xmodel,bo3_t7_ww_powerup
Credits:
 
- Gympie6
- Shippuden1592
- Salamanca21
- Cpt_johnson1
- Bamskater
- Harry Bo21
- Fusorf
- Alaurenc9
- ConvictioNDR
- HitmanVere
- Lilfria
- Redspace200
- StevieWonder87
- Rollonmath
- UGX, CCM, Treyarch and Activision
Last Edit: May 31, 2022, 03:35:18 pm by shippuden1592
:rainbow:2:D1:awesome:1
broken avatar :(
×
broken avatar :(
Location: sa
Date Registered: 15 May 2018
Last active: 5 months ago
Posts
31
Respect
Forum Rank
Legless Crawler
Primary Group
Member
×
Clippy95's Groups
Clippy95's Contact & Social Links
Why not just use perk_weapRateEnhanced dvar for Double Tap 2.0?

 
Loading ...