add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
include("shared.lua")
include("sh_tracks.lua")
include("sh_turret.lua")
include("cl_optics.lua")
include("cl_tankview.lua")
local switch = Material("lvs/weapons/change_ammo.png")
local AP = Material("lvs/weapons/bullet_ap.png")
local HE = Material("lvs/weapons/tank_cannon.png")
function ENT:DrawWeaponIcon( PodID, ID, x, y, width, height, IsSelected, IconColor )
local Icon = self:GetUseHighExplosive() and HE or AP
surface.SetMaterial( Icon )
surface.DrawTexturedRect( x, y, width, height )
local ply = LocalPlayer()
if not IsValid( ply ) or self:GetSelectedWeapon() ~= 2 then return end
surface.SetMaterial( switch )
surface.DrawTexturedRect( x + width + 5, y + 7, 24, 24 )
local buttonCode = ply:lvsGetControls()[ "CAR_SWAP_AMMO" ]
if not buttonCode then return end
local KeyName = input.GetKeyName( buttonCode )
if not KeyName then return end
draw.DrawText( KeyName, "DermaDefault", x + width + 17, y + height * 0.5 + 7, Color(0,0,0,IconColor.a), TEXT_ALIGN_CENTER )
end
function ENT:OnEngineActiveChanged( Active )
if Active then
self:EmitSound( "lvs/vehicles/sherman/engine_start.wav", 75, 100, LVS.EngineVolume )
end
end

View File

@@ -0,0 +1,57 @@
ENT.OpticsFov = 30
ENT.OpticsEnable = true
ENT.OpticsZoomOnly = true
ENT.OpticsFirstPerson = true
ENT.OpticsThirdPerson = false
ENT.OpticsPodIndex = {
[1] = true,
}
ENT.OpticsCrosshairMaterial = Material( "lvs/circle_filled.png" )
ENT.OpticsCrosshairColor = Color(0,0,0,150)
ENT.OpticsCrosshairSize = 4
local axis = Material( "lvs/axis.png" )
local sight = Material( "lvs/shermansights.png" )
local scope = Material( "lvs/scope_viewblocked.png" )
function ENT:PaintOpticsCrosshair( Pos2D )
surface.SetMaterial( sight )
surface.SetDrawColor( 0, 0, 0, 150 )
surface.DrawTexturedRect( Pos2D.x - 210, Pos2D.y - 23, 420, 420 )
surface.SetMaterial( axis )
surface.SetDrawColor( 255, 255, 255, 25 )
surface.DrawTexturedRect( Pos2D.x - 7, Pos2D.y - 7, 16, 16 )
surface.SetDrawColor( 0, 0, 0, 255 )
surface.DrawTexturedRect( Pos2D.x - 8, Pos2D.y - 8, 16, 16 )
end
function ENT:PaintOptics( Pos2D, Col, PodIndex, Type )
local size = self.OpticsCrosshairSize
surface.SetMaterial( self.OpticsCrosshairMaterial )
surface.SetDrawColor( self.OpticsCrosshairColor )
surface.DrawTexturedRect( Pos2D.x - size * 0.5, Pos2D.y - size * 0.5, size, size )
if Type == 1 then
self:DrawRotatedText( "MG", Pos2D.x + 30, Pos2D.y + 10, "LVS_FONT_PANEL", Color(0,0,0,220), 0)
else
self:DrawRotatedText( Type == 3 and "HE" or "AP", Pos2D.x + 30, Pos2D.y + 10, "LVS_FONT_PANEL", Color(0,0,0,220), 0)
end
local ScrW = ScrW()
local ScrH = ScrH()
local diameter = ScrH + 64
local radius = diameter * 0.5
surface.SetMaterial( scope )
surface.SetDrawColor( 0, 0, 0, 255 )
surface.DrawTexturedRect( Pos2D.x - radius, Pos2D.y - radius, diameter, diameter )
-- black bar left + right
surface.DrawRect( 0, 0, Pos2D.x - radius, ScrH )
surface.DrawRect( Pos2D.x + radius, 0, Pos2D.x - radius, ScrH )
end

View File

