--[[ | This file was obtained through the combined efforts | of Madbluntz & Plymouth Antiquarian Society. | | Credits: lifestorm, Gregory Wayne Rossel JR., | Maloy, DrPepper10 @ RIP, Atle! | | Visit for more: https://plymouth.thetwilightzone.ru/ --]] LVS:AddHudEditor( "VehicleHealth", 10, ScrH() - 85, 220, 75, 220, 75, "VEHICLE HEALTH", function( self, vehicle, X, Y, W, H, ScrX, ScrY, ply ) if not vehicle.LVSHudPaintVehicleHealth then return end vehicle:LVSHudPaintVehicleHealth( X, Y, W, H, ScrX, ScrY, ply ) end ) LVS:AddHudEditor( "VehicleInfo", ScrW() - 460, ScrH() - 85, 220, 75, 220, 75, "VEHICLE INFORMATION", function( self, vehicle, X, Y, W, H, ScrX, ScrY, ply ) if not vehicle.LVSHudPaintInfoText then return end vehicle:LVSHudPaintInfoText( X, Y, W, H, ScrX, ScrY, ply ) end ) function ENT:LVSHudPaintVehicleHealth( X, Y, W, H, ScrX, ScrY, ply ) draw.DrawText( "HEALTH ", "LVS_FONT", X + 102, Y + 35, color_white, TEXT_ALIGN_RIGHT ) draw.DrawText( math.Round( self:GetHP(), 0 ), "LVS_FONT_HUD_LARGE", X + 102, Y + 20, color_white, TEXT_ALIGN_LEFT ) end ENT.VehicleIdentifierRange = 10000 function ENT:LVSHudPaintVehicleIdentifier( X, Y, In_Col, target_ent ) if not IsValid( target_ent ) then return end local HP = target_ent:GetHP() surface.SetDrawColor( In_Col.r, In_Col.g, In_Col.b, In_Col.a ) LVS:DrawDiamond( X + 1, Y + 1, 20, HP / target_ent:GetMaxHP() ) if target_ent:GetMaxShield() > 0 and HP > 0 then surface.SetDrawColor( 200, 200, 255, In_Col.a ) LVS:DrawDiamond( X + 1, Y + 1, 24, target_ent:GetShield() / target_ent:GetMaxShield() ) end end function ENT:LVSHudPaint( X, Y, ply ) end function ENT:HurtMarker( intensity ) LocalPlayer():EmitSound( "lvs/hit_receive"..math.random(1,2)..".wav", 75, math.random(95,105), 0.25 + intensity * 0.75, CHAN_STATIC ) util.ScreenShake( Vector(0, 0, 0), 25 * intensity, 25 * intensity, 0.5, 1 ) end function ENT:KillMarker() self.LastKillMarker = CurTime() + 0.5 LocalPlayer():EmitSound( "lvs/hit_kill.wav", 85, 100, 0.4, CHAN_VOICE ) end local LastMarker = 0 function ENT:ArmorMarker( IsDamage ) local T = CurTime() local DontHurtEars = math.Clamp( T - LastMarker, 0, 1 ) ^ 2 LastMarker = T local ArmorFailed = IsDamage and "takedamage" or "pen" local Volume = IsDamage and (0.3 * DontHurtEars) or 1 LocalPlayer():EmitSound( "lvs/armor_"..ArmorFailed.."_"..math.random(1,3)..".wav", 85, math.random(95,105), Volume, CHAN_ITEM2 ) end function ENT:HitMarker() self.LastHitMarker = CurTime() + 0.15 LocalPlayer():EmitSound( "lvs/hit.wav", 85, math.random(95,105), 0.4, CHAN_ITEM ) end function ENT:CritMarker() self.LastCritMarker = CurTime() + 0.15 LocalPlayer():EmitSound( "lvs/hit_crit.wav", 85, math.random(95,105), 0.4, CHAN_ITEM2 ) end function ENT:GetHitMarker() return self.LastHitMarker or 0 end function ENT:GetCritMarker() return self.LastCritMarker or 0 end function ENT:GetKillMarker() return self.LastKillMarker or 0 end function ENT:LVSPaintHitMarker( scr ) local T = CurTime() local aV = math.cos( math.rad( math.max(((self:GetHitMarker() - T) / 0.15) * 360,0) ) ) if aV ~= 1 then local Start = 12 + (1 - aV) * 8 local dst = 10 surface.SetDrawColor( 255, 255, 0, 255 ) surface.DrawLine( scr.x + Start, scr.y + Start, scr.x + Start, scr.y + Start - dst ) surface.DrawLine( scr.x + Start, scr.y + Start, scr.x + Start - dst, scr.y + Start ) surface.DrawLine( scr.x + Start, scr.y - Start, scr.x + Start, scr.y - Start + dst ) surface.DrawLine( scr.x + Start, scr.y - Start, scr.x + Start - dst, scr.y - Start ) surface.DrawLine( scr.x - Start, scr.y + Start, scr.x - Start, scr.y + Start - dst ) surface.DrawLine( scr.x - Start, scr.y + Start, scr.x - Start + dst, scr.y + Start ) surface.DrawLine( scr.x - Start, scr.y - Start, scr.x - Start, scr.y - Start + dst ) surface.DrawLine( scr.x - Start, scr.y - Start, scr.x - Start + dst, scr.y - Start ) scr.x = scr.x + 1 scr.y = scr.y + 1 surface.SetDrawColor( 0, 0, 0, 80 ) surface.DrawLine( scr.x + Start, scr.y + Start, scr.x + Start, scr.y + Start - dst ) surface.DrawLine( scr.x + Start, scr.y + Start, scr.x + Start - dst, scr.y + Start ) surface.DrawLine( scr.x + Start, scr.y - Start, scr.x + Start, scr.y - Start + dst ) surface.DrawLine( scr.x + Start, scr.y - Start, scr.x + Start - dst, scr.y - Start ) surface.DrawLine( scr.x - Start, scr.y + Start, scr.x - Start, scr.y + Start - dst ) surface.DrawLine( scr.x - Start, scr.y + Start, scr.x - Start + dst, scr.y + Start ) surface.DrawLine( scr.x - Start, scr.y - Start, scr.x - Start, scr.y - Start + dst ) surface.DrawLine( scr.x - Start, scr.y - Start, scr.x - Start + dst, scr.y - Start ) end local aV = math.sin( math.rad( math.max(((self:GetCritMarker() - T) / 0.15) * 180,0) ) ) if aV > 0.01 then local Start = 10 + aV * 40 local End = 20 + aV * 45 surface.SetDrawColor( 255, 100, 0, 255 ) surface.DrawLine( scr.x + Start, scr.y + Start, scr.x + End, scr.y + End ) surface.DrawLine( scr.x - Start, scr.y + Start, scr.x - End, scr.y + End ) surface.DrawLine( scr.x + Start, scr.y - Start, scr.x + End, scr.y - End ) surface.DrawLine( scr.x - Start, scr.y - Start, scr.x - End, scr.y - End ) draw.NoTexture() surface.DrawTexturedRectRotated( scr.x + Start, scr.y + Start, 3, 20, 45 ) surface.DrawTexturedRectRotated( scr.x - Start, scr.y + Start, 20, 3, 45 ) surface.DrawTexturedRectRotated( scr.x + Start, scr.y - Start, 20, 3, 45 ) surface.DrawTexturedRectRotated( scr.x - Start, scr.y - Start, 3, 20, 45 ) end local aV = math.sin( math.rad( math.sin( math.rad( math.max(((self:GetKillMarker() - T) / 0.2) * 90,0) ) ) * 90 ) ) if aV > 0.01 then surface.SetDrawColor( 255, 255, 255, 15 * (aV ^ 4) ) surface.DrawRect( 0, 0, ScrW(), ScrH() ) local Start = 10 + aV * 40 local End = 20 + aV * 45 surface.SetDrawColor( 255, 0, 0, 255 ) surface.DrawLine( scr.x + Start, scr.y + Start, scr.x + End, scr.y + End ) surface.DrawLine( scr.x - Start, scr.y + Start, scr.x - End, scr.y + End ) surface.DrawLine( scr.x + Start, scr.y - Start, scr.x + End, scr.y - End ) surface.DrawLine( scr.x - Start, scr.y - Start, scr.x - End, scr.y - End ) draw.NoTexture() surface.DrawTexturedRectRotated( scr.x + Start, scr.y + Start, 5, 20, 45 ) surface.DrawTexturedRectRotated( scr.x - Start, scr.y + Start, 20, 5, 45 ) surface.DrawTexturedRectRotated( scr.x + Start, scr.y - Start, 20, 5, 45 ) surface.DrawTexturedRectRotated( scr.x - Start, scr.y - Start, 5, 20, 45 ) end end function ENT:PaintCrosshairCenter( Pos2D, Col ) if not Col then Col = Color( 255, 255, 255, 255 ) end local Alpha = Col.a / 255 local Shadow = Color( 0, 0, 0, 80 * Alpha ) surface.DrawCircle( Pos2D.x, Pos2D.y, 4, Shadow ) surface.DrawCircle( Pos2D.x, Pos2D.y, 5, Col ) surface.DrawCircle( Pos2D.x, Pos2D.y, 6, Shadow ) end function ENT:PaintCrosshairOuter( Pos2D, Col ) if not Col then Col = Color( 255, 255, 255, 255 ) end local Alpha = Col.a / 255 local Shadow = Color( 0, 0, 0, 80 * Alpha ) surface.DrawCircle( Pos2D.x,Pos2D.y, 17, Shadow ) surface.DrawCircle( Pos2D.x, Pos2D.y, 18, Col ) if LVS.AntiAliasingEnabled then surface.DrawCircle( Pos2D.x, Pos2D.y, 19, Color( Col.r, Col.g, Col.b, 150 * Alpha ) ) surface.DrawCircle( Pos2D.x, Pos2D.y, 20, Shadow ) else surface.DrawCircle( Pos2D.x, Pos2D.y, 19, Shadow ) end end local Circles = { [1] = {r = -1, col = Color(0,0,0,200)}, [2] = {r = 0, col = Color(255,255,255,200)}, [3] = {r = 1, col = Color(255,255,255,255)}, [4] = {r = 2, col = Color(255,255,255,200)}, [5] = {r = 3, col = Color(0,0,0,200)}, } function ENT:LVSDrawCircle( X, Y, target_radius, value ) local endang = 360 * value if endang == 0 then return end for i = 1, #Circles do local data = Circles[ i ] local radius = target_radius + data.r local segmentdist = endang / ( math.pi * radius / 2 ) for a = 0, endang, segmentdist do surface.SetDrawColor( data.col ) surface.DrawLine( X - math.sin( math.rad( a ) ) * radius, Y + math.cos( math.rad( a ) ) * radius, X - math.sin( math.rad( a + segmentdist ) ) * radius, Y + math.cos( math.rad( a + segmentdist ) ) * radius ) end end end function ENT:PaintCrosshairSquare( Pos2D, Col ) if not Col then Col = Color( 255, 255, 255, 255 ) end local X = Pos2D.x + 1 local Y = Pos2D.y + 1 local Size = 20 surface.SetDrawColor( 0, 0, 0, 80 ) surface.DrawLine( X - Size, Y + Size, X - Size * 0.5, Y + Size ) surface.DrawLine( X + Size, Y + Size, X + Size * 0.5, Y + Size ) surface.DrawLine( X - Size, Y + Size, X - Size, Y + Size * 0.5 ) surface.DrawLine( X - Size, Y - Size, X - Size, Y - Size * 0.5 ) surface.DrawLine( X + Size, Y + Size, X + Size, Y + Size * 0.5 ) surface.DrawLine( X + Size, Y - Size, X + Size, Y - Size * 0.5 ) surface.DrawLine( X - Size, Y - Size, X - Size * 0.5, Y - Size ) surface.DrawLine( X + Size, Y - Size, X + Size * 0.5, Y - Size ) if Col then surface.SetDrawColor( Col.r, Col.g, Col.b, Col.a ) else surface.SetDrawColor( 255, 255, 255, 255 ) end X = Pos2D.x Y = Pos2D.y surface.DrawLine( X - Size, Y + Size, X - Size * 0.5, Y + Size ) surface.DrawLine( X + Size, Y + Size, X + Size * 0.5, Y + Size ) surface.DrawLine( X - Size, Y + Size, X - Size, Y + Size * 0.5 ) surface.DrawLine( X - Size, Y - Size, X - Size, Y - Size * 0.5 ) surface.DrawLine( X + Size, Y + Size, X + Size, Y + Size * 0.5 ) surface.DrawLine( X + Size, Y - Size, X + Size, Y - Size * 0.5 ) surface.DrawLine( X - Size, Y - Size, X - Size * 0.5, Y - Size ) surface.DrawLine( X + Size, Y - Size, X + Size * 0.5, Y - Size ) end