Files
VnUtest/garrysmod/addons/permaprops/lua/weapons/gmod_tool/stools/permaprops.lua
2026-03-31 10:27:04 +03:00

157 lines
4.8 KiB
Lua

/*
PermaProps
Created by Entoros, June 2010
Facepunch: http://www.facepunch.com/member.php?u=180808
Modified By Malboro 28 / 12 / 2012
Ideas:
Make permaprops cleanup-able
Errors:
Errors on die
Remake:
By Malboro the 28/12/2012
*/
TOOL.Category = "Props Tool"
TOOL.Name = "PermaProps"
TOOL.Command = nil
TOOL.ConfigName = ""
if CLIENT then
language.Add("Tool.permaprops.name", "PermaProps")
language.Add("Tool.permaprops.desc", "Save a props permanently")
language.Add("Tool.permaprops.0", "LeftClick: Add RightClick: Remove Reload: Update")
surface.CreateFont("PermaPropsToolScreenFont", { font = "Arial", size = 40, weight = 1000, antialias = true, additive = false })
surface.CreateFont("PermaPropsToolScreenSubFont", { font = "Arial", size = 30, weight = 1000, antialias = true, additive = false })
end
function TOOL:LeftClick(trace)
if CLIENT then return true end
local ent = trace.Entity
local ply = self:GetOwner()
if not PermaProps then ply:ChatPrint( "ERROR: Lib not found" ) return end
if !PermaProps.HasPermission( ply, "Save") then return end
if not ent:IsValid() then ply:ChatPrint( "That is not a valid entity !" ) return end
if ent:IsPlayer() then ply:ChatPrint( "That is a player !" ) return end
if ent.PermaProps then ply:ChatPrint( "That entity is already permanent !" ) return end
local content = PermaProps.PPGetEntTable(ent)
if not content then return end
local max = tonumber(sql.QueryValue("SELECT MAX(id) FROM permaprops;"))
if not max then max = 1 else max = max + 1 end
local new_ent = PermaProps.PPEntityFromTable(content, max)
if !new_ent or !new_ent:IsValid() then return end
PermaProps.SparksEffect( ent )
PermaProps.SQL.Query("INSERT INTO permaprops (id, map, content) VALUES(NULL, ".. sql.SQLStr(game.GetMap()) ..", ".. sql.SQLStr(util.TableToJSON(content)) ..");")
ply:ChatPrint("You saved " .. ent:GetClass() .. " with model ".. ent:GetModel() .. " to the database.")
ent:Remove()
return true
end
function TOOL:RightClick(trace)
if CLIENT then return true end
local ent = trace.Entity
local ply = self:GetOwner()
if not PermaProps then ply:ChatPrint( "ERROR: Lib not found" ) return end
if !PermaProps.HasPermission( ply, "Delete") then return end
if not ent:IsValid() then ply:ChatPrint( "That is not a valid entity !" ) return end
if ent:IsPlayer() then ply:ChatPrint( "That is a player !" ) return end
if not ent.PermaProps then ply:ChatPrint( "That is not a PermaProp !" ) return end
if not ent.PermaProps_ID then ply:ChatPrint( "ERROR: ID not found" ) return end
PermaProps.SQL.Query("DELETE FROM permaprops WHERE id = ".. ent.PermaProps_ID ..";")
ply:ChatPrint("You erased " .. ent:GetClass() .. " with a model of " .. ent:GetModel() .. " from the database.")
ent:Remove()
return true
end
function TOOL:Reload(trace)
if CLIENT then return true end
if not PermaProps then self:GetOwner():ChatPrint( "ERROR: Lib not found" ) return end
if (not trace.Entity:IsValid() and PermaProps.HasPermission( self:GetOwner(), "Update")) then self:GetOwner():ChatPrint( "You have reload all PermaProps !" ) PermaProps.ReloadPermaProps() return false end
if trace.Entity.PermaProps then
local ent = trace.Entity
local ply = self:GetOwner()
if !PermaProps.HasPermission( ply, "Update") then return end
if ent:IsPlayer() then ply:ChatPrint( "That is a player !" ) return end
local content = PermaProps.PPGetEntTable(ent)
if not content then return end
PermaProps.SQL.Query("UPDATE permaprops set content = ".. sql.SQLStr(util.TableToJSON(content)) .." WHERE id = ".. ent.PermaProps_ID .." AND map = ".. sql.SQLStr(game.GetMap()) .. ";")
local new_ent = PermaProps.PPEntityFromTable(content, ent.PermaProps_ID)
if !new_ent or !new_ent:IsValid() then return end
PermaProps.SparksEffect( ent )
ply:ChatPrint("You updated the " .. ent:GetClass() .. " in the database.")
ent:Remove()
else
return false
end
return true
end
function TOOL.BuildCPanel(panel)
panel:AddControl("Header",{Text = "PermaProps", Description = "PermaProps\n\nSaves entities across map changes\n"})
panel:AddControl("Button",{Label = "Open Configuration Menu", Command = "pp_cfg_open"})
end
function TOOL:DrawToolScreen(width, height)
if SERVER then return end
surface.SetDrawColor(17, 148, 240, 255)
surface.DrawRect(0, 0, 256, 256)
surface.SetFont("PermaPropsToolScreenFont")
local w, h = surface.GetTextSize(" ")
surface.SetFont("PermaPropsToolScreenSubFont")
local w2, h2 = surface.GetTextSize(" ")
draw.SimpleText("PermaProps", "PermaPropsToolScreenFont", 128, 100, Color(224, 224, 224, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, Color(17, 148, 240, 255), 4)
draw.SimpleText("By Malboro", "PermaPropsToolScreenSubFont", 128, 128 + (h + h2) / 2 - 4, Color(224, 224, 224, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, Color(17, 148, 240, 255), 4)
end