Documentation ¶
Index ¶
- Constants
- Variables
- func RegisterHunter()
- type Hunter
- func (hunter *Hunter) AddPartyBuffs(_ *proto.PartyBuffs)
- func (hunter *Hunter) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (hunter *Hunter) ApplyRunes()
- func (hunter *Hunter) ApplyTalents()
- func (hunter *Hunter) GetCharacter() *core.Character
- func (hunter *Hunter) GetHunter() *Hunter
- func (hunter *Hunter) HasRune(rune proto.HunterRune) bool
- func (hunter *Hunter) Initialize()
- func (hunter *Hunter) NewHunterPet() *HunterPet
- func (hunter *Hunter) OnGCDReady(_ *core.Simulation)
- func (hunter *Hunter) Reset(sim *core.Simulation)
- func (hunter *Hunter) TryRaptorStrike(sim *core.Simulation, mhSwingSpell *core.Spell) *core.Spell
- type HunterAgent
- type HunterPet
- 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) Reset(_ *core.Simulation)
- func (hp *HunterPet) Talents() *proto.HunterPetTalents
- type PetAbilityType
- type PetConfig
Constants ¶
View Source
const ( SpellFlagShot = core.SpellFlagAgentReserved1 SpellFlagStrike = core.SpellFlagAgentReserved2 SpellFlagSting = core.SpellFlagAgentReserved3 SpellFlagTrap = core.SpellFlagAgentReserved4 )
View Source
const ( SpellCode_HunterNone int32 = iota // Shots SpellCode_HunterAimedShot SpellCode_HunterArcaneShot SpellCode_HunterChimeraShot SpellCode_HunterExplosiveShot SpellCode_HunterKillShot SpellCode_HunterMultiShot SpellCode_HunterSteadyShot // Strikes SpellCode_HunterFlankingStrike SpellCode_HunterRaptorStrike SpellCode_HunterRaptorStrikeHit SpellCode_HunterWyvernStrike // Traps SpellCode_HunterExplosiveTrap SpellCode_HunterFreezingTrap SpellCode_HunterImmolationTrap // Other SpellCode_HunterCarve SpellCode_HunterCarveHit SpellCode_HunterMongooseBite SpellCode_HunterWingClip SpellCode_HunterVolley SpellCode_HunterPetFlankingStrike )
View Source
const ( DevilsaurEye = 19991 DevilsaurTooth = 19992 SignetOfBeasts = 209823 BloodlashBow = 216516 GurubashiPitFightersBow = 221450 BloodChainVices = 227075 KnightChainVices = 227077 BloodChainGrips = 227081 KnightChainGrips = 227087 WhistleOfTheBeast = 228432 ArcaneInfusedGem = 230237 RenatakisCharmOfRavaging = 231288 MaelstromsWrath = 231320 ZandalarPredatorsMantle = 231321 ZandalarPredatorsBelt = 231322 ZandalarPredatorsBracers = 231323 MarshalChainGrips = 231560 GeneralChainGrips = 231569 GeneralChainVices = 231575 MarshalChainVices = 231578 Kestrel = 231754 Peregrine = 231755 )
View Source
const PetGCD = time.Millisecond * 1600
Pet AI doesn't use abilities immediately, so model this with a 1.6s GCD.
View Source
const RaptorFuryPerStackDamageMultiplier = 0.15
View Source
const RaptorStrikeRanks = 8
Variables ¶
View Source
var ItemSetBeastmasterArmor = core.NewItemSet(core.ItemSet{ Name: "Beastmaster Armor", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStats(stats.Stats{ stats.AttackPower: 40, stats.RangedAttackPower: 40, }) }, 4: func(agent core.Agent) { c := agent.GetCharacter() actionID := core.ActionID{SpellID: 450577} manaMetrics := c.NewManaMetrics(actionID) core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{ ActionID: actionID, Name: "S03 - Mana Proc on Cast - Beaststalker Armor", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, ProcMask: core.ProcMaskWhiteHit, ProcChance: 0.06, Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { if c.HasManaBar() { c.AddMana(sim, 300, manaMetrics) } }, }) }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddResistances(8) }, 8: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Armor, 200) }, }, })
View Source
var ItemSetBloodGuardsChain = core.NewItemSet(core.ItemSet{ Name: "Blood Guard's Chain", 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.AttackPower, 30) c.AddStat(stats.RangedAttackPower, 20) }, }, })
View Source
var ItemSetChampionsProwess = core.NewItemSet(core.ItemSet{ Name: "Champion's Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStats(stats.Stats{ stats.AttackPower: 40, stats.RangedAttackPower: 40, }) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
View Source
var ItemSetChampionsPursuit = core.NewItemSet(core.ItemSet{ Name: "Champion's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Agility, 20) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
View Source
var ItemSetDragonstalkerProwess = core.NewItemSet(core.ItemSet{ Name: "Dragonstalker's Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() affectedSpells := make(map[*core.Spell]bool) procAura := hunter.RegisterAura(core.Aura{ ActionID: core.ActionID{SpellID: 467331}, Label: "Clever Strikes", Duration: time.Second * 5, OnInit: func(aura *core.Aura, sim *core.Simulation) { for _, spell := range hunter.MeleeSpells { if spell.SpellCode != SpellCode_HunterRaptorStrikeHit && spell.SpellCode != SpellCode_HunterRaptorStrike && spell.SpellCode != SpellCode_HunterWingClip { affectedSpells[spell] = true } } }, OnGain: func(aura *core.Aura, sim *core.Simulation) { for spell := range affectedSpells { spell.DamageMultiplier *= 1.20 } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { for spell := range affectedSpells { spell.DamageMultiplier /= 1.20 } }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { if !affectedSpells[spell] { return } aura.Deactivate(sim) }, }) core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "S03 - Item - T2 - Hunter - Melee 2P Bonus Trigger", OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { if spell.SpellCode == SpellCode_HunterRaptorStrike { procAura.Activate(sim) } }, })) }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.OnSpellRegistered(func(spell *core.Spell) { if spell.SpellCode == SpellCode_HunterWyvernStrike || (spell.SpellCode == SpellCode_HunterRaptorStrikeHit && spell.ProcMask.Matches(core.ProcMaskMeleeMHSpecial)) { spell.DamageMultiplier *= 1.20 } }) }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "S03 - Item - T2 - Hunter - Melee 6P Bonus Trigger", ActionID: core.ActionID{SpellID: 467334}, OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if sim.Proc(0.05, "T2 Melee 6PC Strike Reset") { maxSpell := hunter.RaptorStrike for _, strike := range hunter.Strikes { if strike.TimeToReady(sim) > maxSpell.TimeToReady(sim) { maxSpell = strike } } maxSpell.CD.Reset() aura.Activate(sim) } }, })) }, }, })
View Source
var ItemSetDragonstalkerPursuit = core.NewItemSet(core.ItemSet{ Name: "Dragonstalker's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() shotSpells := []*core.Spell{} procAura := hunter.RegisterAura(core.Aura{ ActionID: core.ActionID{SpellID: 467312}, Label: "S03 - Item - T2 - Hunter - Ranged 4P Bonus", Duration: time.Second * 12, OnInit: func(aura *core.Aura, sim *core.Simulation) { shotSpells = core.FilterSlice(hunter.Shots, func(s *core.Spell) bool { return s != nil }) }, OnGain: func(aura *core.Aura, sim *core.Simulation) { for _, spell := range shotSpells { if spell.SpellCode != hunter.LastShot.SpellCode { spell.DamageMultiplier *= 1.10 } } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { for _, spell := range shotSpells { if spell.SpellCode != hunter.LastShot.SpellCode { spell.DamageMultiplier /= 1.10 } } }, }) core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "S03 - Item - T2 - Hunter - Ranged 4P Bonus Trigger", OnCastComplete: func(_ *core.Aura, sim *core.Simulation, spell *core.Spell) { if spell.Flags.Matches(SpellFlagShot) { procAura.Deactivate(sim) hunter.LastShot = spell procAura.Activate(sim) } }, })) }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "S03 - Item - T2 - Hunter - Ranged 6P Bonus", OnInit: func(aura *core.Aura, sim *core.Simulation) { hunter.SerpentStingAPCoeff += 0.25 }, })) }, }, })
View Source
var ItemSetDreadHuntersChain = core.NewItemSet(core.ItemSet{ Name: "Dread Hunter's Chain", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.AttackPower, 20) c.AddStat(stats.RangedAttackPower, 20) }, 3: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.MeleeCrit, 1*core.CritRatingPerCritChance) }, }, })
View Source
var ItemSetFieldMarshalsProwess = core.NewItemSet(core.ItemSet{ Name: "Field Marshal's Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStats(stats.Stats{ stats.AttackPower: 40, stats.RangedAttackPower: 40, }) }, }, })
View Source
var ItemSetFieldMarshalsPursuit = core.NewItemSet(core.ItemSet{ Name: "Field Marshal's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Agility, 20) }, }, })
View Source
var ItemSetGiantstalkerProwess = core.NewItemSet(core.ItemSet{ Name: "Giantstalker Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() debuffAuras := hunter.NewEnemyAuraArray(func(target *core.Unit, level int32) *core.Aura { return target.RegisterAura(core.Aura{ Label: "S03 - Item - T1 - Hunter - Melee 2P Bonus", ActionID: core.ActionID{SpellID: 456389}, Duration: time.Second * 30, OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.AddStatDynamic(sim, stats.Dodge, -1) aura.Unit.PseudoStats.BonusMeleeHitRatingTaken += 1 * core.MeleeHitRatingPerHitChance aura.Unit.PseudoStats.BonusSpellHitRatingTaken += 1 * core.SpellHitRatingPerHitChance }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.AddStatDynamic(sim, stats.Dodge, 1) aura.Unit.PseudoStats.BonusMeleeHitRatingTaken += 1 * core.MeleeHitRatingPerHitChance aura.Unit.PseudoStats.BonusSpellHitRatingTaken += 1 * core.SpellHitRatingPerHitChance }, }) }) core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "S03 - Item - T1 - Hunter - Melee 2P Bonus Trigger", OnSpellHitDealt: func(_ *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell.SpellCode == SpellCode_HunterMongooseBite && result.Landed() { debuffAuras.Get(result.Target).Activate(sim) } }, })) }, 4: func(agent core.Agent) { c := agent.GetCharacter() c.PseudoStats.DamageDealtMultiplier *= 1.03 }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "S03 - Item - T1 - Hunter - Melee 6P Bonus Trigger", OnSpellHitDealt: func(_ *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell.ProcMask.Matches(core.ProcMaskMelee) && (result.Outcome == core.OutcomeMiss || result.Outcome == core.OutcomeBlock || result.Outcome == core.OutcomeParry) { hunter.DefensiveState.Activate(sim) } }, })) }, }, })
View Source
var ItemSetGiantstalkerPursuit = core.NewItemSet(core.ItemSet{ Name: "Giantstalker Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { c := agent.GetCharacter() c.PseudoStats.DamageDealtMultiplier *= 1.03 }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() if !hunter.Talents.AimedShot { return } procAura := hunter.RegisterAura(core.Aura{ ActionID: core.ActionID{SpellID: 456379}, Label: "S03 - Item - T1 - Hunter - Ranged 6P Bonus", Duration: time.Second * 12, OnGain: func(aura *core.Aura, sim *core.Simulation) { for _, spell := range hunter.Shots { if spell != nil { spell.DamageMultiplier *= 1.20 } } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { for _, spell := range hunter.Shots { if spell != nil { spell.DamageMultiplier /= 1.20 } } }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { if !spell.Flags.Matches(SpellFlagShot) || (aura.RemainingDuration(sim) == aura.Duration && spell.SpellCode == SpellCode_HunterAimedShot) { return } aura.Deactivate(sim) }, }) core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "S03 - Item - T1 - Hunter - Ranged 6P Bonus Trigger", OnCastComplete: func(_ *core.Aura, sim *core.Simulation, spell *core.Spell) { if spell.SpellCode == SpellCode_HunterAimedShot { procAura.Activate(sim) } }, })) }, }, })
View Source
var ItemSetKnightLieutenantsChain = core.NewItemSet(core.ItemSet{ Name: "Knight-Lieutenant's Chain", 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.AttackPower, 30) c.AddStat(stats.RangedAttackPower, 20) }, }, })
View Source
var ItemSetLieutenantCommandersProwess = core.NewItemSet(core.ItemSet{ Name: "Lieutenant Commander's Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStats(stats.Stats{ stats.AttackPower: 40, stats.RangedAttackPower: 40, }) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
View Source
var ItemSetLieutenantCommandersPursuit = core.NewItemSet(core.ItemSet{ Name: "Lieutenant Commander's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Agility, 20) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, }, })
View Source
var ItemSetPredatorArmor = core.NewItemSet(core.ItemSet{ Name: "Predator's Armor", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.AttackPower, 20) c.AddStat(stats.RangedAttackPower, 20) }, 3: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() if hunter.pet == nil { return } core.MakePermanent(hunter.RegisterAura(core.Aura{ Label: "Predator's Armor 3P", OnInit: func(aura *core.Aura, sim *core.Simulation) { oldStatInheritance := hunter.pet.GetStatInheritance() hunter.pet.UpdateStatInheritance( func(ownerStats stats.Stats) stats.Stats { s := oldStatInheritance(ownerStats) s[stats.AttackPower] *= 1.20 return s }, ) }, })) }, 5: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() if hunter.pet == nil { return } hunter.RegisterAura(core.Aura{ Label: "Predator's Armor 5P", OnInit: func(aura *core.Aura, sim *core.Simulation) { hunter.pet.AddFocusRegenMultiplier(1.20) }, }) }, }, })
View Source
var ItemSetWarlordsProwess = core.NewItemSet(core.ItemSet{ Name: "Warlord's Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStats(stats.Stats{ stats.AttackPower: 40, stats.RangedAttackPower: 40, }) }, }, })
View Source
var ItemSetWarlordsPursuit = core.NewItemSet(core.ItemSet{ Name: "Warlord's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Stamina, 20) }, 4: func(agent core.Agent) { }, 6: func(agent core.Agent) { c := agent.GetCharacter() c.AddStat(stats.Agility, 20) }, }, })
View Source
var PetConfigs = map[proto.Hunter_Options_PetType]PetConfig{ proto.Hunter_Options_Cat: { Name: "Cat", SpecialAbility: Bite, FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.1, }, proto.Hunter_Options_WindSerpent: { Name: "Wind Serpent", SpecialAbility: Unknown, FocusDump: LightningBreath, Health: 1.0, Armor: 1.0, Damage: 1.07, }, proto.Hunter_Options_Bat: { Name: "Bat", FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Bear: { Name: "Bear", SpecialAbility: Swipe, FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Boar: { Name: "Boar", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_CarrionBird: { Name: "Carrion Bird", SpecialAbility: DemoralizingScreech, FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Chimaera: { Name: "Chimaera", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_CoreHound: { Name: "Core Hound", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Crab: { Name: "Crab", FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Crocolisk: { Name: "Crocolisk", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Devilsaur: { Name: "Devilsaur", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Dragonhawk: { Name: "Dragonhawk", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Gorilla: { Name: "Gorilla", Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Hyena: { Name: "Hyena", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Raptor: { Name: "Raptor", FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Scorpid: { Name: "Scorpid", SpecialAbility: ScorpidPoison, FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Serpent: { Name: "Serpent", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Silithid: { Name: "Silithid", FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Spider: { Name: "Spider", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_SpiritBeast: { Name: "Spirit Beast", FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_SporeBat: { Name: "Spore Bat", Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Tallstrider: { Name: "Tallstrider", FocusDump: Claw, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Turtle: { Name: "Turtle", FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, proto.Hunter_Options_Wolf: { Name: "Wolf", SpecialAbility: FuriousHowl, FocusDump: Bite, Health: 1.0, Armor: 1.0, Damage: 1.0, }, }
Abilities reference: https://wotlk.wowhead.com/hunter-pets https://wotlk.wowhead.com/guides/hunter-dps-best-pets-taming-loyalty-burning-crusade-classic
View Source
var RaptorStrikeBaseDamage = [RaptorStrikeRanks + 1]float64{0, 5, 11, 21, 34, 50, 80, 110, 140}
View Source
var RaptorStrikeLevel = [RaptorStrikeRanks + 1]int{0, 1, 8, 16, 24, 32, 40, 48, 56}
View Source
var RaptorStrikeManaCost = [RaptorStrikeRanks + 1]float64{0, 15, 25, 35, 45, 55, 70, 80, 100}
View Source
var RaptorStrikeSpellId = [RaptorStrikeRanks + 1]int32{0, 2973, 14260, 14261, 14262, 14263, 14264, 14265, 14266}
View Source
var RaptorStrikeSpellIdMeleeSpecialist = [RaptorStrikeRanks + 1]int32{0, 415335, 415336, 415337, 415338, 415340, 415341, 415342, 415343}
View Source
var TalentTreeSizes = [3]int{16, 14, 16}
Functions ¶
func RegisterHunter ¶
func RegisterHunter()
Types ¶
type Hunter ¶
type Hunter struct { core.Character Talents *proto.HunterTalents Options *proto.Hunter_Options AmmoDPS float64 AmmoDamageBonus float64 NormalizedAmmoDamageBonus float64 SerpentStingAPCoeff float64 AimedShot *core.Spell ArcaneShot *core.Spell ChimeraShot *core.Spell ExplosiveShot *core.Spell ExplosiveTrap *core.Spell ImmolationTrap *core.Spell FreezingTrap *core.Spell KillCommand *core.Spell KillShot *core.Spell MultiShot *core.Spell FocusFire *core.Spell RapidFire *core.Spell RaptorStrike *core.Spell RaptorStrikeMH *core.Spell RaptorStrikeOH *core.Spell FlankingStrike *core.Spell WyvernStrike *core.Spell MongooseBite *core.Spell ScorpidSting *core.Spell SerpentSting *core.Spell SilencingShot *core.Spell SteadyShot *core.Spell Volley *core.Spell CarveMH *core.Spell CarveOH *core.Spell WingClip *core.Spell Shots []*core.Spell Strikes []*core.Spell MeleeSpells []*core.Spell LastShot *core.Spell SerpentStingChimeraShot *core.Spell FlankingStrikeAura *core.Aura RaptorFuryAura *core.Aura SniperTrainingAura *core.Aura CobraStrikesAura *core.Aura HitAndRunAura *core.Aura // The aura that allows you to cast Mongoose Bite DefensiveState *core.Aura ImprovedSteadyShotAura *core.Aura LockAndLoadAura *core.Aura RapidFireAura *core.Aura BestialWrathPetAura *core.Aura // contains filtered or unexported fields }
func (*Hunter) AddPartyBuffs ¶
func (hunter *Hunter) AddPartyBuffs(_ *proto.PartyBuffs)
func (*Hunter) AddRaidBuffs ¶
func (*Hunter) ApplyRunes ¶
func (hunter *Hunter) ApplyRunes()
func (*Hunter) ApplyTalents ¶
func (hunter *Hunter) ApplyTalents()
func (*Hunter) GetCharacter ¶
func (*Hunter) Initialize ¶
func (hunter *Hunter) Initialize()
func (*Hunter) NewHunterPet ¶
func (*Hunter) OnGCDReady ¶
func (hunter *Hunter) OnGCDReady(_ *core.Simulation)
func (*Hunter) Reset ¶
func (hunter *Hunter) Reset(sim *core.Simulation)
func (*Hunter) TryRaptorStrike ¶
Returns true if the regular melee swing should be used, false otherwise.
type HunterAgent ¶
type HunterAgent interface {
GetHunter() *Hunter
}
Agent is a generic way to access underlying hunter on any of the agents.
type HunterPet ¶
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) Reset ¶
func (hp *HunterPet) Reset(_ *core.Simulation)
func (*HunterPet) Talents ¶
func (hp *HunterPet) Talents() *proto.HunterPetTalents
type PetAbilityType ¶
type PetAbilityType int
const ( Unknown PetAbilityType = iota Bite Claw DemoralizingScreech FuriousHowl LightningBreath ScorpidPoison Swipe )
type PetConfig ¶
type PetConfig struct { Name string SpecialAbility PetAbilityType FocusDump PetAbilityType Health float64 Armor float64 Damage float64 // Randomly select between abilities instead of using a prio. RandomSelection bool }
Source Files ¶
- aimed_shot.go
- arcane_shot.go
- aspects.go
- carve.go
- chimera_shot.go
- explosive_shot.go
- explosive_trap.go
- flanking_strike.go
- focus_fire.go
- freezing_trap.go
- hunter.go
- immolation_trap.go
- item_sets_pve.go
- item_sets_pvp.go
- items.go
- kill_command.go
- kill_shot.go
- mongoose_bite.go
- multi_shot.go
- pet.go
- pet_abilities.go
- pet_talents.go
- rapid_fire.go
- raptor_strike.go
- runes.go
- serpent_sting.go
- steady_shot.go
- talents.go
- volley.go
- wing_clip.go
- wyvern_strike.go
Click to show internal directories.
Click to hide internal directories.