Created
August 27, 2024 06:46
-
-
Save notarikon-nz/d9fe3cec9f1ff7a5998c2971e0636af9 to your computer and use it in GitHub Desktop.
HackMUD aperture.syskit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function(context, args) | |
| { | |
| const HEADER = `\n\`HAPERTURE SCIENCE :: SYS KIT\`\n\n`; | |
| const COLUMNS = ['name','ready','cooldown','loaded']; | |
| const availableScripts = "sys.expose_balance,sys.expose_access_log,sys.expose_upgrade_log,sys.expose_upgrades,sys.xfer_upgrade_from,sys.xfer_gc_from,sys.write_log".split(",")//#hs.scripts.sys() | |
| const availableUpgrades = #hs.sys.upgrades({full:true}) | |
| const reload = (args && args.reload == true); | |
| let sysArray = [] | |
| let debug = "" | |
| availableScripts.forEach((name) => { | |
| let equivalent = "" | |
| switch (name) { | |
| case '': equivalent = ''; break; | |
| case 'sys.expose_balance': equivalent = 'balance_v'; break; | |
| case 'sys.expose_access_log': equivalent = 'expose_access_log_v'; break; | |
| case 'sys.expose_upgrade_log': equivalent = 'expose_upgrade_log_v'; break; | |
| case 'sys.expose_upgrades': equivalent = 'expose_upgrades_v'; break; | |
| case 'sys.xfer_upgrade_from': equivalent = 'transfer_upgrade_v'; break; | |
| case 'sys.xfer_gc_from': equivalent = 'transfer_v2'; break; | |
| case 'sys.write_log': equivalent = 'log_writer_v'; break; | |
| } | |
| let scrArray = availableUpgrades.filter((u) => (u.name.includes(equivalent)) ) | |
| scrArray.sort((a,b) => b.tier - a.tier); | |
| if (reload) { | |
| let loadedUpgrade = scrArray.find((u) => u.loaded) | |
| if (loadedUpgrade) { | |
| #ms.sys.manage({unload:loadedUpgrade.i}) | |
| } | |
| let availableUpgrade = scrArray.find((u) => (_START - u.last_time) > (u.cooldown * 1000) || !u.last_time) | |
| if (availableUpgrade) #ms.sys.manage({load:availableUpgrade.i}) | |
| debug += `Reloaded ${name}\n` | |
| } | |
| let loaded = scrArray.filter((u) => u.loaded) | |
| let loadedString = "---" | |
| if (loaded && loaded.length > 0) | |
| loadedString = `${loaded[0].i}`.padStart(3,'0') | |
| let ready = String(scrArray.filter((u) => (_START - u.last_time) > (u.cooldown * 1000) || !u.last_time).length).padStart(5," ") | |
| let cooldown = String(scrArray.length - ready).padStart(8," ") | |
| sysArray.push({ | |
| name, | |
| ready, | |
| cooldown, | |
| loaded: loadedString.padStart(6," ") | |
| }) | |
| loaded = null; | |
| }); | |
| if (args && args.quiet) { | |
| return `\n` + createTable(sysArray,COLUMNS) + `\n`; | |
| } | |
| return HEADER + | |
| createTable(sysArray,COLUMNS) + "\n\n" + | |
| "Use {reload:true} to automatically load ready upgrades\n" | |
| // BEGIN UTILITY FUNCTIONS | |
| function loadScriptOnCooldown(s) { | |
| } | |
| function expand_stats(upg) { | |
| switch (upg.type) { | |
| case "script": | |
| upg.next_use = (upg.last_time || 0) + upg.cooldown * 1000; | |
| upg.is_on_cd = _START < upg.next_use; | |
| upg.cd_remain = upg.is_on_cd ? (upg.next_use - _START) : 0; | |
| upg.script = upg.description | |
| .split(" ")[0] | |
| .split(".")[1]; | |
| break; | |
| } | |
| } | |
| function createTable(data, columns) { | |
| function decolor (val) { | |
| return String(val).replaceAll(/`\w(.*?)`/g, '$1') | |
| } | |
| if (!data.length) { | |
| return ''; | |
| } | |
| // Use the provided columns or get all keys from the first object | |
| columns = columns || Object.keys(data[0]); | |
| // Calculate the width for each column | |
| const colWidths = columns.map(key => Math.max(key.length, ...data.map(row => decolor(String(row[key] || '')).length))); | |
| // Padding function | |
| const pad = (str, length) => String(str).padEnd(length, ' '); | |
| // Function to create the border | |
| const border = (left, mid, right, horizontal) => | |
| left + colWidths.map(width => horizontal.repeat(width + 2)).join(mid) + right; | |
| // Create the header row | |
| const header = "┃" + columns.map((key, i) => `\`1 ${pad(key.toUpperCase(), colWidths[i])} \``).join('┃') + "┃"; | |
| // Create the data rows | |
| const rows = data.map(row => | |
| "┃" + columns.map((key, i) => ` ${pad(row[key] || '', colWidths[i])} `).join('┃') + "┃" | |
| ); | |
| // Create the borders | |
| const topBorder = border('┏', '┳', '┓', '━'); | |
| const midBorder = border('┣', '╋', '┫', '━'); | |
| const bottomBorder = border('┗', '┻', '┛', '━'); | |
| // Combine all parts to create the table | |
| return [ | |
| topBorder, | |
| header, | |
| midBorder, | |
| ...rows, | |
| bottomBorder | |
| ].join('\n'); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment