bitburner-src/src/DarkWeb/DarkWeb.tsx

94 lines
3.3 KiB
TypeScript
Raw Normal View History

import * as React from "react";
import { DarkWebItems } from "./DarkWebItems";
import { Player } from "../Player";
import { SpecialServerIps } from "../Server/SpecialServerIps";
import { post, postElement } from "../ui/postToTerminal";
import { Money } from "../ui/React/Money";
import { isValidIPAddress } from "../../utils/helpers/isValidIPAddress";
import { formatNumber } from "../../utils/StringHelperFunctions";
import { numeralWrapper } from "../ui/numeralFormat";
2017-05-05 17:50:55 +02:00
//Posts a "help" message if connected to DarkWeb
2021-03-14 07:08:24 +01:00
export function checkIfConnectedToDarkweb(): void {
2017-05-05 17:50:55 +02:00
if (SpecialServerIps.hasOwnProperty("Darkweb Server")) {
2021-03-14 07:08:24 +01:00
const darkwebIp = SpecialServerIps.getIp("Darkweb Server");
if (!isValidIPAddress(darkwebIp)) {return;}
2017-05-05 17:50:55 +02:00
if (darkwebIp == Player.getCurrentServer().ip) {
post("You are now connected to the dark web. From the dark web you can purchase illegal items. " +
"Use the 'buy -l' command to display a list of all the items you can buy. Use 'buy [item-name] " +
2021-03-14 07:08:24 +01:00
"to purchase an item.");
2017-05-05 17:50:55 +02:00
}
}
}
//Handler for dark web commands. The terminal's executeCommand() function will pass
//dark web-specific commands into this. It will pass in the raw split command array
//rather than the command string
2021-03-14 07:08:24 +01:00
export function executeDarkwebTerminalCommand(commandArray: string[]): void {
2017-05-05 17:50:55 +02:00
if (commandArray.length == 0) {return;}
switch (commandArray[0]) {
case "buy":
if (commandArray.length != 2) {
post("Incorrect number of arguments. Usage: ");
post("buy -l");
post("buy [item name]");
return;
2017-05-05 17:50:55 +02:00
}
var arg = commandArray[1];
if (arg == "-l") {
listAllDarkwebItems();
} else {
buyDarkwebItem(arg);
}
break;
default:
post("Command not found");
break;
}
}
function listAllDarkwebItems() {
2018-06-01 23:05:05 +02:00
for(const key in DarkWebItems) {
const item = DarkWebItems[key];
postElement(<>{item.program} - {Money(item.price)} - {item.description}</>);
}
2017-05-05 17:50:55 +02:00
}
2021-03-14 07:08:24 +01:00
function buyDarkwebItem(itemName: string): void {
2018-06-01 23:05:05 +02:00
itemName = itemName.toLowerCase();
// find the program that matches, if any
let item = null;
for(const key in DarkWebItems) {
const i = DarkWebItems[key];
if(i.program.toLowerCase() == itemName) {
item = i;
}
2017-05-05 17:50:55 +02:00
}
2018-06-01 23:05:05 +02:00
// return if invalid
if(item === null) {
post("Unrecognized item: "+itemName);
return;
}
// return if the player already has it.
if(Player.hasProgram(item.program)) {
post('You already have the '+item.program+' program');
return;
}
// return if the player doesn't have enough money
if(Player.money.lt(item.price)) {
post("Not enough money to purchase " + item.program);
return;
2017-05-05 17:50:55 +02:00
}
2018-06-01 23:05:05 +02:00
// buy and push
Player.loseMoney(item.price);
Player.getHomeComputer().programs.push(item.program);
post('You have purchased the ' + item.program + ' program. The new program can be found on your home computer.');
2018-06-01 23:05:05 +02:00
}