mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
193 lines
4.1 KiB
Lua
193 lines
4.1 KiB
Lua
|
|
--[[
|
||
|
|
| 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/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
AddCSLuaFile()
|
||
|
|
|
||
|
|
ENT.Type = "anim"
|
||
|
|
|
||
|
|
ENT.PrintName = "Ammo Refil Balloon"
|
||
|
|
ENT.Author = "Luna"
|
||
|
|
ENT.Information = "Refils Ammo on Vehicles"
|
||
|
|
ENT.Category = "[LVS]"
|
||
|
|
|
||
|
|
ENT.Spawnable = true
|
||
|
|
ENT.AdminOnly = false
|
||
|
|
|
||
|
|
ENT.RenderGroup = RENDERGROUP_BOTH
|
||
|
|
|
||
|
|
if SERVER then
|
||
|
|
function ENT:SpawnFunction( ply, tr, ClassName )
|
||
|
|
if not tr.Hit then return end
|
||
|
|
|
||
|
|
local ent = ents.Create( ClassName )
|
||
|
|
ent:SetPos( tr.HitPos + tr.HitNormal )
|
||
|
|
ent:Spawn()
|
||
|
|
ent:Activate()
|
||
|
|
|
||
|
|
return ent
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnTakeDamage( dmginfo )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:Initialize()
|
||
|
|
self:SetModel( "models/balloons/hot_airballoon.mdl" )
|
||
|
|
self:PhysicsInit( SOLID_VPHYSICS )
|
||
|
|
self:DrawShadow( false )
|
||
|
|
self:SetTrigger( true )
|
||
|
|
self:SetCollisionGroup( COLLISION_GROUP_WORLD )
|
||
|
|
|
||
|
|
local pObj = self:GetPhysicsObject()
|
||
|
|
|
||
|
|
if not IsValid( pObj ) then
|
||
|
|
self:Remove()
|
||
|
|
|
||
|
|
print("LVS: missing model. Balloon terminated.")
|
||
|
|
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
pObj:SetMass( 1000 )
|
||
|
|
pObj:EnableMotion( true )
|
||
|
|
pObj:EnableDrag( false )
|
||
|
|
|
||
|
|
self:StartMotionController()
|
||
|
|
|
||
|
|
self:PhysWake()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:PhysicsSimulate( phys, deltatime )
|
||
|
|
phys:Wake()
|
||
|
|
|
||
|
|
local StartPos = self:LocalToWorld( self:OBBCenter() )
|
||
|
|
local traceUp = util.TraceLine( {
|
||
|
|
start = StartPos,
|
||
|
|
endpos = StartPos + Vector(0,0,50000),
|
||
|
|
filter = self,
|
||
|
|
mask = MASK_SOLID
|
||
|
|
} )
|
||
|
|
local traceDown = util.TraceLine( {
|
||
|
|
start = StartPos,
|
||
|
|
endpos = StartPos - Vector(0,0,50000),
|
||
|
|
filter = self,
|
||
|
|
mask = MASK_SOLID
|
||
|
|
} )
|
||
|
|
|
||
|
|
local Force = (traceUp.HitPos + traceDown.HitPos) * 0.5 - StartPos
|
||
|
|
|
||
|
|
local ForceLinear, ForceAngle = phys:CalculateForceOffset( Force, phys:LocalToWorld( phys:GetMassCenter() + Vector(0,0,1) ) )
|
||
|
|
|
||
|
|
ForceLinear = ForceLinear - phys:GetVelocity()
|
||
|
|
ForceAngle = ForceAngle - phys:GetAngleVelocity()
|
||
|
|
|
||
|
|
return ForceAngle, ForceLinear, SIM_GLOBAL_ACCELERATION
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:Refil( entity )
|
||
|
|
if not IsValid( entity ) then return end
|
||
|
|
|
||
|
|
if not entity.LVS then return end
|
||
|
|
|
||
|
|
if entity:WeaponRestoreAmmo() then
|
||
|
|
entity:EmitSound("items/ammo_pickup.wav")
|
||
|
|
end
|
||
|
|
|
||
|
|
entity:OnMaintenance()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:StartTouch( entity )
|
||
|
|
self:Refil( entity )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:EndTouch( entity )
|
||
|
|
self:Refil( entity )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:Touch( entity )
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:Think()
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if CLIENT then
|
||
|
|
local WhiteList = {
|
||
|
|
["weapon_physgun"] = true,
|
||
|
|
["weapon_physcannon"] = true,
|
||
|
|
["gmod_tool"] = true,
|
||
|
|
}
|
||
|
|
|
||
|
|
local SpriteColor = Color( 255, 150, 0, 255 )
|
||
|
|
local mat = Material( "models/wireframe" )
|
||
|
|
local FrameMat = Material( "lvs/3d2dmats/frame.png" )
|
||
|
|
local RepairMat = Material( "lvs/3d2dmats/refil.png" )
|
||
|
|
|
||
|
|
function ENT:Draw()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:DrawTranslucent()
|
||
|
|
local ply = LocalPlayer()
|
||
|
|
local Small = false
|
||
|
|
|
||
|
|
if IsValid( ply ) and not IsValid( ply:lvsGetVehicle() ) then
|
||
|
|
self:DrawModel()
|
||
|
|
|
||
|
|
Small = true
|
||
|
|
|
||
|
|
if GetConVarNumber( "cl_draweffectrings" ) == 0 then return end
|
||
|
|
|
||
|
|
local ply = LocalPlayer()
|
||
|
|
local wep = ply:GetActiveWeapon()
|
||
|
|
|
||
|
|
if not IsValid( wep ) then return end
|
||
|
|
|
||
|
|
local weapon_name = wep:GetClass()
|
||
|
|
|
||
|
|
if not WhiteList[ weapon_name ] then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local Pos = self:LocalToWorld( self:OBBCenter() )
|
||
|
|
|
||
|
|
if Small then
|
||
|
|
for i = 0, 180, 180 do
|
||
|
|
cam.Start3D2D( Pos, self:LocalToWorldAngles( Angle(0,i,90) ), 1 )
|
||
|
|
surface.SetDrawColor( 255, 150, 0, 255 )
|
||
|
|
|
||
|
|
surface.SetMaterial( FrameMat )
|
||
|
|
surface.DrawTexturedRect( -512, -512, 1024, 1024 )
|
||
|
|
|
||
|
|
surface.SetMaterial( RepairMat )
|
||
|
|
surface.DrawTexturedRect( -256, 0, 512, 512 )
|
||
|
|
cam.End3D2D()
|
||
|
|
end
|
||
|
|
else
|
||
|
|
for i = 0, 180, 180 do
|
||
|
|
cam.Start3D2D( Pos, self:LocalToWorldAngles( Angle(0,i,90) ), 0.75 )
|
||
|
|
surface.SetDrawColor( 255, 150, 0, 255 )
|
||
|
|
|
||
|
|
surface.SetMaterial( FrameMat )
|
||
|
|
surface.DrawTexturedRect( -512, -512, 1024, 1024 )
|
||
|
|
|
||
|
|
surface.SetMaterial( RepairMat )
|
||
|
|
surface.DrawTexturedRect( -512, -512, 1024, 1024 )
|
||
|
|
cam.End3D2D()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function ENT:OnRemove()
|
||
|
|
if IsValid( self._RepairMDL ) then
|
||
|
|
self._RepairMDL:Remove()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|