libram 0.9.5 → 0.9.7

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.
@@ -0,0 +1,128 @@
1
+ import { visitUrl, runChoice, handlingChoice } from "kolmafia";
2
+ import { questStep } from "../../lib.js";
3
+ import { Requirement } from "../../maximize.js";
4
+ import { get } from "../../property.js";
5
+ import { $location, $item } from "../../template-string.js";
6
+ class ConspiracyQuest {
7
+ prop;
8
+ reward;
9
+ complete;
10
+ /** Location in which quest is completed */
11
+ location;
12
+ /** Requirements to complete quest */
13
+ requirements;
14
+ constructor(prop, reward, complete, location, requirements) {
15
+ this.prop = prop;
16
+ this.reward = reward;
17
+ this.complete = complete;
18
+ this.location = location;
19
+ this.requirements = requirements ?? new Requirement([], {});
20
+ }
21
+ isOneTime() {
22
+ return this.reward !== 30;
23
+ }
24
+ isStarted() {
25
+ return questStep(this.prop) >= 0;
26
+ }
27
+ isFinished() {
28
+ return questStep(this.prop) === 999;
29
+ }
30
+ isActive() {
31
+ return this.isStarted() && !this.isFinished();
32
+ }
33
+ isReadyToTurnIn() {
34
+ return questStep(this.prop) === this.complete;
35
+ }
36
+ }
37
+ export const QUESTS = [
38
+ new ConspiracyQuest("questESpClipper", 20, 1, $location `The Mansion of Dr. Weirdeaux`),
39
+ new ConspiracyQuest("questESpEVE", 30, 1, $location `The Secret Government Laboratory`),
40
+ new ConspiracyQuest("questESpFakeMedium", 30, 1, $location `The Secret Government Laboratory`),
41
+ new ConspiracyQuest("questESpGore", 20, 2, $location `The Secret Government Laboratory`, new Requirement(["Meat Drop"], { forceEquip: [$item `gore bucket`] })),
42
+ new ConspiracyQuest("questESpJunglePun", 20, 2, $location `The Deep Dark Jungle`, new Requirement(["Mysticality"], {
43
+ forceEquip: [$item `encrypted micro-cassette recorder`],
44
+ })),
45
+ new ConspiracyQuest("questESpOutOfOrder", 30, 2, $location `The Deep Dark Jungle`, new Requirement(["Initiative"], {
46
+ forceEquip: [$item `GPS-tracking wristwatch`],
47
+ })),
48
+ new ConspiracyQuest("questESpSerum", 30, 1, $location `The Mansion of Dr. Weirdeaux`),
49
+ new ConspiracyQuest("questESpSmokes", 30, 1, $location `The Deep Dark Jungle`),
50
+ ];
51
+ /**
52
+ * @returns Whether all one-time quests are completed
53
+ */
54
+ export function completedOneTimeQuests() {
55
+ return QUESTS.filter((q) => q.isOneTime()).every((q) => q.isFinished());
56
+ }
57
+ /**
58
+ * Activate a protocol in the bunker
59
+ * @param protocol Protocol to activate
60
+ */
61
+ export function activateProtocol(protocol) {
62
+ visitUrl("place.php?whichplace=airport_spooky_bunker&action=si_controlpanel");
63
+ runChoice(protocol);
64
+ }
65
+ /**
66
+ * @returns Current omega charge level
67
+ */
68
+ export function getOmega() {
69
+ return get("controlPanelOmega");
70
+ }
71
+ /**
72
+ * Activate Omega Protocol
73
+ * @param completeAllQuests Abort if player has not completed all one-time quests
74
+ */
75
+ export function activateOmega(completeAllQuests = false) {
76
+ if (get("_controlPanelUsed")) {
77
+ return;
78
+ }
79
+ for (let i = 1; i <= 9; i++) {
80
+ const active = get(`controlPanel${i}`, false);
81
+ if (!active) {
82
+ activateProtocol(i);
83
+ break;
84
+ }
85
+ }
86
+ if (getOmega() < 99 || (!completedOneTimeQuests() && completeAllQuests))
87
+ return;
88
+ activateProtocol(1);
89
+ activateProtocol(10);
90
+ }
91
+ function visitRadio() {
92
+ return visitUrl("place.php?whichplace=airport_spooky&action=airport2_radio");
93
+ }
94
+ /**
95
+ * @param accept Whether to accept a quest if one is not currently active
96
+ * @returns Returns the current quest or null if no quest is active
97
+ */
98
+ export function getQuest(accept = false) {
99
+ const active = QUESTS.find((q) => q.isActive());
100
+ if (active)
101
+ return active;
102
+ if (!accept)
103
+ return null;
104
+ // Sometimes we need to hit the radio a few times to successfully parse the quest
105
+ for (let i = 0; i < 11; i++) {
106
+ const page = visitRadio();
107
+ if (!handlingChoice())
108
+ return null;
109
+ if (page.includes("try again tomorrow"))
110
+ return null;
111
+ const quest = get("_questESp");
112
+ if (quest !== "")
113
+ return QUESTS.find((q) => q.prop === quest) ?? null;
114
+ }
115
+ return null;
116
+ }
117
+ /**
118
+ * Turn in the current quest
119
+ * @returns Success of turning in the quest
120
+ */
121
+ export function turnInQuest() {
122
+ const quest = getQuest();
123
+ if (!quest?.isReadyToTurnIn())
124
+ return false;
125
+ visitRadio();
126
+ runChoice(1);
127
+ return quest.isFinished();
128
+ }
@@ -129,7 +129,7 @@ export function acceptQuest(priority) {
129
129
  jobs.push(quest.name);
130
130
  });
131
131
  const priorityNum = typeof priority === "string"
132
- ? quests.find((q) => q.name === priority)?.priority ?? 7
132
+ ? (quests.find((q) => q.name === priority)?.priority ?? 7)
133
133
  : priority;
134
134
  const availableJobs = [];
135
135
  const jobChoices = [["none", 999]];
@@ -162,8 +162,10 @@ export function fillTo(targetUnits) {
162
162
  }
163
163
  if (!canInteract())
164
164
  retrieveItem(count, bestFuel);
165
+ else if (ceiling)
166
+ buy(count, bestFuel, ceiling);
165
167
  else
166
- ceiling ? buy(count, bestFuel, ceiling) : buy(count, bestFuel);
168
+ buy(count, bestFuel);
167
169
  if (!insertFuel(bestFuel, Math.min(itemAmount(bestFuel), count))) {
168
170
  throw new Error("Failed to fuel Asdon Martin.");
169
171
  }
@@ -6,7 +6,6 @@ import { $item } from "../../template-string.js";
6
6
  */
7
7
  export function have() {
8
8
  return get("spacegateAlways");
9
- ("");
10
9
  }
11
10
  /**
12
11
  * Refreshes the data from the Spacegate Terminal to determine current Spacegate Status
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @returns Whether you `have` the Pocket Professor
3
+ */
4
+ export declare function have(): boolean;
5
+ /**
6
+ * @returns Whether or not you're currently able to `Deliver your Thesis`
7
+ */
8
+ export declare function canThesis(): boolean;
9
+ /**
10
+ * Calculate the total number of lectures available to you given a particular familiar weight and chip-equipped status
11
+ * @param weight The weight to calculate at--defaults to your current total familiar weight
12
+ * @param includeChip Whether or not to include the memory chip--defaults to whether or not it's currently equipped
13
+ * @returns The total number of lectures you're able to deliver, including ones you've already delivered today
14
+ */
15
+ export declare function totalAvailableLectures(weight?: number, includeChip?: boolean): number;
16
+ /**
17
+ * @returns The number of Pocket Professor lectures you've delivered today
18
+ */
19
+ export declare function lecturesDelivered(): number;
20
+ /**
21
+ * Calculate the number of unused lectures available to you given a particular familiar weight and chip-equipped status
22
+ * @param weight The weight to calculate at--defaults to your current total familiar weight
23
+ * @param includeChip Whether or not to include the memory chip--defaults to whether or not it's currently equipped
24
+ * @returns The number of lectures you're able to deliver, accounting for any you've already delivered today
25
+ */
26
+ export declare function currentlyAvailableLectures(weight?: number, includeChip?: boolean): number;
@@ -0,0 +1,41 @@
1
+ import { haveEquipped } from "kolmafia";
2
+ import { have as have_, totalFamiliarWeight } from "../../lib.js";
3
+ import { get } from "../../property.js";
4
+ import { $familiar, $item } from "../../template-string.js";
5
+ const familiar = $familiar `Pocket Professor`;
6
+ /**
7
+ * @returns Whether you `have` the Pocket Professor
8
+ */
9
+ export function have() {
10
+ return have_(familiar);
11
+ }
12
+ /**
13
+ * @returns Whether or not you're currently able to `Deliver your Thesis`
14
+ */
15
+ export function canThesis() {
16
+ return have() && familiar.experience >= 400 && !get("_thesisDelivered");
17
+ }
18
+ /**
19
+ * Calculate the total number of lectures available to you given a particular familiar weight and chip-equipped status
20
+ * @param weight The weight to calculate at--defaults to your current total familiar weight
21
+ * @param includeChip Whether or not to include the memory chip--defaults to whether or not it's currently equipped
22
+ * @returns The total number of lectures you're able to deliver, including ones you've already delivered today
23
+ */
24
+ export function totalAvailableLectures(weight = totalFamiliarWeight(familiar), includeChip = haveEquipped($item `Pocket Professor memory chip`)) {
25
+ return (includeChip ? 2 : 0) + Math.floor(Math.sqrt(weight - 1));
26
+ }
27
+ /**
28
+ * @returns The number of Pocket Professor lectures you've delivered today
29
+ */
30
+ export function lecturesDelivered() {
31
+ return get("_pocketProfessorLectures");
32
+ }
33
+ /**
34
+ * Calculate the number of unused lectures available to you given a particular familiar weight and chip-equipped status
35
+ * @param weight The weight to calculate at--defaults to your current total familiar weight
36
+ * @param includeChip Whether or not to include the memory chip--defaults to whether or not it's currently equipped
37
+ * @returns The number of lectures you're able to deliver, accounting for any you've already delivered today
38
+ */
39
+ export function currentlyAvailableLectures(weight = totalFamiliarWeight(familiar), includeChip = haveEquipped($item `Pocket Professor memory chip`)) {
40
+ return totalAvailableLectures(weight, includeChip) - lecturesDelivered();
41
+ }
@@ -23,7 +23,7 @@ declare const Heroes: {
23
23
  };
