Community patch - new NPCs, new scripting tools, QoL, and bug fixes. Thanks to 2dPrinter, Aluvard, _xp_, ItsGime, and delta for the repors.
Three new regulars have joined #lounge: 2dprinter, delta, and vince_kully. They show up in ambient chat, respond to events, and have /whois entries. 2dprinter is also lurking somewhere on the shop server.
Four new scripting functions for extracting structured data from file content. Available in the shop once you're past Act 1.
extract_ips(text) - returns every IPv4 address found in the text
extract_emails(text) - returns email addresses
extract_urls(text) - returns http/https URLs
extract_credentials(text) - returns password/key/token patterns from config files and logs
All four take a string (e.g. the output of read_file()) and return a list. No connection required, no noise generated. The functions appear in the editor reference panel once purchased.
Low-level firewall primitives. See how bypass_firewall() works. Unlocks probe_layer() and chip_layer() and delivers the source to ~/scripts/sdk/bypass.bd.
Download files from web servers directly to ~/downloads/ without opening the browser. Same access rules as browsing - if you can browse it, you can wget it; 403 pages block wget too. No noise, no trace. Works from the terminal or inside scripts.
shop promo <code> - enter a promo code from the terminal or via ?promo=CODE in the browser URL. Applies a discount to your next purchase
Shop items now show [owned] - buy links are replaced with an owned indicator for items you've already purchased, in both the terminal and the browser
Workshop: Random server - a [Random] button in the server template picker generates a random archetype with randomised hostname, IP, and details
/msg <handle> - open a DM channel with any IRC handle directly from the input bar
IRC channel cycling - Alt+Left / Alt+Right steps through IRC channels when the IRC pane is focused. Channels that don't fit in the tab bar are accessible via a [+N] overflow picker (now scrollable)
New scripting string methods - contains(sub), lower(), upper() added to the BD language
Scripting: dynamic import - import(variable) now works. import(lib) as u alias form also supported
/whois threadbare - threadbare now has a whois entry. All mission contacts are findable this way
Threadbare's mission could be permanently lost - if you saved between receiving the threadbare DM and the mission auto-accepting (a ~4 second window), the mission vanished and couldn't be recovered. Fixed. If your save was in this state, loading it will restore the mission automatically
Drop-box disappeared from network after forget - using forget on the drop-box IP removed it permanently. Reconnecting now restores it to the network tab. Thanks Aluvard
/msg accepted any handle - /msg would open a DM channel with whatever you typed, even nonsense handles. It now validates against known users first
Cracker showed password before completing - result.hint was revealing the full password while result.success was still false, so scripts looping on !result.success would show the answer before the crack finished. Fixed. Thanks _xp_
Scripts with syntax errors silently failed - running a script with a parse or syntax error produced no output; the shell just returned silently. The error now prints in the terminal. Thanks delta
Imported scripts couldn't import other scripts - transitive imports failed silently; a module that used import internally would always error with "Cannot find module". Fixed
rm didn't handle relative paths - rm ../file or any path with .. segments would fail to resolve correctly. Fixed
Credentials stopped being saved after editing the file - opening ~/.ssh/credentials in the editor and saving it would cause all subsequent logins to stop being recorded. Fixed. Thanks ItsGime
Scripting: object literals - var x = {key: "value", n: 42} - parser bug, now fixed
- Static