Add bribe

This commit is contained in:
pigalot 2022-01-13 21:05:06 +00:00
parent ea88f5f150
commit 62f40b3dc1
2 changed files with 37 additions and 2 deletions

@ -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);
},
};
}

@ -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