monk

package
v0.0.183 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SpellFlagBuilder = core.SpellFlagAgentReserved2
	SpellFlagSpender = core.SpellFlagAgentReserved3
)
View Source
const (
	DDBC_RisingSunKick    int = iota
	DDBC_RisingSunKickSEF int = iota

	DDBC_Total
)

Damage Done By Caster setup Used by Windwalker Monk and SEF

View Source
const (
	MonkSpellFlagNone     int64 = 0
	MonkSpellBlackoutKick int64 = 1 << iota
	MonkSpellExpelHarm
	MonkSpellJab
	MonkSpellSpinningCraneKick
	MonkSpellTigerPalm
	MonkSpellCracklingJadeLightning
	MonkSpellFortifyingBrew
	MonkSpellHealingSphere
	MonkSpellTouchOfDeath

	// -- Talents
	// Level 15
	MonkSpellCelerity
	MonkSpellTigersLust
	MonkSpellMomentum

	// Level 30
	MonkSpellChiWave
	MonkSpellZenSphere
	MonkSpellChiBurst

	// Level 45
	MonkSpellChiSphere
	MonkSpellChiBrew

	// Level 75
	MonkSpellHealingElixirs
	MonkSpellDampenHarm
	MonkSpellDiffuseMagic

	//Level 90
	MonkSpellRushingJadeWind
	MonkSpellInvokeXuenTheWhiteTiger
	MonkSpellInvokeXuenTheWhiteTigerPet
	MonkSpellChiTorpedo

	// Windwalker
	MonkSpellEnergizingBrew
	MonkSpellFistsOfFury
	MonkSpellRisingSunKick
	MonkSpellTigereyeBrew
	MonkSpellTigerStrikes
	MonkSpellSpinningFireBlossom
	MonkSpellStormEarthAndFire

	// Brewmaster
	MonkSpellElusiveBrew
	MonkSpellDizzyingHaze
	MonkSpellDizzyingHazeProjectile

	MonkSpellBreathOfFire
	MonkSpellKegSmash
	MonkSpellGuard
	MonkSpellStagger
	MonkSpellAvertHarm
	MonkSpellPurifyingBrew
	MonkSpellGiftOfTheOx

	MonkSpellLast
	MonkSpellsAll = MonkSpellLast<<1 - 1
)

Variables

View Source
var DualWieldModifier = 0.898882275

// 103985 - Stance of the Fierce Tiger // 108561 - 2H Staff equipped // 115697 - Polearm equipped // 120267 - Vengeance // 124146 - Dual Wield

Monk weapon damage is calculated by combining main hand and off hand damage. The following formula is embedded into all the tooltips for monk strikes:

$stnc=<basically Fierce Tiger stance modifier, handled by the stance spell> $dwm1=$?a108561[${1}][${0.898882275}] $dwm=$?a115697[${1}][${$<dwm1>}] $bm=$?s120267[${0.4}][${1}] $offm1=$?a108561[${0}][${1}] $offm=$?a115697[${0}][${$<offm1>}] $apc=$?s120267[${$AP/11}][${$AP/14}] $offlow=$?!s124146[${$mwb/2/$mws}][${$owb/2/$ows}] $offhigh=$?!s124146[${$MWB/2/$mws}][${$OWB/2/$ows}] $low=${$<stnc>*($<bm>*$<dwm>*(($mwb)/($MWS)+$<offm>*$<offlow>)+$<apc>-1)} $high=${$<stnc>*($<bm>*$<dwm>*(($MWB)/($MWS)+$<offm>*$<offhigh>)+$<apc>+1)}

