Files
wnsrc/gamemodes/darkrp/plugins/smuggler/cl_plugin.lua

273 lines
7.6 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/
--]]
-- luacheck: globals SMUGGLER_TEXT
-- luacheck: read globals SMUGGLER_BUY SMUGGLER_SELL SMUGGLER_BOTH SMUGGLER_WELCOME SMUGGLER_LEAVE SMUGGLER_NOTRADE SMUGGLER_PRICE
-- luacheck: read globals SMUGGLER_STOCK SMUGGLER_MODE SMUGGLER_MAXSTOCK SMUGGLER_SELLANDBUY SMUGGLER_SELLONLY SMUGGLER_BUYONLY
local PLUGIN = PLUGIN
SMUGGLER_TEXT = {}
SMUGGLER_TEXT[SMUGGLER_SELLANDBUY] = "smugglerBoth"
SMUGGLER_TEXT[SMUGGLER_BUYONLY] = "smugglerBuy"
SMUGGLER_TEXT[SMUGGLER_SELLONLY] = "smugglerSell"
net.Receive("ixSmugglerOpen", function()
local entity = net.ReadEntity()
if (!IsValid(entity)) then
return
end
entity.money = net.ReadUInt(16)
entity.maxStock = net.ReadUInt(16)
entity.pickupLocation = net.ReadString()
entity.items = net.ReadTable()
entity.stashList = net.ReadTable()
ix.gui.smuggler = vgui.Create("ixSmuggler")
ix.gui.smuggler:SetReadOnly(false)
ix.gui.smuggler:Setup(entity)
end)
net.Receive("ixSmugglerEditor", function()
local entity = net.ReadEntity()
if (!IsValid(entity) or !CAMI.PlayerHasAccess(LocalPlayer(), "Helix - Manage Smugglers", nil)) then
return
end
entity.money = net.ReadUInt(16)
entity.maxStock = net.ReadUInt(16)
entity.items = net.ReadTable()
entity.messages = net.ReadTable()
ix.gui.smuggler = vgui.Create("ixSmuggler")
ix.gui.smuggler:SetReadOnly(true)
ix.gui.smuggler:Setup(entity)
ix.gui.smugglerEditor = vgui.Create("ixSmugglerEditor")
end)
net.Receive("ixSmugglerEdit", function()
local panel = ix.gui.smuggler
if (!IsValid(panel)) then
return
end
local entity = panel.entity
if (!IsValid(entity)) then
return
end
local key = net.ReadString()
local data = net.ReadType()
if (key == "mode") then
entity.items[data[1]] = entity.items[data[1]] or {}
entity.items[data[1]][SMUGGLER_MODE] = data[2]
if (!data[2]) then
panel:removeItem(data[1])
elseif (data[2] == SMUGGLER_SELLANDBUY) then
panel:addItem(data[1])
else
panel:addItem(data[1], data[2] == SMUGGLER_SELLONLY and "selling" or "buying")
panel:removeItem(data[1], data[2] == SMUGGLER_SELLONLY and "buying" or "selling")
end
elseif (key == "stockMax") then
entity.maxStock = data
for k in pairs(entity.items) do
panel:addItem(k)
end
elseif (key == "stock") then
local uniqueID = data[1]
local value = data[2]
entity.items[uniqueID] = entity.items[uniqueID] or {}
entity.items[uniqueID][SMUGGLER_STOCK] = value
end
end)
net.Receive("ixSmugglerEditFinish", function()
local panel = ix.gui.smuggler
local editor = ix.gui.smugglerEditor
if (!IsValid(panel) or !IsValid(editor)) then
return
end
local entity = panel.entity
if (!IsValid(entity)) then
return
end
local key = net.ReadString()
local data = net.ReadType()
if (key == "name") then
editor.name:SetText(data)
elseif (key == "description") then
editor.description:SetText(data)
elseif (key == "mode") then
if (data[2] == nil) then
editor.lines[data[1]]:SetValue(3, L"none")
else
editor.lines[data[1]]:SetValue(3, L(SMUGGLER_TEXT[data[2]]))
end
elseif (key == "stock") then
local current, max = entity:GetStock(data)
if (max == entity.maxStock) then
editor.lines[data]:SetValue(4, current)
else
editor.lines[data]:SetValue(4, current.."/"..max)
end
elseif (key == "stockMax") then
for k, v in pairs(editor.lines) do
local current, max = entity:GetStock(k)
if (max == entity.maxStock) then
v:SetValue(5, current)
else
v:SetValue(5, current.."/"..max)
end
end
elseif (key == "model") then
editor.model:SetText(entity:GetModel())
elseif (key == "stashList") then
local lines = editor.stashList:GetLines()
for k, v in pairs(lines) do
if (k != 1) then
editor.stashList:RemoveLine(k)
end
end
for k, v in pairs(data) do
editor.stashList:AddLine(v)
end
end
surface.PlaySound("buttons/button14.wav")
end)
net.Receive("ixSmugglerMoney", function()
local panel = ix.gui.smuggler
if (!IsValid(panel)) then
return
end
local entity = panel.entity
if (!IsValid(entity)) then
return
end
local value = net.ReadUInt(16)
value = value != -1 and value or nil
entity.money = value
local editor = ix.gui.smugglerEditor
if (IsValid(editor)) then
local useMoney = tonumber(value) != nil
editor.money:SetDisabled(!useMoney)
editor.money:SetEnabled(useMoney)
editor.money:SetText(useMoney and value or "")
end
end)
net.Receive("ixSmugglerStock", function()
local panel = ix.gui.smuggler
if (!IsValid(panel)) then
return
end
local entity = panel.entity
if (!IsValid(entity)) then
return
end
local uniqueID = net.ReadString()
local amount = net.ReadUInt(16)
entity.items[uniqueID] = entity.items[uniqueID] or {}
entity.items[uniqueID][SMUGGLER_STOCK] = amount
local editor = ix.gui.smugglerEditor
if (IsValid(editor)) then
local _, max = entity:GetStock(uniqueID)
if (max == entity.maxStock) then
editor.lines[uniqueID]:SetValue(4, amount)
else
editor.lines[uniqueID]:SetValue(4, amount.."/"..max)
end
end
end)
net.Receive("ixSmugglerAddItem", function()
local uniqueID = net.ReadString()
if (IsValid(ix.gui.smuggler)) then
ix.gui.smuggler:addItem(uniqueID, "buying")
end
end)
netstream.Hook("ixSmugglingPickupItems", function(items)
LocalPlayer().pickupItems = items
vgui.Create("PickupCache")
end)
netstream.Hook("ixSmugglingCacheUIDs", function(cacheIDList)
PLUGIN.cacheIDList = cacheIDList
end)
netstream.Hook("ixSmugglerUpdateLocation", function(entity, location)
entity.pickupLocation = location
if (IsValid(ix.gui.smuggler) and ix.gui.smuggler.entity == entity) then
ix.gui.smuggler.smugglerSellDeliver:SetText(L("smugglerDeliverTo", entity.pickupLocation))
end
end)
netstream.Hook("ixShowStashWaypoints", function(waypoints, stashEntities)
LocalPlayer().ixStashWaypoints = waypoints
LocalPlayer().ixStashEntities = stashEntities
end)
local function cacheESP(client, entity, x, y, factor)
ix.util.DrawText("Pickup Cache - "..(PLUGIN.cacheIDList[entity:EntIndex()] and PLUGIN.cacheIDList[entity:EntIndex()].uniqueID or "no id set"), x, y - math.max(10, 32 * factor), color_white, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, nil, factor)
end
ix.observer:RegisterESPType("ix_pickupcache", cacheESP, "cache", "Show Pickup Cache ESP")
local function smugglerESP(client, entity, x, y, factor)
cam.Start3D()
render.SuppressEngineLighting(true)
render.SetColorModulation(1, 1, 1)
render.SetBlend(factor)
entity:DrawModel()
render.MaterialOverride()
render.SuppressEngineLighting(false)
cam.End3D()
ix.util.DrawText("Smuggler - "..entity:GetDisplayName(), x, y - math.max(10, 32 * factor), color_white, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, nil, factor)
end
ix.observer:RegisterESPType("ix_smuggler", smugglerESP, "smuggler")