Documentation
¶
Index ¶
- Constants
- Variables
- type APLValueHunterCurrentPetFocus
- type APLValueHunterCurrentPetFocusPercent
- type APLValueHunterPetIsActive
- type Hunter
- func (hunter *Hunter) AddPartyBuffs(_ *proto.PartyBuffs)
- func (hunter *Hunter) AddRaidBuffs(raidBuffs *proto.RaidBuffs)
- func (hunter *Hunter) ApplyCrimsonCleaverHunterEffect(aura *core.Aura)
- func (hunter *Hunter) ApplyFallenRegalityHunterBonus(aura *core.Aura)
- func (hunter *Hunter) ApplyHackAndSmashHunterBonus()
- func (hunter *Hunter) ApplyMercyHunterEffect(aura *core.Aura)
- func (hunter *Hunter) ApplyQueensfallHunterEffect(aura *core.Aura)
- func (hunter *Hunter) ApplyRegicideHunterEffect(itemID int32, aura *core.Aura)
- 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) NewAPLValue(rot *core.APLRotation, config *proto.APLValue) core.APLValue
- 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 ¶
const ( SpellFlagStrike = core.SpellFlagAgentReserved1 SpellFlagSting = core.SpellFlagAgentReserved2 )
const ( ClassSpellMask_HunterNone uint64 = 0 // Shots ClassSpellMask_HunterAimedShot uint64 = 1 << iota ClassSpellMask_HunterArcaneShot ClassSpellMask_HunterChimeraShot ClassSpellMask_HunterExplosiveShot ClassSpellMask_HunterKillShot ClassSpellMask_HunterMultiShot ClassSpellMask_HunterSteadyShot // Strikes ClassSpellMask_HunterFlankingStrike ClassSpellMask_HunterRaptorStrike ClassSpellMask_HunterRaptorStrikeHit ClassSpellMask_HunterWyvernStrike // Stings ClassSpellMask_HunterSerpentSting ClassSpellMask_HunterSoFSerpentSting // Serpent Sting from [Strings of Fate] // Traps ClassSpellMask_HunterExplosiveTrap ClassSpellMask_HunterFreezingTrap ClassSpellMask_HunterImmolationTrap // Other ClassSpellMask_HunterCarve ClassSpellMask_HunterCarveHit ClassSpellMask_HunterMongooseBite ClassSpellMask_HunterWingClip ClassSpellMask_HunterVolley ClassSpellMask_HunterChimeraSerpent ClassSpellMask_HunterHuntersMark ClassSpellMask_HunterFocusFire // Pet Spells ClassSpellMask_HunterPetBite ClassSpellMask_HunterPetClaw ClassSpellMask_HunterPetFlankingStrike ClassSpellMask_HunterPetLightningBreath ClassSpellMask_HunterPetLavaBreath ClassSpellMask_HunterPetScreech ClassSpellMask_HunterPetScorpidPoison ClassSpellMask_HunterPetBasicAttacks = ClassSpellMask_HunterPetBite | ClassSpellMask_HunterPetClaw | ClassSpellMask_HunterPetLightningBreath | ClassSpellMask_HunterPetLavaBreath | ClassSpellMask_HunterPetScorpidPoison ClassSpellMask_HunterPetSpecialAttacks = ClassSpellMask_HunterPetScreech // TODO: Other specials? ClassSpellMask_HunterAll = 1<<iota - 1 ClassSpellMask_HunterTraps = ClassSpellMask_HunterExplosiveTrap | ClassSpellMask_HunterFreezingTrap | ClassSpellMask_HunterImmolationTrap ClassSpellMask_HunterShots = ClassSpellMask_HunterAimedShot | ClassSpellMask_HunterArcaneShot | ClassSpellMask_HunterChimeraShot | ClassSpellMask_HunterExplosiveShot | ClassSpellMask_HunterKillShot | ClassSpellMask_HunterMultiShot | ClassSpellMask_HunterSteadyShot ClassSpellMask_HunterStrikes = ClassSpellMask_HunterFlankingStrike | ClassSpellMask_HunterRaptorStrike | ClassSpellMask_HunterRaptorStrikeHit | ClassSpellMask_HunterWyvernStrike | ClassSpellMask_HunterCarve | ClassSpellMask_HunterCarveHit ClassSpellMask_HunterStings = ClassSpellMask_HunterSerpentSting | ClassSpellMask_HunterSoFSerpentSting )
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 CloakOfTheUnseenPath = 233420 ScytheOfTheUnseenPath = 233421 SignetOfTheUnseenPath = 233422 StringsOfFate = 240837 PoleaxeOfTheBeast = 240924 )
const CrimsonCleaverDamageBonus = 1.20
const MeleeSpecialistProcChance = 0.40
TODO: Make this an aura
const MercyDamageBonus = 1.20
const PetGCD = time.Millisecond * 1600
Pet AI doesn't use abilities immediately, so model this with a 1.6s GCD.
const RaptorStrikeRanks = 8
const TAQRanged2PBonusLabel = "S03 - Item - TAQ - Hunter - Ranged 2P Bonus"
Variables ¶
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) }, }, })
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) }, }, })
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) }, }, })
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) }, }, })
var ItemSetCryptstalkerArmor = core.NewItemSet(core.ItemSet{ Name: "Cryptstalker Armor", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyNaxxramasRanged2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyNaxxramasRanged4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyNaxxramasRanged6PBonus() }, }, })
var ItemSetCryptstalkerProwess = core.NewItemSet(core.ItemSet{ Name: "Cryptstalker Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyNaxxramasMelee2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyNaxxramasMelee4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyNaxxramasMelee6PBonus() }, }, })
var ItemSetDawnstalkerArmor = core.NewItemSet(core.ItemSet{ Name: "Dawnstalker Armor", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyScarletEnclaveRanged2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyScarletEnclaveRanged4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyScarletEnclaveRanged6PBonus() }, }, })
var ItemSetDawnstalkerProwess = core.NewItemSet(core.ItemSet{ Name: "Dawnstalker Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyScarletEnclaveMelee2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyScarletEnclaveMelee4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyScarletEnclaveMelee6PBonus() }, }, })
var ItemSetDragonstalkerProwess = core.NewItemSet(core.ItemSet{ Name: "Dragonstalker's Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT2Melee2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT2Melee4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT2Melee6PBonus() }, }, })
var ItemSetDragonstalkerPursuit = core.NewItemSet(core.ItemSet{ Name: "Dragonstalker's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT2Ranged2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT2Ranged4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT2Ranged6PBonus() }, }, })
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) }, }, })
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, }) }, }, })
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) }, }, })
var ItemSetGiantstalkerProwess = core.NewItemSet(core.ItemSet{ Name: "Giantstalker Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT1Melee2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT1Melee4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT1Melee6PBonus() }, }, })
var ItemSetGiantstalkerPursuit = core.NewItemSet(core.ItemSet{ Name: "Giantstalker Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT1Ranged4PBonus() }, 6: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyT1Ranged6PBonus() }, }, })
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) }, }, })
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) }, }, })
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) }, }, })
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() hunter.applyZGBeastmaster3PBonus() }, 5: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyZGBeastmaster5PBonus() }, }, })
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, }) }, }, })
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) }, }, })
var PetConfigs = map[proto.Hunter_Options_PetType]PetConfig{ proto.Hunter_Options_Cat: { Name: "Cat", MobType: proto.MobType_MobTypeBeast, SpecialAbility: Bite, FocusDump: Claw, Health: 0.98, Armor: 1.00, Damage: 1.10, CustomRotation: func(sim *core.Simulation, hp *HunterPet, tryCast func(*core.Spell) bool) { if hp.specialAbility.CD.IsReady(sim) && hp.CurrentFocusPerSecond() > hp.focusDump.Cost.BaseCost/1.6 { if !tryCast(hp.specialAbility) && hp.GCD.IsReady(sim) { hp.WaitUntil(sim, sim.CurrentTime+time.Millisecond*500) } } else { if !tryCast(hp.focusDump) && hp.GCD.IsReady(sim) { hp.WaitUntil(sim, sim.CurrentTime+time.Millisecond*500) } } }, }, proto.Hunter_Options_WindSerpent: { Name: "Wind Serpent", MobType: proto.MobType_MobTypeBeast, FocusDump: LightningBreath, Health: 1.00, Armor: 1.00, Damage: 1.07, }, proto.Hunter_Options_Bat: { Name: "Bat", MobType: proto.MobType_MobTypeBeast, SpecialAbility: Bite, FocusDump: Screech, Health: 1.00, Armor: 1.00, Damage: 1.07, CustomRotation: func(sim *core.Simulation, hp *HunterPet, tryCast func(*core.Spell) bool) { if hp.specialAbility.CD.IsReady(sim) { if !tryCast(hp.specialAbility) && hp.GCD.IsReady(sim) { hp.WaitUntil(sim, sim.CurrentTime+time.Millisecond*500) } } else { if !tryCast(hp.focusDump) && hp.GCD.IsReady(sim) { hp.WaitUntil(sim, sim.CurrentTime+time.Millisecond*500) } } }, }, proto.Hunter_Options_Bear: { Name: "Bear", MobType: proto.MobType_MobTypeBeast, SpecialAbility: Bite, FocusDump: Claw, Health: 1.08, Armor: 1.05, Damage: 0.91, }, proto.Hunter_Options_Boar: { Name: "Boar", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 1.04, Armor: 1.09, Damage: 0.90, }, proto.Hunter_Options_CarrionBird: { Name: "Carrion Bird", MobType: proto.MobType_MobTypeBeast, SpecialAbility: Bite, FocusDump: Claw, Health: 1.00, Armor: 1.05, Damage: 1.00, }, proto.Hunter_Options_Owl: { Name: "Owl", MobType: proto.MobType_MobTypeBeast, FocusDump: Claw, Health: 1.00, Armor: 1.00, Damage: 1.07, }, proto.Hunter_Options_CoreHound: { Name: "Core Hound", MobType: proto.MobType_MobTypeBeast, FocusDump: LavaBreath, Health: 1.06, Armor: 1.01, Damage: 1.02, }, proto.Hunter_Options_Crab: { Name: "Crab", MobType: proto.MobType_MobTypeBeast, FocusDump: Claw, Health: 0.96, Armor: 1.13, Damage: 0.95, }, proto.Hunter_Options_Crocolisk: { Name: "Crocolisk", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 0.95, Armor: 1.10, Damage: 1.00, }, proto.Hunter_Options_Gorilla: { Name: "Gorilla", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 1.04, Armor: 1.00, Damage: 1.02, }, proto.Hunter_Options_Hyena: { Name: "Hyena", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 1.00, Armor: 1.05, Damage: 1.00, }, proto.Hunter_Options_Raptor: { Name: "Raptor", MobType: proto.MobType_MobTypeBeast, SpecialAbility: Bite, FocusDump: Claw, Health: 0.95, Armor: 1.03, Damage: 1.10, }, proto.Hunter_Options_Scorpid: { Name: "Scorpid", MobType: proto.MobType_MobTypeBeast, SpecialAbility: ScorpidPoison, FocusDump: Claw, Health: 1.00, Armor: 1.10, Damage: 0.94, CustomRotation: func(sim *core.Simulation, hp *HunterPet, tryCast func(*core.Spell) bool) { target := hp.CurrentTarget if (hp.specialAbility.Dot(target).GetStacks() < hp.specialAbility.Dot(target).MaxStacks || hp.specialAbility.Dot(target).RemainingDuration(sim) < time.Second*3) && hp.CurrentFocus() < 90 { if !tryCast(hp.specialAbility) && hp.GCD.IsReady(sim) { hp.WaitUntil(sim, sim.CurrentTime+time.Millisecond*500) } } else { if !tryCast(hp.focusDump) && hp.GCD.IsReady(sim) { hp.WaitUntil(sim, sim.CurrentTime+time.Millisecond*500) } } }, }, proto.Hunter_Options_Spider: { Name: "Spider", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 1.00, Armor: 1.00, Damage: 1.07, }, proto.Hunter_Options_Tallstrider: { Name: "Tallstrider", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 1.05, Armor: 1.00, Damage: 1.00, }, proto.Hunter_Options_Turtle: { Name: "Turtle", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 1.00, Armor: 1.13, Damage: 0.90, }, proto.Hunter_Options_Wolf: { Name: "Wolf", MobType: proto.MobType_MobTypeBeast, FocusDump: Bite, Health: 1.00, Armor: 1.05, Damage: 1.00, }, }
Abilities reference: https://wotlk.wowhead.com/hunter-pets https://wotlk.wowhead.com/guides/hunter-dps-best-pets-taming-loyalty-burning-crusade-classic
var RaptorStrikeBaseDamage = [RaptorStrikeRanks + 1]float64{0, 5, 11, 21, 34, 50, 80, 110, 140}
var RaptorStrikeLevel = [RaptorStrikeRanks + 1]int{0, 1, 8, 16, 24, 32, 40, 48, 56}
var RaptorStrikeManaCost = [RaptorStrikeRanks + 1]float64{0, 15, 25, 35, 45, 55, 70, 80, 100}
var RaptorStrikeSpellId = [RaptorStrikeRanks + 1]int32{0, 2973, 14260, 14261, 14262, 14263, 14264, 14265, 14266}
var RaptorStrikeSpellIdMeleeSpecialist = [RaptorStrikeRanks + 1]int32{0, 415335, 415336, 415337, 415338, 415340, 415341, 415342, 415343}
var StrikersProwess = core.NewItemSet(core.ItemSet{ Name: "Striker's Prowess", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyTAQMelee2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyTAQMelee4PBonus() }, }, })
var StrikersPursuit = core.NewItemSet(core.ItemSet{ Name: "Striker's Pursuit", Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyTAQRanged2PBonus() }, 4: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyTAQRanged4PBonus() }, }, })
var TalentTreeSizes = [3]int{16, 14, 16}
var TrappingsOfTheUnseenPath = core.NewItemSet(core.ItemSet{ Name: "Trappings of the Unseen Path", Bonuses: map[int32]core.ApplyEffect{ 3: func(agent core.Agent) { hunter := agent.(HunterAgent).GetHunter() hunter.applyRAQBeastmastery5PBonus() }, }, })
Functions ¶
This section is empty.
Types ¶
type APLValueHunterCurrentPetFocus ¶ added in v0.0.82
type APLValueHunterCurrentPetFocus struct {
core.DefaultAPLValueImpl
// contains filtered or unexported fields
}
func (*APLValueHunterCurrentPetFocus) GetFloat ¶ added in v0.0.82
func (value *APLValueHunterCurrentPetFocus) GetFloat(sim *core.Simulation) float64
func (*APLValueHunterCurrentPetFocus) String ¶ added in v0.0.82
func (value *APLValueHunterCurrentPetFocus) String() string
func (*APLValueHunterCurrentPetFocus) Type ¶ added in v0.0.82
func (value *APLValueHunterCurrentPetFocus) Type() proto.APLValueType
type APLValueHunterCurrentPetFocusPercent ¶ added in v0.0.82
type APLValueHunterCurrentPetFocusPercent struct {
core.DefaultAPLValueImpl
// contains filtered or unexported fields
}
func (*APLValueHunterCurrentPetFocusPercent) GetFloat ¶ added in v0.0.82
func (value *APLValueHunterCurrentPetFocusPercent) GetFloat(sim *core.Simulation) float64
func (*APLValueHunterCurrentPetFocusPercent) String ¶ added in v0.0.82
func (value *APLValueHunterCurrentPetFocusPercent) String() string
func (*APLValueHunterCurrentPetFocusPercent) Type ¶ added in v0.0.82
func (value *APLValueHunterCurrentPetFocusPercent) Type() proto.APLValueType
type APLValueHunterPetIsActive ¶ added in v0.0.82
type APLValueHunterPetIsActive struct {
core.DefaultAPLValueImpl
// contains filtered or unexported fields
}
func (*APLValueHunterPetIsActive) GetBool ¶ added in v0.0.82
func (value *APLValueHunterPetIsActive) GetBool(sim *core.Simulation) bool
func (*APLValueHunterPetIsActive) String ¶ added in v0.0.82
func (value *APLValueHunterPetIsActive) String() string
func (*APLValueHunterPetIsActive) Type ¶ added in v0.0.82
func (value *APLValueHunterPetIsActive) Type() proto.APLValueType
type Hunter ¶
type Hunter struct {
core.Character
Talents *proto.HunterTalents
Options *proto.Hunter_Options
AmmoDPS float64
AmmoDamageBonus float64
NormalizedAmmoDamageBonus float64
// Miscellaneous set bonuses that require extra logic inside of spells
FlankingStrikeBonusPerStack float64
SerpentStingAPCoeff float64
MultiShotTargetCount int32
RaptorFuryDamageMultiplier int64
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
SoFSerpentSting []*core.Spell
SerpentStingChimeraShot *core.Spell
SilencingShot *core.Spell
SteadyShot *core.Spell
Volley *core.Spell
CarveMH *core.Spell
CarveOH *core.Spell
WingClip *core.Spell
HuntersMark *core.Spell
Shots []*core.Spell
Strikes []*core.Spell
MeleeSpells []*core.Spell
LastShot *core.Spell
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
FocusFireAura *core.Aura
HuntersMarkAuras core.AuraArray
// contains filtered or unexported fields
}
func (*Hunter) AddPartyBuffs ¶
func (hunter *Hunter) AddPartyBuffs(_ *proto.PartyBuffs)
func (*Hunter) AddRaidBuffs ¶
func (*Hunter) ApplyCrimsonCleaverHunterEffect ¶ added in v0.0.59
Equip: Chance on hit to cause your next 2 instances of Raptor Strike damage to be increased by 20%. Lasts 12 sec. (100ms cooldown) Confirmed PPM 1.0
func (*Hunter) ApplyFallenRegalityHunterBonus ¶ added in v0.0.52
Flanking Strike's damage buff is increased by an additional 2% per stack. When striking from behind, your target takes 150% increased damage from Flanking Strike.
func (*Hunter) ApplyHackAndSmashHunterBonus ¶ added in v0.0.59
func (hunter *Hunter) ApplyHackAndSmashHunterBonus()
The damage increaes from Mercy's and Crimson Cleaver's effects are increased by 10%.
func (*Hunter) ApplyMercyHunterEffect ¶ added in v0.0.59
Equip: Chance on hit to cause your next 2 instances of damage from your pet's special abilities to be increased by 20%. Lasts 12 sec. (100ms cooldown) Confirmed PPM 1.0
func (*Hunter) ApplyQueensfallHunterEffect ¶ added in v0.0.52
Your Raptor Strike and Mongoose Bite critical strikes set the duration of your Serpent Sting on the target to 15 sec
func (*Hunter) ApplyRegicideHunterEffect ¶ added in v0.0.53
Striking a higher level enemy applies a stack of Coup, increasing their damage taken from your next Kill Shot by 5% per stack, stacking up to 20 times.
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) NewAPLValue ¶ added in v0.0.82
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 Screech FuriousHowl LightningBreath ScorpidPoison LavaBreath )
Source Files
¶
- aimed_shot.go
- apl_values.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
- hunters_mark.go
- immolation_trap.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_pve_phase_8.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