24
24
  type Hero = keyof typeof Heroes;
25
25
  type Mode = "hold" | "thrill" | "kiss" | "kill";
26
- export declare const currentHero: () => "vampire" | "heck" | "robot";
26
+ export declare const currentHero: () => Hero;
27
27
  export declare const currentMode: () => Mode;
28
28
  /**
29
29
  * Tunes retro cape to a given setting
@@ -1,4 +1,5 @@
1
1
  import { Effect } from "kolmafia";
2
+ import { Tuple } from "../../utils.js";
2
3
  /**
3
4
  * Returns whether the player owns an unpackaged Daylight Shavings Helmet, and it's available in either the inventory or other zones as determined by autoSatisfy settings.
4
5
  *
@@ -22,9 +23,9 @@ export declare function buffAvailable(): boolean;
22
23
  * Calculates and returns the cycle of buffs that the hat should cycle through.
23
24
  *
24
25
  * @param playerclass The class to generate a cycle for
25
- * @returns An ordered array consisting of the cycle for this class. The first element of the array will be the first buff a player should expect to get in a given ascension.
26
+ * @returns An ordered 11-tuple consisting of the cycle for this class. The first element of the array will be the first buff a player should expect to get in a given ascension.
26
27
  */
27
- export declare function buffCycle(playerclass?: import("kolmafia").Class): Effect[];
28
+ export declare function buffCycle(playerclass?: import("kolmafia").Class): Tuple<Effect, 11>;
28
29
  /**
29
30
  * Returns the next buff we expect to get from the shaving hat.
30
31
  *
@@ -1,7 +1,8 @@
1
- import { myClass, toEffect } from "kolmafia";
1
+ import { Effect, myClass, toEffect } from "kolmafia";
2
2
  import { have as haveItem } from "../../lib.js";
3
3
  import { get } from "../../property.js";
4
4
  import { $effects, $item } from "../../template-string.js";
5
+ import { tuple } from "../../utils.js";
5
6
  const helmet = $item `Daylight Shavings Helmet`;
6
7
  /**
7
8
  * Returns whether the player owns an unpackaged Daylight Shavings Helmet, and it's available in either the inventory or other zones as determined by autoSatisfy settings.
@@ -32,19 +33,19 @@ export function buffAvailable() {
32
33
  * Calculates and returns the cycle of buffs that the hat should cycle through.
33
34
  *
34
35
  * @param playerclass The class to generate a cycle for
35
- * @returns An ordered array consisting of the cycle for this class. The first element of the array will be the first buff a player should expect to get in a given ascension.
36
+ * @returns An ordered 11-tuple consisting of the cycle for this class. The first element of the array will be the first buff a player should expect to get in a given ascension.
36
37
  */