@@ -0,0 +1,12 @@
include("entities/lvs_tank_wheeldrive/modules/cl_tankview.lua")
function ENT:TankViewOverride( ply, pos, angles, fov, pod )
if ply == self:GetDriver() and not pod:GetThirdPersonMode() then
local vieworigin, found = self:GetTurretViewOrigin()
if found then pos = vieworigin end
end
return pos, angles, fov
end

View File

@@ -0,0 +1,102 @@
AddCSLuaFile( "shared.lua" )
AddCSLuaFile( "sh_tracks.lua" )
AddCSLuaFile( "sh_turret.lua" )
AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "cl_optics.lua" )
AddCSLuaFile( "cl_tankview.lua" )
include("shared.lua")
include("sh_tracks.lua")
include("sh_turret.lua")
function ENT:OnSpawn( PObj )
local ID = self:LookupAttachment( "machinegun" )
local Muzzle = self:GetAttachment( ID )
self.SNDTurretMGf = self:AddSoundEmitter( self:WorldToLocal( Muzzle.Pos ), "lvs/vehicles/sherman/mg_loop.wav", "lvs/vehicles/sherman/mg_loop_interior.wav" )
self.SNDTurretMGf:SetSoundLevel( 95 )
self.SNDTurretMGf:SetParent( self, ID )
local ID = self:LookupAttachment( "turret_machinegun" )
local Muzzle = self:GetAttachment( ID )
self.SNDTurretMG = self:AddSoundEmitter( self:WorldToLocal( Muzzle.Pos ), "lvs/vehicles/sherman/mg_loop.wav", "lvs/vehicles/sherman/mg_loop_interior.wav" )
self.SNDTurretMG:SetSoundLevel( 95 )
self.SNDTurretMG:SetParent( self, ID )
local ID = self:LookupAttachment( "turret_cannon" )
local Muzzle = self:GetAttachment( ID )
self.SNDTurret = self:AddSoundEmitter( self:WorldToLocal( Muzzle.Pos ), "lvs/vehicles/sherman/cannon_fire.wav", "lvs/vehicles/sherman/cannon_fire.wav" )
self.SNDTurret:SetSoundLevel( 95 )
self.SNDTurret:SetParent( self, ID )
local DriverSeat = self:AddDriverSeat( Vector(0,0,60), Angle(0,-90,0) )
DriverSeat.HidePlayer = true
local GunnerSeat = self:AddPassengerSeat( Vector(88,-20,32), Angle(0,-90,0) )
GunnerSeat.HidePlayer = true
self:SetGunnerSeat( GunnerSeat )
self:AddEngine( Vector(-79.66,0,70), Angle(0,180,0) )
self:AddFuelTank( Vector(-75,0,40), Angle(0,0,0), 600, LVS.FUELTYPE_PETROL, Vector(0,-20,-18),Vector(18,20,18) )
-- extra front plate left
self:AddArmor( Vector(82,20.5,65), Angle(-36,0,0), Vector(-1.2,-11,-12), Vector(1.2,11,12), 1200, self.FrontArmorExtra )
-- extra front plate right
self:AddArmor( Vector(82,-20.5,65), Angle(-36,0,0), Vector(-1.2,-11,-12), Vector(1.2,11,12), 1200, self.FrontArmorExtra )
-- front upper wedge
self:AddArmor( Vector(70,0,66), Angle(0,0,0), Vector(-26,-48,-16), Vector(26,48,16), 1000, self.FrontArmor )
-- transmission rib left
self:AddArmor( Vector(102,12.6,35), Angle(0,0,0), Vector(-16,-1.5,-19), Vector(16,1.5,19), 1200, self.FrontArmorExtra )
-- transmission rib right
self:AddArmor( Vector(102,-11.8,35), Angle(0,0,0), Vector(-16,-1.5,-19), Vector(16,1.5,19), 1200, self.FrontArmorExtra )
-- transmission
self:AddArmor( Vector(110,1,34), Angle(0,0,0), Vector(-15,-32,-18), Vector(15,32,18), 1000, self.FrontArmor )
-- extra ammo armor right front
self:AddArmor( Vector(50,-51,63), Angle(0,0,0), Vector(-14,-1,-9), Vector(14,1,9), 1200, self.FrontArmorExtra )
-- extra ammo armor right rear
self:AddArmor( Vector(1,-51,63), Angle(0,0,0), Vector(-14,-1,-10), Vector(14,1,10), 1200, self.FrontArmorExtra )
-- extra ammo armor left
self:AddArmor( Vector(50,51,63), Angle(0,0,0), Vector(-14,-1,-9), Vector(14,1,9), 1200, self.FrontArmorExtra )
-- rear down
self:AddArmor( Vector(-85,0,34), Angle(0,0,0), Vector(-6,-29,-18), Vector(6,29,18), 800, self.SideArmor )
-- rear up
self:AddArmor( Vector(-105,0,63), Angle(0,0,0), Vector(-3,-48,-13), Vector(3,48,13), 800, self.SideArmor )
-- rear top
self:AddArmor( Vector(-69,0,66), Angle(0,0,0), Vector(-33,-48,-10), Vector(33,48,10), 600, self.RoofArmor )
-- roof mid
self:AddArmor( Vector(4,0,72), Angle(0,0,0), Vector(-40,-48,-4), Vector(40,48,4), 600, self.RoofArmor )
-- turret neck
self:AddArmor( Vector(2,0,79), Angle(0,0,0), Vector(-42,-44,-3), Vector(42,44,3), 1200, self.FrontArmorExtra )
-- right up
self:AddArmor( Vector(-6,-49,63), Angle(0,0,0), Vector(-102,-1,-13), Vector(102,1,13), 800, self.SideArmor )
-- left up
self:AddArmor( Vector(-6,49.5,63), Angle(0,0,0), Vector(-102,-1.5,-13), Vector(102,1.5,13), 800, self.SideArmor )
-- right down
self:AddArmor( Vector(2,-30,34), Angle(0,0,0), Vector(-93,-2,-18), Vector(93,2,18), 800, self.SideArmor )
-- left down
self:AddArmor( Vector(2,31,34), Angle(0,0,0), Vector(-93,-1,-18), Vector(93,1,18), 800, self.SideArmor )
-- shelf
self:AddArmor( Vector(-29,0,51), Angle(0,0,0), Vector(-73,-48,-1), Vector(73,48,1), 600, self.RoofArmor )
-- bottom
self:AddArmor( Vector(8,0,17), Angle(0,0,0), Vector(-87,-29,-1), Vector(87,29,1), 600, self.RoofArmor )
-- turret
local TurretArmor = self:AddArmor( Vector(2,0,95), Angle(0,0,0), Vector(-42,-44,-13), Vector(42,44,13), 1500, self.TurretArmor )
TurretArmor:SetLabel( "Turret" )
self:SetTurretArmor( TurretArmor )
-- ammo rack weakspot
self:AddAmmoRack( Vector(0,40,64), Vector(-5,0,70), Angle(0,0,0), Vector(-18,-6,-9), Vector(18,6,9) )
self:AddAmmoRack( Vector(0,-40,64), Vector(-5,0,70), Angle(0,0,0), Vector(-18,-6,-9), Vector(18,6,9) )
-- trailer hitch
self:AddTrailerHitch( Vector(-100,0,24), LVS.HITCHTYPE_MALE )
end

