mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
597 lines
17 KiB
Lua
597 lines
17 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/
|
|
--]]
|
|
|
|
|
|
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
|
|
}) |