View Source
var ItemSetArmorOfSevenSacredSeals = core.NewItemSet(core.ItemSet{
	Name:                    "Armor of Seven Sacred Seals",
	DisabledInChallengeMode: true,
	Bonuses: map[int32]core.ApplySetBonus{
		2: func(agent core.Agent, setBonusAura *core.Aura) {

		},
		4: func(agent core.Agent, setBonusAura *core.Aura) {
			monk := agent.(MonkAgent).GetMonk()

			monk.T16Brewmaster4P = setBonusAura

			setBonusAura.ExposeToAPL(145056)
		},
	},
})

T16 - Brewmaster

View Source
var ItemSetArmorOfTheRedCrane = core.NewItemSet(core.ItemSet{
	Name:                    "Armor of the Red Crane",
	DisabledInChallengeMode: true,
	Bonuses: map[int32]core.ApplySetBonus{
		2: func(agent core.Agent, setBonusAura *core.Aura) {
			monk := agent.(MonkAgent).GetMonk()

			monk.OnSpellRegistered(func(spell *core.Spell) {
				if !spell.Matches(MonkSpellElusiveBrew) {
					return
				}

				hasDodgeBonus := false
				spell.RelatedSelfBuff.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) {
					if setBonusAura.IsActive() {
						monk.PseudoStats.BaseDodgeChance += 0.05
						hasDodgeBonus = true
					}
				}).ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) {
					if hasDodgeBonus {
						monk.PseudoStats.BaseDodgeChance -= 0.05
						hasDodgeBonus = false
					}
				})
			})

			setBonusAura.ExposeToAPL(123157)
		},
		4: func(agent core.Agent, setBonusAura *core.Aura) {

			monk := agent.(MonkAgent).GetMonk()
			monk.T14Brewmaster4P = setBonusAura

			setBonusAura.ExposeToAPL(123159)
		},
	},
})

T14 - Brewmaster

View Source
var ItemSetBattlegearOfSevenSacredSeals = core.NewItemSet(core.ItemSet{
	Name:                    "Battlegear of Seven Sacred Seals",
	DisabledInChallengeMode: true,
	Bonuses: map[int32]core.ApplySetBonus{
		2: func(agent core.Agent, setBonusAura *core.Aura) {
			monk := agent.(MonkAgent).GetMonk()

			registerComboBreakerDamageMod := func(spellID int32, spellMask int64) {
				monk.OnSpellRegistered(func(spell *core.Spell) {
					if !spell.Matches(spellMask) {
						return
					}

					aura := monk.GetAuraByID(core.ActionID{SpellID: spellID})
					if aura != nil {
						damageMod := monk.AddDynamicMod(core.SpellModConfig{
							Kind:       core.SpellMod_DamageDone_Pct,
							ClassMask:  spellMask,
							FloatValue: 0.4,
						})

						aura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) {
							if setBonusAura.IsActive() {
								damageMod.Activate()
							}
						}).ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) {
							damageMod.Deactivate()
						})
					}
				})

			}

			registerComboBreakerDamageMod(118864, MonkSpellTigerPalm)
			registerComboBreakerDamageMod(116768, MonkSpellBlackoutKick)

			setBonusAura.ExposeToAPL(145004)
		},
		4: func(agent core.Agent, setBonusAura *core.Aura) {

			monk := agent.(MonkAgent).GetMonk()
			monk.T16Windwalker4P = monk.RegisterAura(core.Aura{
				Label:    "Focus of Xuen" + monk.Label,
				ActionID: core.ActionID{SpellID: 145024},
				Duration: 10 * time.Second,
			})

			setBonusAura.ExposeToAPL(145022)
		},
	},
})

T16 - Windwalker