View File

@@ -0,0 +1,183 @@
if SERVER then
ENT.PivotSteerEnable = true
ENT.PivotSteerByBrake = true
ENT.PivotSteerWheelRPM = 40
ENT.TrackGibs = {
["left"] = {
{
mdl = "models/blu/tanks/sherman_tracks_ragdoll.mdl",
pos = Vector(0,41.3,3),
ang = Angle(-90,-90,0),
},
},
["right"] = {
{
mdl = "models/blu/tanks/sherman_tracks_ragdoll.mdl",
pos = Vector(0,-41.3,3),
ang = Angle(-90,-90,0),
},
}
}
function ENT:OnLeftTrackRepaired()
self:SetBodygroup(2,0)
end
function ENT:OnLeftTrackDestroyed()
self:SetBodygroup(2,1)
end
function ENT:OnRightTrackRepaired()
self:SetBodygroup(3,0)
end
function ENT:OnRightTrackDestroyed()
self:SetBodygroup(3,1)
end
function ENT:TracksCreate( PObj )
self:CreateTrackPhysics( "models/blu/tanks/sherman_tracks_col.mdl" )
local WheelModel = "models/props_vehicles/tire001b_truck.mdl"
local L1 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_LEFT, pos = Vector(100,42,55), mdl = WheelModel } )
local L2 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_LEFT, pos = Vector(70,42,35), mdl = WheelModel } )
local L3 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_LEFT, pos = Vector(35,42,40), mdl = WheelModel } )
local L4 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_LEFT, pos = Vector(0,42,45), mdl = WheelModel } )
local L5 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_LEFT, pos = Vector(-35,42,45), mdl = WheelModel } )
local L6 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_LEFT, pos = Vector(-70,42,45), mdl = WheelModel } )
local LeftWheelChain = self:CreateWheelChain( {L1, L2, L3, L4, L5, L6} )
self:SetTrackDriveWheelLeft( L4 )
local R1 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_RIGHT, pos = Vector(100,-42,55), mdl = WheelModel } )
local R2 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_RIGHT, pos = Vector(70,-42,35), mdl = WheelModel } )
local R3 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_RIGHT, pos = Vector(35,-42,40), mdl = WheelModel } )
local R4 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_RIGHT, pos = Vector(0,-42,45), mdl = WheelModel } )
local R5 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_RIGHT, pos = Vector(-35,-42,45), mdl = WheelModel } )
local R6 = self:AddWheel( { hide = true, wheeltype = LVS.WHEELTYPE_RIGHT, pos = Vector(-70,-42,45), mdl = WheelModel} )
local RightWheelChain = self:CreateWheelChain( {R1, R2, R3, R4, R5, R6} )
self:SetTrackDriveWheelRight( R4 )
local LeftTracksArmor = self:AddArmor( Vector(12,43,22), Angle(0,0,0), Vector(-121,-10,-28), Vector(121,10,28), 500, self.FrontArmor )
self:SetTrackArmorLeft( LeftTracksArmor, LeftWheelChain )
local RightTracksArmor = self:AddArmor( Vector(12,-41,22), Angle(0,0,0), Vector(-121,-10,-28), Vector(121,10,28), 500, self.FrontArmor )
self:SetTrackArmorRight( RightTracksArmor, RightWheelChain )
self:DefineAxle( {
Axle = {
ForwardAngle = Angle(0,0,0),
SteerType = LVS.WHEEL_STEER_FRONT,
SteerAngle = 30,
TorqueFactor = 0,
BrakeFactor = 1,
UseHandbrake = true,
},
Wheels = { R1, L1, R2, L2 },
Suspension = {
Height = 20,
MaxTravel = 15,
ControlArmLength = 150,
SpringConstant = 20000,
SpringDamping = 1000,
SpringRelativeDamping = 2000,
},
} )
self:DefineAxle( {
Axle = {
ForwardAngle = Angle(0,0,0),
SteerType = LVS.WHEEL_STEER_NONE,
TorqueFactor = 1,
BrakeFactor = 1,
UseHandbrake = true,
},
Wheels = { R3, L3, L4, R4 },
Suspension = {
Height = 20,
MaxTravel = 15,
ControlArmLength = 150,
SpringConstant = 20000,
SpringDamping = 1000,
SpringRelativeDamping = 2000,
},
} )
self:DefineAxle( {
Axle = {
ForwardAngle = Angle(0,0,0),
SteerType = LVS.WHEEL_STEER_REAR,
SteerAngle = 30,
TorqueFactor = 0,
BrakeFactor = 1,
UseHandbrake = true,
},
Wheels = { R5, L5, R6, L6 },
Suspension = {
Height = 20,
MaxTravel = 15,
ControlArmLength = 150,
SpringConstant = 20000,
SpringDamping = 1000,
SpringRelativeDamping = 2000,
},
} )
end
else
ENT.TrackSystemEnable = true
ENT.TrackScrollTexture = "models/blu/track_sherman"
ENT.ScrollTextureData = {
["$alphatest"] = "1",
["$translate"] = "[0.0 0.0 0.0]",
["$colorfix"] = "{255 255 255}",
["Proxies"] = {
["TextureTransform"] = {
["translateVar"] = "$translate",
["centerVar"] = "$center",
["resultVar"] = "$basetexturetransform",
},
["Equals"] = {
["srcVar1"] = "$colorfix",
["resultVar"] = "$color",
}
}
}
ENT.TrackLeftSubMaterialID = 1
ENT.TrackLeftSubMaterialMul = Vector(0,0.0065,0)
ENT.TrackRightSubMaterialID = 2
ENT.TrackRightSubMaterialMul = Vector(0,0.0065,0)
ENT.TrackPoseParameterLeft = "spin_wheels_left"
ENT.TrackPoseParameterLeftMul = -1.252
ENT.TrackPoseParameterRight = "spin_wheels_right"
ENT.TrackPoseParameterRightMul = -1.252
ENT.TrackSounds = "lvs/vehicles/sherman/tracks_loop.wav"
ENT.TrackHull = Vector(20,20,20)
ENT.TrackData = {}
for i = 1, 6 do
for n = 0, 1 do
local LR = n == 0 and "l" or "r"
local LeftRight = n == 0 and "left" or "right"
local data = {
Attachment = {
name = "vehicle_suspension_"..LR.."_"..i,
toGroundDistance = 41,
traceLength = 100,
},
PoseParameter = {
name = "suspension_"..LeftRight.."_"..i,
rangeMultiplier = -1,
lerpSpeed = 25,
}
}
table.insert( ENT.TrackData, data )
end
end
end

