warlock

package
v0.1.12 Latest Latest
Warning

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

Go to latest
Published: Jan 24, 2023 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

importing dependencies

Index

Constants

View Source
const PetExpertiseScale = 1.53

Variables

View Source
var ItemSetDarkCovensRegalia = core.NewItemSet(core.ItemSet{
	Name: "Dark Coven's Regalia",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

		},
		4: func(agent core.Agent) {
			warlock := agent.(WarlockAgent).GetWarlock()
			pet := warlock.Pets[0].GetCharacter()

			DeviousMindsAura := warlock.RegisterAura(core.Aura{
				Label:    "Devious Minds",
				ActionID: core.ActionID{SpellID: 70840},
				Duration: time.Second * 10,
				OnGain: func(aura *core.Aura, sim *core.Simulation) {
					aura.Unit.PseudoStats.DamageDealtMultiplier *= 1.1
				},
				OnExpire: func(aura *core.Aura, sim *core.Simulation) {
					aura.Unit.PseudoStats.DamageDealtMultiplier /= 1.1
				},
			})

			petDeviousMindsAura := pet.RegisterAura(core.Aura{
				Label:    "Devious Minds",
				ActionID: core.ActionID{SpellID: 70840},
				Duration: time.Second * 10,
				OnGain: func(aura *core.Aura, sim *core.Simulation) {
					aura.Unit.PseudoStats.DamageDealtMultiplier *= 1.1
				},
				OnExpire: func(aura *core.Aura, sim *core.Simulation) {
					aura.Unit.PseudoStats.DamageDealtMultiplier /= 1.1
				},
			})

			warlock.RegisterAura(core.Aura{
				Label:    "4pT10 Hidden Aura",
				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 == warlock.UnstableAffliction || spell == warlock.ImmolateDot.Spell {
						if sim.RandomFloat("4pT10") < 0.15 {
							DeviousMindsAura.Activate(sim)
							DeviousMindsAura.Refresh(sim)
							petDeviousMindsAura.Activate(sim)
							petDeviousMindsAura.Refresh(sim)
						}
					}
				},
			})
		},
	},
})

T10

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

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

		},
	},
})

T8

View Source
var ItemSetGladiatorsFelshroud = core.NewItemSet(core.ItemSet{
	Name: "Gladiator's Felshroud",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
			warlock := agent.(WarlockAgent).GetWarlock()
			warlock.AddStat(stats.SpellPower, 29)
		},
		4: func(agent core.Agent) {
			warlock := agent.(WarlockAgent).GetWarlock()
			warlock.AddStat(stats.SpellPower, 88)
		},
	},
})
View Source
var ItemSetGuldansRegalia = core.NewItemSet(core.ItemSet{
	Name: "Gul'dan's Regalia",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

			warlock := agent.(WarlockAgent).GetWarlock()
			pet := warlock.Pets[0].GetCharacter()
			pet.AddStats(stats.Stats{
				stats.MeleeCrit: 10 * core.CritRatingPerCritChance,
				stats.SpellCrit: 10 * core.CritRatingPerCritChance,
			})
		},
		4: func(agent core.Agent) {

		},
	},
})

T9

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

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

		},
	},
})

T6

View Source
var ItemSetPlagueheartGarb = core.NewItemSet(core.ItemSet{
	Name: "Plagueheart Garb",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
			warlock := agent.(WarlockAgent).GetWarlock()

			const bonusCrit = 10 * core.CritRatingPerCritChance
			warlock.DemonicSoulAura = warlock.RegisterAura(core.Aura{
				Label:    "Demonic Soul",
				ActionID: core.ActionID{SpellID: 61595},
				Duration: time.Second * 10,
				OnGain: func(aura *core.Aura, sim *core.Simulation) {
					warlock.ShadowBolt.BonusCritRating += bonusCrit
					warlock.Incinerate.BonusCritRating += bonusCrit
				},
				OnExpire: func(aura *core.Aura, sim *core.Simulation) {
					warlock.ShadowBolt.BonusCritRating -= bonusCrit
					warlock.Incinerate.BonusCritRating -= bonusCrit
				},
			})

			warlock.RegisterAura(core.Aura{
				Label: "2pT7 Hidden Aura",

				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 == warlock.Corruption || spell == warlock.Immolate {
						if sim.RandomFloat("2pT7") < 0.15 {
							warlock.DemonicSoulAura.Activate(sim)
						}
					}
				},
			})
		},
		4: func(agent core.Agent) {
			warlock := agent.(WarlockAgent).GetWarlock()

			warlock.SpiritsoftheDamnedAura = warlock.RegisterAura(core.Aura{
				Label:    "Spirits of the Damned",
				ActionID: core.ActionID{SpellID: 61082},
				Duration: time.Second * 10,
				OnGain: func(aura *core.Aura, sim *core.Simulation) {
					aura.Unit.AddStatDynamic(sim, stats.Spirit, 300)
				},
				OnExpire: func(aura *core.Aura, sim *core.Simulation) {
					aura.Unit.AddStatDynamic(sim, stats.Spirit, -300)
				},
			})

			warlock.RegisterAura(core.Aura{
				Label:    "4pT7 Hidden Aura",
				Duration: core.NeverExpires,
				OnReset: func(aura *core.Aura, sim *core.Simulation) {
					aura.Activate(sim)
				},
				OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) {
					if spell == warlock.LifeTap {
						warlock.SpiritsoftheDamnedAura.Activate(sim)
					}
				},
			})
		},
	},
})

T7

View Source
var TalentTreeSizes = [3]int{28, 27, 26}

Functions

func RegisterWarlock

func RegisterWarlock()

Types

type CastReadyness

type CastReadyness func(*core.Simulation) time.Duration

type InfernalPet added in v0.1.8

type InfernalPet struct {
	core.Pet
	// contains filtered or unexported fields
}

func (*InfernalPet) GetPet added in v0.1.8

func (infernal *InfernalPet) GetPet() *core.Pet

func (*InfernalPet) Initialize added in v0.1.8

func (infernal *InfernalPet) Initialize()

func (*InfernalPet) OnGCDReady added in v0.1.8

func (infernal *InfernalPet) OnGCDReady(sim *core.Simulation)

func (*InfernalPet) Reset added in v0.1.8

func (infernal *InfernalPet) Reset(sim *core.Simulation)

type PetAbilityType

type PetAbilityType byte
const (
	Unknown PetAbilityType = iota
	Cleave
	Intercept
	LashOfPain
	ShadowBite
	Firebolt
)

type ProcTracker added in v0.1.5

type ProcTracker struct {
	// contains filtered or unexported fields
}

type SpellRotation

type SpellRotation struct {
	Spell    *core.Spell
	CastIn   CastReadyness
	Priority int
}

type Warlock

type Warlock struct {
	core.Character
	Talents  *proto.WarlockTalents
	Options  *proto.Warlock_Options
	Rotation *proto.Warlock_Rotation

	Pet *WarlockPet

	ShadowBolt         *core.Spell
	Incinerate         *core.Spell
	Immolate           *core.Spell
	ImmolateDot        *core.Dot
	UnstableAffliction *core.Spell
	Corruption         *core.Spell
	Haunt              *core.Spell
	LifeTap            *core.Spell
	DarkPact           *core.Spell
	ChaosBolt          *core.Spell
	SoulFire           *core.Spell
	Conflagrate        *core.Spell
	ConflagrateDot     *core.Dot
	DrainSoul          *core.Spell
	Shadowburn         *core.Spell

	CurseOfElements     *core.Spell
	CurseOfElementsAura *core.Aura
	CurseOfWeakness     *core.Spell
	CurseOfWeaknessAura *core.Aura
	CurseOfTongues      *core.Spell
	CurseOfTonguesAura  *core.Aura
	CurseOfAgony        *core.Spell
	CurseOfDoom         *core.Spell
	Seed                *core.Spell
	SeedDamageTracker   []float64

	NightfallProcAura      *core.Aura
	EradicationAura        *core.Aura
	DemonicEmpowerment     *core.Spell
	DemonicEmpowermentAura *core.Aura
	DemonicPactAura        *core.Aura
	DemonicSoulAura        *core.Aura
	Metamorphosis          *core.Spell
	MetamorphosisAura      *core.Aura
	ImmolationAura         *core.Spell
	HauntDebuffAura        *core.Aura
	MoltenCoreAura         *core.Aura
	DecimationAura         *core.Aura
	PyroclasmAura          *core.Aura
	BackdraftAura          *core.Aura
	EmpoweredImpAura       *core.Aura
	GlyphOfLifeTapAura     *core.Aura
	SpiritsoftheDamnedAura *core.Aura

	Infernal *InfernalPet
	Inferno  *core.Spell

	// Rotation related memory
	CorruptionRolloverPower float64
	DrainSoulRolloverPower  float64
	// The sum total of demonic pact spell power * seconds.
	DPSPAggregate  float64
	PreviousTime   time.Duration
	SpellsRotation []SpellRotation
	// contains filtered or unexported fields
}