37
38
  export function buffCycle(playerclass = myClass()) {
39
+ const cycle = tuple(Effect.none, Effect.none, Effect.none, Effect.none, Effect.none, Effect.none, Effect.none, Effect.none, Effect.none, Effect.none, Effect.none);
38
40
  if (playerclass.id <= 0)
39
- return [];
40
- const returnValue = [];
41
+ return cycle;
41
42
  const id = playerclass.id;
42
43
  const seed = id > 6 ? (id % 6) + 1 : id;
43
44
  for (let i = 1; i < 12; i++) {
44
45
  const index = (i * seed) % 11;
45
- returnValue.push(buffs[index]);
46
+ cycle[i - 1] = buffs[index];
46
47
  }
47
- return returnValue;
48
+ return cycle;
48
49
  }
49
50
  /**
50
51
  * Returns the next buff we expect to get from the shaving hat.
@@ -61,7 +61,7 @@ export declare const RESONANCES: Readonly<{
61
61
  "chair yam2 yam3 clock": Effect;
62
62
  "yam1 yam2 cheese clock": Effect;
63
63
  }>;
64
- export declare const RESONANCE_KEYS: ("sword yam2 eyepatch explosion" | "yam1 meat cheese yam4" | "yam1 meat eyepatch yam4" | "yam1 lightning yam3 clock" | "yam1 yam2 yam3 explosion" | "yam1 yam2 cheese clock" | "eye yam2 eyepatch yam4" | "chair yam2 yam3 clock" | "fur lightning eyepatch yam4" | "fur yam2 wall yam4" | "vessel yam2 cheese explosion")[];
64
+ export declare const RESONANCE_KEYS: (keyof typeof RESONANCES)[];
65
65
  /**
66
66
  * Find the combination needed to get a particular resonance
67
67
  * @param target The Item or Effect granted by the resonance
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @returns Whether you `have` the tearaway pants
3
+ */
4
+ export declare function have(): boolean;
5
+ /**
6
+ * Calculate the chance of getting adventures from a fight against plants
7
+ * @param advs The number of adventures to calculate the probability at; defaults to the current value
8
+ * @returns The likelihood of getting an adventure from ripping off your pants against plants
9
+ */
10
+ export declare function plantsAdventureChance(advs?: number): number;
11
+ /**
12
+ * Calculate the expected total number of pant-plant adventures you'll gain over a period
13
+ * @param turnsToSpend The total number of plant-combats you expect to spend
14
+ * @param startingAdvs The number of pant-plants adventures to start with--defaults to the current value
15
+ * @returns The expected total number of adventures to gain over the period
16
+ */
17
+ export declare function expectedTotalAdventures(turnsToSpend: number, startingAdvs?: number): number;
18
+ /**
19
+ * Attempt to unlock the moxie guild--for free--using these incredible pants
20
+ * @returns Whether we've successfully unlocked the moxie guild
21
+ */
22
+ export declare function unlockGuild(): boolean;
@@ -0,0 +1,52 @@
1
+ import { myClass, cliExecute, equip, visitUrl } from "kolmafia";
2
+ import { have as have_, questStep } from "../../lib.js";
3
+ import { get } from "../../property.js";
4
+ import { $classes, $item, $slot } from "../../template-string.js";
5
+ const item = $item `tearaway pants`;
6
+ /**
7
+ * @returns Whether you `have` the tearaway pants
8
+ */
9
+ export function have() {
10
+ return have_(item);
11
+ }
12
+ /**
13
+ * Calculate the chance of getting adventures from a fight against plants
14
+ * @param advs The number of adventures to calculate the probability at; defaults to the current value
15
+ * @returns The likelihood of getting an adventure from ripping off your pants against plants
16
+ */
17
+ export function plantsAdventureChance(advs = get("_tearawayPantsAdvs")) {
18
+ return 1 / (2 + advs);
19
+ }
20
+ /**
21
+ * Calculate the expected total number of pant-plant adventures you'll gain over a period
22
+ * @param turnsToSpend The total number of plant-combats you expect to spend
23
+ * @param startingAdvs The number of pant-plants adventures to start with--defaults to the current value
24
+ * @returns The expected total number of adventures to gain over the period
25
+ */
26
+ export function expectedTotalAdventures(turnsToSpend, startingAdvs = get("_tearawayPantsAdvs")) {
27
+ return ((1 -
28
+ 2 * startingAdvs +
29
+ Math.sqrt(4 * startingAdvs ** 2 - 4 * startingAdvs + 1 + 8 * turnsToSpend)) /
30
+ 2);
31
+ }
32
+ /**
33
+ * Attempt to unlock the moxie guild--for free--using these incredible pants
34
+ * @returns Whether we've successfully unlocked the moxie guild
35
+ */
36
+ export function unlockGuild() {
37
+ if (!$classes `Disco Bandit, Accordion Thief`.includes(myClass()))
38
+ return false;
39
+ if (questStep("questG08Moxie") >= 999)
40
+ return true;
41
+ if (!have())
42
+ return false;
43
+ try {
44
+ cliExecute("checkpoint");
45
+ equip($slot `pants`, item);
46
+ visitUrl("guild.php?place=challenge");
47
+ }
48
+ finally {
49
+ cliExecute("outfit checkpoint");
50
+ }
51
+ return questStep("questG08Moxie") >= 999;
52
+ }
@@ -9,6 +9,7 @@ import * as RainDoh from "./2012/RainDoh.js";
9
9
  import * as ReagnimatedGnome from "./2012/ReagnimatedGnome.js";
