mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
128
gamemodes/helix/gamemode/core/sh_data.lua
Normal file
128
gamemodes/helix/gamemode/core/sh_data.lua
Normal file
@@ -0,0 +1,128 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
--- Helper library for reading/writing files to the data folder.
|
||||
-- @module ix.data
|
||||
|
||||
ix.data = ix.data or {}
|
||||
ix.data.stored = ix.data.stored or {}
|
||||
|
||||
-- Create a folder to store data in.
|
||||
file.CreateDir("helix")
|
||||
|
||||
--- Populates a file in the `data/helix` folder with some serialized data.
|
||||
-- @realm shared
|
||||
-- @string key Name of the file to save
|
||||
-- @param value Some sort of data to save
|
||||
-- @bool[opt=false] bGlobal Whether or not to write directly to the `data/helix` folder, or the `data/helix/schema` folder,
|
||||
-- where `schema` is the name of the current schema.
|
||||
-- @bool[opt=false] bIgnoreMap Whether or not to ignore the map and save in the schema folder, rather than
|
||||
-- `data/helix/schema/map`, where `map` is the name of the current map.
|
||||
function ix.data.Set(key, value, bGlobal, bIgnoreMap)
|
||||
-- Get the base path to write to.
|
||||
local path = "helix/" .. (bGlobal and "" or Schema.folder .. "/") .. (bIgnoreMap and "" or game.GetMap() .. "/")
|
||||
|
||||
-- Create the schema folder if the data is not global.
|
||||
if (!bGlobal) then
|
||||
file.CreateDir("helix/" .. Schema.folder .. "/")
|
||||
end
|
||||
|
||||
-- If we're not ignoring the map, create a folder for the map.
|
||||
file.CreateDir(path)
|
||||
-- Write the data using JSON encoding.
|
||||
file.Write(path .. key .. ".txt", util.TableToJSON({value}))
|
||||
|
||||
-- Cache the data value here.
|
||||
ix.data.stored[key] = value
|
||||
|
||||
return path
|
||||
end
|
||||
|
||||
--- Retrieves the contents of a saved file in the `data/helix` folder.
|
||||
-- @realm shared
|
||||
-- @string key Name of the file to load
|
||||
-- @param default Value to return if the file could not be loaded successfully
|
||||
-- @bool[opt=false] bGlobal Whether or not the data is in the `data/helix` folder, or the `data/helix/schema` folder,
|
||||
-- where `schema` is the name of the current schema.
|
||||
-- @bool[opt=false] bIgnoreMap Whether or not to ignore the map and load from the schema folder, rather than
|
||||
-- `data/helix/schema/map`, where `map` is the name of the current map.
|
||||
-- @bool[opt=false] bRefresh Whether or not to skip the cache and forcefully load from disk.
|
||||
-- @return Value associated with the key, or the default that was given if it doesn't exists
|
||||
function ix.data.Get(key, default, bGlobal, bIgnoreMap, bRefresh)
|
||||
-- If it exists in the cache, return the cached value so it is faster.
|
||||
if (!bRefresh) then
|
||||
local stored = ix.data.stored[key]
|
||||
|
||||
if (stored != nil) then
|
||||
return stored
|
||||
end
|
||||
end
|
||||
|
||||
-- Get the path to read from.
|
||||
local path = "helix/" .. (bGlobal and "" or Schema.folder .. "/") .. (bIgnoreMap and "" or game.GetMap() .. "/")
|
||||
-- Read the data from a local file.
|
||||
local contents = file.Read(path .. key .. ".txt", "DATA")
|
||||
|
||||
if (contents and contents != "") then
|
||||
local status, decoded = pcall(util.JSONToTable, contents)
|
||||
|
||||
if (status and decoded) then
|
||||
local value = decoded[1]
|
||||
|
||||
if (value != nil) then
|
||||
return value
|
||||
end
|
||||
end
|
||||
|
||||
-- Backwards compatibility.
|
||||
-- This may be removed in the future.
|
||||
status, decoded = pcall(pon.decode, contents)
|
||||
|
||||
if (status and decoded) then
|
||||
local value = decoded[1]
|
||||
|
||||
if (value != nil) then
|
||||
return value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return default
|
||||
end
|
||||
|
||||
--- Deletes the contents of a saved file in the `data/helix` folder.
|
||||
-- @realm shared
|
||||
-- @string key Name of the file to delete
|
||||
-- @bool[opt=false] bGlobal Whether or not the data is in the `data/helix` folder, or the `data/helix/schema` folder,
|
||||
-- where `schema` is the name of the current schema.
|
||||
-- @bool[opt=false] bIgnoreMap Whether or not to ignore the map and delete from the schema folder, rather than
|
||||
-- `data/helix/schema/map`, where `map` is the name of the current map.
|
||||
-- @treturn bool Whether or not the deletion has succeeded
|
||||
function ix.data.Delete(key, bGlobal, bIgnoreMap)
|
||||
-- Get the path to read from.
|
||||
local path = "helix/" .. (bGlobal and "" or Schema.folder .. "/") .. (bIgnoreMap and "" or game.GetMap() .. "/")
|
||||
-- Read the data from a local file.
|
||||
local contents = file.Read(path .. key .. ".txt", "DATA")
|
||||
|
||||
if (contents and contents != "") then
|
||||
file.Delete(path .. key .. ".txt")
|
||||
ix.data.stored[key] = nil
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
if (SERVER) then
|
||||
timer.Create("ixSaveData", 600, 0, function()
|
||||
hook.Run("SaveData")
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user