mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
163 lines
5.9 KiB
Lua
163 lines
5.9 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/
|
|
--]]
|
|
|
|
|
|
TOOL.Category = "Half-Life 2"
|
|
TOOL.Name = "#tool.item_ammo_crate"
|
|
|
|
TOOL.ClientConVar[ "type" ] = "0"
|
|
|
|
local ToolModels = {}
|
|
ToolModels[ 0 ] = "models/items/ammocrate_pistol.mdl"
|
|
ToolModels[ 1 ] = "models/items/ammocrate_smg1.mdl"
|
|
ToolModels[ 2 ] = "models/items/ammocrate_ar2.mdl"
|
|
ToolModels[ 3 ] = "models/items/ammocrate_rockets.mdl"
|
|
ToolModels[ 4 ] = "models/items/ammocrate_buckshot.mdl"
|
|
ToolModels[ 5 ] = "models/items/ammocrate_grenade.mdl"
|
|
ToolModels[ 6 ] = "models/items/ammocrate_357.mdl"
|
|
ToolModels[ 7 ] = "models/items/ammocrate_crossbow.mdl"
|
|
ToolModels[ 8 ] = "models/items/ammocrate_ar2.mdl"
|
|
ToolModels[ 9 ] = "models/items/ammocrate_smg2.mdl"
|
|
ToolModels[ 10 ] = "models/items/ammocrate_smg1.mdl"
|
|
|
|
cleanup.Register( "item_ammo_crates" )
|
|
|
|
if ( SERVER ) then
|
|
|
|
local rb655_force_downloads = CreateConVar( "rb655_force_downloads", "0", FCVAR_ARCHIVE )
|
|
if ( rb655_force_downloads:GetFloat() > 0 ) then
|
|
|
|
resource.AddFile( "models/items/ammocrate_357.mdl" )
|
|
resource.AddFile( "models/items/ammocrate_crossbow.mdl" )
|
|
|
|
end
|
|
|
|
CreateConVar( "sbox_maxitem_ammo_crates", 10, FCVAR_ARCHIVE + FCVAR_REPLICATED + FCVAR_NOTIFY )
|
|
|
|
function MakeAmmoCrate( ply, model, pos, ang, type )
|
|
if ( IsValid( ply ) and !ply:CheckLimit( "item_ammo_crates" ) ) then return nil end
|
|
|
|
type = tonumber( type ) or 0
|
|
|
|
local item_ammo_crate = ents.Create( "item_ammo_crate" )
|
|
if ( !IsValid( item_ammo_crate ) ) then return nil end
|
|
item_ammo_crate:SetPos( pos )
|
|
item_ammo_crate:SetAngles( ang )
|
|
item_ammo_crate:SetKeyValue( "AmmoType", math.Clamp( type, 0, 9 ) )
|
|
item_ammo_crate:Spawn()
|
|
item_ammo_crate:Activate()
|
|
item_ammo_crate:SetModel( model )
|
|
|
|
table.Merge( item_ammo_crate:GetTable(), {
|
|
ply = ply,
|
|
type = type
|
|
} )
|
|
|
|
if ( IsValid( ply ) ) then
|
|
ply:AddCount( "item_ammo_crates", item_ammo_crate )
|
|
ply:AddCleanup( "item_ammo_crates", item_ammo_crate )
|
|
end
|
|
|
|
DoPropSpawnedEffect( item_ammo_crate )
|
|
|
|
return item_ammo_crate
|
|
end
|
|
|
|
duplicator.RegisterEntityClass( "item_ammo_crate", MakeAmmoCrate, "model", "pos", "ang", "type" )
|
|
end
|
|
|
|
function TOOL:LeftClick( trace )
|
|
if ( trace.HitSky or !trace.HitPos or trace.HitNormal.z < 0.7 ) then return false end
|
|
if ( IsValid( trace.Entity ) and ( trace.Entity:GetClass() == "item_ammo_crate" or trace.Entity:IsPlayer() or trace.Entity:IsNPC() ) ) then return false end
|
|
if ( CLIENT ) then return true end
|
|
|
|
local ply = self:GetOwner()
|
|
|
|
local ang = trace.HitNormal:Angle()
|
|
ang.p = ang.p - 270
|
|
if ( trace.HitNormal.z > 0.9999 ) then ang.y = ply:GetAngles().y + 180 end
|
|
|
|
local type = self:GetClientNumber( "type" )
|
|
if ( type == 10 ) then type = math.random( 0, 9 ) end
|
|
|
|
local item_ammo_crate = MakeAmmoCrate( ply, ToolModels[ type ], trace.HitPos + trace.HitNormal * 16, ang, type )
|
|
|
|
undo.Create( "item_ammo_crate" )
|
|
undo.AddEntity( item_ammo_crate )
|
|
undo.SetPlayer( ply )
|
|
undo.Finish()
|
|
|
|
return true
|
|
end
|
|
|
|
function TOOL:UpdateGhostEntity( ent, ply )
|
|
if ( !IsValid( ent ) ) then return end
|
|
|
|
local trace = ply:GetEyeTrace()
|
|
|
|
if ( !trace.Hit or trace.HitNormal.z < 0.7 ) then ent:SetNoDraw( true ) return end
|
|
if ( IsValid( trace.Entity ) and ( trace.Entity:GetClass() == "item_ammo_crate" or trace.Entity:IsPlayer() ) ) then ent:SetNoDraw( true ) return end
|
|
|
|
local ang = trace.HitNormal:Angle()
|
|
ang.p = ang.p - 270
|
|
if ( trace.HitNormal.z > 0.9999 ) then ang.y = ply:GetAngles().y + 180 end
|
|
|
|
local min = ent:OBBMins()
|
|
ent:SetPos( trace.HitPos - trace.HitNormal * min.z )
|
|
|
|
ent:SetAngles( ang )
|
|
ent:SetNoDraw( false )
|
|
end
|
|
|
|
function TOOL:Think()
|
|
if ( !IsValid( self.GhostEntity ) or self.GhostEntity:GetModel() != ToolModels[ self:GetClientNumber( "type" ) ] ) then
|
|
self:MakeGhostEntity( ToolModels[ self:GetClientNumber( "type" ) ], Vector( 0, 0, 0 ), Angle( 0, 0, 0 ) )
|
|
end
|
|
self:UpdateGhostEntity( self.GhostEntity, self:GetOwner() )
|
|
end
|
|
|
|
list.Set( "AmmoCrateTypes", "#Pistol_ammo", { item_ammo_crate_type = "0" } )
|
|
list.Set( "AmmoCrateTypes", "#Buckshot_ammo", { item_ammo_crate_type = "4" } )
|
|
list.Set( "AmmoCrateTypes", "#SMG1_grenade_ammo", { item_ammo_crate_type = "9" } )
|
|
|
|
list.Set( "AmmoCrateTypes", "#SMG1_ammo", { item_ammo_crate_type = "1" } )
|
|
list.Set( "AmmoCrateTypes", "#AR2_ammo", { item_ammo_crate_type = "2" } )
|
|
list.Set( "AmmoCrateTypes", "#RPG_round_ammo", { item_ammo_crate_type = "3" } )
|
|
list.Set( "AmmoCrateTypes", "#Buckshot_ammo", { item_ammo_crate_type = "4" } )
|
|
list.Set( "AmmoCrateTypes", "#Grenade_ammo", { item_ammo_crate_type = "5" } )
|
|
list.Set( "AmmoCrateTypes", "#357_ammo", { item_ammo_crate_type = "6" } )
|
|
list.Set( "AmmoCrateTypes", "#XBowBolt_ammo", { item_ammo_crate_type = "7" } )
|
|
list.Set( "AmmoCrateTypes", "#AR2AltFire_ammo", { item_ammo_crate_type = "8" } )
|
|
list.Set( "AmmoCrateTypes", "#SMG1_grenade_ammo", { item_ammo_crate_type = "9" } )
|
|
list.Set( "AmmoCrateTypes", "#tool.item_ammo_crate.random", { item_ammo_crate_type = "10" } )
|
|
|
|
if ( SERVER ) then return end
|
|
|
|
TOOL.Information = { { name = "left" } }
|
|
|
|
language.Add( "tool.item_ammo_crate", "Ammo Crates" )
|
|
language.Add( "tool.item_ammo_crate.name", "Ammo Crate Tool" )
|
|
language.Add( "tool.item_ammo_crate.desc", "Spawn crates full of ammo for resupply" )
|
|
language.Add( "tool.item_ammo_crate.left", "Spawn an ammo crate" )
|
|
|
|
language.Add( "tool.item_ammo_crate.type", "Ammo Crate Type" )
|
|
language.Add( "tool.item_ammo_crate.random", "Random" )
|
|
|
|
language.Add( "Cleanup_item_ammo_crates", "Ammo Crates" )
|
|
language.Add( "Cleaned_item_ammo_crates", "Cleaned up all Ammo Crates" )
|
|
language.Add( "SBoxLimit_item_ammo_crates", "You've hit the Ammo Crate limit!" )
|
|
language.Add( "Undone_item_ammo_crate", "Ammo Crate undone" )
|
|
|
|
language.Add( "max_item_ammo_crates", "Max Ammo Crates:" )
|
|
|
|
function TOOL.BuildCPanel( panel )
|
|
panel:AddControl( "ListBox", { Label = "#tool.item_ammo_crate.type", Options = list.Get( "AmmoCrateTypes" ), Height = 204 } )
|
|
end
|