10
10
  import * as FloristFriar from "./2013/Florist.js";
11
11
  import * as JungMan from "./2013/JungMan.js";
12
+ import * as ConspiracyIsland from "./2014/ConspiracyIsland.js";
12
13
  import * as CrimboShrub from "./2014/CrimboShrub.js";
13
14
  import * as DNALab from "./2014/DNALab.js";
14
15
  import * as WinterGarden from "./2014/WinterGarden.js";
@@ -31,6 +32,7 @@ import * as Latte from "./2018/LatteLoversMembersMug.js";
31
32
  import * as SongBoom from "./2018/SongBoom.js";
32
33
  import * as BeachComb from "./2019/BeachComb.js";
33
34
  import * as CampAway from "./2019/CampAway.js";
35
+ import * as PocketProfessor from "./2019/PocketProfessor.js";
34
36
  import * as Snapper from "./2019/Snapper.js";
35
37
  import * as Cartography from "./2020/Cartography.js";
36
38
  import * as Guzzlr from "./2020/Guzzlr.js";
@@ -50,6 +52,7 @@ import * as CursedMonkeyPaw from "./2023/CursedMonkeyPaw.js";
50
52
  import * as AprilingBandHelmet from "./2024/AprilingBandHelmet.js";
51
53
  import * as ChestMimic from "./2024/ChestMimic.js";
52
54
  import * as MayamCalendar from "./2024/MayamCalendar.js";
53
- export { AprilingBandHelmet, AugustScepter, AutumnAton, AsdonMartin, Bandersnatch, BarrelShrine, BeachComb, BurningLeaves, CampAway, Cartography, ChateauMantegna, ChestMimic, CinchoDeMayo, ClosedCircuitPayphone, CombatLoversLocket, CrimboShrub, CrownOfThrones, CrystalBall, CursedMonkeyPaw, DaylightShavings, DeckOfEveryCard, Dinseylandfill, DNALab, FloristFriar, GingerBread, GreyGoose, Guzzlr, Horsery, JuneCleaver, JungMan, Latte, LookingGlass, MayamCalendar, MayoClinic, MummingTrunk, ObtuseAngel, Pantogram, RainDoh, ReagnimatedGnome, RetroCape, Robortender, Snapper, SongBoom, SourceTerminal, Spacegate, SpookyPutty, Stickers, StompingBoots, TrainSet, TunnelOfLove, WinterGarden, Witchess, };
55
+ import * as TearawayPants from "./2024/TearawayPants.js";
56
+ export { AprilingBandHelmet, AugustScepter, AutumnAton, AsdonMartin, Bandersnatch, BarrelShrine, BeachComb, BurningLeaves, CampAway, Cartography, ChateauMantegna, ChestMimic, CinchoDeMayo, ClosedCircuitPayphone, CombatLoversLocket, ConspiracyIsland, CrimboShrub, CrownOfThrones, CrystalBall, CursedMonkeyPaw, DaylightShavings, DeckOfEveryCard, Dinseylandfill, DNALab, FloristFriar, GingerBread, GreyGoose, Guzzlr, Horsery, JuneCleaver, JungMan, Latte, LookingGlass, MayamCalendar, MayoClinic, MummingTrunk, ObtuseAngel, Pantogram, PocketProfessor, RainDoh, ReagnimatedGnome, RetroCape, Robortender, Snapper, SongBoom, SourceTerminal, Spacegate, SpookyPutty, Stickers, StompingBoots, TearawayPants, TrainSet, TunnelOfLove, WinterGarden, Witchess, };
54
57
  export * from "./putty-likes.js";
