1- import { Familiar , familiarWeight , inebrietyLimit , Location , myInebriety } from "kolmafia" ;
1+ import { Familiar , familiarWeight , inebrietyLimit , Location , Monster , myInebriety } from "kolmafia" ;
22import {
33 $familiar ,
44 $item ,
55 $location ,
6- $monsters ,
76 $phylum ,
8- $skill ,
97 clamp ,
108 findLeprechaunMultiplier ,
119 get ,
@@ -19,6 +17,7 @@ import getDropFamiliars from "./dropFamiliars";
1917import getExperienceFamiliars from "./experienceFamiliars" ;
2018import { GeneralFamiliar , timeToMeatify } from "./lib" ;
2119import { meatFamiliar } from "./meatFamiliar" ;
20+ import { barfEncounterRate } from "../lib" ;
2221
2322type MenuOptions = {
2423 canChooseMacro ?: boolean ;
@@ -86,33 +85,12 @@ export function menu(options: MenuOptions = {}): GeneralFamiliar[] {
8685 Snapper . have ( ) &&
8786 Snapper . getTrackedPhylum ( ) === $phylum `dude`
8887 ) {
89- /*
90- # E stands for olfacted Garbage Tourist, A is angry toursit, F is horrible tourist family
91- import itertools
92- def rate(q):
93- m = ["E"] * 5 + ["A"] * 2 + ["F"] * 2
94- options = list(itertools.product(m, m))
95- dude = [m for m in options if (m[0] in ["A", "F"] and m[0] not in q) or (m[1] in ["A", "F"] and m[0] in q and m[0] != "E")]
96- return len(dude) / 81
97- */
98-
99- const dudes = $monsters `angry tourist, horrible tourist family` . filter ( ( m ) =>
100- $location `Barf Mountain` . combatQueue . includes ( `${ m } ` ) ,
101- ) . length ;
102-
103- // if you don't have olfaction, just assume a simple rate calculation
104- const noOlfactRate = 4 / ( 1 + 4 + ( have ( $skill `Gallapagosian Mating Call` ) ? 1 : 0 ) ) ;
105-
106- // when you have olfaction, you
107- // using the above python script, dude rate for number of dudes in queue is:
108- const olfactRate =
109- [
110- 0.44 , // 0 dudes = 44% chance
111- 0.32 , // 1 dude = 32% chance
112- 0.19 , // 2 dudes = 19% chance
113- ] [ dudes ] ?? 0 ;
114-
115- const dudeRate = have ( $skill `Transcendent Olfaction` ) ? olfactRate : noOlfactRate ;
88+ const encounterRate = barfEncounterRate ( { snapper : true , snapperPhylum : $phylum `dude` } ) ;
89+ const dudeRate = [ ...encounterRate . entries ( ) ] . reduce (
90+ ( acc : number , entry : [ Monster , number ] ) =>
91+ entry [ 0 ] . phylum === $phylum `dude` ? entry [ 1 ] + acc : acc ,
92+ 0 ,
93+ ) ;
11694
11795 familiarMenu . push ( {
11896 familiar : $familiar `Red-Nosed Snapper` ,
0 commit comments