Documentation ¶
Index ¶
- Constants
- Variables
- func RegisterHunter()
- type Hunter
- func (hunter *Hunter) AddPartyBuffs(partyBuffs *proto.PartyBuffs)
- func (hunter *Hunter) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (hunter *Hunter) ApplyTalents()
- func (hunter *Hunter) GetAllHuntersWithGlyphOfSteadyShot() []*Hunter
- 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) MultiShotCastTime() time.Duration
- func (hunter *Hunter) NewHunterPet() *HunterPet
- func (hunter *Hunter) OnAutoAttack(sim *core.Simulation, spell *core.Spell)
- func (hunter *Hunter) OnGCDReady(sim *core.Simulation)
- func (hunter *Hunter) Reset(sim *core.Simulation)
- func (hunter *Hunter) SteadyShotCastTime() time.Duration
- func (hunter *Hunter) TryRaptorStrike(sim *core.Simulation) *core.Spell
- type HunterAgent
- type HunterPet
- func (fb *HunterPet) AddFocus(sim *core.Simulation, amount float64, actionID core.ActionID)
- func (hp *HunterPet) ApplyTalents()
- func (fb *HunterPet) Cancel(sim *core.Simulation)
- func (fb *HunterPet) CurrentFocus() float64
- func (hp *HunterPet) EnableFocusBar(regenMultiplier float64, onFocusGain OnFocusGain)
- func (hp *HunterPet) GetPet() *core.Pet
- func (hp *HunterPet) Initialize()
- func (hp *HunterPet) NewPetAbility(abilityType PetAbilityType, isPrimary bool) PetAbility
- func (hp *HunterPet) OnGCDReady(sim *core.Simulation)
- func (hp *HunterPet) Reset(sim *core.Simulation)
- func (fb *HunterPet) SpendFocus(sim *core.Simulation, amount float64, actionID core.ActionID)
- func (hp *HunterPet) Talents() *proto.HunterPetTalents
- type OnFocusGain
- type PetAbility
- type PetAbilityType
- type PetConfig
- type PetSpecialAbilityConfig
Constants ¶
View Source
const BaseFocusPerTick = 10.0
View Source
const BiteSpellID = 52474
These IDs are needed for certain talents.
View Source
const ClawSpellID = 52472
View Source
const MaxFocus = 100.0
Time between focus ticks.
View Source
const PetExpertiseScale = 3.25
View Source
const SmackSpellID = 52476
View Source
const ThoridalTheStarsFuryItemID = 34334
Variables ¶
View Source
var BMTalents = &proto.HunterTalents{ ImprovedAspectOfTheHawk: 5, EnduranceTraining: 1, FocusedFire: 2, ImprovedRevivePet: 2, AspectMastery: true, UnleashedFury: 5, Ferocity: 5, SpiritBond: 1, Intimidation: true, BestialDiscipline: 2, AnimalHandler: 2, Frenzy: 4, FerociousInspiration: 3, BestialWrath: true, CatlikeReflexes: 2, SerpentsSwiftness: 5, Longevity: 3, TheBeastWithin: true, CobraStrikes: 2, KindredSpirits: 5, BeastMastery: true, LethalShots: 5, CarefulAim: 3, MortalShots: 5, GoForTheThroat: 2, AimedShot: true, ImprovedTracking: 1, }
View Source
var DefaultGlyphs = &proto.Glyphs{ Major1: int32(proto.HunterMajorGlyph_GlyphOfSteadyShot), Major2: int32(proto.HunterMajorGlyph_GlyphOfSerpentSting), Major3: int32(proto.HunterMajorGlyph_GlyphOfKillShot), }
View Source
var FerocityTalents = &proto.HunterPetTalents{ CobraReflexes: 2, Dive: true, SpikedCollar: 3, BoarsSpeed: true, CullingTheHerd: 3, SpidersBite: 3, Rabid: true, CallOfTheWild: true, WildHunt: 1, }
View Source
var FullConsumes = &proto.Consumes{ Flask: proto.Flask_FlaskOfRelentlessAssault, DefaultPotion: proto.Potions_HastePotion, DefaultConjured: proto.Conjured_ConjuredFlameCap, PetFood: proto.PetFood_PetFoodKiblersBits, }
View Source
var ItemSetAhnKaharBloodHuntersBattlegear = core.NewItemSet(core.ItemSet{ Name: "Ahn'Kahar Blood Hunter's Battlegear", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() const procChance = 0.05 actionID := core.ActionID{SpellID: 70727} procAura := hunter.RegisterAura(core.Aura{ Label: "AhnKahar 2pc Proc", ActionID: actionID, Duration: time.Second * 10, OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.PseudoStats.DamageDealtMultiplier *= 1.15 }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.PseudoStats.DamageDealtMultiplier /= 1.15 }, }) hunter.RegisterAura(core.Aura{ Label: "AhnKahar 2pc", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { aura.Activate(sim) }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell == hunter.AutoAttacks.RangedAuto && sim.RandomFloat("AhnKahar 2pc") < procChance { procAura.Activate(sim) } }, }) }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() const procChance = 0.05 actionID := core.ActionID{SpellID: 70730} var curBonus stats.Stats procAura := hunter.RegisterAura(core.Aura{ Label: "AhnKahar 4pc Proc", ActionID: actionID, Duration: time.Second * 10, OnGain: func(aura *core.Aura, sim *core.Simulation) { curBonus = stats.Stats{ stats.AttackPower: aura.Unit.GetStat(stats.AttackPower) * 0.1, stats.RangedAttackPower: aura.Unit.GetStat(stats.RangedAttackPower) * 0.1, } aura.Unit.AddStatsDynamic(sim, curBonus) }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.AddStatsDynamic(sim, curBonus.Multiply(-1)) }, }) hunter.RegisterAura(core.Aura{ Label: "AhnKahar 4pc", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { aura.Activate(sim) }, OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell == hunter.SerpentSting && sim.RandomFloat("AhnKahar 4pc") < procChance { procAura.Activate(sim) } }, }) }, }, })
View Source
var ItemSetCryptstalkerBattlegear = core.NewItemSet(core.ItemSet{ Name: "Cryptstalker Battlegear", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() if hunter.pet != nil { hunter.pet.PseudoStats.DamageDealtMultiplier *= 1.05 } }, 4: func(agent core.Agent) { }, }, })
View Source
var ItemSetGladiatorsPursuit = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.AddStats(stats.Stats{ stats.AttackPower: 50, stats.RangedAttackPower: 50, stats.Resilience: 50, }) }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.AddStats(stats.Stats{ stats.AttackPower: 150, stats.RangedAttackPower: 150, }) }, }, })
View Source
var ItemSetGronnstalker = core.NewItemSet(core.ItemSet{ Name: "Gronnstalker's Armor", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { }, }, })
View Source
var ItemSetScourgestalkerBattlegear = core.NewItemSet(core.ItemSet{ Name: "Scourgestalker Battlegear", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() procAura := hunter.NewTemporaryStatsAura("Scourgestalker 4pc Proc", core.ActionID{SpellID: 64860}, stats.Stats{stats.AttackPower: 600, stats.RangedAttackPower: 600}, time.Second*15) const procChance = 0.1 icd := core.Cooldown{ Timer: hunter.NewTimer(), Duration: time.Second * 45, } hunter.RegisterAura(core.Aura{ Label: "Windrunner 4pc", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { aura.Activate(sim) }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if !result.Landed() || spell != hunter.SteadyShot { return } if !icd.IsReady(sim) { return } if sim.RandomFloat("Scourgestalker 4pc") > procChance { return } icd.Use(sim) procAura.Activate(sim) }, }) }, }, })
View Source
var ItemSetWindrunnersPursuit = core.NewItemSet(core.ItemSet{ Name: "Windrunner's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() if hunter.pet == nil { return } procAura := hunter.pet.NewTemporaryStatsAura("Windrunner 4pc Proc", core.ActionID{SpellID: 67151}, stats.Stats{stats.AttackPower: 600}, time.Second*15) const procChance = 0.35 icd := core.Cooldown{ Timer: hunter.NewTimer(), Duration: time.Second * 45, } hunter.RegisterAura(core.Aura{ Label: "Windrunner 4pc", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { aura.Activate(sim) }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskRanged) { return } if !icd.IsReady(sim) { return } if sim.RandomFloat("Windrunner 4pc") > procChance { return } icd.Use(sim) procAura.Activate(sim) }, }) }, }, })
View Source
var MMTalents = &proto.HunterTalents{ ImprovedAspectOfTheHawk: 5, FocusedFire: 2, FocusedAim: 3, LethalShots: 5, CarefulAim: 3, MortalShots: 5, GoForTheThroat: 1, AimedShot: true, RapidKilling: 2, ImprovedStings: 3, Readiness: true, Barrage: 3, CombatExperience: 2, RangedWeaponSpecialization: 3, PiercingShots: 3, TrueshotAura: true, ImprovedBarrage: 3, MasterMarksman: 5, WildQuiver: 3, SilencingShot: true, ImprovedSteadyShot: 3, MarkedForDeath: 5, ChimeraShot: true, ImprovedTracking: 5, SurvivalInstincts: 2, }
View Source
var P1Gear = items.EquipmentSpecFromJsonString(`{"items": [
{
"id": 40505,
"enchant": 44879,
"gems": [
41398,
40023
]
},
{
"id": 44664,
"gems": [
40023
]
},
{
"id": 40507,
"enchant": 44871,
"gems": [
39997
]
},
{
"id": 40403,
"enchant": 55002
},
{
"id": 43998,
"enchant": 44623,
"gems": [
39997,
40023
]
},
{
"id": 40282,
"enchant": 60616,
"gems": [
40086,
0
]
},
{
"id": 40541,
"enchant": 54999,
"gems": [
0
]
},
{
"id": 39762,
"gems": [
39997
]
},
{
"id": 40331,
"enchant": 38374,
"gems": [
39997,
40023
]
},
{
"id": 40549,
"enchant": 55016
},
{
"id": 40074
},
{
"id": 40474
},
{
"id": 40431
},
{
"id": 44253
},
{
"id": 40388,
"enchant": 44630
},
{
"id": 40385,
"enchant": 41167
}
]}`)
View Source
var PetConfigs = map[proto.Hunter_Options_PetType]PetConfig{ proto.Hunter_Options_Bat: { Name: "Bat", SpecialAbility: SonicBlast, FocusDump: Claw, }, proto.Hunter_Options_Bear: { Name: "Bear", SpecialAbility: Swipe, FocusDump: Claw, }, proto.Hunter_Options_BirdOfPrey: { Name: "Bird of Prey", SpecialAbility: Snatch, FocusDump: Claw, }, proto.Hunter_Options_Boar: { Name: "Boar", SpecialAbility: Gore, FocusDump: Bite, }, proto.Hunter_Options_CarrionBird: { Name: "Carrion Bird", SpecialAbility: DemoralizingScreech, FocusDump: Bite, }, proto.Hunter_Options_Cat: { Name: "Cat", SpecialAbility: Rake, FocusDump: Claw, }, proto.Hunter_Options_Chimaera: { Name: "Chimaera", SpecialAbility: FroststormBreath, FocusDump: Bite, }, proto.Hunter_Options_CoreHound: { Name: "Core Hound", SpecialAbility: LavaBreath, FocusDump: Bite, }, proto.Hunter_Options_Crab: { Name: "Crab", SpecialAbility: Pin, FocusDump: Claw, }, proto.Hunter_Options_Crocolisk: { Name: "Crocolisk", FocusDump: Bite, }, proto.Hunter_Options_Devilsaur: { Name: "Devilsaur", SpecialAbility: MonstrousBite, FocusDump: Bite, }, proto.Hunter_Options_Dragonhawk: { Name: "Dragonhawk", SpecialAbility: FireBreath, FocusDump: Bite, }, proto.Hunter_Options_Gorilla: { Name: "Gorilla", FocusDump: Smack, }, proto.Hunter_Options_Hyena: { Name: "Hyena", SpecialAbility: TendonRip, FocusDump: Bite, }, proto.Hunter_Options_Moth: { Name: "Moth", FocusDump: Smack, }, proto.Hunter_Options_NetherRay: { Name: "Nether Ray", SpecialAbility: NetherShock, FocusDump: Bite, }, proto.Hunter_Options_Raptor: { Name: "Raptor", SpecialAbility: SavageRend, FocusDump: Claw, }, proto.Hunter_Options_Ravager: { Name: "Ravager", SpecialAbility: Ravage, FocusDump: Bite, }, proto.Hunter_Options_Rhino: { Name: "Rhino", SpecialAbility: Stampede, FocusDump: Bite, }, proto.Hunter_Options_Scorpid: { Name: "Scorpid", SpecialAbility: ScorpidPoison, FocusDump: Bite, }, proto.Hunter_Options_Serpent: { Name: "Serpent", SpecialAbility: PoisonSpit, FocusDump: Bite, }, proto.Hunter_Options_Silithid: { Name: "Silithid", SpecialAbility: VenomWebSpray, FocusDump: Claw, }, proto.Hunter_Options_Spider: { Name: "Spider", FocusDump: Bite, }, proto.Hunter_Options_SpiritBeast: { Name: "Spirit Beast", SpecialAbility: SpiritStrike, FocusDump: Claw, }, proto.Hunter_Options_SporeBat: { Name: "Spore Bat", SpecialAbility: SporeCloud, FocusDump: Smack, }, proto.Hunter_Options_Tallstrider: { Name: "Tallstrider", FocusDump: Claw, }, proto.Hunter_Options_Turtle: { Name: "Turtle", FocusDump: Bite, }, proto.Hunter_Options_WarpStalker: { Name: "Warp Stalker", FocusDump: Bite, }, proto.Hunter_Options_Wasp: { Name: "Wasp", SpecialAbility: Sting, FocusDump: Smack, }, proto.Hunter_Options_WindSerpent: { Name: "Wind Serpent", SpecialAbility: LightningBreath, FocusDump: Bite, }, proto.Hunter_Options_Wolf: { Name: "Wolf", SpecialAbility: FuriousHowl, FocusDump: Bite, }, proto.Hunter_Options_Worm: { Name: "Worm", SpecialAbility: AcidSpit, FocusDump: Bite, }, }
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 PlayerOptionsAOE = &proto.Player_Hunter{ Hunter: &proto.Hunter{ Talents: SVTalents, Options: basicOptions, Rotation: aoeRotation, }, }
View Source
var PlayerOptionsBM = &proto.Player_Hunter{ Hunter: &proto.Hunter{ Talents: BMTalents, Options: basicOptions, Rotation: basicRotation, }, }
View Source
var PlayerOptionsMM = &proto.Player_Hunter{ Hunter: &proto.Hunter{ Talents: MMTalents, Options: basicOptions, Rotation: basicRotation, }, }
View Source
var PlayerOptionsSV = &proto.Player_Hunter{ Hunter: &proto.Hunter{ Talents: SVTalents, Options: basicOptions, Rotation: basicRotation, }, }
View Source
var SVTalents = &proto.HunterTalents{ FocusedAim: 2, LethalShots: 5, CarefulAim: 3, MortalShots: 5, GoForTheThroat: 1, AimedShot: true, ImprovedTracking: 5, TrapMastery: 3, SurvivalInstincts: 2, Survivalist: 5, TNT: 3, LockAndLoad: 3, HunterVsWild: 3, KillerInstinct: 3, LightningReflexes: 5, Resourcefulness: 2, ExposeWeakness: 2, WyvernSting: true, ThrillOfTheHunt: 3, MasterTactician: 5, NoxiousStings: 3, BlackArrow: true, SniperTraining: 3, HuntingParty: 1, ExplosiveShot: true, }
Functions ¶
func RegisterHunter ¶
func RegisterHunter()
Types ¶
type Hunter ¶
type Hunter struct { core.Character Talents *proto.HunterTalents Options *proto.Hunter_Options Rotation *proto.Hunter_Rotation AmmoDPS float64 AmmoDamageBonus float64 NormalizedAmmoDamageBonus float64 AspectOfTheDragonhawk *core.Spell AspectOfTheViper *core.Spell AimedShot *core.Spell ArcaneShot *core.Spell BlackArrow *core.Spell ChimeraShot *core.Spell ExplosiveShot *core.Spell ExplosiveTrap *core.Spell KillCommand *core.Spell KillShot *core.Spell MultiShot *core.Spell RapidFire *core.Spell RaptorStrike *core.Spell ScorpidSting *core.Spell SerpentSting *core.Spell SilencingShot *core.Spell SteadyShot *core.Spell Volley *core.Spell // Fake spells to encapsulate weaving logic. TrapWeaveSpell *core.Spell BlackArrowDot *core.Dot ExplosiveTrapDot *core.Dot ExplosiveShotDot *core.Dot SerpentStingDot *core.Dot AspectOfTheDragonhawkAura *core.Aura AspectOfTheViperAura *core.Aura ImprovedSteadyShotAura *core.Aura LockAndLoadAura *core.Aura RapidFireAura *core.Aura ScorpidStingAura *core.Aura TalonOfAlarAura *core.Aura CustomRotation *common.CustomRotation // contains filtered or unexported fields }
func (*Hunter) AddPartyBuffs ¶
func (hunter *Hunter) AddPartyBuffs(partyBuffs *proto.PartyBuffs)
func (*Hunter) AddRaidBuffs ¶
func (*Hunter) ApplyTalents ¶
func (hunter *Hunter) ApplyTalents()
func (*Hunter) GetAllHuntersWithGlyphOfSteadyShot ¶
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) MultiShotCastTime ¶
func (*Hunter) NewHunterPet ¶
func (*Hunter) OnAutoAttack ¶
func (hunter *Hunter) OnAutoAttack(sim *core.Simulation, spell *core.Spell)
func (*Hunter) OnGCDReady ¶
func (hunter *Hunter) OnGCDReady(sim *core.Simulation)
func (*Hunter) Reset ¶
func (hunter *Hunter) Reset(sim *core.Simulation)
func (*Hunter) SteadyShotCastTime ¶
func (*Hunter) TryRaptorStrike ¶
func (hunter *Hunter) TryRaptorStrike(sim *core.Simulation) *core.Spell
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 ¶
type HunterPet struct { core.Pet CobraStrikesAura *core.Aura KillCommandAura *core.Aura // contains filtered or unexported fields }
func (*HunterPet) AddFocus ¶
func (fb *HunterPet) AddFocus(sim *core.Simulation, amount float64, actionID core.ActionID)
func (*HunterPet) ApplyTalents ¶
func (hp *HunterPet) ApplyTalents()
func (*HunterPet) Cancel ¶
func (fb *HunterPet) Cancel(sim *core.Simulation)
func (*HunterPet) CurrentFocus ¶
func (fb *HunterPet) CurrentFocus() float64
func (*HunterPet) EnableFocusBar ¶
func (hp *HunterPet) EnableFocusBar(regenMultiplier float64, onFocusGain OnFocusGain)
func (*HunterPet) Initialize ¶
func (hp *HunterPet) Initialize()
func (*HunterPet) NewPetAbility ¶
func (hp *HunterPet) NewPetAbility(abilityType PetAbilityType, isPrimary bool) PetAbility
func (*HunterPet) OnGCDReady ¶
func (hp *HunterPet) OnGCDReady(sim *core.Simulation)
func (*HunterPet) Reset ¶
func (hp *HunterPet) Reset(sim *core.Simulation)
func (*HunterPet) SpendFocus ¶
func (fb *HunterPet) SpendFocus(sim *core.Simulation, amount float64, actionID core.ActionID)
func (*HunterPet) Talents ¶
func (hp *HunterPet) Talents() *proto.HunterPetTalents
type OnFocusGain ¶
type OnFocusGain func(sim *core.Simulation)
OnFocusGain is called any time focus is increased.
type PetAbility ¶
type PetAbility struct { Type PetAbilityType // Focus cost Cost float64 *core.Spell }
func (*PetAbility) IsEmpty ¶
func (ability *PetAbility) IsEmpty() bool
func (*PetAbility) TryCast ¶
func (ability *PetAbility) TryCast(sim *core.Simulation, target *core.Unit, hp *HunterPet) bool
Returns whether the ability was successfully cast.
type PetAbilityType ¶
type PetAbilityType int
const ( Unknown PetAbilityType = iota AcidSpit Bite Claw DemoralizingScreech FireBreath FuriousHowl FroststormBreath Gore LavaBreath LightningBreath MonstrousBite NetherShock Pin PoisonSpit Rake Ravage SavageRend ScorpidPoison Smack Snatch SonicBlast SpiritStrike SporeCloud Stampede Sting Swipe TendonRip VenomWebSpray )
type PetConfig ¶
type PetConfig struct { Name string SpecialAbility PetAbilityType FocusDump PetAbilityType // Randomly select between abilities instead of using a prio. RandomSelection bool }
type PetSpecialAbilityConfig ¶
type PetSpecialAbilityConfig struct { Type PetAbilityType Cost float64 SpellID int32 School core.SpellSchool GCD time.Duration CD time.Duration MinDmg float64 MaxDmg float64 APRatio float64 OnSpellHitDealt func(*core.Simulation, *core.Spell, *core.SpellResult) }
Source Files ¶
- aimed_shot.go
- arcane_shot.go
- aspects.go
- black_arrow.go
- chimera_shot.go
- explosive_shot.go
- explosive_trap.go
- focus.go
- hunter.go
- items.go
- kill_command.go
- kill_shot.go
- multi_shot.go
- pet.go
- pet_abilities.go
- pet_talents.go
- presets.go
- rapid_fire.go
- raptor_strike.go
- rotation.go
- scorpid_sting.go
- serpent_sting.go
- silencing_shot.go
- steady_shot.go
- talents.go
- volley.go
- wotlk_items.go
Click to show internal directories.
Click to hide internal directories.