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",