libram 0.5.8 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,6 +26,14 @@ export declare type FindActionSourceConstraints = {
26
26
  * only actions that cost nothing.
27
27
  */
28
28
  maximumCost?: () => number;
29
+ /**
30
+ * Function allowing for custom logic if an action should be allowed.
31
+ * If undefined, allow all actions to be considered by other constraints.
32
+ *
33
+ * @param action The action that is being considered.
34
+ * @returns True if the action should be allowed.
35
+ */
36
+ allowedAction?: (action: ActionSource) => boolean;
29
37
  };
30
38
  export declare type ActionConstraints = {
31
39
  /**
@@ -124,6 +124,8 @@ export class ActionSource {
124
124
  }
125
125
  function filterAction(action, constraints) {
126
126
  return (action.available() &&
127
+ (constraints.allowedAction === undefined ||
128
+ constraints.allowedAction(action)) &&
127
129
  !(constraints.requireFamiliar?.() && !action.constraints.familiar) &&
128
130
  !(constraints.requireUnlimited?.() && !action.isUnlimited()) &&
129
131
  !(constraints.noFamiliar?.() && action.constraints.familiar) &&
package/dist/ascend.js CHANGED
@@ -1,4 +1,4 @@
1
- import { containsText, eudoraItem, getCampground, getWorkshed, toInt, use, visitUrl, xpath, } from "kolmafia";
1
+ import { containsText, eudoraItem, getCampground, getWorkshed, toInt, toItem, use, visitUrl, xpath, } from "kolmafia";
2
2
  import { $item, $items, $stat } from "./template-string";
3
3
  import { ChateauMantegna } from "./resources";
4
4
  export var Lifestyle;
@@ -139,7 +139,7 @@ const eudorae = [
139
139
  * @param throwOnFail If true, this will throw an error when it fails to switch something
140
140
  */
141
141
  export function prepareAscension({ workshed, garden, eudora, chateau, } = {}) {
142
- if (workshed && workshed !== getWorkshed().name) {
142
+ if (workshed && getWorkshed() !== toItem(workshed)) {
143
143
  use(Item.get(workshed));
144
144
  }
145
145
  if (garden && !Object.getOwnPropertyNames(getCampground()).includes(garden)) {
@@ -156,8 +156,8 @@ export function prepareAscension({ workshed, garden, eudora, chateau, } = {}) {
156
156
  else {
157
157
  visitUrl(`account.php?actions[]=whichpenpal&whichpenpal=${eudoraNumber}&action=Update`, true);
158
158
  }
159
- if (eudoraItem().name !== eudora) {
160
- throw new Error(`We really thought we chaned your eudora to a ${eudora}, but Mafia is saying otherwise.`);
159
+ if (eudoraItem() !== toItem(eudora)) {
160
+ throw new Error(`We really thought we changed your eudora to a ${eudora}, but Mafia is saying otherwise.`);
161
161
  }
162
162
  }
163
163
  if (chateau && ChateauMantegna.have()) {
@@ -0,0 +1,84 @@
1
+ import { Requirement } from "../../maximize";
2
+ /**
3
+ * A log of the predicted turns, actual turns, and duration of each CS test performed.
4
+ */
5
+ export declare const log: {
6
+ [index: string]: {
7
+ predictedTurns: number;
8
+ turnCost: number;
9
+ seconds: number;
10
+ };
11
+ };
12
+ declare class Test {
13
+ private choice;
14
+ private property;
15
+ private predictor;
16
+ private maximizeRequirements;
17
+ /**
18
+ * Class to store properties of various CS tests.
19
+ * @param id The id the game HTML uses to identify the test; this is used primarily in runChoice.
20
+ * @param property The name of the test as a string, often used as part of the string property "csServicesPerformed".
21
+ * @param predictor A function that returns an estimate for the number of turns that the test will take given your character's current state.
22
+ * @param maximizeRequirements A Requirement object, if applicable, that aligns with the things needed to maximize for this particular test.
23
+ */
24
+ constructor(id: number, property: string, predictor: () => number, maximizeRequirements?: Requirement | null);
25
+ /**
26
+ * @returns The id number of the test, used primarily in runChoice.
27
+ */
28
+ get id(): number;
29
+ /**
30
+ * @returns The name of the test, used primarily as part of the string property "csServicesPerformed"
31
+ */
32
+ get name(): string;
33
+ /**
34
+ * @returns The predicted number of turns this test will take given your character's current state.
35
+ */
36
+ get prediction(): number;
37
+ /**
38
+ * @returns A Requirement object, if applicable, that aligns with the things needed to maximize for this particular test.
39
+ */
40
+ get requirement(): Requirement | null;
41
+ /**
42
+ * Checks the "csServicesPerformed" property to see whether mafia currently believes this test is complete.
43
+ * @returns Whether mafia currently believes this test is complete.
44
+ */
45
+ isDone(): boolean;
46
+ /**
47
+ * Maximizes based on the Requirement associated with this particular test.
48
+ */
49
+ maximize(): void;
50
+ /**
51
+ * Attempts to turn in the test to the Council of Loathing.
52
+ * @returns Whether mafia believes the test is complete at the end of this function.
53
+ */
54
+ do(): boolean;
55
+ /**
56
+ * Wrapper function that prepares for a test and then completes it, adding time and turn details to the log.
57
+ * @param prepare A function that does all necessary preparations for this CS test, including choosing your outfit.
58
+ * @param beCertain Whether we should check council.php instead of mafia to determine whether the test is complete.
59
+ * @returns The output of the prepare function given, or null if the test is already complete.
60
+ */
61
+ run<T>(prepare: () => T, beCertain?: boolean): T | null;
62
+ /**
63
+ * Checks council.php to verify that a test is complete; more reliable than isDone, but requires an additional pagehit.
64
+ * @returns Whether council.php suggests that the test is complete.
65
+ */
66
+ verifyIsDone(): boolean;
67
+ }
68
+ export declare const HP: Test;
69
+ export declare const Muscle: Test;
70
+ export declare const Mysticality: Test;
71
+ export declare const Moxie: Test;
72
+ export declare const FamiliarWeight: Test;
73
+ export declare const WeaponDamage: Test;
74
+ export declare const SpellDamage: Test;
75
+ export declare const Noncombat: Test;
76
+ export declare const BoozeDrop: Test;
77
+ export declare const HotRes: Test;
78
+ export declare const CoilWire: Test;
79
+ /**
80
+ * Prints turncount and time details of the test in question.
81
+ * @param colour The colour (or color) you'd like the log to be printed in.
82
+ */
83
+ export declare function printLog(colour?: string): void;
84
+ export {};
@@ -0,0 +1,193 @@
1
+ import { equippedItem, familiarWeight, getPower, haveEquipped, myBasestat, myBuffedstat, myClass, myFamiliar, myLevel, myMaxhp, myThrall, myTurncount, numericModifier, print, runChoice, toSlot, visitUrl, weightAdjustment, } from "kolmafia";
2
+ import { get } from "../../property";
3
+ import { Requirement } from "../../maximize";
4
+ import { $class, $effect, $familiar, $item, $items, $slot, $stat, $thrall, } from "../../template-string";
5
+ import { get as getModifier } from "../../modifier";
6
+ import { have } from "../../lib";
7
+ import { SongBoom } from "../../resources";
8
+ import { sum } from "../../utils";
9
+ /**
10
+ * A log of the predicted turns, actual turns, and duration of each CS test performed.
11
+ */
12
+ export const log = {};
13
+ class Test {
14
+ choice;
15
+ property;
16
+ predictor;
17
+ maximizeRequirements;
18
+ /**
19
+ * Class to store properties of various CS tests.
20
+ * @param id The id the game HTML uses to identify the test; this is used primarily in runChoice.
21
+ * @param property The name of the test as a string, often used as part of the string property "csServicesPerformed".
22
+ * @param predictor A function that returns an estimate for the number of turns that the test will take given your character's current state.
23
+ * @param maximizeRequirements A Requirement object, if applicable, that aligns with the things needed to maximize for this particular test.
24
+ */
25
+ constructor(id, property, predictor, maximizeRequirements = null) {
26
+ this.choice = id;
27
+ this.property = property;
28
+ this.predictor = predictor;
29
+ this.maximizeRequirements = maximizeRequirements;
30
+ }
31
+ /**
32
+ * @returns The id number of the test, used primarily in runChoice.
33
+ */
34
+ get id() {
35
+ return this.choice;
36
+ }
37
+ /**
38
+ * @returns The name of the test, used primarily as part of the string property "csServicesPerformed"
39
+ */
40
+ get name() {
41
+ return this.property;
42
+ }
43
+ /**
44
+ * @returns The predicted number of turns this test will take given your character's current state.
45
+ */
46
+ get prediction() {
47
+ return this.predictor();
48
+ }
49
+ /**
50
+ * @returns A Requirement object, if applicable, that aligns with the things needed to maximize for this particular test.
51
+ */
52
+ get requirement() {
53
+ return this.maximizeRequirements;
54
+ }
55
+ /**
56
+ * Checks the "csServicesPerformed" property to see whether mafia currently believes this test is complete.
57
+ * @returns Whether mafia currently believes this test is complete.
58
+ */
59
+ isDone() {
60
+ return get("csServicesPerformed").includes(this.property);
61
+ }
62
+ /**
63
+ * Maximizes based on the Requirement associated with this particular test.
64
+ */
65
+ maximize() {
66
+ if (this.maximizeRequirements)
67
+ this.maximizeRequirements.maximize();
68
+ }
69
+ /**
70
+ * Attempts to turn in the test to the Council of Loathing.
71
+ * @returns Whether mafia believes the test is complete at the end of this function.
72
+ */
73
+ do() {
74
+ visitUrl("council.php");
75
+ runChoice(this.choice);
76
+ return this.isDone();
77
+ }
78
+ /**
79
+ * Wrapper function that prepares for a test and then completes it, adding time and turn details to the log.
80
+ * @param prepare A function that does all necessary preparations for this CS test, including choosing your outfit.
81
+ * @param beCertain Whether we should check council.php instead of mafia to determine whether the test is complete.
82
+ * @returns The output of the prepare function given, or null if the test is already complete.
83
+ */
84
+ run(prepare, beCertain = false) {
85
+ const finishedFunction = beCertain ? this.verifyIsDone : this.isDone;
86
+ if (finishedFunction())
87
+ return null;
88
+ const startTime = Date.now();
89
+ const startTurns = myTurncount();
90
+ try {
91
+ return prepare();
92
+ }
93
+ finally {
94
+ const prediction = this.predictor();
95
+ this.do();
96
+ const loggedTest = {
97
+ predictedTurns: prediction,
98
+ turnCost: myTurncount() - startTurns,
99
+ seconds: (Date.now() - startTime) / 1000,
100
+ };
101
+ if (finishedFunction()) {
102
+ log[this.property] = loggedTest;
103
+ }
104
+ }
105
+ }
106
+ /**
107
+ * Checks council.php to verify that a test is complete; more reliable than isDone, but requires an additional pagehit.
108
+ * @returns Whether council.php suggests that the test is complete.
109
+ */
110
+ verifyIsDone() {
111
+ return !visitUrl("council.php").includes(`<input type=hidden name=option value=${this.choice}>`);
112
+ }
113
+ }
114
+ const thralls = new Map([
115
+ [$stat `muscle`, $thrall `Elbow Macaroni`],
116
+ [$stat `moxie`, $thrall `Penne Dreadful`],
117
+ ]);
118
+ const statTestPredictor = (stat) => {
119
+ let baseStat = stat;
120
+ if (myClass() === $class `Pastamancer`) {
121
+ const thrall = thralls.get(stat);
122
+ if (thrall && myThrall() === thrall)
123
+ baseStat = $stat `mysticality`;
124
+ }
125
+ return () => 60 - Math.floor((1 / 30) * (myBuffedstat(stat) - myBasestat(baseStat)));
126
+ };
127
+ export const HP = new Test(1, "Donate Blood", () => 60 - Math.floor((myMaxhp() - myBuffedstat($stat `muscle`) - 3) / 30), new Requirement(["HP"], {}));
128
+ export const Muscle = new Test(2, "Feed The Children", statTestPredictor($stat `Muscle`), new Requirement(["Muscle"], {}));
129
+ export const Mysticality = new Test(3, "Build Playground Mazes", statTestPredictor($stat `Mysticality`), new Requirement(["Mysticality"], {}));
130
+ export const Moxie = new Test(4, "Feed Conspirators", statTestPredictor($stat `Moxie`), new Requirement(["Moxie"], {}));
131
+ export const FamiliarWeight = new Test(5, "Breed More Collies", () => 60 - Math.floor((familiarWeight(myFamiliar()) + weightAdjustment()) / 5), new Requirement(["Familiar Weight"], {}));
132
+ export const WeaponDamage = new Test(6, "Reduce Gazelle Population", () => {
133
+ const weaponPower = getPower(equippedItem($slot `weapon`));
134
+ const offhandPower = toSlot(equippedItem($slot `off-hand`)) === $slot `weapon`
135
+ ? getPower(equippedItem($slot `off-hand`))
136
+ : 0;
137
+ const familiarPower = toSlot(equippedItem($slot `familiar`)) === $slot `weapon`
138
+ ? getPower(equippedItem($slot `familiar`))
139
+ : 0;
140
+ const songDamage = SongBoom.song() === "These Fists Were Made for Punchin'" ? myLevel() : 0;
141
+ // mafia does not currently count swagger
142
+ const multiplier = have($effect `Bow-Legged Swagger`) ? 2 : 1;
143
+ return (60 -
144
+ Math.floor((multiplier *
145
+ (getModifier("Weapon Damage") -
146
+ 0.15 * (weaponPower + offhandPower + familiarPower) -
147
+ songDamage)) /
148
+ 50 +
149
+ 0.001) -
150
+ Math.floor((multiplier * getModifier("Weapon Damage Percent")) / 50 + 0.001));
151
+ }, new Requirement(["Weapon Damage", "Weapon Damage Percent"], {}));
152
+ export const SpellDamage = new Test(7, "Make Sausage", () => {
153
+ const dragonfishDamage = myFamiliar() === $familiar `Magic Dragonfish`
154
+ ? numericModifier($familiar `Magic Dragonfish`, "Spell Damage Percent", familiarWeight($familiar `Magic Dragonfish`) + weightAdjustment(), $item `none`)
155
+ : 0;
156
+ return (60 -
157
+ Math.floor(getModifier("Spell Damage") / 50 + 0.001) -
158
+ Math.floor((getModifier("Spell Damage Percent") - dragonfishDamage) / 50 + 0.001));
159
+ }, new Requirement(["Spell Damage", "Spell Damage Percent"], {}));
160
+ export const Noncombat = new Test(8, "Be a Living Statue", () => {
161
+ const noncombatRate = -1 * getModifier("Combat Rate");
162
+ const unsoftcappedRate = noncombatRate > 25 ? 25 + (noncombatRate - 25) * 5 : noncombatRate;
163
+ return 60 - 3 * Math.floor(unsoftcappedRate / 5);
164
+ }, new Requirement(["-combat"], {}));
165
+ export const BoozeDrop = new Test(9, "Make Margaritas", () => {
166
+ const familiarItemDrop = numericModifier(myFamiliar(), "Item Drop", familiarWeight(myFamiliar()) + weightAdjustment(), equippedItem($slot `familiar`));
167
+ //Champagne doubling does NOT count for CS, so we undouble
168
+ const multiplier = haveEquipped($item `broken champagne bottle`) &&
169
+ get("garbageChampagneCharge") > 0
170
+ ? 0.5
171
+ : 1;
172
+ return (60 -
173
+ multiplier *
174
+ Math.floor((getModifier("Item Drop") - familiarItemDrop) / 30 + 0.001) -
175
+ Math.floor(getModifier("Booze Drop") / 15 + 0.001));
176
+ }, new Requirement(["Item Drop", "2 Booze Drop"], {
177
+ preventEquip: $items `broken champagne bottle`,
178
+ }));
179
+ export const HotRes = new Test(10, "Clean Steam Tunnels", () => 60 - getModifier("Hot Resistance"), new Requirement(["Hot Resistance"], {}));
180
+ export const CoilWire = new Test(11, "Coil Wire", () => 60, null);
181
+ /**
182
+ * Prints turncount and time details of the test in question.
183
+ * @param colour The colour (or color) you'd like the log to be printed in.
184
+ */
185
+ export function printLog(colour = "blue") {
186
+ const logEntries = Object.entries(log);
187
+ for (const [testName, testEntry] of logEntries) {
188
+ const { predictedTurns, turnCost, seconds } = testEntry;
189
+ print(`We predicted the ${testName} test would take ${predictedTurns} turns, ${predictedTurns === turnCost ? "and" : "but"} it took ${turnCost} turns`, colour);
190
+ print(`${testName} took ${seconds} seconds`, colour);
191
+ }
192
+ print(`All together, you have spent ${sum(logEntries, ([, testEntry]) => testEntry.seconds)} seconds during this Community Service run`, colour);
193
+ }
@@ -0,0 +1,2 @@
1
+ import * as CommunityService from "./2015/CommunityService";
2
+ export { CommunityService };
@@ -0,0 +1,2 @@
1
+ import * as CommunityService from "./2015/CommunityService";
2
+ export { CommunityService };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./actions";
2
2
  export * from "./ascend";
3
3
  export * from "./Clan";
4
+ export * from "./challengePaths";
4
5
  export * from "./combat";
5
6
  export * as Counter from "./counter";
6
7
  export * from "./diet";
@@ -19,6 +20,7 @@ export * from "./utils";
19
20
  export { get, PropertiesManager, set, setProperties, withProperties, withProperty, withChoices, withChoice, } from "./property";
20
21
  export { get as getModifier } from "./modifier";
21
22
  export { Modifiers } from "./modifier";
23
+ export { Session } from "./session";
22
24
  export * as Dreadsylvania from "./dungeons/Dreadsylvania";
23
25
  export * as Hobopolis from "./dungeons/Hobopolis";
24
26
  export * as SlimeTube from "./dungeons/SlimeTube";
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./actions";
2
2
  export * from "./ascend";
3
3
  export * from "./Clan";
4
+ export * from "./challengePaths";
4
5
  export * from "./combat";
5
6
  export * as Counter from "./counter";
6
7
  export * from "./diet";
@@ -18,6 +19,7 @@ export * as property from "./property";
18
19
  export * from "./utils";
19
20
  export { get, PropertiesManager, set, setProperties, withProperties, withProperty, withChoices, withChoice, } from "./property";
20
21
  export { get as getModifier } from "./modifier";
22
+ export { Session } from "./session";
21
23
  export * as Dreadsylvania from "./dungeons/Dreadsylvania";
22
24
  export * as Hobopolis from "./dungeons/Hobopolis";
23
25
  export * as SlimeTube from "./dungeons/SlimeTube";
@@ -3,7 +3,7 @@ export declare type BooleanProperty = "addChatCommandLine" | "addCreationQueue"
3
3
  export declare type NumericProperty = "charsheetDropdown" | "chatStyle" | "coinMasterIndex" | "dailyDeedsVersion" | "defaultDropdown1" | "defaultDropdown2" | "defaultDropdownSplit" | "defaultLimit" | "fixedThreadPoolSize" | "itemManagerIndex" | "lastBuffRequestType" | "lastGlobalCounterDay" | "lastImageCacheClear" | "lastRssUpdate" | "previousUpdateRevision" | "relaySkillButtonCount" | "scriptButtonPosition" | "statusDropdown" | "svnThreadPoolSize" | "toolbarPosition" | "_g9Effect" | "addingScrolls" | "affirmationCookiesEaten" | "aminoAcidsUsed" | "antagonisticSnowmanKitCost" | "autoAbortThreshold" | "autoAntidote" | "autoBuyPriceLimit" | "availableCandyCredits" | "availableDimes" | "availableFunPoints" | "availableQuarters" | "availableStoreCredits" | "availableSwagger" | "averageSwagger" | "awolMedicine" | "awolPointsBeanslinger" | "awolPointsCowpuncher" | "awolPointsSnakeoiler" | "awolDeferredPointsBeanslinger" | "awolDeferredPointsCowpuncher" | "awolDeferredPointsSnakeoiler" | "awolVenom" | "bagOTricksCharges" | "ballpitBonus" | "bankedKarma" | "barrelGoal" | "bartenderTurnsUsed" | "basementMallPrices" | "basementSafetyMargin" | "batmanFundsAvailable" | "batmanBonusInitialFunds" | "batmanTimeLeft" | "bearSwagger" | "beeCounter" | "beGregariousCharges" | "beGregariousFightsLeft" | "birdformCold" | "birdformHot" | "birdformRoc" | "birdformSleaze" | "birdformSpooky" | "birdformStench" | "blackBartsBootyCost" | "blackPuddingsDefeated" | "blackForestProgress" | "blankOutUsed" | "bloodweiserDrunk" | "bondPoints" | "bondVillainsDefeated" | "boneAbacusVictories" | "booPeakProgress" | "borisPoints" | "breakableHandling" | "breakableHandling1964" | "breakableHandling9691" | "breakableHandling9692" | "breakableHandling9699" | "breathitinCharges" | "brodenBacteria" | "brodenSprinkles" | "buffBotMessageDisposal" | "buffBotPhilanthropyType" | "buffJimmyIngredients" | "burnoutsDefeated" | "burrowgrubSummonsRemaining" | "camelSpit" | "camerasUsed" | "campAwayDecoration" | "carboLoading" | "catBurglarBankHeists" | "cellarLayout" | "charitableDonations" | "chasmBridgeProgress" | "chefTurnsUsed" | "chessboardsCleared" | "chilledToTheBone" | "cinderellaMinutesToMidnight" | "cinderellaScore" | "cocktailSummons" | "commerceGhostCombats" | "controlPanelOmega" | "cornucopiasOpened" | "cozyCounter6332" | "cozyCounter6333" | "cozyCounter6334" | "crimbo16BeardChakraCleanliness" | "crimbo16BootsChakraCleanliness" | "crimbo16BungChakraCleanliness" | "crimbo16CrimboHatChakraCleanliness" | "crimbo16GutsChakraCleanliness" | "crimbo16HatChakraCleanliness" | "crimbo16JellyChakraCleanliness" | "crimbo16LiverChakraCleanliness" | "crimbo16NippleChakraCleanliness" | "crimbo16NoseChakraCleanliness" | "crimbo16ReindeerChakraCleanliness" | "crimbo16SackChakraCleanliness" | "crimboTreeDays" | "cubelingProgress" | "currentExtremity" | "currentHedgeMazeRoom" | "currentMojoFilters" | "currentNunneryMeat" | "cursedMagnifyingGlassCount" | "cyrptAlcoveEvilness" | "cyrptCrannyEvilness" | "cyrptNicheEvilness" | "cyrptNookEvilness" | "cyrptTotalEvilness" | "darkGyfftePoints" | "daycareEquipment" | "daycareInstructors" | "daycareLastScavenge" | "daycareToddlers" | "dbNemesisSkill1" | "dbNemesisSkill2" | "dbNemesisSkill3" | "desertExploration" | "desktopHeight" | "desktopWidth" | "dinseyFilthLevel" | "dinseyFunProgress" | "dinseyNastyBearsDefeated" | "dinseySocialJusticeIProgress" | "dinseySocialJusticeIIProgress" | "dinseyTouristsFed" | "dinseyToxicMultiplier" | "doctorBagQuestLights" | "doctorBagUpgrades" | "dreadScroll1" | "dreadScroll2" | "dreadScroll3" | "dreadScroll4" | "dreadScroll5" | "dreadScroll6" | "dreadScroll7" | "dreadScroll8" | "dripAdventuresSinceAscension" | "drippingHallAdventuresSinceAscension" | "drippingTreesAdventuresSinceAscension" | "drippyBatsUnlocked" | "drippyJuice" | "drippyOrbsClaimed" | "drunkenSwagger" | "edDefeatAbort" | "edPoints" | "eldritchTentaclesFought" | "electricKoolAidEaten" | "encountersUntilDMTChoice" | "encountersUntilNEPChoice" | "ensorceleeLevel" | "entauntaunedColdRes" | "essenceOfAnnoyanceCost" | "essenceOfBearCost" | "extraRolloverAdventures" | "falloutShelterLevel" | "lastBeardBuff" | "fingernailsClipped" | "fistSkillsKnown" | "flyeredML" | "fossilB" | "fossilD" | "fossilN" | "fossilP" | "fossilS" | "fossilW" | "fratboysDefeated" | "frenchGuardTurtlesFreed" | "garbageChampagneCharge" | "garbageFireProgress" | "garbageShirtCharge" | "garbageTreeCharge" | "garlandUpgrades" | "gingerDigCount" | "gingerLawChoice" | "gingerMuscleChoice" | "gingerTrainScheduleStudies" | "gladiatorBallMovesKnown" | "gladiatorBladeMovesKnown" | "gladiatorNetMovesKnown" | "glitchItemCost" | "glitchItemImplementationCount" | "glitchItemImplementationLevel" | "glitchSwagger" | "gloverPoints" | "gnasirProgress" | "goldenMrAccessories" | "gongPath" | "goreCollected" | "gourdItemCount" | "grimoire1Summons" | "grimoire2Summons" | "grimoire3Summons" | "grimstoneCharge" | "guardTurtlesFreed" | "guideToSafariCost" | "guyMadeOfBeesCount" | "guzzlrBronzeDeliveries" | "guzzlrDeliveryProgress" | "guzzlrGoldDeliveries" | "guzzlrPlatinumDeliveries" | "haciendaLayout" | "heavyRainsStartingThunder" | "heavyRainsStartingRain" | "heavyRainsStartingLightning" | "heroDonationBoris" | "heroDonationJarlsberg" | "heroDonationSneakyPete" | "hiddenApartmentProgress" | "hiddenBowlingAlleyProgress" | "hiddenHospitalProgress" | "hiddenOfficeProgress" | "hiddenTavernUnlock" | "highTopPumped" | "hippiesDefeated" | "holidayHalsBookCost" | "holidaySwagger" | "homebodylCharges" | "hpAutoRecovery" | "hpAutoRecoveryTarget" | "iceSwagger" | "item9084" | "jarlsbergPoints" | "jungCharge" | "junglePuns" | "knownAscensions" | "kolhsTotalSchoolSpirited" | "lastAnticheeseDay" | "lastArcadeAscension" | "lastBadMoonReset" | "lastBangPotionReset" | "lastBarrelSmashed" | "lastBattlefieldReset" | "lastBreakfast" | "lastCastleGroundUnlock" | "lastCastleTopUnlock" | "lastCellarReset" | "lastChanceThreshold" | "lastChasmReset" | "lastColosseumRoundWon" | "lastCouncilVisit" | "lastCounterDay" | "lastDesertUnlock" | "lastDispensaryOpen" | "lastDMTDuplication" | "lastDwarfFactoryReset" | "lastEVHelmetValue" | "lastEVHelmetReset" | "lastEasterEggBalloon" | "lastEmptiedStorage" | "lastFilthClearance" | "lastGoofballBuy" | "lastGuildStoreOpen" | "lastGuyMadeOfBeesReset" | "lastFratboyCall" | "lastFriarCeremonyAscension" | "lastHippyCall" | "lastIslandUnlock" | "lastKeyotronUse" | "lastKingLiberation" | "lastLightsOutTurn" | "lastMushroomPlot" | "lastMiningReset" | "lastNemesisReset" | "lastPaperStripReset" | "lastPirateEphemeraReset" | "lastPirateInsultReset" | "lastPlusSignUnlock" | "lastQuartetAscension" | "lastQuartetRequest" | "lastSecondFloorUnlock" | "lastSkateParkReset" | "lastStillBeatingSpleen" | "lastTavernAscension" | "lastTavernSquare" | "lastTelescopeReset" | "lastTempleAdventures" | "lastTempleButtonsUnlock" | "lastTempleUnlock" | "lastTr4pz0rQuest" | "lastVioletFogMap" | "lastVoteMonsterTurn" | "lastWartDinseyDefeated" | "lastWuTangDefeated" | "lastYearbookCameraAscension" | "lastZapperWand" | "lastZapperWandExplosionDay" | "lawOfAveragesCost" | "libramSummons" | "lightsOutAutomation" | "louvreDesiredGoal" | "louvreGoal" | "lttQuestDifficulty" | "lttQuestStageCount" | "manaBurnSummonThreshold" | "manaBurningThreshold" | "manaBurningTrigger" | "manorDrawerCount" | "manualOfNumberologyCost" | "mapToKokomoCost" | "masksUnlocked" | "maximizerMRUSize" | "maximizerCombinationLimit" | "maximizerEquipmentLevel" | "maximizerEquipmentScope" | "maximizerMaxPrice" | "maximizerPriceLevel" | "maxManaBurn" | "mayflyExperience" | "mayoLevel" | "meansuckerPrice" | "merkinVocabularyMastery" | "miniAdvClass" | "miniMartinisDrunk" | "moleTunnelLevel" | "mothershipProgress" | "mpAutoRecovery" | "mpAutoRecoveryTarget" | "munchiesPillsUsed" | "mushroomGardenCropLevel" | "nextParanormalActivity" | "nextQuantumFamiliarTurn" | "noobPoints" | "noobDeferredPoints" | "noodleSummons" | "nsContestants1" | "nsContestants2" | "nsContestants3" | "numericSwagger" | "nunsVisits" | "oilPeakProgress" | "optimalSwagger" | "optimisticCandleProgress" | "palindomeDudesDefeated" | "parasolUsed" | "pendingMapReflections" | "pirateSwagger" | "plantingDay" | "plumberBadgeCost" | "plumberCostumeCost" | "plumberPoints" | "poolSharkCount" | "poolSkill" | "primaryLabGooIntensity" | "prismaticSummons" | "procrastinatorLanguageFluency" | "promptAboutCrafting" | "puzzleChampBonus" | "pyramidPosition" | "rockinRobinProgress" | "ROMOfOptimalityCost" | "quantumPoints" | "reagentSummons" | "reanimatorArms" | "reanimatorLegs" | "reanimatorSkulls" | "reanimatorWeirdParts" | "reanimatorWings" | "recentLocations" | "redSnapperProgress" | "relocatePygmyJanitor" | "relocatePygmyLawyer" | "rumpelstiltskinTurnsUsed" | "rumpelstiltskinKidsRescued" | "safariSwagger" | "sausageGrinderUnits" | "schoolOfHardKnocksDiplomaCost" | "schoolSwagger" | "scrapbookCharges" | "scriptMRULength" | "seaodesFound" | "SeasoningSwagger" | "sexChanges" | "shenInitiationDay" | "shockingLickCharges" | "singleFamiliarRun" | "skillBurn3" | "skillBurn90" | "skillBurn153" | "skillBurn154" | "skillBurn155" | "skillBurn1019" | "skillBurn5017" | "skillBurn6014" | "skillBurn6015" | "skillBurn6016" | "skillBurn6020" | "skillBurn6021" | "skillBurn6022" | "skillBurn6023" | "skillBurn6024" | "skillBurn6026" | "skillBurn6028" | "skillBurn7323" | "skillBurn14008" | "skillBurn14028" | "skillBurn14038" | "skillBurn15011" | "skillBurn15028" | "skillBurn17005" | "skillBurn22034" | "skillBurn22035" | "skillBurn23301" | "skillBurn23302" | "skillBurn23303" | "skillBurn23304" | "skillBurn23305" | "skillBurn23306" | "skillLevel46" | "skillLevel47" | "skillLevel48" | "skillLevel117" | "skillLevel118" | "skillLevel121" | "skillLevel128" | "skillLevel134" | "skillLevel144" | "skillLevel180" | "skillLevel188" | "skillLevel7254" | "slimelingFullness" | "slimelingStacksDropped" | "slimelingStacksDue" | "smoresEaten" | "smutOrcNoncombatProgress" | "sneakyPetePoints" | "snojoMoxieWins" | "snojoMuscleWins" | "snojoMysticalityWins" | "sourceAgentsDefeated" | "sourceEnlightenment" | "sourceInterval" | "sourcePoints" | "sourceTerminalGram" | "sourceTerminalPram" | "sourceTerminalSpam" | "spaceBabyLanguageFluency" | "spacePirateLanguageFluency" | "spelunkyNextNoncombat" | "spelunkySacrifices" | "spelunkyWinCount" | "spookyPuttyCopiesMade" | "statbotUses" | "sugarCounter4178" | "sugarCounter4179" | "sugarCounter4180" | "sugarCounter4181" | "sugarCounter4182" | "sugarCounter4183" | "sugarCounter4191" | "summonAnnoyanceCost" | "tacoDanCocktailSauce" | "tacoDanFishMeat" | "tavernLayout" | "telescopeUpgrades" | "tempuraSummons" | "timeSpinnerMedals" | "timesRested" | "tomeSummons" | "totalCharitableDonations" | "turtleBlessingTurns" | "twinPeakProgress" | "unicornHornInflation" | "universalSeasoningCost" | "usable1HWeapons" | "usable1xAccs" | "usable2HWeapons" | "usable3HWeapons" | "usableAccessories" | "usableHats" | "usableOffhands" | "usableOther" | "usablePants" | "usableShirts" | "valueOfAdventure" | "valueOfInventory" | "valueOfStill" | "valueOfTome" | "vintnerWineLevel" | "violetFogGoal" | "walfordBucketProgress" | "warehouseProgress" | "welcomeBackAdv" | "writingDesksDefeated" | "xoSkeleltonXProgress" | "xoSkeleltonOProgress" | "yearbookCameraAscensions" | "yearbookCameraUpgrades" | "youRobotBody" | "youRobotBottom" | "youRobotLeft" | "youRobotPoints" | "youRobotRight" | "youRobotTop" | "zeppelinProtestors" | "zombiePoints" | "_absintheDrops" | "_abstractionDropsCrown" | "_aguaDrops" | "_xenomorphCharge" | "_ancestralRecallCasts" | "_antihangoverBonus" | "_astralDrops" | "_backUpUses" | "_badlyRomanticArrows" | "_badgerCharge" | "_balefulHowlUses" | "_banderRunaways" | "_bastilleGames" | "_beanCannonUses" | "_bearHugs" | "_beerLensDrops" | "_benettonsCasts" | "_birdsSoughtToday" | "_boomBoxFights" | "_boomBoxSongsLeft" | "_bootStomps" | "_boxingGloveArrows" | "_brickoEyeSummons" | "_brickoFights" | "_campAwayCloudBuffs" | "_campAwaySmileBuffs" | "_candySummons" | "_captainHagnkUsed" | "_carnieCandyDrops" | "_carrotNoseDrops" | "_catBurglarCharge" | "_catBurglarHeistsComplete" | "_cheerleaderSteam" | "_chestXRayUsed" | "_chipBags" | "_chocolateCigarsUsed" | "_chocolateSculpturesUsed" | "_chocolatesUsed" | "_chronolithActivations" | "_clanFortuneConsultUses" | "_clipartSummons" | "_coldMedicineConsults" | "_companionshipCasts" | "_crimbo21ColdResistance" | "_dailySpecialPrice" | "_daycareGymScavenges" | "_daycareRecruits" | "_deckCardsDrawn" | "_deluxeKlawSummons" | "_demandSandwich" | "_detectiveCasesCompleted" | "_disavowed" | "_dnaPotionsMade" | "_donhosCasts" | "_dreamJarDrops" | "_drunkPygmyBanishes" | "_edDefeats" | "_edLashCount" | "_elronsCasts" | "_enamorangs" | "_energyCollected" | "_expertCornerCutterUsed" | "_favorRareSummons" | "_feastUsed" | "_feelinTheRhythm" | "_feelPrideUsed" | "_feelExcitementUsed" | "_feelHatredUsed" | "_feelLonelyUsed" | "_feelNervousUsed" | "_feelEnvyUsed" | "_feelDisappointedUsed" | "_feelSuperiorUsed" | "_feelLostUsed" | "_feelNostalgicUsed" | "_feelPeacefulUsed" | "_fingertrapArrows" | "_fireExtinguisherCharge" | "_fragrantHerbsUsed" | "_freeBeachWalksUsed" | "_frButtonsPressed" | "_fudgeWaspFights" | "_gapBuffs" | "_garbageFireDropsCrown" | "_genieFightsUsed" | "_genieWishesUsed" | "_gibbererAdv" | "_gibbererCharge" | "_gingerbreadCityTurns" | "_glarkCableUses" | "_glitchMonsterFights" | "_gnomeAdv" | "_godLobsterFights" | "_goldenMoneyCharge" | "_gongDrops" | "_gothKidCharge" | "_gothKidFights" | "_grimBrotherCharge" | "_grimFairyTaleDrops" | "_grimFairyTaleDropsCrown" | "_grimoireConfiscatorSummons" | "_grimoireGeekySummons" | "_grimstoneMaskDrops" | "_grimstoneMaskDropsCrown" | "_grooseCharge" | "_grooseDrops" | "_guzzlrDeliveries" | "_guzzlrGoldDeliveries" | "_guzzlrPlatinumDeliveries" | "_hareAdv" | "_hareCharge" | "_highTopPumps" | "_hipsterAdv" | "_hoardedCandyDropsCrown" | "_hoboUnderlingSummons" | "_holoWristDrops" | "_holoWristProgress" | "_hotAshesDrops" | "_hotJellyUses" | "_hotTubSoaks" | "_humanMuskUses" | "_iceballUses" | "_inigosCasts" | "_jerksHealthMagazinesUsed" | "_jiggleCheese" | "_jiggleCream" | "_jiggleLife" | "_jiggleSteak" | "_jitbCharge" | "_jungDrops" | "_kgbClicksUsed" | "_kgbDispenserUses" | "_kgbTranquilizerDartUses" | "_klawSummons" | "_kloopCharge" | "_kloopDrops" | "_kolhsAdventures" | "_kolhsSavedByTheBell" | "_lastDailyDungeonRoom" | "_lastSausageMonsterTurn" | "_lastZomboEye" | "_latteRefillsUsed" | "_leafblowerML" | "_legionJackhammerCrafting" | "_llamaCharge" | "_longConUsed" | "_loveChocolatesUsed" | "_lynyrdSnareUses" | "_machineTunnelsAdv" | "_macrometeoriteUses" | "_mafiaThumbRingAdvs" | "_monstersMapped" | "_mayflowerDrops" | "_mayflySummons" | "_mediumSiphons" | "_meteoriteAdesUsed" | "_meteorShowerUses" | "_micrometeoriteUses" | "_miniMartiniDrops" | "_mushroomGardenFights" | "_nanorhinoCharge" | "_navelRunaways" | "_neverendingPartyFreeTurns" | "_newYouQuestSharpensDone" | "_newYouQuestSharpensToDo" | "_nextColdMedicineConsult" | "_nextQuantumAlignment" | "_nightmareFuelCharges" | "_noobSkillCount" | "_nuclearStockpileUsed" | "_oilExtracted" | "_olfactionsUsed" | "_optimisticCandleDropsCrown" | "_oreDropsCrown" | "_otoscopeUsed" | "_pantsgivingBanish" | "_pantsgivingCount" | "_pantsgivingCrumbs" | "_pantsgivingFullness" | "_pasteDrops" | "_peteJukeboxFixed" | "_peteJumpedShark" | "_petePeeledOut" | "_pieDrops" | "_piePartsCount" | "_pixieCharge" | "_pocketProfessorLectures" | "_poisonArrows" | "_pokeGrowFertilizerDrops" | "_poolGames" | "_powderedGoldDrops" | "_powderedMadnessUses" | "_powerfulGloveBatteryPowerUsed" | "_powerPillDrops" | "_powerPillUses" | "_precisionCasts" | "_radlibSummons" | "_raindohCopiesMade" | "_rapidPrototypingUsed" | "_raveStealCount" | "_reflexHammerUsed" | "_resolutionAdv" | "_resolutionRareSummons" | "_riftletAdv" | "_rogueProgramCharge" | "_romanticFightsLeft" | "_saberForceMonsterCount" | "_saberForceUses" | "_saberMod" | "_saltGrainsConsumed" | "_sandwormCharge" | "_saplingsPlanted" | "_sausageFights" | "_sausagesEaten" | "_sausagesMade" | "_sealFigurineUses" | "_sealScreeches" | "_sealsSummoned" | "_shatteringPunchUsed" | "_shortOrderCookCharge" | "_shrubCharge" | "_sloppyDinerBeachBucks" | "_smilesOfMrA" | "_smithsnessSummons" | "_snojoFreeFights" | "_snojoParts" | "_snokebombUsed" | "_snowconeSummons" | "_snowglobeDrops" | "_snowSuitCount" | "_sourceTerminalDigitizeMonsterCount" | "_sourceTerminalDigitizeUses" | "_sourceTerminalDuplicateUses" | "_sourceTerminalEnhanceUses" | "_sourceTerminalExtrudes" | "_sourceTerminalPortscanUses" | "_spaceFurDropsCrown" | "_spacegatePlanetIndex" | "_spacegateTurnsLeft" | "_spaceJellyfishDrops" | "_speakeasyDrinksDrunk" | "_spelunkerCharges" | "_spelunkingTalesDrops" | "_spookyJellyUses" | "_stackLumpsUses" | "_steamCardDrops" | "_stickerSummons" | "_stinkyCheeseCount" | "_stressBallSqueezes" | "_sugarSummons" | "_taffyRareSummons" | "_taffyYellowSummons" | "_thanksgettingFoodsEaten" | "_thingfinderCasts" | "_thinknerdPackageDrops" | "_thorsPliersCrafting" | "_timeHelmetAdv" | "_timeSpinnerMinutesUsed" | "_tokenDrops" | "_transponderDrops" | "_turkeyBlastersUsed" | "_turkeyBooze" | "_turkeyMuscle" | "_turkeyMyst" | "_turkeyMoxie" | "_unaccompaniedMinerUsed" | "_unconsciousCollectiveCharge" | "_universalSeasoningsUsed" | "_universeCalculated" | "_universeImploded" | "_usedReplicaBatoomerang" | "_vampyreCloakeFormUses" | "_villainLairProgress" | "_vitachocCapsulesUsed" | "_vmaskAdv" | "_voidFreeFights" | "_volcanoItem1" | "_volcanoItem2" | "_volcanoItem3" | "_volcanoItemCount1" | "_volcanoItemCount2" | "_volcanoItemCount3" | "_voteFreeFights" | "_VYKEACompanionLevel" | "_warbearAutoAnvilCrafting" | "_whiteRiceDrops" | "_witchessFights" | "_xoHugsUsed" | "_yellowPixelDropsCrown" | "_zapCount";
4
4
  export declare type MonsterProperty = "beGregariousMonster" | "cameraMonster" | "chateauMonster" | "crappyCameraMonster" | "crudeMonster" | "enamorangMonster" | "envyfishMonster" | "lastCopyableMonster" | "iceSculptureMonster" | "longConMonster" | "makeFriendsMonster" | "merkinLockkeyMonster" | "nosyNoseMonster" | "olfactedMonster" | "photocopyMonster" | "rainDohMonster" | "romanticTarget" | "screencappedMonster" | "spookyPuttyMonster" | "stenchCursedMonster" | "superficiallyInterestedMonster" | "waxMonster" | "yearbookCameraTarget" | "_gallapagosMonster" | "_jiggleCreamedMonster" | "_latteMonster" | "_nanorhinoBanishedMonster" | "_newYouQuestMonster" | "_relativityMonster" | "_saberForceMonster" | "_sourceTerminalDigitizeMonster" | "_voteMonster";
5
5
  export declare type LocationProperty = "currentJunkyardLocation" | "doctorBagQuestLocation" | "ghostLocation" | "guzzlrQuestLocation" | "nextSpookyravenElizabethRoom" | "nextSpookyravenStephenRoom" | "sourceOracleTarget";
6
- export declare type StringProperty = "autoLogin" | "browserBookmarks" | "chatFontSize" | "combatHotkey0" | "combatHotkey1" | "combatHotkey2" | "combatHotkey3" | "combatHotkey4" | "combatHotkey5" | "combatHotkey6" | "combatHotkey7" | "combatHotkey8" | "combatHotkey9" | "commandLineNamespace" | "cookies.inventory" | "dailyDeedsOptions" | "defaultBorderColor" | "displayName" | "externalEditor" | "getBreakfast" | "headerStates" | "highlightList" | "http.proxyHost" | "http.proxyPassword" | "http.proxyPort" | "http.proxyUser" | "https.proxyHost" | "https.proxyPassword" | "https.proxyPort" | "https.proxyUser" | "initialDesktop" | "initialFrames" | "innerChatColor" | "innerTabColor" | "lastRelayUpdate" | "lastRssVersion" | "lastUserAgent" | "lastUsername" | "logPreferenceChangeFilter" | "loginScript" | "loginServerName" | "loginWindowLogo" | "logoutScript" | "outerChatColor" | "outerTabColor" | "previousNotifyList" | "previousUpdateVersion" | "saveState" | "saveStateActive" | "scriptList" | "swingLookAndFeel" | "useDecoratedTabs" | "userAgent" | "afterAdventureScript" | "autoOlfact" | "autoPutty" | "backupCameraMode" | "banishedMonsters" | "banishingShoutMonsters" | "barrelLayout" | "batmanStats" | "batmanZone" | "batmanUpgrades" | "battleAction" | "beachHeadsUnlocked" | "beforePVPScript" | "betweenBattleScript" | "boomBoxSong" | "breakfastAlways" | "breakfastHardcore" | "breakfastSoftcore" | "buffBotCasting" | "buyScript" | "cargoPocketsEmptied" | "cargoPocketScraps" | "chatbotScript" | "chatPlayerScript" | "choiceAdventureScript" | "chosenTrip" | "clanFortuneReply1" | "clanFortuneReply2" | "clanFortuneReply3" | "clanFortuneWord1" | "clanFortuneWord2" | "clanFortuneWord3" | "commerceGhostItem" | "counterScript" | "copperheadClubHazard" | "crimbotChassis" | "crimbotArm" | "crimbotPropulsion" | "crystalBallPredictions" | "csServicesPerformed" | "currentEasyBountyItem" | "currentHardBountyItem" | "currentHippyStore" | "currentJunkyardTool" | "currentMood" | "currentPVPSeason" | "currentPvpVictories" | "currentSpecialBountyItem" | "customCombatScript" | "cyrusAdjectives" | "defaultFlowerLossMessage" | "defaultFlowerWinMessage" | "demonName1" | "demonName2" | "demonName3" | "demonName4" | "demonName5" | "demonName6" | "demonName7" | "demonName8" | "demonName9" | "demonName10" | "demonName11" | "demonName12" | "demonName13" | "dinseyGatorStenchDamage" | "dinseyRollercoasterStats" | "doctorBagQuestItem" | "dolphinItem" | "edPiece" | "enamorangMonsterTurn" | "ensorcelee" | "EVEDirections" | "extraCosmeticModifiers" | "familiarScript" | "forbiddenStores" | "gameProBossSpecialPower" | "grimoireSkillsHardcore" | "grimoireSkillsSoftcore" | "grimstoneMaskPath" | "guzzlrQuestClient" | "guzzlrQuestBooze" | "guzzlrQuestTier" | "harvestGardenHardcore" | "harvestGardenSoftcore" | "hpAutoRecoveryItems" | "invalidBuffMessage" | "jickSwordModifier" | "kingLiberatedScript" | "lassoTraining" | "lastAdventure" | "lastBangPotion819" | "lastBangPotion820" | "lastBangPotion821" | "lastBangPotion822" | "lastBangPotion823" | "lastBangPotion824" | "lastBangPotion825" | "lastBangPotion826" | "lastBangPotion827" | "lastChanceBurn" | "lastChessboard" | "lastDwarfDiceRolls" | "lastDwarfDigitRunes" | "lastDwarfEquipmentRunes" | "lastDwarfFactoryItem118" | "lastDwarfFactoryItem119" | "lastDwarfFactoryItem120" | "lastDwarfFactoryItem360" | "lastDwarfFactoryItem361" | "lastDwarfFactoryItem362" | "lastDwarfFactoryItem363" | "lastDwarfFactoryItem364" | "lastDwarfFactoryItem365" | "lastDwarfFactoryItem910" | "lastDwarfFactoryItem3199" | "lastDwarfOfficeItem3208" | "lastDwarfOfficeItem3209" | "lastDwarfOfficeItem3210" | "lastDwarfOfficeItem3211" | "lastDwarfOfficeItem3212" | "lastDwarfOfficeItem3213" | "lastDwarfOfficeItem3214" | "lastDwarfOreRunes" | "lastDwarfHopper1" | "lastDwarfHopper2" | "lastDwarfHopper3" | "lastDwarfHopper4" | "lastEncounter" | "lastMacroError" | "lastMessageId" | "lastPaperStrip3144" | "lastPaperStrip4138" | "lastPaperStrip4139" | "lastPaperStrip4140" | "lastPaperStrip4141" | "lastPaperStrip4142" | "lastPaperStrip4143" | "lastPaperStrip4144" | "lastPirateEphemera" | "lastPorkoBoard" | "lastPorkoPayouts" | "lastPorkoExpected" | "lastSlimeVial3885" | "lastSlimeVial3886" | "lastSlimeVial3887" | "lastSlimeVial3888" | "lastSlimeVial3889" | "lastSlimeVial3890" | "lastSlimeVial3891" | "lastSlimeVial3892" | "lastSlimeVial3893" | "lastSlimeVial3894" | "lastSlimeVial3895" | "lastSlimeVial3896" | "latteModifier" | "latteUnlocks" | "libramSkillsHardcore" | "libramSkillsSoftcore" | "louvreOverride" | "lovePotion" | "lttQuestName" | "maximizerList" | "maximizerMRUList" | "mayoInMouth" | "mayoMinderSetting" | "merkinQuestPath" | "mineLayout1" | "mineLayout2" | "mineLayout3" | "mineLayout4" | "mineLayout5" | "mineLayout6" | "mpAutoRecoveryItems" | "muffinOnOrder" | "nextAdventure" | "nsChallenge2" | "nsChallenge3" | "nsChallenge4" | "nsChallenge5" | "nsTowerDoorKeysUsed" | "oceanAction" | "oceanDestination" | "pastaThrall1" | "pastaThrall2" | "pastaThrall3" | "pastaThrall4" | "pastaThrall5" | "pastaThrall6" | "pastaThrall7" | "pastaThrall8" | "peteMotorbikeTires" | "peteMotorbikeGasTank" | "peteMotorbikeHeadlight" | "peteMotorbikeCowling" | "peteMotorbikeMuffler" | "peteMotorbikeSeat" | "pieStuffing" | "plantingDate" | "plantingLength" | "plantingScript" | "plumberCostumeWorn" | "pokefamBoosts" | "postAscensionScript" | "preAscensionScript" | "retroCapeSuperhero" | "retroCapeWashingInstructions" | "questDoctorBag" | "questECoBucket" | "questESlAudit" | "questESlBacteria" | "questESlCheeseburger" | "questESlCocktail" | "questESlDebt" | "questESlFish" | "questESlMushStash" | "questESlSalt" | "questESlSprinkles" | "questESpEVE" | "questESpJunglePun" | "questESpGore" | "questESpClipper" | "questESpFakeMedium" | "questESpSerum" | "questESpSmokes" | "questESpOutOfOrder" | "questEStFishTrash" | "questEStGiveMeFuel" | "questEStNastyBears" | "questEStSocialJusticeI" | "questEStSocialJusticeII" | "questEStSuperLuber" | "questEStWorkWithFood" | "questEStZippityDooDah" | "questEUNewYou" | "questF01Primordial" | "questF02Hyboria" | "questF03Future" | "questF04Elves" | "questF05Clancy" | "questG01Meatcar" | "questG02Whitecastle" | "questG03Ego" | "questG04Nemesis" | "questG05Dark" | "questG06Delivery" | "questG07Myst" | "questG08Moxie" | "questG09Muscle" | "questGuzzlr" | "questI01Scapegoat" | "questI02Beat" | "questL02Larva" | "questL03Rat" | "questL04Bat" | "questL05Goblin" | "questL06Friar" | "questL07Cyrptic" | "questL08Trapper" | "questL09Topping" | "questL10Garbage" | "questL11MacGuffin" | "questL11Black" | "questL11Business" | "questL11Curses" | "questL11Desert" | "questL11Doctor" | "questL11Manor" | "questL11Palindome" | "questL11Pyramid" | "questL11Ron" | "questL11Shen" | "questL11Spare" | "questL11Worship" | "questL12War" | "questL12HippyFrat" | "questL13Final" | "questL13Warehouse" | "questLTTQuestByWire" | "questM01Untinker" | "questM02Artist" | "questM03Bugbear" | "questM05Toot" | "questM06Gourd" | "questM07Hammer" | "questM08Baker" | "questM09Rocks" | "questM10Azazel" | "questM11Postal" | "questM12Pirate" | "questM13Escape" | "questM14Bounty" | "questM15Lol" | "questM16Temple" | "questM17Babies" | "questM18Swamp" | "questM19Hippy" | "questM20Necklace" | "questM21Dance" | "questM22Shirt" | "questM23Meatsmith" | "questM24Doc" | "questM25Armorer" | "questM26Oracle" | "questPAGhost" | "questS01OldGuy" | "questS02Monkees" | "raveCombo1" | "raveCombo2" | "raveCombo3" | "raveCombo4" | "raveCombo5" | "raveCombo6" | "recoveryScript" | "relayCounters" | "royalty" | "scriptMRUList" | "seahorseName" | "shenQuestItem" | "shrubGarland" | "shrubGifts" | "shrubLights" | "shrubTopper" | "sideDefeated" | "sidequestArenaCompleted" | "sidequestFarmCompleted" | "sidequestJunkyardCompleted" | "sidequestLighthouseCompleted" | "sidequestNunsCompleted" | "sidequestOrchardCompleted" | "skateParkStatus" | "snowsuit" | "sourceTerminalChips" | "sourceTerminalEducate1" | "sourceTerminalEducate2" | "sourceTerminalEnquiry" | "sourceTerminalEducateKnown" | "sourceTerminalEnhanceKnown" | "sourceTerminalEnquiryKnown" | "sourceTerminalExtrudeKnown" | "spadingData" | "spadingScript" | "spelunkyStatus" | "spelunkyUpgrades" | "spookyravenRecipeUsed" | "stationaryButton1" | "stationaryButton2" | "stationaryButton3" | "stationaryButton4" | "stationaryButton5" | "streamCrossDefaultTarget" | "sweetSynthesisBlacklist" | "telescope1" | "telescope2" | "telescope3" | "telescope4" | "telescope5" | "testudinalTeachings" | "textColors" | "thanksMessage" | "tomeSkillsHardcore" | "tomeSkillsSoftcore" | "trackVoteMonster" | "trapperOre" | "umdLastObtained" | "vintnerWineType" | "violetFogLayout" | "volcanoMaze1" | "volcanoMaze2" | "volcanoMaze3" | "volcanoMaze4" | "volcanoMaze5" | "walfordBucketItem" | "warProgress" | "workteaClue" | "yourFavoriteBird" | "yourFavoriteBirdMods" | "youRobotCPUUpgrades" | "_beachHeadsUsed" | "_beachLayout" | "_beachMinutes" | "_birdOfTheDay" | "_birdOfTheDayMods" | "_bittycar" | "_campAwaySmileBuffSign" | "_cloudTalkMessage" | "_cloudTalkSmoker" | "_dailySpecial" | "_deckCardsSeen" | "_feastedFamiliars" | "_floristPlantsUsed" | "_frAreasUnlocked" | "_frHoursLeft" | "_frMonstersKilled" | "_horsery" | "_horseryCrazyMox" | "_horseryCrazyMus" | "_horseryCrazyMys" | "_horseryCrazyName" | "_horseryCurrentName" | "_horseryDarkName" | "_horseryNormalName" | "_horseryPaleName" | "_jickJarAvailable" | "_jiggleCheesedMonsters" | "_lastCombatStarted" | "_LastPirateRealmIsland" | "_mummeryMods" | "_mummeryUses" | "_newYouQuestSkill" | "_noHatModifier" | "_pantogramModifier" | "_questESp" | "_questPartyFair" | "_questPartyFairProgress" | "_questPartyFairQuest" | "_roboDrinks" | "_spacegateAnimalLife" | "_spacegateCoordinates" | "_spacegateHazards" | "_spacegateIntelligentLife" | "_spacegatePlanetName" | "_spacegatePlantLife" | "_stolenAccordions" | "_tempRelayCounters" | "_timeSpinnerFoodAvailable" | "_unknownEasyBountyItem" | "_unknownHardBountyItem" | "_unknownSpecialBountyItem" | "_untakenEasyBountyItem" | "_untakenHardBountyItem" | "_untakenSpecialBountyItem" | "_userMods" | "_villainLairColor" | "_villainLairKey" | "_voteLocal1" | "_voteLocal2" | "_voteLocal3" | "_voteLocal4" | "_voteMonster1" | "_voteMonster2" | "_voteModifier" | "_VYKEACompanionType" | "_VYKEACompanionRune" | "_VYKEACompanionName";
6
+ export declare type StringProperty = "autoLogin" | "browserBookmarks" | "chatFontSize" | "combatHotkey0" | "combatHotkey1" | "combatHotkey2" | "combatHotkey3" | "combatHotkey4" | "combatHotkey5" | "combatHotkey6" | "combatHotkey7" | "combatHotkey8" | "combatHotkey9" | "commandLineNamespace" | "cookies.inventory" | "dailyDeedsOptions" | "defaultBorderColor" | "displayName" | "externalEditor" | "getBreakfast" | "headerStates" | "highlightList" | "http.proxyHost" | "http.proxyPassword" | "http.proxyPort" | "http.proxyUser" | "https.proxyHost" | "https.proxyPassword" | "https.proxyPort" | "https.proxyUser" | "initialDesktop" | "initialFrames" | "innerChatColor" | "innerTabColor" | "lastRelayUpdate" | "lastRssVersion" | "lastUserAgent" | "lastUsername" | "logPreferenceChangeFilter" | "loginScript" | "loginServerName" | "loginWindowLogo" | "logoutScript" | "outerChatColor" | "outerTabColor" | "previousNotifyList" | "previousUpdateVersion" | "saveState" | "saveStateActive" | "scriptList" | "swingLookAndFeel" | "useDecoratedTabs" | "userAgent" | "afterAdventureScript" | "autoOlfact" | "autoPutty" | "backupCameraMode" | "banishedMonsters" | "banishingShoutMonsters" | "barrelLayout" | "batmanStats" | "batmanZone" | "batmanUpgrades" | "battleAction" | "beachHeadsUnlocked" | "beforePVPScript" | "betweenBattleScript" | "boomBoxSong" | "breakfastAlways" | "breakfastHardcore" | "breakfastSoftcore" | "buffBotCasting" | "buyScript" | "cargoPocketsEmptied" | "cargoPocketScraps" | "chatbotScript" | "chatPlayerScript" | "choiceAdventureScript" | "chosenTrip" | "clanFortuneReply1" | "clanFortuneReply2" | "clanFortuneReply3" | "clanFortuneWord1" | "clanFortuneWord2" | "clanFortuneWord3" | "commerceGhostItem" | "counterScript" | "copperheadClubHazard" | "crimbotChassis" | "crimbotArm" | "crimbotPropulsion" | "crystalBallPredictions" | "csServicesPerformed" | "currentEasyBountyItem" | "currentHardBountyItem" | "currentHippyStore" | "currentJunkyardTool" | "currentMood" | "currentPVPSeason" | "currentPvpVictories" | "currentSpecialBountyItem" | "customCombatScript" | "cyrusAdjectives" | "defaultFlowerLossMessage" | "defaultFlowerWinMessage" | "demonName1" | "demonName2" | "demonName3" | "demonName4" | "demonName5" | "demonName6" | "demonName7" | "demonName8" | "demonName9" | "demonName10" | "demonName11" | "demonName12" | "demonName13" | "dinseyGatorStenchDamage" | "dinseyRollercoasterStats" | "doctorBagQuestItem" | "dolphinItem" | "edPiece" | "enamorangMonsterTurn" | "ensorcelee" | "EVEDirections" | "extraCosmeticModifiers" | "familiarScript" | "forbiddenStores" | "gameProBossSpecialPower" | "grimoireSkillsHardcore" | "grimoireSkillsSoftcore" | "grimstoneMaskPath" | "guzzlrQuestClient" | "guzzlrQuestBooze" | "guzzlrQuestTier" | "harvestGardenHardcore" | "harvestGardenSoftcore" | "hpAutoRecoveryItems" | "invalidBuffMessage" | "jickSwordModifier" | "kingLiberatedScript" | "lassoTraining" | "lastAdventure" | "lastBangPotion819" | "lastBangPotion820" | "lastBangPotion821" | "lastBangPotion822" | "lastBangPotion823" | "lastBangPotion824" | "lastBangPotion825" | "lastBangPotion826" | "lastBangPotion827" | "lastChanceBurn" | "lastChessboard" | "lastDwarfDiceRolls" | "lastDwarfDigitRunes" | "lastDwarfEquipmentRunes" | "lastDwarfFactoryItem118" | "lastDwarfFactoryItem119" | "lastDwarfFactoryItem120" | "lastDwarfFactoryItem360" | "lastDwarfFactoryItem361" | "lastDwarfFactoryItem362" | "lastDwarfFactoryItem363" | "lastDwarfFactoryItem364" | "lastDwarfFactoryItem365" | "lastDwarfFactoryItem910" | "lastDwarfFactoryItem3199" | "lastDwarfOfficeItem3208" | "lastDwarfOfficeItem3209" | "lastDwarfOfficeItem3210" | "lastDwarfOfficeItem3211" | "lastDwarfOfficeItem3212" | "lastDwarfOfficeItem3213" | "lastDwarfOfficeItem3214" | "lastDwarfOreRunes" | "lastDwarfHopper1" | "lastDwarfHopper2" | "lastDwarfHopper3" | "lastDwarfHopper4" | "lastEncounter" | "lastMacroError" | "lastMessageId" | "lastPaperStrip3144" | "lastPaperStrip4138" | "lastPaperStrip4139" | "lastPaperStrip4140" | "lastPaperStrip4141" | "lastPaperStrip4142" | "lastPaperStrip4143" | "lastPaperStrip4144" | "lastPirateEphemera" | "lastPorkoBoard" | "lastPorkoPayouts" | "lastPorkoExpected" | "lastSlimeVial3885" | "lastSlimeVial3886" | "lastSlimeVial3887" | "lastSlimeVial3888" | "lastSlimeVial3889" | "lastSlimeVial3890" | "lastSlimeVial3891" | "lastSlimeVial3892" | "lastSlimeVial3893" | "lastSlimeVial3894" | "lastSlimeVial3895" | "lastSlimeVial3896" | "latteModifier" | "latteUnlocks" | "libramSkillsHardcore" | "libramSkillsSoftcore" | "louvreOverride" | "lovePotion" | "lttQuestName" | "maximizerList" | "maximizerMRUList" | "mayoInMouth" | "mayoMinderSetting" | "merkinQuestPath" | "mineLayout1" | "mineLayout2" | "mineLayout3" | "mineLayout4" | "mineLayout5" | "mineLayout6" | "mpAutoRecoveryItems" | "muffinOnOrder" | "nextAdventure" | "nsChallenge2" | "nsChallenge3" | "nsChallenge4" | "nsChallenge5" | "nsTowerDoorKeysUsed" | "oceanAction" | "oceanDestination" | "pastaThrall1" | "pastaThrall2" | "pastaThrall3" | "pastaThrall4" | "pastaThrall5" | "pastaThrall6" | "pastaThrall7" | "pastaThrall8" | "peteMotorbikeTires" | "peteMotorbikeGasTank" | "peteMotorbikeHeadlight" | "peteMotorbikeCowling" | "peteMotorbikeMuffler" | "peteMotorbikeSeat" | "pieStuffing" | "plantingDate" | "plantingLength" | "plantingScript" | "plumberCostumeWorn" | "pokefamBoosts" | "postAscensionScript" | "preAscensionScript" | "retroCapeSuperhero" | "retroCapeWashingInstructions" | "questDoctorBag" | "questECoBucket" | "questESlAudit" | "questESlBacteria" | "questESlCheeseburger" | "questESlCocktail" | "questESlDebt" | "questESlFish" | "questESlMushStash" | "questESlSalt" | "questESlSprinkles" | "questESpEVE" | "questESpJunglePun" | "questESpGore" | "questESpClipper" | "questESpFakeMedium" | "questESpSerum" | "questESpSmokes" | "questESpOutOfOrder" | "questEStFishTrash" | "questEStGiveMeFuel" | "questEStNastyBears" | "questEStSocialJusticeI" | "questEStSocialJusticeII" | "questEStSuperLuber" | "questEStWorkWithFood" | "questEStZippityDooDah" | "questEUNewYou" | "questF01Primordial" | "questF02Hyboria" | "questF03Future" | "questF04Elves" | "questF05Clancy" | "questG01Meatcar" | "questG02Whitecastle" | "questG03Ego" | "questG04Nemesis" | "questG05Dark" | "questG06Delivery" | "questG07Myst" | "questG08Moxie" | "questG09Muscle" | "questGuzzlr" | "questI01Scapegoat" | "questI02Beat" | "questL02Larva" | "questL03Rat" | "questL04Bat" | "questL05Goblin" | "questL06Friar" | "questL07Cyrptic" | "questL08Trapper" | "questL09Topping" | "questL10Garbage" | "questL11MacGuffin" | "questL11Black" | "questL11Business" | "questL11Curses" | "questL11Desert" | "questL11Doctor" | "questL11Manor" | "questL11Palindome" | "questL11Pyramid" | "questL11Ron" | "questL11Shen" | "questL11Spare" | "questL11Worship" | "questL12War" | "questL12HippyFrat" | "questL13Final" | "questL13Warehouse" | "questLTTQuestByWire" | "questM01Untinker" | "questM02Artist" | "questM03Bugbear" | "questM05Toot" | "questM06Gourd" | "questM07Hammer" | "questM08Baker" | "questM09Rocks" | "questM10Azazel" | "questM11Postal" | "questM12Pirate" | "questM13Escape" | "questM14Bounty" | "questM15Lol" | "questM16Temple" | "questM17Babies" | "questM18Swamp" | "questM19Hippy" | "questM20Necklace" | "questM21Dance" | "questM22Shirt" | "questM23Meatsmith" | "questM24Doc" | "questM25Armorer" | "questM26Oracle" | "questPAGhost" | "questS01OldGuy" | "questS02Monkees" | "raveCombo1" | "raveCombo2" | "raveCombo3" | "raveCombo4" | "raveCombo5" | "raveCombo6" | "recoveryScript" | "relayCounters" | "royalty" | "scriptMRUList" | "seahorseName" | "shenQuestItem" | "shrubGarland" | "shrubGifts" | "shrubLights" | "shrubTopper" | "sideDefeated" | "sidequestArenaCompleted" | "sidequestFarmCompleted" | "sidequestJunkyardCompleted" | "sidequestLighthouseCompleted" | "sidequestNunsCompleted" | "sidequestOrchardCompleted" | "skateParkStatus" | "snowsuit" | "sourceTerminalChips" | "sourceTerminalEducate1" | "sourceTerminalEducate2" | "sourceTerminalEnquiry" | "sourceTerminalEducateKnown" | "sourceTerminalEnhanceKnown" | "sourceTerminalEnquiryKnown" | "sourceTerminalExtrudeKnown" | "spadingData" | "spadingScript" | "spelunkyStatus" | "spelunkyUpgrades" | "spookyravenRecipeUsed" | "stationaryButton1" | "stationaryButton2" | "stationaryButton3" | "stationaryButton4" | "stationaryButton5" | "streamCrossDefaultTarget" | "sweetSynthesisBlacklist" | "telescope1" | "telescope2" | "telescope3" | "telescope4" | "telescope5" | "testudinalTeachings" | "textColors" | "thanksMessage" | "tomeSkillsHardcore" | "tomeSkillsSoftcore" | "trackVoteMonster" | "trapperOre" | "umdLastObtained" | "vintnerWineEffect" | "vintnerWineName" | "vintnerWineType" | "violetFogLayout" | "volcanoMaze1" | "volcanoMaze2" | "volcanoMaze3" | "volcanoMaze4" | "volcanoMaze5" | "walfordBucketItem" | "warProgress" | "workteaClue" | "yourFavoriteBird" | "yourFavoriteBirdMods" | "youRobotCPUUpgrades" | "_beachHeadsUsed" | "_beachLayout" | "_beachMinutes" | "_birdOfTheDay" | "_birdOfTheDayMods" | "_bittycar" | "_campAwaySmileBuffSign" | "_cloudTalkMessage" | "_cloudTalkSmoker" | "_dailySpecial" | "_deckCardsSeen" | "_feastedFamiliars" | "_floristPlantsUsed" | "_frAreasUnlocked" | "_frHoursLeft" | "_frMonstersKilled" | "_horsery" | "_horseryCrazyMox" | "_horseryCrazyMus" | "_horseryCrazyMys" | "_horseryCrazyName" | "_horseryCurrentName" | "_horseryDarkName" | "_horseryNormalName" | "_horseryPaleName" | "_jickJarAvailable" | "_jiggleCheesedMonsters" | "_lastCombatStarted" | "_LastPirateRealmIsland" | "_mummeryMods" | "_mummeryUses" | "_newYouQuestSkill" | "_noHatModifier" | "_pantogramModifier" | "_questESp" | "_questPartyFair" | "_questPartyFairProgress" | "_questPartyFairQuest" | "_roboDrinks" | "_spacegateAnimalLife" | "_spacegateCoordinates" | "_spacegateHazards" | "_spacegateIntelligentLife" | "_spacegatePlanetName" | "_spacegatePlantLife" | "_stolenAccordions" | "_tempRelayCounters" | "_timeSpinnerFoodAvailable" | "_unknownEasyBountyItem" | "_unknownHardBountyItem" | "_unknownSpecialBountyItem" | "_untakenEasyBountyItem" | "_untakenHardBountyItem" | "_untakenSpecialBountyItem" | "_userMods" | "_villainLairColor" | "_villainLairKey" | "_voteLocal1" | "_voteLocal2" | "_voteLocal3" | "_voteLocal4" | "_voteMonster1" | "_voteMonster2" | "_voteModifier" | "_VYKEACompanionType" | "_VYKEACompanionRune" | "_VYKEACompanionName";
7
7
  export declare type NumericOrStringProperty = "statusEngineering" | "statusGalley" | "statusMedbay" | "statusMorgue" | "statusNavigation" | "statusScienceLab" | "statusSonar" | "statusSpecialOps" | "statusWasteProcessing" | "choiceAdventure2" | "choiceAdventure3" | "choiceAdventure4" | "choiceAdventure5" | "choiceAdventure6" | "choiceAdventure7" | "choiceAdventure8" | "choiceAdventure9" | "choiceAdventure10" | "choiceAdventure11" | "choiceAdventure12" | "choiceAdventure14" | "choiceAdventure15" | "choiceAdventure16" | "choiceAdventure17" | "choiceAdventure18" | "choiceAdventure19" | "choiceAdventure20" | "choiceAdventure21" | "choiceAdventure22" | "choiceAdventure23" | "choiceAdventure24" | "choiceAdventure25" | "choiceAdventure26" | "choiceAdventure27" | "choiceAdventure28" | "choiceAdventure29" | "choiceAdventure40" | "choiceAdventure41" | "choiceAdventure42" | "choiceAdventure45" | "choiceAdventure46" | "choiceAdventure47" | "choiceAdventure71" | "choiceAdventure72" | "choiceAdventure73" | "choiceAdventure74" | "choiceAdventure75" | "choiceAdventure76" | "choiceAdventure77" | "choiceAdventure86" | "choiceAdventure87" | "choiceAdventure88" | "choiceAdventure89" | "choiceAdventure90" | "choiceAdventure91" | "choiceAdventure105" | "choiceAdventure106" | "choiceAdventure107" | "choiceAdventure108" | "choiceAdventure109" | "choiceAdventure110" | "choiceAdventure111" | "choiceAdventure112" | "choiceAdventure113" | "choiceAdventure114" | "choiceAdventure115" | "choiceAdventure116" | "choiceAdventure117" | "choiceAdventure118" | "choiceAdventure120" | "choiceAdventure123" | "choiceAdventure125" | "choiceAdventure126" | "choiceAdventure127" | "choiceAdventure129" | "choiceAdventure131" | "choiceAdventure132" | "choiceAdventure135" | "choiceAdventure136" | "choiceAdventure137" | "choiceAdventure138" | "choiceAdventure139" | "choiceAdventure140" | "choiceAdventure141" | "choiceAdventure142" | "choiceAdventure143" | "choiceAdventure144" | "choiceAdventure145" | "choiceAdventure146" | "choiceAdventure147" | "choiceAdventure148" | "choiceAdventure149" | "choiceAdventure151" | "choiceAdventure152" | "choiceAdventure153" | "choiceAdventure154" | "choiceAdventure155" | "choiceAdventure156" | "choiceAdventure157" | "choiceAdventure158" | "choiceAdventure159" | "choiceAdventure160" | "choiceAdventure161" | "choiceAdventure162" | "choiceAdventure163" | "choiceAdventure164" | "choiceAdventure165" | "choiceAdventure166" | "choiceAdventure167" | "choiceAdventure168" | "choiceAdventure169" | "choiceAdventure170" | "choiceAdventure171" | "choiceAdventure172" | "choiceAdventure177" | "choiceAdventure178" | "choiceAdventure180" | "choiceAdventure181" | "choiceAdventure182" | "choiceAdventure184" | "choiceAdventure185" | "choiceAdventure186" | "choiceAdventure187" | "choiceAdventure188" | "choiceAdventure189" | "choiceAdventure191" | "choiceAdventure197" | "choiceAdventure198" | "choiceAdventure199" | "choiceAdventure200" | "choiceAdventure201" | "choiceAdventure202" | "choiceAdventure203" | "choiceAdventure204" | "choiceAdventure205" | "choiceAdventure206" | "choiceAdventure207" | "choiceAdventure208" | "choiceAdventure211" | "choiceAdventure212" | "choiceAdventure213" | "choiceAdventure214" | "choiceAdventure215" | "choiceAdventure216" | "choiceAdventure217" | "choiceAdventure218" | "choiceAdventure219" | "choiceAdventure220" | "choiceAdventure221" | "choiceAdventure222" | "choiceAdventure223" | "choiceAdventure224" | "choiceAdventure225" | "choiceAdventure230" | "choiceAdventure272" | "choiceAdventure273" | "choiceAdventure276" | "choiceAdventure277" | "choiceAdventure278" | "choiceAdventure279" | "choiceAdventure280" | "choiceAdventure281" | "choiceAdventure282" | "choiceAdventure283" | "choiceAdventure284" | "choiceAdventure285" | "choiceAdventure286" | "choiceAdventure287" | "choiceAdventure288" | "choiceAdventure289" | "choiceAdventure290" | "choiceAdventure291" | "choiceAdventure292" | "choiceAdventure293" | "choiceAdventure294" | "choiceAdventure295" | "choiceAdventure296" | "choiceAdventure297" | "choiceAdventure298" | "choiceAdventure299" | "choiceAdventure302" | "choiceAdventure303" | "choiceAdventure304" | "choiceAdventure305" | "choiceAdventure306" | "choiceAdventure307" | "choiceAdventure308" | "choiceAdventure309" | "choiceAdventure310" | "choiceAdventure311" | "choiceAdventure317" | "choiceAdventure318" | "choiceAdventure319" | "choiceAdventure320" | "choiceAdventure321" | "choiceAdventure322" | "choiceAdventure326" | "choiceAdventure327" | "choiceAdventure328" | "choiceAdventure329" | "choiceAdventure330" | "choiceAdventure331" | "choiceAdventure332" | "choiceAdventure333" | "choiceAdventure334" | "choiceAdventure335" | "choiceAdventure336" | "choiceAdventure337" | "choiceAdventure338" | "choiceAdventure339" | "choiceAdventure340" | "choiceAdventure341" | "choiceAdventure342" | "choiceAdventure343" | "choiceAdventure344" | "choiceAdventure345" | "choiceAdventure346" | "choiceAdventure347" | "choiceAdventure348" | "choiceAdventure349" | "choiceAdventure350" | "choiceAdventure351" | "choiceAdventure352" | "choiceAdventure353" | "choiceAdventure354" | "choiceAdventure355" | "choiceAdventure356" | "choiceAdventure357" | "choiceAdventure358" | "choiceAdventure360" | "choiceAdventure361" | "choiceAdventure362" | "choiceAdventure363" | "choiceAdventure364" | "choiceAdventure365" | "choiceAdventure366" | "choiceAdventure367" | "choiceAdventure372" | "choiceAdventure376" | "choiceAdventure387" | "choiceAdventure388" | "choiceAdventure389" | "choiceAdventure390" | "choiceAdventure391" | "choiceAdventure392" | "choiceAdventure393" | "choiceAdventure395" | "choiceAdventure396" | "choiceAdventure397" | "choiceAdventure398" | "choiceAdventure399" | "choiceAdventure400" | "choiceAdventure401" | "choiceAdventure402" | "choiceAdventure403" | "choiceAdventure423" | "choiceAdventure424" | "choiceAdventure425" | "choiceAdventure426" | "choiceAdventure427" | "choiceAdventure428" | "choiceAdventure429" | "choiceAdventure430" | "choiceAdventure431" | "choiceAdventure432" | "choiceAdventure433" | "choiceAdventure435" | "choiceAdventure438" | "choiceAdventure439" | "choiceAdventure442" | "choiceAdventure444" | "choiceAdventure445" | "choiceAdventure446" | "choiceAdventure447" | "choiceAdventure448" | "choiceAdventure449" | "choiceAdventure451" | "choiceAdventure452" | "choiceAdventure453" | "choiceAdventure454" | "choiceAdventure455" | "choiceAdventure456" | "choiceAdventure457" | "choiceAdventure458" | "choiceAdventure460" | "choiceAdventure461" | "choiceAdventure462" | "choiceAdventure463" | "choiceAdventure464" | "choiceAdventure465" | "choiceAdventure467" | "choiceAdventure468" | "choiceAdventure469" | "choiceAdventure470" | "choiceAdventure471" | "choiceAdventure472" | "choiceAdventure473" | "choiceAdventure474" | "choiceAdventure475" | "choiceAdventure477" | "choiceAdventure478" | "choiceAdventure480" | "choiceAdventure483" | "choiceAdventure484" | "choiceAdventure485" | "choiceAdventure486" | "choiceAdventure488" | "choiceAdventure489" | "choiceAdventure490" | "choiceAdventure491" | "choiceAdventure496" | "choiceAdventure497" | "choiceAdventure502" | "choiceAdventure503" | "choiceAdventure504" | "choiceAdventure505" | "choiceAdventure506" | "choiceAdventure507" | "choiceAdventure509" | "choiceAdventure510" | "choiceAdventure511" | "choiceAdventure512" | "choiceAdventure513" | "choiceAdventure514" | "choiceAdventure515" | "choiceAdventure517" | "choiceAdventure518" | "choiceAdventure519" | "choiceAdventure521" | "choiceAdventure522" | "choiceAdventure523" | "choiceAdventure527" | "choiceAdventure528" | "choiceAdventure529" | "choiceAdventure530" | "choiceAdventure531" | "choiceAdventure532" | "choiceAdventure533" | "choiceAdventure534" | "choiceAdventure535" | "choiceAdventure536" | "choiceAdventure538" | "choiceAdventure539" | "choiceAdventure542" | "choiceAdventure543" | "choiceAdventure544" | "choiceAdventure546" | "choiceAdventure548" | "choiceAdventure549" | "choiceAdventure550" | "choiceAdventure551" | "choiceAdventure552" | "choiceAdventure553" | "choiceAdventure554" | "choiceAdventure556" | "choiceAdventure557" | "choiceAdventure558" | "choiceAdventure559" | "choiceAdventure560" | "choiceAdventure561" | "choiceAdventure562" | "choiceAdventure563" | "choiceAdventure564" | "choiceAdventure565" | "choiceAdventure566" | "choiceAdventure567" | "choiceAdventure568" | "choiceAdventure569" | "choiceAdventure571" | "choiceAdventure572" | "choiceAdventure573" | "choiceAdventure574" | "choiceAdventure575" | "choiceAdventure576" | "choiceAdventure577" | "choiceAdventure578" | "choiceAdventure579" | "choiceAdventure581" | "choiceAdventure582" | "choiceAdventure583" | "choiceAdventure584" | "choiceAdventure594" | "choiceAdventure595" | "choiceAdventure596" | "choiceAdventure597" | "choiceAdventure598" | "choiceAdventure599" | "choiceAdventure600" | "choiceAdventure603" | "choiceAdventure604" | "choiceAdventure616" | "choiceAdventure634" | "choiceAdventure640" | "choiceAdventure654" | "choiceAdventure655" | "choiceAdventure656" | "choiceAdventure657" | "choiceAdventure658" | "choiceAdventure664" | "choiceAdventure669" | "choiceAdventure670" | "choiceAdventure671" | "choiceAdventure672" | "choiceAdventure673" | "choiceAdventure674" | "choiceAdventure675" | "choiceAdventure676" | "choiceAdventure677" | "choiceAdventure678" | "choiceAdventure679" | "choiceAdventure681" | "choiceAdventure683" | "choiceAdventure684" | "choiceAdventure685" | "choiceAdventure686" | "choiceAdventure687" | "choiceAdventure688" | "choiceAdventure689" | "choiceAdventure690" | "choiceAdventure691" | "choiceAdventure692" | "choiceAdventure693" | "choiceAdventure694" | "choiceAdventure695" | "choiceAdventure696" | "choiceAdventure697" | "choiceAdventure698" | "choiceAdventure700" | "choiceAdventure701" | "choiceAdventure705" | "choiceAdventure706" | "choiceAdventure707" | "choiceAdventure708" | "choiceAdventure709" | "choiceAdventure710" | "choiceAdventure711" | "choiceAdventure712" | "choiceAdventure713" | "choiceAdventure714" | "choiceAdventure715" | "choiceAdventure716" | "choiceAdventure717" | "choiceAdventure721" | "choiceAdventure725" | "choiceAdventure729" | "choiceAdventure733" | "choiceAdventure737" | "choiceAdventure741" | "choiceAdventure745" | "choiceAdventure749" | "choiceAdventure753" | "choiceAdventure771" | "choiceAdventure778" | "choiceAdventure780" | "choiceAdventure781" | "choiceAdventure783" | "choiceAdventure784" | "choiceAdventure785" | "choiceAdventure786" | "choiceAdventure787" | "choiceAdventure788" | "choiceAdventure789" | "choiceAdventure791" | "choiceAdventure793" | "choiceAdventure794" | "choiceAdventure795" | "choiceAdventure796" | "choiceAdventure797" | "choiceAdventure805" | "choiceAdventure808" | "choiceAdventure809" | "choiceAdventure813" | "choiceAdventure815" | "choiceAdventure830" | "choiceAdventure832" | "choiceAdventure833" | "choiceAdventure834" | "choiceAdventure835" | "choiceAdventure837" | "choiceAdventure838" | "choiceAdventure839" | "choiceAdventure840" | "choiceAdventure841" | "choiceAdventure842" | "choiceAdventure851" | "choiceAdventure852" | "choiceAdventure853" | "choiceAdventure854" | "choiceAdventure855" | "choiceAdventure856" | "choiceAdventure857" | "choiceAdventure858" | "choiceAdventure866" | "choiceAdventure873" | "choiceAdventure875" | "choiceAdventure876" | "choiceAdventure877" | "choiceAdventure878" | "choiceAdventure879" | "choiceAdventure880" | "choiceAdventure881" | "choiceAdventure882" | "choiceAdventure888" | "choiceAdventure889" | "choiceAdventure918" | "choiceAdventure919" | "choiceAdventure920" | "choiceAdventure921" | "choiceAdventure923" | "choiceAdventure924" | "choiceAdventure925" | "choiceAdventure926" | "choiceAdventure927" | "choiceAdventure928" | "choiceAdventure929" | "choiceAdventure930" | "choiceAdventure931" | "choiceAdventure932" | "choiceAdventure940" | "choiceAdventure941" | "choiceAdventure942" | "choiceAdventure943" | "choiceAdventure944" | "choiceAdventure945" | "choiceAdventure946" | "choiceAdventure950" | "choiceAdventure955" | "choiceAdventure957" | "choiceAdventure958" | "choiceAdventure959" | "choiceAdventure960" | "choiceAdventure961" | "choiceAdventure962" | "choiceAdventure963" | "choiceAdventure964" | "choiceAdventure965" | "choiceAdventure966" | "choiceAdventure970" | "choiceAdventure973" | "choiceAdventure974" | "choiceAdventure975" | "choiceAdventure976" | "choiceAdventure977" | "choiceAdventure979" | "choiceAdventure980" | "choiceAdventure981" | "choiceAdventure982" | "choiceAdventure983" | "choiceAdventure988" | "choiceAdventure989" | "choiceAdventure993" | "choiceAdventure998" | "choiceAdventure1000" | "choiceAdventure1003" | "choiceAdventure1005" | "choiceAdventure1006" | "choiceAdventure1007" | "choiceAdventure1008" | "choiceAdventure1009" | "choiceAdventure1010" | "choiceAdventure1011" | "choiceAdventure1012" | "choiceAdventure1013" | "choiceAdventure1015" | "choiceAdventure1016" | "choiceAdventure1017" | "choiceAdventure1018" | "choiceAdventure1019" | "choiceAdventure1020" | "choiceAdventure1021" | "choiceAdventure1022" | "choiceAdventure1023" | "choiceAdventure1026" | "choiceAdventure1027" | "choiceAdventure1028" | "choiceAdventure1029" | "choiceAdventure1030" | "choiceAdventure1031" | "choiceAdventure1032" | "choiceAdventure1033" | "choiceAdventure1034" | "choiceAdventure1035" | "choiceAdventure1036" | "choiceAdventure1037" | "choiceAdventure1038" | "choiceAdventure1039" | "choiceAdventure1040" | "choiceAdventure1041" | "choiceAdventure1042" | "choiceAdventure1044" | "choiceAdventure1045" | "choiceAdventure1046" | "choiceAdventure1048" | "choiceAdventure1051" | "choiceAdventure1052" | "choiceAdventure1053" | "choiceAdventure1054" | "choiceAdventure1055" | "choiceAdventure1056" | "choiceAdventure1057" | "choiceAdventure1059" | "choiceAdventure1060" | "choiceAdventure1061" | "choiceAdventure1062" | "choiceAdventure1065" | "choiceAdventure1067" | "choiceAdventure1068" | "choiceAdventure1069" | "choiceAdventure1070" | "choiceAdventure1071" | "choiceAdventure1073" | "choiceAdventure1077" | "choiceAdventure1080" | "choiceAdventure1081" | "choiceAdventure1082" | "choiceAdventure1083" | "choiceAdventure1084" | "choiceAdventure1085" | "choiceAdventure1091" | "choiceAdventure1094" | "choiceAdventure1095" | "choiceAdventure1096" | "choiceAdventure1097" | "choiceAdventure1102" | "choiceAdventure1106" | "choiceAdventure1107" | "choiceAdventure1108" | "choiceAdventure1110" | "choiceAdventure1114" | "choiceAdventure1115" | "choiceAdventure1116" | "choiceAdventure1118" | "choiceAdventure1119" | "choiceAdventure1120" | "choiceAdventure1121" | "choiceAdventure1122" | "choiceAdventure1123" | "choiceAdventure1171" | "choiceAdventure1172" | "choiceAdventure1173" | "choiceAdventure1174" | "choiceAdventure1175" | "choiceAdventure1193" | "choiceAdventure1195" | "choiceAdventure1196" | "choiceAdventure1197" | "choiceAdventure1198" | "choiceAdventure1199" | "choiceAdventure1202" | "choiceAdventure1203" | "choiceAdventure1204" | "choiceAdventure1205" | "choiceAdventure1206" | "choiceAdventure1207" | "choiceAdventure1208" | "choiceAdventure1209" | "choiceAdventure1210" | "choiceAdventure1211" | "choiceAdventure1212" | "choiceAdventure1213" | "choiceAdventure1214" | "choiceAdventure1215" | "choiceAdventure1219" | "choiceAdventure1222" | "choiceAdventure1223" | "choiceAdventure1224" | "choiceAdventure1225" | "choiceAdventure1226" | "choiceAdventure1227" | "choiceAdventure1228" | "choiceAdventure1229" | "choiceAdventure1236" | "choiceAdventure1237" | "choiceAdventure1238" | "choiceAdventure1239" | "choiceAdventure1240" | "choiceAdventure1241" | "choiceAdventure1242" | "choiceAdventure1243" | "choiceAdventure1244" | "choiceAdventure1245" | "choiceAdventure1246" | "choiceAdventure1247" | "choiceAdventure1248" | "choiceAdventure1249" | "choiceAdventure1250" | "choiceAdventure1251" | "choiceAdventure1252" | "choiceAdventure1253" | "choiceAdventure1254" | "choiceAdventure1255" | "choiceAdventure1256" | "choiceAdventure1266" | "choiceAdventure1280" | "choiceAdventure1281" | "choiceAdventure1282" | "choiceAdventure1283" | "choiceAdventure1284" | "choiceAdventure1285" | "choiceAdventure1286" | "choiceAdventure1287" | "choiceAdventure1288" | "choiceAdventure1289" | "choiceAdventure1290" | "choiceAdventure1291" | "choiceAdventure1292" | "choiceAdventure1293" | "choiceAdventure1294" | "choiceAdventure1295" | "choiceAdventure1296" | "choiceAdventure1297" | "choiceAdventure1298" | "choiceAdventure1299" | "choiceAdventure1300" | "choiceAdventure1301" | "choiceAdventure1302" | "choiceAdventure1303" | "choiceAdventure1304" | "choiceAdventure1305" | "choiceAdventure1307" | "choiceAdventure1310" | "choiceAdventure1312" | "choiceAdventure1313" | "choiceAdventure1314" | "choiceAdventure1315" | "choiceAdventure1316" | "choiceAdventure1317" | "choiceAdventure1318" | "choiceAdventure1319" | "choiceAdventure1321" | "choiceAdventure1322" | "choiceAdventure1323" | "choiceAdventure1324" | "choiceAdventure1325" | "choiceAdventure1326" | "choiceAdventure1327" | "choiceAdventure1328" | "choiceAdventure1332" | "choiceAdventure1333" | "choiceAdventure1335" | "choiceAdventure1340" | "choiceAdventure1341" | "choiceAdventure1345" | "choiceAdventure1389" | "choiceAdventure1392" | "choiceAdventure1399" | "choiceAdventure1405" | "choiceAdventure1411" | "choiceAdventure1415" | "choiceAdventure1460" | "choiceAdventure1461";
8
8
  export declare type FamiliarProperty = "commaFamiliar" | "nextQuantumFamiliar" | "preBlackbirdFamiliar";
9
9
  export declare type StatProperty = "nsChallenge1" | "snojoSetting";
@@ -0,0 +1,82 @@
1
+ export declare function have(): boolean;
2
+ export declare function havePants(): boolean;
3
+ declare type PantogramAlignment = "Muscle" | "Moxie" | "Mysticality";
4
+ declare const Element: {
5
+ "Hot Resistance: 2": number;
6
+ "Cold Resistance: 2": number;
7
+ "Spooky Resistance: 2": number;
8
+ "Sleaze Resistance: 2": number;
9
+ "Stench Resistance: 2": number;
10
+ };
11
+ declare type PantogramElement = keyof typeof Element;
12
+ declare const LeftSacrifice: {
13
+ "Maximum HP: 40": number[];
14
+ "Maximum MP: 20": number[];
15
+ "HP Regen Max: 10": (number | Item)[];
16
+ "HP Regen Max: 15": (number | Item)[];
17
+ "HP Regen Max: 20": (number | Item)[];
18
+ "MP Regen Max: 10": (number | Item)[];
19
+ "MP Regen Max: 15": (number | Item)[];
20
+ "MP Regen Max: 20": (number | Item)[];
21
+ "Mana Cost: -3": (number | Item)[];
22
+ };
23
+ declare type PantogramSacrificeL = keyof typeof LeftSacrifice;
24
+ declare const MiddleSacrifice: {
25
+ "Combat Rate: -5": number[];
26
+ "Combat Rate: 5": number[];
27
+ "Critical Hit Percent: 10": (number | Item)[];
28
+ "Initiative: 50": (number | Item)[];
29
+ "Familiar Weight: 10": (number | Item)[];
30
+ "Candy Drop: 100": (number | Item)[];
31
+ "Item Drop Penalty: -10": (number | Item)[];
32
+ "Fishing Skill: 5": (number | Item)[];
33
+ "Pool Skill: 5": (number | Item)[];
34
+ "Avatar: Purple": (number | Item)[];
35
+ "Drops Items: true": (number | Item)[];
36
+ };
37
+ declare type PantogramSacrificeM = keyof typeof MiddleSacrifice;
38
+ declare const RightSacrifice: {
39
+ "Weapon Damage: 20": number[];
40
+ "Spell Damage Percent: 20": number[];
41
+ "Meat Drop: 30": (number | Item)[];
42
+ "Meat Drop: 60": (number | Item)[];
43
+ "Item Drop: 15": (number | Item)[];
44
+ "Item Drop: 30": (number | Item)[];
45
+ "Muscle Experience: 3": (number | Item)[];
46
+ "Mysticality Experience: 3": (number | Item)[];
47
+ "Moxie Experience: 3": (number | Item)[];
48
+ "Muscle Experience Percent: 25": (number | Item)[];
49
+ "Mysticality Experience Percent: 25": (number | Item)[];
50
+ "Moxie Experience Percent: 25": (number | Item)[];
51
+ };
52
+ declare type PantogramSacrificeR = keyof typeof RightSacrifice;
53
+ declare type Pants = {
54
+ alignment: PantogramAlignment;
55
+ element: PantogramElement;
56
+ leftSac: PantogramSacrificeL;
57
+ rightSac: PantogramSacrificeR;
58
+ middleSac: PantogramSacrificeM;
59
+ };
60
+ /**
61
+ * Finds the item requirements for a particular pair of pants.
62
+ * @param modifiers An object consisting of the modifiers you want on your pants. For modifiers repeated across a particular sacrifice, use a tuple of that modifier and its value.
63
+ * @returns A map of the items you need to make these pants and the quantities needed.
64
+ */
65
+ export declare function findRequirements(modifiers: Partial<Pants>): Map<Item, number>;
66
+ /**
67
+ * Makes a pair of pants with the given modifiers
68
+ * @param alignment The stat you'd like your pants to improve. Moxie, Mysticality, or Muscle
69
+ * @param element The element you'd like your pants to provide resistance for
70
+ * @param leftSac The modifier you'd like to get from your leftmost sacrifice in Pantagramming.
71
+ * @param middleSac The modifier you'd like to get from your middle sacrifice in Pantagramming.
72
+ * @param rightSac The modifier you'd like to get from your rightmost sacrifice in Pantagramming.
73
+ * @returns Whether or not you successfully created a pair of pants. False if you don't own the pantogram or if you already have pantogram pants.
74
+ */
75
+ export declare function makePants(alignment: PantogramAlignment, element: PantogramElement, leftSac: PantogramSacrificeL, middleSac: PantogramSacrificeM, rightSac: PantogramSacrificeR): boolean;
76
+ /**
77
+ * Creates a pair of pants from a Pants object.
78
+ * @param pants An object consisting of the modifiers you'd like the pants to give you.
79
+ * @returns Whether or not you successfully created a pair of pants. False if you don't own the pantogram or if you already have pantogram pants.
80
+ */
81
+ export declare function makePantsFromObject(pants: Pants): boolean;
82
+ export {};
@@ -0,0 +1,141 @@
1
+ import { toInt, visitUrl } from "kolmafia";
2
+ import { have as haveItem } from "../../lib";
3
+ import { $item } from "../../template-string";
4
+ const pantogram = $item `portable pantogram`;
5
+ const pants = $item `pantogram pants`;
6
+ export function have() {
7
+ return haveItem(pantogram);
8
+ }
9
+ export function havePants() {
10
+ return haveItem(pants);
11
+ }
12
+ const Alignment = {
13
+ ["Muscle"]: 1,
14
+ ["Mysticality"]: 2,
15
+ ["Moxie"]: 3,
16
+ };
17
+ const Element = {
18
+ ["Hot Resistance: 2"]: 1,
19
+ ["Cold Resistance: 2"]: 2,
20
+ ["Spooky Resistance: 2"]: 3,
21
+ ["Sleaze Resistance: 2"]: 4,
22
+ ["Stench Resistance: 2"]: 5,
23
+ };
24
+ const LeftSacrifice = {
25
+ ["Maximum HP: 40"]: [-1, 0],
26
+ ["Maximum MP: 20"]: [-2, 0],
27
+ ["HP Regen Max: 10"]: [$item `red pixel potion`, 1],
28
+ ["HP Regen Max: 15"]: [$item `royal jelly`, 1],
29
+ ["HP Regen Max: 20"]: [$item `scented massage oil`, 1],
30
+ ["MP Regen Max: 10"]: [$item `Cherry Cloaca Cola`, 1],
31
+ ["MP Regen Max: 15"]: [$item `bubblin' crude`, 1],
32
+ ["MP Regen Max: 20"]: [$item `glowing New Age crystal`, 1],
33
+ ["Mana Cost: -3"]: [$item `baconstone`, 1],
34
+ };
35
+ function getLeftSacPair(mod) {
36
+ return LeftSacrifice[mod];
37
+ }
38
+ const MiddleSacrifice = {
39
+ ["Combat Rate: -5"]: [-1, 0],
40
+ ["Combat Rate: 5"]: [-2, 0],
41
+ ["Critical Hit Percent: 10"]: [$item `hamethyst`, 1],
42
+ ["Initiative: 50"]: [$item `bar skin`, 1],
43
+ ["Familiar Weight: 10"]: [$item `lead necklace`, 11],
44
+ ["Candy Drop: 100"]: [$item `huge bowl of candy`, 1],
45
+ ["Item Drop Penalty: -10"]: [$item `sea salt crystal`, 11],
46
+ ["Fishing Skill: 5"]: [$item `wriggling worm`, 1],
47
+ ["Pool Skill: 5"]: [$item `8-ball`, 15],
48
+ ["Avatar: Purple"]: [$item `moxie weed`, 99],
49
+ ["Drops Items: true"]: [$item `ten-leaf clover`, 1],
50
+ };
51
+ function getMiddleSacPair(mod) {
52
+ return MiddleSacrifice[mod];
53
+ }
54
+ const RightSacrifice = {
55
+ ["Weapon Damage: 20"]: [-1, 0],
56
+ ["Spell Damage Percent: 20"]: [-2, 0],
57
+ ["Meat Drop: 30"]: [$item `taco shell`, 1],
58
+ ["Meat Drop: 60"]: [$item `porquoise`, 1],
59
+ ["Item Drop: 15"]: [$item `fairy gravy boat`, 1],
60
+ ["Item Drop: 30"]: [$item `tiny dancer`, 1],
61
+ ["Muscle Experience: 3"]: [$item `Knob Goblin firecracker`, 3],
62
+ ["Mysticality Experience: 3"]: [$item `razor-sharp can lid`, 3],
63
+ ["Moxie Experience: 3"]: [$item `spider web`, 3],
64
+ ["Muscle Experience Percent: 25"]: [$item `synthetic marrow`, 5],
65
+ ["Mysticality Experience Percent: 25"]: [$item `haunted battery`, 5],
66
+ ["Moxie Experience Percent: 25"]: [$item `the funk`, 5],
67
+ };
68
+ function getRightSacPair(mod) {
69
+ return RightSacrifice[mod];
70
+ }
71
+ /**
72
+ * Finds the item requirements for a particular pair of pants.
73
+ * @param modifiers An object consisting of the modifiers you want on your pants. For modifiers repeated across a particular sacrifice, use a tuple of that modifier and its value.
74
+ * @returns A map of the items you need to make these pants and the quantities needed.
75
+ */
76
+ export function findRequirements(modifiers) {
77
+ const { leftSac, rightSac, middleSac } = modifiers;
78
+ const returnValue = new Map();
79
+ if (leftSac) {
80
+ const [sacrifice, quantity] = getLeftSacPair(leftSac);
81
+ if (sacrifice instanceof Item) {
82
+ returnValue.set(sacrifice, quantity);
83
+ }
84
+ }
85
+ if (rightSac) {
86
+ const [sacrifice, quantity] = getRightSacPair(rightSac);
87
+ if (sacrifice instanceof Item) {
88
+ returnValue.set(sacrifice, quantity);
89
+ }
90
+ }
91
+ if (middleSac) {
92
+ const [sacrifice, quantity] = getMiddleSacPair(middleSac);
93
+ if (sacrifice instanceof Item) {
94
+ returnValue.set(sacrifice, quantity);
95
+ }
96
+ }
97
+ return returnValue;
98
+ }
99
+ function sacrificePairToURL(pair) {
100
+ const [rawSacrifice, quantity] = pair;
101
+ const sacrifice = rawSacrifice instanceof Item ? toInt(rawSacrifice) : rawSacrifice;
102
+ return `${sacrifice},${quantity}`;
103
+ }
104
+ /**
105
+ * Makes a pair of pants with the given modifiers
106
+ * @param alignment The stat you'd like your pants to improve. Moxie, Mysticality, or Muscle
107
+ * @param element The element you'd like your pants to provide resistance for
108
+ * @param leftSac The modifier you'd like to get from your leftmost sacrifice in Pantagramming.
109
+ * @param middleSac The modifier you'd like to get from your middle sacrifice in Pantagramming.
110
+ * @param rightSac The modifier you'd like to get from your rightmost sacrifice in Pantagramming.
111
+ * @returns Whether or not you successfully created a pair of pants. False if you don't own the pantogram or if you already have pantogram pants.
112
+ */
113
+ export function makePants(alignment, element, leftSac, middleSac, rightSac) {
114
+ if (haveItem(pants) || !haveItem(pantogram))
115
+ return false;
116
+ const requirements = findRequirements({
117
+ alignment: alignment,
118
+ element: element,
119
+ leftSac: leftSac,
120
+ rightSac: rightSac,
121
+ middleSac: middleSac,
122
+ });
123
+ if (Array.from(requirements.entries()).some(([item, quantity]) => !haveItem(item, quantity))) {
124
+ return false;
125
+ }
126
+ const s1 = sacrificePairToURL(getLeftSacPair(leftSac));
127
+ const s2 = sacrificePairToURL(getRightSacPair(rightSac));
128
+ const s3 = sacrificePairToURL(getMiddleSacPair(middleSac));
129
+ const url = `choice.php?whichchoice=1270&pwd&option=1&m=${Alignment[alignment]}&e=${Element[element]}&s1=${s1}&s2=${s2}&s3=${s3}`;
130
+ visitUrl("inv_use.php?pwd&whichitem=9573");
131
+ visitUrl(url);
132
+ return haveItem(pants);
133
+ }
134
+ /**
135
+ * Creates a pair of pants from a Pants object.
136
+ * @param pants An object consisting of the modifiers you'd like the pants to give you.
137
+ * @returns Whether or not you successfully created a pair of pants. False if you don't own the pantogram or if you already have pantogram pants.
138
+ */
139
+ export function makePantsFromObject(pants) {
140
+ return makePants(pants.alignment, pants.element, pants.leftSac, pants.middleSac, pants.rightSac);
141
+ }
@@ -5,7 +5,16 @@ export declare const helmet: Item;
5
5
  */
6
6
  export declare function have(): boolean;
7
7
  export declare const buffs: Effect[];
8
+ /**
9
+ * Tells you whether you currently have a beardbuff active. Warning: because of spaghetti, this does not determine buff eligibility.
10
+ * @returns Whether you currently have a beardbuff active
11
+ */
8
12
  export declare function hasBuff(): boolean;
13
+ /**
14
+ * Checks to see if there are any beardbuffs you have more than 1 turn of, determining whether you are eligible to receive a buff post-combat.
15
+ * @returns Whether you current are able to get a buff from the Daylight Shaving Helmet.
16
+ */
17
+ export declare function buffAvailable(): boolean;
9
18
  /**
10
19
  * Calculates and returns the cycle of buffs that the hat should cycle through.
11
20
  * @param playerclass The class to generate a cycle for
@@ -11,9 +11,20 @@ export function have() {
11
11
  return haveItem(helmet);
12
12
  }
13
13
  export const buffs = $effects `Spectacle Moustache, Toiletbrush Moustache, Barbell Moustache, Grizzly Beard, Surrealist's Moustache, Musician's Musician's Moustache, Gull-Wing Moustache, Space Warlord's Beard, Pointy Wizard Beard, Cowboy Stache, Friendly Chops`;
14
+ /**
15
+ * Tells you whether you currently have a beardbuff active. Warning: because of spaghetti, this does not determine buff eligibility.
16
+ * @returns Whether you currently have a beardbuff active
17
+ */
14
18
  export function hasBuff() {
15
19
  return buffs.some((buff) => haveItem(buff));
16
20
  }
21
+ /**
22
+ * Checks to see if there are any beardbuffs you have more than 1 turn of, determining whether you are eligible to receive a buff post-combat.
23
+ * @returns Whether you current are able to get a buff from the Daylight Shaving Helmet.
24
+ */
25
+ export function buffAvailable() {
26
+ return !buffs.some((buff) => haveItem(buff, 2));
27
+ }
17
28
  /**
18
29
  * Calculates and returns the cycle of buffs that the hat should cycle through.
19
30
  * @param playerclass The class to generate a cycle for
@@ -0,0 +1,93 @@
1
+ /**
2
+ * An entry showing the value of each Item in a session
3
+ * @member item the item associated with this detail
4
+ * @member value the numeric value of the full quantity of items (to get value of each item, do value / quantity) (can be negative)
5
+ * @member quantity the number of items for this detail
6
+ */
7
+ interface ItemDetail {
8
+ item: Item;
9
+ value: number;
10
+ quantity: number;
11
+ }
12
+ /**
13
+ * The full value (in meat) results of a session
14
+ * @member meat the value of this session in pure meat
15
+ * @member items the value of the items in this session in meat
16
+ * @member total sum of meat and items
17
+ * @member itemDetails a list of the detailed accounting for each item in this session
18
+ */
19
+ interface ItemResult {
20
+ meat: number;
21
+ items: number;
22
+ total: number;
23
+ itemDetails: ItemDetail[];
24
+ }
25
+ /**
26
+ * A wrapper around tracking items and meat gained from this session
27
+ * Smartly handles foldables being added/removed based on their state
28
+ * Provides operations to add sessions and subtract Sessions so you can isolate the value of each Session using a baseline
29
+ * @member meat the raw meat associated with this Session
30
+ * @member items a map representing the items gained/lost during this Session
31
+ */
32
+ export declare class Session {
33
+ meat: number;
34
+ items: Map<Item, number>;
35
+ /**
36
+ * Construct a new session
37
+ * @param meat the amount of meat associated with this session
38
+ * @param items the items associated with this session
39
+ */
40
+ private constructor();
41
+ /**
42
+ * Register session results that do not get tracked natively
43
+ * @param target either the Item or a string saying "meat" of what quantity to modify
44
+ * @param quantity How much to modify the tracked amount by
45
+ */
46
+ register(target: Item | "meat", quantity: number): void;
47
+ /**
48
+ * Value this session
49
+ * @param itemValue a function that, when given an item, will give a meat value of the item
50
+ * @returns ItemResult with the full value of this session given the input function
51
+ */
52
+ value(itemValue: (item: Item) => number): ItemResult;
53
+ /**
54
+ * Subtract the contents of another session from this one, removing any items that have a resulting quantity of 0
55
+ * (this will ignore elements in b but not in a)
56
+ * @param other the session from which to pull values to remove from this session
57
+ * @returns a new session representing the difference between this session and the other session
58
+ */
59
+ diff(other: Session): Session;
60
+ /**
61
+ * Subtract the contents of snasphot b from session a, removing any items that have a resulting quantity of 0
62
+ * (this will ignore elements in b but not in a)
63
+ * @param a the session from which to subtract elements
64
+ * @param b the session from which to add elements
65
+ * @returns a new session representing the difference between a and b
66
+ */
67
+ static diff(a: Session, b: Session): Session;
68
+ /**
69
+ * Generate a new session combining multiple sessions together
70
+ * @param other the session from which to add elements to this set
71
+ * @returns a new session representing the addition of other to this
72
+ */
73
+ add(other: Session): Session;
74
+ /**
75
+ * Combine the contents of sessions
76
+ * @param sessions the set of sessions to combine together
77
+ * @returns a new session representing the difference between a and b
78
+ */
79
+ static add(...sessions: Session[]): Session;
80
+ /**
81
+ * Export this session to a file in the data/ directory. Conventionally this file should end in ".json"
82
+ * @param filename The file into which to export
83
+ */
84
+ toFile(filename: string): void;
85
+ /**
86
+ * Import a session from a file in the data/ directory. Conventionally the file should end in ".json"
87
+ * @param filename The file from which to import
88
+ * @returns the session represented by the file
89
+ */
90
+ static fromFile(filename: string): Session;
91
+ static current(): Session;
92
+ }
93
+ export {};
@@ -0,0 +1,184 @@
1
+ import { bufferToFile, fileToBuffer, mySessionItems, mySessionMeat, toItem, } from "kolmafia";
2
+ import { getFoldGroup } from "./lib";
3
+ import { $item, $items } from "./template-string";
4
+ import { sumNumbers } from "./utils";
5
+ /**
6
+ * Return a mapping of the session items, mapping foldable items to a single of their forms
7
+ * @returns the item session results, with foldables mapped to a single of their folding forms
8
+ */
9
+ function mySessionItemsWrapper() {
10
+ const manyToOne = (primary, mapped) => mapped.map((target) => [target, primary]);
11
+ const foldable = (item) => manyToOne(item, getFoldGroup(item));
12
+ const itemMappings = new Map([
13
+ ...foldable($item `liar's pants`),
14
+ ...foldable($item `ice pick`),
15
+ ...manyToOne($item `Spooky Putty sheet`, [
16
+ $item `Spooky Putty monster`,
17
+ ...getFoldGroup($item `Spooky Putty sheet`),
18
+ ]),
19
+ ...foldable($item `stinky cheese sword`),
20
+ ...foldable($item `naughty paper shuriken`),
21
+ ...foldable($item `Loathing Legion knife`),
22
+ ...foldable($item `deceased crimbo tree`),
23
+ ...foldable($item `makeshift turban`),
24
+ ...foldable($item `turtle wax shield`),
25
+ ...foldable($item `metallic foil bow`),
26
+ ...foldable($item `ironic moustache`),
27
+ ...foldable($item `bugged balaclava`),
28
+ ...foldable($item `toggle switch (Bartend)`),
29
+ ...foldable($item `mushroom cap`),
30
+ ...manyToOne($item `can of Rain-Doh`, $items `empty Rain-Doh can`),
31
+ ...manyToOne($item `meteorite fragment`, $items `meteorite earring, meteorite necklace, meteorite ring`),
32
+ ...manyToOne($item `Sneaky Pete's leather jacket`, $items `Sneaky Pete's leather jacket (collar popped)`),
33
+ ...manyToOne($item `Boris's Helm`, $items `Boris's Helm (askew)`),
34
+ ...manyToOne($item `Jarlsberg's pan`, $items `Jarlsberg's pan (Cosmic portal mode)`),
35
+ ...manyToOne($item `tiny plastic sword`, $items `grogtini, bodyslam, dirty martini, vesper, cherry bomb, sangria del diablo`),
36
+ ...manyToOne($item `earthenware muffin tin`, $items `blueberry muffin, bran muffin, chocolate chip muffin`),
37
+ ]);
38
+ const inventory = new Map();
39
+ for (const [itemStr, quantity] of Object.entries(mySessionItems())) {
40
+ const item = toItem(itemStr);
41
+ const mappedItem = itemMappings.get(item) ?? item;
42
+ inventory.set(mappedItem, quantity + (inventory.get(mappedItem) ?? 0));
43
+ }
44
+ return inventory;
45
+ }
46
+ /**
47
+ * Performa a binary element-wise operation on two inventories
48
+ * @param a The LHS inventory to perform the operation on
49
+ * @param b The RHS inventory to perform the operation on
50
+ * @param op an operator to compute between the sets
51
+ * @param commutative if true use the value of b for any items not in a. if false, ignore values not in a
52
+ * @returns a new map representing the combined inventories
53
+ */
54
+ function inventoryOperation(a, b, op, commutative) {
55
+ // return every entry that is in a and not in b
56
+ const difference = new Map();
57
+ for (const [item, quantity] of a.entries()) {
58
+ const combinedQuantity = op(quantity, b.get(item) ?? 0);
59
+ difference.set(item, combinedQuantity);
60
+ }
61
+ if (commutative) {
62
+ for (const [item, quantity] of b.entries()) {
63
+ if (!a.has(item)) {
64
+ difference.set(item, quantity);
65
+ }
66
+ }
67
+ }
68
+ const diffEntries = [...difference.entries()];
69
+ return new Map(diffEntries.filter((value) => value[1] !== 0));
70
+ }
71
+ /**
72
+ * A wrapper around tracking items and meat gained from this session
73
+ * Smartly handles foldables being added/removed based on their state
74
+ * Provides operations to add sessions and subtract Sessions so you can isolate the value of each Session using a baseline
75
+ * @member meat the raw meat associated with this Session
76
+ * @member items a map representing the items gained/lost during this Session
77
+ */
78
+ export class Session {
79
+ meat;
80
+ items;
81
+ /**
82
+ * Construct a new session
83
+ * @param meat the amount of meat associated with this session
84
+ * @param items the items associated with this session
85
+ */
86
+ constructor(meat, items) {
87
+ this.meat = meat;
88
+ this.items = items;
89
+ }
90
+ /**
91
+ * Register session results that do not get tracked natively
92
+ * @param target either the Item or a string saying "meat" of what quantity to modify
93
+ * @param quantity How much to modify the tracked amount by
94
+ */
95
+ register(target, quantity) {
96
+ if (target === "meat") {
97
+ this.meat += quantity;
98
+ }
99
+ else {
100
+ this.items.set(target, (this.items.get(target) ?? 0) + quantity);
101
+ }
102
+ }
103
+ /**
104
+ * Value this session
105
+ * @param itemValue a function that, when given an item, will give a meat value of the item
106
+ * @returns ItemResult with the full value of this session given the input function
107
+ */
108
+ value(itemValue) {
109
+ // TODO: add garbo specific pricing (sugar equipment for synth, etc.)
110
+ const meat = Math.floor(this.meat);
111
+ const itemDetails = [...this.items.entries()].map(([item, quantity]) => {
112
+ return { item, quantity, value: itemValue(item) * quantity };
113
+ });
114
+ const items = Math.floor(sumNumbers(itemDetails.map((detail) => detail.value)));
115
+ return { meat, items, total: meat + items, itemDetails };
116
+ }
117
+ /**
118
+ * Subtract the contents of another session from this one, removing any items that have a resulting quantity of 0
119
+ * (this will ignore elements in b but not in a)
120
+ * @param other the session from which to pull values to remove from this session
121
+ * @returns a new session representing the difference between this session and the other session
122
+ */
123
+ diff(other) {
124
+ return new Session(this.meat - other.meat, inventoryOperation(this.items, other.items, (a, b) => a - b, false));
125
+ }
126
+ /**
127
+ * Subtract the contents of snasphot b from session a, removing any items that have a resulting quantity of 0
128
+ * (this will ignore elements in b but not in a)
129
+ * @param a the session from which to subtract elements
130
+ * @param b the session from which to add elements
131
+ * @returns a new session representing the difference between a and b
132
+ */
133
+ static diff(a, b) {
134
+ return a.diff(b);
135
+ }
136
+ /**
137
+ * Generate a new session combining multiple sessions together
138
+ * @param other the session from which to add elements to this set
139
+ * @returns a new session representing the addition of other to this
140
+ */
141
+ add(other) {
142
+ return new Session(this.meat + other.meat, inventoryOperation(this.items, other.items, (a, b) => a + b, true));
143
+ }
144
+ /**
145
+ * Combine the contents of sessions
146
+ * @param sessions the set of sessions to combine together
147
+ * @returns a new session representing the difference between a and b
148
+ */
149
+ static add(...sessions) {
150
+ return sessions.reduce((previousSession, currentSession) => previousSession.add(currentSession));
151
+ }
152
+ /**
153
+ * Export this session to a file in the data/ directory. Conventionally this file should end in ".json"
154
+ * @param filename The file into which to export
155
+ */
156
+ toFile(filename) {
157
+ const val = {
158
+ meat: this.meat,
159
+ items: Object.fromEntries(this.items),
160
+ };
161
+ bufferToFile(JSON.stringify(val), filename);
162
+ }
163
+ /**
164
+ * Import a session from a file in the data/ directory. Conventionally the file should end in ".json"
165
+ * @param filename The file from which to import
166
+ * @returns the session represented by the file
167
+ */
168
+ static fromFile(filename) {
169
+ const fileValue = fileToBuffer(filename);
170
+ // fileToBuffer returns empty string for files that don't exist
171
+ if (fileValue.length > 0) {
172
+ const val = JSON.parse(fileValue);
173
+ const parsedItems = Object.entries(val.items).map(([itemStr, quantity]) => [toItem(itemStr), quantity]);
174
+ return new Session(val.meat, new Map(parsedItems));
175
+ }
176
+ else {
177
+ // if the file does not exist, return an empty session
178
+ return new Session(0, new Map());
179
+ }
180
+ }
181
+ static current() {
182
+ return new Session(mySessionMeat(), mySessionItemsWrapper());
183
+ }
184
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "libram",
3
- "version": "0.5.8",
3
+ "version": "0.6.2",
4
4
  "description": "JavaScript helper library for KoLmafia",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",