From 1bd8356696f7942ef3c76acc4a9ae1e589f49d99 Mon Sep 17 00:00:00 2001 From: horrible little slime <69secret69email69@gmail.com> Date: Fri, 28 Apr 2023 19:02:50 -0400 Subject: [PATCH 1/3] create MacroPredicate and CompoundMacroPredicate types --- src/combat.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/combat.ts b/src/combat.ts index f0fdbbb271..57b56b8764 100644 --- a/src/combat.ts +++ b/src/combat.ts @@ -13,6 +13,7 @@ import { setAutoAttack, Skill, Stat, + StatType, toInt, urlEncode, visitUrl, @@ -98,6 +99,47 @@ function itemOrItemsBallsMacroPredicate( } } +type RawNumberMacroPredicate = + | "times" + | "hpbelow" + | "hppercentbelow" + | "mpbelow" + | "mppercentbelow" + | "didcritical" + | "beenhit" + | "missed" + | "familiarattacked" + | "gotjump" + | "pastround" + | "monsterhpabove" + | "monsterhpbelow" + | "snarfblat"; +type RawStringMacroPredicate = "match" | "monstername" | "happymediumglow"; +type RawNumberOrStringMacroPredicate = + | "haseffect" + | "hascombatitem" + | "monsterid" + | "hasskill"; +type NudeMacroPredicate = + | "sealclubber" + | "turtletamer" + | "pastamancer" + | "sauceror" + | "discobandit" + | "accordionthief" + | `${Lowercase}class`; +export type MacroPredicate = + | `${RawNumberMacroPredicate} ${number}` + | `${RawStringMacroPredicate} ${string}` + | `${RawNumberOrStringMacroPredicate} ${number | string}` + | NudeMacroPredicate; + +export type CompoundMacroPredicate = + | MacroPredicate + | `${CompoundMacroPredicate} || ${CompoundMacroPredicate}` + | `${CompoundMacroPredicate} && ${CompoundMacroPredicate}` + | `(${CompoundMacroPredicate})`; + type PreBALLSPredicate = | string | Monster From 03df3a3cc12a00eb1ae96060d17cdf577bf1cafe Mon Sep 17 00:00:00 2001 From: horrible little slime <69secret69email69@gmail.com> Date: Sat, 29 Apr 2023 19:58:10 -0400 Subject: [PATCH 2/3] add depth argument --- src/combat.ts | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/combat.ts b/src/combat.ts index 57b56b8764..7238e04a91 100644 --- a/src/combat.ts +++ b/src/combat.ts @@ -134,11 +134,23 @@ export type MacroPredicate = | `${RawNumberOrStringMacroPredicate} ${number | string}` | NudeMacroPredicate; -export type CompoundMacroPredicate = - | MacroPredicate - | `${CompoundMacroPredicate} || ${CompoundMacroPredicate}` - | `${CompoundMacroPredicate} && ${CompoundMacroPredicate}` - | `(${CompoundMacroPredicate})`; +type Predicate< + T extends string, + N extends number, + R extends unknown[] +> = R["length"] extends N + ? T + : Predicate< + T | `(${T})` | `${T} || ${T}` | `${T} && ${T}`, + N, + [unknown, ...R] + >; + +export type CompoundMacroPredicate = Predicate< + MacroPredicate, + Depth, + [] +>; type PreBALLSPredicate = | string From 90a3eb00898c87643fc619b51962f71189896f87 Mon Sep 17 00:00:00 2001 From: horrible little slime <69secret69email69@gmail.com> Date: Sat, 29 Apr 2023 21:49:24 -0400 Subject: [PATCH 3/3] add `!` --- src/combat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/combat.ts b/src/combat.ts index 7238e04a91..c40cf2522e 100644 --- a/src/combat.ts +++ b/src/combat.ts @@ -141,7 +141,7 @@ type Predicate< > = R["length"] extends N ? T : Predicate< - T | `(${T})` | `${T} || ${T}` | `${T} && ${T}`, + T | `!(${T})` | `(${T})` | `${T} || ${T}` | `${T} && ${T}`, N, [unknown, ...R] >;