mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
137 lines
3.6 KiB
Lua
137 lines
3.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/
|
|||
|
|
--]]
|
|||
|
|
|
|||
|
|
--[[
|
|||
|
|
© AsterionStaff 2022.
|
|||
|
|
This script was created from the developers of the AsterionTeam.
|
|||
|
|
You can get more information from one of the links below:
|
|||
|
|
Site - https://asterion.games
|
|||
|
|
Discord - https://discord.gg/CtfS8r5W3M
|
|||
|
|
|
|||
|
|
developer(s):
|
|||
|
|
|
|||
|
|
——— Chop your own wood and it will warm you twice.
|
|||
|
|
]]--
|
|||
|
|
|
|||
|
|
-- Создаем файл с конфигом, если его нету
|
|||
|
|
if !file.Exists(ImageTool.path .. "/" .. ImageTool.config, "DATA") then
|
|||
|
|
file.Write(ImageTool.path .. "/" .. ImageTool.config, "{}")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
|
|||
|
|
-- Получаем конфиг
|
|||
|
|
function ImageTool:GetConfig()
|
|||
|
|
local data = {}
|
|||
|
|
|
|||
|
|
if file.Exists(ImageTool.path .. "/" .. ImageTool.config, "DATA") then
|
|||
|
|
local info = file.Read(ImageTool.path .. "/" .. ImageTool.config)
|
|||
|
|
|
|||
|
|
data = util.JSONToTable(info)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return data
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Отправляем картинку игроку/игрокам
|
|||
|
|
function ImageTool:SendImage(client, id, data)
|
|||
|
|
data = util.TableToJSON(data)
|
|||
|
|
|
|||
|
|
local compressed = util.Compress(data)
|
|||
|
|
local length = compressed:len()
|
|||
|
|
|
|||
|
|
net.Start("image.SendImage")
|
|||
|
|
net.WriteUInt(length, 32)
|
|||
|
|
net.WriteUInt(id, 32)
|
|||
|
|
net.WriteData(compressed, length)
|
|||
|
|
|
|||
|
|
if IsValid(client) then
|
|||
|
|
net.Send(client)
|
|||
|
|
else
|
|||
|
|
net.Broadcast()
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Сохраняем конфиг
|
|||
|
|
function ImageTool:SaveConfig(data)
|
|||
|
|
data = util.TableToJSON(data)
|
|||
|
|
|
|||
|
|
file.Write(ImageTool.path .. "/" .. ImageTool.config, data)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Добавляем новую картинку в мир
|
|||
|
|
function ImageTool:AddImage(data)
|
|||
|
|
if !data then return end
|
|||
|
|
|
|||
|
|
local config = self:GetConfig() or {}
|
|||
|
|
local map = game.GetMap()
|
|||
|
|
|
|||
|
|
config[map] = config[map] or {}
|
|||
|
|
config[map][#config[map] + 1] = data -- Записываем
|
|||
|
|
|
|||
|
|
self:SaveConfig(config) -- Сохраняем конфиг
|
|||
|
|
self:SendImage(nil, #config[map], data) -- Передаем всем игрокам данную картинку
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Удаляем картинку из мира
|
|||
|
|
function ImageTool:RemoveImage(data)
|
|||
|
|
if !data then return end
|
|||
|
|
|
|||
|
|
local pos = data.position
|
|||
|
|
local config = ImageTool:GetConfig() or {}
|
|||
|
|
local map = game.GetMap()
|
|||
|
|
|
|||
|
|
config[map] = config[map] or {}
|
|||
|
|
|
|||
|
|
-- Находим картинку с наименьшей дистанцией
|
|||
|
|
local images = {}
|
|||
|
|
for k, v in pairs(config[map]) do
|
|||
|
|
if pos:Distance(v.position) <= 200 then
|
|||
|
|
local dist = math.floor(pos:Distance(v.position))
|
|||
|
|
|
|||
|
|
images[dist] = k
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local imagesPack = {}
|
|||
|
|
for k, v in pairs(images) do
|
|||
|
|
if !isnumber(k) then continue end -- number expected err
|
|||
|
|
|
|||
|
|
imagesPack[#imagesPack + 1] = k
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if #imagesPack <= 0 then return end
|
|||
|
|
|
|||
|
|
local min = math.min(unpack(imagesPack))
|
|||
|
|
local imageMin = images[min]
|
|||
|
|
|
|||
|
|
-- Если нашли — удаляем
|
|||
|
|
if imageMin and config[map][imageMin] then
|
|||
|
|
config[map][imageMin] = nil
|
|||
|
|
|
|||
|
|
self:SaveConfig(config)
|
|||
|
|
|
|||
|
|
net.Start("image.RemoveImage")
|
|||
|
|
net.WriteUInt(imageMin, 32)
|
|||
|
|
net.Broadcast()
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Удаляем все картинки из мира
|
|||
|
|
function ImageTool:RemoveImageAll()
|
|||
|
|
local config = ImageTool:GetConfig() or {}
|
|||
|
|
local map = game.GetMap()
|
|||
|
|
|
|||
|
|
config[map] = {}
|
|||
|
|
|
|||
|
|
ImageTool:SaveConfig(config)
|
|||
|
|
|
|||
|
|
net.Start("image.RemoveImageAll")
|
|||
|
|
net.Broadcast()
|
|||
|
|
end
|