Fixes:
- Zombies attacking downed players in coop
- Vulture-Aid drops in non-playable areas
- Wunderfizz staying visible for only the first person to use it
see black ops perks for MuleKick-PAP fix
https://www.mediafire.com/?m2j9aqqoel77vlk Jay's Black Ops Perks
4/29 notes:
1. If you have nazi_zombie_MAPNAME_patch in the mod folder you compile, delete it.
2. you can change the perk limit by adjusting
level.perk_limit = 4; in _zombiemode.gsc
3. remove from your nazi_zombie_MAPNAME.gsc
4. always use the nazi_zombie_MAPNAME_patch from the latest Add-On. if you download older Add-Ons just place the IWDs
players = get_players(); for(i=0;i<players.size;i++) { players[i] thread staminup(); players[i] thread deadshot(); players[i] thread mulekick(); }
---------------------------------------------------------------------------------------------------
download this: https://www.mediafire.com/?xbebt53nyy6cpil move map_source to your root directory and the other files to C:\Users\Jay\AppData\Local\Activision\CoDWaW\mods\YOURMOD PLACE THE MACHINES IN YOUR MAP!
note because I am not allowed to post raw assets the original sumpf machines will serve as place holders then be switched with the black ops perks when the game starts! note: this map overwrites _callbackglobal.gsc PART 1: SETTING UP QUICKREVIVE
step 1: go into
_zombiemode_perks.gsc and replace
case "specialty_quickrevive": cost = 500; break;
with
case "specialty_quickrevive": players = get_players(); if(players.size == 1) { cost = 500; self.reviveUsesLeft--; } else cost = 1500; break;
step 2: change this function to make revive turn on at the start turn_revive_on() { machine = getentarray("vending_revive", "targetname"); players = get_players(); if(players.size > 1) level waittill("revive_on"); for( i = 0; i < machine.size; i++ ) { machine[i] setmodel("zombie_vending_revive_on"); machine[i] playsound("perks_power_on"); machine[i] vibrate((0,-100,0), 0.3, 0.4, 3); machine[i] thread perk_fx( "revive_light" ); } level notify( "specialty_quickrevive_power_on" ); }
replace case "specialty_quickrevive": self SetHintString( &"ZOMBIE_PERK_QUICKREVIVE" ); break;
with
case "specialty_quickrevive": flag_wait( "all_players_connected" ); players = get_players(); if(players.size == 1) { self SetHintString( "Press & hold &&1 to buy Revive [Cost: 500]" ); self.reviveUsesLeft = 3; } else self SetHintString( &"ZOMBIE_PERK_QUICKREVIVE" ); break;
step 3: replace
if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
with
if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()) && (players[i].perk_hud.size < level.perk_limit) && self.reviveUsesLeft > 0)
step 4: go into
_zombiemode.gsc and
replace the entire
player_damage_override() function with
player_damage_override( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime ) { /* if(self hasperk("specialty_armorvest") && eAttacker != self) { iDamage = iDamage * 0.75; iprintlnbold(idamage); }*/ if( sMeansOfDeath == "MOD_FALLING" ) { sMeansOfDeath = "MOD_EXPLOSIVE"; } if( isDefined( eAttacker ) ) { if( isDefined( self.ignoreAttacker ) && self.ignoreAttacker == eAttacker ) { return; } if( isDefined( eAttacker.is_zombie ) && eAttacker.is_zombie ) { self.ignoreAttacker = eAttacker; self thread remove_ignore_attacker(); } if( isDefined( eAttacker.damage_mult ) ) { iDamage *= eAttacker.damage_mult; } eAttacker notify( "hit_player" ); } finalDamage = iDamage; if( sMeansOfDeath == "MOD_PROJECTILE" || sMeansOfDeath == "MOD_PROJECTILE_SPLASH" || sMeansOfDeath == "MOD_GRENADE" || sMeansOfDeath == "MOD_GRENADE_SPLASH" ) { if( self.health > 75 ) { finalDamage = 75; self maps\_callbackglobal::finishPlayerDamageWrapper( eInflictor, eAttacker, finalDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime ); return; } } if( iDamage < self.health ) { if ( IsDefined( eAttacker ) ) { eAttacker.sound_damage_player = self; } //iprintlnbold(iDamage); self maps\_callbackglobal::finishPlayerDamageWrapper( eInflictor, eAttacker, finalDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime ); return; } if( level.intermission ) { level waittill( "forever" ); } players = get_players(); count = 0; for( i = 0; i < players.size; i++ ) { if( players[i] == self || players[i].is_zombie || players[i] maps\_laststand::player_is_in_laststand() || players[i].sessionstate == "spectator" ) { count++; } } if( count < players.size ) { self maps\_callbackglobal::finishPlayerDamageWrapper( eInflictor, eAttacker, finalDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime ); return; } self.intermission = true; self.wasRevived = false; self thread maps\_laststand::PlayerLastStand( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime ); self maps\bam_bo_mod_bo1_perks_standalone_functions::player_fake_death(); if( count == players.size) { if(!self.wasRevived) level notify( "end_game" ); self.wasRevived = false; } else { self maps\_callbackglobal::finishPlayerDamageWrapper( eInflictor, eAttacker, finalDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime ); } }
PART 2: SETTING UP PERK LIMIT/Quick Revive Point
ADD in
zombiemode.gsc level.perk_limit = 4; level.revive_point = getEnt("revive_retreat_point","targetname");
UNDER maps\_zombiemode_blockers_new::init(); maps\_zombiemode_spawner::init(); maps\_zombiemode_powerups::init(); maps\_zombiemode_radio::init(); maps\_zombiemode_perks::init(); maps\_zombiemode_tesla::init(); maps\_zombiemode_dogs::init(); maps\_zombiemode_bowie::bowie_init(); maps\_zombiemode_cymbal_monkey::init(); maps\_zombiemode_betty::init(); maps\_zombiemode_timer::init(); maps\_zombiemode_auto_turret::init();
ADD a script_origin in your map with targetname as
revive_retreat_point PART 3: SETTING UP MULE KICK
replace in _zombiemode_weapons user thread treasure_chest_give_weapon( weapon_spawn_org.weapon_string );
with user thread maps\bam_bo_mod_bo1_perks_standalone_functions::treasure_chest_give_weapon( weapon_spawn_org.weapon_string );
PAP Mule Kick fix in _zombiemode_perks.gsc
wait_for_player_to_take( player, weapon, packa_timer ) { index = maps\_zombiemode_weapons::get_player_index(player); plr = "plr_" + index + "_"; self endon( "pap_timeout" ); while( true ) { packa_timer playloopsound( "ticktock_loop" ); self waittill( "trigger", trigger_player ); packa_timer stoploopsound(.05); if( trigger_player == player ) { if( !player maps\_laststand::player_is_in_laststand() ) { self notify( "pap_taken" ); primaries = player GetWeaponsListPrimaries(); if( isDefined( primaries ) && primaries.size >= self.MuleCount ) { player maps\bam_bo_mod_bo1_perks_standalone_functions::weapon_give( weapon+"_upgraded" ); } else { player GiveWeapon( weapon+"_upgraded" ); player GiveMaxAmmo( weapon+"_upgraded" ); } player SwitchToWeapon( weapon+"_upgraded" ); player achievement_notify( "DLC3_ZOMBIE_PAP_ONCE" ); player achievement_notify( "DLC3_ZOMBIE_TWO_UPGRADED" ); player thread play_packa_get_dialog(plr); return; } } wait( 0.05 ); } }
REPLACE ALL player weapon_give( self.zombie_weapon_upgrade );
WITH player maps\bam_bo_mod_bo1_perks_standalone_functions::weapon_give( self.zombie_weapon_upgrade );
PART 4: Giving life to the machines!
in
_zombiemode.gsc add
maps\bam_bo_mod_bo1_perks_standalone::bo1_perks_init();
under your
level.perk_limit = 4; level.revive_point = getEnt("revive_retreat_point","targetname");
PART 5: Final Touches! (if needed)
replace
set_zombie_var( "zombie_perk_juggernaut_health", 160 );
with
set_zombie_var( "zombie_perk_juggernaut_health", 250 );
download and replace your _patch.ff with this if you think the machines look ugly
https://www.mediafire.com/?3k1f1ucm23h2aw6 its just the _patch.ff were I took off normal mapping of the machines