From 62f40b3dc1490f18429be13cc27a2c19d0281a31 Mon Sep 17 00:00:00 2001 From: pigalot Date: Thu, 13 Jan 2022 21:05:06 +0000 Subject: [PATCH] Add bribe --- src/NetscriptFunctions/Corporation.ts | 31 ++++++++++++++++++++-- src/ScriptEditor/NetscriptDefinitions.d.ts | 8 ++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/NetscriptFunctions/Corporation.ts b/src/NetscriptFunctions/Corporation.ts index fda72e7be..52fe44a43 100644 --- a/src/NetscriptFunctions/Corporation.ts +++ b/src/NetscriptFunctions/Corporation.ts @@ -59,6 +59,7 @@ import { IndustryResearchTrees, IndustryStartingCosts } from "../Corporation/Ind import { CorporationConstants } from "../Corporation/data/Constants"; import { IndustryUpgrades } from "../Corporation/IndustryUpgrades"; import { ResearchMap } from "../Corporation/ResearchMap"; +import { Factions } from "../Faction/Factions"; export function NetscriptCorporation( player: IPlayer, @@ -189,6 +190,25 @@ export function NetscriptCorporation( return division.researched[researchName] === undefined ? false : division.researched[researchName] as boolean; } + function bribe(factionName: string, amountCash: number, amountShares: number): boolean { + if (!player.factions.includes(factionName)) throw new Error("Invalid faction name"); + if (isNaN(amountCash) || amountCash < 0 || isNaN(amountShares) || amountShares < 0) throw new Error("Invalid value for amount field! Must be numeric, grater than 0."); + const corporation = getCorporation(); + if (corporation.funds < amountCash) return false; + if (corporation.numShares < amountShares) return false; + const faction = Factions[factionName] + const info = faction.getInfo(); + if (!info.offersWork()) return false; + if (player.hasGangWith(factionName)) return false; + + const repGain = (amountCash + amountShares * corporation.sharePrice) / CorporationConstants.BribeToRepRatio; + faction.playerReputation += repGain; + corporation.funds = corporation.funds - amountCash; + corporation.numShares -= amountShares; + + return true; + } + function getCorporation(): ICorporation { const corporation = player.corporation; if (corporation === null) throw new Error("cannot be called without a corporation"); @@ -396,7 +416,7 @@ export function NetscriptCorporation( const cityName = helper.string("buyMaterial", "cityName", acityName); const materialName = helper.string("buyMaterial", "materialName", amaterialName); const amt = helper.number("buyMaterial", "amt", aamt); - if (amt < 0) throw new Error("Invalid value for ammount field! Must be numeric and grater than 0"); + if (amt < 0) throw new Error("Invalid value for amount field! Must be numeric and grater than 0"); const material = getMaterial(divisionName, cityName, materialName); BuyMaterial(material, amt); }, @@ -747,10 +767,17 @@ export function NetscriptCorporation( checkAccess("acceptInvestmentOffer"); return acceptInvestmentOffer(); }, - goPublic(anumShares: any): boolean { + goPublic: function(anumShares: any): boolean { checkAccess("acceptInvestmentOffer"); const numShares = helper.number("goPublic", "numShares", anumShares); return goPublic(numShares); }, + bribe: function(afactionName: string, aamountCash: any, aamountShares: any): boolean { + checkAccess("bribe"); + const factionName = helper.string("bribe", "factionName", afactionName); + const amountCash = helper.number("bribe", "amountCash", aamountCash); + const amountShares = helper.number("bribe", "amountShares", aamountShares); + return bribe(factionName, amountCash, amountShares); + }, }; } diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 5e134e0a3..0979aac4e 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -6425,6 +6425,14 @@ export interface Corporation extends WarehouseAPI, OfficeAPI { * @returns true if you successfully go public, false if not */ goPublic(numShares: number): boolean; + /** + * Bribe a faction + * @param factionName - Faction name + * @param amountCash - Amount of money to bribe + * @param amountShares - Amount of shares to bribe + * @return True if successful, false if not + */ + bribe(factionName: string, amountCash: number, amountShares: number): boolean; /** * Get corporation data * @returns Corporation data