View File

@@ -0,0 +1,23 @@
include("entities/lvs_tank_wheeldrive/modules/sh_turret.lua")
include("entities/lvs_tank_wheeldrive/modules/sh_turret_ballistics.lua")
ENT.TurretBallisticsPredicted = false -- sherman optics are not adjustable
ENT.TurretBallisticsProjectileVelocity = ENT.ProjectileVelocityCoaxial
ENT.TurretBallisticsMuzzleAttachment = "turret_machinegun"
ENT.TurretBallisticsViewAttachment = "sight"
ENT.TurretAimRate = 25
ENT.TurretRotationSound = "vehicles/tank_turret_loop1.wav"
ENT.TurretPitchPoseParameterName = "turret_pitch"
ENT.TurretPitchMin = -15
ENT.TurretPitchMax = 15
ENT.TurretPitchMul = 1
ENT.TurretPitchOffset = 0
ENT.TurretYawPoseParameterName = "turret_yaw"
ENT.TurretYawMul = 1
ENT.TurretYawOffset = 0

View File

@@ -0,0 +1,433 @@
ENT.Base = "lvs_tank_wheeldrive"
ENT.PrintName = "Sherman"
ENT.Author = "Luna"
ENT.Information = "Luna's Vehicle Script"
ENT.Category = "[LVS] - Cars"
ENT.VehicleCategory = "Tanks"
ENT.VehicleSubCategory = "Medium"
ENT.Spawnable = true
ENT.AdminSpawnable = false
ENT.MDL = "models/blu/tanks/sherman_lvs.mdl"
ENT.MDL_DESTROYED = "models/blu/tanks/sherman_gib_1.mdl"
ENT.GibModels = {
"models/blu/tanks/sherman_gib_2.mdl",
"models/blu/tanks/sherman_gib_3.mdl",
"models/blu/tanks/sherman_gib_4.mdl",
"models/blu/tanks/sherman_gib_6.mdl",
"models/blu/tanks/sherman_gib_7.mdl",
}
ENT.AITEAM = 2
ENT.MaxHealth = 1200
--damage system
ENT.DSArmorIgnoreForce = 3000
ENT.CannonArmorPenetration = 9200
ENT.FrontArmor = 2000
ENT.FrontArmorExtra = 4500
ENT.SideArmor = 800
ENT.TurretArmor = 3000
ENT.RoofArmor = 100
-- ballistics
ENT.ProjectileVelocityCoaxial = 15000
ENT.ProjectileVelocityHighExplosive = 13000
ENT.ProjectileVelocityArmorPiercing = 16000
ENT.SteerSpeed = 1
ENT.SteerReturnSpeed = 2
ENT.PhysicsWeightScale = 2
ENT.PhysicsDampingSpeed = 1000
ENT.PhysicsInertia = Vector(6000,6000,1500)
ENT.MaxVelocity = 450
ENT.MaxVelocityReverse = 150
ENT.EngineCurve = 0.1
ENT.EngineTorque = 200
ENT.TransMinGearHoldTime = 0.1
ENT.TransShiftSpeed = 0
ENT.TransGears = 3
ENT.TransGearsReverse = 1
ENT.MouseSteerAngle = 45
ENT.lvsShowInSpawner = true
ENT.EngineSounds = {
{
sound = "lvs/vehicles/sherman/eng_idle_loop.wav",
Volume = 1,
Pitch = 70,
PitchMul = 30,
SoundLevel = 75,
SoundType = LVS.SOUNDTYPE_IDLE_ONLY,
},
{
sound = "lvs/vehicles/sherman/eng_loop.wav",
Volume = 1,
Pitch = 20,
PitchMul = 90,
SoundLevel = 85,
SoundType = LVS.SOUNDTYPE_NONE,
UseDoppler = true,
},
}
ENT.ExhaustPositions = {
{
pos = Vector(-90.47,17.01,52.77),
ang = Angle(180,0,0)
},
{
pos = Vector(-90.47,-17.01,52.77),
ang = Angle(180,0,0)
},
}
function ENT:OnSetupDataTables()
self:AddDT( "Entity", "GunnerSeat" )
self:AddDT( "Bool", "UseHighExplosive" )
end
function ENT:InitWeapons()
local COLOR_WHITE = Color(255,255,255,255)
-- coaxial machinegun
local weapon = {}
weapon.Icon = Material("lvs/weapons/mg.png")
weapon.Ammo = 1000
weapon.Delay = 0.1
weapon.HeatRateUp = 0.2
weapon.HeatRateDown = 0.25
weapon.Attack = function( ent )
local ID = ent:LookupAttachment( "turret_machinegun" )
local Muzzle = ent:GetAttachment( ID )
if not Muzzle then return end
local bullet = {}
bullet.Src = Muzzle.Pos
bullet.Dir = Muzzle.Ang:Forward()
bullet.Spread = Vector(0.01,0.01,0.01)
bullet.TracerName = "lvs_tracer_yellow_small"
bullet.Force = 10
bullet.EnableBallistics = true
bullet.HullSize = 0
bullet.Damage = 25
bullet.Velocity = ent.ProjectileVelocityCoaxial
bullet.Attacker = ent:GetDriver()
ent:LVSFireBullet( bullet )
local effectdata = EffectData()
effectdata:SetOrigin( bullet.Src )
effectdata:SetNormal( bullet.Dir )
effectdata:SetEntity( ent )
util.Effect( "lvs_muzzle", effectdata )
ent:TakeAmmo( 1 )
end
weapon.StartAttack = function( ent )
if not IsValid( ent.SNDTurretMG ) then return end
ent.SNDTurretMG:Play()
end
weapon.FinishAttack = function( ent )
if not IsValid( ent.SNDTurretMG ) then return end
ent.SNDTurretMG:Stop()
end
weapon.OnOverheat = function( ent ) ent:EmitSound("lvs/overheat.wav") end
weapon.HudPaint = function( ent, X, Y, ply )
local ID = ent:LookupAttachment( "turret_machinegun" )
local Muzzle = ent:GetAttachment( ID )
if Muzzle then
local traceTurret = util.TraceLine( {
start = Muzzle.Pos,
endpos = Muzzle.Pos + Muzzle.Ang:Forward() * 50000,
filter = ent:GetCrosshairFilterEnts()
} )
local MuzzlePos2D = traceTurret.HitPos:ToScreen()
ent:PaintCrosshairCenter( MuzzlePos2D, COLOR_WHITE )
ent:LVSPaintHitMarker( MuzzlePos2D )
end
end
weapon.OnSelect = function( ent )
ent:TurretUpdateBallistics( ent.ProjectileVelocityCoaxial, "turret_machinegun" )
end
self:AddWeapon( weapon )
local weapon = {}
weapon.Icon = true
weapon.Ammo = 40
weapon.Delay = 2.5
weapon.HeatRateUp = 1
weapon.HeatRateDown = 0.4
weapon.OnThink = function( ent )
if ent:GetSelectedWeapon() ~= 2 then return end
local ply = ent:GetDriver()
if not IsValid( ply ) then return end
local SwitchType = ply:lvsKeyDown( "CAR_SWAP_AMMO" )
if ent._oldSwitchType ~= SwitchType then
ent._oldSwitchType = SwitchType
if SwitchType then
ent:SetUseHighExplosive( not ent:GetUseHighExplosive() )
ent:EmitSound("lvs/vehicles/sherman/cannon_unload.wav", 75, 100, 1, CHAN_WEAPON )
ent:SetHeat( 1 )
ent:SetOverheated( true )
if ent:GetUseHighExplosive() then
ent:TurretUpdateBallistics( ent.ProjectileVelocityHighExplosive )
else
ent:TurretUpdateBallistics( ent.ProjectileVelocityArmorPiercing )
end
end
end
end
weapon.Attack = function( ent )
local ID = ent:LookupAttachment( "turret_cannon" )
local Muzzle = ent:GetAttachment( ID )
if not Muzzle then return end
local bullet = {}
bullet.Src = Muzzle.Pos
bullet.Dir = Muzzle.Ang:Forward()
bullet.Spread = Vector(0,0,0)
bullet.EnableBallistics = true
if ent:GetUseHighExplosive() then
bullet.Force = 500
bullet.HullSize = 15
bullet.Damage = 250
bullet.SplashDamage = 750
bullet.SplashDamageRadius = 200
bullet.SplashDamageEffect = "lvs_bullet_impact_explosive"
bullet.SplashDamageType = DMG_BLAST
bullet.Velocity = ent.ProjectileVelocityHighExplosive
else
bullet.Force = ent.CannonArmorPenetration
bullet.HullSize = 0
bullet.Damage = 1000
bullet.Velocity = ent.ProjectileVelocityArmorPiercing
end
bullet.TracerName = "lvs_tracer_cannon"
bullet.Attacker = ent:GetDriver()
ent:LVSFireBullet( bullet )
local effectdata = EffectData()
effectdata:SetOrigin( bullet.Src )
effectdata:SetNormal( bullet.Dir )
effectdata:SetEntity( ent )
util.Effect( "lvs_muzzle", effectdata )
local PhysObj = ent:GetPhysicsObject()
if IsValid( PhysObj ) then
PhysObj:ApplyForceOffset( -bullet.Dir * 150000, bullet.Src )
end
ent:TakeAmmo( 1 )
if not IsValid( ent.SNDTurret ) then return end
ent.SNDTurret:PlayOnce( 100 + math.cos( CurTime() + ent:EntIndex() * 1337 ) * 5 + math.Rand(-1,1), 1 )
ent:EmitSound("lvs/vehicles/sherman/cannon_reload.wav", 75, 100, 1, CHAN_WEAPON )
end
weapon.HudPaint = function( ent, X, Y, ply )
local ID = ent:LookupAttachment( "turret_cannon" )
local Muzzle = ent:GetAttachment( ID )
if Muzzle then
local traceTurret = util.TraceLine( {
start = Muzzle.Pos,
endpos = Muzzle.Pos + Muzzle.Ang:Forward() * 50000,
filter = ent:GetCrosshairFilterEnts()
} )
local MuzzlePos2D = traceTurret.HitPos:ToScreen()
if ent:GetUseHighExplosive() then
ent:PaintCrosshairSquare( MuzzlePos2D, COLOR_WHITE )
else
ent:PaintCrosshairOuter( MuzzlePos2D, COLOR_WHITE )
end
ent:LVSPaintHitMarker( MuzzlePos2D )
end
end
weapon.OnSelect = function( ent )
if ent:GetUseHighExplosive() then
ent:TurretUpdateBallistics( ent.ProjectileVelocityHighExplosive, "turret_cannon" )
else
ent:TurretUpdateBallistics( ent.ProjectileVelocityArmorPiercing, "turret_cannon" )
end
end
self:AddWeapon( weapon )
-- smoke
local weapon = {}
weapon.Icon = Material("lvs/weapons/smoke_launcher.png")
weapon.Ammo = 3
weapon.Delay = 1
weapon.HeatRateUp = 1
weapon.HeatRateDown = 0.05
weapon.Attack = function( ent )
ent:TakeAmmo( 1 )
local grenade = ents.Create( "lvs_item_smoke" )
grenade:SetPos( ent:LocalToWorld( Vector(-92,0,51) ) )
grenade:SetAngles( ent:GetAngles() )
grenade:SetParent( ent )
grenade:Spawn()
grenade:Activate()
grenade:Enable()
grenade:SetColor( Color(0,0,0,0) )
end
self:AddWeapon( weapon )
-- turret rotation disabler
local weapon = {}
weapon.Icon = Material("lvs/weapons/tank_noturret.png")
weapon.Ammo = -1
weapon.Delay = 0
weapon.HeatRateUp = 0
weapon.HeatRateDown = 0
weapon.OnSelect = function( ent, old, new )
if ent.SetTurretEnabled then
ent:SetTurretEnabled( false )
end
end
weapon.OnDeselect = function( ent, old, new )
if ent.SetTurretEnabled then
ent:SetTurretEnabled( true )
end
end
self:AddWeapon( weapon )
self:AddGunnerWeapons()
end
function ENT:GunnerInRange( Dir )
return self:AngleBetweenNormal( self:GetForward(), Dir ) < 60
end
function ENT:AddGunnerWeapons()
local COLOR_RED = Color(255,0,0,255)
local COLOR_WHITE = Color(255,255,255,255)
local weapon = {}
weapon.Icon = Material("lvs/weapons/mg.png")
weapon.Ammo = 1000
weapon.Delay = 0.1
weapon.HeatRateUp = 0.2
weapon.HeatRateDown = 0.25
weapon.Attack = function( ent )
local base = ent:GetVehicle()
if not IsValid( base ) then return end
if not base:GunnerInRange( ent:GetAimVector() ) then
if not IsValid( base.SNDTurretMGf ) then return true end
base.SNDTurretMGf:Stop()
return true
end
local ID = base:LookupAttachment( "machinegun" )
local Muzzle = base:GetAttachment( ID )
if not Muzzle then return end
local bullet = {}
bullet.Src = Muzzle.Pos
bullet.Dir = (ent:GetEyeTrace().HitPos - bullet.Src):GetNormalized()
bullet.Spread = Vector(0.01,0.01,0.01)
bullet.TracerName = "lvs_tracer_yellow_small"
bullet.Force = 10
bullet.EnableBallistics = true
bullet.HullSize = 0
bullet.Damage = 25
bullet.Velocity = 15000
bullet.Attacker = ent:GetDriver()
ent:LVSFireBullet( bullet )
local effectdata = EffectData()
effectdata:SetOrigin( bullet.Src )
effectdata:SetNormal( Muzzle.Ang:Forward() )
effectdata:SetEntity( ent )
util.Effect( "lvs_muzzle", effectdata )
ent:TakeAmmo( 1 )
if not IsValid( base.SNDTurretMGf ) then return end
base.SNDTurretMGf:Play()
end
weapon.StartAttack = function( ent )
local base = ent:GetVehicle()
if not IsValid( base ) or not IsValid( base.SNDTurretMGf ) then return end
base.SNDTurretMGf:Play()
end
weapon.FinishAttack = function( ent )
local base = ent:GetVehicle()
if not IsValid( base ) or not IsValid( base.SNDTurretMGf ) then return end
base.SNDTurretMGf:Stop()
end
weapon.OnThink = function( ent, active )
local base = ent:GetVehicle()
if not IsValid( base ) then return end
local Angles = base:WorldToLocalAngles( ent:GetAimVector():Angle() )
Angles:Normalize()
base:SetPoseParameter("machinegun_yaw", Angles.y )
base:SetPoseParameter("machinegun_pitch", Angles.p )
end
weapon.HudPaint = function( ent, X, Y, ply )
local base = ent:GetVehicle()
if not IsValid( base ) then return end
local Pos2D = ent:GetEyeTrace().HitPos:ToScreen()
local Col = base:GunnerInRange( ent:GetAimVector() ) and COLOR_WHITE or COLOR_RED
base:PaintCrosshairCenter( Pos2D, Col )
base:LVSPaintHitMarker( Pos2D )
end
self:AddWeapon( weapon, 2 )
end