<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[RELEASE] Clone Defender]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/1770078708446-t6zmclonedefender-resized.png" alt="t6zmclonedefender.png" class=" img-fluid img-markdown" /></p>
<pre><code>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 &lt; 0)
            {
                dy = 0 - dy;
            }
            if(dy &gt; 180)
            {
                dy = 360 - dy;
            }
            if(dy &lt;= 12)
            {
                for(s = 0; s &lt; 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 &gt;= maxYaw)
            {
                curYaw = maxYaw;
                dir = 0;
            }
            else if(curYaw &lt;= 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);
}

</code></pre>
<p dir="auto">Video clip <a href="https://youtu.be/48KE3B7E3ug" target="_blank" rel="noopener noreferrer nofollow ugc">link</a></p>
]]></description><link>https://forum.plutonium.pw/topic/43960/release-clone-defender</link><generator>RSS for Node</generator><lastBuildDate>Sun, 15 Mar 2026 08:40:11 GMT</lastBuildDate><atom:link href="https://forum.plutonium.pw/topic/43960.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Feb 2026 00:37:05 GMT</pubDate><ttl>60</ttl></channel></rss>