Modme Forums
Menu:

Boss Fight - Add music and (if possible) infinite zombies

Game Modding | Call of Duty: Black Ops 3 | Scripting


Pepergogo:

Hi
Is it possible to add a song and infinite zombies spawn to a Boss fight?

I'm using abnormal Brutus boss fight script, but I was looking how to add a song that I have and the zombie spawning during the time of the boss fight?


//Brutus Boss Fight
function brutus_doo_dah()
{
    level.brutuses = 20; //amount of brutuses to spawn
    level.brutus_in_between_spawn_time = 30; //time between spawns for Brutus. If you're only spawning one Brutus, set this to 0.
    level.stop_zombies_from_spawning = false; //set "true" to stop zombies from spawning during Brutus fight.
    level.kill_all_zombies_before_fight = true; //set "true" to kill all zombies before Brutus fight.

    level.brutus_reward = "door"; //what happens when you kill all the Brutuses. Right now, options are: ("door","powerup","gun")
    level.brutus_reward_2 = false; //add another reward if you want. just say "false" or delete the line if you don't want an extra reward.
    level.brutus_reward_3 = false; //add yet another reward if you want. Note that you cannot do more than one of the same reward.
    level.brutus_powerup_type = "nuke"; //if using a powerup as one of your rewards, this is what type. can be ("full_ammo","nuke","insta_kill","free_perk","fire_sale","double_points","carpenter","minigun",and "random")
    level.brutus_reward_weapons = array( "ar_damage", "lmg_cqb", "shotgun_pump", "smg_versatile" ); //weapons it can give you in the "gun" reward. put as many or as little as you like.
    level.brutus_gun_expire = true; //whether or not the gun will go away in time.
    level.brutus_delete_door_after_move = true; //set "true" to delete the door after its done moving. Would recommend if it won't be seen.
    level.brutus_gun_hintstring = "Press ^3[{+activate}]^7 to take weapon"; //if gun reward is activated, hintstring for picking up gun.
    level.brutus_one_gun_per_player = true; //for gun powerup, set "true" if you want a gun to spawn for each player, "false" for just one gun no matter what.
    level.brutus_different_guns_per_player = false; //for gun powerup, set "true" if you want each gun to be randomly different, false if you want them to be the same random gun. if one_gun_per_player = "false" this doesn't matter.
    
    
    trig = GetEnt("brutus_trig","targetname");
    trig waittill("trigger",player);
    if(level.stop_zombies_from_spawning == true)
        level flag::clear( "spawn_zombies" );
    if(level.kill_all_zombies_before_fight == true)
    {
        zombies = zombie_utility::get_round_enemy_array();
        if ( isdefined( zombies ) )
        {
            array::run_all( zombies, &Kill );
        }
    }
    
    
    thread spawn_my_brutus();   
    
    
    
    level waittill("all_brutuses_down");
    //IPrintLnBold("recieved");
    if(level.stop_zombies_from_spawning == true)
        level flag::set( "spawn_zombies" );
    brutus_reward();
}
function spawn_my_brutus()
{
    brutus_spawners =  struct::get_array("brutus_arena_spawn","targetname");
    for(i=0;i<level.brutuses;i++)
    {
        rand = RandomIntRange( 0, brutus_spawners.size );
        brutus_spawners[rand] thread brutus::arena_spawn_brutus();
        wait(level.brutus_in_between_spawn_time);
    }
}
function brutus_reward()
{
    //IPrintLnBold("brutus_reward");
    if(level.brutus_reward == "door" || level.brutus_reward_2 == "door" || level.brutus_reward_3 == "door")
    {
        //IPrintLnBold("door reward");
        time = 2; //2 is amount of time in seconds door takes to move.
        door_parts = GetEntArray("brutus_door","targetname");
        for(i=0;i<door_parts.size;i++)
        {
            target = Struct::Get(door_parts[i].target,"targetname");
            if(isdefined(target))
                door_parts[i] MoveTo(target.origin, time);
            if(isdefined(door_parts[i].script_vector))
                door_parts[i] MoveTo(door_parts[i].origin + (door_parts[i].script_vector), time);
        }
        wait(time);
        
        if(level.brutus_delete_door_after_move == true)
        {
            for(i=0;i<door_parts.size;i++)
            {
                
                door_parts[i] Delete();
            }
        }
    }
    if(level.brutus_reward == "powerup" || level.brutus_reward_2 == "powerup" || level.brutus_reward_3 == "powerup")
    {
        powerup_struct = GetEnt("brutus_powerup_struct","targetname");
        if(level.brutus_powerup_type != "random")
            thread zm_powerups::specific_powerup_drop( level.brutus_powerup_type, powerup_struct.origin);
        if(level.brutus_powerup_type == "random")
        {
            rand = RandomIntRange( 0, 7 ); //("full_ammo","nuke","insta_kill","free_perk","fire_sale","double_points","carpenter","minigun")
            if(rand == 0)
                thread zm_powerups::specific_powerup_drop( "full_ammo", powerup_struct.origin);
            if(rand == 1)
                thread zm_powerups::specific_powerup_drop( "nuke", powerup_struct.origin);
            if(rand == 2)
                thread zm_powerups::specific_powerup_drop( "insta_kill", powerup_struct.origin);
            if(rand == 3)
                thread zm_powerups::specific_powerup_drop( "free_perk", powerup_struct.origin);
            if(rand == 4)
                thread zm_powerups::specific_powerup_drop( "fire_sale", powerup_struct.origin);
            if(rand == 5)
                thread zm_powerups::specific_powerup_drop( "double_points", powerup_struct.origin);
            if(rand == 6)
                thread zm_powerups::specific_powerup_drop( "carpenter", powerup_struct.origin);
            if(rand == 7)
                thread zm_powerups::specific_powerup_drop( "minigun", powerup_struct.origin);
        }
    }
    if(level.brutus_reward == "gun" || level.brutus_reward_2 == "gun" || level.brutus_reward_3 == "gun")
    {
        //IPrintLnBold("gun reward");
        if(level.brutus_one_gun_per_player == false)
            gun_struct = struct::get("brutus_gun_struct","targetname");
            thread brutus_RewardGun(gun_struct.origin+(0,0,40), array::randomize(level.brutus_reward_weapons)[0]);
        if(level.brutus_one_gun_per_player == true && level.brutus_different_guns_per_player == true)
        {
            gun_structs = struct::get_array("brutus_gun_struct","targetname");
            players = GetPlayers();
            for(i=0;i<players.size;i++)
            {
                thread brutus_RewardGun(gun_structs[i].origin+(0,0,40), array::randomize(level.brutus_reward_weapons)[0]);
            }
        }
        if(level.brutus_one_gun_per_player == true && level.brutus_different_guns_per_player == false)
        {
            rand = RandomIntRange( 0, level.brutus_reward_weapons.size );
            gun_structs = struct::get_array("brutus_gun_struct","targetname");
            players = GetPlayers();
            for(i=0;i<players.size;i++)
            {
                thread brutus_RewardGun(gun_structs[i].origin+(0,0,40), level.brutus_reward_weapons[rand]);
            }
        }
    }
}
function brutus_RewardGun(pos, weapon)
{
    gun = spawn("script_model", pos);
    playsoundatposition("zmb_spawn_powerup", pos);
    
    gun SetModel(GetWeaponWorldModel(GetWeapon(weapon)));
    PlayFX(level._effect["powerup_grabbed_solo"], gun.origin);
    trig = spawn("trigger_radius", gun.origin, 0, 20, 50);
    gun thread brutus_SpinMe();
    gun thread brutus_GiveMe(weapon, trig);
    if(level.brutus_gun_expire == true)
        gun thread brutus_LifeTime(trig);
}
function brutus_LifeTime(trig)
{
    self endon("death");
    wait(120);//wait 2 minutes then delete
    if(isdefined(self))
    {
        self notify("rewardgun_delete");
    }
    if(isdefined(trig))
    {
        trig delete();
    }
    if(isdefined(self))
    {
        self delete();
    }
}
function brutus_GiveMe(weapon, trig)
{
    self endon("rewardgun_delete");
    while(1)
    {
        trig waittill("trigger", player);
        player thread brutus_SetGunHint(level.brutus_gun_hintstring, trig);
        if(player HasWeapon(getweapon("minigun")))
        {
            continue;
        }
        if(!(player UseButtonPressed()))
        {
            continue;
        }
        if(player laststand::player_is_in_laststand())
        {
            continue;
        }
        trig delete();
        self delete();
        player zm_weapons::weapon_give(getweapon(weapon));
        player SwitchToWeapon(getweapon(weapon));
        break;
        wait(.1);
    }
}

function brutus_SpinMe()
{
    self endon("rewardgun_delete");
    self endon("death");
    while(isdefined(self))
    {
        if(isdefined(self))
        {
            self rotateyaw(360,2);
        }
        wait(1.9);
    }
}
function brutus_SetGunHint(text, trig)
{
    if(isdefined(self.brutus_gun_hud))
    {
        return;
    }
    self.brutus_gun_hud = NewClientHudElem( self );
    self.brutus_gun_hud.horzAlign = "center";
    self.brutus_gun_hud.vertAlign = "middle";
    self.brutus_gun_hud.alignX = "center";
    self.brutus_gun_hud.alignY = "middle";
    self.brutus_gun_hud.foreground = 1;
    self.brutus_gun_hud.fontscale = 1;
    self.brutus_gun_hud.alpha = 1;
    self.brutus_gun_hud.color = ( 0.44, .74, .94 );
    self.brutus_gun_hud SetText(text);
    while(isdefined(trig) && self IsTouching(trig))
    {
        wait(.05);
    }
    self.brutus_gun_hud SetText("");
    self.brutus_gun_hud Destroy();
    self.brutus_gun_hud = undefined;
}