bitburner-src/src/Alias.ts

133 lines
3.3 KiB
TypeScript
Raw Normal View History

import { IMap } from "./types";
2021-09-16 08:52:45 +02:00
import { Terminal } from "./Terminal";
export let Aliases: IMap<string> = {};
export let GlobalAliases: IMap<string> = {};
export function loadAliases(saveString: string): void {
2021-09-05 01:09:30 +02:00
if (saveString === "") {
Aliases = {};
} else {
Aliases = JSON.parse(saveString);
}
}
export function loadGlobalAliases(saveString: string): void {
2021-09-05 01:09:30 +02:00
if (saveString === "") {
GlobalAliases = {};
} else {
GlobalAliases = JSON.parse(saveString);
}
}
2017-05-23 17:12:09 +02:00
// Prints all aliases to terminal
export function printAliases(): void {
2022-01-16 01:45:03 +01:00
for (const name of Object.keys(Aliases)) {
2021-09-05 01:09:30 +02:00
if (Aliases.hasOwnProperty(name)) {
2021-09-16 08:52:45 +02:00
Terminal.print("alias " + name + "=" + Aliases[name]);
2017-05-23 17:12:09 +02:00
}
2021-09-05 01:09:30 +02:00
}
2022-01-16 01:45:03 +01:00
for (const name of Object.keys(GlobalAliases)) {
2021-09-05 01:09:30 +02:00
if (GlobalAliases.hasOwnProperty(name)) {
2021-09-16 08:52:45 +02:00
Terminal.print("global alias " + name + "=" + GlobalAliases[name]);
}
2021-09-05 01:09:30 +02:00
}
2017-05-23 17:12:09 +02:00
}
// Returns true if successful, false otherwise
v0.51.6 (#905) * Make command `cd` without arguments an alias for `cd /` (#853) In most shells `cd` without arguments takes you to the home directory of the current user. I keep trying to do this due to muscle memory from working in terminals, so I figured I'd make it do something useful. There is no home directory in the game, but going to / is the closest thing we have, since that is the starting point for the user in the game. * Add new `backdoor` terminal command (#852) * Add the backdoor command to the terminal This command will perform a manual hack without rewarding money. It will be used for the story, mainly for faction hacking tests * Add tab completion for backdoor command * Add help text for backdoor command * Change condition syntax to be more consistent with others * Extract reused code block so it is always called after actions * Update documentation for new backdoor command Modified references to manual hack as it isn't for factions anymore * Remove extra parenthesis * Rename manuallyHacked to backdoorInstalled * Fix typo * Change faction test messages to use backdoor instad of hack * Rename more instances of manuallyHacked * fixed typo in helptext of darkweb buy (#858) * Fix typos and unify descriptions of augmentations (#859) Made an attempt to... - give all "+rep% company/faction" the same text - make all augmentations with a single effect use a single line to describe the effect - make all effects end with a period * Made Cashroot starter kit display its tooltip with the money formatted properly and in gold * fix typo in docs (#860) * Initial code for Casino Card Deck implementation * Casino Blackjack Implementation * Update some tools (eslint, typescript) * Blackjack code cleanup * Update README_contribution * Update ScriptHelpers.js (#861) expand error message * More augmentation typo fixes (#862) * Add Netscript function getCurrentScript (#856) Add netscript function that returns the current script. * Added milestones menu to guide new players. (#865) Milestone menu * fix typos in milestones (#866) Co-authored-by: sschmidTU <s.schmid@phonicscore.com> * Corrupt location title when backdoor is installed (#864) * Add corruptableText component * Corrupt location title if backdoor is installed * Formatting * Add helper to check value of backdoorInstalled Helper could be oneline but it would make it less readable * Fix some formatting * Add settings option to disable text effects * Import useState * getRunningScript (#867) * Replaced getCurrentScript with getRunningScript * Bunch of smaller fixes (#904) Fix #884 Fix #879 Fix #878 Fix #876 Fix #874 Fix #873 Fix #887 Fix #891 Fix #895 * rework the early servers to be more noob friendly (#903) * v0.51.6 Co-authored-by: Andreas Eriksson <2691182+AndreasTPC@users.noreply.github.com> Co-authored-by: Jack <jackdewinter1@gmail.com> Co-authored-by: Teun Pronk <5228255+Crownie88@users.noreply.github.com> Co-authored-by: Pimvgd <Pimvgd@gmail.com> Co-authored-by: Daniel Xie <daniel.xie@flockfreight.com> Co-authored-by: Simon <33069673+sschmidTU@users.noreply.github.com> Co-authored-by: sschmidTU <s.schmid@phonicscore.com>
2021-04-29 02:07:26 +02:00
export function parseAliasDeclaration(dec: string, global = false): boolean {
const re = /^([\w|!%,@-]+)=(("(.+)")|('(.+)'))$/;
2021-09-05 01:09:30 +02:00
const matches = dec.match(re);
if (matches == null || matches.length != 7) {
2021-09-05 01:09:30 +02:00
return false;
}
2021-09-05 01:09:30 +02:00
if (global) {
addGlobalAlias(matches[1], matches[4] || matches[6]);
2021-09-05 01:09:30 +02:00
} else {
addAlias(matches[1], matches[4] || matches[6]);
2021-09-05 01:09:30 +02:00
}
return true;
2017-05-23 17:12:09 +02:00
}
function addAlias(name: string, value: string): void {
2021-09-05 01:09:30 +02:00
if (name in GlobalAliases) {
delete GlobalAliases[name];
}
Aliases[name] = value.trim();
2017-05-23 17:12:09 +02:00
}
function addGlobalAlias(name: string, value: string): void {
2021-09-05 01:09:30 +02:00
if (name in Aliases) {
delete Aliases[name];
}
GlobalAliases[name] = value.trim();
}
function getAlias(name: string): string | null {
2021-09-05 01:09:30 +02:00
if (Aliases.hasOwnProperty(name)) {
return Aliases[name];
}
2021-09-05 01:09:30 +02:00
return null;
2017-05-23 17:12:09 +02:00
}
function getGlobalAlias(name: string): string | null {
2021-09-05 01:09:30 +02:00
if (GlobalAliases.hasOwnProperty(name)) {
return GlobalAliases[name];
}
return null;
}
export function removeAlias(name: string): boolean {
2021-09-05 01:09:30 +02:00
if (Aliases.hasOwnProperty(name)) {
delete Aliases[name];
return true;
}
2021-09-05 01:09:30 +02:00
if (GlobalAliases.hasOwnProperty(name)) {
delete GlobalAliases[name];
return true;
}
2021-09-05 01:09:30 +02:00
return false;
}
/**
* Returns the original string with any aliases substituted in.
* Aliases are only applied to "whole words", one level deep
*/
export function substituteAliases(origCommand: string): string {
2021-09-05 01:09:30 +02:00
const commandArray = origCommand.split(" ");
if (commandArray.length > 0) {
// For the alias and unalias commands, dont substite
if (commandArray[0] === "unalias" || commandArray[0] === "alias") {
return commandArray.join(" ");
}
let somethingSubstituted = true;
let depth = 0;
while (somethingSubstituted && depth < 10) {
depth++;
somethingSubstituted = false;
const alias = getAlias(commandArray[0])?.split(" ");
if (alias != null) {
somethingSubstituted = true;
commandArray.splice(0, 1, ...alias);
//commandArray[0] = alias;
}
for (let i = 0; i < commandArray.length; ++i) {
const alias = getGlobalAlias(commandArray[i])?.split(" ");
if (alias != null) {
somethingSubstituted = true;
commandArray.splice(i, 1, ...alias);
i += alias.length - 1;
//commandArray[i] = alias;
2017-05-23 17:12:09 +02:00
}
2021-09-05 01:09:30 +02:00
}
2017-05-23 17:12:09 +02:00
}
2021-09-05 01:09:30 +02:00
}
return commandArray.join(" ");
}