Documentation
¶
Index ¶
- Constants
- Variables
- type Druid
- func (druid *Druid) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (druid *Druid) ApplyTalents()
- func (druid *Druid) BearArmorMultiplier() float64
- func (druid *Druid) CurrentFerociousBiteCost() float64
- func (druid *Druid) CurrentRakeCost() float64
- func (druid *Druid) CurrentRipCost() float64
- func (druid *Druid) GetCatWeapon() core.Weapon
- func (druid *Druid) GetCharacter() *core.Character
- func (druid *Druid) GetDynamicPredStrikeStats() stats.Stats
- func (druid *Druid) GetForm() DruidForm
- func (druid *Druid) GetFormShiftStats() stats.Stats
- func (druid *Druid) InForm(form DruidForm) bool
- func (druid *Druid) Initialize()
- func (druid *Druid) RegisterBalanceSpells()
- func (druid *Druid) RegisterFeralCatSpells()
- func (druid *Druid) RegisterFeralTankSpells()
- func (druid *Druid) RegisterSpell(formMask DruidForm, config core.SpellConfig) *DruidSpell
- func (druid *Druid) Reset(_ *core.Simulation)
- func (druid *Druid) ShouldFaerieFire(sim *core.Simulation, target *core.Unit) bool
- func (druid *Druid) ThickHideMultiplier() float64
- type DruidAgent
- type DruidForm
- type DruidSpell
- type FerociousBiteRankInfo
- type RakeRankInfo
- type RipRankInfo
- type SelfBuffs
Constants ¶
View Source
const ( SpellFlagOmen = core.SpellFlagAgentReserved1 SpellFlagBuilder = core.SpellFlagAgentReserved2 )
View Source
const ( SpellCode_DruidNone int32 = iota SpellCode_DruidClaw SpellCode_DruidFaerieFire SpellCode_DruidFaerieFireFeral SpellCode_DruidFerociousBite SpellCode_DruidInsectSwarm SpellCode_DruidMoonfire SpellCode_DruidRake SpellCode_DruidRip SpellCode_DruidShred SpellCode_DruidStarfire SpellCode_DruidWrath )
View Source
const ( WolfsheadHelm = 8345 IdolOfFerocity = 22397 IdolOfTheMoon = 23197 IdolOfBrutality = 23198 RuneOfMetamorphosis = 19340 )
Item IDs
View Source
const InsectSwarmRanks = 5
View Source
const MoonfireRanks = 10
View Source
const RipTicks int32 = 6
View Source
const StarfireRanks = 7
View Source
const SwipeRanks = 5
View Source
const SwipeThreatMultiplier = 2.0
See https://www.wowhead.com/classic/spell=436895/s03-tuning-and-overrides-passive-druid Modifies Threat +101%:
View Source
const WrathRanks = 8
Variables ¶
View Source
var InsectSwarmBaseDamage = [InsectSwarmRanks + 1]float64{0, 66, 138, 174, 264, 324}
View Source
var InsectSwarmLevel = [InsectSwarmRanks + 1]int{0, 20, 30, 40, 50, 60}
View Source
var InsectSwarmManaCost = [InsectSwarmRanks + 1]float64{0, 45, 85, 100, 140, 160}
View Source
var InsectSwarmSpellId = [InsectSwarmRanks + 1]int32{0, 5570, 24974, 24975, 24976, 24977}
View Source
var ItemSetCenarionRaiment = core.NewItemSet(core.ItemSet{ Name: "Cenarion Raiment", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { }, 5: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellCrit, 2*core.SpellCritRatingPerCritChance) }, 8: func(agent core.Agent) { }, }, })
View Source
var ItemSetChampionsRefuge = core.NewItemSet(core.ItemSet{ Name: "Champion's Refuge", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.AttackPower, 40) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
View Source
var ItemSetFeralheartRaiment = core.NewItemSet(core.ItemSet{ Name: "Feralheart Raiment", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddResistances(8) }, 4: func(agent core.Agent) { c := agent.GetCharacter() actionID := core.ActionID{SpellID: 27781} manaMetrics := c.NewManaMetrics(actionID) energyMetrics := c.NewEnergyMetrics(actionID) rageMetrics := c.NewRageMetrics(actionID) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "Nature's Bounty (Mana)", Callback: core.CallbackOnCastComplete, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, ProcChance: 0.02, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { c.AddMana(sim, 300, manaMetrics) }, }) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "Nature's Bounty (Energy)", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, ProcMask: core.ProcMaskMeleeWhiteHit, ProcChance: 0.02, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { if c.HasEnergyBar() { c.AddEnergy(sim, 40, energyMetrics) } }, }) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "Nature's Bounty (Rage)", Callback: core.CallbackOnSpellHitTaken, ProcMask: core.ProcMaskMelee, ProcChance: 0.02, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { if c.HasRageBar() { c.AddRage(sim, 10, rageMetrics) } }, }) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellPower, 15) c.AddStat(stats.AttackPower, 26) }, 8: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Armor, 200) }, }, })
View Source
var ItemSetFieldMarshalsSanctuary = core.NewItemSet(core.ItemSet{ Name: "Field Marshal's Sanctuary", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, 3: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.AttackPower, 40) c.AddStat(stats.RangedAttackPower, 40) }, }, })
View Source
var ItemSetLieutenantCommandersRefuge = core.NewItemSet(core.ItemSet{ Name: "Lieutenant Commander's Refuge", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.AttackPower, 40) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
View Source
var ItemSetStormrageRaiment = core.NewItemSet(core.ItemSet{ Name: "Stormrage Raiment", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() c.PseudoStats.SpiritRegenRateCasting += .15 }, 5: func(agent core.Agent) { }, 8: func(agent core.Agent) { }, }, })
View Source
var ItemSetSymbolsOfUnendingLife = core.NewItemSet(core.ItemSet{ Name: "Symbols of Unending Life", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() actionID := core.ActionID{SpellID: 26107} energyMetrics := c.NewEnergyMetrics(actionID) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "Symbols of Unending Life Finisher Bonus", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeMiss | core.OutcomeDodge | core.OutcomeBlock | core.OutcomeParry, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { if spell.SpellCode == SpellCode_DruidFerociousBite || spell.SpellCode == SpellCode_DruidRip { c.AddEnergy(sim, 30, energyMetrics) } }, }) }, }, })
View Source
var ItemSetWarlordsSanctuary = core.NewItemSet(core.ItemSet{ Name: "Warlord's Sanctuary", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, 3: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.AttackPower, 40) c.AddStat(stats.RangedAttackPower, 40) }, }, })
View Source
var ItemSetWildheartRaiment = core.NewItemSet(core.ItemSet{ Name: "Wildheart Raiment", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Armor, 200) }, 4: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.AttackPower, 26) c.AddStat(stats.SpellPower, 15) }, 6: func(agent core.Agent) { c := agent.GetCharacter() actionID := core.ActionID{SpellID: 27781} manaMetrics := c.NewManaMetrics(actionID) energyMetrics := c.NewEnergyMetrics(actionID) rageMetrics := c.NewRageMetrics(actionID) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "Nature's Bounty (Mana)", Callback: core.CallbackOnCastComplete, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, ProcChance: 0.02, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { c.AddMana(sim, 300, manaMetrics) }, }) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "Nature's Bounty (Energy)", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, ProcMask: core.ProcMaskMeleeWhiteHit, ProcChance: 0.02, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { if c.HasEnergyBar() { c.AddEnergy(sim, 40, energyMetrics) } }, }) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "Nature's Bounty (Rage)", Callback: core.CallbackOnSpellHitTaken, ProcMask: core.ProcMaskMelee, ProcChance: 0.02, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { if c.HasRageBar() { c.AddRage(sim, 10, rageMetrics) } }, }) }, 8: func(agent core.Agent) { c := agent.GetCharacter() c.AddResistances(8) }, }, })
View Source
var MoonfireBaseDamage = [MoonfireRanks + 1][]float64{{0}, {9, 12}, {17, 21}, {30, 37}, {44, 53}, {70, 82}, {91, 108}, {117, 137}, {143, 168}, {172, 200}, {195, 228}}
View Source
var MoonfireBaseDotDamage = [MoonfireRanks + 1]float64{0, 12, 32, 52, 80, 124, 164, 212, 264, 320, 384}
View Source
var MoonfireDotTicks = [MoonfireRanks + 1]int32{0, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4}
View Source
var MoonfireLevel = [MoonfireRanks + 1]int{0, 4, 10, 16, 22, 28, 34, 40, 46, 52, 58}
View Source
var MoonfireManaCost = [MoonfireRanks + 1]float64{0, 25, 50, 75, 105, 150, 190, 235, 280, 325, 375}
View Source
var MoonfireSpellId = [MoonfireRanks + 1]int32{0, 8921, 8924, 8925, 8926, 8927, 8928, 8929, 9833, 9834, 9835}
View Source
var MoonfiresSellDotCoeff = [MoonfireRanks + 1]float64{0, .052, .081, .111, .13, .13, .13, .13, .13, .13, .13}
View Source
var MoonfiresSpellCoeff = [MoonfireRanks + 1]float64{0, .06, .094, .128, .15, .15, .15, .15, .15, .15, .15}
View Source
var StarfireBaseDamage = [StarfireRanks + 1][]float64{{0}, {95, 115}, {146, 177}, {212, 253}, {293, 348}, {378, 445}, {451, 531}, {496, 584}}
View Source
var StarfireLevel = [StarfireRanks + 1]int{0, 20, 26, 34, 42, 50, 58, 60}
View Source
var StarfireManaCost = [StarfireRanks + 1]float64{0, 95, 135, 180, 230, 275, 315, 340}
View Source
var StarfireSpellId = [StarfireRanks + 1]int32{0, 2912, 8949, 8950, 8951, 9875, 9876, 25298}
View Source
var SwipeBaseDamage = [SwipeRanks + 1]float64{0, 18, 25, 36, 60, 83}
View Source
var SwipeLevel = [SwipeRanks + 1]int{0, 16, 24, 34, 44, 54}
View Source
var SwipeSpellId = [SwipeRanks + 1]int32{0, 779, 780, 769, 9754, 9908}
View Source
var TalentTreeSizes = [3]int{16, 16, 15}
View Source
var WrathBaseDamage = [WrathRanks + 1][]float64{{0}, {13, 16}, {28, 33}, {48, 57}, {69, 79}, {108, 123}, {148, 167}, {198, 221}, {248, 277}}
View Source
var WrathCastTime = [WrathRanks + 1]int{0, 1500, 1700, 2000, 2000, 2000, 2000, 2000, 2000}
View Source
var WrathLevel = [WrathRanks + 1]int{0, 1, 6, 14, 22, 30, 38, 46, 54}
View Source
var WrathManaCost = [WrathRanks + 1]float64{0, 20, 35, 55, 70, 100, 125, 155, 180}
View Source
var WrathSpellCoeff = [WrathRanks + 1]float64{0, 0.123, 0.231, 0.443, 0.571, 0.571, 0.571, 0.571, 0.571}
View Source
var WrathSpellId = [WrathRanks + 1]int32{0, 5176, 5177, 5178, 5179, 5180, 6780, 8905, 9912}
Functions ¶
This section is empty.
Types ¶
type Druid ¶
type Druid struct {
core.Character
SelfBuffs
Talents *proto.DruidTalents
DruidSpells []*DruidSpell
StartingForm DruidForm
RebirthTiming float64
BleedsActive int
AssumeBleedActive bool
ReplaceBearMHFunc core.ReplaceMHSwing
Barkskin *DruidSpell
DemoralizingRoar *DruidSpell
Enrage *DruidSpell
FaerieFire *DruidSpell
FerociousBite *DruidSpell
ForceOfNature *DruidSpell
FrenziedRegeneration *DruidSpell
GiftOfTheWild *DruidSpell
Hurricane []*DruidSpell
Innervate *DruidSpell
InsectSwarm []*DruidSpell
Languish *DruidSpell
Maul *DruidSpell
MaulQueueSpell *DruidSpell
Moonfire []*DruidSpell
Rebirth *DruidSpell
Rake *DruidSpell
Rip *DruidSpell
Shred *DruidSpell
Claw *DruidSpell
Starfire []*DruidSpell
SwipeBear *DruidSpell
TigersFury *DruidSpell
Wrath []*DruidSpell
BearForm *DruidSpell
CatForm *DruidSpell
MoonkinForm *DruidSpell
BarkskinAura *core.Aura
BearFormAura *core.Aura
BerserkAura *core.Aura
CatFormAura *core.Aura
ClearcastingAura *core.Aura
DemoralizingRoarAuras core.AuraArray
EnrageAura *core.Aura
FaerieFireAuras core.AuraArray
FrenziedRegenerationAura *core.Aura
FurorAura *core.Aura
InsectSwarmAuras core.AuraArray
MaulQueueAura *core.Aura
MoonkinFormAura *core.Aura
NaturesGraceProcAura *core.Aura
PredatoryInstinctsAura *core.Aura
TigersFuryAura *core.Aura
BleedCategories core.ExclusiveCategoryArray
// contains filtered or unexported fields
}
func (*Druid) AddRaidBuffs ¶
func (*Druid) ApplyTalents ¶
func (druid *Druid) ApplyTalents()
func (*Druid) BearArmorMultiplier ¶
func (*Druid) CurrentFerociousBiteCost ¶
func (*Druid) CurrentRakeCost ¶
func (*Druid) CurrentRipCost ¶
func (*Druid) GetCatWeapon ¶
func (*Druid) GetCharacter ¶
func (*Druid) GetDynamicPredStrikeStats ¶
func (*Druid) GetFormShiftStats ¶
TODO: Class bonus stats for both cat and bear.
func (*Druid) Initialize ¶
func (druid *Druid) Initialize()
func (*Druid) RegisterBalanceSpells ¶
func (druid *Druid) RegisterBalanceSpells()
func (*Druid) RegisterFeralCatSpells ¶
func (druid *Druid) RegisterFeralCatSpells()
TODO: Classic feral
func (*Druid) RegisterFeralTankSpells ¶
func (druid *Druid) RegisterFeralTankSpells()
TODO: Classic feral tank
func (*Druid) RegisterSpell ¶
func (druid *Druid) RegisterSpell(formMask DruidForm, config core.SpellConfig) *DruidSpell
func (*Druid) Reset ¶
func (druid *Druid) Reset(_ *core.Simulation)
func (*Druid) ShouldFaerieFire ¶
func (*Druid) ThickHideMultiplier ¶
type DruidAgent ¶
type DruidAgent interface {
GetDruid() *Druid
}
Agent is a generic way to access underlying druid on any of the agents (for example balance druid.)
type DruidSpell ¶
func (*DruidSpell) CanCast ¶
func (ds *DruidSpell) CanCast(sim *core.Simulation, target *core.Unit) bool
func (*DruidSpell) IsReady ¶
func (ds *DruidSpell) IsReady(sim *core.Simulation) bool
type FerociousBiteRankInfo ¶
type FerociousBiteRankInfo struct {
// contains filtered or unexported fields
}
type RakeRankInfo ¶
type RakeRankInfo struct {
// contains filtered or unexported fields
}
type RipRankInfo ¶
type RipRankInfo struct {
// contains filtered or unexported fields
}
type SelfBuffs ¶
type SelfBuffs struct {
InnervateTarget *proto.UnitReference
}
Source Files
¶
Click to show internal directories.
Click to hide internal directories.