This commit is contained in:
lifestorm
2024-08-05 18:40:29 +03:00
parent 9f505a0646
commit c6d9b6f580
8044 changed files with 1853472 additions and 21 deletions

View File

@@ -0,0 +1,162 @@
--[[
| 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 = "Render"
TOOL.Name = "#tool.paint.name"
TOOL.LeftClickAutomatic = true
TOOL.RightClickAutomatic = true
TOOL.RequiresTraceHit = true
TOOL.ClientConVar[ "decal" ] = "Blood"
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
local function PlaceDecal( ply, ent, data )
if ( !IsValid( ent ) && !ent:IsWorld() ) then return end
local bone = ent:GetPhysicsObjectNum( data.bone or 0 )
if ( !IsValid( bone ) ) then bone = ent end
if ( SERVER ) then
util.Decal( data.decal, bone:LocalToWorld( data.Pos1 ), bone:LocalToWorld( data.Pos2 ), ply )
local i = ent.DecalCount or 0
i = i + 1
duplicator.StoreEntityModifier( ent, "decal" .. i, data )
ent.DecalCount = i
end
end
--
-- Register decal duplicator
--
for i = 1, 32 do
duplicator.RegisterEntityModifier( "decal" .. i, function( ply, ent, data )
timer.Simple( i * 0.05, function() PlaceDecal( ply, ent, data ) end )
end )
end
function TOOL:Reload( trace )
if ( !IsValid( trace.Entity ) ) then return false end
trace.Entity:RemoveAllDecals()
if ( SERVER ) then
for i = 1, 32 do
duplicator.ClearEntityModifier( trace.Entity, "decal" .. i )
end
trace.Entity.DecalCount = nil
end
return true
end
function TOOL:LeftClick( trace )
return self:RightClick( trace, true )
end
function TOOL:RightClick( trace, bNoDelay )
local decal = self:GetClientInfo( "decal" )
local Pos1 = trace.HitPos + trace.HitNormal
local Pos2 = trace.HitPos - trace.HitNormal
local Bone = trace.Entity:GetPhysicsObjectNum( trace.PhysicsBone or 0 )
if ( !IsValid( Bone ) ) then Bone = trace.Entity end
Pos1 = Bone:WorldToLocal( Pos1 )
Pos2 = Bone:WorldToLocal( Pos2 )
PlaceDecal( self:GetOwner(), trace.Entity, { Pos1 = Pos1, Pos2 = Pos2, bone = trace.PhysicsBone, decal = decal } )
if ( bNoDelay ) then
self:GetWeapon():SetNextPrimaryFire( CurTime() + 0.05 )
self:GetWeapon():SetNextSecondaryFire( CurTime() + 0.05 )
else
self:GetWeapon():SetNextPrimaryFire( CurTime() + 0.2 )
self:GetWeapon():SetNextSecondaryFire( CurTime() + 0.2 )
end
return false
end
game.AddDecal( "Eye", "decals/eye" )
game.AddDecal( "Dark", "decals/dark" )
game.AddDecal( "Smile", "decals/smile" )
game.AddDecal( "Light", "decals/light" )
game.AddDecal( "Cross", "decals/cross" )
game.AddDecal( "Nought", "decals/nought" )
game.AddDecal( "Noughtsncrosses", "decals/noughtsncrosses" )
list.Add( "PaintMaterials", "Eye" )
list.Add( "PaintMaterials", "Smile" )
list.Add( "PaintMaterials", "Light" )
list.Add( "PaintMaterials", "Dark" )
list.Add( "PaintMaterials", "Blood" )
list.Add( "PaintMaterials", "YellowBlood" )
list.Add( "PaintMaterials", "Impact.Metal" )
list.Add( "PaintMaterials", "Scorch" )
list.Add( "PaintMaterials", "BeerSplash" )
list.Add( "PaintMaterials", "ExplosiveGunshot" )
list.Add( "PaintMaterials", "BirdPoop" )
list.Add( "PaintMaterials", "PaintSplatPink" )
list.Add( "PaintMaterials", "PaintSplatGreen" )
list.Add( "PaintMaterials", "PaintSplatBlue" )
list.Add( "PaintMaterials", "ManhackCut" )
list.Add( "PaintMaterials", "FadingScorch" )
list.Add( "PaintMaterials", "Antlion.Splat" )
list.Add( "PaintMaterials", "Splash.Large" )
list.Add( "PaintMaterials", "BulletProof" )
list.Add( "PaintMaterials", "GlassBreak" )
list.Add( "PaintMaterials", "Impact.Sand" )
list.Add( "PaintMaterials", "Impact.BloodyFlesh" )
list.Add( "PaintMaterials", "Impact.Antlion" )
list.Add( "PaintMaterials", "Impact.Glass" )
list.Add( "PaintMaterials", "Impact.Wood" )
list.Add( "PaintMaterials", "Impact.Concrete" )
list.Add( "PaintMaterials", "Noughtsncrosses" )
list.Add( "PaintMaterials", "Nought" )
list.Add( "PaintMaterials", "Cross" )
function TOOL.BuildCPanel( CPanel )
-- Remove duplicates.
local Options = {}
for id, str in pairs( list.Get( "PaintMaterials" ) ) do
if ( !table.HasValue( Options, str ) ) then
table.insert( Options, str )
end
end
table.sort( Options )
local listbox = CPanel:AddControl( "ListBox", { Label = "#tool.paint.texture", Height = 17 + table.Count( Options ) * 17 } )
for k, decal in pairs( Options ) do
local line = listbox:AddLine( decal )
line.data = { paint_decal = decal }
if ( GetConVarString( "paint_decal" ) == tostring( decal ) ) then line:SetSelected( true ) end
end
end

View File

@@ -0,0 +1,105 @@
--[[
| 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 = "HL2RP Staff QoL"
TOOL.Name = "NPC Spawner Editor"
TOOL.RequiresTraceHit = true
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
function TOOL:GetPlayerBoundsTrace()
local client = self:GetOwner()
return util.TraceLine({
start = client:GetShootPos(),
endpos = client:GetShootPos() + client:GetForward() * 96,
filter = client
})
end
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands") then return false end
local entity = trace.Entity
if !entity or entity and !IsValid(entity) then return end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if entity:GetClass() != "ix_npcspawner" then return end
entity:Use(self:GetOwner())
end
end
function TOOL:RightClick( trace )
local entity = trace.Entity
local client = self:GetOwner()
if !entity or entity and !IsValid(entity) then
client.npcEditStart = nil
client.npcEnt = nil
return
end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if entity:GetClass() != "ix_npcspawner" then return end
if client.npcEditStart then
client.npcEditStart = nil
client.npcEnt = nil
else
client.npcEditStart = entity:GetPos() + (entity:GetForward() * -60 + entity:GetRight()*-40 + entity:GetUp()*128)
client.npcEnt = entity
end
end
function TOOL:Reload(trace)
local client = self:GetOwner()
if !CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands") then return false end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if !client.npcEditStart or !client.npcEnt then return end
local tr = util.TraceLine({
start = client:GetShootPos(),
endpos = client:GetShootPos() + client:GetForward() * 96,
filter = client
})
client.npcEnt:SetSpawnPosStart(client.npcEditStart)
client.npcEnt:SetSpawnPosEnd(tr.HitPos)
client.npcEditStart = nil
client.npcEnt = nil
end
if CLIENT then
hook.Add("PostDrawTranslucentRenderables", "NPCSpawnEdit", function(bDepth, bSkybox)
if ( bSkybox ) then return end
if LocalPlayer().npcEditStart then
local tr = util.TraceLine({
start = LocalPlayer():GetShootPos(),
endpos = LocalPlayer():GetShootPos() + LocalPlayer():GetForward() * 96,
filter = LocalPlayer()
})
local center, min, max = LocalPlayer().npcEnt:SpawnAreaPosition(LocalPlayer().npcEditStart, tr.HitPos)
local color = Color(255, 255, 255, 255)
render.DrawWireframeBox(center, angle_zero, min, max, color)
end
end)
language.Add( "Tool.sh_npcspawnedit.name", "NPC Spawner Configurator" )
language.Add( "Tool.sh_npcspawnedit.desc", "You can edit NPC spawner entities with it." )
language.Add( "Tool.sh_npcspawnedit.left", "Open spawner menu" )
language.Add( "Tool.sh_npcspawnedit.right", "Edit spawner area bounds. Click again to stop changing bounds." )
language.Add( "Tool.sh_npcspawnedit.reload", "Save your area bound changes." )
end

View File

@@ -0,0 +1,74 @@
--[[
| 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 = "HL2RP Staff QoL"
TOOL.Name = "Panel Add"
TOOL.RequiresTraceHit = true
TOOL.ClientConVar[ "url" ] = ""
TOOL.ClientConVar[ "scale" ] = 1
TOOL.ClientConVar[ "brightness" ] = 100
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(self:GetOwner(), "Helix - Manage Panels") then return false end
local position = trace.HitPos
local angles = trace.HitNormal:Angle()
angles:RotateAroundAxis(angles:Up(), 90)
angles:RotateAroundAxis(angles:Forward(), 90)
if !ix.plugin.list then return end
if !ix.plugin.list["3dpanel"] then return end
if !ix.plugin.list["3dpanel"].AddPanel then return end
local url = self:GetClientInfo( "url", "" )
local scale = self:GetClientNumber( "scale", 0 )
local brightness = self:GetClientNumber( "brightness", 0 )
ix.plugin.list["3dpanel"]:AddPanel(position + angles:Up() * 0.1, angles, url, scale, brightness)
return "@panelAdded"
end
end
function TOOL:RightClick( trace )
if !ix.plugin.list then return end
if !ix.plugin.list["3dpanel"] then return end
if !ix.plugin.list["3dpanel"].RemovePanel then return end
local position = trace.HitPos
-- Remove the panel(s) and get the amount removed.
local amount = ix.plugin.list["3dpanel"]:RemovePanel(position, false)
return "@panelRemoved", amount
end
function TOOL.BuildCPanel( CPanel )
CPanel:AddControl( "Header", { Description = "Enter URL!" } )
CPanel:AddControl( "textbox", { Label = "URL", Command = "sh_paneladd_url", Help = false } )
CPanel:AddControl( "Slider", { Label = "Scale", Command = "sh_paneladd_scale", Type = "Float", Min = 0.001, Max = 5, Help = false } )
CPanel:AddControl( "Slider", { Label = "Brightness", Command = "sh_paneladd_brightness", Type = "Float", Min = 0, Max = 255, Help = false } )
end
if CLIENT then
language.Add( "Tool.sh_paneladd.name", "Panel Add" )
language.Add( "Tool.sh_paneladd.desc", "Same as /paneladd" )
language.Add( "Tool.sh_paneladd.left", "Primary: Add Panel" )
language.Add( "Tool.sh_paneladd.right", "Right Click: Remove Panel" )
language.Add( "Tool.sh_paneladd.reload", "Nothing." )
end

View File

@@ -0,0 +1,84 @@
--[[
| 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 = "HL2RP Staff QoL"
TOOL.Name = "Persist"
TOOL.RequiresTraceHit = true
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
local function GetRealModel(entity)
return entity:GetClass() == "prop_effect" and entity.AttachedEntity:GetModel() or entity:GetModel()
end
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands") then return false end
local entity = trace.Entity
if !entity or entity and !IsValid(entity) then return end
if entity:IsPlayer() or entity:IsVehicle() or entity.bNoPersist then return end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if !ix.plugin.list then return end
if !ix.plugin.list["persistence"] then return end
if !ix.plugin.list["persistence"].stored then return end
local lampCount = 0
for _, v in pairs(ix.plugin.list["persistence"].stored) do
if IsValid(v) and v:GetClass() == "gmod_lamp" then
lampCount = lampCount + 1
end
end
if !entity:GetNetVar("Persistent") then
if entity:GetClass() == "gmod_lamp" and lampCount >= ix.config.Get("maxLamps", 1) then
return self:GetOwner():Notify("Max persisted lamps reached.")
end
ix.plugin.list["persistence"].stored[#ix.plugin.list["persistence"].stored + 1] = entity
entity:SetNetVar("Persistent", true)
ix.saveEnts:SaveEntity(entity)
ix.log.Add(self:GetOwner(), "persist", GetRealModel(entity), true)
self:GetOwner():Notify("You persisted this entity.")
else
for k, v in ipairs(ix.plugin.list["persistence"].stored) do
if (v == entity) then
table.remove(ix.plugin.list["persistence"].stored, k)
break
end
end
entity:SetNetVar("Persistent", false)
ix.saveEnts:DeleteEntity(entity)
ix.log.Add(self:GetOwner(), "persist", GetRealModel(entity), false)
self:GetOwner():Notify("You unpersisted this entity.")
end
end
end
if CLIENT then
language.Add( "Tool.sh_persist.name", "Persist" )
language.Add( "Tool.sh_persist.desc", "Same as persist in context menu" )
language.Add( "Tool.sh_persist.left", "Primary: Persist/Unpersist" )
language.Add( "Tool.sh_persist.right", "Nothing." )
language.Add( "Tool.sh_persist.reload", "Nothing." )
end

View File

@@ -0,0 +1,79 @@
--[[
| 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 = "HL2RP Staff QoL"
TOOL.Name = "Text Add"
TOOL.RequiresTraceHit = true
TOOL.ClientConVar[ "text" ] = ""
TOOL.ClientConVar[ "scale" ] = 1
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(self:GetOwner(), "Helix - Basic Admin Commands") then return false end
local position = trace.HitPos
local angles = trace.HitNormal:Angle()
angles:RotateAroundAxis(angles:Up(), 90)
angles:RotateAroundAxis(angles:Forward(), 90)
if !ix.plugin.list then return end
if !ix.plugin.list["3dtext"] then return end
if !ix.plugin.list["3dtext"].AddText then return end
local text = self:GetClientInfo( "text", "" )
local scale = self:GetClientNumber( "scale", 0 )
local index = ix.plugin.list["3dtext"]:AddText(position + angles:Up() * 0.1, angles, text, scale)
undo.Create("ix3dText")
undo.SetPlayer(self:GetOwner())
undo.AddFunction(function()
if (ix.plugin.list["3dtext"]:RemoveTextByID(index)) then
ix.log.Add(self:GetOwner(), "undo3dText")
end
end)
undo.Finish()
return "@textAdded"
end
end
function TOOL:RightClick( trace )
if !ix.plugin.list then return end
if !ix.plugin.list["3dtext"] then return end
if !ix.plugin.list["3dtext"].RemoveText then return end
local position = trace.HitPos + trace.HitNormal * 2
local amount = ix.plugin.list["3dtext"]:RemoveText(position, false)
return "@textRemoved", amount
end
function TOOL.BuildCPanel( CPanel )
CPanel:AddControl( "Header", { Description = "Enter Text!" } )
CPanel:AddControl( "textbox", { Label = "Text", Command = "sh_textadd_text", Help = false } )
CPanel:AddControl( "Slider", { Label = "Scale", Command = "sh_textadd_scale", Type = "Float", Min = 0.001, Max = 5, Help = false } )
end
if CLIENT then
language.Add( "Tool.sh_textadd.name", "Text Add" )
language.Add( "Tool.sh_textadd.desc", "Same as /textadd" )
language.Add( "Tool.sh_textadd.left", "Primary: Add Text" )
language.Add( "Tool.sh_textadd.right", "Right Click: Remove Text." )
language.Add( "Tool.sh_textadd.reload", "Nothing." )
end