add sborka
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
include("shared.lua")
|
||||
|
||||
function ENT:CalcViewPassenger( ply, pos, angles, fov, pod )
|
||||
if pod == self:GetGunnerSeat() then return LVS:CalcView( self, ply, pos, angles, fov, pod ) end
|
||||
|
||||
local view = {}
|
||||
view.origin = pos
|
||||
view.angles = angles
|
||||
view.fov = fov
|
||||
view.drawviewer = false
|
||||
|
||||
local Pod = ply:GetVehicle()
|
||||
|
||||
if not IsValid( Pod ) then return view end
|
||||
|
||||
if not Pod:GetThirdPersonMode() then
|
||||
Pod:SetThirdPersonMode( true )
|
||||
end
|
||||
|
||||
local radius = 800
|
||||
|
||||
local TargetOrigin = self:LocalToWorld( Vector(0,0,50) ) - view.angles:Forward() * radius + view.angles:Up() * radius * 0.2
|
||||
local WallOffset = 4
|
||||
|
||||
local tr = util.TraceHull( {
|
||||
start = view.origin,
|
||||
endpos = TargetOrigin,
|
||||
filter = function( e )
|
||||
local c = e:GetClass()
|
||||
local collide = not c:StartWith( "prop_physics" ) and not c:StartWith( "prop_dynamic" ) and not c:StartWith( "prop_ragdoll" ) and not e:IsVehicle() and not c:StartWith( "gmod_" ) and not c:StartWith( "player" ) and not e.LVS
|
||||
|
||||
return collide
|
||||
end,
|
||||
mins = Vector( -WallOffset, -WallOffset, -WallOffset ),
|
||||
maxs = Vector( WallOffset, WallOffset, WallOffset ),
|
||||
} )
|
||||
|
||||
view.origin = tr.HitPos
|
||||
|
||||
if tr.Hit and not tr.StartSolid then
|
||||
view.origin = view.origin + tr.HitNormal * WallOffset
|
||||
end
|
||||
|
||||
return view
|
||||
end
|
||||
|
||||
function ENT:DamageFX()
|
||||
self.nextDFX = self.nextDFX or 0
|
||||
|
||||
if self.nextDFX < CurTime() then
|
||||
self.nextDFX = CurTime() + 0.05
|
||||
|
||||
local HP = self:GetHP()
|
||||
local MaxHP = self:GetMaxHP()
|
||||
|
||||
if HP > MaxHP * 0.25 then return end
|
||||
|
||||
local effectdata = EffectData()
|
||||
effectdata:SetOrigin( self:LocalToWorld( Vector(-10,0,80) ) )
|
||||
effectdata:SetNormal( self:GetUp() )
|
||||
effectdata:SetMagnitude( math.Rand(0.5,1.5) )
|
||||
effectdata:SetEntity( self )
|
||||
util.Effect( "lvs_exhaust_fire", effectdata )
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:OnFrame()
|
||||
self:AnimRotor()
|
||||
self:DamageFX()
|
||||
end
|
||||
|
||||
function ENT:AnimRotor()
|
||||
local RPM = self:GetThrottle() * 2500
|
||||
|
||||
self.RPM = self.RPM and (self.RPM + RPM * RealFrameTime() * 0.5) or 0
|
||||
|
||||
self:SetPoseParameter("rotor_spin", self.RPM )
|
||||
self:InvalidateBoneCache()
|
||||
end
|
||||
@@ -0,0 +1,102 @@
|
||||
AddCSLuaFile( "shared.lua" )
|
||||
AddCSLuaFile( "cl_init.lua" )
|
||||
include("shared.lua")
|
||||
|
||||
function ENT:OnSpawn( PObj )
|
||||
local DriverSeat = self:AddDriverSeat( Vector(85,-20,-7), Angle(0,-90,10) )
|
||||
DriverSeat:SetCameraDistance( 1 )
|
||||
|
||||
local PassengerSeats = {
|
||||
{
|
||||
pos = Vector(85,20,-7),
|
||||
ang = Angle(0,-90,10)
|
||||
},
|
||||
{
|
||||
pos = Vector(30,20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
{
|
||||
pos = Vector(30,-20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
{
|
||||
pos = Vector(-20,-20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
{
|
||||
pos = Vector(-20,20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
{
|
||||
pos = Vector(-70,-20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
{
|
||||
pos = Vector(-70,20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
{
|
||||
pos = Vector(-120,-20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
{
|
||||
pos = Vector(-120,20,0),
|
||||
ang = Angle(0,-90,0)
|
||||
},
|
||||
}
|
||||
for num, v in pairs( PassengerSeats ) do
|
||||
local Pod = self:AddPassengerSeat( v.pos, v.ang )
|
||||
|
||||
if num == 1 then
|
||||
self:SetGunnerSeat( Pod )
|
||||
end
|
||||
end
|
||||
|
||||
self:AddEngineSound( Vector(40,0,10) )
|
||||
|
||||
--self:AddRotor( pos, angle, radius, turn_speed_and_direction )
|
||||
self.Rotor = self:AddRotor( Vector(-65,0,100), Angle(2,0,0), 390, -4000 )
|
||||
self.Rotor:SetRotorEffects( true )
|
||||
self.Rotor:SetHP( 50 )
|
||||
function self.Rotor:OnDestroyed( base )
|
||||
base:SetBodygroup( 1, 2 )
|
||||
base:DestroyEngine()
|
||||
|
||||
self:EmitSound( "physics/metal/metal_box_break2.wav" )
|
||||
end
|
||||
|
||||
self.TailRotor = self:AddRotor( Vector(-575.360840,31.147699,105.635742), Angle(0,0,90), 80, -6000 )
|
||||
self.TailRotor:SetHP( 50 )
|
||||
function self.TailRotor:OnDestroyed( base )
|
||||
base:SetBodygroup( 2, 2 )
|
||||
base:DestroySteering( 2.5 )
|
||||
|
||||
self:EmitSound( "physics/metal/metal_box_break2.wav" )
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:SetRotor( PhysRot )
|
||||
self:SetBodygroup( 1, PhysRot and 0 or 1 )
|
||||
end
|
||||
|
||||
function ENT:SetTailRotor( PhysRot )
|
||||
self:SetBodygroup( 2, PhysRot and 0 or 1 )
|
||||
end
|
||||
|
||||
function ENT:OnTick()
|
||||
local PhysRot = self:GetThrottle() < 0.85
|
||||
|
||||
if not self:IsSteeringDestroyed() then
|
||||
self:SetTailRotor( PhysRot )
|
||||
end
|
||||
|
||||
if not self:IsEngineDestroyed() then
|
||||
self:SetRotor( PhysRot )
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:OnEngineActiveChanged( Active )
|
||||
if Active then
|
||||
self:EmitSound( "lvs/vehicles/helicopter/start.wav" )
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,82 @@
|
||||
|
||||
ENT.Base = "lvs_base_helicopter"
|
||||
|
||||
ENT.PrintName = "Rebel Helicopter"
|
||||
ENT.Author = "Luna"
|
||||
ENT.Information = "Transport Helicopter as seen in Half Life 2 Episode 2"
|
||||
ENT.Category = "[LVS] - Helicopters"
|
||||
|
||||
ENT.VehicleCategory = "Helicopters"
|
||||
ENT.VehicleSubCategory = "Resistance"
|
||||
|
||||
ENT.Spawnable = true
|
||||
ENT.AdminSpawnable = false
|
||||
|
||||
ENT.MDL = "models/blu/helicopter.mdl"
|
||||
ENT.GibModels = {
|
||||
"models/gibs/helicopter_brokenpiece_01.mdl",
|
||||
"models/gibs/helicopter_brokenpiece_02.mdl",
|
||||
"models/gibs/helicopter_brokenpiece_03.mdl",
|
||||
"models/combine_apc_destroyed_gib02.mdl",
|
||||
"models/combine_apc_destroyed_gib04.mdl",
|
||||
"models/combine_apc_destroyed_gib05.mdl",
|
||||
"models/props_c17/trappropeller_engine.mdl",
|
||||
"models/gibs/airboat_broken_engine.mdl",
|
||||
}
|
||||
|
||||
ENT.AITEAM = 2
|
||||
|
||||
ENT.MaxHealth = 3000
|
||||
|
||||
ENT.MaxVelocity = 1500
|
||||
|
||||
ENT.ThrustUp = 1
|
||||
ENT.ThrustDown = 0.8
|
||||
ENT.ThrustRate = 1
|
||||
|
||||
ENT.ThrottleRateUp = 0.2
|
||||
ENT.ThrottleRateDown = 0.2
|
||||
|
||||
ENT.TurnRatePitch = 0.75
|
||||
ENT.TurnRateYaw = 1
|
||||
ENT.TurnRateRoll = 0.75
|
||||
|
||||
ENT.GravityTurnRateYaw = 2
|
||||
|
||||
ENT.ForceLinearDampingMultiplier = 1.5
|
||||
|
||||
ENT.ForceAngleMultiplier = 1
|
||||
ENT.ForceAngleDampingMultiplier = 1
|
||||
|
||||
ENT.EngineSounds = {
|
||||
{
|
||||
sound = "^lvs/vehicles/helicopter/loop_near.wav",
|
||||
sound_int = "lvs/vehicles/helicopter/loop_interior.wav",
|
||||
Pitch = 0,
|
||||
PitchMin = 0,
|
||||
PitchMax = 255,
|
||||
PitchMul = 100,
|
||||
Volume = 1,
|
||||
VolumeMin = 0,
|
||||
VolumeMax = 1,
|
||||
SoundLevel = 125,
|
||||
UseDoppler = true,
|
||||
},
|
||||
{
|
||||
sound = "^lvs/vehicles/helicopter/loop_dist.wav",
|
||||
sound_int = "",
|
||||
Pitch = 0,
|
||||
PitchMin = 0,
|
||||
PitchMax = 255,
|
||||
PitchMul = 100,
|
||||
Volume = 1,
|
||||
VolumeMin = 0,
|
||||
VolumeMax = 1,
|
||||
SoundLevel = 125,
|
||||
UseDoppler = true,
|
||||
},
|
||||
}
|
||||
|
||||
function ENT:OnSetupDataTables()
|
||||
self:AddDT( "Entity", "GunnerSeat" )
|
||||
end
|
||||
Reference in New Issue
Block a user