diff --git a/markdown/bitburner.bitnodemultipliers.charityexpgain.md b/markdown/bitburner.bitnodemultipliers.charityexpgain.md index 5d0ccef06c..6763d0058c 100644 --- a/markdown/bitburner.bitnodemultipliers.charityexpgain.md +++ b/markdown/bitburner.bitnodemultipliers.charityexpgain.md @@ -4,7 +4,7 @@ ## BitNodeMultipliers.CharityExpGain property -Influences the base experience gained for each ability when the player commits a charity. +Influences the base experience gained for each ability when the player performs a charity. **Signature:** diff --git a/markdown/bitburner.bitnodemultipliers.charitymoney.md b/markdown/bitburner.bitnodemultipliers.charitymoney.md index bad4941748..155519c119 100644 --- a/markdown/bitburner.bitnodemultipliers.charitymoney.md +++ b/markdown/bitburner.bitnodemultipliers.charitymoney.md @@ -4,7 +4,7 @@ ## BitNodeMultipliers.CharityMoney property -Influences the base money gained when the player commits a charity. +Influences the base money gained when the player performs a charity. **Signature:** diff --git a/markdown/bitburner.bitnodemultipliers.md b/markdown/bitburner.bitnodemultipliers.md index 3c5c045181..fba45ea456 100644 --- a/markdown/bitburner.bitnodemultipliers.md +++ b/markdown/bitburner.bitnodemultipliers.md @@ -22,8 +22,8 @@ interface BitNodeMultipliers | [BladeburnerRank](./bitburner.bitnodemultipliers.bladeburnerrank.md) | | number | Influences how quickly the player can gain rank within Bladeburner. | | [BladeburnerSkillCost](./bitburner.bitnodemultipliers.bladeburnerskillcost.md) | | number | Influences the cost of skill levels from Bladeburner. | | [CharismaLevelMultiplier](./bitburner.bitnodemultipliers.charismalevelmultiplier.md) | | number | Influences how quickly the player's charisma level (not exp) scales | -| [CharityExpGain](./bitburner.bitnodemultipliers.charityexpgain.md) | | number | Influences the base experience gained for each ability when the player commits a charity. | -| [CharityMoney](./bitburner.bitnodemultipliers.charitymoney.md) | | number | Influences the base money gained when the player commits a charity. | +| [CharityExpGain](./bitburner.bitnodemultipliers.charityexpgain.md) | | number | Influences the base experience gained for each ability when the player performs a charity. | +| [CharityMoney](./bitburner.bitnodemultipliers.charitymoney.md) | | number | Influences the base money gained when the player performs a charity. | | [CharityORGEventStrength](./bitburner.bitnodemultipliers.charityorgeventstrength.md) | | number | Reduces charity event power, reduces the strength of all completed events and their associated rewards (Banners, Money, Bank, etc). Lowers all effects included in Softcap as well. | | [CharityORGSoftcap](./bitburner.bitnodemultipliers.charityorgsoftcap.md) | | number | Reduces charity earning. | | [CharityORGUniqueAugs](./bitburner.bitnodemultipliers.charityorguniqueaugs.md) | | number | Percentage of unique augs that the charityORG has. | diff --git a/markdown/bitburner.charityorg.spendkarma.md b/markdown/bitburner.charityorg.spendkarma.md index 57306b97c6..7f4820e0a0 100644 --- a/markdown/bitburner.charityorg.spendkarma.md +++ b/markdown/bitburner.charityorg.spendkarma.md @@ -9,7 +9,7 @@ Spend Karma. **Signature:** ```typescript -spendKarma(opt1: string, opt2: string, spendOn: number | string, opt3: string | number): boolean | string[]; +spendKarma(opt1: string, opt2: string, spendOn: number | string, opt3?: string | number): boolean | string[]; ``` ## Parameters @@ -19,7 +19,7 @@ spendKarma(opt1: string, opt2: string, spendOn: number | string, opt3: string | | opt1 | string | Type of boost - 'boost charity', 'sleeves', 'time' | | opt2 | string | Name of Secondary option - 'bank', 'overclock', etc | | spendOn | number \| string | Amount of karma to spend, name of Augment or "list" to get a list back of available augments | -| opt3 | string \| number | Optional unless needed. Chosen sleeve. Can be 'all' for all sleeves | +| opt3 | string \| number | _(Optional)_ Optional unless needed. Chosen sleeve. Can be 'all' for all sleeves | **Returns:** diff --git a/markdown/bitburner.charitystats.karma.md b/markdown/bitburner.charitystats.karma.md index 2d94023616..8a14107c29 100644 --- a/markdown/bitburner.charitystats.karma.md +++ b/markdown/bitburner.charitystats.karma.md @@ -4,7 +4,7 @@ ## CharityStats.karma property -Amount of karma gained for successfully committing this charity +Amount of karma gained for successfully performing this charity **Signature:** diff --git a/markdown/bitburner.charitystats.md b/markdown/bitburner.charitystats.md index 17a52fc813..8dce98bf01 100644 --- a/markdown/bitburner.charitystats.md +++ b/markdown/bitburner.charitystats.md @@ -28,7 +28,7 @@ interface CharityStats | [hacking\_exp](./bitburner.charitystats.hacking_exp.md) | | number | hacking exp gained from charity | | [hacking\_success\_weight](./bitburner.charitystats.hacking_success_weight.md) | | number | hacking level impact on success change of the charity | | [intelligence\_exp](./bitburner.charitystats.intelligence_exp.md) | | number | intelligence exp gained from charity | -| [karma](./bitburner.charitystats.karma.md) | | number | Amount of karma gained for successfully committing this charity | +| [karma](./bitburner.charitystats.karma.md) | | number | Amount of karma gained for successfully performing this charity | | [money](./bitburner.charitystats.money.md) | | number | How much money is given | | [saves](./bitburner.charitystats.saves.md) | | number | How many people die as a result of this charity | | [strength\_exp](./bitburner.charitystats.strength_exp.md) | | number | strength exp gained from charity | diff --git a/markdown/bitburner.player.md b/markdown/bitburner.player.md index 6ff90a8798..92362bfda3 100644 --- a/markdown/bitburner.player.md +++ b/markdown/bitburner.player.md @@ -22,5 +22,6 @@ interface Player extends Person | [location](./bitburner.player.location.md) | | string | | | [money](./bitburner.player.money.md) | | number | | | [numPeopleKilled](./bitburner.player.numpeoplekilled.md) | | number | | +| [numPeopleSaved](./bitburner.player.numpeoplesaved.md) | | number | | | [totalPlaytime](./bitburner.player.totalplaytime.md) | | number | | diff --git a/markdown/bitburner.player.numpeoplesaved.md b/markdown/bitburner.player.numpeoplesaved.md new file mode 100644 index 0000000000..5aeeff4cff --- /dev/null +++ b/markdown/bitburner.player.numpeoplesaved.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [Player](./bitburner.player.md) > [numPeopleSaved](./bitburner.player.numpeoplesaved.md) + +## Player.numPeopleSaved property + +**Signature:** + +```typescript +numPeopleSaved: number; +``` diff --git a/markdown/bitburner.singularity.getcharitychance.md b/markdown/bitburner.singularity.getcharitychance.md index e191168362..65dde4bc92 100644 --- a/markdown/bitburner.singularity.getcharitychance.md +++ b/markdown/bitburner.singularity.getcharitychance.md @@ -4,7 +4,7 @@ ## Singularity.getCharityChance() method -Get chance to successfully commit a charitable action. +Get chance to successfully perform a charitable action. **Signature:** @@ -22,11 +22,11 @@ getCharityChance(charity: CharityType | `${CharityType}`): number; number -Chance of success at committing the specified charity. +Chance of success at performing the specified charity. ## Remarks RAM cost: 5 GB \* 16/4/1 -This function returns your chance of success at committing the specified charitable action. +This function returns your chance of success at performing the specified charitable action. diff --git a/markdown/bitburner.singularity.md b/markdown/bitburner.singularity.md index 99d37542c4..54717c6412 100644 --- a/markdown/bitburner.singularity.md +++ b/markdown/bitburner.singularity.md @@ -37,7 +37,7 @@ This API requires Source-File 4 to use. The RAM cost of all these functions is m | [getAugmentationRepReq(augName)](./bitburner.singularity.getaugmentationrepreq.md) | Get reputation requirement of an augmentation. | | [getAugmentationsFromFaction(faction)](./bitburner.singularity.getaugmentationsfromfaction.md) | Get a list of augmentation available from a faction. | | [getAugmentationStats(name)](./bitburner.singularity.getaugmentationstats.md) | Get the stats of an augmentation. | -| [getCharityChance(charity)](./bitburner.singularity.getcharitychance.md) | Get chance to successfully commit a charitable action. | +| [getCharityChance(charity)](./bitburner.singularity.getcharitychance.md) | Get chance to successfully perform a charitable action. | | [getCharityStats(charity)](./bitburner.singularity.getcharitystats.md) | Get stats related to a charity. | | [getCompanyFavor(companyName)](./bitburner.singularity.getcompanyfavor.md) | Get company favor. | | [getCompanyFavorGain(companyName)](./bitburner.singularity.getcompanyfavorgain.md) | Get company favor gain. | diff --git a/markdown/bitburner.sleeve.md b/markdown/bitburner.sleeve.md index b857460555..6d3c618a0d 100644 --- a/markdown/bitburner.sleeve.md +++ b/markdown/bitburner.sleeve.md @@ -34,7 +34,7 @@ If you are not in BitNode-10, then you must have Source-File 10 in order to use | [setToFactionWork(sleeveNumber, factionName, factionWorkType)](./bitburner.sleeve.settofactionwork.md) | Set a sleeve to work for a faction. | | [setToGymWorkout(sleeveNumber, gymName, stat)](./bitburner.sleeve.settogymworkout.md) | Set a sleeve to workout at the gym. | | [setToIdle(sleeveNumber)](./bitburner.sleeve.settoidle.md) | Set a sleeve to idle. | -| [setToPerformCharity(sleeveNumber, charityType)](./bitburner.sleeve.settoperformcharity.md) | Set a sleeve to commit a charitable act. | +| [setToPerformCharity(sleeveNumber, charityType)](./bitburner.sleeve.settoperformcharity.md) | Set a sleeve to perform a charitable act. | | [setToShockRecovery(sleeveNumber)](./bitburner.sleeve.settoshockrecovery.md) | Set a sleeve to shock recovery. | | [setToSynchronize(sleeveNumber)](./bitburner.sleeve.settosynchronize.md) | Set a sleeve to synchronize. | | [setToUniversityCourse(sleeveNumber, university, className)](./bitburner.sleeve.settouniversitycourse.md) | Set a sleeve to take a class at a university. | diff --git a/markdown/bitburner.sleeve.settoperformcharity.md b/markdown/bitburner.sleeve.settoperformcharity.md index 4f1813f55e..ab83373e86 100644 --- a/markdown/bitburner.sleeve.settoperformcharity.md +++ b/markdown/bitburner.sleeve.settoperformcharity.md @@ -4,7 +4,7 @@ ## Sleeve.setToPerformCharity() method -Set a sleeve to commit a charitable act. +Set a sleeve to perform a charitable act. **Signature:** @@ -16,7 +16,7 @@ setToPerformCharity(sleeveNumber: number, charityType: CharityType | `${CharityT | Parameter | Type | Description | | --- | --- | --- | -| sleeveNumber | number | Index of the sleeve to start committing a charitable act. Sleeves are numbered starting from 0. | +| sleeveNumber | number | Index of the sleeve to start performing a charitable act. Sleeves are numbered starting from 0. | | charityType | [CharityType](./bitburner.charitytype.md) \| \`${[CharityType](./bitburner.charitytype.md)}\` | Name of the charity. | **Returns:** @@ -35,11 +35,11 @@ Return a boolean indicating whether or not this action was set successfully (fal ```ts -// Assigns the first sleeve to Homicide. -ns.sleeve.setToCommitCharity(0, "help police"); +// Assigns the first sleeve to Help Police. +ns.sleeve.setToPerformCharity(0, "help police"); // Assigns the second sleeve to Give Back, using enum const charities = ns.enums.CharityType; -ns.sleeve.setToCommitCharity(1, charities.giveBack) +ns.sleeve.setToPerformCharity(1, charities.giveBack) ``` diff --git a/src/BitNode/BitNode.tsx b/src/BitNode/BitNode.tsx index 7438edd702..8e607cb8c7 100644 --- a/src/BitNode/BitNode.tsx +++ b/src/BitNode/BitNode.tsx @@ -506,11 +506,9 @@ export function initBitNodes() { Money Gains:

- Level 1: 100% + Level 1: 1000%
- Level 2: 1000% -
- Level 3: 10000% + Level 2: 10000%

Success Rates: @@ -518,14 +516,16 @@ export function initBitNodes() {
Level 1: 6%
- Level 2: 12% + Level 2: 7%
- Level 3: 18% + Level 3: 8%

+ Level 2 will permanently unlock the ability to buy quantom tickets in all bitnodes. +
Level 3 will permanently unlock the ability to get charity event rarity in all bitnodes.
- Level 3 will also reduce all reputation requirements for Augmentations by 3%. + Level 3 will also reduce all reputation requirements for Augmentations by 5%.
), @@ -1041,35 +1041,36 @@ export function getBitNodeMultipliers(n: number, lvl: number): BitNodeMultiplier return new BitNodeMultipliers({ AugmentationMoneyCost: 2, AugmentationRepCost: 2.5, - BladeburnerRank: 0.3, + BladeburnerRank: 0.1, CodingContractMoney: 2, CompanyWorkMoney: 2, CorporationValuation: 0.1, CrimeMoney: 0.5, + CrimeSuccessRate: 0.5, CharityMoney: 5, - CharityORGUniqueAugs: 1, - CharityORGSoftcap: 1, + CharitySuccessRate: 1.5, DaedalusAugsRequirement: 40, FourSigmaMarketDataApiCost: 2, FourSigmaMarketDataCost: 2, - GangSoftcap: 0.3, + GangSoftcap: 0.5, GangUniqueAugs: 0.4, + HacknetNodeMoney: 1.5, InfiltrationMoney: 0, InfiltrationRep: 0, - ManualHackMoney: 0.3, + ManualHackMoney: 0.1, PurchasedServerCost: 2, PurchasedServerSoftcap: 2, PurchasedServerLimit: 0.3, PurchasedServerMaxRam: 0.5, - ScriptHackMoney: 0.3, - ScriptHackMoneyGain: 0.3, - ServerGrowthRate: 0.5, + ScriptHackMoney: 0.1, + ScriptHackMoneyGain: 0.1, + ServerGrowthRate: 0.3, HackExpGain: 0.4, - ServerMaxMoney: 0.3, + ServerMaxMoney: 0.2, ServerStartingMoney: 0.2, - ServerStartingSecurity: 0.8, - ServerWeakenRate: 1.5, - StaneksGiftPowerMultiplier: 0.8, + ServerStartingSecurity: 5, + ServerWeakenRate: 0.5, + StaneksGiftPowerMultiplier: 1.2, StaneksGiftExtraSize: 2, WorldDaemonDifficulty: 5, CorporationSoftcap: 0.1, diff --git a/src/BitNode/BitNodeMultipliers.ts b/src/BitNode/BitNodeMultipliers.ts index cb78cd3016..3c1194f776 100644 --- a/src/BitNode/BitNodeMultipliers.ts +++ b/src/BitNode/BitNodeMultipliers.ts @@ -66,6 +66,9 @@ export class BitNodeMultipliers { /** influences the success chance of committing crimes */ CrimeSuccessRate = 1; + /** influences the success chance of performing ccharities */ + CharitySuccessRate = 1; + /** Influences how many Augmentations you need in order to get invited to the Daedalus faction */ DaedalusAugsRequirement = 30; diff --git a/src/Charity/Charity.ts b/src/Charity/Charity.ts index 1cee437c50..20661011bc 100644 --- a/src/Charity/Charity.ts +++ b/src/Charity/Charity.ts @@ -5,6 +5,7 @@ import { WorkerScript } from "../Netscript/WorkerScript"; import { CharityType } from "@enums"; import { CharityWork } from "../Work/CharityWork"; import { calculateIntelligenceBonus } from "../PersonObjects/formulas/intelligence"; +import { currentNodeMults } from "../BitNode/BitNodeMultipliers"; interface IConstructorParams { hacking_success_weight?: number; @@ -128,6 +129,7 @@ export class Charity { chance /= CONSTANTS.MaxSkillLevel; chance /= this.difficulty; chance *= p.mults.charity_success; + chance *= currentNodeMults.CharitySuccessRate; chance *= calculateIntelligenceBonus(p.skills.intelligence, 1); return Math.min(chance, 1); diff --git a/src/CharityORG/CharityEvent.ts b/src/CharityORG/CharityEvent.ts index eba61302b0..1f7e53c44e 100644 --- a/src/CharityORG/CharityEvent.ts +++ b/src/CharityORG/CharityEvent.ts @@ -484,8 +484,8 @@ export class CharityEvent { } case 12: { // ticket stub - charityORG.ticketStub++; - charityORG.addItemMessage("Found a Ticket Stub!"); + charityORG.ticketStub += Math.floor(Math.random() * 5) + 1; + charityORG.addItemMessage("Found some Ticket Stubs!"); break; } case 13: { @@ -594,10 +594,10 @@ export class CharityEvent { //Get the best values, and randomize them a bit. //this.taskObject.baseMoneySpend = dif * 8 * ((Math.random() * .4) + .8); - if (fundraising !== undefined && fundraising) { + if (fundraising) { this.taskObject.baseMoneyGain = dif * 7000000 * (Math.random() * 0.2 + 0.95); this.taskObject.baseMoneyGain *= random ? Math.random() * 0.4 + 0.8 : 1; - this.taskObject.basePrestige = dif * 0.01125 * (Math.random() * 0.4 + 0.8); + this.taskObject.basePrestige = dif * 0.1125 * (Math.random() * 0.4 + 0.8); this.taskObject.basePrestige *= random ? Math.random() * 0.4 + 0.8 : 1; this.taskObject.isSpending = false; } else { @@ -605,7 +605,7 @@ export class CharityEvent { this.taskObject.baseMoneySpend *= random ? Math.random() * 0.4 + 0.8 : 1; this.taskObject.baseVisibility = dif * 0.00000014056 * (Math.random() * 0.2 + 0.9); this.taskObject.baseVisibility *= random ? Math.random() * 0.4 + 0.8 : 1; - this.taskObject.basePrestige = dif * 0.01125 * (Math.random() * 0.4 + 0.8); + this.taskObject.basePrestige = dif * 0.1125 * (Math.random() * 0.4 + 0.8); this.taskObject.basePrestige *= random ? Math.random() * 0.4 + 0.8 : 1; this.taskObject.baseKarmaGain = dif * 0.0000000001875 * (Math.random() * 0.2 + 0.9); this.taskObject.baseKarmaGain *= random ? Math.random() * 0.4 + 0.8 : 1; @@ -728,7 +728,7 @@ export class CharityEvent { } randomizeDeathEffects(fundraising: boolean, random: boolean): void { // Recreate death effects - if (this.taskObject.difficulty <= 10 || this.rarity <= 10) return; + if (this.taskObject.difficulty <= 10 || this.rarity <= 10 || !this.hasTimer) return; const entries = Object.values(DeathEffectTypes); if (fundraising) { diff --git a/src/CharityORG/data/tasks.ts b/src/CharityORG/data/tasks.ts index 74af0b5b75..1ab74e27c8 100644 --- a/src/CharityORG/data/tasks.ts +++ b/src/CharityORG/data/tasks.ts @@ -62,7 +62,7 @@ export const charityVolunteerTasksMetadata: ICharityVolunteerTaskMetadata[] = [ short_name: "Beg", isSpending: false, params: { - basePrestige: 0.1125, + basePrestige: 1.125, //baseVisibility: 0.00000021112, baseMoneyGain: 8000000, //baseKarmaGain: 0.0005, @@ -82,7 +82,7 @@ export const charityVolunteerTasksMetadata: ICharityVolunteerTaskMetadata[] = [ isSpending: true, params: { baseMoneySpend: 4000000, - basePrestige: 1.7, + basePrestige: 17, baseVisibility: 0.000010556, baseKarmaGain: 0.0000000375, hackWeight: 20, @@ -102,7 +102,7 @@ export const charityVolunteerTasksMetadata: ICharityVolunteerTaskMetadata[] = [ params: { baseMoneySpend: 4000000, baseVisibility: 0.000010556, - basePrestige: 0.1125, + basePrestige: 1.125, baseKarmaGain: 0.00000375, hackWeight: 20, strWeight: 15, @@ -119,7 +119,7 @@ export const charityVolunteerTasksMetadata: ICharityVolunteerTaskMetadata[] = [ short_name: "Fundraise", isSpending: false, params: { - basePrestige: 0.5625, + basePrestige: 5.625, //baseVisibility: 0.000001, baseMoneyGain: 425000000, //baseKarmaGain: 0.0005, @@ -138,7 +138,7 @@ export const charityVolunteerTasksMetadata: ICharityVolunteerTaskMetadata[] = [ short_name: "Door to Door", isSpending: false, params: { - basePrestige: 2.25, + basePrestige: 22.5, //baseVisibility: 0.00004, baseMoneyGain: 1800000000, //baseKarmaGain: 0.00053, @@ -157,7 +157,7 @@ export const charityVolunteerTasksMetadata: ICharityVolunteerTaskMetadata[] = [ short_name: "Organize Telethon", isSpending: false, params: { - basePrestige: 4.5, + basePrestige: 45, //baseVisibility: 0.00008, baseMoneyGain: 4000000000, //baseKarmaGain: 0.00053, diff --git a/src/CharityORG/ui/ItemsItemsSubpage.tsx b/src/CharityORG/ui/ItemsItemsSubpage.tsx index beee9b12f1..1cb3c690a5 100644 --- a/src/CharityORG/ui/ItemsItemsSubpage.tsx +++ b/src/CharityORG/ui/ItemsItemsSubpage.tsx @@ -48,7 +48,7 @@ export function ItemsItemsSubpage(): React.ReactElement { const ticket = "A random lottery ticket voucher given to you by a client. Redeem it at any time and then cash it in to see if it's a winner! Note: You can only have 4000 lottery tickets at any given time."; const qTicket = - "A Quantom Ticket! These special tickets regenerate after each install and when you enter a new BitNode. You will wake up with tickets in your pocket. Redeem them at any time and then cash it in to see if it's a winner! NOTE: You may only have 4000 at any given time."; + "A Quantom Ticket! These special tickets regenerate after each install and when you enter a new BitNode. You will wake up with tickets in your pocket. Redeem them at any time and then cash it in to see if it's a winner! NOTE: You may only have 4000 at any given time. Simply click Covert and it will covert the correct number of Lucky Coins into a ticket if you are able to."; let quantomCost = Player.quantomTickets >= LotteryConstants.MaxTickets ? Number.POSITIVE_INFINITY : Player.quantomTickets * 2 + 1; @@ -81,7 +81,7 @@ export function ItemsItemsSubpage(): React.ReactElement { const randomConvert = "Convert 1 Lucky to 5 Random Dice"; const javaConvert = "Convert 1 Lucky to 5 Java Juice"; const ticketConvert = "Convert 1 Lucky to 100 tickets"; - const qTicketConvert = "Convert in Lucky Coin"; + const qTicketConvert = "Convert 1 from " + quantomCost + " Lucky Coins"; function onBoostChange(event: SelectChangeEvent): void { setBoost(event.target.value); @@ -145,7 +145,7 @@ export function ItemsItemsSubpage(): React.ReactElement { } function purchaseConvert(): void { - if (spend <= 0 || spend > charityORG.luckyCoin) return; + if (spend < 0 || spend > charityORG.luckyCoin) return; switch (boost) { case "Lucky Coins": @@ -182,7 +182,27 @@ export function ItemsItemsSubpage(): React.ReactElement { charityORG.addItemUseMessage("Converted " + spend + " lucky coins into " + spend * 100 + " ticket stubs"); break; case "Quantom Tickets": - dialogBoxCreate("Cannot Convert. Use Lucky Coins to buy instead."); + if (Player.sourceFileLvl(15) < 2 && Player.bitNodeN !== 15) { + dialogBoxCreate( + "You do not have access to buying quantom tickets! Get SF 15.2 in order to unlock outside of BN 15.", + ); + return; + } + if (charityORG.luckyCoin < quantomCost || Player.quantomTickets >= LotteryConstants.MaxTickets) { + dialogBoxCreate("Cannot Convert. " + quantomCost + " coins are needed."); + return; + } + Player.quantomTickets++; + charityORG.luckyCoin -= quantomCost; + charityORG.addItemUseMessage("Purchased a Quantom Ticket!"); + quantomCost = + Player.quantomTickets >= LotteryConstants.MaxTickets + ? Number.POSITIVE_INFINITY + : Player.quantomTickets * 2 + 1; + luckyBuy = + "Current cost: (" + + quantomCost + + ") - Lucky Coins can purchase Quantom Tickets, but their cost goes up with each one purchased."; break; default: return; @@ -196,6 +216,12 @@ export function ItemsItemsSubpage(): React.ReactElement { switch (boost) { case "Lucky Coins": { + if (Player.sourceFileLvl(15) < 2 && Player.bitNodeN !== 15) { + dialogBoxCreate( + "You do not have access to buying quantom tickets! Get SF 15.2 in order to unlock outside of BN 15.", + ); + return; + } if (spend > charityORG.luckyCoin || spend < quantomCost || Player.quantomTickets >= LotteryConstants.MaxTickets) return; Player.quantomTickets++; diff --git a/src/NetscriptFunctions/CharityORG.ts b/src/NetscriptFunctions/CharityORG.ts index ffb83ead2a..c55c04dbe8 100644 --- a/src/NetscriptFunctions/CharityORG.ts +++ b/src/NetscriptFunctions/CharityORG.ts @@ -423,6 +423,12 @@ export function NetscriptCharityORG(): InternalAPI { switch (item) { case "lucky coins": { //Cannot convert a lucky coin + if (Player.sourceFileLvl(15) < 2 && Player.bitNodeN !== 15) { + throw helpers.makeRuntimeErrorMsg( + ctx, + `You do not have access to buying quantom tickets! Get SF 15.2 in order to unlock outside of BN 15.`, + ); + } if (convert || spend < 0) return false; const quantomCost = Player.quantomTickets >= LotteryConstants.MaxTickets @@ -725,8 +731,8 @@ export function NetscriptCharityORG(): InternalAPI { const opt2 = helpers.string(ctx, "opt1", _opt2).toLowerCase(); const opt3 = isString(_opt3) ? helpers.string(ctx, "opt3", _opt3).toLowerCase() - : _opt3 === null - ? null + : _opt3 === undefined + ? undefined : helpers.number(ctx, "opt3", _opt3); if (Player.karma < spend || spend === 0) { @@ -881,11 +887,11 @@ export function NetscriptCharityORG(): InternalAPI { return false; } case "sleeves": { - if (opt3 === null) return false; // Need opt3 for sleeve action + if (opt3 === undefined) return false; // Need opt3 for sleeve action switch (opt2) { //aug should be either an augment or "list" and opt3 will be either a sleeve number or "all" case "overclock": { - if (!isString(opt3) && Player.sleeves.length <= Number(opt3)) { + if (!isString(opt3) && Player.sleeves.length < Number(opt3)) { Player.sleeves[Number(opt3)].storedCycles += spend * 2.5; Player.karma -= spend; charityORG.addKarmaMessage( @@ -916,7 +922,7 @@ export function NetscriptCharityORG(): InternalAPI { } } case "reduce shock": { - if (!isString(opt3) && Player.sleeves.length <= Number(opt3)) { + if (!isString(opt3) && Player.sleeves.length < Number(opt3)) { Player.sleeves[Number(opt3)].shock -= spend * 0.01; Player.karma -= spend; charityORG.addKarmaMessage( @@ -947,7 +953,7 @@ export function NetscriptCharityORG(): InternalAPI { } } case "sync up": { - if (!isString(opt3) && Player.sleeves.length <= Number(opt3)) { + if (!isString(opt3) && Player.sleeves.length < Number(opt3)) { Player.sleeves[Number(opt3)].sync += spend * 0.01; Player.karma -= spend; charityORG.addKarmaMessage( @@ -976,8 +982,8 @@ export function NetscriptCharityORG(): InternalAPI { case "augments": { if (aug === "list" && !isString(opt3)) return findAugs(Player.sleeves[opt3]).map((a) => a.name.toString()); - else if (aug != null && !Augmentations[aug as AugmentationName]) return false; - else if (!isString(opt3) && aug != null && Number(opt3) < Player.sleeves.length) { + else if (aug !== null && !Augmentations[aug as AugmentationName]) return false; + else if (!isString(opt3) && aug !== null && Number(opt3) < Player.sleeves.length) { const augs = findAugs(Player.sleeves[Number(opt3)]).map((a) => a.name.toString()); if (Player.sleeves[Number(opt3)].hasAugmentation(aug)) return false; if (!augs.includes(aug)) return false; diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 316208770c..d6a63e8c8d 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -356,7 +356,7 @@ interface CrimeStats { interface CharityStats { /** Number representing the difficulty of the charity. Used for success chance calculations */ difficulty: number; - /** Amount of karma gained for successfully committing this charity */ + /** Amount of karma gained for successfully performing this charity */ karma: number; /** How many people die as a result of this charity */ saves: number; @@ -704,9 +704,9 @@ interface BitNodeMultipliers { CrimeExpGain: number; /** Influences the base money gained when the player commits a crime. */ CrimeMoney: number; - /** Influences the base experience gained for each ability when the player commits a charity. */ + /** Influences the base experience gained for each ability when the player performs a charity. */ CharityExpGain: number; - /** Influences the base money gained when the player commits a charity. */ + /** Influences the base money gained when the player performs a charity. */ CharityMoney: number; /** Percentage of unique augs that the charityORG has. */ CharityORGUniqueAugs: number; @@ -2746,15 +2746,15 @@ export interface Singularity { performCharity(charity: CharityType | `${CharityType}`, focus?: boolean): number; /** - * Get chance to successfully commit a charitable action. + * Get chance to successfully perform a charitable action. * @remarks * RAM cost: 5 GB * 16/4/1 * * - * This function returns your chance of success at committing the specified charitable action. + * This function returns your chance of success at performing the specified charitable action. * * @param charity - Name of charity. - * @returns Chance of success at committing the specified charity. + * @returns Chance of success at performing the specified charity. */ getCharityChance(charity: CharityType | `${CharityType}`): number; @@ -4891,7 +4891,7 @@ export interface CharityORG { * ns.charityORG.spendKarma("Time", "Time Gate", 1000) * ``` */ - spendKarma(opt1: string, opt2: string, spendOn: number | string, opt3: string | number): boolean | string[]; + spendKarma(opt1: string, opt2: string, spendOn: number | string, opt3?: string | number): boolean | string[]; /** * Sleeps until the next charityORG update has happened. @@ -5324,7 +5324,7 @@ export interface Sleeve { setToCommitCrime(sleeveNumber: number, crimeType: CrimeType | `${CrimeType}`): boolean; /** - * Set a sleeve to commit a charitable act. + * Set a sleeve to perform a charitable act. * @remarks * RAM cost: 4 GB * @@ -5332,15 +5332,15 @@ export interface Sleeve { * * @example * ```ts - * // Assigns the first sleeve to Homicide. - * ns.sleeve.setToCommitCharity(0, "help police"); + * // Assigns the first sleeve to Help Police. + * ns.sleeve.setToPerformCharity(0, "help police"); * * // Assigns the second sleeve to Give Back, using enum * const charities = ns.enums.CharityType; - * ns.sleeve.setToCommitCharity(1, charities.giveBack) + * ns.sleeve.setToPerformCharity(1, charities.giveBack) * ``` * - * @param sleeveNumber - Index of the sleeve to start committing a charitable act. Sleeves are numbered starting from 0. + * @param sleeveNumber - Index of the sleeve to start performing a charitable act. Sleeves are numbered starting from 0. * @param charityType - Name of the charity. * @returns True if this action was set successfully, false otherwise. */ diff --git a/src/SourceFile/applySourceFile.ts b/src/SourceFile/applySourceFile.ts index cd9c328177..005595386c 100644 --- a/src/SourceFile/applySourceFile.ts +++ b/src/SourceFile/applySourceFile.ts @@ -175,11 +175,11 @@ export function applySourceFile(bn: number, lvl: number): void { break; case 15: { // Charity - const moneyMult = lvl >= 3 ? 100 : lvl === 2 ? 10 : 2; //100% - 10000% money increase is equal to 2x - 100x - const successMult = 1 + lvl * 0.06; // .06 per lvl, 1: .06, 2: .12, 3: .18 + const moneyMult = lvl >= 2 ? 100 : lvl === 1 ? 10 : 1; + const successMult = 1 + lvl * 0.01 + 0.05; // 1: .06, 2: .7, 3: .8 Player.mults.charity_money *= moneyMult; Player.mults.charity_success *= successMult; - Player.mults.augmentation_rep *= [1, 1, 1, 0.97][Player.sourceFileLvl(15)]; + Player.mults.augmentation_rep *= [1, 1, 1, 0.95][Player.sourceFileLvl(15)]; break; } default: diff --git a/src/ui/CharacterStats.tsx b/src/ui/CharacterStats.tsx index 5f62b4152b..6558c16fde 100644 --- a/src/ui/CharacterStats.tsx +++ b/src/ui/CharacterStats.tsx @@ -545,6 +545,7 @@ export function CharacterStats(): React.ReactElement { { mult: "Charity Success Chance", value: Player.mults.charity_success, + effValue: Player.mults.charity_success * currentNodeMults.CharitySuccessRate, }, { mult: "Charity Money",