[RELEASE] Gersh Grenades (Updated)
BO2 Modding Releases & Resources
3
Posts
2
Posters
165
Views
1
Watching
-
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.

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
-
coolio
-
