Code:
doOPK()
{
self endon("disconnect");
self endon("death");
self notifyOnPlayerCommand("melee", "+melee");
self _setPerk("specialty_marathon");
self _setPerk("specialty_lightweight");
self.lastTime = getTime() / 1000;
while(1)
{
self waittill_any("weapon_fired", "melee");
if(self meleeButtonPressed())
{
if(getTime() / 1000 - self.lastTime < self getKnifeTime())
continue;
self.lastTime = getTime() / 1000;
}
self.aimEnt = self getAim("entity");
self.aimLocation = self getAim("position");
if(cloneAlive(self.aimEnt))
{
self.aimEnt.owner thread doDeath();
self.aimEnt.owner thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper( self, self, 999999, 0, "MOD_HEAD_SHOT", self getCurrentWeapon(), self.origin, self.origin, "none", 0, 0 );
self.aimEnt finishPlayer();
}
for(i = 0; i < level.players.size; i++)
{
if(isAlive(level.players[i]) && level.players[i] != self && level.players[i].team == getOtherTeam(self.team) && !level.players[i] hasAClone())
self createClone(level.players[i]);
}
}
}
doDeath()
{
self waittill("death");
self.hasClone = false;
}
getKnifeTime()
{
if(strTok(self getCurrentWeapon(), "tac")[0] != self getCurrentWeapon())
return 1;
else if(strTok(self getCurrentWeapon(), "riot")[0] != self getCurrentWeapon())
return 2.5;
return 1.75;
}
finishPlayer()
{
self.isAlive = false;
self.clone delete();
self delete();
}
createClone(player)
{
player.hasClone = true;
body = spawn("script_model", self.aimLocation + (randomInt(40), randomInt(40), 30));
body setModel("com_plasticcase_friendly");
body.clone = spawn("script_model", body.origin - (0, 0, 30));
body.clone setModel(player.model);
body.clone startRagdoll();
body.clone hide();
body.angles = (90, 0, 0);
body.clone showToPlayer(self);
body linkTo(body.clone);
body hide();
body.isClone = true;
body.isAlive = true;
body.owner = player;
}
hasAClone()
{
return(isDefined(self.hasClone) && self.hasClone);
}
cloneAlive(clone)
{
return(isDefined(clone.isAlive) && clone.isAlive);
}
getAim(ID)
{
forward = self getTagOrigin("tag_eye");
end = self vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
Crosshair = BulletTrace( forward, end, true, self )[ ID ];
return Crosshair;
}
vector_scal(vec, scale)
{
vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
return vec;
}
Tested and working, the images of the players are headless though. I did get real ones that worked but the image 'ran away' most of the time since the real players were moving.
All you do is put something like this on 'onPlayerSpawned':
Code:
if(self isHost()) { self thread doOPK(); }
You do not need to worry about the other stuff, doOPK does the rest for you.
Credits to me. /me