Documentation
¶
Index ¶
- Constants
- Variables
- type APLValueCurrentChi
- type APLValueMaxChi
- type Monk
- func (monk *Monk) AddBrewStacks(sim *core.Simulation, stacksToAdd int32)
- func (monk *Monk) AddChi(sim *core.Simulation, spell *core.Spell, pointsToAdd int32, ...)
- func (monk *Monk) AddPartyBuffs(_ *proto.PartyBuffs)
- func (monk *Monk) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (monk *Monk) ApplyAdditiveEnergyRegenBonus(sim *core.Simulation, increment float64)
- func (monk *Monk) ApplyTalents()
- func (monk *Monk) CalculateMonkStrikeDamage(sim *core.Simulation, spell *core.Spell) float64
- func (monk *Monk) ChangeStance(sim *core.Simulation, newStance Stance)
- func (monk *Monk) GetCharacter() *core.Character
- func (monk *Monk) GetChi() int32
- func (monk *Monk) GetHandType() proto.HandType
- func (monk *Monk) GetMaxChi() int32
- func (monk *Monk) GetMonk() *Monk
- func (monk *Monk) HasMajorGlyph(glyph proto.MonkMajorGlyph) bool
- func (monk *Monk) HasMinorGlyph(glyph proto.MonkMinorGlyph) bool
- func (monk *Monk) Initialize()
- func (monk *Monk) NewAPLValue(_ *core.APLRotation, config *proto.APLValue) core.APLValue
- func (monk *Monk) NewSEFPet(name string, cloneID int32, swingSpeed float64) *StormEarthAndFirePet
- func (monk *Monk) NewXuen() *Xuen
- func (monk *Monk) OnEncounterStart(sim *core.Simulation)
- func (monk *Monk) RegisterOnChiSpent(onChiSpent OnChiSpent)
- func (monk *Monk) RegisterOnNewBrewStacks(onNewBrewStacks OnNewBrewStacks)
- func (monk *Monk) RegisterOnStanceChanged(onStanceChanged OnStanceChanged)
- func (monk *Monk) RegisterSEFPets()
- func (monk *Monk) Reset(sim *core.Simulation)
- func (monk *Monk) SpendChi(sim *core.Simulation, chiToSpend int32, metrics *core.ResourceMetrics)
- func (monk *Monk) StanceMatches(other Stance) bool
- func (monk *Monk) TriggerPowerStrikes(sim *core.Simulation)
- type MonkAgent
- type OnChiSpent
- type OnNewBrewStacks
- type OnStanceChanged
- type Stance
- type StormEarthAndFireController
- func (controller *StormEarthAndFireController) CastCopySpell(sim *core.Simulation, spell *core.Spell)
- func (controller *StormEarthAndFireController) PickClone(sim *core.Simulation, target *core.Unit)
- func (controller *StormEarthAndFireController) Reset(sim *core.Simulation)
- func (controller *StormEarthAndFireController) UpdateCloneDamageMultiplier(multiplier float64)
- type StormEarthAndFirePet
- func (sefClone *StormEarthAndFirePet) ExecuteCustomRotation(sim *core.Simulation)
- func (sefClone *StormEarthAndFirePet) GetPet() *core.Pet
- func (sefClone *StormEarthAndFirePet) Initialize()
- func (sefClone *StormEarthAndFirePet) OnEncounterStart(_ *core.Simulation)
- func (sefClone *StormEarthAndFirePet) Reset(_ *core.Simulation)
- type Xuen
Constants ¶
const ( SpellFlagBuilder = core.SpellFlagAgentReserved2 SpellFlagSpender = core.SpellFlagAgentReserved3 )
const ( DDBC_RisingSunKick int = iota DDBC_RisingSunKickSEF int = iota DDBC_Total )
Damage Done By Caster setup Used by Windwalker Monk and SEF
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 ¶
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)}
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
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
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
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
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
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
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 (*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) ApplyAdditiveEnergyRegenBonus ¶
func (monk *Monk) ApplyAdditiveEnergyRegenBonus(sim *core.Simulation, increment float64)
func (*Monk) ApplyTalents ¶
func (monk *Monk) ApplyTalents()
func (*Monk) CalculateMonkStrikeDamage ¶
func (*Monk) ChangeStance ¶
func (monk *Monk) ChangeStance(sim *core.Simulation, newStance Stance)
func (*Monk) GetCharacter ¶
func (*Monk) GetHandType ¶
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) NewSEFPet ¶
func (monk *Monk) NewSEFPet(name string, cloneID int32, swingSpeed float64) *StormEarthAndFirePet
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) TriggerPowerStrikes ¶
func (monk *Monk) TriggerPowerStrikes(sim *core.Simulation)
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 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 ¶
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) 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)
Source Files
¶
- apl_values.go
- attack.go
- blackout_kick.go
- crackling_jade_lightning.go
- expel_harm.go
- fortifying_brew.go
- glyphs.go
- healing_sphere.go
- items.go
- jab.go
- monk.go
- passives.go
- spinning_crane_kick.go
- stances.go
- talents.go
- tiger_palm.go
- touch_of_death.go
- ww_combat_conditioning.go
- ww_fists_of_fury.go
- ww_rising_sun_kick.go
- ww_spinning_fire_blossom.go
- ww_storm_earth_and_fire.go
- ww_tiger_strikes.go
- xuen_pet.go