Files
wnsrc/gamemodes/helix/plugins/willardcontainers/sh_properties.lua

597 lines
17 KiB
Lua
Raw Normal View History

2024-08-04 23:54:45 +03:00
--[[
| 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/
--]]
properties.Add("wncontainer_checkowner", {
MenuLabel = "Check Owner",
Order = 399,
MenuIcon = "icon16/user.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer") then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_checkowner", entity)) then return false end
return true
end,
Action = function(self, entity)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local contType = entity:GetType()
if (contType == entity.PUBLIC) then
client:NotifyLocalized("containerTypePublic")
return
elseif (contType == entity.GROUP) then
client:NotifyLocalized("containerTypeGroup")
return
elseif (contType == entity.CLEANUP or contType == entity.MANCLEANUP) then
client:NotifyLocalized("containerTypeCleanup", os.date("%Y-%m-%d %X", entity:GetCleanup()))
return
elseif (contType == entity.PKHOLD) then
client:NotifyLocalized("containerTypePKHold", os.date("%Y-%m-%d %X", entity:GetCleanup()))
return
end
local steamID = entity.owner
local ownerEnt = player.GetBySteamID64(steamID) or false
if (ownerEnt and IsValid(ownerEnt)) then
client:NotifyLocalized("containerTypePrivateOnline", ownerEnt:SteamName(), util.SteamIDFrom64(steamID))
else
client:NotifyLocalized("containerTypePrivateOffline", entity.owner, util.SteamIDFrom64(steamID), os.date("%Y-%m-%d", entity.ownerLastSeen))
end
end
})
properties.Add("wncontainer_view", {
MenuLabel = "#View Container",
Order = 11,
MenuIcon = "icon16/eye.png",
Filter = function(self, target, client)
return (target:GetClass() == "ix_container" or target:GetClass() == "ix_wncontainer")
and CAMI.PlayerHasAccess(client or LocalPlayer(), "Helix - View Inventory")
and hook.Run("CanProperty", client or LocalPlayer(), "wncontainer_view", target) != false
end,
Action = function(self, target)
self:MsgStart()
net.WriteEntity(target)
self:MsgEnd()
end,
Receive = function(self, length, client)
local target = net.ReadEntity()
if (!IsValid(target)) then return end
if (!self:Filter(target, client)) then return end
local inventory = target:GetInventory()
if (inventory) then
local name = target:GetDisplayName()
ix.storage.Open(client, inventory, {
name = name,
entity = target,
bMultipleUsers = true,
searchTime = 0,
data = {money = target:GetMoney()},
OnPlayerClose = function()
ix.log.Add(client, "containerAClose", name, inventory:GetID())
end
})
ix.log.Add(client, "containerAOpen", name, inventory:GetID())
end
end
})
properties.Add("wncontainer_create", {
MenuLabel = "Make Container (new)",
Order = 404,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "prop_physics" and entity:GetClass() != "ix_container") then return false end
if (!gamemode.Call("CanProperty", client, "ixContainerCreate", entity)) then return false end
local model = string.lower(entity:GetModel())
if (!ix.container.stored[model]) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
if !entity or entity and !IsValid(entity) then return end
if (entity:GetClass() == "ix_container" and entity:GetLocked()) then
Derma_Query("Do you wish to make this a private container?", "Make private container", "Yes", function()
local characters = {}
local pos = LocalPlayer():GetPos()
for k, v in ipairs(player.GetAll()) do
if (v:GetCharacter()) then
characters[#characters + 1] = {text = v:Name(), value = v, dist = v:GetPos():DistToSqr(pos)}
end
end
table.SortByMember(characters, "dist", true)
for k, v in ipairs(characters) do
characters[k].text = Schema:ZeroNumber(k, 2)..". "..v.text
end
Derma_Select(L("containerOwner"), L("containerOwnerTitle"), characters, L("containerSelectOwner"),
"Confirm", function(value, text)
if (!value) then return end
self:MsgStart()
net.WriteEntity(entity)
net.WriteBool(true)
net.WriteEntity(value)
self:MsgEnd()
end,
"Cancel")
end, "No", function()
Derma_Query("Do you wish to make this a group/faction container?", "Make group/faction container", "Yes", function()
Derma_StringRequest("Group/Faction Name", "Please enter the group/faction name:", "", function(text)
if (text and text != "") then
self:MsgStart()
net.WriteEntity(entity)
net.WriteBool(false)
net.WriteBool(true)
net.WriteString(text)
self:MsgEnd()
end
end, function()
end)
end, "No", function()
self:MsgStart()
net.WriteEntity(entity)
net.WriteBool(false)
net.WriteBool(false)
self:MsgEnd()
end)
end)
else
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local model = string.lower(entity:GetModel())
local data = ix.container.stored[model]
local container = ents.Create("ix_wncontainer")
container:SetPos(entity:GetPos())
container:SetAngles(entity:GetAngles())
container:SetModel(model)
container:Spawn()
local physObj = container:GetPhysicsObject()
if (IsValid(physObj)) then
physObj:EnableMotion(false)
physObj:Sleep()
end
if (entity:GetClass() == "ix_container") then
local inventory = entity:GetInventory()
container:SetInventory(inventory)
container:SetDisplayName(entity:GetDisplayName())
container:SetMoney(entity:GetMoney())
if (net.ReadBool()) then
local target = net.ReadEntity()
container:ChangeType(container.PRIVATE, target)
container:SetPassword(entity:GetPassword())
elseif (net.ReadBool()) then
local text = net.ReadString()
if (text != "") then
container:ChangeType(container.GROUP, text)
container:SetPassword(entity:GetPassword())
end
end
if (ix.saveEnts) then
ix.saveEnts:SaveEntity(container)
end
entity:SetID(0)
else
ix.inventory.New(0, "container:" .. model, function(inventory)
-- we'll technically call this a bag since we don't want other bags to go inside
inventory.vars.isBag = true
inventory.vars.isContainer = true
inventory.vars.entity = container
if (IsValid(container)) then
container:SetInventory(inventory)
if (ix.saveEnts) then
ix.saveEnts:SaveEntity(container)
end
end
end)
end
entity:Remove()
ix.log.Add(client, "containerSpawned", data.name)
end
})
properties.Add("wncontainer_setname", {
MenuLabel = "Set Name",
Order = 400,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer") then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setname", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
Derma_StringRequest(L("containerNameWrite"), "", "", function(text)
self:MsgStart()
net.WriteEntity(entity)
net.WriteString(text)
self:MsgEnd()
end)
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local name = net.ReadString()
local oldName = entity:GetDisplayName()
if (name:len() != 0) then
entity:SetDisplayName(name)
client:NotifyLocalized("containerName", name)
else
local definition = ix.container.stored[entity:GetModel():lower()]
entity:SetDisplayName(definition.name)
client:NotifyLocalized("containerNameRemove")
end
if (ix.saveEnts) then
ix.saveEnts:SaveEntity(self)
end
local inventory = entity:GetInventory()
ix.log.Add(client, "containerNameNew", oldName, inventory:GetID(), name)
end
})
properties.Add("wncontainer_setpassword", {
MenuLabel = "Set Password",
Order = 401,
MenuIcon = "icon16/lock_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or !entity:CanHavePassword()) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setpassword", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
Derma_StringRequest(L("containerPasswordWrite"), "", "", function(text)
self:MsgStart()
net.WriteEntity(entity)
net.WriteString(text)
self:MsgEnd()
end)
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local password = net.ReadString()
entity:SetPassword(password)
if (password:len() != 0) then
client:NotifyLocalized("containerPassword", password)
else
client:NotifyLocalized("containerPasswordRemove")
end
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerPasswordNew", name, inventory:GetID(), password:len() != 0)
end
})
properties.Add("wncontainer_changepassword_private", {
MenuLabel = "Change Password",
Order = 402,
MenuIcon = "icon16/lock_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or entity:GetType() != entity.PRIVATE or !entity:GetLocked()) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setpassword", entity)) then return false end
local character = client:GetCharacter()
if (!character) then return false end
if (character:GetID() != entity:GetCharID()) then return false end
return true
end,
Action = function(self, entity)
Derma_StringRequest(L("containerPasswordWrite"), "", "", function(text)
self:MsgStart()
net.WriteEntity(entity)
net.WriteString(text)
self:MsgEnd()
end)
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local password = net.ReadString()
entity:SetPassword(password)
if (password:len() != 0) then
client:NotifyLocalized("containerPassword", password)
else
client:NotifyLocalized("containerPasswordRemove")
end
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerPasswordNew", name, inventory:GetID(), password:len() != 0)
end
})
properties.Add("wncontainer_setprivate", {
MenuLabel = "Set Type: Private",
Order = 410,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or entity:GetType() == entity.PRIVATE) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setprivate", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
local characters = {}
local pos = LocalPlayer():GetPos()
for k, v in ipairs(player.GetAll()) do
if (v:GetCharacter()) then
characters[#characters + 1] = {text = v:Name(), value = v, dist = v:GetPos():DistToSqr(pos)}
end
end
table.SortByMember(characters, "dist", true)
for k, v in ipairs(characters) do
characters[k].text = Schema:ZeroNumber(k, 2)..". "..v.text
end
Derma_Select(L("containerOwner"), L("containerOwnerTitle"), characters, L("containerSelectOwner"),
"confirm", function(value, text)
if (!value) then return end
self:MsgStart()
net.WriteEntity(entity)
net.WriteEntity(value)
self:MsgEnd()
end,
"cancel")
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local target = net.ReadEntity()
entity:ChangeType(entity.PRIVATE, target)
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerSetPrivate", name, inventory:GetID(), target:GetCharacter())
end
})
properties.Add("wncontainer_togglepremium", {
MenuLabel = "Toggle Premium",
Order = 404,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or entity:GetType() != entity.PRIVATE) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_togglepremium", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
entity:TogglePremium()
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerSetPremium", name, inventory:GetID(), entity:GetPremium())
end
})
properties.Add("wncontainer_setgroup", {
MenuLabel = "Set Type: Group/Faction",
Order = 411,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or entity:GetType() == entity.GROUP) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setgroup", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
Derma_StringRequest(L("containerGroupTitle"), L("containerGroup"), "", function(text)
self:MsgStart()
net.WriteEntity(entity)
net.WriteString(text)
self:MsgEnd()
end)
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local text = net.ReadString()
if (text == "") then return end
entity:ChangeType(entity.GROUP, text)
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerSetGroup", name, inventory:GetID(), text)
end
})
properties.Add("wncontainer_setpublic", {
MenuLabel = "Set Type: Public",
Order = 412,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or entity:GetType() == entity.PUBLIC) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setpublic", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
Derma_Query(L("containerPublicAreYouSure"), L("containerPublicTitle"), L("yes"), function(text)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end, L("no"))
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
entity:ChangeType(entity.PUBLIC)
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerSetPublic", name, inventory:GetID())
end
})
properties.Add("wncontainer_setadmintext", {
MenuLabel = "Set Admin Text",
Order = 403,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or entity:GetClass() != entity.PUBLIC) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setadmintext", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
Derma_StringRequest(L("containerAdminTextTitle"), L("containerAdminText"), entity:GetAdminText(), function(text)
self:MsgStart()
net.WriteEntity(entity)
net.WriteString(text)
self:MsgEnd()
end)
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
local text = net.ReadString()
container:UpdateAdminText(text)
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerSetAdminText", name, inventory:GetID(), text)
end
})
properties.Add("wncontainer_setpublic", {
MenuLabel = "Set Type: Cleanup",
Order = 413,
MenuIcon = "icon16/tag_blue_edit.png",
Filter = function(self, entity, client)
if (entity:GetClass() != "ix_wncontainer" or entity:GetType() == entity.MANCLEANUP) then return false end
if (!gamemode.Call("CanProperty", client, "wncontainer_setpublic", entity)) then return false end
return CAMI.PlayerHasAccess(client, "Helix - Manage Containers")
end,
Action = function(self, entity)
Derma_Query(L("containerCleanupAreYouSure"), L("containerCleanupTitle"), L("yes"), function(text)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end, L("no"))
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
entity:ChangeType(entity.MANCLEANUP)
local name = entity:GetDisplayName()
local inventory = entity:GetInventory()
ix.log.Add(client, "containerSetManCleanup", name, inventory:GetID())
end
})