55
58
  export * from "./LibramSummon.js";
@@ -9,6 +9,7 @@ import * as RainDoh from "./2012/RainDoh.js";
9
9
  import * as ReagnimatedGnome from "./2012/ReagnimatedGnome.js";
10
10
  import * as FloristFriar from "./2013/Florist.js";
11
11
  import * as JungMan from "./2013/JungMan.js";
12
+ import * as ConspiracyIsland from "./2014/ConspiracyIsland.js";
12
13
  import * as CrimboShrub from "./2014/CrimboShrub.js";
13
14
  import * as DNALab from "./2014/DNALab.js";
14
15
  import * as WinterGarden from "./2014/WinterGarden.js";
@@ -31,6 +32,7 @@ import * as Latte from "./2018/LatteLoversMembersMug.js";
31
32
  import * as SongBoom from "./2018/SongBoom.js";
32
33
  import * as BeachComb from "./2019/BeachComb.js";
33
34
  import * as CampAway from "./2019/CampAway.js";
35
+ import * as PocketProfessor from "./2019/PocketProfessor.js";
34
36
  import * as Snapper from "./2019/Snapper.js";
35
37
  import * as Cartography from "./2020/Cartography.js";
36
38
  import * as Guzzlr from "./2020/Guzzlr.js";
@@ -50,6 +52,7 @@ import * as CursedMonkeyPaw from "./2023/CursedMonkeyPaw.js";
50
52
  import * as AprilingBandHelmet from "./2024/AprilingBandHelmet.js";
51
53
  import * as ChestMimic from "./2024/ChestMimic.js";
52
54
  import * as MayamCalendar from "./2024/MayamCalendar.js";
53
- export { AprilingBandHelmet, AugustScepter, AutumnAton, AsdonMartin, Bandersnatch, BarrelShrine, BeachComb, BurningLeaves, CampAway, Cartography, ChateauMantegna, ChestMimic, CinchoDeMayo, ClosedCircuitPayphone, CombatLoversLocket, CrimboShrub, CrownOfThrones, CrystalBall, CursedMonkeyPaw, DaylightShavings, DeckOfEveryCard, Dinseylandfill, DNALab, FloristFriar, GingerBread, GreyGoose, Guzzlr, Horsery, JuneCleaver, JungMan, Latte, LookingGlass, MayamCalendar, MayoClinic, MummingTrunk, ObtuseAngel, Pantogram, RainDoh, ReagnimatedGnome, RetroCape, Robortender, Snapper, SongBoom, SourceTerminal, Spacegate, SpookyPutty, Stickers, StompingBoots, TrainSet, TunnelOfLove, WinterGarden, Witchess, };
55
+ import * as TearawayPants from "./2024/TearawayPants.js";
56
+ export { AprilingBandHelmet, AugustScepter, AutumnAton, AsdonMartin, Bandersnatch, BarrelShrine, BeachComb, BurningLeaves, CampAway, Cartography, ChateauMantegna, ChestMimic, CinchoDeMayo, ClosedCircuitPayphone, CombatLoversLocket, ConspiracyIsland, CrimboShrub, CrownOfThrones, CrystalBall, CursedMonkeyPaw, DaylightShavings, DeckOfEveryCard, Dinseylandfill, DNALab, FloristFriar, GingerBread, GreyGoose, Guzzlr, Horsery, JuneCleaver, JungMan, Latte, LookingGlass, MayamCalendar, MayoClinic, MummingTrunk, ObtuseAngel, Pantogram, PocketProfessor, RainDoh, ReagnimatedGnome, RetroCape, Robortender, Snapper, SongBoom, SourceTerminal, Spacegate, SpookyPutty, Stickers, StompingBoots, TearawayPants, TrainSet, TunnelOfLove, WinterGarden, Witchess, };
54
57
  export * from "./putty-likes.js";
