rogue

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 29, 2023 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SpellFlagBuilder     = core.SpellFlagAgentReserved2
	SpellFlagFinisher    = core.SpellFlagAgentReserved3
	SpellFlagColdBlooded = core.SpellFlagAgentReserved4
)
View Source
const (
	ShouldNotCast shouldCastRotationItemResult = iota
	ShouldBuild
	ShouldCast
	ShouldWait
)
View Source
const RogueBleedTag = "RogueBleed"
View Source
const RuptureEnergyCost = 25.0
View Source
const RuptureSpellID = 26867

Variables

View Source
var AdrenalineRushActionID = core.ActionID{SpellID: 13750}
View Source
var Arena = core.NewItemSet(core.ItemSet{
	Name: "Gladiator's Vestments",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
			agent.GetCharacter().AddStat(stats.Resilience, 100)
			agent.GetCharacter().AddStat(stats.AttackPower, 50)
		},
		4: func(agent core.Agent) {
			agent.GetCharacter().AddStat(stats.AttackPower, 150)

		},
	},
})
View Source
var BladeFlurryActionID = core.ActionID{SpellID: 13877}
View Source
var BladeFlurryHitID = core.ActionID{SpellID: 22482}
View Source
var ItemSetAssassination = core.NewItemSet(core.ItemSet{
	Name: "Assassination Armor",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var MutilateSpellID int32 = 34413
View Source
var OverkillActionID = core.ActionID{SpellID: 58426}
View Source
var TalentTreeSizes = [3]int{27, 28, 28}
View Source
var Tier10 = core.NewItemSet(core.ItemSet{
	Name: "Shadowblade's Battlegear",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var Tier4 = core.NewItemSet(core.ItemSet{
	Name: "Netherblade",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var Tier5 = core.NewItemSet(core.ItemSet{
	Name: "Deathmantle",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

		},
		4: func(agent core.Agent) {

			rogue := agent.(RogueAgent).GetRogue()

			rogue.DeathmantleProcAura = rogue.RegisterAura(core.Aura{
				Label:    "Deathmantle 4pc Proc",
				ActionID: core.ActionID{SpellID: 37171},
				Duration: time.Second * 15,
			})

			ppmm := rogue.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMelee)

			rogue.RegisterAura(core.Aura{
				Label:    "Deathmantle 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() {
						return
					}

					if !spell.ProcMask.Matches(core.ProcMaskMelee) {
						return
					}

					if !ppmm.Proc(sim, spell.ProcMask, "Deathmantle 4pc") {
						return
					}

					rogue.DeathmantleProcAura.Activate(sim)
				},
			})
		},
	},
})
View Source
var Tier6 = core.NewItemSet(core.ItemSet{
	Name: "Slayer's Armor",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var Tier7 = core.NewItemSet(core.ItemSet{
	Name: "Bonescythe Battlegear",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var Tier8 = core.NewItemSet(core.ItemSet{
	Name: "Terrorblade Battlegear",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var Tier9 = core.NewItemSet(core.ItemSet{
	Name:            "VanCleef's Battlegear",
	AlternativeName: "Garona's Battlegear",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

			rogue := agent.(RogueAgent).GetRogue()
			energyMetrics := rogue.NewEnergyMetrics(core.ActionID{SpellID: 67209})

			procAura := rogue.RegisterAura(core.Aura{
				Label:    "VanCleef's 2pc Proc",
				ActionID: core.ActionID{SpellID: 67209},
				Duration: time.Second * 15,
				OnGain: func(aura *core.Aura, sim *core.Simulation) {
					rogue.PseudoStats.CostReduction += 40
				},
				OnExpire: func(aura *core.Aura, sim *core.Simulation) {
					rogue.PseudoStats.CostReduction -= 40
				},
				OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) {
					if !spell.ProcMask.Matches(core.ProcMaskMeleeSpecial) {
						return
					}

					if actualGain := spell.DefaultCast.Cost - spell.CurCast.Cost; actualGain > 0 {
						energyMetrics.AddEvent(40, actualGain)
						aura.Deactivate(sim)
					}
				},
			})

			icd := core.Cooldown{
				Timer:    rogue.NewTimer(),
				Duration: time.Second * 15,
			}
			procAura.Icd = &icd
			procChance := 0.02
			rogue.RegisterAura(core.Aura{
				Label:    "VanCleef's 2pc",
				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 !result.Landed() {
						return
					}
					if !spell.ActionID.IsSpellAction(RuptureSpellID) {
						return
					}
					if !icd.IsReady(sim) {
						return
					}
					if sim.RandomFloat("VanCleef's 2pc") > procChance {
						return
					}
					icd.Use(sim)
					procAura.Activate(sim)
				},
			})
		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var WoundPoisonActionID = core.ActionID{SpellID: 27188}

Functions

func RegisterRogue

func RegisterRogue()

Types

type PoisonProcSource

type PoisonProcSource int
const (
	NormalProc PoisonProcSource = iota
	DeadlyProc
	ShivProc
)

type PriorityAction

type PriorityAction int32
const (
	Skip PriorityAction = iota
	Build
	Cast
	Wait
	Once
)

type Rogue

type Rogue struct {
	core.Character

	Talents  *proto.RogueTalents
	Options  *proto.Rogue_Options
	Rotation *proto.Rogue_Rotation

	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
	InstantPoison  [3]*core.Spell
	WoundPoison    [3]*core.Spell
	Mutilate       *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

	Envenom      *core.Spell
	Eviscerate   *core.Spell
	ExposeArmor  *core.Spell
	Rupture      *core.Spell
	SliceAndDice *core.Spell

	AdrenalineRushAura   *core.Aura
	BladeFlurryAura      *core.Aura
	EnvenomAura          *core.Aura
	ExposeArmorAuras     core.AuraArray
	HungerForBloodAura   *core.Aura
	KillingSpreeAura     *core.Aura
	OverkillAura         *core.Aura
	SliceAndDiceAura     *core.Aura
	MasterOfSubtletyAura *core.Aura
	ShadowstepAura       *core.Aura
	ShadowDanceAura      *core.Aura
	DirtyDeedsAura       *core.Aura
	HonorAmongThieves    *core.Aura
	StealthAura          *core.Aura
	DeathmantleProcAura  *core.Aura

	QuickRecoveryMetrics *core.ResourceMetrics
	// contains filtered or unexported fields
}

func NewRogue

func NewRogue(character core.Character, options *proto.Player) *Rogue

func (*Rogue) AddPartyBuffs

func (rogue *Rogue) AddPartyBuffs(_ *proto.PartyBuffs)

func (*Rogue) AddRaidBuffs

func (rogue *Rogue) AddRaidBuffs(_ *proto.RaidBuffs)

func (*Rogue) ApplyCutToTheChase

func (rogue *Rogue) ApplyCutToTheChase(sim *core.Simulation)

Apply the effects of the Cut to the Chase talent TODO: Put a fresh instance of SnD rather than use the original as per client

func (*Rogue) ApplyEnergyTickMultiplier

func (rogue *Rogue) ApplyEnergyTickMultiplier(multiplier float64)

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 added in v1.0.1

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) CanMutilate

func (rogue *Rogue) CanMutilate() bool

Can the rogue fulfil the weapon equipped requirement for Mutilate?

func (*Rogue) DirtyDeedsMultiplier

func (rogue *Rogue) DirtyDeedsMultiplier() float64

func (*Rogue) EnvenomDuration added in v1.0.1

func (rogue *Rogue) EnvenomDuration(comboPoints int32) time.Duration

func (*Rogue) GetCharacter

func (rogue *Rogue) GetCharacter() *core.Character

func (*Rogue) GetDeadlyPoisonProcChance

func (rogue *Rogue) GetDeadlyPoisonProcChance() float64

func (*Rogue) GetRogue

func (rogue *Rogue) GetRogue() *Rogue

func (*Rogue) HasDagger added in v1.0.1

func (rogue *Rogue) HasDagger(hand core.Hand) bool

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 added in v1.0.1

func (rogue *Rogue) IsStealthed() bool

Check if the rogue is considered in "stealth" for the purpose of casting abilities

func (*Rogue) MeleeCritMultiplier

func (rogue *Rogue) MeleeCritMultiplier(applyLethality bool) float64

func (*Rogue) OnEnergyGain

func (rogue *Rogue) OnEnergyGain(sim *core.Simulation)

func (*Rogue) OnGCDReady

func (rogue *Rogue) OnGCDReady(sim *core.Simulation)

func (*Rogue) Reset

func (rogue *Rogue) Reset(sim *core.Simulation)

func (*Rogue) RuptureDamage added in v1.0.1

func (rogue *Rogue) RuptureDamage(comboPoints int32) float64

func (*Rogue) RuptureDuration

func (rogue *Rogue) RuptureDuration(comboPoints int32) time.Duration

func (*Rogue) RuptureTicks added in v1.0.1

func (rogue *Rogue) RuptureTicks(comboPoints int32) int32

func (*Rogue) SpellCritMultiplier

func (rogue *Rogue) SpellCritMultiplier() float64

func (*Rogue) UpdateInstantPoisonPPM

func (rogue *Rogue) UpdateInstantPoisonPPM(bonusChance float64)

type RogueAgent

type RogueAgent interface {
	GetRogue() *Rogue
}

Agent is a generic way to access underlying rogue on any of the agents.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL