Documentation
¶
Index ¶
- Constants
- Variables
- type RageMultiplierCB
- type Stance
- type Warrior
- func (warrior *Warrior) AddPartyBuffs(_ *proto.PartyBuffs)
- func (warrior *Warrior) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (war *Warrior) ApplyGlyphs()
- func (warrior *Warrior) ApplyTalents()
- func (warrior *Warrior) CanApplySunderAura(target *core.Unit) bool
- func (warrior *Warrior) CastNormalizedSweepingStrikesAttack(results core.SpellResultSlice, sim *core.Simulation)
- func (warrior *Warrior) GetCharacter() *core.Character
- func (warrior *Warrior) GetCriticalBlockChance() float64
- func (warrior *Warrior) GetRageMultiplier(target *core.Unit) float64
- func (warrior *Warrior) HasMajorGlyph(glyph proto.WarriorMajorGlyph) bool
- func (warrior *Warrior) HasMinorGlyph(glyph proto.WarriorMinorGlyph) bool
- func (warrior *Warrior) Initialize()
- func (warrior *Warrior) MakeShoutSpellHelper(actionID core.ActionID, spellMask int64, allyAuras core.AuraArray) *core.Spell
- func (warrior *Warrior) Reset(_ *core.Simulation)
- func (warrior *Warrior) StanceMatches(other Stance) bool
- func (warrior *Warrior) TryApplySunderArmorEffect(sim *core.Simulation, target *core.Unit)
- type WarriorAgent
- type WarriorInputs
Constants ¶
View Source
const ( SpellMaskNone int64 = 0 // Abilities that don't cost rage and aren't attacks SpellMaskBattleShout int64 = 1 << iota SpellMaskCommandingShout SpellMaskBerserkerRage SpellMaskRallyingCry SpellMaskRecklessness SpellMaskShieldWall SpellMaskLastStand SpellMaskCharge SpellMaskSkullBanner SpellMaskDemoralizingBanner SpellMaskAvatar SpellMaskDemoralizingShout // Special attacks SpellMaskSweepingStrikes SpellMaskSweepingStrikesHit SpellMaskSweepingStrikesNormalizedHit SpellMaskCleave SpellMaskColossusSmash SpellMaskExecute SpellMaskHeroicStrike SpellMaskHeroicThrow SpellMaskOverpower SpellMaskRevenge SpellMaskShatteringThrow SpellMaskSlam SpellMaskSweepingSlam SpellMaskSunderArmor SpellMaskThunderClap SpellMaskWhirlwind SpellMaskWhirlwindOh SpellMaskShieldBarrier SpellMaskShieldSlam SpellMaskDevastate SpellMaskBloodthirst SpellMaskRagingBlow SpellMaskRagingBlowMH SpellMaskRagingBlowOH SpellMaskMortalStrike SpellMaskHeroicLeap SpellMaskWildStrike SpellMaskShieldBlock // Talents SpellMaskImpendingVictory SpellMaskBladestorm SpellMaskBladestormMH SpellMaskBladestormOH SpellMaskDragonRoar SpellMaskBloodbath SpellMaskBloodbathDot SpellMaskStormBolt SpellMaskStormBoltOH SpellMaskShockwave SpellMaskShouts = SpellMaskCommandingShout | SpellMaskBattleShout )
View Source
const EnrageTag = "EnrageEffect"
View Source
const ShoutExpirationThreshold = time.Second * 3
View Source
const (
SpellFlagBleed = core.SpellFlagAgentReserved1
)
Variables ¶
View Source
var ItemSetBattleplateOfResoundingRings = core.NewItemSet(core.ItemSet{ Name: "Battleplate of Resounding Rings", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachSpellMod(core.SpellModConfig{ ClassMask: SpellMaskMortalStrike | SpellMaskBloodthirst, Kind: core.SpellMod_DamageDone_Pct, FloatValue: 0.25, }) setBonusAura.ExposeToAPL(123142) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachSpellMod(core.SpellModConfig{ ClassMask: SpellMaskRecklessness, Kind: core.SpellMod_Cooldown_Flat, TimeValue: -90 * time.Second, }) setBonusAura.ExposeToAPL(123144) }, }, })
T14 - DPS
View Source
var ItemSetBattleplateOfTheLastMogu = core.NewItemSet(core.ItemSet{ Name: "Battleplate of the Last Mogu", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Warrior T15 DPS 2P Bonus", ActionID: core.ActionID{SpellID: 138120}, ICD: 250 * time.Millisecond, DPM: war.NewSetBonusRPPMProcManager(138120, setBonusAura, core.ProcMaskMeleeWhiteHit, core.RPPMConfig{ PPM: 1.1, }.WithSpecMod(-0.625, proto.Spec_SpecFuryWarrior)), Outcome: core.OutcomeHit, Callback: core.CallbackOnSpellHitDealt, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { war.EnrageAura.Deactivate(sim) war.EnrageAura.Activate(sim) }, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() aura := war.RegisterAura(core.Aura{ Label: "Skull Banner - T15 4P Bonus", ActionID: core.ActionID{SpellID: 138127}, Duration: 10 * time.Second, }).AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 35, }) war.OnSpellRegistered(func(spell *core.Spell) { if !spell.Matches(SpellMaskSkullBanner) { return } war.SkullBannerAura.AttachDependentAura(aura) }) setBonusAura.ExposeToAPL(138126) }, }, })
T15 - DPS
View Source
var ItemSetBattleplateOfThePrehistoricMarauder = core.NewItemSet(core.ItemSet{ Name: "Battleplate of the Prehistoric Marauder", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 144438} rageMetrics := war.NewRageMetrics(actionID) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Colossal Rage", ActionID: actionID, ProcMask: core.ProcMaskMeleeSpecial, Outcome: core.OutcomeHit, Callback: core.CallbackOnSpellHitDealt, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if war.ColossusSmashAuras.Get(result.Target).IsActive() { war.AddRage(sim, 5, rageMetrics) } }, }) setBonusAura.ExposeToAPL(144436) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() costMod := war.AddDynamicMod(core.SpellModConfig{ ClassMask: SpellMaskExecute, Kind: core.SpellMod_PowerCost_Flat, IntValue: -30, }) war.T16Dps4P = war.RegisterAura(core.Aura{ Label: "Death Sentence", ActionID: core.ActionID{SpellID: 144442}, Duration: 12 * time.Second, }).ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { if sim.IsExecutePhase20() { costMod.Activate() } }).ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { costMod.Deactivate() }) core.MakeProcTriggerAura(&war.Unit, core.ProcTrigger{ Name: "Death Sentence - Consume", ClassSpellMask: SpellMaskExecute, Callback: core.CallbackOnCastComplete, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { war.T16Dps4P.Deactivate(sim) }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Death Sentence - Trigger", ActionID: core.ActionID{SpellID: 144442}, ClassSpellMask: SpellMaskMortalStrike | SpellMaskBloodthirst, Outcome: core.OutcomeHit, ProcChance: 0.1, Callback: core.CallbackOnSpellHitDealt, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { war.T16Dps4P.Activate(sim) }, }) setBonusAura.ExposeToAPL(144441) }, }, })
T16 - DPS
View Source
var ItemSetPlaceOfTheLastMogu = core.NewItemSet(core.ItemSet{ Name: "Plate of the Last Mogu", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() war.T15Tank2P = setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Victorious - T15 Protection 2P Bonus", ActionID: core.ActionID{SpellID: 138279}, ClassSpellMask: SpellMaskRevenge | SpellMaskShieldSlam, ProcChance: 0.1, Outcome: core.OutcomeHit, Callback: core.CallbackOnSpellHitDealt, Duration: 15 * time.Second, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { war.VictoryRushAura.Activate(sim) }, }) setBonusAura.ExposeToAPL(138280) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() war.T15Tank4P = setBonusAura setBonusAura.ExposeToAPL(138281) }, }, })
T15 - Tank
View Source
var ItemSetPlateOfResoundingRings = core.NewItemSet(core.ItemSet{ Name: "Plate of Resounding Rings", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachSpellMod(core.SpellModConfig{ ClassMask: SpellMaskLastStand, Kind: core.SpellMod_Cooldown_Flat, TimeValue: -60 * time.Second, }) setBonusAura.ExposeToAPL(123146) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() war.T14Tank2P = setBonusAura setBonusAura.AttachSpellMod(core.SpellModConfig{ ClassMask: SpellMaskShieldBlock, Kind: core.SpellMod_PowerCost_Flat, IntValue: -5, }) setBonusAura.ExposeToAPL(123147) }, }, })
T14 - Tank
View Source
var ItemSetPlateOfThePrehistoricMarauder = core.NewItemSet(core.ItemSet{ Name: "Plate of the Prehistoric Marauder", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() healthMetrics := war.NewHealthMetrics(core.ActionID{SpellID: 144503}) war.OnSpellRegistered(func(spell *core.Spell) { if !spell.Matches(SpellMaskShieldBarrier) { return } war.ShieldBarrierAura.Aura.ApplyOnStacksChange(func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { if setBonusAura.IsActive() { absorbLoss := float64(oldStacks - newStacks) war.GainHealth(sim, absorbLoss*0.3, healthMetrics) } }) }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Warrior T16 Tank 2P Bonus", Callback: core.CallbackOnSpellHitTaken, Outcome: core.OutcomeBlock, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { blockDamageReduction := result.Target.BlockDamageReduction() preBlockDamage := result.Damage / (1 - blockDamageReduction) * blockDamageReduction blockedDamage := result.Damage - preBlockDamage war.GainHealth(sim, blockedDamage*0.3, healthMetrics) }, }) setBonusAura.ExposeToAPL(144503) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { war := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 144500} rageMetrics := war.NewRageMetrics(actionID) aura := war.RegisterAura(core.Aura{ Label: "Reckless Defense", ActionID: actionID, Duration: 10 * time.Second, }) for _, aura := range war.DemoralizingShoutAuras { aura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { if setBonusAura.IsActive() { aura.Activate(sim) } }) } war.AddDynamicDamageTakenModifier(func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult, isPeriodic bool) { if aura.IsActive() { war.AddRage(sim, result.Damage/war.MaxHealth()*100, rageMetrics) } }) setBonusAura.ExposeToAPL(144502) }, }, })
T16 - Tank
Functions ¶
This section is empty.
Types ¶
type RageMultiplierCB ¶
type RageMultiplierCB func() float64
Rather than update a variable somewhere for one effect (Fury's Unshackled Fury) just take a callback to fetch its multiplier when needed
type Warrior ¶
type Warrior struct {
core.Character
ClassSpellScaling float64
Talents *proto.WarriorTalents
WarriorInputs
// Current state
Stance Stance
CriticalBlockChance []float64 // Can be gained as non-prot via certain talents and spells
HeroicStrikeCleaveCostMod *core.SpellMod
BattleShout *core.Spell
CommandingShout *core.Spell
BattleStance *core.Spell
DefensiveStance *core.Spell
BerserkerStance *core.Spell
ColossusSmash *core.Spell
MortalStrike *core.Spell
DeepWounds *core.Spell
ShieldSlam *core.Spell
SweepingStrikesNormalizedAttack *core.Spell
BattleStanceAura *core.Aura
DefensiveStanceAura *core.Aura
BerserkerStanceAura *core.Aura
InciteAura *core.Aura
UltimatumAura *core.Aura
SweepingStrikesAura *core.Aura
EnrageAura *core.Aura
BerserkerRageAura *core.Aura
ShieldBlockAura *core.Aura
LastStandAura *core.Aura
RallyingCryAura *core.Aura
VictoryRushAura *core.Aura
SwordAndBoardAura *core.Aura
ShieldBarrierAura *core.DamageAbsorptionAura
SkullBannerAura *core.Aura
DemoralizingBannerAuras core.AuraArray
DemoralizingShoutAuras core.AuraArray
SunderArmorAuras core.AuraArray
ThunderClapAuras core.AuraArray
ColossusSmashAuras core.AuraArray
WeakenedArmorAuras core.AuraArray
// Set Bonuses
T14Tank2P *core.Aura
T15Tank2P *core.Aura
T15Tank4P *core.Aura
T16Dps4P *core.Aura
// contains filtered or unexported fields
}
func NewWarrior ¶
func NewWarrior(character *core.Character, options *proto.WarriorOptions, talents string, inputs WarriorInputs) *Warrior
func (*Warrior) AddPartyBuffs ¶
func (warrior *Warrior) AddPartyBuffs(_ *proto.PartyBuffs)
func (*Warrior) AddRaidBuffs ¶
func (*Warrior) ApplyGlyphs ¶
func (war *Warrior) ApplyGlyphs()
func (*Warrior) ApplyTalents ¶
func (warrior *Warrior) ApplyTalents()
func (*Warrior) CanApplySunderAura ¶
func (*Warrior) CastNormalizedSweepingStrikesAttack ¶ added in v0.0.5
func (warrior *Warrior) CastNormalizedSweepingStrikesAttack(results core.SpellResultSlice, sim *core.Simulation)
func (*Warrior) GetCharacter ¶
func (*Warrior) GetCriticalBlockChance ¶
func (*Warrior) GetRageMultiplier ¶
Used for T15 Protection 4P bonus.
func (*Warrior) HasMajorGlyph ¶
func (warrior *Warrior) HasMajorGlyph(glyph proto.WarriorMajorGlyph) bool
func (*Warrior) HasMinorGlyph ¶
func (warrior *Warrior) HasMinorGlyph(glyph proto.WarriorMinorGlyph) bool
func (*Warrior) Initialize ¶
func (warrior *Warrior) Initialize()
func (*Warrior) MakeShoutSpellHelper ¶
func (*Warrior) Reset ¶
func (warrior *Warrior) Reset(_ *core.Simulation)
func (*Warrior) StanceMatches ¶
func (*Warrior) TryApplySunderArmorEffect ¶
func (warrior *Warrior) TryApplySunderArmorEffect(sim *core.Simulation, target *core.Unit)
type WarriorAgent ¶
type WarriorAgent interface {
GetWarrior() *Warrior
}
Agent is a generic way to access underlying warrior on any of the agents.
type WarriorInputs ¶
type WarriorInputs struct {
StanceSnapshot bool
}
Source Files
¶
- banners.go
- berserker_rage.go
- charge.go
- colossus_smash.go
- execute.go
- glyphs.go
- heroic_leap.go
- heroic_strike_cleave.go
- heroic_throw.go
- items.go
- passives.go
- rallying_cry.go
- recklessness.go
- shattering_throw.go
- shield_wall.go
- shouts.go
- stances.go
- sunder_armor.go
- talents.go
- thunder_clap.go
- victory_rush.go
- warrior.go
- whirlwind.go
Click to show internal directories.
Click to hide internal directories.