Documentation
¶
Index ¶
- Constants
- Variables
- type SelfBuffs
- type Shaman
- func (shaman *Shaman) AddPartyBuffs(partyBuffs *proto.PartyBuffs)
- func (shaman *Shaman) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (shaman *Shaman) ApplyFlametongueImbue(mh bool, oh bool)
- func (shaman *Shaman) ApplyFrostbrandImbue(mh bool, oh bool)
- func (shaman *Shaman) ApplyRockbiterImbue(mh bool, oh bool)
- func (shaman *Shaman) ApplyTalents()
- func (shaman *Shaman) ApplyWindfuryImbue(mh bool, oh bool)
- func (shaman *Shaman) BloodlustActionID() core.ActionID
- func (shaman *Shaman) ElementalCritMultiplier() float64
- func (shaman *Shaman) FireNovaTickLength() time.Duration
- func (shaman *Shaman) GetCharacter() *core.Character
- func (shaman *Shaman) Initialize()
- func (shaman *Shaman) NextTotemAt(sim *core.Simulation) time.Duration
- func (shaman *Shaman) Reset(sim *core.Simulation)
- func (shaman *Shaman) ShockCD() time.Duration
- func (shaman *Shaman) TryDropTotems(sim *core.Simulation) bool
- type ShamanAgent
Constants ¶
View Source
const ( StormfuryTotem = 31031 TotemOfAncestralGuidance = 32330 TotemOfImpact = 27947 TotemOfStorms = 23199 TotemOfThePulsingEarth = 29389 TotemOfTheVoid = 28248 TotemOfRage = 22395 )
Totem Item IDs
View Source
const ( SpellFlagShock = core.SpellFlagAgentReserved1 SpellFlagElectric = core.SpellFlagAgentReserved2 SpellFlagTotem = core.SpellFlagAgentReserved3 )
View Source
const ( AirTotem int = iota EarthTotem FireTotem WaterTotem )
Indexes into NextTotemDrops for self buffs
View Source
const (
CastTagLightningOverload int32 = 1 // This could be value or bitflag if we ended up needing multiple flags at the same time.
)
View Source
const TotemRefreshTime2M = time.Second * 115
Start looking to refresh 2 minute totems at 1:55.
Variables ¶
View Source
var ItemSetCataclysmHarness = core.NewItemSet(core.ItemSet{ Name: "Cataclysm Harness", Bonuses: map[int32]core.ApplyEffect{ 4: func(agent core.Agent) { }, }, })
View Source
var ItemSetCataclysmRegalia = core.NewItemSet(core.ItemSet{ Name: "Cataclysm Regalia", Bonuses: map[int32]core.ApplyEffect{ 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() manaMetrics := shaman.NewManaMetrics(core.ActionID{SpellID: 37237}) shaman.RegisterAura(core.Aura{ Label: "Cataclysm Regalia 4pc", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { aura.Activate(sim) }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, spellEffect *core.SpellEffect) { if spellEffect.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { return } if !spellEffect.Outcome.Matches(core.OutcomeCrit) || sim.RandomFloat("cata4p") > 0.25 { return } shaman.AddMana(sim, 120, manaMetrics, false) }, }) }, }, })
View Source
var ItemSetCycloneHarness = core.NewItemSet(core.ItemSet{ Name: "Cyclone Harness", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, }, })
View Source
var ItemSetCycloneRegalia = core.NewItemSet(core.ItemSet{ Name: "Cyclone Regalia", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() procAura := shaman.RegisterAura(core.Aura{ Label: "Cyclone Regalia 4pc Proc", Duration: time.Second * 15, OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.PseudoStats.CostReduction += 270 }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.PseudoStats.CostReduction -= 270 }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { aura.Deactivate(sim) }, }) shaman.RegisterAura(core.Aura{ Label: "Cyclone Regalia 4pc", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { aura.Activate(sim) }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, spellEffect *core.SpellEffect) { if spellEffect.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { return } if !spellEffect.Outcome.Matches(core.OutcomeCrit) || sim.RandomFloat("cycl4p") > 0.11 { return } procAura.Activate(sim) }, }) }, }, })
View Source
var ItemSetSkyshatterHarness = core.NewItemSet(core.ItemSet{ Name: "Skyshatter Harness", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, }, })
View Source
var ItemSetSkyshatterRegalia = core.NewItemSet(core.ItemSet{ Name: "Skyshatter Regalia", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() if shaman.Totems.Air == proto.AirTotem_NoAirTotem || shaman.Totems.Water == proto.WaterTotem_NoWaterTotem || shaman.Totems.Earth == proto.EarthTotem_NoEarthTotem || shaman.Totems.Fire == proto.FireTotem_NoFireTotem { return } shaman.AddStat(stats.MP5, 15) shaman.AddStat(stats.SpellCrit, 35) shaman.AddStat(stats.SpellPower, 45) }, 4: func(agent core.Agent) { }, }, })
View Source
var ItemSetTidefury = core.NewItemSet(core.ItemSet{ Name: "Tidefury Raiment", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() if shaman.SelfBuffs.WaterShield { shaman.AddStat(stats.MP5, 3) } }, }, })
View Source
var StormstrikeActionID = core.ActionID{SpellID: 17364}
View Source
var TotemOfTheAstralWinds int32 = 27815
Functions ¶
This section is empty.
Types ¶
type SelfBuffs ¶
type SelfBuffs struct {
Bloodlust bool
WaterShield bool
SnapshotWOAT42Pc bool
SnapshotSOET42Pc bool
}
Which buffs this shaman is using.
type Shaman ¶
type Shaman struct {
core.Character
Talents proto.ShamanTalents
SelfBuffs SelfBuffs
Totems proto.ShamanTotems
// The type of totem which should be dropped next and time to drop it, for
// each totem type (earth, air, fire, water).
NextTotemDropType [4]int32
NextTotemDrops [4]time.Duration
LightningBolt *core.Spell
LightningBoltLO *core.Spell
ChainLightning *core.Spell
ChainLightningLOs []*core.Spell
Stormstrike *core.Spell
EarthShock *core.Spell
FlameShock *core.Spell
FrostShock *core.Spell
FireNovaTotem *core.Spell
GraceOfAirTotem *core.Spell
MagmaTotem *core.Spell
ManaSpringTotem *core.Spell
SearingTotem *core.Spell
StrengthOfEarthTotem *core.Spell
TotemOfWrath *core.Spell
TranquilAirTotem *core.Spell
TremorTotem *core.Spell
WindfuryTotem *core.Spell
WrathOfAirTotem *core.Spell
FlameShockDot *core.Dot
SearingTotemDot *core.Dot
MagmaTotemDot *core.Dot
FireNovaTotemDot *core.Dot
ClearcastingAura *core.Aura
ElementalMasteryAura *core.Aura
NaturesSwiftnessAura *core.Aura
ShamanisticFocusAura *core.Aura
}
Shaman represents a shaman character.
func NewShaman ¶
func NewShaman(character core.Character, talents proto.ShamanTalents, totems proto.ShamanTotems, selfBuffs SelfBuffs) *Shaman
func (*Shaman) AddPartyBuffs ¶
func (shaman *Shaman) AddPartyBuffs(partyBuffs *proto.PartyBuffs)
func (*Shaman) AddRaidBuffs ¶
func (*Shaman) ApplyFlametongueImbue ¶
func (*Shaman) ApplyFrostbrandImbue ¶
func (*Shaman) ApplyRockbiterImbue ¶
func (*Shaman) ApplyTalents ¶
func (shaman *Shaman) ApplyTalents()
func (*Shaman) ApplyWindfuryImbue ¶
func (*Shaman) BloodlustActionID ¶
func (*Shaman) ElementalCritMultiplier ¶
func (*Shaman) FireNovaTickLength ¶
func (*Shaman) GetCharacter ¶
func (*Shaman) Initialize ¶
func (shaman *Shaman) Initialize()
func (*Shaman) NextTotemAt ¶
func (shaman *Shaman) NextTotemAt(sim *core.Simulation) time.Duration
func (*Shaman) Reset ¶
func (shaman *Shaman) Reset(sim *core.Simulation)
func (*Shaman) TryDropTotems ¶
func (shaman *Shaman) TryDropTotems(sim *core.Simulation) bool
TryDropTotems will check to see if totems need to be re-cast.
Returns whether we tried to cast a totem, regardless of whether it succeeded.
type ShamanAgent ¶
type ShamanAgent interface {
core.Agent
// The Shaman controlled by this Agent.
GetShaman() *Shaman
}
Implemented by each Shaman spec.
Source Files
¶
Click to show internal directories.
Click to hide internal directories.