View Source
var ItemSetBattlegearOfTheRedCrane = core.NewItemSet(core.ItemSet{
	Name:                    "Battlegear of the Red Crane",
	DisabledInChallengeMode: true,
	Bonuses: map[int32]core.ApplySetBonus{
		2: func(agent core.Agent, setBonusAura *core.Aura) {
			setBonusAura.AttachSpellMod(core.SpellModConfig{
				Kind:      core.SpellMod_Cooldown_Flat,
				ClassMask: MonkSpellFistsOfFury,
				TimeValue: -5 * time.Second,
			}).ExposeToAPL(123149)
		},
		4: func(agent core.Agent, setBonusAura *core.Aura) {
			setBonusAura.AttachSpellMod(core.SpellModConfig{
				Kind:      core.SpellMod_BuffDuration_Flat,
				ClassMask: MonkSpellEnergizingBrew,
				TimeValue: 5 * time.Second,
			}).ExposeToAPL(123150)
		},
	},
})

T14 - Windwalker

View Source
var ItemSetFireCharmArmor = core.NewItemSet(core.ItemSet{
	Name:                    "Fire-Charm Armor",
	DisabledInChallengeMode: true,
	Bonuses: map[int32]core.ApplySetBonus{
		2: func(agent core.Agent, setBonusAura *core.Aura) {
			monk := agent.(MonkAgent).GetMonk()

			monk.T15Brewmaster2P = monk.RegisterAura(core.Aura{
				Label:    "Item - Monk T15 Brewmaster 2P Bonus" + monk.Label,
				ActionID: core.ActionID{SpellID: 138233},
				Duration: 0,
			})

			monk.OnSpellRegistered(func(spell *core.Spell) {
				if !spell.Matches(MonkSpellElusiveBrew) {
					return
				}

				spell.RelatedSelfBuff.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) {
					if setBonusAura.IsActive() {
						monk.T15Brewmaster2P.Duration = time.Duration(monk.ElusiveBrewStacks) * time.Second
						monk.T15Brewmaster2P.Activate(sim)
					}
				})
			})

			setBonusAura.ExposeToAPL(138231)
		},
		4: func(agent core.Agent, setBonusAura *core.Aura) {
			monk := agent.(MonkAgent).GetMonk()

			monk.T15Brewmaster4PProcEffect = monk.RegisterAura(core.Aura{
				Label:    "Purifier" + monk.Label,
				ActionID: core.ActionID{SpellID: 138237},
				Duration: 15 * time.Second,
			})

			monk.T15Brewmaster4P = setBonusAura

			setBonusAura.ExposeToAPL(138236)
		},
	},
})

T15 - Brewmaster

