From 7ec7605522c20c557eca7644468acb750792894c Mon Sep 17 00:00:00 2001 From: Shiverwarp Date: Fri, 7 Nov 2025 16:45:37 -0700 Subject: [PATCH 1/2] cast function --- src/resources/2025/BloodCubicZirconia.ts | 29 ++++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/resources/2025/BloodCubicZirconia.ts b/src/resources/2025/BloodCubicZirconia.ts index ecc89db86d..e2db47a8ee 100644 --- a/src/resources/2025/BloodCubicZirconia.ts +++ b/src/resources/2025/BloodCubicZirconia.ts @@ -1,4 +1,4 @@ -import { myBasestat, Skill, Stat, useSkill } from "kolmafia"; +import { cliExecute, equip, myBasestat, Skill, Stat, useSkill } from "kolmafia"; import { $item, $skill, $stat } from "../../template-string.js"; import { have as have_ } from "../../lib.js"; import { get } from "../../property.js"; @@ -110,11 +110,30 @@ export function availableCasts(skill: Skill, statFloor: number): number { */ export function castDownTo(skill: Skill, statFloor: number): boolean { if (!have() || !COSTS.get(skill)) return false; - let casts = availableCasts(skill, statFloor); - while (casts) { - if (!useSkill(skill, casts)) return false; - casts = availableCasts(skill, statFloor); + + if (!cast(skill, availableCasts(skill, statFloor))) return false; + + return true; +} + +/** + * @param skill The BCZ skill to cast. + * @param count How many times you want to cast the spell + * @returns Whether you successfully cast the spell. + */ +export function cast(skill: Skill, count: number): boolean { + if (!have() || !COSTS.get(skill) || count <= 0) return false; + cliExecute("checkpoint"); + equip($item`blood cubic zirconia`); + let casts = count; + while (casts > 0) { + if (!useSkill(skill)) { + cliExecute("outfit checkpoint"); + return false; + } + --casts; } + cliExecute("outfit checkpoint"); return true; } From 30fb07347b60ca3fc66bc110202bfb47496a914f Mon Sep 17 00:00:00 2001 From: Shiverwarp Date: Fri, 7 Nov 2025 19:27:32 -0700 Subject: [PATCH 2/2] use try finally --- src/resources/2025/BloodCubicZirconia.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/resources/2025/BloodCubicZirconia.ts b/src/resources/2025/BloodCubicZirconia.ts index e2db47a8ee..b19c97d81e 100644 --- a/src/resources/2025/BloodCubicZirconia.ts +++ b/src/resources/2025/BloodCubicZirconia.ts @@ -124,16 +124,18 @@ export function castDownTo(skill: Skill, statFloor: number): boolean { export function cast(skill: Skill, count: number): boolean { if (!have() || !COSTS.get(skill) || count <= 0) return false; cliExecute("checkpoint"); - equip($item`blood cubic zirconia`); - let casts = count; - while (casts > 0) { - if (!useSkill(skill)) { - cliExecute("outfit checkpoint"); - return false; + try { + equip($item`blood cubic zirconia`); + let casts = count; + while (casts > 0) { + if (!useSkill(skill)) { + return false; + } + --casts; } - --casts; - } - cliExecute("outfit checkpoint"); - return true; + return true; + } finally { + cliExecute("outfit checkpoint"); + } }