mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
273 lines
7.6 KiB
Lua
273 lines
7.6 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/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
-- 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")
|