View Source
var ItemSetFireCharmBattlegear = core.NewItemSet(core.ItemSet{
	Name:                    "Fire-Charm Battlegear",
	DisabledInChallengeMode: true,
	Bonuses: map[int32]core.ApplySetBonus{
		2: func(agent core.Agent, setBonusAura *core.Aura) {
			monk := agent.(MonkAgent).GetMonk()

			triggerActionId := core.ActionID{SpellID: 138177}
			spellActionId := core.ActionID{SpellID: 138310}
			auraActionId := core.ActionID{SpellID: 138311}
			energyMetrics := monk.NewEnergyMetrics(spellActionId)
			sphereDuration := time.Minute * 2
			energyGain := 10.0

			pendingSpheres := make([]*core.PendingAction, 0)
			monk.T15Windwalker2PSphereAura = monk.RegisterAura(core.Aura{
				Label:     "Energy Sphere" + monk.Label,
				ActionID:  auraActionId,
				Duration:  sphereDuration,
				MaxStacks: math.MaxInt32,
			})

			monk.T15Windwalker2PSphereSpell = monk.RegisterSpell(core.SpellConfig{
				ActionID:    spellActionId,
				SpellSchool: core.SpellSchoolNature,
				Flags:       core.SpellFlagPassiveSpell | core.SpellFlagNoOnCastComplete | core.SpellFlagAPL,
				ProcMask:    core.ProcMaskSpellHealing,

				DamageMultiplier: 1,
				CritMultiplier:   1,
				ThreatMultiplier: 1,

				Cast: core.CastConfig{
					DefaultCast: core.Cast{
						NonEmpty: true,
					},
				},

				ExtraCastCondition: func(sim *core.Simulation, target *core.Unit) bool {
					return (monk.CurrentEnergy()+energyGain) < monk.MaximumEnergy() && monk.T15Windwalker2PSphereAura.IsActive() && monk.T15Windwalker2PSphereAura.GetStacks() > 0
				},

				ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
					monk.AddEnergy(sim, 10, energyMetrics)
					monk.T15Windwalker2PSphereAura.RemoveStack(sim)
					pendingSphere := pendingSpheres[0]
					if pendingSphere != nil {
						pendingSphere.Cancel(sim)
					}
				},
				RelatedSelfBuff: monk.T15Windwalker2PSphereAura,
			})

			setBonusAura.AttachProcTrigger(core.ProcTrigger{
				Name:       "Item - Monk T15 Windwalker 2P Bonus",
				ActionID:   triggerActionId,
				ProcChance: 0.15,
				ICD:        100 * time.Millisecond,
				SpellFlags: SpellFlagBuilder,
				Callback:   core.CallbackOnSpellHitDealt,
				Outcome:    core.OutcomeLanded,
				Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) {
					monk.T15Windwalker2PSphereAura.Activate(sim)
					monk.T15Windwalker2PSphereAura.AddStack(sim)

					pa := sim.GetConsumedPendingActionFromPool()
					pa.NextActionAt = sim.CurrentTime + sphereDuration
					pa.Priority = core.ActionPriorityDOT

					pa.OnAction = func(sim *core.Simulation) {
						monk.T15Windwalker2PSphereAura.RemoveStack(sim)
						pendingSpheres = pendingSpheres[:1]
					}
					pa.CleanUp = func(sim *core.Simulation) {
						pendingSpheres = pendingSpheres[:1]
					}

					sim.AddPendingAction(pa)
					pendingSpheres = append(pendingSpheres, pa)
				},
			}).ExposeToAPL(triggerActionId.SpellID)

			monk.RegisterResetEffect(func(s *core.Simulation) {
				pendingSpheres = make([]*core.PendingAction, 0)
			})
		},
		4: func(agent core.Agent, setBonusAura *core.Aura) {

			monk := agent.(MonkAgent).GetMonk()
			monk.T15Windwalker4P = setBonusAura

			setBonusAura.ExposeToAPL(138315)
		},
	},
})

T15 - Windwalker

View Source
var SEFSpellID = int32(138228)

Functions

This section is empty.

Types

type APLValueCurrentChi

type APLValueCurrentChi struct {
	core.DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentChi) GetInt

func (value *APLValueCurrentChi) GetInt(_ *core.Simulation) int32

func (*APLValueCurrentChi) String

func (value *APLValueCurrentChi) String() string

func (*APLValueCurrentChi) Type

func (value *APLValueCurrentChi) Type() proto.APLValueType

type APLValueMaxChi

type APLValueMaxChi struct {
	core.DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMaxChi) GetInt

func (value *APLValueMaxChi) GetInt(_ *core.Simulation) int32

func (*APLValueMaxChi) String

func (value *APLValueMaxChi) String() string

func (*APLValueMaxChi) Type

func (value *APLValueMaxChi) Type() proto.APLValueType

type Monk

