PDA

View Full Version : [SD] Enable multikill



IzNoGoD
4th December 2014, 21:14
Heres the result: http://social.xfire.com/video/62f82e

Changes to make to your sd file:
in callback_startgametype:


thread limitmultikill();

This will fix an infinite issue which crashes the server in the vid

In callback_playerdamage, in the else of if(isPlayer(eAttacker) && (self != eAttacker) && (self.pers["team"] == eAttacker.pers["team"])):


else
{
// Make sure at least one point of damage is done
if(iDamage < 1)
iDamage = 1;
self makepassthroughbullet(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);

// Shellshock/Rumble
self thread maps\mp\gametypes\_shellshock::shellshockOnDamage( sMeansOfDeath, iDamage);
self playrumble("damage_heavy");
}


spawnplayer:

waittillframeend;
self notify("spawned_player");
if(isdefined(self.eyemarker))
self.eyemarker delete();
self.eyemarker = spawn("script_origin", self geteye());
self.eyemarker thread deleteonevent("disconect", self);
self.eyemarker thread deleteonevent("spawned_player", self);
self thread linkeyemarker(self.eyemarker);
}


and finally, the additional functions:


deleteonevent(ev, us)
{
us waittill(ev);
if(isdefined(self))
self delete();
}

linkeyemarker(marker)
{
wait 0.05;
if(!isdefined(self) || !isdefined(self.sessionstate) || self.sessionstate != "playing")
{
if(isdefined(marker))
marker delete();
return;
}
if(isdefined(marker))
{
marker.linked = true;
marker linkto(self, "tag_eye", (0,0,0), (0,0,0));
}
}

makepassthroughbullet(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime)
{
if(!isdefined(vDir) || !isdefined(vPoint) || !isdefined(eAttacker) || !isplayer(eAttacker))
return;

if(!isdefined(sMeansOfDeath) || sMeansOfDeath != "MOD_RIFLE_BULLET")
return;
trace = bullettrace(vPoint, maps\mp\_utility::vectorscale(vDir, 1000) + vPoint, true, self);
sHitLoc = "none";
if(isdefined(trace["entity"]) && isplayer(trace["entity"]))
{
if(isdefined(trace["entity"].eyemarker) && isdefined(trace["entity"].eyemarker.linked))
{
vec = trace["entity"].eyemarker.origin - trace["position"];
amount = vectordot(vec, vDir);
new = trace["position"] + maps\mp\_utility::vectorscale(vDir, amount);
if(distancesquared(new, trace["entity"].eyemarker.origin) < 10 * 10)
{
sHitLoc = "head";
iDamage *= 2;
}
}
level.multikill++;
if(level.multikill > 3)
return;
trace["entity"] thread [[level.callbackPlayerDamage]](eInflictor, eAttacker, int(iDamage * 0.5), iDFlags, sMeansOfDeath, sWeapon, trace["position"], vDir, sHitLoc, psOffsetTime);
}
}

limitmultikill()
{
while(true)
{
level.multikill = 0;
wait 0.05;
}
}

Wesleyw3zep
11th June 2017, 18:00
Will this work on all gametype files? or just only @ sd?

IzNoGoD
11th June 2017, 18:03
Will this work on all gametype files? or just only @ sd?

Probably yes.