Documentation
¶
Index ¶
- Constants
- Variables
- type Hunter
- func (hunter *Hunter) AddPartyBuffs(_ *proto.PartyBuffs)
- func (hunter *Hunter) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (hunter *Hunter) AddStatDependencies()
- func (hunt *Hunter) ApplyHotfixes()
- func (hunter *Hunter) ApplyTalents()
- func (hunter *Hunter) GetBaseDamageFromCoeff(coeff float64) float64
- func (hunter *Hunter) GetCharacter() *core.Character
- func (hunter *Hunter) GetHunter() *Hunter
- func (hunter *Hunter) HasMajorGlyph(glyph proto.HunterMajorGlyph) bool
- func (hunter *Hunter) HasMinorGlyph(glyph proto.HunterMinorGlyph) bool
- func (hunter *Hunter) Initialize()
- func (hunter *Hunter) NewDireBeastPet() *HunterPet
- func (hunter *Hunter) NewHunterPet() *HunterPet
- func (hunter *Hunter) NewStampedePet(index int) *HunterPet
- func (hunter *Hunter) NewThunderhawkPet(index int) *ThunderhawkPet
- func (hunter *Hunter) OnEncounterStart(sim *core.Simulation)
- func (hunter *Hunter) RegisterDireBeastSpell()
- func (hunter *Hunter) RegisterLynxRushSpell()
- func (hunter *Hunter) RegisterSpells()
- func (hunter *Hunter) RegisterStampedeSpell()
- func (hunter *Hunter) Reset(_ *core.Simulation)
- type HunterAgent
- type HunterPet
- func (hp *HunterPet) ApplyBoarsSpeed()
- func (hp *HunterPet) ApplyCombatExperience()
- func (hp *HunterPet) ApplySpikedCollar()
- func (hp *HunterPet) ApplyTalents()
- func (hp *HunterPet) ExecuteCustomRotation(sim *core.Simulation)
- func (hp *HunterPet) GetPet() *core.Pet
- func (hp *HunterPet) Initialize()
- func (hp *HunterPet) NewPetAbility(abilityType PetAbilityType, isPrimary bool) *core.Spell
- func (hp *HunterPet) OnEncounterStart(_ *core.Simulation)
- func (hp *HunterPet) RegisterDash() *core.Spell
- func (hp *HunterPet) RegisterKillCommandSpell() *core.Spell
- func (hp *HunterPet) Reset(sim *core.Simulation)
- type PetAbilityType
- type PetConfig
- type PetDebuffSpellConfig
- type ThunderhawkPet
Constants ¶
View Source
const ( HunterSpellFlagsNone int64 = 0 SpellMaskSpellRanged int64 = 1 << iota HunterSpellAutoShot HunterSpellSteadyShot HunterSpellCobraShot HunterSpellArcaneShot HunterSpellKillCommand HunterSpellChimeraShot HunterSpellExplosiveShot HunterSpellExplosiveTrap HunterSpellBlackArrow HunterSpellMultiShot HunterSpellAimedShot HunterSpellSerpentSting HunterSpellKillShot HunterSpellRapidFire HunterSpellBestialWrath HunterPetFocusDump HunterPetDamage HunterPetBeastCleaveHit HunterSpellFervor HunterSpellDireBeast HunterSpellAMurderOfCrows HunterSpellLynxRush HunterSpellGlaiveToss HunterSpellBarrage HunterSpellPowershot HunterSpellsAll = HunterSpellSteadyShot | HunterSpellCobraShot | HunterSpellArcaneShot | HunterSpellKillCommand | HunterSpellChimeraShot | HunterSpellExplosiveShot | HunterSpellExplosiveTrap | HunterSpellBlackArrow | HunterSpellMultiShot | HunterSpellAimedShot | HunterSpellSerpentSting | HunterSpellKillShot | HunterSpellRapidFire | HunterSpellBestialWrath HunterSpellsTalents = HunterSpellFervor | HunterSpellDireBeast | HunterSpellAMurderOfCrows | HunterSpellLynxRush | HunterSpellGlaiveToss | HunterSpellPowershot | HunterSpellBarrage // These spells trigger auto shot when their cast time finishes HunterSpellsAutoOnCastComplete = HunterSpellCobraShot | HunterSpellAimedShot // These spells trigger auto shot when they are cast HunterSpellsAutoOnCast = HunterSpellSteadyShot | HunterSpellArcaneShot | HunterSpellChimeraShot | HunterSpellExplosiveShot | HunterSpellBlackArrow | HunterSpellMultiShot | HunterSpellSerpentSting | HunterSpellKillShot )
View Source
const BiteSpellID = 17253
These IDs are needed for certain talents.
View Source
const ClawSpellID = 16827
View Source
const PetGCD = time.Millisecond * 1200
Pet AI doesn't use abilities immediately, so model this with a 1.2s GCD.
View Source
const SmackSpellID = 49966
View Source
const ThoridalTheStarsFuryItemID = 34334
Variables ¶
View Source
var BattlegearOfTheUnblinkingVigil = core.NewItemSet(core.ItemSet{ ID: 1195, Name: "Battlegear of the Unblinking Vigil", Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() var cdReduction time.Duration switch hunter.Spec { case proto.Spec_SpecBeastMasteryHunter, proto.Spec_SpecMarksmanshipHunter: cdReduction = time.Second * 4 case proto.Spec_SpecSurvivalHunter: cdReduction = time.Second * 8 } setBonusAura.AttachProcTrigger(core.ProcTrigger{ Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: HunterSpellAimedShot | HunterSpellArcaneShot | HunterSpellMultiShot, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if !hunter.RapidFire.CD.IsReady(sim) { hunter.RapidFire.CD.Reduce(cdReduction) } }, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() if hunter.Spec == proto.Spec_SpecSurvivalHunter { return } if hunter.Spec == proto.Spec_SpecMarksmanshipHunter { registerMarksmanT16(hunter, setBonusAura) } else { registerBeastMasteryT16(hunter, setBonusAura) } }, }, })
View Source
var DefaultPetConfigs = [...]PetConfig{ proto.HunterOptions_PetNone: {}, proto.HunterOptions_Bat: {Name: "Bat", FocusDump: Smack}, proto.HunterOptions_Bear: {Name: "Bear", FocusDump: Claw, SpecialAbility: DemoralizingRoar}, proto.HunterOptions_BirdOfPrey: {Name: "Bird of Prey", FocusDump: Claw}, proto.HunterOptions_Boar: {Name: "Boar", FocusDump: Bite, SpecialAbility: Gore}, proto.HunterOptions_CarrionBird: {Name: "Carrion Bird", FocusDump: Bite, SpecialAbility: DemoralizingScreech}, proto.HunterOptions_Cat: {Name: "Cat", FocusDump: Claw}, proto.HunterOptions_Chimaera: {Name: "Chimaera", FocusDump: Bite, ExoticAbility: FroststormBreathAoE}, proto.HunterOptions_CoreHound: {Name: "Core Hound", FocusDump: Bite, ExoticAbility: LavaBreath}, proto.HunterOptions_Crab: {Name: "Crab", FocusDump: Claw}, proto.HunterOptions_Crocolisk: {Name: "Crocolisk", FocusDump: Bite}, proto.HunterOptions_Devilsaur: {Name: "Devilsaur", FocusDump: Bite, ExoticAbility: MonstrousBite}, proto.HunterOptions_Dragonhawk: {Name: "Dragonhawk", FocusDump: Bite, SpecialAbility: FireBreathDebuff}, proto.HunterOptions_Fox: {Name: "Fox", FocusDump: Bite, SpecialAbility: TailSpin}, proto.HunterOptions_Gorilla: {Name: "Gorilla", FocusDump: Smack}, proto.HunterOptions_Hyena: {Name: "Hyena", FocusDump: Bite}, proto.HunterOptions_Moth: {Name: "Moth", FocusDump: Smack}, proto.HunterOptions_NetherRay: {Name: "Nether Ray", FocusDump: Bite}, proto.HunterOptions_Raptor: {Name: "Raptor", FocusDump: Claw, SpecialAbility: TearArmor}, proto.HunterOptions_Ravager: {Name: "Ravager", FocusDump: Bite, SpecialAbility: Ravage}, proto.HunterOptions_Rhino: {Name: "Rhino", FocusDump: Bite, SpecialAbility: StampedeDebuff}, proto.HunterOptions_Scorpid: {Name: "Scorpid", FocusDump: Bite}, proto.HunterOptions_Serpent: {Name: "Serpent", FocusDump: Bite}, proto.HunterOptions_Silithid: {Name: "Silithid", FocusDump: Claw}, proto.HunterOptions_Spider: {Name: "Spider", FocusDump: Bite}, proto.HunterOptions_SpiritBeast: {Name: "Spirit Beast", FocusDump: Claw, ExoticAbility: SpiritMend}, proto.HunterOptions_SporeBat: {Name: "Spore Bat", FocusDump: Smack, SpecialAbility: SporeCloud}, proto.HunterOptions_Tallstrider: {Name: "Tallstrider", FocusDump: Claw, SpecialAbility: DustCloud}, proto.HunterOptions_Turtle: {Name: "Turtle", FocusDump: Bite}, proto.HunterOptions_WarpStalker: {Name: "Warp Stalker", FocusDump: Bite}, proto.HunterOptions_Wasp: {Name: "Wasp", FocusDump: Smack}, proto.HunterOptions_WindSerpent: {Name: "Wind Serpent", FocusDump: Bite, SpecialAbility: LightningBreath}, proto.HunterOptions_Wolf: {Name: "Wolf", FocusDump: Bite}, proto.HunterOptions_Worm: {Name: "Worm", FocusDump: Bite, SpecialAbility: AcidSpitDebuff, ExoticAbility: BurrowAttack}, proto.HunterOptions_ShaleSpider: {Name: "Shale Spider", FocusDump: Bite}, proto.HunterOptions_Goat: {Name: "Goat", FocusDump: Bite, SpecialAbility: Trample}, proto.HunterOptions_Porcupine: {Name: "Porcupine", FocusDump: Bite}, proto.HunterOptions_Monkey: {Name: "Monkey", FocusDump: Bite}, proto.HunterOptions_Basilisk: {Name: "Basilisk", FocusDump: Bite}, proto.HunterOptions_Crane: {Name: "Crane", FocusDump: Bite}, proto.HunterOptions_Dog: {Name: "Dog", FocusDump: Bite}, proto.HunterOptions_Beetle: {Name: "Beetle", FocusDump: Bite}, proto.HunterOptions_Quilen: {Name: "Quilen", FocusDump: Bite}, proto.HunterOptions_WaterStrider: {Name: "Water Strider", FocusDump: Claw}, }
View Source
var ItemSetGladiatorsPursuit = core.NewItemSet(core.ItemSet{ ID: 1108, Name: "Gladiator's Pursuit", Bonuses: map[int32]core.ApplySetBonus{ 2: func(_ core.Agent, setBonusAura *core.Aura) { }, 4: func(_ core.Agent, setBonusAura *core.Aura) { focusRegenMultiplier := 1.25 setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { aura.Unit.MultiplyFocusRegenSpeed(sim, focusRegenMultiplier) }) setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { aura.Unit.MultiplyFocusRegenSpeed(sim, 1/focusRegenMultiplier) }) }, }, })
View Source
var SaurokStalker = core.NewItemSet(core.ItemSet{ Name: "Battlegear of the Saurok Stalker", ID: 1157, DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() summonThunderhawkSpell := hunter.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 138363}, SpellSchool: core.SpellSchoolPhysical, Flags: core.SpellFlagPassiveSpell, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { for _, thunderhawk := range hunter.Thunderhawks { if thunderhawk.IsActive() { continue } thunderhawk.EnableWithTimeout(sim, thunderhawk, time.Second*10) return } if sim.Log != nil { hunter.Log(sim, "No Thunderhawks available for the T15 2pc to proc, this is unreasonable.") } }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: HunterSpellCobraShot | HunterSpellSteadyShot, DPM: hunter.NewSetBonusRPPMProcManager(138365, setBonusAura, core.ProcMaskRangedSpecial, core.RPPMConfig{ PPM: 1.0, }.WithHasteMod(), ), ICD: time.Millisecond * 250, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { summonThunderhawkSpell.Cast(sim, result.Target) }, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() lightningArrowSpell := hunter.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 138366}, SpellSchool: core.SpellSchoolNature, ProcMask: core.ProcMaskRangedProc, Flags: core.SpellFlagMeleeMetrics | core.SpellFlagRanged | core.SpellFlagPassiveSpell, MissileSpeed: 45, DamageMultiplier: 1.0, CritMultiplier: hunter.DefaultCritMultiplier(), ThreatMultiplier: 1.0, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { wepDmg := hunter.AutoAttacks.Ranged().CalculateNormalizedWeaponDamage(sim, spell.RangedAttackPower()) result := spell.CalcDamage(sim, target, wepDmg, spell.OutcomeRangedHitAndCrit) spell.WaitTravelTime(sim, func(sim *core.Simulation) { spell.DealDamage(sim, result) }) }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: HunterSpellArcaneShot | HunterSpellMultiShot | HunterSpellAimedShot, DPM: hunter.NewSetBonusRPPMProcManager(138367, setBonusAura, core.ProcMaskRangedSpecial, core.RPPMConfig{ PPM: 3.0, }.WithHasteMod(), ), ICD: time.Millisecond * 250, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { lightningArrowSpell.Cast(sim, result.Target) }, }) }, }, })
View Source
var YaungolSlayersBattlegear = core.NewItemSet(core.ItemSet{ Name: "Yaungol Slayer Battlegear", ID: 1129, DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, ClassMask: HunterSpellExplosiveShot, FloatValue: 0.05, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, ClassMask: HunterSpellKillCommand, ShouldApplyToPets: true, FloatValue: 0.15, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, ClassMask: HunterSpellChimeraShot, FloatValue: 0.15, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { }, }, })
Functions ¶
This section is empty.
Types ¶
type Hunter ¶
type Hunter struct {
core.Character
ClassSpellScaling float64
Talents *proto.HunterTalents
Options *proto.HunterOptions
Pet *HunterPet
StampedePet []*HunterPet
DireBeastPet *HunterPet
Thunderhawks []*ThunderhawkPet
// Hunter spells
AspectOfTheHawk *core.Spell
ExplosiveTrap *core.Spell
HuntersMarkSpell *core.Spell
ImprovedSerpentSting *core.Spell
RapidFire *core.Spell
SerpentSting *core.Spell
BestialWrathAura *core.Aura
}
func (*Hunter) AddPartyBuffs ¶
func (hunter *Hunter) AddPartyBuffs(_ *proto.PartyBuffs)
func (*Hunter) AddRaidBuffs ¶
func (*Hunter) AddStatDependencies ¶
func (hunter *Hunter) AddStatDependencies()
func (*Hunter) ApplyHotfixes ¶
func (hunt *Hunter) ApplyHotfixes()
func (*Hunter) ApplyTalents ¶
func (hunter *Hunter) ApplyTalents()
func (*Hunter) GetBaseDamageFromCoeff ¶
func (*Hunter) GetCharacter ¶
func (*Hunter) HasMajorGlyph ¶
func (hunter *Hunter) HasMajorGlyph(glyph proto.HunterMajorGlyph) bool
func (*Hunter) HasMinorGlyph ¶
func (hunter *Hunter) HasMinorGlyph(glyph proto.HunterMinorGlyph) bool
func (*Hunter) Initialize ¶
func (hunter *Hunter) Initialize()
func (*Hunter) NewDireBeastPet ¶
func (*Hunter) NewHunterPet ¶
func (*Hunter) NewStampedePet ¶
func (*Hunter) NewThunderhawkPet ¶ added in v0.0.100
func (hunter *Hunter) NewThunderhawkPet(index int) *ThunderhawkPet
func (*Hunter) OnEncounterStart ¶ added in v0.0.13
func (hunter *Hunter) OnEncounterStart(sim *core.Simulation)
func (*Hunter) RegisterDireBeastSpell ¶
func (hunter *Hunter) RegisterDireBeastSpell()
func (*Hunter) RegisterLynxRushSpell ¶
func (hunter *Hunter) RegisterLynxRushSpell()
func (*Hunter) RegisterSpells ¶
func (hunter *Hunter) RegisterSpells()
func (*Hunter) RegisterStampedeSpell ¶
func (hunter *Hunter) RegisterStampedeSpell()
func (*Hunter) Reset ¶
func (hunter *Hunter) Reset(_ *core.Simulation)
type HunterAgent ¶
type HunterAgent interface {
GetHunter() *Hunter
}
Agent is a generic way to access underlying hunter on any of the agents.
type HunterPet ¶
type HunterPet struct {
core.Pet
BestialWrathAura *core.Aura
FrenzyAura *core.Aura
BoarsSpeedAura *core.Aura
KillCommand *core.Spell
Dash *core.Spell
WHFocusIncreaseMod *core.SpellMod
WHDamageMod *core.SpellMod
// contains filtered or unexported fields
}
func (*HunterPet) ApplyBoarsSpeed ¶ added in v0.0.150
func (hp *HunterPet) ApplyBoarsSpeed()
func (*HunterPet) ApplyCombatExperience ¶
func (hp *HunterPet) ApplyCombatExperience()
func (*HunterPet) ApplySpikedCollar ¶
func (hp *HunterPet) ApplySpikedCollar()
func (*HunterPet) ApplyTalents ¶
func (hp *HunterPet) ApplyTalents()
func (*HunterPet) ExecuteCustomRotation ¶
func (hp *HunterPet) ExecuteCustomRotation(sim *core.Simulation)
func (*HunterPet) Initialize ¶
func (hp *HunterPet) Initialize()
func (*HunterPet) NewPetAbility ¶
func (hp *HunterPet) NewPetAbility(abilityType PetAbilityType, isPrimary bool) *core.Spell
func (*HunterPet) OnEncounterStart ¶ added in v0.0.13
func (hp *HunterPet) OnEncounterStart(_ *core.Simulation)
func (*HunterPet) RegisterDash ¶ added in v0.0.150
func (*HunterPet) RegisterKillCommandSpell ¶
func (*HunterPet) Reset ¶
func (hp *HunterPet) Reset(sim *core.Simulation)
type PetAbilityType ¶
type PetAbilityType int
const ( Unknown PetAbilityType = iota // Beast Master Specific Buffs AncientHysteria // Corehound: Burst Haste EmbraceOfTheShaleSpider // Shale Spider: Kings QirajiFortitude // Silithid: Stamina // Enemy Debuffs Gore // Boar: Phys Dmg Taken ↑ Ravage // Ravager: Phys Dmg Taken ↑ StampedeDebuff // Rhino: Phys Dmg Taken ↑ AcidSpitDebuff // Worm: Phys Dmg Taken ↑ DemoralizingRoar // Bear: Enemy DPS ↓ DemoralizingScreech // Carrion Bird: Enemy DPS ↓ FireBreathDebuff // Dragonhawk: Magic Dmg Taken ↑ LightningBreath // Wind Serpent: Magic Dmg Taken ↑ SporeCloud // Spore Bat: Reduce Cast Speed TailSpin // Fox: Reduce Cast Speed Trample // Goat: Reduce Cast Speed LavaBreath // Corehound: Exotic Cast Speed Debuff DustCloud // Tallstrider: Reduce Armor TearArmor // Raptor: Reduce Armor // Utility BurrowAttack // Worm: AoE Damage FroststormBreathAoE // Chimera: AoE Damage MonstrousBite // Devilsaur: Reduce Healing SpiritMend // Spirit Beast: Healing // Basic Attacks Bite // FocusDump: Bite Claw // FocusDump: Claw Smack // FocusDump: Smack )
type PetConfig ¶
type PetConfig struct {
Name string
SpecialAbility PetAbilityType
FocusDump PetAbilityType
ExoticAbility PetAbilityType
}
type PetDebuffSpellConfig ¶
type ThunderhawkPet ¶ added in v0.0.100
type ThunderhawkPet struct {
HunterPet
LightningBlast *core.Spell
// contains filtered or unexported fields
}
func (*ThunderhawkPet) ExecuteCustomRotation ¶ added in v0.0.100
func (tp *ThunderhawkPet) ExecuteCustomRotation(sim *core.Simulation)
func (*ThunderhawkPet) Initialize ¶ added in v0.0.100
func (tp *ThunderhawkPet) Initialize()
func (*ThunderhawkPet) RegisterLightningBlast ¶ added in v0.0.100
func (tp *ThunderhawkPet) RegisterLightningBlast() *core.Spell
Source Files
¶
- a_murder_of_crows.go
- arcane_shot.go
- aspects.go
- barrage.go
- cobra_shot.go
- dire_beast.go
- explosive_trap.go
- fervor.go
- glaive_toss.go
- hotfixes.go
- hunter.go
- hunters_mark.go
- item_sets.go
- kill_shot.go
- lynx_rush.go
- multi_shot.go
- pet.go
- pet_abilities.go
- pet_spec.go
- powershot.go
- rapid_fire.go
- serpent_sting.go
- silencing_shot.go
- stampede.go
- talents.go
Click to show internal directories.
Click to hide internal directories.