157 lines
4.8 KiB
Lua
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
|