restructured lib portion to match modules also edited community bridges onplayerunload fire to accept the passed src as it was otherwise nil
119 lines
2.5 KiB
Lua
119 lines
2.5 KiB
Lua
Table = {}
|
|
|
|
Table.CheckPopulated = function(tbl)
|
|
if #tbl == 0 then
|
|
for _, _ in pairs(tbl) do
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
Table.DeepClone = function(tbl, out, omit)
|
|
if type(tbl) ~= "table" then return tbl end
|
|
local new = out or {}
|
|
omit = omit or {}
|
|
for key, data in pairs(tbl) do
|
|
if not omit[key] then
|
|
if type(data) == "table" then
|
|
new[key] = Table.DeepClone(data)
|
|
else
|
|
new[key] = data
|
|
end
|
|
end
|
|
end
|
|
return new
|
|
end
|
|
|
|
Table.TableContains = function(tbl, search, nested)
|
|
for _, v in pairs(tbl) do
|
|
if nested and type(v) == "table" then
|
|
return Table.TableContains(v, search)
|
|
elseif v == search then
|
|
return true, v
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
Table.TableContainsKey = function(tbl, search)
|
|
for k, _ in pairs(tbl) do
|
|
if k == search then
|
|
return true, k
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
Table.TableGetKeys = function(tbl)
|
|
local keys = {}
|
|
for k ,_ in pairs(tbl) do
|
|
table.insert(keys,k)
|
|
end
|
|
return keys
|
|
end
|
|
|
|
Table.GetClosest = function(coords, tbl)
|
|
local closestPoint = nil
|
|
local dist = math.huge
|
|
for k, v in pairs(tbl) do
|
|
local c = v.coords
|
|
local d = c and #(coords - c)
|
|
if d < dist then
|
|
dist = d
|
|
closestPoint = v
|
|
end
|
|
end
|
|
return closestPoint
|
|
end
|
|
|
|
Table.FindFirstUnoccupiedSlot = function(tbl)
|
|
local occupiedSlots = {}
|
|
for _, v in pairs(tbl) do
|
|
if v.slot then
|
|
occupiedSlots[v.slot] = true
|
|
end
|
|
end
|
|
for i = 1, BridgeServerConfig.MaxInventorySlots do
|
|
if not occupiedSlots[i] then
|
|
return i
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
Table.Append = function(tbl1, tbl2)
|
|
for _, v in pairs(tbl2) do
|
|
table.insert(tbl1, v)
|
|
end
|
|
return tbl1
|
|
end
|
|
|
|
Table.Split = function(tbl, size)
|
|
local new1 = {}
|
|
local new2 = {}
|
|
size = size or math.floor(#tbl / 2)
|
|
|
|
if size > #tbl then
|
|
assert(false, "Size is greater than the length of the table.")
|
|
end
|
|
for i = 1, size do
|
|
table.insert(new1, tbl[i])
|
|
end
|
|
for i = size + 1, #tbl do
|
|
table.insert(new2, tbl[i])
|
|
end
|
|
return new1, new2
|
|
end
|
|
|
|
Table.Shuffle = function(tbl)
|
|
for i = #tbl, 2, -1 do
|
|
local j = math.random(i)
|
|
tbl[i], tbl[j] = tbl[j], tbl[i]
|
|
end
|
|
return tbl
|
|
end
|
|
|
|
exports("Table", Table)
|
|
return Table |