func NewWarlock

func NewWarlock(character core.Character, options *proto.Player) *Warlock

func (*Warlock) AddRaidBuffs

func (warlock *Warlock) AddRaidBuffs(raidBuffs *proto.RaidBuffs)

func (*Warlock) ApplyTalents

func (warlock *Warlock) ApplyTalents()

func (*Warlock) DSCooldownSync added in v0.1.5

func (warlock *Warlock) DSCooldownSync(actionID core.ActionID, isPotion bool)

func (*Warlock) DSProcCheck added in v0.1.5

func (warlock *Warlock) DSProcCheck(sim *core.Simulation, castTime time.Duration) bool

func (*Warlock) GetCharacter

func (warlock *Warlock) GetCharacter() *core.Character

func (*Warlock) GetWarlock

func (warlock *Warlock) GetWarlock() *Warlock

func (*Warlock) GrandFirestoneBonus added in v0.1.7

func (warlock *Warlock) GrandFirestoneBonus() float64

func (*Warlock) GrandSpellstoneBonus added in v0.1.7

func (warlock *Warlock) GrandSpellstoneBonus() float64

func (*Warlock) HasMajorGlyph

func (warlock *Warlock) HasMajorGlyph(glyph proto.WarlockMajorGlyph) bool

func (*Warlock) HasMinorGlyph

func (warlock *Warlock) HasMinorGlyph(glyph proto.WarlockMinorGlyph) bool

func (*Warlock) Initialize

func (warlock *Warlock) Initialize()

func (*Warlock) LifeTapOrDarkPact

func (warlock *Warlock) LifeTapOrDarkPact(sim *core.Simulation)

Regen Spells: Casts the regen spell that will give you the most mana, includes a error whenever we cast pact on full mana.

func (*Warlock) NewInfernal added in v0.1.8

func (warlock *Warlock) NewInfernal() *InfernalPet

func (*Warlock) NewWarlockPet

func (warlock *Warlock) NewWarlockPet() *WarlockPet

func (*Warlock) OnGCDReady

func (warlock *Warlock) OnGCDReady(sim *core.Simulation)

This function is an intermediary, it is used when sim has a GCD ready, not much to see here.

func (*Warlock) Prepull added in v0.1.8

func (warlock *Warlock) Prepull(sim *core.Simulation)

func (*Warlock) Reset

func (warlock *Warlock) Reset(sim *core.Simulation)

func (*Warlock) ShadowEmbraceDebuffAura

func (warlock *Warlock) ShadowEmbraceDebuffAura(target *core.Unit) *core.Aura

func (*Warlock) ShouldCastCurseOfElements

func (warlock *Warlock) ShouldCastCurseOfElements(sim *core.Simulation, target *core.Unit, curse proto.Warlock_Rotation_Curse) bool

type WarlockAgent

type WarlockAgent interface {
	GetWarlock() *Warlock
}

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

type WarlockPet

type WarlockPet struct {
	core.Pet

	DemonicEmpowermentAura *core.Aura
	// contains filtered or unexported fields
}

func (*WarlockPet) GetPet

func (wp *WarlockPet) GetPet() *core.Pet

func (*WarlockPet) Initialize

func (wp *WarlockPet) Initialize()

func (*WarlockPet) NewPetAbility

func (wp *WarlockPet) NewPetAbility(abilityType PetAbilityType, isPrimary bool) *core.Spell

func (*WarlockPet) OnGCDReady

func (wp *WarlockPet) OnGCDReady(sim *core.Simulation)

func (*WarlockPet) Reset

func (wp *WarlockPet) Reset(sim *core.Simulation)

func (*WarlockPet) TryCast

func (wp *WarlockPet) TryCast(sim *core.Simulation, target *core.Unit, spell *core.Spell) bool

TODO: this seems pointless Returns whether the ability was successfully cast.

Jump to

Keyboard shortcuts

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