55
58
  export * from "./LibramSummon.js";
@@ -8,6 +8,7 @@ export declare const $bounty: {
8
8
  (literals: TemplateStringsArray, ...placeholders: string[]): Bounty;
9
9
  cls: typeof MafiaClass & (new () => Bounty);
10
10
  none: Bounty;
11
+ get(name: string): Bounty | null;
11
12
  };
12
13
  /**
13
14
  * A list of Bounties specified by a comma-separated list of names.
@@ -28,6 +29,7 @@ export declare const $class: {
28
29
  (literals: TemplateStringsArray, ...placeholders: string[]): Class;
29
30
  cls: typeof MafiaClass & (new () => Class);
30
31
  none: Class;
32
+ get(name: string): Class | null;
31
33
  };
32
34
  /**
33
35
  * A list of Classes specified by a comma-separated list of names.
@@ -48,6 +50,7 @@ export declare const $coinmaster: {
48
50
  (literals: TemplateStringsArray, ...placeholders: string[]): Coinmaster;
49
51
  cls: typeof MafiaClass & (new () => Coinmaster);
50
52
  none: Coinmaster;
53
+ get(name: string): Coinmaster | null;
51
54
  };
52
55
  /**
53
56
  * A list of Coinmasters specified by a comma-separated list of names.
@@ -68,6 +71,7 @@ export declare const $effect: {
68
71
  (literals: TemplateStringsArray, ...placeholders: string[]): Effect;
69
72
  cls: typeof MafiaClass & (new () => Effect);
70
73
  none: Effect;
74
+ get(name: string): Effect | null;
71
75
  };
72
76
  /**
73
77
  * A list of Effects specified by a comma-separated list of names.
@@ -88,6 +92,7 @@ export declare const $element: {
88
92
  (literals: TemplateStringsArray, ...placeholders: string[]): Element;
89
93
  cls: typeof MafiaClass & (new () => Element);
90
94
  none: Element;
95
+ get(name: string): Element | null;
91
96
  };
92
97
  /**
93
98
  * A list of Elements specified by a comma-separated list of names.
@@ -108,6 +113,7 @@ export declare const $familiar: {
108
113
  (literals: TemplateStringsArray, ...placeholders: string[]): Familiar;
109
114
  cls: typeof MafiaClass & (new () => Familiar);
110
115
  none: Familiar;
116
+ get(name: string): Familiar | null;
111
117
  };
112
118
  /**
113
119
  * A list of Familiars specified by a comma-separated list of names.
@@ -128,6 +134,7 @@ export declare const $item: {
128
134
  (literals: TemplateStringsArray, ...placeholders: string[]): Item;
129
135
  cls: typeof MafiaClass & (new () => Item);
130
136
  none: Item;
137
+ get(name: string): Item | null;
131
138
  };
132
139
  /**
133
140
  * A list of Items specified by a comma-separated list of names.
@@ -148,6 +155,7 @@ export declare const $location: {
148
155
  (literals: TemplateStringsArray, ...placeholders: string[]): Location;
149
156
  cls: typeof MafiaClass & (new () => Location);
150
157
  none: Location;
158
+ get(name: string): Location | null;
151
159
  };
152
160
  /**
153
161
  * A list of Locations specified by a comma-separated list of names.
@@ -168,6 +176,7 @@ export declare const $modifier: {
168
176
  (literals: TemplateStringsArray, ...placeholders: string[]): Modifier;
169
177
  cls: typeof MafiaClass & (new () => Modifier);
170
178
  none: Modifier;
179
+ get(name: string): Modifier | null;
171
180
  };
172
181
  /**
173
182
  * A list of Modifiers specified by a comma-separated list of names.
@@ -188,6 +197,7 @@ export declare const $monster: {
188
197
  (literals: TemplateStringsArray, ...placeholders: string[]): Monster;
189
198
  cls: typeof MafiaClass & (new () => Monster);
190
199
  none: Monster;
200
+ get(name: string): Monster | null;
191
201
  };
192
202
  /**
193
203
  * A list of Monsters specified by a comma-separated list of names.
@@ -199,6 +209,27 @@ export declare const $monsters: {
199
209
  (literals: TemplateStringsArray, ...placeholders: string[]): Monster[];
200
210
  all(): Monster[];
201
211
  };
212
+ /**
213
+ * A Path specified by name.
214
+ *
215
+ * @category In-game constant
216
+ */
217
+ export declare const $path: {
218
+ (literals: TemplateStringsArray, ...placeholders: string[]): Path;
219
+ cls: typeof MafiaClass & (new () => Path);
220
+ none: Path;
221
+ get(name: string): Path | null;
222
+ };
223
+ /**
224
+ * A list of Paths specified by a comma-separated list of names.
225
+ * For a list of all possible Paths, leave the template string blank.
226
+ *
227
+ * @category In-game constant
228
+ */
229
+ export declare const $paths: {
230
+ (literals: TemplateStringsArray, ...placeholders: string[]): Path[];
231
+ all(): Path[];
232
+ };
202
233
  /**
203
234
  * A Phylum specified by name.
204
235
  *
@@ -208,6 +239,7 @@ export declare const $phylum: {
208
239
  (literals: TemplateStringsArray, ...placeholders: string[]): Phylum;
209
240
  cls: typeof MafiaClass & (new () => Phylum);
210
241
  none: Phylum;
242
+ get(name: string): Phylum | null;
211
243
  };
212
244
  /**
213
245
  * A list of Phyla specified by a comma-separated list of names.
@@ -228,6 +260,7 @@ export declare const $servant: {
228
260
  (literals: TemplateStringsArray, ...placeholders: string[]): Servant;
229
261
  cls: typeof MafiaClass & (new () => Servant);
230
262
  none: Servant;
263
+ get(name: string): Servant | null;
231
264
  };
232
265
  /**
233
266
  * A list of Servants specified by a comma-separated list of names.
@@ -248,6 +281,7 @@ export declare const $skill: {
248
281
  (literals: TemplateStringsArray, ...placeholders: string[]): Skill;
249
282
  cls: typeof MafiaClass & (new () => Skill);
250
283
  none: Skill;
284
+ get(name: string): Skill | null;
251
285
  };
252
286
  /**
253
287
  * A list of Skills specified by a comma-separated list of names.
@@ -268,6 +302,7 @@ export declare const $slot: {
268
302
  (literals: TemplateStringsArray, ...placeholders: string[]): Slot;
269
303
  cls: typeof MafiaClass & (new () => Slot);
270
304
  none: Slot;
305
+ get(name: string): Slot | null;
271
306
  };
272
307
  /**
273
308
  * A list of Slots specified by a comma-separated list of names.
@@ -288,6 +323,7 @@ export declare const $stat: {
288
323
  (literals: TemplateStringsArray, ...placeholders: string[]): Stat;
289
324
  cls: typeof MafiaClass & (new () => Stat);
290
325
  none: Stat;
326
+ get(name: string): Stat | null;
291
327
  };
292
328
  /**
293
329
  * A list of Stats specified by a comma-separated list of names.
@@ -308,6 +344,7 @@ export declare const $thrall: {
308
344
  (literals: TemplateStringsArray, ...placeholders: string[]): Thrall;
309
345
  cls: typeof MafiaClass & (new () => Thrall);
310
346
  none: Thrall;
347
+ get(name: string): Thrall | null;
311
348
  };
312
349
  /**
313
350
  * A list of Thralls specified by a comma-separated list of names.
@@ -319,23 +356,3 @@ export declare const $thralls: {
319
356
  (literals: TemplateStringsArray, ...placeholders: string[]): Thrall[];
320
357
  all(): Thrall[];
321
358
  };
322
- /**
323
- * A Path specified by name.
324
- *
325
- * @category In-game constant
326
- */
327
- export declare const $path: {
328
- (literals: TemplateStringsArray, ...placeholders: string[]): Path;
329
- cls: typeof MafiaClass & (new () => Path);
330
- none: Path;
331
- };
332
- /**
333
- * A list of Paths specified by a comma-separated list of names.
334
- * For a list of all possible Paths, leave the template string blank.
335
- *
336
- * @category In-game constant
337
- */
338
- export declare const $paths: {
339
- (literals: TemplateStringsArray, ...placeholders: string[]): Path[];
340
- all(): Path[];
341
- };