type Monk struct {
	core.Character

	ClassSpellScaling float64

	Talents           *proto.MonkTalents
	Options           *proto.MonkOptions
	BrewmasterOptions *proto.BrewmasterMonk_Options
	MistweaverOptions *proto.MistweaverMonk_Options
	WindwalkerOptions *proto.WindwalkerMonk_Options

	HandType proto.HandType

	Stance Stance

	MHAutoSpell *core.Spell
	OHAutoSpell *core.Spell

	AdditiveEnergyRegenBonus float64

	StanceOfTheSturdyOx    *core.Spell
	StanceOfTheWiseSerpent *core.Spell
	StanceOfTheFierceTiger *core.Spell

	SummonHealingSphere func(sim *core.Simulation)

	// Windwalker
	SEFAura *core.Aura

	// Brewmaster
	ElusiveBrewAura   *core.Aura
	ElusiveBrewStacks int32

	SefController *StormEarthAndFireController

	XuenAura *core.Aura
	XuenPet  *Xuen

	StanceOfTheFierceTigerAura *core.Aura
	StanceOfTheSturdyOxAura    *core.Aura
	StanceOfTheWiseSerpentAura *core.Aura

	ComboBreakerBlackoutKickAura *core.Aura
	ComboBreakerTigerPalmAura    *core.Aura

	ChiSphereAura          *core.Aura
	DampenHarmAura         *core.Aura
	FortifyingBrewAura     *core.Aura
	PowerStrikesAura       *core.Aura
	PowerStrikesChiMetrics *core.ResourceMetrics

	// Set Bonuses
	T14Brewmaster4P            *core.Aura
	T15Windwalker2PSphereAura  *core.Aura
	T15Windwalker2PSphereSpell *core.Spell
	T15Windwalker4P            *core.Aura
	T15Brewmaster2P            *core.Aura
	T15Brewmaster4P            *core.Aura
	T15Brewmaster4PProcEffect  *core.Aura
	T16Windwalker4P            *core.Aura
	T16Brewmaster4P            *core.Aura
	// contains filtered or unexported fields
}

func NewMonk

func NewMonk(character *core.Character, options *proto.MonkOptions, talents string) *Monk

func (*Monk) AddBrewStacks

func (monk *Monk) AddBrewStacks(sim *core.Simulation, stacksToAdd int32)

func (*Monk) AddChi

func (monk *Monk) AddChi(sim *core.Simulation, spell *core.Spell, pointsToAdd int32, metrics *core.ResourceMetrics)

func (*Monk) AddPartyBuffs

func (monk *Monk) AddPartyBuffs(_ *proto.PartyBuffs)

func (*Monk) AddRaidBuffs

func (monk *Monk) AddRaidBuffs(raidBuffs *proto.RaidBuffs)

func (*Monk) ApplyAdditiveEnergyRegenBonus

func (monk *Monk) ApplyAdditiveEnergyRegenBonus(sim *core.Simulation, increment float64)

func (*Monk) ApplyTalents

func (monk *Monk) ApplyTalents()

func (*Monk) CalculateMonkStrikeDamage

func (monk *Monk) CalculateMonkStrikeDamage(sim *core.Simulation, spell *core.Spell) float64

func (*Monk) ChangeStance

func (monk *Monk) ChangeStance(sim *core.Simulation, newStance Stance)

func (*Monk) GetCharacter

func (monk *Monk) GetCharacter() *core.Character

func (*Monk) GetChi

func (monk *Monk) GetChi() int32

func (*Monk) GetHandType

func (monk *Monk) GetHandType() proto.HandType

func (*Monk) GetMaxChi

func (monk *Monk) GetMaxChi() int32

func (*Monk) GetMonk

func (monk *Monk) GetMonk() *Monk

func (*Monk) HasMajorGlyph

func (monk *Monk) HasMajorGlyph(glyph proto.MonkMajorGlyph) bool

func (*Monk) HasMinorGlyph

func (monk *Monk) HasMinorGlyph(glyph proto.MonkMinorGlyph) bool

func (*Monk) Initialize

func (monk *Monk) Initialize()

func (*Monk) NewAPLValue

func (monk *Monk) NewAPLValue(_ *core.APLRotation, config *proto.APLValue) core.APLValue

func (*Monk) NewSEFPet

func (monk *Monk) NewSEFPet(name string, cloneID int32, swingSpeed float64) *StormEarthAndFirePet

func (*Monk) NewXuen

func (monk *Monk) NewXuen() *Xuen

func (*Monk) OnEncounterStart added in v0.0.13

func (monk *Monk) OnEncounterStart(sim *core.Simulation)

