From 77384c2d62885081e40dda9708617b8702864844 Mon Sep 17 00:00:00 2001 From: Ayane Satomi Date: Mon, 1 Aug 2022 16:17:39 +0800 Subject: [PATCH] finish up initial implementation --- .gitignore | 1 + starfallex/serverinfo.lua | 84 ++++++++++++++++++++++++++++++--------- 2 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53f4d59 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +starfallex/kiosk.lua \ No newline at end of file diff --git a/starfallex/serverinfo.lua b/starfallex/serverinfo.lua index 39c7d4e..df6eaf1 100644 --- a/starfallex/serverinfo.lua +++ b/starfallex/serverinfo.lua @@ -1,50 +1,98 @@ ---@name Test-Serverinfo +--@name StarfallTop --@author Minori --@shared ---[[ - This grabs the basic server information we can print later on - This table doesn't need to be updated much so we can initialize this immediately. -]] local serverMetadata = { serverName = game.getHostname(), map = game.getMap(), - maxPlayers = game.getMaxPlayers(), - cTime = os.date(), - sTime = os.date() + cTime = "", + sTime = "", + runningChips = {} } -if SERVER then - hook.add("think", "serverTimeTick", function() - local prevSTime = "" +function getRunningChips() + for _, v in ipairs(find.byClass("starfall_processor")) do + if not isValid(v) then continue end - if prevSTime != os.date() then + if v:getChipName() == "" and v:getChipAuthor() == "" then + table.insert(serverMetadata.runningChips, { + ["this"] = v, + ["chip_name"] = "Unknown", + ["chip_owner"] = "Unknown", + ["chip_quota"] = math.floor(v:getQuotaAverage() * 100000) + }) + end + + table.insert(serverMetadata.runningChips, { + ["this"] = v, + ["chip_name"] = v:getChipName(), + ["chip_owner"] = v:getChipAuthor(), + ["chip_quota"] = math.floor(v:getQuotaAverage() * 100000) + }) + end +end + +if SERVER then + local prevName = "" + local prevSTime = "" + + hook.add("tick", "serverTimeTick", function() + if prevSTime ~= os.date() then prevSTime = os.date() net.start("serverTime") net.writeString(os.date()) net.send(owner(), false) end end) + + -- METASTRUCT SPECIFIC HOOK + hook.add("tick", "e621", function() + if prevName ~= game.getHostname() then + prevName = game.getHostname() + net.start("serverName") + net.writeString(game.getHostname()) + net.send(owner(), false) + end + end) end if CLIENT then - hook.add("think", "clientTimeTick", function() + hook.add("tick", "clientTimeTick", function() serverMetadata.cTime = os.date() end) + -- METASTRUCT SPECIFIC HOOK net.receive("serverTime", function() serverMetadata.sTime = net.readString() end) + net.receive("serverName", function() + serverMetadata.serverName = net.readString() + end) + + getRunningChips() + + -- update the table + timer.create("update", 1, 0, function() + if serverMetadata.runningChips == {} then + -- don't forget to populate dr freeman + getRunningChips() + end + + for i, v in ipairs(serverMetadata.runningChips) do + local ent = v["this"] + v.chip_quota = math.floor(ent:getQuotaAverage() * 100000) + end + end) + hook.add("render", "metadataRenderMain", function() render.setColor(Color(255, 0, 0, 255)) render.drawText(10, 10, "Server Name: " .. serverMetadata.serverName) render.drawText(10, 30, "Map: " .. serverMetadata.map) render.drawText(10, 50, "Client Time: " .. serverMetadata.cTime) render.drawText(10, 70, "Server Time: " .. serverMetadata.sTime) - end) - - hook.add("ComponentUnlinked", "unlink_evt", function() - hook.remove("think", "curTimeMutator") - hook.remove("render", "metadataRenderMain") + render.drawText(10, 110, "Name\t\tOwner\t\tCPU Quota") + for i, v in ipairs(serverMetadata.runningChips) do + render.drawText(10, 130 + (i * 20), "" .. v["chip_name"] .. "\t\t" .. v["chip_owner"] .. "\t\t" .. v["chip_quota"] .. "us") + end end) end \ No newline at end of file