Public feed
#888572
local meta = FindMetaTable( "Player" );
function meta:HandleBodyShot( dmginfo )
self:SetField( "hp.Body", math.Clamp( self:GetField( "hp.Body" ) - dmginfo:GetDamage() * 1.5, 0, 100 ) );
if( 100 - self:GetField( "hp.Body" ) >= math.Clamp( self:GetNWFloat( "stat.Endurance" ) - 5, 0, 70 ) ) then
self:MakeBleed();
self:SetBleedAmount( self:GetHeadBleeding() + self:GetArmsBleeding() +
self:GetBodyBleeding() + self:GetLegsBleeding() );
end
end
function meta:HandleArmShot( dmginfo )
self:SetField( "hp.Arms", math.Clamp( self:GetField( "hp.Arms" ) - dmginfo:GetDamage() * 1.9, 0, 100 ) );
if( 100 - self:GetField( "hp.Arms" ) >= math.Clamp( self:GetNWFloat( "stat.Endurance" ), 0, 75 ) ) then
self:MakeBleed();
self:SetBleedAmount( self:GetHeadBleeding() + self:GetArmsBleeding() +
self:GetBodyBleeding() + self:GetLegsBleeding() );
end
end
function meta:HandleLegShot( dmginfo )
self:SetField( "hp.Legs", math.Clamp( self:GetField( "hp.Legs" ) - dmginfo:GetDamage() * 2.55, 0, 100 ) );
if( 100 - self:GetField( "hp.Legs" ) >= math.Clamp( self:GetNWFloat( "stat.Endurance" ), 0, 75 ) ) then
self:MakeBleed();
self:SetBleedAmount( self:GetHeadBleeding() + self:GetArmsBleeding() +
self:GetBodyBleeding() + self:GetLegsBleeding() );
end
self:GetTable().LegHealthMul = math.Clamp( ( self:GetField( "hp.Legs" ) * .01 ), .01, 1 );
end
--Returns how much the head is bleeding by
function meta:GetHeadBleeding()
local val = 0;
if( self:GetField( "HeadBleed" ) == 1 ) then
val = 4;
end
return val;
end
function meta:HandleStunHit( attacker, hitgroup, extradmg )
self:ViewPunch( Vector( 11, 0, 0 ) );
local dmgmul = 1;
local blocking = false;
if( self:GetActiveWeapon():GetClass() == "ts_hands" ) then
if( self:GetActiveWeapon():GetNWBool( "ironsights" ) ) then
blocking = true;
end
end
if( hitgroup == HITGROUP_HEAD ) then
if( not blocking ) then
dmgmul = 2.5;
else
dmgmul = .8;
end
elseif( hitgroup == HITGROUP_CHEST ) then
if( not blocking ) then
dmgmul = 1.8;
else
dmgmul = .6;
end
elseif( hitgroup == HITGROUP_STOMACH ) then
if( not blocking ) then
dmgmul = 1.8;
else
dmgmul = .7;
end
end
local dmg = 40 * ( attacker:GetNWFloat( "stat.Strength" ) / 100 ) * dmgmul;
dmg = dmg * ( 33 / self:GetNWFloat( "stat.Endurance" ) );
umsg.Start( "DamageFlash", self );
umsg.Short( 255 );
umsg.Short( 255 );
umsg.Short( 255 );
umsg.Short( 255 );
umsg.Float( .2 );
umsg.End();
umsg.Start( "DoBlurHit", self );
umsg.Float( 1.8 );
umsg.End();
local min = 10;
if( kill ) then
min = 0;
end
local dmgmul = 1;
if( extradmg ) then dmgmul = 2.8; end
local findmg = dmg * .75 * dmgmul;
self:SetHealth( math.Clamp( self:Health() - findmg, min, 100000 ) );
if( self:Health() <= 0 ) then
self:Slay();
end
self:SetNWInt( "sprint", math.Clamp( self:GetNWInt( "sprint" ) - 15, 0, 100 ) );
self:SetField( "LastJump", CurTime() );
self:SetNWFloat( "conscious", math.Clamp( self:GetNWFloat( "conscious" ) - dmg * .7 * dmgmul, 0, 100 ) );
self:RaiseEnduranceStat();
local stat = attacker:GetNWFloat( "stat.Strength" );
local amt = 0;
if( stat < 17 ) then
amt = .01;
elseif( stat < 30 ) then
amt = .05;
elseif( stat < 50 ) then
amt = .03;
elseif( stat < 75 ) then
amt = .02;
elseif( stat < 85 ) then
amt = .014;
elseif( stat < 100 ) then
amt = .001;
end
if( stat > 55 ) then
amt = amt * .6;
end
attacker:SetNWFloat( "stat.Strength", stat + math.Clamp( amt * .3, .0001, 1 ) );
end
function meta:HandlePunch( attacker, hitgroup )
self:ViewPunch( Vector( -7, 0, 0 ) );
local dmgmul = 1;
local blocking = false;
if( self:GetActiveWeapon():GetClass() == "ts_hands" ) then
if( self:GetActiveWeapon():GetNWBool( "ironsights" ) ) then
blocking = true;
end
end
local canblur = false;
if( hitgroup == HITGROUP_HEAD ) then
if( not blocking ) then
dmgmul = 1.9;
canblur = true;
else
dmgmul = .35;
end
elseif( hitgroup == HITGROUP_CHEST ) then
if( not blocking ) then
dmgmul = 1.45;
canblur = true;
else
dmgmul = .2;
end
elseif( hitgroup == HITGROUP_STOMACH ) then
if( not blocking ) then
dmgmul = 1.45;
canblur = true;
else
dmgmul = .25;
end
end
local dmg = 35 * ( attacker:GetNWFloat( "stat.Strength" ) / 100 ) * dmgmul;
dmg = dmg * ( 33 / self:GetNWFloat( "stat.Endurance" ) );
if( dmg >= 20 and canblur ) then
umsg.Start( "DoBlurHit", self );
umsg.Float( .5 );
umsg.End();
end
self:SetHealth( math.Clamp( self:Health() - dmg * .4, 5, 100000 ) );
self:SetNWFloat( "conscious", math.Clamp( self:GetNWFloat( "conscious" ) - dmg * .28, 0, 100 ) );
self:RaiseEnduranceStat();
local stat = attacker:GetNWFloat( "stat.Strength" );
local amt = 0;
if( stat < 17 ) then
amt = .01;
elseif( stat < 30 ) then
amt = .038;
elseif( stat < 50 ) then
amt = .025;
elseif( stat < 75 ) then
amt = .02;
elseif( stat < 85 ) then
amt = .014;
elseif( stat < 100 ) then
amt = .001;
end
if( stat > 55 ) then
amt = amt * .6;
end
attacker:SetNWFloat( "stat.Strength", stat + math.Clamp( amt * .25, .0001, 1 ) );
end
function meta:GoUnconscious()
if( self:GetNWInt( "isko" ) == 0 ) then
self:SetNWInt( "isko", 1 );
self:CreateServerRagdoll();
self:SetField( "lastkoregen", CurTime() );
end
end
function meta:GoConscious()
self:SetPos( self:GetRagdoll():GetPos() );
self:SetNWInt( "isko", 0 );
self:SnapFromServerRagdoll();
self:SetField( "lastkoregen", CurTime() );
end
--Returns how much the body is bleeding by
function meta:GetBodyBleeding()
local val = 0;
val = ( 100 - self:GetField( "hp.Body" ) ) * .06;
return math.abs( val );
end
--Returns how much the arms are bleeding by
function meta:GetArmsBleeding()
local val = 0;
val = ( 100 - self:GetField( "hp.Arms" ) ) * 0.04;
return math.abs( val );
end
--Returns how much the legs are bleeding by
function meta:GetLegsBleeding()
local val = 0;
val = ( 100 - self:GetField( "hp.Legs" ) ) * .01;
return math.abs( val );
end