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) 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) 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) RegisterKillCommandSpell() *core.Spell
- func (hp *HunterPet) Reset(_ *core.Simulation)
- type PetAbilityType
- type PetConfig
- type PetDebuffSpellConfig
- type PetSpecialAbilityConfig
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 HunterSpellBarrage HunterSpellsTierTwelve = HunterSpellArcaneShot | HunterSpellKillCommand | HunterSpellChimeraShot | HunterSpellExplosiveShot | HunterSpellMultiShot | HunterSpellAimedShot HunterSpellsAll = HunterSpellSteadyShot | HunterSpellCobraShot | HunterSpellArcaneShot | HunterSpellKillCommand | HunterSpellChimeraShot | HunterSpellExplosiveShot | HunterSpellExplosiveTrap | HunterSpellBlackArrow | HunterSpellMultiShot | HunterSpellAimedShot | HunterSpellSerpentSting | HunterSpellKillShot | HunterSpellRapidFire | HunterSpellBestialWrath )
View Source
const BiteSpellID = 17253
These IDs are needed for certain talents.
View Source
const ClawSpellID = 16827
View Source
const PetExpertiseRatingScale = 3.25 * core.PhysicalHitRatingPerHitPercent
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 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, SpecialAbility: QirajiFortitude}, 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, SpecialAbility: EmbraceOfTheShaleSpider}, 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 ItemSetFlameWakersBattleGear = core.NewItemSet(core.ItemSet{ Name: "Flamewaker's Battlegear", Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() var flamingArrowSpellForSteadyShot = hunter.RegisterSpell(hunter.newFlamingArrowSpell(56641)) var flamingArrowSpellForCobraShot = hunter.RegisterSpell(hunter.newFlamingArrowSpell(77767)) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "T12 2-set", ClassSpellMask: HunterSpellSteadyShot | HunterSpellCobraShot, ProcChance: 0.1, Callback: core.CallbackOnSpellHitDealt, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell.Matches(HunterSpellSteadyShot) { flamingArrowSpellForSteadyShot.Cast(sim, result.Target) } else { flamingArrowSpellForCobraShot.Cast(sim, result.Target) } }, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() var baMod = hunter.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_PowerCost_Pct, ClassMask: HunterSpellsTierTwelve, FloatValue: -0.1, }) var burningAdrenaline = hunter.RegisterAura(core.Aura{ Label: "Burning Adrenaline", Duration: time.Second * 15, ActionID: core.ActionID{SpellID: 99060}, OnGain: func(aura *core.Aura, sim *core.Simulation) { baMod.Activate() }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { if !spell.Matches(HunterSpellsTierTwelve) || spell.ActionID.SpellID == 0 { return } if hunter.HasActiveAura("Ready, Set, Aim...") && spell.Matches(HunterSpellAimedShot) { return } baMod.Deactivate() aura.Deactivate(sim) }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { baMod.Deactivate() }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "T12 4-set", ProcChance: 0.1, ProcMask: core.ProcMaskRangedAuto, Callback: core.CallbackOnSpellHitDealt, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { burningAdrenaline.Activate(sim) }, }) }, }, })
View Source
var ItemSetGladiatorsPursuit = core.NewItemSet(core.ItemSet{ ID: 920, Name: "Gladiator's Pursuit", Bonuses: map[int32]core.ApplySetBonus{ 2: func(_ core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachStatBuff(stats.Agility, 70) }, 4: func(_ core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachStatBuff(stats.Agility, 90) focusRegenMultiplier := 1.05 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 ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ Name: "Lightning-Charged Battlegear", Bonuses: map[int32]core.ApplySetBonus{ 2: func(_ core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, ClassMask: HunterSpellSerpentSting, FloatValue: 5, }) }, 4: func(_ core.Agent, setBonusAura *core.Aura) { setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Flat, ClassMask: HunterSpellCobraShot, TimeValue: -200 * time.Millisecond, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Flat, ClassMask: HunterSpellSteadyShot, TimeValue: -200 * time.Millisecond, }) }, }, })
View Source
var SaurokStalker = core.NewItemSet(core.ItemSet{ Name: "Battlegear of the Saurok Stalker", ID: 1157, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { }, 4: func(agent core.Agent, setBonusAura *core.Aura) { }, }, })
View Source
var YaunGolSlayersBattlegear = core.NewItemSet(core.ItemSet{ Name: "Yaungol Slayer Battlegear", ID: 1129, 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, 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
BeastMasteryOptions *proto.BeastMasteryHunter_Options
MarksmanshipOptions *proto.MarksmanshipHunter_Options
SurvivalOptions *proto.SurvivalHunter_Options
Pet *HunterPet
StampedePet []*HunterPet
DireBeastPet *HunterPet
AspectOfTheHawk *core.Spell
// Hunter spells
SerpentSting *core.Spell
ExplosiveTrap *core.Spell
ExplosiveShot *core.Spell
ImprovedSerpentSting *core.Spell
// Fake spells to encapsulate weaving logic.
HuntersMarkSpell *core.Spell
// contains filtered or unexported fields
}
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) 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
CobraStrikesAura *core.Aura
KillCommandAura *core.Aura
FrenzyStacksSnapshot float64
FrenzyAura *core.Aura
KillCommand *core.Spell
// contains filtered or unexported fields
}
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) RegisterKillCommandSpell ¶
func (*HunterPet) Reset ¶
func (hp *HunterPet) Reset(_ *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
// Randomly select between abilities instead of using a prio.
RandomSelection bool
}
type PetDebuffSpellConfig ¶
type PetSpecialAbilityConfig ¶
type PetSpecialAbilityConfig struct {
Type PetAbilityType
SpellID int32
School core.SpellSchool
GCD time.Duration
CD time.Duration
OnSpellHitDealt func(*core.Simulation, *core.Spell, *core.SpellResult)
}
Source Files
¶
- a_murder_of_crows.go
- arcane_shot.go
- aspects.go
- barrage.go
- cata_items.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_command.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.