libram 0.4.3 → 0.4.4
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.
- package/dist/combat.d.ts +22 -1
- package/dist/combat.js +38 -2
- package/dist/diet/index.js +118 -44
- package/dist/diet/knapsack.js +15 -2
- package/dist/lib.d.ts +2 -0
- package/dist/lib.js +22 -2
- package/dist/mood.d.ts +5 -0
- package/dist/mood.js +20 -0
- package/dist/property.js +4 -1
- package/dist/propertyTypes.d.ts +2 -1
- package/dist/propertyTyping.d.ts +4 -3
- package/dist/propertyTyping.js +4 -0
- package/dist/resources/2014/DNALab.d.ts +47 -0
- package/dist/resources/2014/DNALab.js +154 -0
- package/dist/resources/2015/MayoClinic.d.ts +2 -0
- package/dist/resources/2015/MayoClinic.js +8 -2
- package/dist/resources/2017/AsdonMartin.d.ts +27 -0
- package/dist/resources/2017/AsdonMartin.js +80 -0
- package/dist/resources/2019/Snapper.js +2 -3
- package/dist/resources/index.d.ts +3 -1
- package/dist/resources/index.js +3 -1
- package/package.json +1 -1
package/dist/combat.d.ts
CHANGED
|
@@ -120,9 +120,10 @@ export declare class Macro {
|
|
|
120
120
|
* Create a new macro with a condition evaluated at the time of building the macro.
|
|
121
121
|
* @param condition The JS condition.
|
|
122
122
|
* @param ifTrue Continuation to add if the condition is true.
|
|
123
|
+
* @param ifFalse Optional input to turn this into an if...else statement.
|
|
123
124
|
* @returns {Macro} This object itself.
|
|
124
125
|
*/
|
|
125
|
-
static externalIf<T extends Macro>(this: Constructor<T>, condition: boolean, ifTrue: string | Macro): T;
|
|
126
|
+
static externalIf<T extends Macro>(this: Constructor<T>, condition: boolean, ifTrue: string | Macro, ifFalse?: string | Macro): T;
|
|
126
127
|
/**
|
|
127
128
|
* Add a repeat step to the macro.
|
|
128
129
|
* @returns {Macro} This object itself.
|
|
@@ -198,6 +199,26 @@ export declare class Macro {
|
|
|
198
199
|
* @returns {Macro} This object itself.
|
|
199
200
|
*/
|
|
200
201
|
static attack<T extends Macro>(this: Constructor<T>): T;
|
|
202
|
+
/**
|
|
203
|
+
* Create an if_ statement based on what holiday of loathing it currently is. On non-holidays, returns the original macro, unmutated.
|
|
204
|
+
* @param macro The macro to place in the if_ statement
|
|
205
|
+
*/
|
|
206
|
+
ifHolidayWanderer(macro: Macro): this;
|
|
207
|
+
/**
|
|
208
|
+
* Create a new macro starting with an ifHolidayWanderer step.
|
|
209
|
+
* @param macro The macro to place inside the if_ statement
|
|
210
|
+
*/
|
|
211
|
+
static ifHolidayWanderer<T extends Macro>(this: Constructor<T>, macro: Macro): T;
|
|
212
|
+
/**
|
|
213
|
+
* Create an if_ statement based on what holiday of loathing it currently is. On non-holidays, returns the original macro, with the input macro appended.
|
|
214
|
+
* @param macro The macro to place in the if_ statement.
|
|
215
|
+
*/
|
|
216
|
+
ifNotHolidayWanderer(macro: Macro): this;
|
|
217
|
+
/**
|
|
218
|
+
* Create a new macro starting with an ifNotHolidayWanderer step.
|
|
219
|
+
* @param macro The macro to place inside the if_ statement
|
|
220
|
+
*/
|
|
221
|
+
static ifNotHolidayWanderer<T extends Macro>(this: Constructor<T>, macro: Macro): T;
|
|
201
222
|
}
|
|
202
223
|
/**
|
|
203
224
|
* Adventure in a location and handle all combats with a given macro.
|
package/dist/combat.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { adv1, choiceFollowsFight, getAutoAttack, inMultiFight, removeProperty, runCombat, setAutoAttack, toInt, urlEncode, visitUrl, xpath, } from "kolmafia";
|
|
2
2
|
import { $items, $skills } from "./template-string";
|
|
3
3
|
import { get, set } from "./property";
|
|
4
|
+
import { getTodaysHolidayWanderers } from "./lib";
|
|
4
5
|
const MACRO_NAME = "Script Autoattack Macro";
|
|
5
6
|
/**
|
|
6
7
|
* Get the KoL native ID of the macro with name Script Autoattack Macro.
|
|
@@ -256,10 +257,11 @@ export class Macro {
|
|
|
256
257
|
* Create a new macro with a condition evaluated at the time of building the macro.
|
|
257
258
|
* @param condition The JS condition.
|
|
258
259
|
* @param ifTrue Continuation to add if the condition is true.
|
|
260
|
+
* @param ifFalse Optional input to turn this into an if...else statement.
|
|
259
261
|
* @returns {Macro} This object itself.
|
|
260
262
|
*/
|
|
261
|
-
static externalIf(condition, ifTrue) {
|
|
262
|
-
return new this().externalIf(condition, ifTrue);
|
|
263
|
+
static externalIf(condition, ifTrue, ifFalse) {
|
|
264
|
+
return new this().externalIf(condition, ifTrue, ifFalse);
|
|
263
265
|
}
|
|
264
266
|
/**
|
|
265
267
|
* Add a repeat step to the macro.
|
|
@@ -372,6 +374,40 @@ export class Macro {
|
|
|
372
374
|
static attack() {
|
|
373
375
|
return new this().attack();
|
|
374
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* Create an if_ statement based on what holiday of loathing it currently is. On non-holidays, returns the original macro, unmutated.
|
|
379
|
+
* @param macro The macro to place in the if_ statement
|
|
380
|
+
*/
|
|
381
|
+
ifHolidayWanderer(macro) {
|
|
382
|
+
const todaysWanderers = getTodaysHolidayWanderers();
|
|
383
|
+
if (todaysWanderers.length === 0)
|
|
384
|
+
return this;
|
|
385
|
+
return this.if_(todaysWanderers.map((monster) => `monsterid ${monster.id}`).join(" || "), macro);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Create a new macro starting with an ifHolidayWanderer step.
|
|
389
|
+
* @param macro The macro to place inside the if_ statement
|
|
390
|
+
*/
|
|
391
|
+
static ifHolidayWanderer(macro) {
|
|
392
|
+
return new this().ifHolidayWanderer(macro);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Create an if_ statement based on what holiday of loathing it currently is. On non-holidays, returns the original macro, with the input macro appended.
|
|
396
|
+
* @param macro The macro to place in the if_ statement.
|
|
397
|
+
*/
|
|
398
|
+
ifNotHolidayWanderer(macro) {
|
|
399
|
+
const todaysWanderers = getTodaysHolidayWanderers();
|
|
400
|
+
if (todaysWanderers.length === 0)
|
|
401
|
+
return this.step(macro);
|
|
402
|
+
return this.if_(todaysWanderers.map((monster) => `!monsterid ${monster.id}`).join(" && "), macro);
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Create a new macro starting with an ifNotHolidayWanderer step.
|
|
406
|
+
* @param macro The macro to place inside the if_ statement
|
|
407
|
+
*/
|
|
408
|
+
static ifNotHolidayWanderer(macro) {
|
|
409
|
+
return new this().ifNotHolidayWanderer(macro);
|
|
410
|
+
}
|
|
375
411
|
}
|
|
376
412
|
Macro.SAVED_MACRO_PROPERTY = "libram_savedMacro";
|
|
377
413
|
Macro.cachedMacroId = null;
|
package/dist/diet/index.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { fullnessLimit, getWorkshed, inebrietyLimit, itemType, mallPrice, mallPrices, myFullness, myPrimestat, mySpleenUse, npcPrice, spleenLimit, } from "kolmafia";
|
|
1
|
+
import { canEquip, fullnessLimit, getWorkshed, inebrietyLimit, itemType, mallPrice, mallPrices, myFullness, myInebriety, myLevel, myPrimestat, mySpleenUse, npcPrice, spleenLimit, } from "kolmafia";
|
|
2
2
|
import { knapsack } from "./knapsack";
|
|
3
3
|
import { have } from "../lib";
|
|
4
|
+
import { get as getModifier } from "../modifier";
|
|
4
5
|
import { get } from "../property";
|
|
5
6
|
import { $effect, $item, $items, $skill, $stat } from "../template-string";
|
|
6
7
|
import { sum } from "../utils";
|
|
7
|
-
|
|
8
|
-
//
|
|
8
|
+
function isMonday() {
|
|
9
|
+
// Checking Tuesday's ruby is a hack to see if it's Monday in Arizona.
|
|
10
|
+
return getModifier("Muscle Percent", $item `Tuesday's ruby`) > 0;
|
|
11
|
+
}
|
|
12
|
+
// TODO: Include Salty Mouth and potentially other modifiers.
|
|
9
13
|
function expectedAdventures(item, modifiers) {
|
|
10
14
|
if (item.adventures === "")
|
|
11
15
|
return 0;
|
|
@@ -18,6 +22,7 @@ function expectedAdventures(item, modifiers) {
|
|
|
18
22
|
(itemType(item) === "booze" && item.notes?.includes("BEER"))
|
|
19
23
|
? 1.5
|
|
20
24
|
: 1.3;
|
|
25
|
+
const garish = modifiers.garish && item.notes?.includes("LASAGNA") && !isMonday();
|
|
21
26
|
const refinedPalate = modifiers.refinedPalate && item.notes?.includes("WINE");
|
|
22
27
|
const pinkyRing = modifiers.pinkyRing && item.notes?.includes("WINE");
|
|
23
28
|
return (sum(interpolated, (baseAdventures) => {
|
|
@@ -25,6 +30,11 @@ function expectedAdventures(item, modifiers) {
|
|
|
25
30
|
if (modifiers.forkMug) {
|
|
26
31
|
adventures = Math.floor(adventures * forkMugMultiplier);
|
|
27
32
|
}
|
|
33
|
+
if (item.notes?.includes("SAUCY") && modifiers.saucemaven) {
|
|
34
|
+
adventures += myPrimestat() === $stat `Mysticality` ? 5 : 3;
|
|
35
|
+
}
|
|
36
|
+
if (garish)
|
|
37
|
+
adventures += 5;
|
|
28
38
|
if (refinedPalate)
|
|
29
39
|
adventures = Math.floor(adventures * 1.25);
|
|
30
40
|
if (pinkyRing)
|
|
@@ -32,13 +42,10 @@ function expectedAdventures(item, modifiers) {
|
|
|
32
42
|
if (item.notes?.includes("MARTINI") && modifiers.tuxedoShirt) {
|
|
33
43
|
adventures += 2;
|
|
34
44
|
}
|
|
35
|
-
if (have($skill `Saucemaven`) && item.notes?.includes("SAUCY")) {
|
|
36
|
-
adventures += myPrimestat() === $stat `Mysticality` ? 5 : 3;
|
|
37
|
-
}
|
|
38
|
-
if (itemType(item) === "food" && modifiers.seasoning)
|
|
39
|
-
adventures++;
|
|
40
45
|
if (itemType(item) === "food" && modifiers.mayoflex)
|
|
41
46
|
adventures++;
|
|
47
|
+
if (itemType(item) === "food" && modifiers.seasoning)
|
|
48
|
+
adventures++;
|
|
42
49
|
return adventures;
|
|
43
50
|
}) / interpolated.length);
|
|
44
51
|
}
|
|
@@ -98,6 +105,8 @@ MenuItem.defaultOptions = new Map([
|
|
|
98
105
|
size: -1,
|
|
99
106
|
},
|
|
100
107
|
],
|
|
108
|
+
[$item `spice melange`, { maximum: "auto" }],
|
|
109
|
+
[$item `Ultra Mega Sour Ball`, { maximum: "auto" }],
|
|
101
110
|
]);
|
|
102
111
|
const organs = ["food", "booze", "spleen item"];
|
|
103
112
|
function isOrgan(x) {
|
|
@@ -114,8 +123,6 @@ class DietPlanner {
|
|
|
114
123
|
getWorkshed() === $item `portable Mayo Clinic`
|
|
115
124
|
? menu.find((item) => item.item === $item `Mayoflex`)
|
|
116
125
|
: undefined;
|
|
117
|
-
this.pinkyRing = have($item `mafia pinky ring`);
|
|
118
|
-
this.tuxedoShirt = have($item `tuxedo shirt`);
|
|
119
126
|
this.menu = menu.filter((item) => item.organ);
|
|
120
127
|
if (menu.length > 100) {
|
|
121
128
|
mallPrices("food");
|
|
@@ -129,9 +136,20 @@ class DietPlanner {
|
|
|
129
136
|
this.consumptionValue(spleenItems[0]) / spleenItems[0].item.spleen;
|
|
130
137
|
}
|
|
131
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Determine the value of consuming a menu item with any profitable helpers.
|
|
141
|
+
* @param menuItem Menu item to check.
|
|
142
|
+
* @returns Value for consuming that menu item.
|
|
143
|
+
*/
|
|
132
144
|
consumptionValue(menuItem) {
|
|
133
145
|
return this.consumptionHelpersAndValue(menuItem, {})[1];
|
|
134
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Determine which helpers will be used with a menu item and its resulting value.
|
|
149
|
+
* @param menuItem Menu item to check.
|
|
150
|
+
* @param overrideModifiers Overrides for consumption modifiers, if any.
|
|
151
|
+
* @returns Pair [array of helpers and base menu item, value].
|
|
152
|
+
*/
|
|
135
153
|
consumptionHelpersAndValue(menuItem, overrideModifiers) {
|
|
136
154
|
const helpers = [];
|
|
137
155
|
if (this.seasoning &&
|
|
@@ -148,9 +166,11 @@ class DietPlanner {
|
|
|
148
166
|
forkMug: false,
|
|
149
167
|
seasoning: this.seasoning ? helpers.includes(this.seasoning) : false,
|
|
150
168
|
mayoflex: this.mayoflex ? helpers.includes(this.mayoflex) : false,
|
|
151
|
-
refinedPalate:
|
|
152
|
-
|
|
153
|
-
|
|
169
|
+
refinedPalate: have($effect `Refined Palate`),
|
|
170
|
+
garish: have($effect `Gar-ish`),
|
|
171
|
+
saucemaven: have($skill `Saucemaven`),
|
|
172
|
+
pinkyRing: have($item `mafia pinky ring`) && canEquip($item `mafia pinky ring`),
|
|
173
|
+
tuxedoShirt: have($item `tuxedo shirt`) && canEquip($item `tuxedo shirt`),
|
|
154
174
|
...overrideModifiers,
|
|
155
175
|
};
|
|
156
176
|
const forkMug = itemType(menuItem.item) === "food"
|
|
@@ -178,8 +198,14 @@ class DietPlanner {
|
|
|
178
198
|
? [[...helpers, forkMug, menuItem], valueForkMug + valueSpleen]
|
|
179
199
|
: [[...helpers, menuItem], valueRaw + valueSpleen];
|
|
180
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Plan an individual organ.
|
|
203
|
+
* @param capacity Organ capacity.
|
|
204
|
+
* @param overrideModifiers Overrides for consumption modifiers, if any.
|
|
205
|
+
* @returns Pair of [value, menu items and quantities].
|
|
206
|
+
*/
|
|
181
207
|
planOrgan(organ, capacity, overrideModifiers = {}) {
|
|
182
|
-
const submenu = this.menu.filter((
|
|
208
|
+
const submenu = this.menu.filter((menuItem) => menuItem.organ === organ && myLevel() >= menuItem.item.levelreq);
|
|
183
209
|
const knapsackValues = submenu.map((menuItem) => [
|
|
184
210
|
...this.consumptionHelpersAndValue(menuItem, overrideModifiers),
|
|
185
211
|
menuItem.size,
|
|
@@ -187,6 +213,12 @@ class DietPlanner {
|
|
|
187
213
|
]);
|
|
188
214
|
return knapsack(knapsackValues, capacity);
|
|
189
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Plan organs.
|
|
218
|
+
* @param organCapacities Organ capacities.
|
|
219
|
+
* @param overrideModifiers Overrides for consumption modifiers, if any.
|
|
220
|
+
* @returns Pair of [value, menu items and quantities].
|
|
221
|
+
*/
|
|
190
222
|
planOrgans(organCapacities, overrideModifiers = {}) {
|
|
191
223
|
const valuePlans = organCapacities.map(([organ, capacity]) => this.planOrgan(organ, capacity, overrideModifiers));
|
|
192
224
|
return [
|
|
@@ -194,12 +226,23 @@ class DietPlanner {
|
|
|
194
226
|
[].concat(...valuePlans.map(([, plan]) => plan)),
|
|
195
227
|
];
|
|
196
228
|
}
|
|
197
|
-
|
|
229
|
+
/**
|
|
230
|
+
* Plan organs, retrying with and without each trial item. Runtime is
|
|
231
|
+
* proportional to 2 ^ trialItems.length.
|
|
232
|
+
* @param organCapacities Organ capacities.
|
|
233
|
+
* @param trialItems Items to rerun solver with and without.
|
|
234
|
+
* @param overrideModifiers Overrides for consumption modifiers, if any.
|
|
235
|
+
* @returns Pair of [value, menu items and quantities].
|
|
236
|
+
*/
|
|
237
|
+
planOrgansWithTrials(organCapacities, trialItems, overrideModifiers) {
|
|
198
238
|
if (trialItems.length === 0) {
|
|
199
239
|
return this.planOrgans(organCapacities, overrideModifiers);
|
|
200
240
|
}
|
|
201
|
-
const organCapacitiesWithMap = new Map(organCapacities);
|
|
202
241
|
const [trialItem, organSizes] = trialItems[0];
|
|
242
|
+
if (trialItem.maximum !== undefined && trialItem.maximum <= 0) {
|
|
243
|
+
return this.planOrgansWithTrials(organCapacities, trialItems.slice(1), overrideModifiers);
|
|
244
|
+
}
|
|
245
|
+
const organCapacitiesWithMap = new Map(organCapacities);
|
|
203
246
|
for (const [organ, size] of organSizes) {
|
|
204
247
|
const current = organCapacitiesWithMap.get(organ);
|
|
205
248
|
if (current !== undefined) {
|
|
@@ -207,12 +250,18 @@ class DietPlanner {
|
|
|
207
250
|
}
|
|
208
251
|
}
|
|
209
252
|
const organCapacitiesWith = [...organCapacitiesWithMap];
|
|
210
|
-
const isRefinedPalate = trialItem.item === $item `pocket wish` &&
|
|
211
|
-
trialItem.wishEffect === $effect `Refined Palate
|
|
253
|
+
const isRefinedPalate = (trialItem.item === $item `pocket wish` &&
|
|
254
|
+
trialItem.wishEffect === $effect `Refined Palate`) ||
|
|
255
|
+
trialItem.item === $item `toasted brie`;
|
|
256
|
+
const isGarish = (trialItem.item === $item `pocket wish` &&
|
|
257
|
+
trialItem.wishEffect === $effect `Gar-ish`) ||
|
|
258
|
+
trialItem.item === $item `potion of the field gar`;
|
|
212
259
|
const [valueWithout, planWithout] = this.planOrgansWithTrials(organCapacities, trialItems.slice(1), overrideModifiers);
|
|
213
|
-
const [valueWith, planWith] = this.planOrgansWithTrials(organCapacitiesWith, trialItems.slice(1),
|
|
214
|
-
|
|
215
|
-
:
|
|
260
|
+
const [valueWith, planWith] = this.planOrgansWithTrials(organCapacitiesWith, trialItems.slice(1), {
|
|
261
|
+
...overrideModifiers,
|
|
262
|
+
...(isRefinedPalate ? { refinedPalate: true } : {}),
|
|
263
|
+
...(isGarish ? { garish: true } : {}),
|
|
264
|
+
});
|
|
216
265
|
const [helpersAndItem, value] = this.consumptionHelpersAndValue(trialItem, {});
|
|
217
266
|
return valueWithout > valueWith + value
|
|
218
267
|
? [valueWithout, planWithout]
|
|
@@ -267,6 +316,10 @@ const interactingItems = [
|
|
|
267
316
|
["booze", -2],
|
|
268
317
|
],
|
|
269
318
|
],
|
|
319
|
+
[$effect `Refined Palate`, []],
|
|
320
|
+
[$item `toasted brie`, [["food", 2]]],
|
|
321
|
+
[$effect `Gar-ish`, []],
|
|
322
|
+
[$item `potion of the field gar`, []],
|
|
270
323
|
];
|
|
271
324
|
/**
|
|
272
325
|
* Plan out an optimal diet using a knapsack algorithm.
|
|
@@ -280,37 +333,58 @@ export function planDiet(mpa, menu, organCapacities = [
|
|
|
280
333
|
["booze", null],
|
|
281
334
|
["spleen item", null],
|
|
282
335
|
]) {
|
|
283
|
-
|
|
336
|
+
// FIXME: Figure out a better way to handle overfull organs (e.g. coming out of Ed).
|
|
284
337
|
const resolvedOrganCapacities = organCapacities.map(([organ, size]) => [
|
|
285
338
|
organ,
|
|
286
339
|
size ??
|
|
287
340
|
(organ === "food"
|
|
288
|
-
? fullnessLimit() -
|
|
289
|
-
myFullness() +
|
|
290
|
-
(have($item `distention pill`) ? 1 : 0)
|
|
341
|
+
? fullnessLimit() - myFullness()
|
|
291
342
|
: organ === "booze"
|
|
292
|
-
? inebrietyLimit()
|
|
343
|
+
? inebrietyLimit() - myInebriety()
|
|
293
344
|
: organ === "spleen item"
|
|
294
345
|
? spleenLimit() - mySpleenUse()
|
|
295
346
|
: 0),
|
|
296
347
|
]);
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
menuItem.
|
|
305
|
-
|
|
306
|
-
|
|
348
|
+
/**
|
|
349
|
+
* Per above description, separate out items with cross-organ interaction
|
|
350
|
+
* ("interacting items") for special treatment. These will be checked by
|
|
351
|
+
* running the solver several times.
|
|
352
|
+
*/
|
|
353
|
+
const includedInteractingItems = menu
|
|
354
|
+
.map((menuItem) => {
|
|
355
|
+
const interacting = interactingItems.find(([itemOrEffect]) => menuItem.item === itemOrEffect ||
|
|
356
|
+
(menuItem.item === $item `pocket wish` &&
|
|
357
|
+
menuItem.wishEffect === itemOrEffect));
|
|
358
|
+
if (interacting) {
|
|
359
|
+
const [, organSizes] = interacting;
|
|
360
|
+
return [menuItem, organSizes];
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
})
|
|
366
|
+
.filter((value) => value !== null);
|
|
367
|
+
// Filter out interacting items from natural consideration.
|
|
368
|
+
const dietPlanner = new DietPlanner(mpa, menu.filter((menuItem) => !includedInteractingItems.some(([interacting]) => interacting === menuItem)));
|
|
369
|
+
/**
|
|
370
|
+
* Because our knapsack solver is one-dimensional, we have to consider
|
|
371
|
+
* each organ separately. Since there are no spleen items that affect
|
|
372
|
+
* stomach/liver, we consider those two first, with an approximation of the
|
|
373
|
+
* value of spleen-cleaning. Afterwards, we see how much spleen we have and
|
|
374
|
+
* plan that.
|
|
375
|
+
*/
|
|
376
|
+
const [, planFoodBooze] = dietPlanner.planOrgansWithTrials(resolvedOrganCapacities.filter(([organ, capacity]) => ["food", "booze"].includes(organ) && capacity >= 0), includedInteractingItems, {});
|
|
377
|
+
const spleenCapacity = resolvedOrganCapacities.find(([organ]) => organ === "spleen item");
|
|
378
|
+
if (spleenCapacity) {
|
|
379
|
+
// Count sliders and pickle juice, figure out how much extra spleen we got.
|
|
380
|
+
const additionalSpleen = sum(planFoodBooze, ([items, number]) => items.some((menuItem) => $items `jar of fermented pickle juice, extra-greasy slider`.includes(menuItem.item))
|
|
381
|
+
? 5 * number
|
|
382
|
+
: 0);
|
|
383
|
+
const [, availableSpleen] = spleenCapacity;
|
|
384
|
+
const [, planSpleen] = dietPlanner.planOrgan("spleen item", availableSpleen + additionalSpleen);
|
|
385
|
+
return [...planFoodBooze, ...planSpleen];
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
return planFoodBooze;
|
|
307
389
|
}
|
|
308
|
-
const [, planFoodBooze] = dietPlanner.planOrgansWithTrials(resolvedOrganCapacities.filter(([organ]) => ["food", "booze"].includes(organ)), includedInteractingItems);
|
|
309
|
-
// Count sliders and pickle juice, figure out how much extra spleen we got.
|
|
310
|
-
const additionalSpleen = sum(planFoodBooze, ([items, number]) => items.some((menuItem) => $items `jar of fermented pickle juice, extra-greasy slider`.includes(menuItem.item))
|
|
311
|
-
? 5 * number
|
|
312
|
-
: 0);
|
|
313
|
-
const [, availableSpleen] = resolvedOrganCapacities.find(([organ]) => organ === "spleen item") ?? ["spleen item", 0];
|
|
314
|
-
const [, planSpleen] = dietPlanner.planOrgan("spleen item", availableSpleen + additionalSpleen);
|
|
315
|
-
return [...planFoodBooze, ...planSpleen];
|
|
316
390
|
}
|
package/dist/diet/knapsack.js
CHANGED
|
@@ -32,17 +32,30 @@ function aggregate(list, isEqual) {
|
|
|
32
32
|
* @returns Tuple {[totalValue, items]} of selected items and total value of those items.
|
|
33
33
|
*/
|
|
34
34
|
export function knapsack(values, capacity) {
|
|
35
|
+
if (!Number.isFinite(capacity)) {
|
|
36
|
+
throw new Error("Invalid capacity.");
|
|
37
|
+
}
|
|
35
38
|
// Invert negative values into a fake value for not using it.
|
|
36
|
-
const valuesInverted = values.map(([thing, value, weight, maximum]) => (weight < 0 && maximum
|
|
39
|
+
const valuesInverted = values.map(([thing, value, weight, maximum]) => (weight < 0 && maximum !== undefined
|
|
37
40
|
? [new Not(thing), -value, -weight, maximum]
|
|
38
41
|
: [thing, value, weight, maximum]));
|
|
39
|
-
const capacityAdjustment = sum(values, ([, , weight, maximum]) => weight < 0 && maximum ? -weight * maximum : 0);
|
|
42
|
+
const capacityAdjustment = sum(values, ([, , weight, maximum]) => weight < 0 && maximum !== undefined ? -weight * maximum : 0);
|
|
40
43
|
const adjustedCapacity = capacity + capacityAdjustment;
|
|
44
|
+
if (adjustedCapacity < 0) {
|
|
45
|
+
// We don't have enough cleaners to create any space, so can't fit anything.
|
|
46
|
+
return [-Infinity, []];
|
|
47
|
+
}
|
|
41
48
|
// Sort values by weight.
|
|
42
49
|
const valuesSorted = [...valuesInverted].sort((x, y) => x[2] - y[2]);
|
|
43
50
|
// Convert the problem into 0/1 knapsack - just include as many copies as possible of each item.
|
|
44
51
|
const values01 = [].concat(...valuesSorted.map(([thing, value, weight, maximum]) => {
|
|
52
|
+
if (!Number.isFinite(weight) || weight < 0) {
|
|
53
|
+
throw new Error(`Invalid weight ${weight} for ${thing instanceof Not ? `not ${thing.thing}` : thing}`);
|
|
54
|
+
}
|
|
45
55
|
const maxQuantity = maximum ?? Math.floor(adjustedCapacity / weight);
|
|
56
|
+
if (maxQuantity < 0) {
|
|
57
|
+
throw new Error(`Invalid max quantity ${maxQuantity} for ${thing instanceof Not ? `not ${thing.thing}` : thing}`);
|
|
58
|
+
}
|
|
46
59
|
return new Array(maxQuantity).fill([
|
|
47
60
|
thing,
|
|
48
61
|
value,
|
package/dist/lib.d.ts
CHANGED
|
@@ -265,3 +265,5 @@ export declare function findLeprechaunMultiplier(familiar: Familiar): number;
|
|
|
265
265
|
* @param familiar The familiar whose fairy multiplier you're interested in
|
|
266
266
|
*/
|
|
267
267
|
export declare function findFairyMultiplier(familiar: Familiar): number;
|
|
268
|
+
export declare const holidayWanderers: Map<string, Monster[]>;
|
|
269
|
+
export declare function getTodaysHolidayWanderers(): Monster[];
|
package/dist/lib.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @module GeneralLibrary */
|
|
2
2
|
import "core-js/modules/es.object.entries";
|
|
3
|
-
import { appearanceRates, autosellPrice, availableAmount, booleanModifier, cliExecute, fullnessLimit, getCampground, getCounters, getPlayerId, getPlayerName, getRelated, haveEffect, haveFamiliar, haveServant, haveSkill, inebrietyLimit, mallPrice, myEffects, myFamiliar, myFullness, myInebriety, myPath, mySpleenUse, myThrall, myTurncount, numericModifier, spleenLimit, toItem, toSkill, totalTurnsPlayed, } from "kolmafia";
|
|
4
|
-
import { $class, $familiar, $item, $items } from "./template-string";
|
|
3
|
+
import { appearanceRates, autosellPrice, availableAmount, booleanModifier, cliExecute, fullnessLimit, getCampground, getCounters, getPlayerId, getPlayerName, getRelated, haveEffect, haveFamiliar, haveServant, haveSkill, holiday, inebrietyLimit, mallPrice, myEffects, myFamiliar, myFullness, myInebriety, myPath, mySpleenUse, myThrall, myTurncount, numericModifier, spleenLimit, toItem, toSkill, totalTurnsPlayed, } from "kolmafia";
|
|
4
|
+
import { $class, $familiar, $item, $items, $monsters } from "./template-string";
|
|
5
5
|
import { get } from "./property";
|
|
6
6
|
import { chunk } from "./utils";
|
|
7
7
|
/**
|
|
@@ -506,3 +506,23 @@ export function findFairyMultiplier(familiar) {
|
|
|
506
506
|
return 0;
|
|
507
507
|
return Math.pow(Math.sqrt(itemBonus + 55 / 4 + 3) - Math.sqrt(55) / 2, 2);
|
|
508
508
|
}
|
|
509
|
+
export const holidayWanderers = new Map([
|
|
510
|
+
[
|
|
511
|
+
"El Dia De Los Muertos Borrachos",
|
|
512
|
+
$monsters `Novia Cadáver, Novio Cadáver, Padre Cadáver, Persona Inocente Cadáver`,
|
|
513
|
+
],
|
|
514
|
+
[
|
|
515
|
+
"Feast of Boris",
|
|
516
|
+
$monsters `Candied Yam Golem, Malevolent Tofurkey, Possessed Can of Cranberry Sauce, Stuffing Golem`,
|
|
517
|
+
],
|
|
518
|
+
[
|
|
519
|
+
"Talk Like a Pirate Day",
|
|
520
|
+
$monsters `ambulatory pirate, migratory pirate, peripatetic pirate`,
|
|
521
|
+
],
|
|
522
|
+
]);
|
|
523
|
+
export function getTodaysHolidayWanderers() {
|
|
524
|
+
return holiday()
|
|
525
|
+
.split("/")
|
|
526
|
+
.map((holiday) => holidayWanderers.get(holiday) ?? [])
|
|
527
|
+
.flat();
|
|
528
|
+
}
|
package/dist/mood.d.ts
CHANGED
|
@@ -72,6 +72,11 @@ export declare class Mood {
|
|
|
72
72
|
* @param effect Effect to wish for in the mood.
|
|
73
73
|
*/
|
|
74
74
|
genie(effect: Effect): Mood;
|
|
75
|
+
/**
|
|
76
|
+
* Add an Asdon Martin driving style to the mood.
|
|
77
|
+
* @param effect Driving style to add to the mood.
|
|
78
|
+
*/
|
|
79
|
+
drive(effect: Effect): Mood;
|
|
75
80
|
/**
|
|
76
81
|
* Execute the mood, trying to ensure {ensureTurns} of each effect.
|
|
77
82
|
* @param ensureTurns Turns of each effect to try and achieve.
|
package/dist/mood.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { availableAmount, buy, cliExecute, eat, effectModifier, haveEffect, haveSkill, hpCost, itemAmount, mallPrice, mpCost, myHp, myMaxmp, myMp, numericModifier, retrieveItem, toEffect, toSkill, turnsPerCast, use, useSkill, } from "kolmafia";
|
|
2
2
|
import { getActiveSongs, have, isSong } from "./lib";
|
|
3
3
|
import { get } from "./property";
|
|
4
|
+
import { AsdonMartin } from "./resources";
|
|
4
5
|
import { $item, $skill } from "./template-string";
|
|
5
6
|
import { clamp, sum } from "./utils";
|
|
6
7
|
export class MpSource {
|
|
@@ -171,6 +172,15 @@ class CustomMoodElement extends MoodElement {
|
|
|
171
172
|
return haveEffect(this.effect) > ensureTurns;
|
|
172
173
|
}
|
|
173
174
|
}
|
|
175
|
+
class AsdonMoodElement extends MoodElement {
|
|
176
|
+
constructor(effect) {
|
|
177
|
+
super();
|
|
178
|
+
this.effect = effect;
|
|
179
|
+
}
|
|
180
|
+
execute(mood, ensureTurns) {
|
|
181
|
+
return AsdonMartin.drive(this.effect, ensureTurns);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
174
184
|
/**
|
|
175
185
|
* Class representing a mood object. Add mood elements using the instance methods, which can be chained.
|
|
176
186
|
*/
|
|
@@ -246,6 +256,16 @@ export class Mood {
|
|
|
246
256
|
this.elements.push(new GenieMoodElement(effect));
|
|
247
257
|
return this;
|
|
248
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Add an Asdon Martin driving style to the mood.
|
|
261
|
+
* @param effect Driving style to add to the mood.
|
|
262
|
+
*/
|
|
263
|
+
drive(effect) {
|
|
264
|
+
if (Object.values(AsdonMartin.Driving).includes(effect)) {
|
|
265
|
+
this.elements.push(new AsdonMoodElement(effect));
|
|
266
|
+
}
|
|
267
|
+
return this;
|
|
268
|
+
}
|
|
249
269
|
/**
|
|
250
270
|
* Execute the mood, trying to ensure {ensureTurns} of each effect.
|
|
251
271
|
* @param ensureTurns Turns of each effect to try and achieve.
|
package/dist/property.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "core-js/modules/es.object.entries";
|
|
2
2
|
import "core-js/modules/es.object.from-entries";
|
|
3
3
|
import { getProperty, setProperty } from "kolmafia";
|
|
4
|
-
import { isBooleanProperty, isLocationProperty, isMonsterProperty, isNumericProperty, } from "./propertyTyping";
|
|
4
|
+
import { isBooleanProperty, isLocationProperty, isMonsterProperty, isNumericProperty, isPhylumProperty, } from "./propertyTyping";
|
|
5
5
|
const createPropertyGetter = (transform) => (property, default_) => {
|
|
6
6
|
const value = getProperty(property);
|
|
7
7
|
if (default_ !== undefined && value === "") {
|
|
@@ -51,6 +51,9 @@ export function get(property, _default) {
|
|
|
51
51
|
if (isNumericProperty(property, value)) {
|
|
52
52
|
return getNumber(property, _default);
|
|
53
53
|
}
|
|
54
|
+
if (isPhylumProperty(property)) {
|
|
55
|
+
return getPhylum(property);
|
|
56
|
+
}
|
|
54
57
|
return value;
|
|
55
58
|
}
|
|
56
59
|
export function set(property, value) {
|
package/dist/propertyTypes.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ 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" | "birdformCold" | "birdformHot" | "birdformRoc" | "birdformSleaze" | "birdformSpooky" | "birdformStench" | "blackBartsBootyCost" | "blackPuddingsDefeated" | "blackForestProgress" | "blankOutUsed" | "bloodweiserDrunk" | "bondPoints" | "bondVillainsDefeated" | "boneAbacusVictories" | "booPeakProgress" | "borisPoints" | "breakableHandling" | "breakableHandling1964" | "breakableHandling9691" | "breakableHandling9692" | "breakableHandling9699" | "brodenBacteria" | "brodenSprinkles" | "buffBotMessageDisposal" | "buffBotPhilanthropyType" | "buffJimmyIngredients" | "burnoutsDefeated" | "burrowgrubSummonsRemaining" | "camelSpit" | "camerasUsed" | "campAwayDecoration" | "carboLoading" | "catBurglarBankHeists" | "cellarLayout" | "charitableDonations" | "chasmBridgeProgress" | "chefTurnsUsed" | "chessboardsCleared" | "chilledToTheBone" | "cinderellaMinutesToMidnight" | "cinderellaScore" | "cocktailSummons" | "controlPanelOmega" | "cornucopiasOpened" | "cozyCounter6332" | "cozyCounter6333" | "cozyCounter6334" | "crimbo16BeardChakraCleanliness" | "crimbo16BootsChakraCleanliness" | "crimbo16BungChakraCleanliness" | "crimbo16CrimboHatChakraCleanliness" | "crimbo16GutsChakraCleanliness" | "crimbo16HatChakraCleanliness" | "crimbo16JellyChakraCleanliness" | "crimbo16LiverChakraCleanliness" | "crimbo16NippleChakraCleanliness" | "crimbo16NoseChakraCleanliness" | "crimbo16ReindeerChakraCleanliness" | "crimbo16SackChakraCleanliness" | "crimboTreeDays" | "cubelingProgress" | "currentExtremity" | "currentHedgeMazeRoom" | "currentMojoFilters" | "currentNunneryMeat" | "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" | "essenceOfAnnoyanceCost" | "essenceOfBearCost" | "extraRolloverAdventures" | "falloutShelterLevel" | "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" | "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" | "lastSemirareReset" | "lastSkateParkReset" | "lastStillBeatingSpleen" | "lastTavernAscension" | "lastTavernSquare" | "lastTelescopeReset" | "lastTempleAdventures" | "lastTempleButtonsUnlock" | "lastTempleUnlock" | "lastTr4pz0rQuest" | "lastVioletFogMap" | "lastVoteMonsterTurn" | "lastWartDinseyDefeated" | "lastWuTangDefeated" | "lastYearbookCameraAscension" | "lastZapperWand" | "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" | "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" | "semirareCounter" | "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" | "violetFogGoal" | "walfordBucketProgress" | "warehouseProgress" | "welcomeBackAdv" | "writingDesksDefeated" | "xoSkeleltonXProgress" | "xoSkeleltonOProgress" | "yearbookCameraAscensions" | "yearbookCameraUpgrades" | "youRobotBody" | "youRobotBottom" | "youRobotLeft" | "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" | "_companionshipCasts" | "_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" | "_nextQuantumAlignment" | "_nightmareFuelCharges" | "_noobSkillCount" | "_nuclearStockpileUsed" | "_oilExtracted" | "_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" | "_universeCalculated" | "_universeImploded" | "_usedReplicaBatoomerang" | "_vampyreCloakeFormUses" | "_villainLairProgress" | "_vitachocCapsulesUsed" | "_vmaskAdv" | "_volcanoItem1" | "_volcanoItem2" | "_volcanoItem3" | "_volcanoItemCount1" | "_volcanoItemCount2" | "_volcanoItemCount3" | "_voteFreeFights" | "_VYKEACompanionLevel" | "_warbearAutoAnvilCrafting" | "_whiteRiceDrops" | "_witchessFights" | "_xoHugsUsed" | "_yellowPixelDropsCrown" | "_zapCount";
|
|
4
4
|
export declare type MonsterProperty = "cameraMonster" | "chateauMonster" | "crappyCameraMonster" | "crudeMonster" | "crystalBallMonster" | "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 = "crystalBallLocation" | "currentJunkyardLocation" | "doctorBagQuestLocation" | "ghostLocation" | "guzzlrQuestLocation" | "nextSpookyravenElizabethRoom" | "nextSpookyravenStephenRoom" | "semirareLocation" | "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" | "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" | "dnaSyringe" | "doctorBagQuestItem" | "dolphinItem" | "edPiece" | "ensorcelee" | "EVEDirections" | "extraCosmeticModifiers" | "familiarScript" | "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" | "redSnapperPhylum" | "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" | "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" | "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" | "ensorcelee" | "EVEDirections" | "extraCosmeticModifiers" | "familiarScript" | "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" | "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";
|
|
8
8
|
export declare type FamiliarProperty = "commaFamiliar" | "nextQuantumFamiliar" | "preBlackbirdFamiliar";
|
|
9
9
|
export declare type StatProperty = "nsChallenge1" | "snojoSetting";
|
|
10
|
+
export declare type PhylumProperty = "dnaSyringe" | "redSnapperPhylum";
|
package/dist/propertyTyping.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BooleanProperty, FamiliarProperty, LocationProperty, MonsterProperty, NumericOrStringProperty, NumericProperty, StatProperty, StringProperty } from "./propertyTypes";
|
|
1
|
+
import { BooleanProperty, FamiliarProperty, LocationProperty, MonsterProperty, NumericOrStringProperty, NumericProperty, PhylumProperty, StatProperty, StringProperty } from "./propertyTypes";
|
|
2
2
|
export declare function isNumericProperty(property: string, value: string): property is NumericProperty;
|
|
3
3
|
export declare function isNumericOrStringProperty(property: string): property is NumericOrStringProperty;
|
|
4
4
|
export declare function isBooleanProperty(property: string, value: string): property is BooleanProperty;
|
|
@@ -6,5 +6,6 @@ export declare function isLocationProperty(property: string): property is Locati
|
|
|
6
6
|
export declare function isMonsterProperty(property: string): property is MonsterProperty;
|
|
7
7
|
export declare function isFamiliarProperty(property: string): property is FamiliarProperty;
|
|
8
8
|
export declare function isStatProperty(property: string): property is StatProperty;
|
|
9
|
-
export declare
|
|
10
|
-
export declare type
|
|
9
|
+
export declare function isPhylumProperty(property: string): property is PhylumProperty;
|
|
10
|
+
export declare type KnownProperty = NumericProperty | BooleanProperty | MonsterProperty | LocationProperty | FamiliarProperty | PhylumProperty | StatProperty | StringProperty | NumericOrStringProperty;
|
|
11
|
+
export declare type PropertyValue<Property, Default = any> = Property extends NumericProperty ? number : Property extends BooleanProperty ? boolean : Property extends MonsterProperty ? Monster | null : Property extends LocationProperty ? Location | null : Property extends StringProperty ? string : Property extends FamiliarProperty ? Familiar | null : Property extends StatProperty ? Stat | null : Property extends PhylumProperty ? Phylum | null : Property extends NumericOrStringProperty ? number | string : Default;
|
package/dist/propertyTyping.js
CHANGED
|
@@ -46,3 +46,7 @@ const statProps = ["nsChallenge1", "shrugTopper", "snojoSetting"];
|
|
|
46
46
|
export function isStatProperty(property) {
|
|
47
47
|
return statProps.includes(property);
|
|
48
48
|
}
|
|
49
|
+
const phylumProps = ["dnaSyringe"];
|
|
50
|
+
export function isPhylumProperty(property) {
|
|
51
|
+
return phylumProps.includes(property) || property.endsWith("Phylum");
|
|
52
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if you have DNA lab in inventory or installed
|
|
3
|
+
*/
|
|
4
|
+
export declare function have(): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Checks if you have DNA lab installed
|
|
7
|
+
*/
|
|
8
|
+
export declare function installed(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Tells you whether you are currently hybridized. When passed with an input of any sort, tells you whether you are currently hybridized with that effect.
|
|
11
|
+
* @param tonic Optional input. When passed, the function returns whether that specific effect is hybridized.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isHybridized(tonic?: Effect | Phylum | Item): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the tonic item associated with a particular phylum.
|
|
16
|
+
* @param phylum The phylum in question.
|
|
17
|
+
* @returns The tonic item associated with that phylum; returns $item`none` for $phylum`none`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getTonic(phylum: Phylum): Item;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the tonic effect associated with a particular phylum.
|
|
22
|
+
* @param phylum The phylum in question.
|
|
23
|
+
* @returns The tonic effect associated with that phylum; returns $effect`none` for $phylum`none`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getEffect(phylum: Phylum): Effect;
|
|
26
|
+
/**
|
|
27
|
+
* Tells you which phylum to hunt down for a given effect or item.
|
|
28
|
+
* @param dnatype The tonic effect or item in question
|
|
29
|
+
* @returns The Phylum associated with that effect or item; null if an invalid choice
|
|
30
|
+
*/
|
|
31
|
+
export declare function phylumFor(dnatype: Effect | Item): Phylum | null;
|
|
32
|
+
/**
|
|
33
|
+
* Hybridize yourself with the current contents of your syringe, if possible.
|
|
34
|
+
* @returns Whether or not we succeeded
|
|
35
|
+
*/
|
|
36
|
+
export declare function hybridize(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Makes tonics with whatever phylum is currently in your syringe
|
|
39
|
+
* @param {number} [amount=1] the number of tonics to make
|
|
40
|
+
* @returns Whether we successfully made tonics; returns true if we made as many as we could, regardless of whether that was the number requested
|
|
41
|
+
*/
|
|
42
|
+
export declare function makeTonic(amount?: 1 | 2 | 3): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Tells you how many tonics you can make the rest of the day.
|
|
45
|
+
* @returns The remaining tonics you can make
|
|
46
|
+
*/
|
|
47
|
+
export declare function tonicsLeft(): number;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { cliExecute, getWorkshed, haveEffect, itemAmount } from "kolmafia";
|
|
2
|
+
import { $effect, $item, $phylum } from "../../template-string";
|
|
3
|
+
import { have as haveItem } from "../../lib";
|
|
4
|
+
import { get } from "../../property";
|
|
5
|
+
import { get as getModifier } from "../../modifier";
|
|
6
|
+
import { clamp } from "../../utils";
|
|
7
|
+
const lab = $item `Little Geneticist DNA-Splicing Lab`;
|
|
8
|
+
/**
|
|
9
|
+
* Checks if you have DNA lab in inventory or installed
|
|
10
|
+
*/
|
|
11
|
+
export function have() {
|
|
12
|
+
return haveItem(lab) || getWorkshed() === lab;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Checks if you have DNA lab installed
|
|
16
|
+
*/
|
|
17
|
+
export function installed() {
|
|
18
|
+
return getWorkshed() === lab;
|
|
19
|
+
}
|
|
20
|
+
const phylaEffects = new Map([
|
|
21
|
+
[$phylum `beast`, $effect `Human-Beast Hybrid`],
|
|
22
|
+
[$phylum `bug`, $effect `Human-Insect Hybrid`],
|
|
23
|
+
[$phylum `constellation`, $effect `Human-Constellation Hybrid`],
|
|
24
|
+
[$phylum `construct`, $effect `Human-Machine Hybrid`],
|
|
25
|
+
[$phylum `demon`, $effect `Human-Demon Hybrid`],
|
|
26
|
+
[$phylum `dude`, $effect `Human-Human Hybrid`],
|
|
27
|
+
[$phylum `elemental`, $effect `Human-Elemental Hybrid`],
|
|
28
|
+
[$phylum `elf`, $effect `Human-Elf Hybrid`],
|
|
29
|
+
[$phylum `fish`, $effect `Human-Fish Hybrid`],
|
|
30
|
+
[$phylum `goblin`, $effect `Human-Goblin Hybrid`],
|
|
31
|
+
[$phylum `hippy`, $effect `Human-Hobo Hybrid`],
|
|
32
|
+
[$phylum `horror`, $effect `Human-Horror Hybrid`],
|
|
33
|
+
[$phylum `humanoid`, $effect `Human-Humanoid Hybrid`],
|
|
34
|
+
[$phylum `mer-kin`, $effect `Human-Mer-kin Hybrid`],
|
|
35
|
+
[$phylum `orc`, $effect `Human-Orc Hybrid`],
|
|
36
|
+
[$phylum `penguin`, $effect `Human-Penguin Hybrid`],
|
|
37
|
+
[$phylum `pirate`, $effect `Human-Pirate Hybrid`],
|
|
38
|
+
[$phylum `plant`, $effect `Human-Plant Hybrid`],
|
|
39
|
+
[$phylum `slime`, $effect `Human-Slime Hybrid`],
|
|
40
|
+
[$phylum `undead`, $effect `Human-Undead Hybrid`],
|
|
41
|
+
[$phylum `weird`, $effect `Human-Weird Thing Hybrid`],
|
|
42
|
+
]);
|
|
43
|
+
const phylaTonics = new Map([
|
|
44
|
+
[$phylum `beast`, $item `Gene Tonic: Beast`],
|
|
45
|
+
[$phylum `bug`, $item `Gene Tonic: Insect`],
|
|
46
|
+
[$phylum `constellation`, $item `Gene Tonic: Constellation`],
|
|
47
|
+
[$phylum `construct`, $item `Gene Tonic: Construct`],
|
|
48
|
+
[$phylum `demon`, $item `Gene Tonic: Demon`],
|
|
49
|
+
[$phylum `dude`, $item `Gene Tonic: Humanoid`],
|
|
50
|
+
[$phylum `elemental`, $item `Gene Tonic: Elemental`],
|
|
51
|
+
[$phylum `elf`, $item `Gene Tonic: Elf`],
|
|
52
|
+
[$phylum `fish`, $item `Gene Tonic: Fish`],
|
|
53
|
+
[$phylum `goblin`, $item `Gene Tonic: Goblin`],
|
|
54
|
+
[$phylum `hippy`, $item `Gene Tonic: Hobo`],
|
|
55
|
+
[$phylum `horror`, $item `Gene Tonic: Horror`],
|
|
56
|
+
[$phylum `humanoid`, $item `Gene Tonic: Humanoid`],
|
|
57
|
+
[$phylum `mer-kin`, $item `Gene Tonic: Mer-kin`],
|
|
58
|
+
[$phylum `orc`, $item `Gene Tonic: Orc`],
|
|
59
|
+
[$phylum `penguin`, $item `Gene Tonic: Penguin`],
|
|
60
|
+
[$phylum `pirate`, $item `Gene Tonic: Pirate`],
|
|
61
|
+
[$phylum `plant`, $item `Gene Tonic: Plant`],
|
|
62
|
+
[$phylum `slime`, $item `Gene Tonic: Slime`],
|
|
63
|
+
[$phylum `undead`, $item `Gene Tonic: Undead`],
|
|
64
|
+
[$phylum `weird`, $item `Gene Tonic: Weird`],
|
|
65
|
+
]);
|
|
66
|
+
const tonicEffects = Array.from(phylaEffects.values());
|
|
67
|
+
/**
|
|
68
|
+
* Tells you whether you are currently hybridized. When passed with an input of any sort, tells you whether you are currently hybridized with that effect.
|
|
69
|
+
* @param tonic Optional input. When passed, the function returns whether that specific effect is hybridized.
|
|
70
|
+
*/
|
|
71
|
+
export function isHybridized(tonic) {
|
|
72
|
+
if (!tonic)
|
|
73
|
+
return installed() && get("_dnaHybrid");
|
|
74
|
+
const tonicEffect = tonic instanceof Effect
|
|
75
|
+
? tonic
|
|
76
|
+
: tonic instanceof Phylum
|
|
77
|
+
? getEffect(tonic)
|
|
78
|
+
: getModifier("Effect", tonic);
|
|
79
|
+
return (tonicEffects.includes(tonicEffect) && haveEffect(tonicEffect) === 2147483647);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns the tonic item associated with a particular phylum.
|
|
83
|
+
* @param phylum The phylum in question.
|
|
84
|
+
* @returns The tonic item associated with that phylum; returns $item`none` for $phylum`none`.
|
|
85
|
+
*/
|
|
86
|
+
export function getTonic(phylum) {
|
|
87
|
+
return phylaTonics.get(phylum) ?? $item `none`;
|
|
88
|
+
//return $item`none` rather than null because it should never happen.
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns the tonic effect associated with a particular phylum.
|
|
92
|
+
* @param phylum The phylum in question.
|
|
93
|
+
* @returns The tonic effect associated with that phylum; returns $effect`none` for $phylum`none`.
|
|
94
|
+
*/
|
|
95
|
+
export function getEffect(phylum) {
|
|
96
|
+
return phylaEffects.get(phylum) ?? $effect `none`;
|
|
97
|
+
//return $effect`none` rather than null because it should never happen
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Tells you which phylum to hunt down for a given effect or item.
|
|
101
|
+
* @param dnatype The tonic effect or item in question
|
|
102
|
+
* @returns The Phylum associated with that effect or item; null if an invalid choice
|
|
103
|
+
*/
|
|
104
|
+
export function phylumFor(dnatype) {
|
|
105
|
+
if (dnatype instanceof Effect) {
|
|
106
|
+
const phylumPair = Array.from(phylaEffects.entries()).find(([, effect]) => effect === dnatype);
|
|
107
|
+
return phylumPair ? phylumPair[0] : null;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const phylumPair = Array.from(phylaTonics.entries()).find(([, tonic]) => tonic === dnatype);
|
|
111
|
+
return phylumPair ? phylumPair[0] : null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Hybridize yourself with the current contents of your syringe, if possible.
|
|
116
|
+
* @returns Whether or not we succeeded
|
|
117
|
+
*/
|
|
118
|
+
export function hybridize() {
|
|
119
|
+
if (get("_dnaHybrid"))
|
|
120
|
+
return false;
|
|
121
|
+
if (!installed())
|
|
122
|
+
return false;
|
|
123
|
+
const currentSyringe = get("dnaSyringe");
|
|
124
|
+
if (!currentSyringe)
|
|
125
|
+
return false;
|
|
126
|
+
const tonicPotion = getTonic(currentSyringe);
|
|
127
|
+
const expectedEffect = getModifier("Effect", tonicPotion);
|
|
128
|
+
cliExecute("camp dnainject");
|
|
129
|
+
return isHybridized(expectedEffect);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Makes tonics with whatever phylum is currently in your syringe
|
|
133
|
+
* @param {number} [amount=1] the number of tonics to make
|
|
134
|
+
* @returns Whether we successfully made tonics; returns true if we made as many as we could, regardless of whether that was the number requested
|
|
135
|
+
*/
|
|
136
|
+
export function makeTonic(amount = 1) {
|
|
137
|
+
if (!installed())
|
|
138
|
+
return false;
|
|
139
|
+
const currentSyringe = get("dnaSyringe");
|
|
140
|
+
if (!currentSyringe)
|
|
141
|
+
return false;
|
|
142
|
+
const tonicPotion = getTonic(currentSyringe);
|
|
143
|
+
const amountToMake = clamp(amount, 0, tonicsLeft());
|
|
144
|
+
const startingAmount = itemAmount(tonicPotion);
|
|
145
|
+
cliExecute(`camp dnapotion ${amountToMake}`);
|
|
146
|
+
return itemAmount(tonicPotion) - startingAmount === amountToMake;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Tells you how many tonics you can make the rest of the day.
|
|
150
|
+
* @returns The remaining tonics you can make
|
|
151
|
+
*/
|
|
152
|
+
export function tonicsLeft() {
|
|
153
|
+
return clamp(3 - get("_dnaPotionsMade"), 0, 3);
|
|
154
|
+
}
|
|
@@ -5,6 +5,8 @@ export declare const Mayo: {
|
|
|
5
5
|
zapine: Item;
|
|
6
6
|
flex: Item;
|
|
7
7
|
};
|
|
8
|
+
export declare function installed(): boolean;
|
|
9
|
+
export declare function have(): boolean;
|
|
8
10
|
/**
|
|
9
11
|
* Sets mayo minder to a particular mayo, and ensures you have enough of it.
|
|
10
12
|
* @param mayo Mayo to use
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "core-js/modules/es.object.values";
|
|
2
2
|
import { buy, getWorkshed, retrieveItem, toInt, use } from "kolmafia";
|
|
3
|
-
import { have } from "../../lib";
|
|
3
|
+
import { have as haveItem } from "../../lib";
|
|
4
4
|
import logger from "../../logger";
|
|
5
5
|
import { get, withChoice } from "../../property";
|
|
6
6
|
import { $item } from "../../template-string";
|
|
@@ -10,6 +10,12 @@ export const Mayo = {
|
|
|
10
10
|
zapine: $item `Mayozapine`,
|
|
11
11
|
flex: $item `Mayoflex`,
|
|
12
12
|
};
|
|
13
|
+
export function installed() {
|
|
14
|
+
return getWorkshed() === $item `portable Mayo Clinic`;
|
|
15
|
+
}
|
|
16
|
+
export function have() {
|
|
17
|
+
return haveItem($item `portable Mayo Clinic`) || installed();
|
|
18
|
+
}
|
|
13
19
|
/**
|
|
14
20
|
* Sets mayo minder to a particular mayo, and ensures you have enough of it.
|
|
15
21
|
* @param mayo Mayo to use
|
|
@@ -27,7 +33,7 @@ export function setMayoMinder(mayo, quantity = 1) {
|
|
|
27
33
|
return false;
|
|
28
34
|
}
|
|
29
35
|
retrieveItem(quantity, mayo);
|
|
30
|
-
if (!
|
|
36
|
+
if (!haveItem($item `Mayo Minder™`))
|
|
31
37
|
buy($item `Mayo Minder™`);
|
|
32
38
|
if (get("mayoMinderSetting") !== mayo.name) {
|
|
33
39
|
withChoice(1076, toInt(mayo) - 8260, () => use($item `Mayo Minder™`));
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fill your Asdon Martin to the given fuel level in the cheapest way possible
|
|
3
|
+
* @param targetUnits Fuel level to attempt to reach.
|
|
4
|
+
* @returns Whether we succeeded at filling to the target fuel level.
|
|
5
|
+
*/
|
|
6
|
+
export declare function fillTo(targetUnits: number): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Object consisting of the various Asdon driving styles
|
|
9
|
+
*/
|
|
10
|
+
export declare const Driving: {
|
|
11
|
+
Obnoxiously: Effect;
|
|
12
|
+
Stealthily: Effect;
|
|
13
|
+
Wastefully: Effect;
|
|
14
|
+
Safely: Effect;
|
|
15
|
+
Recklessly: Effect;
|
|
16
|
+
Intimidatingly: Effect;
|
|
17
|
+
Quickly: Effect;
|
|
18
|
+
Observantly: Effect;
|
|
19
|
+
Waterproofly: Effect;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Attempt to drive with a particular style for a particular number of turns
|
|
23
|
+
* @param style The driving style to use
|
|
24
|
+
* @param turns The number of turns to attempt to get
|
|
25
|
+
* @returns Whether we have at least as many turns as requested of said driving style.
|
|
26
|
+
*/
|
|
27
|
+
export declare function drive(style: Effect, turns?: number): boolean;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { cliExecute, getFuel, haveEffect, historicalPrice, isNpcItem, mallPrice, retrieveItem, toInt, visitUrl, } from "kolmafia";
|
|
2
|
+
import { getAverageAdventures } from "../../lib";
|
|
3
|
+
import { $effect, $items } from "../../template-string";
|
|
4
|
+
const fuelSkiplist = $items `cup of "tea", thermos of "whiskey", Lucky Lindy, Bee's Knees, Sockdollager, Ish Kabibble, Hot Socks, Phonus Balonus, Flivver, Sloppy Jalopy, glass of "milk"`;
|
|
5
|
+
function price(item) {
|
|
6
|
+
return historicalPrice(item) === 0 ? mallPrice(item) : historicalPrice(item);
|
|
7
|
+
}
|
|
8
|
+
function calculateFuelEfficiency(it, targetUnits) {
|
|
9
|
+
const units = getAverageAdventures(it);
|
|
10
|
+
return price(it) / Math.min(targetUnits, units);
|
|
11
|
+
}
|
|
12
|
+
function isFuelItem(it) {
|
|
13
|
+
return (!isNpcItem(it) &&
|
|
14
|
+
it.fullness + it.inebriety > 0 &&
|
|
15
|
+
getAverageAdventures(it) > 0 &&
|
|
16
|
+
it.tradeable &&
|
|
17
|
+
it.discardable &&
|
|
18
|
+
!fuelSkiplist.includes(it));
|
|
19
|
+
}
|
|
20
|
+
const potentialFuel = $items ``.filter(isFuelItem);
|
|
21
|
+
function getBestFuel(targetUnits) {
|
|
22
|
+
const key1 = (item) => -getAverageAdventures(item);
|
|
23
|
+
const key2 = (item) => calculateFuelEfficiency(item, targetUnits);
|
|
24
|
+
potentialFuel.sort((x, y) => key1(x) - key1(y));
|
|
25
|
+
potentialFuel.sort((x, y) => key2(x) - key2(y));
|
|
26
|
+
return potentialFuel[0];
|
|
27
|
+
}
|
|
28
|
+
function insertFuel(it, quantity = 1) {
|
|
29
|
+
const result = visitUrl(`campground.php?action=fuelconvertor&pwd&qty=${quantity}&iid=${toInt(it)}&go=Convert%21`);
|
|
30
|
+
return result.includes("The display updates with a");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fill your Asdon Martin to the given fuel level in the cheapest way possible
|
|
34
|
+
* @param targetUnits Fuel level to attempt to reach.
|
|
35
|
+
* @returns Whether we succeeded at filling to the target fuel level.
|
|
36
|
+
*/
|
|
37
|
+
export function fillTo(targetUnits) {
|
|
38
|
+
while (getFuel() < targetUnits) {
|
|
39
|
+
const remaining = targetUnits - getFuel();
|
|
40
|
+
const fuel = getBestFuel(remaining);
|
|
41
|
+
const count = Math.ceil(targetUnits / getAverageAdventures(fuel));
|
|
42
|
+
retrieveItem(count, fuel);
|
|
43
|
+
if (!insertFuel(fuel, count)) {
|
|
44
|
+
throw new Error("Failed to fuel Asdon Martin.");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return getFuel() >= targetUnits;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Object consisting of the various Asdon driving styles
|
|
51
|
+
*/
|
|
52
|
+
export const Driving = {
|
|
53
|
+
Obnoxiously: $effect `Driving Obnoxiously`,
|
|
54
|
+
Stealthily: $effect `Driving Stealthily`,
|
|
55
|
+
Wastefully: $effect `Driving Wastefully`,
|
|
56
|
+
Safely: $effect `Driving Safely`,
|
|
57
|
+
Recklessly: $effect `Driving Recklessly`,
|
|
58
|
+
Intimidatingly: $effect `Driving Intimidatingly`,
|
|
59
|
+
Quickly: $effect `Driving Quickly`,
|
|
60
|
+
Observantly: $effect `Driving Observantly`,
|
|
61
|
+
Waterproofly: $effect `Driving Waterproofly`,
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Attempt to drive with a particular style for a particular number of turns
|
|
65
|
+
* @param style The driving style to use
|
|
66
|
+
* @param turns The number of turns to attempt to get
|
|
67
|
+
* @returns Whether we have at least as many turns as requested of said driving style.
|
|
68
|
+
*/
|
|
69
|
+
export function drive(style, turns = 1) {
|
|
70
|
+
if (!Object.values(Driving).includes(style))
|
|
71
|
+
return false;
|
|
72
|
+
if (haveEffect(style) >= turns)
|
|
73
|
+
return true;
|
|
74
|
+
const fuelNeeded = 37 * Math.ceil((turns - haveEffect(style)) / 30);
|
|
75
|
+
fillTo(fuelNeeded);
|
|
76
|
+
while (getFuel() >= 37 && haveEffect(style) < turns) {
|
|
77
|
+
cliExecute(`asdonmartin drive ${style.name.replace("Driving ", "")}`);
|
|
78
|
+
}
|
|
79
|
+
return haveEffect(style) >= turns;
|
|
80
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cliExecute, haveFamiliar, myFamiliar,
|
|
1
|
+
import { cliExecute, haveFamiliar, myFamiliar, useFamiliar } from "kolmafia";
|
|
2
2
|
import { get } from "../../property";
|
|
3
3
|
const familiar = Familiar.get("Red-Nosed Snapper");
|
|
4
4
|
/**
|
|
@@ -44,8 +44,7 @@ export function have() {
|
|
|
44
44
|
* @returns Tracked phylum, or null if no phylum tracked.
|
|
45
45
|
*/
|
|
46
46
|
export function getTrackedPhylum() {
|
|
47
|
-
|
|
48
|
-
return phylum === Phylum.get("none") ? null : phylum;
|
|
47
|
+
return get("redSnapperPhylum");
|
|
49
48
|
}
|
|
50
49
|
/**
|
|
51
50
|
* Set snapper tracking to a certain phylum.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import * as AsdonMartin from "./2017/AsdonMartin";
|
|
1
2
|
import * as Bandersnatch from "./2009/Bandersnatch";
|
|
2
3
|
import * as BeachComb from "./2019/BeachComb";
|
|
3
4
|
import * as ChateauMantegna from "./2015/ChateauMantegna";
|
|
4
5
|
import * as CrownOfThrones from "./2010/CrownOfThrones";
|
|
6
|
+
import * as DNALab from "./2014/DNALab";
|
|
5
7
|
import * as FloristFriar from "./2013/Florist";
|
|
6
8
|
import * as Guzzlr from "./2020/Guzzlr";
|
|
7
9
|
import * as MayoClinic from "./2015/MayoClinic";
|
|
@@ -14,6 +16,6 @@ import * as SpookyPutty from "./2009/SpookyPutty";
|
|
|
14
16
|
import * as TunnelOfLove from "./2017/TunnelOfLove";
|
|
15
17
|
import * as WinterGarden from "./2014/WinterGarden";
|
|
16
18
|
import * as Witchess from "./2016/Witchess";
|
|
17
|
-
export { Bandersnatch, BeachComb, ChateauMantegna, CrownOfThrones, FloristFriar, Guzzlr, MayoClinic, ObtuseAngel, RainDoh, SongBoom, SourceTerminal, Snapper, SpookyPutty, TunnelOfLove, WinterGarden, Witchess, };
|
|
19
|
+
export { AsdonMartin, Bandersnatch, BeachComb, ChateauMantegna, CrownOfThrones, DNALab, FloristFriar, Guzzlr, MayoClinic, ObtuseAngel, RainDoh, SongBoom, SourceTerminal, Snapper, SpookyPutty, TunnelOfLove, WinterGarden, Witchess, };
|
|
18
20
|
export * from "./putty-likes";
|
|
19
21
|
export * from "./LibramSummon";
|
package/dist/resources/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import * as AsdonMartin from "./2017/AsdonMartin";
|
|
1
2
|
import * as Bandersnatch from "./2009/Bandersnatch";
|
|
2
3
|
import * as BeachComb from "./2019/BeachComb";
|
|
3
4
|
import * as ChateauMantegna from "./2015/ChateauMantegna";
|
|
4
5
|
import * as CrownOfThrones from "./2010/CrownOfThrones";
|
|
6
|
+
import * as DNALab from "./2014/DNALab";
|
|
5
7
|
import * as FloristFriar from "./2013/Florist";
|
|
6
8
|
import * as Guzzlr from "./2020/Guzzlr";
|
|
7
9
|
import * as MayoClinic from "./2015/MayoClinic";
|
|
@@ -14,6 +16,6 @@ import * as SpookyPutty from "./2009/SpookyPutty";
|
|
|
14
16
|
import * as TunnelOfLove from "./2017/TunnelOfLove";
|
|
15
17
|
import * as WinterGarden from "./2014/WinterGarden";
|
|
16
18
|
import * as Witchess from "./2016/Witchess";
|
|
17
|
-
export { Bandersnatch, BeachComb, ChateauMantegna, CrownOfThrones, FloristFriar, Guzzlr, MayoClinic, ObtuseAngel, RainDoh, SongBoom, SourceTerminal, Snapper, SpookyPutty, TunnelOfLove, WinterGarden, Witchess, };
|
|
19
|
+
export { AsdonMartin, Bandersnatch, BeachComb, ChateauMantegna, CrownOfThrones, DNALab, FloristFriar, Guzzlr, MayoClinic, ObtuseAngel, RainDoh, SongBoom, SourceTerminal, Snapper, SpookyPutty, TunnelOfLove, WinterGarden, Witchess, };
|
|
18
20
|
export * from "./putty-likes";
|
|
19
21
|
export * from "./LibramSummon";
|