mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
221
gamemodes/ixhl2rp/plugins/ln_vendingmachines/sv_plugin.lua
Normal file
221
gamemodes/ixhl2rp/plugins/ln_vendingmachines/sv_plugin.lua
Normal file
@@ -0,0 +1,221 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
util.AddNetworkString("ixVendingMachineManager")
|
||||
util.AddNetworkString("ixOpenVendingInventory")
|
||||
util.AddNetworkString("ixSetVendingMachineLabel")
|
||||
util.AddNetworkString("ixToggleVendingMachineButton")
|
||||
util.AddNetworkString("ixSetVendingMachinePrice")
|
||||
util.AddNetworkString("ixSelectVendingMachineCID")
|
||||
util.AddNetworkString("ixCollectVendingMachineCredits")
|
||||
util.AddNetworkString("ixSetVendingMachineSkin")
|
||||
|
||||
local fields = {
|
||||
"credits", "labels", "buttons", "prices", "stocks"
|
||||
}
|
||||
function PLUGIN:RegisterSaveEnts()
|
||||
ix.saveEnts:RegisterEntity("ix_customvendingmachine", true, true, true, {
|
||||
OnSave = function(entity, data) --OnSave
|
||||
local inventory = ix.item.inventories[entity:GetID()]
|
||||
data.invID = inventory:GetID()
|
||||
data.motion = false
|
||||
for k, v in ipairs(fields) do
|
||||
data[v] = entity:GetNetVar(v)
|
||||
end
|
||||
end,
|
||||
OnRestore = function(entity, data) --OnRestore
|
||||
ix.inventory.Restore(data.invID, 10, 8, function(inventory)
|
||||
inventory.vars.isBag = true
|
||||
inventory.vars.isVendingMachine = true
|
||||
|
||||
if (IsValid(entity)) then
|
||||
entity:SetID(inventory:GetID())
|
||||
entity:UpdateStocks()
|
||||
end
|
||||
end)
|
||||
|
||||
for k, v in ipairs(fields) do
|
||||
entity:SetNetVar(v, data[v])
|
||||
end
|
||||
end,
|
||||
ShouldSave = function(entity) --ShouldSave
|
||||
local inventory = ix.item.inventories[entity:GetID()]
|
||||
return inventory:GetID() >= 1
|
||||
end,
|
||||
ShouldRestore = function(data) --ShouldRestore
|
||||
return data.invID >= 1
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
-- A function to save the Vending Machines.
|
||||
function PLUGIN:SaveVendingMachines()
|
||||
local data = {}
|
||||
|
||||
for _, v in ipairs(ents.FindByClass("ix_customvendingmachine")) do
|
||||
local inventory = ix.item.inventories[v:GetID()]
|
||||
|
||||
data[#data + 1] = {
|
||||
v:GetPos(),
|
||||
v:GetAngles(),
|
||||
inventory:GetID(),
|
||||
v:GetNetVar("credits"),
|
||||
v:GetNetVar("labels"),
|
||||
v:GetNetVar("buttons"),
|
||||
v:GetNetVar("prices"),
|
||||
v:GetNetVar("stocks"),
|
||||
v:GetSkin()
|
||||
}
|
||||
end
|
||||
|
||||
ix.data.Set("customVendingMachines", data)
|
||||
end
|
||||
|
||||
-- A function to load the Vending Machines.
|
||||
function PLUGIN:LoadVendingMachines()
|
||||
for _, v in ipairs(ix.data.Get("customVendingMachines") or {}) do
|
||||
local inventoryID = tonumber(v[3])
|
||||
|
||||
if (!inventoryID or inventoryID < 1) then
|
||||
ErrorNoHalt(string.format("[Helix] Attempted to restore container inventory with invalid inventory ID '%s'\n", tostring(inventoryID)))
|
||||
|
||||
continue
|
||||
end
|
||||
|
||||
local entity = ents.Create("ix_customvendingmachine")
|
||||
entity:SetPos(v[1])
|
||||
entity:SetAngles(v[2])
|
||||
entity:Spawn()
|
||||
|
||||
ix.inventory.Restore(inventoryID, 10, 8, function(inventory)
|
||||
inventory.vars.isBag = true
|
||||
inventory.vars.isVendingMachine = true
|
||||
|
||||
if (IsValid(entity)) then
|
||||
entity:SetID(inventory:GetID())
|
||||
entity:UpdateStocks()
|
||||
end
|
||||
end)
|
||||
|
||||
entity:SetNetVar("credits", v[4])
|
||||
entity:SetNetVar("labels", v[5])
|
||||
entity:SetNetVar("buttons", v[6])
|
||||
entity:SetNetVar("prices", v[7])
|
||||
entity:SetNetVar("stocks", v[8])
|
||||
|
||||
entity:SetSkin(v[9])
|
||||
|
||||
local physicsObject = entity:GetPhysicsObject()
|
||||
|
||||
if (IsValid(physicsObject)) then
|
||||
physicsObject:EnableMotion(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
net.Receive("ixOpenVendingInventory", function(_, client)
|
||||
local machine = net.ReadEntity()
|
||||
|
||||
if (!IsValid(client.ixVendingMachineEdit) or machine != client.ixVendingMachineEdit) then return end
|
||||
|
||||
local inventory = ix.item.inventories[machine:GetID()]
|
||||
|
||||
if (inventory) then
|
||||
ix.storage.Open(client, inventory, {
|
||||
name = "Vending Machine",
|
||||
entity = machine,
|
||||
searchTime = 0
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
net.Receive("ixSetVendingMachineLabel", function(_, client)
|
||||
local machine = net.ReadEntity()
|
||||
|
||||
if (!IsValid(client.ixVendingMachineEdit) or machine != client.ixVendingMachineEdit) then return end
|
||||
|
||||
local slot = net.ReadFloat()
|
||||
local label = net.ReadString()
|
||||
label = string.Left(label, 100)
|
||||
|
||||
machine:SetData("labels", slot, label)
|
||||
ix.saveEnts:SaveEntity(machine)
|
||||
end)
|
||||
|
||||
net.Receive("ixToggleVendingMachineButton", function(_, client)
|
||||
local machine = net.ReadEntity()
|
||||
|
||||
if (!IsValid(client.ixVendingMachineEdit) or machine != client.ixVendingMachineEdit) then return end
|
||||
|
||||
local slot = net.ReadFloat()
|
||||
|
||||
local buttons = machine:GetNetVar("buttons", {})
|
||||
buttons[slot] = !buttons[slot]
|
||||
|
||||
machine:SetNetVar("buttons", buttons)
|
||||
ix.saveEnts:SaveEntity(machine)
|
||||
end)
|
||||
|
||||
net.Receive("ixSetVendingMachinePrice", function(_, client)
|
||||
local machine = net.ReadEntity()
|
||||
|
||||
if (!IsValid(client.ixVendingMachineEdit) or machine != client.ixVendingMachineEdit) then return end
|
||||
|
||||
local slot = net.ReadFloat()
|
||||
local price = net.ReadFloat()
|
||||
|
||||
machine:SetData("prices", slot, price)
|
||||
ix.saveEnts:SaveEntity(machine)
|
||||
end)
|
||||
|
||||
net.Receive("ixSelectVendingMachineCID", function(_, client)
|
||||
if (net.ReadBool()) then
|
||||
local entity = net.ReadEntity()
|
||||
|
||||
if (IsValid(entity) and IsValid(client) and client == entity.cidSelection) then
|
||||
local idCard = net.ReadUInt(16)
|
||||
local idCardItem = ix.item.instances[idCard]
|
||||
|
||||
idCardItem:LoadOwnerGenericData(entity.CheckIDCard, entity.CheckIDError, client, entity, client.isCollecting)
|
||||
entity.cidSelection = nil
|
||||
end
|
||||
else
|
||||
local entity = net.ReadEntity()
|
||||
|
||||
if (IsValid(entity)) then
|
||||
entity:EmitSound("buttons/button2.wav")
|
||||
entity.cidSelection = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
net.Receive("ixCollectVendingMachineCredits", function(_, client)
|
||||
local machine = net.ReadEntity()
|
||||
|
||||
if (!IsValid(client.ixVendingMachineEdit) or machine != client.ixVendingMachineEdit) then return end
|
||||
|
||||
if (machine and IsValid(machine)) then
|
||||
machine:CollectCredits(client)
|
||||
end
|
||||
end)
|
||||
|
||||
net.Receive("ixSetVendingMachineSkin", function(_, client)
|
||||
local machine = net.ReadEntity()
|
||||
|
||||
if (!IsValid(client.ixVendingMachineEdit) or machine != client.ixVendingMachineEdit) then return end
|
||||
|
||||
local skin = net.ReadFloat()
|
||||
|
||||
if (machine and IsValid(machine) and !machine:GetLocked()) then
|
||||
machine:SetSkin(skin)
|
||||
ix.saveEnts:SaveEntity(machine)
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user