Skip to content
  • 0 Unread 0
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse

Plutonium

  1. Home
  2. BO2 Modding Releases & Resources
  3. [RELEASE] Gersh Grenades (Updated)

[RELEASE] Gersh Grenades (Updated)

Scheduled Pinned Locked Moved BO2 Modding Releases & Resources
3 Posts 2 Posters 677 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • m7574zundefined Offline
    m7574zundefined Offline
    m7574z
    wrote on last edited by m7574z
    #1

    Here is a Gersh Grenades Function feel free to improve it as i wont be changing anything on it anymore was just a daft function i wanted to make for my menu. It currently teleports zombies within radius and kills them, also if players are within a certain distance they now get pulled and teleported to a random spawn location.

    t6zmgersh.png

    GershGrenadesToggle()
    {
        if (!isDefined(self.gershGrenadesToggle))
        {
            self.gershGrenadesToggle = true;
            self thread mzGershGrenades();
            self iprintln("Gersh Grenades: ^2Enabled");
        }
        else
        {
            self.gershGrenadesToggle = undefined;
            self notify("stop_gershgrenades");
            self iprintln("Gersh Grenades: ^1Disabled");
        }
    }
    
    mzGershGrenades()
    {
        self endon("stop_gershgrenades");
        self endon("disconnect");
        level endon("game_ended");
        
        for(;;)
        {
            self waittill("grenade_fire", grenade, weapon_name);
            if (!isDefined(grenade))
                continue;
    
            origin = undefined;
            while (isDefined(grenade))
            {
                origin = grenade.origin;
                wait 0.1;
            }
    
            if (!isDefined(origin))
                continue;
                
            self thread mzGershBlackHole(origin, self);
        }
    }
    
    mzGershBlackHole(center, attacker)
    {
        self endon("disconnect");
        level endon("game_ended");
    
        self thread mzGershFX(center);
    
        foreach(player in level.players)
            player thread mzGershPlayerPull(center);
    
        killTeleportRadius = 350;
    
        for (tick = 0; tick < 14; tick++)
        {
            foreach(zombie in getAiArray(level.zombie_team))
            {
                if (!isDefined(zombie) || !isDefined(zombie.health) || zombie.health <= 0)
                    continue;
    
                if (isDefined(zombie.mz_gersh_dead))
                    continue;
    
                if (distance(zombie getOrigin(), center) <= killTeleportRadius)
                {
                    zombie.mz_gersh_dead = 1;
    
                    zombie forceteleport(center, self.angles + vectorScale((0, 1, 0), 180));
                    wait 0.05;
    
                    if (isDefined(zombie) && isDefined(zombie.health) && zombie.health > 0)
                        zombie doDamage(zombie.health * 2, center, attacker);
    
                    if (isDefined(zombie))
                        zombie thread mzGershSafeDelete();
    
                    playfx(level._effect["zombie_guts_explosion"], center + (0, 0, 30));
                }
            }
    
            wait 0.25;
        }
    
        foreach(player in level.players)
            if (isDefined(player))
                player notify("stop_gersh_pull");
    
        playfx(loadfx("explosions/fx_default_explosion"), center);
    }
    
    mzGershSafeDelete()
    {
        self endon("disconnect");
        level endon("game_ended");
    
        wait 0.15;
    
        if (!isDefined(self))
            return;
    
        if (isDefined(self.health) && self.health > 0)
            return;
    
        self delete();
    }
    
    mzGershPlayerPull(origin)
    {
        self endon("disconnect");
        self endon("stop_gersh_pull");
        level endon("game_ended");
        
        for (tick = 0; tick < 14; tick++)
        {
            if (distance(origin, self getOrigin()) < 250)
            {
                self setOrigin(self.origin);
                self setVelocity((origin - self getOrigin()));
                
                if (distance(origin, self getOrigin()) < 60)
                {
                    self thread mzGershTeleportPlayer();
                }
            }
            wait 0.25;
        }
        wait 0.5;
        self setVelocity((0, 0, 0));
    }
    
    mzGershTeleportPlayer()
    {
        self endon("disconnect");
        
        spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
        
        if (spawn_points.size == 0)
            return;
        
        valid_groups = [];
        
        for (i = 0; i < spawn_points.size; i++)
        {
            if (spawn_points[i].locked == 0)
            {
                valid_groups[valid_groups.size] = spawn_points[i];
            }
        }
        
        if (valid_groups.size == 0)
            return;
        
        random_group = valid_groups[randomint(valid_groups.size)];
        spawn_array = getstructarray(random_group.target, "targetname");
        
        if (!isDefined(spawn_array) || spawn_array.size == 0)
            return;
        
        spawn_array = array_randomize(spawn_array);
        
        chosen_spawn = undefined;
        for (k = 0; k < spawn_array.size; k++)
        {
            if (!positionwouldtelefrag(spawn_array[k].origin))
            {
                chosen_spawn = spawn_array[k];
                break;
            }
        }
    
        if (!isDefined(chosen_spawn))
            chosen_spawn = spawn_array[0];
            
        self setOrigin(chosen_spawn.origin);
        
        if (isDefined(chosen_spawn.angles))
            self setPlayerAngles(chosen_spawn.angles);
        
        playfx(level._effect["powerup_grabbed_solo"], self.origin);
    }
    
    mzGershFX(origin)
    {
        self endon("disconnect");
    
        for (i = 0; i < 14; i++)
        {
            playfx(level._effect["grenade_samantha_steal"], origin);
            wait 0.25;
        }
    }
    

    Video clip link

    1 Reply Last reply
    1
    • Decundefined Offline
      Decundefined Offline
      Dec
      Contributor
      wrote on last edited by
      #2

      coolio

      m7574zundefined 1 Reply Last reply
      1
      • Decundefined Dec

        coolio

        m7574zundefined Offline
        m7574zundefined Offline
        m7574z
        wrote on last edited by
        #3

        Dec 🙂

        1 Reply Last reply
        0

        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

        With your input, this post could be even better 💗

        Register Login
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Unread 0
        • Recent
        • Tags
        • Popular
        • Users
        • Groups