[RELEASE] Clone Defender
BO2 Modding Releases & Resources
1
Posts
1
Posters
131
Views
1
Watching
-

mzDefenderToggle() { if(!isDefined(self.mzdefender_on)) { self.mzdefender_on = 1; self thread mzDefenderMain(); self iprintln("Clone Defender: ^2Spawned"); } else { self.mzdefender_on = undefined; self notify("mz_defender_end"); if(isDefined(self.mzdefender)) { self.mzdefender notify("mz_defender_end"); self.mzdefender delete(); self.mzdefender = undefined; } self iprintln("Clone Defender: ^1Deleted"); } } mzDefenderMain() { self endon("mz_defender_end"); self endon("disconnect"); level endon("game_ended"); if(isDefined(self.mzdefender)) { self.mzdefender notify("mz_defender_end"); self.mzdefender delete(); self.mzdefender = undefined; } pos = self.origin; self.mzdefender = maps/mp/zombies/_zm_clone::spawn_player_clone(self, pos, "raygun_mark2_upgraded_zm", self.model); self.mzdefender.mzdefender = 1; self.mzdefender.mz_owner = self; self.mzdefender thread maps/mp/zombies/_zm_clone::clone_animate("idle"); self.mzdefender thread mzDefenderBrain(self, self.angles[1]); self waittill("mz_defender_end"); } mzDefenderBrain(owner, baseYaw) { self endon("mz_defender_end"); owner endon("mz_defender_end"); self endon("disconnect"); level endon("game_ended"); minYaw = baseYaw - 90; maxYaw = baseYaw + 90; curYaw = baseYaw; dir = 1; for(;;) { target = self mzDefenderTarget(); if(isDefined(target)) { aimAt = target.origin + (0,0,30); ang = vectorToAngles(aimAt - self.origin); self rotateTo((0, ang[1], 0), 0.35); self waittill("rotatedone"); dy = ang[1] - self.angles[1]; if(dy < 0) { dy = 0 - dy; } if(dy > 180) { dy = 360 - dy; } if(dy <= 12) { for(s = 0; s < 3; s++) { if(!isDefined(target) || !isAlive(target)) { break; } aimAt = target.origin + (0,0,30); start = self getTagOrigin("tag_weapon_right"); start = start + anglesToForward((0, self.angles[1], 0)) * 12; magicBullet("raygun_mark2_upgraded_zm", start, aimAt, owner); wait 0.12; } wait 0.35; } else { wait 0.05; } } else { if(dir) { curYaw += 60; } else { curYaw -= 60; } if(curYaw >= maxYaw) { curYaw = maxYaw; dir = 0; } else if(curYaw <= minYaw) { curYaw = minYaw; dir = 1; } self rotateTo((0, curYaw, 0), 1.5, 0.5, 0.5); self waittill("rotatedone"); wait 0.05; } wait 0.05; } } mzDefenderTarget() { arr = []; start = self.origin + (0,0,55); foreach(z in getAiArray(level.zombie_team)) { if(!isDefined(z) || !isAlive(z)) { continue; } if(bulletTracePassed(start, z getTagOrigin("j_spine4"), false, self)) { arr[arr.size] = z; } } return getClosest(start, arr); }Video clip link