From f68fe14137d63cb9938bc184b9c2af31b9f4175e Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Fri, 16 Feb 2024 14:17:14 -0500 Subject: [PATCH] add strength of wrynn 30% + raid sim buff --- sim/core/buffs.go | 6 ++-- ui/core/components/icon_inputs.ts | 39 +++++++++++++--------- ui/core/components/input_helpers.ts | 32 +++++++++--------- ui/core/components/inputs/buffs_debuffs.ts | 2 +- ui/raid/settings_tab.ts | 11 +++--- 5 files changed, 50 insertions(+), 40 deletions(-) diff --git a/sim/core/buffs.go b/sim/core/buffs.go index 2d0cec754c..129cb47c5b 100644 --- a/sim/core/buffs.go +++ b/sim/core/buffs.go @@ -92,9 +92,9 @@ func applyBuffEffects(agent Agent, raidBuffs *proto.RaidBuffs, partyBuffs *proto } if raidBuffs.StrengthOfWrynn { - character.MultiplyStat(stats.Health, 1.25) - character.PseudoStats.DamageDealtMultiplier *= 1.25 - character.PseudoStats.HealingTakenMultiplier *= 1.25 + character.MultiplyStat(stats.Health, 1.30) + character.PseudoStats.DamageDealtMultiplier *= 1.30 + character.PseudoStats.HealingTakenMultiplier *= 1.30 } if raidBuffs.ArcaneEmpowerment || raidBuffs.FerociousInspiration || raidBuffs.SanctifiedRetribution { diff --git a/ui/core/components/icon_inputs.ts b/ui/core/components/icon_inputs.ts index 59fb2f5a82..54a5cf6c74 100644 --- a/ui/core/components/icon_inputs.ts +++ b/ui/core/components/icon_inputs.ts @@ -46,7 +46,7 @@ interface BooleanInputConfig { } export function makeBooleanRaidBuffInput(config: BooleanInputConfig): InputHelpers.TypedIconPickerConfig, boolean> { - return InputHelpers.makeBooleanIconInput>({ + return InputHelpers.makeBooleanIconInput, Player>({ getModObject: (player: Player) => player, showWhen: (player: Player) => (!config.faction || config.faction == player.getFaction()), @@ -55,8 +55,17 @@ export function makeBooleanRaidBuffInput(config: BooleanI changeEmitter: (player: Player) => TypedEvent.onAny([player.getRaid()!.buffsChangeEmitter, player.raceChangeEmitter]), }, config.actionId, config.fieldName, config.value); } +export function makeBooleanRaidwideBuffInput(config: BooleanInputConfig): InputHelpers.TypedIconPickerConfig { + return InputHelpers.makeBooleanIconInput({ + getModObject: (raid: Raid) => raid, + showWhen: (_) => true, + getValue: (raid) => raid.getBuffs(), + setValue: (eventID, raid, newVal) => raid.setBuffs(eventID, newVal), + changeEmitter: (raid) => TypedEvent.onAny([raid.buffsChangeEmitter]), + }, config.actionId, config.fieldName, config.value); +} export function makeBooleanPartyBuffInput(config: BooleanInputConfig): InputHelpers.TypedIconPickerConfig, boolean> { - return InputHelpers.makeBooleanIconInput({ + return InputHelpers.makeBooleanIconInput, Party>({ getModObject: (player: Player) => player.getParty()!, getValue: (party: Party) => party.getBuffs(), setValue: (eventID: EventID, party: Party, newVal: PartyBuffs) => party.setBuffs(eventID, newVal), @@ -65,7 +74,7 @@ export function makeBooleanPartyBuffInput(config: Boolean } export function makeBooleanIndividualBuffInput(config: BooleanInputConfig): InputHelpers.TypedIconPickerConfig, boolean> { - return InputHelpers.makeBooleanIconInput>({ + return InputHelpers.makeBooleanIconInput, Player>({ getModObject: (player: Player) => player, showWhen: (player: Player) => (!config.faction || config.faction == player.getFaction()), @@ -76,7 +85,7 @@ export function makeBooleanIndividualBuffInput(config: Bo } export function makeBooleanConsumeInput(config: BooleanInputConfig): InputHelpers.TypedIconPickerConfig, boolean> { - return InputHelpers.makeBooleanIconInput>({ + return InputHelpers.makeBooleanIconInput, Player>({ getModObject: (player: Player) => player, getValue: (player: Player) => player.getConsumes(), setValue: (eventID: EventID, player: Player, newVal: Consumes) => player.setConsumes(eventID, newVal), @@ -84,7 +93,7 @@ export function makeBooleanConsumeInput(config: BooleanIn }, config.actionId, config.fieldName, config.value); } export function makeBooleanDebuffInput(config: BooleanInputConfig): InputHelpers.TypedIconPickerConfig, boolean> { - return InputHelpers.makeBooleanIconInput>({ + return InputHelpers.makeBooleanIconInput, Player>({ getModObject: (player: Player) => player, getValue: (player: Player) => player.getRaid()!.getDebuffs(), setValue: (eventID: EventID, player: Player, newVal: Debuffs) => player.getRaid()!.setDebuffs(eventID, newVal), @@ -100,7 +109,7 @@ interface TristateInputConfig { } export function makeTristateRaidBuffInput(config: TristateInputConfig): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeTristateIconInput>({ + return InputHelpers.makeTristateIconInput, Player>({ getModObject: (player: Player) => player, showWhen: (player: Player) => (!config.faction || config.faction == player.getFaction()), @@ -111,7 +120,7 @@ export function makeTristateRaidBuffInput(config: Tristat } export function makeTristateIndividualBuffInput(config: TristateInputConfig): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeTristateIconInput>({ + return InputHelpers.makeTristateIconInput, Player>({ getModObject: (player: Player) => player, showWhen: (player: Player) => (!config.faction || config.faction == player.getFaction()), @@ -122,7 +131,7 @@ export function makeTristateIndividualBuffInput(config: T } export function makeTristateDebuffInput(config: TristateInputConfig): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeTristateIconInput({ + return InputHelpers.makeTristateIconInput, Raid>({ getModObject: (player: Player) => player.getRaid()!, getValue: (raid: Raid) => raid.getDebuffs(), setValue: (eventID: EventID, raid: Raid, newVal: Debuffs) => raid.setDebuffs(eventID, newVal), @@ -139,7 +148,7 @@ interface QuadStateInputConfig { } export function makeQuadstateDebuffInput(config: QuadStateInputConfig): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeQuadstateIconInput({ + return InputHelpers.makeQuadstateIconInput, Raid>({ getModObject: (player: Player) => player.getRaid()!, getValue: (raid: Raid) => raid.getDebuffs(), setValue: (eventID: EventID, raid: Raid, newVal: Debuffs) => raid.setDebuffs(eventID, newVal), @@ -156,7 +165,7 @@ interface MultiStateInputConfig { } export function makeMultistateRaidBuffInput(config: MultiStateInputConfig): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeMultistateIconInput>({ + return InputHelpers.makeMultistateIconInput, Player>({ getModObject: (player: Player) => player, showWhen: (player: Player) => (!config.faction || config.faction == player.getFaction()), @@ -166,7 +175,7 @@ export function makeMultistateRaidBuffInput(config: Multi }, config.actionId, config.numStates, config.fieldName, config.multiplier); } export function makeMultistatePartyBuffInput(actionId: ActionId, numStates: number, fieldName: keyof PartyBuffs): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeMultistateIconInput({ + return InputHelpers.makeMultistateIconInput, Party>({ getModObject: (player: Player) => player.getParty()!, getValue: (party: Party) => party.getBuffs(), setValue: (eventID: EventID, party: Party, newVal: PartyBuffs) => party.setBuffs(eventID, newVal), @@ -174,7 +183,7 @@ export function makeMultistatePartyBuffInput(actionId: Ac }, actionId, numStates, fieldName); } export function makeMultistateIndividualBuffInput(config: MultiStateInputConfig): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeMultistateIconInput>({ + return InputHelpers.makeMultistateIconInput, Player>({ getModObject: (player: Player) => player, showWhen: (player: Player) => (!config.faction || config.faction == player.getFaction()), @@ -185,7 +194,7 @@ export function makeMultistateIndividualBuffInput(config: } export function makeMultistateMultiplierIndividualBuffInput(actionId: ActionId, numStates: number, multiplier: number, fieldName: keyof IndividualBuffs): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeMultistateIconInput>({ + return InputHelpers.makeMultistateIconInput, Player>({ getModObject: (player: Player) => player, getValue: (player: Player) => player.getBuffs(), setValue: (eventID: EventID, player: Player, newVal: IndividualBuffs) => player.setBuffs(eventID, newVal), @@ -194,7 +203,7 @@ export function makeMultistateMultiplierIndividualBuffInput(actionId: ActionId, numStates: number, multiplier: number, fieldName: keyof Debuffs): InputHelpers.TypedIconPickerConfig, number> { - return InputHelpers.makeMultistateIconInput({ + return InputHelpers.makeMultistateIconInput, Raid>({ getModObject: (player: Player) => player.getRaid()!, getValue: (raid: Raid) => raid.getDebuffs(), setValue: (eventID: EventID, raid: Raid, newVal: Debuffs) => raid.setDebuffs(eventID, newVal), @@ -211,7 +220,7 @@ export function makeMultistateMultiplierDebuffInput(actio // } // export function makeEnumIndividualBuffInput(config: EnumInputConfig, IndividualBuffs, number>): InputHelpers.TypedIconEnumPickerConfig, number> { -// return InputHelpers.makeEnumIconInput, number>({ +// return InputHelpers.makeEnumIconInput, number>({ // getModObject: (player: Player) => player, // showWhen: (player: Player) => // (!config.faction || config.faction == player.getFaction()), diff --git a/ui/core/components/input_helpers.ts b/ui/core/components/input_helpers.ts index 7346d67434..496190ddca 100644 --- a/ui/core/components/input_helpers.ts +++ b/ui/core/components/input_helpers.ts @@ -266,24 +266,24 @@ export interface TypedIconPickerConfig extends IconPickerConfig extends IconPickerConfig { - getModObject: (player: Player) => ModObject, +interface WrappedIconInputConfig extends IconPickerConfig { + getModObject: (baseObj: BaseObject) => ModObject, } -function makeWrappedIconInput(config: WrappedIconInputConfig): TypedIconPickerConfig, T> { +function makeWrappedIconInput(config: WrappedIconInputConfig): TypedIconPickerConfig { const getModObject = config.getModObject; return { type: 'icon', actionId: config.actionId, states: config.states, - changedEvent: (player: Player) => config.changedEvent(getModObject(player)), - getValue: (player: Player) => config.getValue(getModObject(player)), - setValue: (eventID: EventID, player: Player, newValue: T) => config.setValue(eventID, getModObject(player), newValue), + changedEvent: (baseObj) => config.changedEvent(getModObject(baseObj)), + getValue: (baseObj) => config.getValue(getModObject(baseObj)), + setValue: (eventID: EventID, baseObj, newValue: T) => config.setValue(eventID, getModObject(baseObj), newValue), extraCssClasses: config.extraCssClasses, } } -interface WrappedTypedInputConfig { - getModObject: (player: Player) => ModObject, +interface WrappedTypedInputConfig { + getModObject: (baseObj: BaseObject) => ModObject, getValue: (modObj: ModObject) => Message, setValue: (eventID: EventID, modObj: ModObject, messageVal: Message) => void, changeEmitter: (modObj: ModObject) => TypedEvent, @@ -294,8 +294,8 @@ interface WrappedTypedInputConfig { setFieldValue?: (eventID: EventID, modObj: ModObject, newValue: T) => void, } -export function makeBooleanIconInput(config: WrappedTypedInputConfig, actionId: ActionId, fieldName: keyof Message, value?: number): TypedIconPickerConfig, boolean> { - return makeWrappedIconInput({ +export function makeBooleanIconInput(config: WrappedTypedInputConfig, actionId: ActionId, fieldName: keyof Message, value?: number): TypedIconPickerConfig { + return makeWrappedIconInput({ getModObject: config.getModObject, actionId: actionId, states: 2, @@ -324,7 +324,7 @@ export interface PlayerBooleanIconInputConfig value?: number, } export function makeSpecOptionsBooleanIconInput(config: PlayerBooleanIconInputConfig, boolean>): TypedIconPickerConfig, boolean> { - return makeBooleanIconInput, Player>({ + return makeBooleanIconInput, Player, Player>({ getModObject: (player: Player) => player, getValue: (player: Player) => player.getSpecOptions(), setValue: (eventID: EventID, player: Player, newVal: SpecOptions) => player.setSpecOptions(eventID, newVal), @@ -335,8 +335,8 @@ export function makeSpecOptionsBooleanIconInput(config: P }, config.id, config.fieldName, config.value); } -function makeNumberIconInput(config: WrappedTypedInputConfig, actionId: ActionId, fieldName: keyof Message, multiplier?: number): TypedIconPickerConfig, number> { - return makeWrappedIconInput({ +function makeNumberIconInput(config: WrappedTypedInputConfig, actionId: ActionId, fieldName: keyof Message, multiplier?: number): TypedIconPickerConfig { + return makeWrappedIconInput({ getModObject: config.getModObject, actionId: actionId, states: 0, // Must be assigned externally. @@ -356,20 +356,20 @@ function makeNumberIconInput(config: }, }); } -export function makeTristateIconInput(config: WrappedTypedInputConfig, id: ActionId, impId: ActionId, fieldName: keyof Message): TypedIconPickerConfig, number> { +export function makeTristateIconInput(config: WrappedTypedInputConfig, id: ActionId, impId: ActionId, fieldName: keyof Message): TypedIconPickerConfig { const input = makeNumberIconInput(config, id, fieldName); input.states = 3; input.improvedId = impId; return input; } -export function makeQuadstateIconInput(config: WrappedTypedInputConfig, id: ActionId, impId: ActionId, impId2: ActionId, fieldName: keyof Message): TypedIconPickerConfig, number> { +export function makeQuadstateIconInput(config: WrappedTypedInputConfig, id: ActionId, impId: ActionId, impId2: ActionId, fieldName: keyof Message): TypedIconPickerConfig { const input = makeNumberIconInput(config, id, fieldName); input.states = 4; input.improvedId = impId; input.improvedId2 = impId2; return input; } -export function makeMultistateIconInput(config: WrappedTypedInputConfig, id: ActionId, numStates: number, fieldName: keyof Message, multiplier?: number): TypedIconPickerConfig, number> { +export function makeMultistateIconInput(config: WrappedTypedInputConfig, id: ActionId, numStates: number, fieldName: keyof Message, multiplier?: number): TypedIconPickerConfig { const input = makeNumberIconInput(config, id, fieldName, multiplier); input.states = numStates; return input; diff --git a/ui/core/components/inputs/buffs_debuffs.ts b/ui/core/components/inputs/buffs_debuffs.ts index e6f4d6e3d1..763e8f5483 100644 --- a/ui/core/components/inputs/buffs_debuffs.ts +++ b/ui/core/components/inputs/buffs_debuffs.ts @@ -166,7 +166,7 @@ export const StrengthAndAgilityBuff = InputHelpers.makeMultiIconInput([ ], 'Str/Agi'); // Misc Buffs -export const StrengthOfWrynn = makeBooleanRaidBuffInput({actionId: ActionId.fromSpellId(73827), fieldName: 'strengthOfWrynn'}); +export const StrengthOfWrynn = makeBooleanRaidBuffInput({actionId: ActionId.fromSpellId(73828), fieldName: 'strengthOfWrynn'}); export const RetributionAura = makeBooleanRaidBuffInput({actionId: ActionId.fromSpellId(54043), fieldName: 'retributionAura'}); export const BraidedEterniumChain = makeBooleanPartyBuffInput({actionId: ActionId.fromSpellId(31025), fieldName: 'braidedEterniumChain'}); export const ChainOfTheTwilightOwl = makeBooleanPartyBuffInput({actionId: ActionId.fromSpellId(31035), fieldName: 'chainOfTheTwilightOwl'}); diff --git a/ui/raid/settings_tab.ts b/ui/raid/settings_tab.ts index 72be05296e..ca721a49dd 100644 --- a/ui/raid/settings_tab.ts +++ b/ui/raid/settings_tab.ts @@ -52,10 +52,10 @@ export class SettingsTab extends SimTab { protected buildTabContent() { this.buildEncounterSettings(); this.buildConsumesSettings(); - this.buildOtherSettings(); this.buildTankSettings(); this.buildAssignmentSettings(); + this.buildOtherSettings(); this.buildBlessingsPicker(); this.buildSavedDataPickers(); @@ -90,10 +90,11 @@ export class SettingsTab extends SimTab { } private buildOtherSettings() { - // const raid = this.simUI.sim.raid; - // const contentBlock = new ContentBlock(this.column1, 'other-settings', { - // header: {title: 'Other'} - // }); + const contentBlock = new ContentBlock(this.column2, 'other-settings', { + header: {title: 'Other'} + }); + + this.makeBooleanRaidIconBuffInput(contentBlock.bodyElement, ActionId.fromSpellId(73828), 'strengthOfWrynn'); // new BooleanPicker(contentBlock.bodyElement, this.simUI.sim.raid, { // label: 'Stagger Stormstrikes',