Skip to content
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Donate
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 389 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
        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
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Donate