From 2e755925b0589e2d818645ce7b4859fc6932b29b Mon Sep 17 00:00:00 2001 From: Lbniese Date: Thu, 11 Sep 2025 16:50:38 +0200 Subject: [PATCH 1/2] add Darnassus Gift Collection (30 agility) --- proto/common.proto | 1 + sim/core/consumes.go | 4 ++++ ui/core/components/inputs/consumables.ts | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/proto/common.proto b/proto/common.proto index 70657cb57..b2542f0a8 100644 --- a/proto/common.proto +++ b/proto/common.proto @@ -464,6 +464,7 @@ enum ZanzaBuff { CerebralCortexCompound = 6; GizzardGum = 7; LungJuiceCocktail = 8; + DarnassusGiftCollection = 9; } message MiscConsumes { diff --git a/sim/core/consumes.go b/sim/core/consumes.go index 74a930006..b3ea33f3e 100644 --- a/sim/core/consumes.go +++ b/sim/core/consumes.go @@ -615,6 +615,10 @@ func applyZanzaBuffConsumes(character *Character, consumes *proto.Consumes) { character.AddStats(stats.Stats{ stats.Stamina: 25, }) + case proto.ZanzaBuff_DarnassusGiftCollection: + character.AddStats(stats.Stats{ + stats.Agility: 30, + }) } } diff --git a/ui/core/components/inputs/consumables.ts b/ui/core/components/inputs/consumables.ts index fce53bbce..9a872cdee 100644 --- a/ui/core/components/inputs/consumables.ts +++ b/ui/core/components/inputs/consumables.ts @@ -503,6 +503,10 @@ export const GizzardGum: ConsumableInputConfig = { actionId: () => ActionId.fromItemId(8424), value: ZanzaBuff.GizzardGum, }; +export const DarnassusGiftCollection: ConsumableInputConfig = { + actionId: () => ActionId.fromItemId(22133), + value: ZanzaBuff.DarnassusGiftCollection, +}; // Zanza Potions export const SpiritOfZanza: ConsumableInputConfig = { @@ -517,6 +521,7 @@ export const ZANZA_BUFF_CONSUMES_CONFIG: ConsumableStatOption[] = [ { config: LungJuiceCocktail, stats: [Stat.StatStamina] }, { config: CerebralCortexCompound, stats: [Stat.StatIntellect] }, { config: GizzardGum, stats: [Stat.StatSpirit] }, + { config: DarnassusGiftCollection, stats: [Stat.StatAgility] }, ]; export const makeZanzaBuffConsumesInput = makeConsumeInputFactory({ consumesFieldName: 'zanzaBuff' }); From 2068a84dd3b5e52e50f67ba7c7b60e1ac8d489e7 Mon Sep 17 00:00:00 2001 From: Lbniese Date: Thu, 11 Sep 2025 18:00:47 +0200 Subject: [PATCH 2/2] add 2% Physical Hit Consumables (Dark Desire and Fire-toasted Bun) --- proto/common.proto | 7 ++++++ sim/core/consumes.go | 22 +++++++++++++++++++ .../individual_sim_ui/consumes_picker.ts | 8 ++++++- ui/core/components/inputs/consumables.ts | 16 ++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) diff --git a/proto/common.proto b/proto/common.proto index b2542f0a8..26125f589 100644 --- a/proto/common.proto +++ b/proto/common.proto @@ -467,6 +467,12 @@ enum ZanzaBuff { DarnassusGiftCollection = 9; } +enum HitConsumable { + HitConsumableUnknown = 0; + FireToastedBun = 1; + DarkDesire = 2; +} + message MiscConsumes { bool bogling_root = 1; bool juju_ember = 2; @@ -680,6 +686,7 @@ message Consumes { int32 pet_attack_power_consumable = 25; PetMiscConsumes pet_misc_consumes = 27; SapperExplosive sapper_explosive = 28; + HitConsumable hit_consumable = 29; } // NextIndex: 26 diff --git a/sim/core/consumes.go b/sim/core/consumes.go index b3ea33f3e..723d2cfb5 100644 --- a/sim/core/consumes.go +++ b/sim/core/consumes.go @@ -24,6 +24,7 @@ func applyConsumeEffects(agent Agent) { applyPhysicalBuffConsumes(character, consumes) applySpellBuffConsumes(character, consumes) applyZanzaBuffConsumes(character, consumes) + applyHitConsumableConsumes(character, consumes) applyMiscConsumes(character, consumes.MiscConsumes) registerPotionCD(agent, consumes) @@ -622,6 +623,27 @@ func applyZanzaBuffConsumes(character *Character, consumes *proto.Consumes) { } } +/////////////////////////////////////////////////////////////////////////// +// Hit Consumables +/////////////////////////////////////////////////////////////////////////// + +func applyHitConsumableConsumes(character *Character, consumes *proto.Consumes) { + if consumes.HitConsumable == proto.HitConsumable_HitConsumableUnknown { + return + } + + switch consumes.HitConsumable { + case proto.HitConsumable_FireToastedBun: + character.AddStats(stats.Stats{ + stats.MeleeHit: 2 * MeleeHitRatingPerHitChance, + }) + case proto.HitConsumable_DarkDesire: + character.AddStats(stats.Stats{ + stats.MeleeHit: 2 * MeleeHitRatingPerHitChance, + }) + } +} + /////////////////////////////////////////////////////////////////////////// // Misc Consumes /////////////////////////////////////////////////////////////////////////// diff --git a/ui/core/components/individual_sim_ui/consumes_picker.ts b/ui/core/components/individual_sim_ui/consumes_picker.ts index a88e555f3..855c81d3d 100644 --- a/ui/core/components/individual_sim_ui/consumes_picker.ts +++ b/ui/core/components/individual_sim_ui/consumes_picker.ts @@ -123,8 +123,9 @@ export class ConsumesPicker extends Component { private buildPhysicalBuffPickers() { const includeAgi = this.simUI.individualConfig.epStats.includes(Stat.StatAgility); const includeStr = this.simUI.individualConfig.epStats.includes(Stat.StatStrength); + const includeHit = this.simUI.individualConfig.epStats.includes(Stat.StatMeleeHit); - if (!includeAgi && !includeStr) return; + if (!includeAgi && !includeStr && !includeHit) return; const fragment = document.createElement('fragment'); fragment.innerHTML = ` @@ -146,11 +147,16 @@ export class ConsumesPicker extends Component { relevantStatOptions(ConsumablesInputs.STRENGTH_CONSUMES_CONFIG, this.simUI), 'Strength', ); + const hitConsumableOptions = ConsumablesInputs.makeHitConsumableInput( + relevantStatOptions(ConsumablesInputs.HIT_CONSUMABLE_CONFIG, this.simUI), + 'Hit', + ); const pickers = [ buildIconInput(physicalConsumesElem, this.simUI.player, apBuffOptions), buildIconInput(physicalConsumesElem, this.simUI.player, agiBuffOptions), buildIconInput(physicalConsumesElem, this.simUI.player, strBuffOptions), + buildIconInput(physicalConsumesElem, this.simUI.player, hitConsumableOptions), ]; this.updateRow(row, pickers); diff --git a/ui/core/components/inputs/consumables.ts b/ui/core/components/inputs/consumables.ts index 9a872cdee..6013fda43 100644 --- a/ui/core/components/inputs/consumables.ts +++ b/ui/core/components/inputs/consumables.ts @@ -15,6 +15,7 @@ import { Food, FrostPowerBuff, HealthElixir, + HitConsumable, ItemSlot, ManaRegenElixir, Potions, @@ -525,6 +526,21 @@ export const ZANZA_BUFF_CONSUMES_CONFIG: ConsumableStatOption[] = [ ]; export const makeZanzaBuffConsumesInput = makeConsumeInputFactory({ consumesFieldName: 'zanzaBuff' }); +// Hit Consumables +export const FireToastedBun: ConsumableInputConfig = { + actionId: () => ActionId.fromItemId(23327), + value: HitConsumable.FireToastedBun, +}; +export const DarkDesire: ConsumableInputConfig = { + actionId: () => ActionId.fromItemId(22237), + value: HitConsumable.DarkDesire, +}; +export const HIT_CONSUMABLE_CONFIG: ConsumableStatOption[] = [ + { config: FireToastedBun, stats: [Stat.StatMeleeHit] }, + { config: DarkDesire, stats: [Stat.StatMeleeHit] }, +]; +export const makeHitConsumableInput = makeConsumeInputFactory({ consumesFieldName: 'hitConsumable' }); + export const JujuFlurry = makeBooleanMiscConsumeInput({ actionId: () => ActionId.fromItemId(12450), fieldName: 'jujuFlurry',