Documentation
¶
Index ¶
- Constants
- Variables
- type Rogue
- func (rogue *Rogue) AddComboPointsOrAnticipation(sim *core.Simulation, numPoints int32, target *core.Unit, ...)
- func (rogue *Rogue) AddPartyBuffs(_ *proto.PartyBuffs)
- func (rogue *Rogue) AddRaidBuffs(_ *proto.RaidBuffs)
- func (rogue *Rogue) ApplyAdditiveEnergyRegenBonus(sim *core.Simulation, increment float64)
- func (rogue *Rogue) ApplyCutToTheChase(sim *core.Simulation)
- func (rogue *Rogue) ApplyFinisher(sim *core.Simulation, spell *core.Spell)
- func (rogue *Rogue) ApplyTalents()
- func (rogue *Rogue) BreakStealth(sim *core.Simulation)
- func (rogue *Rogue) CritMultiplier(applyLethality bool) float64
- func (rogue *Rogue) GetBaseDamageFromCoefficient(c float64) float64
- func (rogue *Rogue) GetCharacter() *core.Character
- func (rogue *Rogue) GetLethalPoisonProcChance() float64
- func (rogue *Rogue) GetMasteryBonus() float64
- func (rogue *Rogue) GetMasteryBonusFromRating(masteryRating float64) float64
- func (rogue *Rogue) GetRogue() *Rogue
- func (rogue *Rogue) HasDagger(hand core.Hand) bool
- func (rogue *Rogue) HasMajorGlyph(glyph proto.RogueMajorGlyph) bool
- func (rogue *Rogue) HasMinorGlyph(glyph proto.RogueMinorGlyph) bool
- func (rogue *Rogue) HasThrown() bool
- func (rogue *Rogue) Initialize()
- func (rogue *Rogue) IsStealthed() bool
- func (rogue *Rogue) OnEncounterStart(sim *core.Simulation)
- func (rogue *Rogue) Reset(sim *core.Simulation)
- func (rogue *Rogue) UpdateLethalPoisonPPH(bonusChance float64)
- type RogueAgent
Constants ¶
View Source
const ( SpellFlagBuilder = core.SpellFlagAgentReserved2 SpellFlagFinisher = core.SpellFlagAgentReserved3 SpellFlagSealFate = core.SpellFlagAgentReserved4 )
View Source
const ( RogueSpellFlagNone int64 = 0 RogueSpellAmbush int64 = 1 << iota RogueSpellBackstab RogueSpellEnvenom RogueSpellEviscerate RogueSpellExposeArmor RogueSpellFanOfKnives RogueSpellFeint RogueSpellGarrote RogueSpellGouge RogueSpellRecuperate RogueSpellRupture RogueSpellCrimsonTempest RogueSpellCrimsonTempestDoT RogueSpellShiv RogueSpellSinisterStrike RogueSpellSliceAndDice RogueSpellStealth RogueSpellTricksOfTheTrade RogueSpellTricksOfTheTradeThreat RogueSpellVanish RogueSpellHemorrhage RogueSpellPremeditation RogueSpellPreparation RogueSpellShadowDance RogueSpellShadowstep RogueSpellAdrenalineRush RogueSpellBladeFlurry RogueSpellKillingSpree RogueSpellKillingSpreeHit RogueSpellMainGauche RogueSpellRevealingStrike RogueSpellColdBlood RogueSpellMutilate RogueSpellMutilateHit RogueSpellDispatch RogueSpellVendetta RogueSpellVenomousWounds RogueSpellWoundPoison RogueSpellDeadlyPoison RogueSpellShadowBlades RogueSpellShadowBladesHit RogueSpellMarkedForDeath RogueSpellLast RogueSpellsAll = RogueSpellLast<<1 - 1 RogueSpellPoisons = RogueSpellVenomousWounds | RogueSpellWoundPoison | RogueSpellDeadlyPoison RogueSpellGenerator = RogueSpellBackstab | RogueSpellHemorrhage | RogueSpellSinisterStrike | RogueSpellRevealingStrike | RogueSpellMutilate | RogueSpellDispatch | RogueSpellAmbush | RogueSpellGarrote | RogueSpellFanOfKnives RogueSpellDamagingFinisher = RogueSpellEnvenom | RogueSpellEviscerate | RogueSpellRupture | RogueSpellCrimsonTempest RogueSpellWeightedBlades = RogueSpellSinisterStrike | RogueSpellRevealingStrike RogueSpellActives = RogueSpellGenerator | RogueSpellDamagingFinisher | RogueSpellSliceAndDice )
View Source
const RogueBleedTag = "RogueBleed"
View Source
const RuptureEnergyCost = 25.0
View Source
const RuptureSpellID = 1943
Variables ¶
View Source
var FangsOfTheFather = core.NewItemSet(core.ItemSet{ Name: "Fangs of the Father", Slots: core.AllWeaponSlots(), Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() cpMetrics := character.NewComboPointMetrics(core.ActionID{SpellID: 109950}) agiAura := core.MakeStackingAura(character, core.StackingStatAura{ Aura: core.Aura{ Label: "Shadows of the Destroyer", ActionID: core.ActionID{SpellID: 109941}, Duration: time.Second * 30, MaxStacks: 50, }, BonusPerStack: stats.Stats{stats.Agility: 17}, }) wingsProc := character.GetOrRegisterAura(core.Aura{ Label: "Fury of the Destroyer", ActionID: core.ActionID{SpellID: 109949}, Duration: time.Second * 6, OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.AddComboPoints(sim, 5, aura.Unit.CurrentComboTarget, cpMetrics) }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { if spell.Flags.Matches(SpellFlagFinisher) { aura.Unit.AddComboPoints(sim, 5, aura.Unit.CurrentComboTarget, cpMetrics) } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { agiAura.SetStacks(sim, 0) agiAura.Deactivate(sim) }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue Legendary Daggers Stage 3", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMelee, Outcome: core.OutcomeLanded, ProcChance: getFangsProcRate(character), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { stacks := float64(agiAura.GetStacks()) if stacks > 30 && !wingsProc.IsActive() { if stacks == 50 || sim.Proc(1.0/(50-stacks), "Fangs of the Father") { wingsProc.Activate(sim) } else { agiAura.Activate(sim) agiAura.AddStack(sim) } } else { agiAura.Activate(sim) agiAura.AddStack(sim) } }, }) }, }, })
Golad + Tiriosh
View Source
var PVPSet = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Vestments", ID: 1113, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { }, 4: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() metric := character.NewEnergyMetrics(core.ActionID{SpellID: 21975}) setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { character.UpdateMaxEnergy(sim, 30, metric) }) setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { character.UpdateMaxEnergy(sim, -30, metric) }) setBonusAura.ExposeToAPL(21975) }, }, })
View Source
var Tier14 = core.NewItemSet(core.ItemSet{ Name: "Battlegear of the Thousandfold Blades", 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: RogueSpellVenomousWounds, FloatValue: 0.2, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, ClassMask: RogueSpellSinisterStrike, FloatValue: 0.15, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, ClassMask: RogueSpellBackstab, FloatValue: 0.1, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() addTime := time.Second * time.Duration(core.Ternary(rogue.Spec == proto.Spec_SpecCombatRogue, 6, 12)) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: RogueSpellShadowBlades, TimeValue: addTime, }) }, }, })
View Source
var Tier15 = core.NewItemSet(core.ItemSet{ Name: "Nine-Tail Battlegear", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() rogue.Has2PT15 = true }, 4: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() energyMod := rogue.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_PowerCost_Pct, ClassMask: RogueSpellsAll, FloatValue: -0.15, }) gcdMod := rogue.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_GlobalCooldown_Flat, ClassMask: RogueSpellActives, TimeValue: time.Millisecond * -300, }) aura := rogue.RegisterAura(core.Aura{ Label: "Shadow Blades Energy Cost Reduction", ActionID: core.ActionID{SpellID: 138151}, Duration: time.Second * 12, OnGain: func(aura *core.Aura, sim *core.Simulation) { energyMod.Activate() gcdMod.Activate() }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { energyMod.Deactivate() gcdMod.Deactivate() }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue T15 4P Bonus", Callback: core.CallbackOnCastComplete, ClassSpellMask: RogueSpellShadowBlades, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { aura.Activate(sim) }, }) }, }, })
View Source
var Tier16 = core.NewItemSet(core.ItemSet{ Name: "Barbed Assassin Battlegear", DisabledInChallengeMode: true, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() energyReduction := 0 switch rogue.Spec { case proto.Spec_SpecSubtletyRogue: energyReduction = -2 case proto.Spec_SpecAssassinationRogue: energyReduction = -6 default: energyReduction = -15 } energyMod := rogue.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_PowerCost_Flat, ClassMask: RogueSpellGenerator, IntValue: 0, }) rogue.T16EnergyAura = rogue.RegisterAura(core.Aura{ Label: "Silent Blades", ActionID: core.ActionID{SpellID: 145193}, Duration: time.Second * 30, MaxStacks: 5, OnGain: func(aura *core.Aura, sim *core.Simulation) { energyMod.UpdateIntValue(aura.GetStacks() * int32(energyReduction)) energyMod.Activate() }, OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks, newStacks int32) { energyMod.UpdateIntValue(aura.GetStacks() * int32(energyReduction)) }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { energyMod.Deactivate() }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if result.Landed() && spell.Flags.Matches(SpellFlagBuilder) && spell.DefaultCast.Cost > 0 { aura.Deactivate(sim) } }, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() if rogue.Spec == proto.Spec_SpecSubtletyRogue { aura := rogue.RegisterAura(core.Aura{ Label: "Sleight of Hand", ActionID: core.ActionID{SpellID: 145211}, Duration: time.Second * 10, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell == rogue.Ambush { aura.Deactivate(sim) } }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue T16 4P Bonus", Callback: core.CallbackOnApplyEffects, ClassSpellMask: RogueSpellBackstab, Outcome: core.OutcomeLanded, ProcChance: 0.04, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { aura.Activate(sim) }, }) } else if rogue.Spec == proto.Spec_SpecCombatRogue { rogue.T16SpecMod = rogue.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, ClassMask: RogueSpellKillingSpreeHit, FloatValue: 0.1, }) } else if rogue.Spec == proto.Spec_SpecAssassinationRogue { aura := rogue.RegisterAura(core.Aura{ Label: "Toxicologist", ActionID: core.ActionID{SpellID: 145249}, Duration: time.Second * 5, MaxStacks: 20, OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks, newStacks int32) { change := newStacks - oldStacks aura.Unit.AddStatDynamic(sim, stats.MasteryRating, float64(250*change)) }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue T16 4P Bonus", Callback: core.CallbackOnCastComplete, ClassSpellMask: RogueSpellVendetta, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { aura.Activate(sim) }, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Toxicologist Trigger", Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: RogueSpellActives, ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { return rogue.Vendetta.RelatedAuraArrays.AnyActive(result.Target) }, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { aura.Activate(sim) aura.AddStack(sim) }, }) } }, }, })
Functions ¶
This section is empty.
Types ¶
type Rogue ¶
type Rogue struct {
core.Character
ClassSpellScaling float64
Talents *proto.RogueTalents
Options *proto.RogueOptions
AssassinationOptions *proto.AssassinationRogue_Options
CombatOptions *proto.CombatRogue_Options
SubtletyOptions *proto.SubtletyRogue_Options
MasteryBaseValue float64
MasteryMultiplier float64
SliceAndDiceBonusFlat float64 // The flat bonus Attack Speed bonus before Mastery is applied
AdditiveEnergyRegenBonus float64
Backstab *core.Spell
BladeFlurry *core.Spell
DeadlyPoison *core.Spell
FanOfKnives *core.Spell
Feint *core.Spell
Garrote *core.Spell
Ambush *core.Spell
Hemorrhage *core.Spell
GhostlyStrike *core.Spell
HungerForBlood *core.Spell
WoundPoison *core.Spell
Mutilate *core.Spell
Dispatch *core.Spell
MutilateMH *core.Spell
MutilateOH *core.Spell
Shiv *core.Spell
SinisterStrike *core.Spell
TricksOfTheTrade *core.Spell
Shadowstep *core.Spell
Preparation *core.Spell
Premeditation *core.Spell
ShadowDance *core.Spell
ColdBlood *core.Spell
Vanish *core.Spell
VenomousWounds *core.Spell
Vendetta *core.Spell
RevealingStrike *core.Spell
KillingSpree *core.Spell
AdrenalineRush *core.Spell
Gouge *core.Spell
ShadowBlades *core.Spell
Envenom *core.Spell
Eviscerate *core.Spell
ExposeArmor *core.Spell
Rupture *core.Spell
SliceAndDice *core.Spell
CrimsonTempest *core.Spell
CrimsonTempestDoT *core.Spell
AdrenalineRushAura *core.Aura
BladeFlurryAura *core.Aura
EnvenomAura *core.Aura
ExposeArmorAuras core.AuraArray
HungerForBloodAura *core.Aura
KillingSpreeAura *core.Aura
SliceAndDiceAura *core.Aura
MasterOfSubtletyAura *core.Aura
ShadowstepAura *core.Aura
ShadowDanceAura *core.Aura
DirtyDeedsAura *core.Aura
HonorAmongThieves *core.Aura
StealthAura *core.Aura
SubterfugeAura *core.Aura
BanditsGuileAura *core.Aura
AnticipationAura *core.Aura
ShadowBladesAura *core.Aura
NightstalkerMod *core.SpellMod
ShadowFocusMod *core.SpellMod
MasterPoisonerDebuffAuras core.AuraArray
SavageCombatDebuffAuras core.AuraArray
WoundPoisonDebuffAuras core.AuraArray
Has2PT15 bool
T16EnergyAura *core.Aura
T16SpecMod *core.SpellMod
// contains filtered or unexported fields
}
func (*Rogue) AddComboPointsOrAnticipation ¶
func (rogue *Rogue) AddComboPointsOrAnticipation(sim *core.Simulation, numPoints int32, target *core.Unit, metric *core.ResourceMetrics)
func (*Rogue) AddPartyBuffs ¶
func (rogue *Rogue) AddPartyBuffs(_ *proto.PartyBuffs)
func (*Rogue) AddRaidBuffs ¶
func (*Rogue) ApplyAdditiveEnergyRegenBonus ¶
func (rogue *Rogue) ApplyAdditiveEnergyRegenBonus(sim *core.Simulation, increment float64)
func (*Rogue) ApplyCutToTheChase ¶
func (rogue *Rogue) ApplyCutToTheChase(sim *core.Simulation)
func (*Rogue) ApplyFinisher ¶
func (rogue *Rogue) ApplyFinisher(sim *core.Simulation, spell *core.Spell)
Apply the effect of successfully casting a finisher to combo points
func (*Rogue) ApplyTalents ¶
func (rogue *Rogue) ApplyTalents()
func (*Rogue) BreakStealth ¶
func (rogue *Rogue) BreakStealth(sim *core.Simulation)
Deactivate Stealth if it is active. This must be added to all abilities that cause Stealth to fade.
func (*Rogue) CritMultiplier ¶
func (*Rogue) GetBaseDamageFromCoefficient ¶
func (*Rogue) GetCharacter ¶
func (*Rogue) GetLethalPoisonProcChance ¶
func (*Rogue) GetMasteryBonus ¶
func (*Rogue) GetMasteryBonusFromRating ¶
func (*Rogue) HasDagger ¶
Does the rogue have a dagger equipped in the specified hand (main or offhand)?
func (*Rogue) HasMajorGlyph ¶
func (rogue *Rogue) HasMajorGlyph(glyph proto.RogueMajorGlyph) bool
func (*Rogue) HasMinorGlyph ¶
func (rogue *Rogue) HasMinorGlyph(glyph proto.RogueMinorGlyph) bool
func (*Rogue) Initialize ¶
func (rogue *Rogue) Initialize()
func (*Rogue) IsStealthed ¶
Check if the rogue is considered in "stealth" for the purpose of casting abilities
func (*Rogue) OnEncounterStart ¶ added in v0.0.13
func (rogue *Rogue) OnEncounterStart(sim *core.Simulation)
func (*Rogue) Reset ¶
func (rogue *Rogue) Reset(sim *core.Simulation)
func (*Rogue) UpdateLethalPoisonPPH ¶
type RogueAgent ¶
type RogueAgent interface {
GetRogue() *Rogue
}
Agent is a generic way to access underlying rogue on any of the agents.
Source Files
¶
Click to show internal directories.
Click to hide internal directories.