func (*Monk) RegisterOnChiSpent

func (monk *Monk) RegisterOnChiSpent(onChiSpent OnChiSpent)

func (*Monk) RegisterOnNewBrewStacks

func (monk *Monk) RegisterOnNewBrewStacks(onNewBrewStacks OnNewBrewStacks)

func (*Monk) RegisterOnStanceChanged

func (monk *Monk) RegisterOnStanceChanged(onStanceChanged OnStanceChanged)

func (*Monk) RegisterSEFPets

func (monk *Monk) RegisterSEFPets()

func (*Monk) Reset

func (monk *Monk) Reset(sim *core.Simulation)

func (*Monk) SpendChi

func (monk *Monk) SpendChi(sim *core.Simulation, chiToSpend int32, metrics *core.ResourceMetrics)

func (*Monk) StanceMatches

func (monk *Monk) StanceMatches(other Stance) bool

func (*Monk) TriggerPowerStrikes

func (monk *Monk) TriggerPowerStrikes(sim *core.Simulation)

type MonkAgent

type MonkAgent interface {
	GetMonk() *Monk
}

type OnChiSpent

type OnChiSpent func(sim *core.Simulation, chiSpent int32)

type OnNewBrewStacks

type OnNewBrewStacks func(sim *core.Simulation, stacksToAdd int32)

type OnStanceChanged

type OnStanceChanged func(sim *core.Simulation, newStance Stance)

type Stance

type Stance uint8
const (
	StanceNone         = 0
	FierceTiger Stance = 1 << iota
	SturdyOx
	WiseSerpent
)

type StormEarthAndFireController

type StormEarthAndFireController struct {
	// contains filtered or unexported fields
}

func (*StormEarthAndFireController) CastCopySpell

func (controller *StormEarthAndFireController) CastCopySpell(sim *core.Simulation, spell *core.Spell)

func (*StormEarthAndFireController) PickClone

func (controller *StormEarthAndFireController) PickClone(sim *core.Simulation, target *core.Unit)

func (*StormEarthAndFireController) Reset

func (controller *StormEarthAndFireController) Reset(sim *core.Simulation)

func (*StormEarthAndFireController) UpdateCloneDamageMultiplier added in v0.0.53

func (controller *StormEarthAndFireController) UpdateCloneDamageMultiplier(multiplier float64)

type StormEarthAndFirePet

type StormEarthAndFirePet struct {
	core.Pet
	// contains filtered or unexported fields
}

func (*StormEarthAndFirePet) ExecuteCustomRotation

func (sefClone *StormEarthAndFirePet) ExecuteCustomRotation(sim *core.Simulation)

func (*StormEarthAndFirePet) GetPet

func (sefClone *StormEarthAndFirePet) GetPet() *core.Pet

func (*StormEarthAndFirePet) Initialize

func (sefClone *StormEarthAndFirePet) Initialize()

func (*StormEarthAndFirePet) OnEncounterStart added in v0.0.13

func (sefClone *StormEarthAndFirePet) OnEncounterStart(_ *core.Simulation)

func (*StormEarthAndFirePet) Reset

func (sefClone *StormEarthAndFirePet) Reset(_ *core.Simulation)

type Xuen

type Xuen struct {
	core.Pet

	CracklingTigerLightning *core.Spell
	// contains filtered or unexported fields
}

func (*Xuen) ExecuteCustomRotation

func (xuen *Xuen) ExecuteCustomRotation(sim *core.Simulation)

func (*Xuen) GetPet

func (xuen *Xuen) GetPet() *core.Pet

func (*Xuen) Initialize

func (xuen *Xuen) Initialize()

func (*Xuen) OnEncounterStart added in v0.0.13

func (xuen *Xuen) OnEncounterStart(_ *core.Simulation)

func (*Xuen) Reset

func (xuen *Xuen) Reset(sim *core.Simulation)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL