Documentation ¶
Index ¶
- Constants
- Variables
- type Druid
- func (druid *Druid) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (druid *Druid) ApplyRunes()
- func (druid *Druid) ApplyTalents()
- func (druid *Druid) BearArmorMultiplier() float64
- func (druid *Druid) CanShred() bool
- func (druid *Druid) CurrentFerociousBiteCost() float64
- func (druid *Druid) CurrentMangleCatCost() float64
- func (druid *Druid) CurrentRakeCost() float64
- func (druid *Druid) CurrentRipCost() float64
- func (druid *Druid) CurrentSavageRoarCost() float64
- func (druid *Druid) CurrentShredCost() float64
- func (druid *Druid) CurrentSwipeCatCost() float64
- func (druid *Druid) GetCatWeapon(level int32) 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) HasRune(rune proto.DruidRune) bool
- func (druid *Druid) InForm(form DruidForm) bool
- func (druid *Druid) Initialize()
- func (druid *Druid) IsMangle(spell *core.Spell) bool
- func (druid *Druid) NewT2Treants() *T2Treants
- 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
- type T2Treants
Constants ¶
const ( SpellFlagOmen = core.SpellFlagAgentReserved1 SpellFlagBuilder = core.SpellFlagAgentReserved2 )
const ( SpellCode_DruidNone int32 = iota SpellCode_DruidFaerieFire SpellCode_DruidFaerieFireFeral SpellCode_DruidFerociousBite SpellCode_DruidInsectSwarm SpellCode_DruidMangleCat SpellCode_DruidMangleBear SpellCode_DruidMoonfire SpellCode_DruidRake SpellCode_DruidRip SpellCode_DruidShred SpellCode_DruidStarfire SpellCode_DruidStarsurge SpellCode_DruidWrath SpellCode_DruidStarfall SpellCode_DruidStarfallTick SpellCode_DruidStarfallSplash SpellCode_DruidSunfire )
const ( WolfsheadHelm = 8345 IdolOfFerocity = 22397 IdolOfTheMoon = 23197 IdolOfBrutality = 23198 IdolMindExpandingMushroom = 209576 Catnip = 213407 IdolOfWrath = 216490 BloodBarkCrusher = 216499 IdolOfTheDream = 220606 RitualistsHammer = 221446 Glasir = 224281 Raelar = 224282 IdolOfExsanguinationCat = 228181 IdolOfTheSwarm = 228180 IdolOfExsanguinationBear = 228182 BloodGuardDragonhideGrips = 227180 KnightLieutenantsDragonhideGrips = 227183 WushoolaysCharmOfNature = 231280 PristineEnchantedSouthSeasKelp = 231316 IdolOfCelestialFocus = 232390 IdolOfFelineFocus = 232391 IdolOfUrsinPower = 234468 IdolOfFelineFerocity = 234469 IdolOfSiderealWrath = 234474 )
Totem Item IDs
const ( Gore_BearResetProcChance = .15 Gore_CatResetProcChance = .15 )
const ( ElunesFires_BonusMoonfireTime = time.Second * 6 ElunesFires_BonusSunfireTime = time.Second * 3 ElunesFires_BonusRipTime = time.Second * 2 )
const InsectSwarmRanks = 5
const MoonfireRanks = 10
const RakeAPCoef = 0.05
Rake given 5% AP scaling in SoD
const RakeBaseDmgModifier = 1.25
See https://www.wowhead.com/classic/spell=436895/s03-tuning-and-overrides-passive-druid Mod Eff# should be base value only. Modifies Effect #1's Value +126%: Modifies Effect #2's Value +126%:
const RipBaseDamageMultiplier = 1.5
const RipDamageCoefPerAPPerCP = 0.015
See https://www.wowhead.com/classic/news/development-notes-for-phase-4-ptr-season-of-discovery-new-runes-class-changes-342896 - Rake and Rip damage contributions from attack power increased by roughly 50%. PTR testing comes out to .0165563 AP scaling per CP damageCoefPerCP := 0.01
const RipTicks int32 = 8
See https://www.wowhead.com/classic/spell=436895/s03-tuning-and-overrides-passive-druid Modifies Buff Duration +4001: Modifies Periodic Damage/Healing Done +51%: const RipTicks int32 = 6
const ShredFlatDmgMultiplier = .75 // decreases flat damage modifier multiplicatively by -25% to counteract 3.0/2.25 overall scaling buff
const ShredWeaponMultiplierBuff = 0.75 // increases multiplier additively by 75% from 2.25 to 3.0
See https://www.wowhead.com/classic/spell=436895/s03-tuning-and-overrides-passive-druid Modifies Effect #1's Value -24%: Modifies Effect #2's Value +76:
const StarfireRanks = 7
const SunfireTicks = int32(4)
const SwipeRanks = 5
const SwipeThreatMultiplier = 2.0
See https://www.wowhead.com/classic/spell=436895/s03-tuning-and-overrides-passive-druid Modifies Threat +101%:
const WrathRanks = 8
Variables ¶
var InsectSwarmBaseDamage = [InsectSwarmRanks + 1]float64{0, 66, 138, 174, 264, 324}
var InsectSwarmLevel = [InsectSwarmRanks + 1]int{0, 20, 30, 40, 50, 60}
var InsectSwarmManaCost = [InsectSwarmRanks + 1]float64{0, 45, 85, 100, 140, 160}
var InsectSwarmSpellId = [InsectSwarmRanks + 1]int32{0, 5570, 24974, 24975, 24976, 24977}
var ItemSetBloodGuardsCracklingLeather = core.NewItemSet(core.ItemSet{ Name: "Blood Guard's Crackling Leather", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 15) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellPower, 18) }, }, })
var ItemSetBloodGuardsRestoredLeather = core.NewItemSet(core.ItemSet{ Name: "Blood Guard's Restored Leather", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 15) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.HealingPower, 33) }, }, })
var ItemSetBountyOfStormrage = core.NewItemSet(core.ItemSet{ Name: "Bounty of Stormrage", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { }, }, })
var ItemSetCenarionBounty = core.NewItemSet(core.ItemSet{ Name: "Cenarion Bounty", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { }, }, })
var ItemSetCenarionCunning = core.NewItemSet(core.ItemSet{ Name: "Cenarion Cunning", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT1Feral2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT1Feral4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT1Feral6PBonus() }, }, })
var ItemSetCenarionEclipse = core.NewItemSet(core.ItemSet{ Name: "Cenarion Eclipse", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT1Balance4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT1Balance6PBonus() }, }, })
var ItemSetCenarionRage = core.NewItemSet(core.ItemSet{ Name: "Cenarion Rage", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT1Guardian6PBonus() }, }, })
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.HealingPower, 44) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
var ItemSetChampionsSanctuary = core.NewItemSet(core.ItemSet{ Name: "Champion's Sanctuary", 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) }, }, })
var ItemSetChampionsWildhide = core.NewItemSet(core.ItemSet{ Name: "Champion's Wildhide", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellPower, 23) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
var ItemSetCoagulateBloodguardsLeathers = core.NewItemSet(core.ItemSet{ Name: "Coagulate Bloodguard's Leathers", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Strength, 10) }, 3: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() procAura := druid.GetOrRegisterAura(core.Aura{ Label: "Power Shredder Proc", ActionID: core.ActionID{SpellID: 449925}, Duration: time.Second * 10, OnGain: func(aura *core.Aura, sim *core.Simulation) { druid.CatForm.Cost.Multiplier -= 30 }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { druid.CatForm.Cost.Multiplier += 30 }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { if spell == druid.CatForm.Spell { aura.Deactivate(sim) } }, }) core.MakeProcTriggerAura(&druid.Unit, core.ProcTrigger{ Name: "Power Shredder", Callback: core.CallbackOnCastComplete, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell.SpellCode == SpellCode_DruidShred { procAura.Activate(sim) } }, }) }, }, })
var ItemSetCunningOfStormrage = core.NewItemSet(core.ItemSet{ Name: "Cunning of Stormrage", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Feral2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Feral4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Feral6PBonus() }, }, })
var ItemSetDreamwalkerEclipse = core.NewItemSet(core.ItemSet{ Name: "Dreamwalker Eclipse", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasBalance2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasBalance4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasBalance6PBonus() }, }, })
var ItemSetDreamwalkerFerocity = core.NewItemSet(core.ItemSet{ Name: "Dreamwalker Ferocity", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasFeral2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasFeral4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasFeral6PBonus() }, }, })
var ItemSetDreamwalkerGuardian = core.NewItemSet(core.ItemSet{ Name: "Dreamwalker Guardian", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasGuardian2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasGuardian4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyNaxxramasGuardian6PBonus() }, }, })
var ItemSetDreamwalkerRaiment = core.NewItemSet(core.ItemSet{ Name: "Dreamwalker Raiment", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { }, }, })
var ItemSetEclipseOfStormrage = core.NewItemSet(core.ItemSet{ Name: "Eclipse of Stormrage", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Balance2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Balance4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Balance6PBonus() }, }, })
var ItemSetEmeraldDreamkeeperGarb = core.NewItemSet(core.ItemSet{ Name: "Emerald Dreamkeeper Garb", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 10) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.HealingPower, 22) }, }, })
var ItemSetEmeraldWatcherVestments = core.NewItemSet(core.ItemSet{ Name: "Emerald Watcher Vestments", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 10) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellPower, 12) }, }, })
var ItemSetExiledProphetsRaiment = core.NewItemSet(core.ItemSet{ Name: "Exiled Prophet's Raiment", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.MP5, 4) }, 3: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() if druid.HasRune(proto.DruidRune_RuneFeetDreamstate) { core.MakeProcTriggerAura(&druid.Unit, core.ProcTrigger{ Name: "Exiled Dreamer", Callback: core.CallbackOnHealDealt, ProcMask: core.ProcMaskSpellHealing, Outcome: core.OutcomeCrit, ProcChance: 0.5, Handler: func(sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { druid.DreamstateManaRegenAura.Activate(sim) }, }) } }, }, })
var ItemSetFeralheartRaiment = core.NewItemSet(core.ItemSet{ Name: "Feralheart Raiment", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStats(stats.Stats{ stats.AttackPower: 40, stats.RangedAttackPower: 40, stats.SpellDamage: 23, stats.HealingPower: 44, }) }, 4: func(agent core.Agent) { c := agent.GetCharacter() actionID := core.ActionID{SpellID: 450608} manaMetrics := c.NewManaMetrics(actionID) energyMetrics := c.NewEnergyMetrics(actionID) rageMetrics := c.NewRageMetrics(actionID) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ Name: "S03 - Druid Energize Trigger - Wildheart Raiment (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: "S03 - Druid Energize Trigger - Wildheart Raiment (Energy)", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, ProcMask: core.ProcMaskMeleeWhiteHit, ProcChance: 0.06, 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: "S03 - Druid Energize Trigger - Wildheart Raiment (Rage)", Callback: core.CallbackOnSpellHitTaken, ProcMask: core.ProcMaskMelee, ProcChance: 0.03, 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.AddResistances(8) }, 8: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Armor, 200) }, }, })
var ItemSetFieldMarshalsRefuge = core.NewItemSet(core.ItemSet{ Name: "Field Marshal's Refuge", 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.HealingPower, 88) c.AddStat(stats.SpellDamage, 15) }, }, })
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) }, }, })
var ItemSetFieldMarshalsWildhide = core.NewItemSet(core.ItemSet{ Name: "Field Marshal's Wildhide", 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.SpellPower, 23) }, }, })
var ItemSetFuryOfStormrage = core.NewItemSet(core.ItemSet{ Name: "Fury of Stormrage", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Guardian2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Guardian4PBonus() }, 6: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyT2Guardian6PBonus() }, }, })
var ItemSetGenesisBounty = core.NewItemSet(core.ItemSet{ Name: "Genesis Bounty", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, }, })
var ItemSetGenesisCunning = core.NewItemSet(core.ItemSet{ Name: "Genesis Cunning", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyTAQFeral2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyTAQFeral4PBonus() }, }, })
var ItemSetGenesisEclipse = core.NewItemSet(core.ItemSet{ Name: "Genesis Eclipse", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyTAQBalance2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyTAQBalance4PBonus() }, }, })
var ItemSetGenesisFury = core.NewItemSet(core.ItemSet{ Name: "Genesis Fury", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyTAQGuardian2PBonus() }, 4: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyTAQGuardian4PBonus() }, }, })
var ItemSetHaruspexsGarb = core.NewItemSet(core.ItemSet{ Name: "Haruspex's Garb", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellPower, 12) }, 3: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyZGBalance3PBonus() }, 5: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyZGBalance5PBonus() }, }, })
var ItemSetKnightLieutenantsCracklingLeather = core.NewItemSet(core.ItemSet{ Name: "Knight-Lieutenant's Crackling Leather", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 15) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellPower, 18) }, }, })
var ItemSetKnightLieutenantsRestoredLeather = core.NewItemSet(core.ItemSet{ Name: "Knight-Lieutenant's Restored Leather", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 15) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.HealingPower, 33) }, }, })
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.HealingPower, 44) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
var ItemSetLieutenantCommandersSanctuary = core.NewItemSet(core.ItemSet{ Name: "Lieutenant Commander's Sanctuary", 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) }, }, })
var ItemSetLieutenantCommandersWildhide = core.NewItemSet(core.ItemSet{ Name: "Lieutenant Commander's Wildhide", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.SpellPower, 23) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
var ItemSetLostWorshippersArmor = core.NewItemSet(core.ItemSet{ Name: "Lost Worshipper's Armor", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.MeleeHit, 1) c.AddStat(stats.SpellHit, 1) }, 3: func(agent core.Agent) { c := agent.GetCharacter() c.OnSpellRegistered(func(spell *core.Spell) { if spell.SpellCode == SpellCode_DruidWrath || spell.SpellCode == SpellCode_DruidStarfire { spell.BonusCritRating += 3 * core.CritRatingPerCritChance } }) }, }, })
var ItemSetSymbolsOfUnendingLife = core.NewItemSet(core.ItemSet{ Name: "Symbols of Unending Life", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { druid := agent.(DruidAgent).GetDruid() druid.applyRAQFeral3PBonus() }, }, })
var ItemSetWarlordsRefuge = core.NewItemSet(core.ItemSet{ Name: "Warlord's Refuge", 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.HealingPower, 88) c.AddStat(stats.SpellDamage, 15) }, }, })
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) }, }, })
var ItemSetWarlordsWildhide = core.NewItemSet(core.ItemSet{ Name: "Warlord's Wildhide", 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.SpellPower, 23) }, }, })
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}}
var MoonfireBaseDotDamage = [MoonfireRanks + 1]float64{0, 12, 32, 52, 80, 124, 164, 212, 264, 320, 384}
var MoonfireDotTicks = [MoonfireRanks + 1]int32{0, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4}
var MoonfireLevel = [MoonfireRanks + 1]int{0, 4, 10, 16, 22, 28, 34, 40, 46, 52, 58}
var MoonfireManaCost = [MoonfireRanks + 1]float64{0, 25, 50, 75, 105, 150, 190, 235, 280, 325, 375}
var MoonfireSpellId = [MoonfireRanks + 1]int32{0, 8921, 8924, 8925, 8926, 8927, 8928, 8929, 9833, 9834, 9835}
var MoonfiresSellDotCoeff = [MoonfireRanks + 1]float64{0, .052, .081, .111, .13, .13, .13, .13, .13, .13, .13}
var MoonfiresSpellCoeff = [MoonfireRanks + 1]float64{0, .06, .094, .128, .15, .15, .15, .15, .15, .15, .15}
var StarfireBaseDamage = [StarfireRanks + 1][]float64{{0}, {95, 115}, {146, 177}, {212, 253}, {293, 348}, {378, 445}, {451, 531}, {496, 584}}
var StarfireLevel = [StarfireRanks + 1]int{0, 20, 26, 34, 42, 50, 58, 60}
var StarfireManaCost = [StarfireRanks + 1]float64{0, 95, 135, 180, 230, 275, 315, 340}
var StarfireSpellId = [StarfireRanks + 1]int32{0, 2912, 8949, 8950, 8951, 9875, 9876, 25298}
var SwipeBaseDamage = [SwipeRanks + 1]float64{0, 18, 25, 36, 60, 83}
var SwipeLevel = [SwipeRanks + 1]int{0, 16, 24, 34, 44, 54}
var SwipeSpellId = [SwipeRanks + 1]int32{0, 779, 780, 769, 9754, 9908}
var TalentTreeSizes = [3]int{16, 16, 15}
var WrathBaseDamage = [WrathRanks + 1][]float64{{0}, {13, 16}, {28, 33}, {48, 57}, {69, 79}, {108, 123}, {148, 167}, {198, 221}, {248, 277}}
var WrathCastTime = [WrathRanks + 1]int{0, 1500, 1700, 2000, 2000, 2000, 2000, 2000, 2000}
var WrathLevel = [WrathRanks + 1]int{0, 1, 6, 14, 22, 30, 38, 46, 54}
var WrathManaCost = [WrathRanks + 1]float64{0, 20, 35, 55, 70, 100, 125, 155, 180}
var WrathSpellCoeff = [WrathRanks + 1]float64{0, 0.123, 0.231, 0.443, 0.571, 0.571, 0.571, 0.571, 0.571}
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 Lacerate *DruidSpell Languish *DruidSpell MangleBear *DruidSpell MangleCat *DruidSpell Berserk *DruidSpell Maul *DruidSpell MaulQueueSpell *DruidSpell Moonfire []*DruidSpell Rebirth *DruidSpell Rake *DruidSpell Rip *DruidSpell SavageRoar *DruidSpell Shred *DruidSpell Starfire []*DruidSpell Starfall *DruidSpell StarfallTick *DruidSpell StarfallSplash *DruidSpell Starsurge *DruidSpell Sunfire *DruidSpell SunfireCat *DruidSpell SurvivalInstincts *DruidSpell SwipeBear *DruidSpell SwipeCat *DruidSpell TigersFury *DruidSpell Typhoon *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 DreamstateManaRegenAura *core.Aura EnrageAura *core.Aura EclipseAura *core.Aura FaerieFireAuras core.AuraArray ImprovedFaerieFireAuras core.AuraArray FrenziedRegenerationAura *core.Aura FurorAura *core.Aura FuryOfStormrageAura *core.Aura InsectSwarmAuras core.AuraArray MaulQueueAura *core.Aura MoonkinFormAura *core.Aura NaturesGraceProcAura *core.Aura PredatoryInstinctsAura *core.Aura SurvivalInstinctsAura *core.Aura TigersFuryAura *core.Aura SavageRoarAura *core.Aura SolarEclipseProcAura *core.Aura LunarEclipseProcAura *core.Aura WildStrikesBuffAura *core.Aura BleedCategories core.ExclusiveCategoryArray SavageRoarDurationTable [6]time.Duration // Extra data used for various calculations and overrides AllowRakeRipDoTCrits bool // From T1 Feral 4p bonus FerociousBiteExcessEnergyOverride bool // When true, disables the excess energy consumption of Ferocious bite // Sunfire/Moonfire modifiers applied when in Moonkin form MoonfireDotMultiplier float64 ShredPositionOverride bool SunfireDotMultiplier float64 // contains filtered or unexported fields }
func (*Druid) AddRaidBuffs ¶
func (*Druid) ApplyRunes ¶
func (druid *Druid) ApplyRunes()
func (*Druid) ApplyTalents ¶
func (druid *Druid) ApplyTalents()
func (*Druid) BearArmorMultiplier ¶
func (*Druid) CurrentFerociousBiteCost ¶
func (*Druid) CurrentMangleCatCost ¶
func (*Druid) CurrentRakeCost ¶
func (*Druid) CurrentRipCost ¶
func (*Druid) CurrentSavageRoarCost ¶
func (*Druid) CurrentShredCost ¶
func (*Druid) CurrentSwipeCatCost ¶ added in v0.0.14
func (*Druid) GetCatWeapon ¶
TODO: don't hardcode numbers
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) NewT2Treants ¶ added in v0.0.24
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
}
type T2Treants ¶ added in v0.0.24
func (*T2Treants) ExecuteCustomRotation ¶ added in v0.0.24
func (treants *T2Treants) ExecuteCustomRotation(sim *core.Simulation)
func (*T2Treants) Initialize ¶ added in v0.0.24
func (treants *T2Treants) Initialize()
func (*T2Treants) OnPetDisable ¶ added in v0.0.24
func (treants *T2Treants) OnPetDisable(sim *core.Simulation)
func (*T2Treants) Reset ¶ added in v0.0.24
func (treants *T2Treants) Reset(sim *core.Simulation)
Source Files ¶
- barkskin.go
- berserk.go
- druid.go
- faerie_fire.go
- ferocious_bite.go
- forms.go
- hurricane.go
- innervate.go
- insect_swarm.go
- item_sets_pve.go
- item_sets_pve_phase_4.go
- item_sets_pve_phase_5.go
- item_sets_pve_phase_6.go
- item_sets_pve_phase_7.go
- item_sets_pvp.go
- items.go
- mangle.go
- moonfire.go
- rake.go
- rip.go
- runes.go
- savage_roar.go
- shred.go
- starfall.go
- starfire.go
- starsurge.go
- sunfire.go
- swipe.go
- t2_treants.go
- talents.go
- tigers_fury.go
- wrath.go