deathknight

package
v0.1.56 Latest Latest
Warning

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

Go to latest
Published: Nov 13, 2023 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PetSpellHitScale   = 17.0 / 8.0 * core.SpellHitRatingPerHitChance / core.MeleeHitRatingPerHitChance    // 1.7
	PetExpertiseScale  = 3.25 * core.ExpertisePerQuarterPercentReduction / core.MeleeHitRatingPerHitChance // 0.8125
	PetSpellHasteScale = 1.3
)
View Source
const (
	ScourgelordBonusSpellOB = iota + 1
	ScourgelordBonusSpellSS
	ScourgelordBonusSpellHS
)
View Source
const (
	BloodyStrikesBS = iota + 1
	BloodyStrikesHS
	BloodyStrikesBB
)

Variables

View Source
var BloodBoilActionID = core.ActionID{SpellID: 49941}
View Source
var BloodStrikeActionID = core.ActionID{SpellID: 49930}
View Source
var DeathCoilActionID = core.ActionID{SpellID: 49895}
View Source
var DeathStrikeActionID = core.ActionID{SpellID: 49924}

TODO: Cleanup death strike the same way we did for plague strike

View Source
var FrostStrikeMHActionID = frostStrikeActionID.WithTag(1)
View Source
var FrostStrikeOHActionID = frostStrikeActionID.WithTag(2)
View Source
var HeartStrikeActionID = core.ActionID{SpellID: 55262}
View Source
var HowlingBlastActionID = core.ActionID{SpellID: 51411}
View Source
var IcyTouchActionID = core.ActionID{SpellID: 59131}
View Source
var ItemSetDarkrunedBattlegear = core.NewItemSet(core.ItemSet{
	Name: "Darkruned Battlegear",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

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

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

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

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

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

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

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

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

			dk := agent.(DeathKnightAgent).GetDeathKnight()
			dk.registerScourgelordsBattlegearProc()
		},
	},
})
View Source
var ItemSetScourgelordsPlate = core.NewItemSet(core.ItemSet{
	Name: "Scourgelord's Plate",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

			dk := agent.(DeathKnightAgent).GetDeathKnight()
			dk.registerScourgelordsPlateProc()
		},
	},
})
View Source
var ItemSetThassariansBattlegear = core.NewItemSet(core.ItemSet{
	Name:            "Thassarian's Battlegear",
	AlternativeName: "Koltira's Battlegear",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

			dk := agent.(DeathKnightAgent).GetDeathKnight()
			dk.registerThassariansBattlegearProc()
		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var ItemSetThassariansPlate = core.NewItemSet(core.ItemSet{
	Name:            "Thassarian's Plate",
	AlternativeName: "Koltira's Plate",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

		},
	},
})
View Source
var ObliterateActionID = core.ActionID{SpellID: 51425}

TODO: Cleanup obliterate the same way we did for plague strike

View Source
var PestilenceActionID = core.ActionID{SpellID: 50842}
View Source
var PlagueStrikeActionID = core.ActionID{SpellID: 49921}
View Source
var RuneStrikeActionID = core.ActionID{SpellID: 56815}
View Source
var ScourgeStrikeActionID = core.ActionID{SpellID: 55271}
View Source
var TalentTreeSizes = [3]int{28, 29, 31}

Functions

func CreateGladiatorsSigil

func CreateGladiatorsSigil(id int32, name string, ap float64, seconds time.Duration)

func CreateVirulenceProcAura added in v0.1.43

func CreateVirulenceProcAura(character *core.Character) *core.Aura

func PointsInTalents

func PointsInTalents(talents *proto.DeathknightTalents) (int, int, int)

Types

type BloodwormPet

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

func (*BloodwormPet) GetPet

func (bloodworm *BloodwormPet) GetPet() *core.Pet

func (*BloodwormPet) Initialize

func (bloodworm *BloodwormPet) Initialize()

func (*BloodwormPet) OnGCDReady

func (bloodworm *BloodwormPet) OnGCDReady(_ *core.Simulation)

func (*BloodwormPet) Reset

func (bloodworm *BloodwormPet) Reset(_ *core.Simulation)

type BloodyStrikesBonusSpell added in v0.1.29

type BloodyStrikesBonusSpell int8

type DeathKnightAgent

type DeathKnightAgent interface {
	GetDeathKnight() *Deathknight
}

type Deathknight

type Deathknight struct {
	core.Character
	Talents *proto.DeathknightTalents

	Inputs DeathknightInputs

	RotationHelper

	Ghoul     *GhoulPet
	RaiseDead *core.Spell

	Gargoyle                 *GargoylePet
	SummonGargoyle           *core.Spell
	SummonGargoyleAura       *core.Aura
	GargoyleSummonDelay      time.Duration
	OnGargoyleStartFirstCast func()

	RuneWeapon        *RuneWeaponPet
	DancingRuneWeapon *core.Spell

	ArmyOfTheDead *core.Spell
	ArmyGhoul     []*GhoulPet

	Bloodworm []*BloodwormPet

	Presence Presence

	IcyTouch   *core.Spell
	BloodBoil  *core.Spell
	Pestilence *core.Spell

	PlagueStrike      *core.Spell
	PlagueStrikeMhHit *core.Spell
	PlagueStrikeOhHit *core.Spell

	DeathStrike      *core.Spell
	DeathStrikeMhHit *core.Spell
	DeathStrikeOhHit *core.Spell
	DeathStrikeHeals []float64

	Obliterate      *core.Spell
	ObliterateMhHit *core.Spell
	ObliterateOhHit *core.Spell

	BloodStrike      *core.Spell
	BloodStrikeMhHit *core.Spell
	BloodStrikeOhHit *core.Spell

	FrostStrike      *core.Spell
	FrostStrikeMhHit *core.Spell
	FrostStrikeOhHit *core.Spell

	HeartStrike       *core.Spell
	HeartStrikeOffHit *core.Spell

	RuneStrikeQueued bool
	RuneStrikeQueue  *core.Spell
	RuneStrike       *core.Spell
	RuneStrikeOh     *core.Spell
	RuneStrikeAura   *core.Aura

	GhoulFrenzy *core.Spell
	// Dummy aura for timeline metrics
	GhoulFrenzyAura *core.Aura

	LastScourgeStrikeDamage float64
	ScourgeStrike           *core.Spell

	DeathCoil *core.Spell

	DeathAndDecay *core.Spell

	HowlingBlast *core.Spell

	HasDraeneiHitAura         bool
	OtherRelevantStrAgiActive bool
	HornOfWinter              *core.Spell
	HornOfWinterAura          *core.Aura

	// "CDs"
	RuneTap     *core.Spell
	MarkOfBlood *core.Spell

	BloodTap     *core.Spell
	BloodTapAura *core.Aura

	AntiMagicShell     *core.Spell
	AntiMagicShellAura *core.Aura

	EmpowerRuneWeapon *core.Spell

	UnbreakableArmor     *core.Spell
	UnbreakableArmorAura *core.Aura

	VampiricBlood     *core.Spell
	VampiricBloodAura *core.Aura

	BoneShield     *core.Spell
	BoneShieldAura *core.Aura

	UnholyFrenzy     *core.Spell
	UnholyFrenzyAura *core.Aura

	IceboundFortitude     *core.Spell
	IceboundFortitudeAura *core.Aura

	DeathPact *core.Spell

	// Used only to proc stuff as its free GCD
	MindFreezeSpell *core.Spell

	// Diseases
	FrostFeverSpell     *core.Spell
	BloodPlagueSpell    *core.Spell
	FrostFeverExtended  []int
	BloodPlagueExtended []int

	UnholyBlightSpell *core.Spell

	// Talent Auras
	KillingMachineAura  *core.Aura
	IcyTalonsAura       *core.Aura
	DesolationAura      *core.Aura
	BloodCakedBladeAura *core.Aura
	ButcheryAura        *core.Aura
	ButcheryPA          *core.PendingAction
	FreezingFogAura     *core.Aura
	BladeBarrierAura    *core.Aura
	ScentOfBloodAura    *core.Aura
	WillOfTheNecropolis *core.Aura

	// Talent Spells
	LastDiseaseDamage float64
	LastTickTime      time.Duration
	WanderingPlague   *core.Spell
	NecrosisCoeff     float64
	Necrosis          *core.Spell
	Deathchill        *core.Spell
	DeathchillAura    *core.Aura

	// Presences
	BloodPresence      *core.Spell
	BloodPresenceAura  *core.Aura
	FrostPresence      *core.Spell
	FrostPresenceAura  *core.Aura
	UnholyPresence     *core.Spell
	UnholyPresenceAura *core.Aura

	// Debuffs
	FrostFeverDebuffAura       core.AuraArray
	EbonPlagueOrCryptFeverAura core.AuraArray

	RoRTSBonus func(*core.Unit) float64 // is either RoR or TS bonus function based on talents

	MakeTSRoRAssumptions bool
	// contains filtered or unexported fields
}

func NewDeathknight

func NewDeathknight(character *core.Character, inputs DeathknightInputs, talents string, preNerfedGargoyle bool) *Deathknight

func (*Deathknight) AddPartyBuffs

func (dk *Deathknight) AddPartyBuffs(partyBuffs *proto.PartyBuffs)

func (*Deathknight) AddRaidBuffs

func (dk *Deathknight) AddRaidBuffs(raidBuffs *proto.RaidBuffs)

func (*Deathknight) AllDiseasesAreActive

func (dk *Deathknight) AllDiseasesAreActive(target *core.Unit) bool

func (*Deathknight) ApplyBloodTalents

func (dk *Deathknight) ApplyBloodTalents()

func (*Deathknight) ApplyFrostTalents

func (dk *Deathknight) ApplyFrostTalents()

func (*Deathknight) ApplyTalents

func (dk *Deathknight) ApplyTalents()

func (*Deathknight) ApplyUnholyTalents

func (dk *Deathknight) ApplyUnholyTalents()

func (*Deathknight) AverageDSHeal

func (dk *Deathknight) AverageDSHeal() float64

func (*Deathknight) ChangePresence

func (dk *Deathknight) ChangePresence(sim *core.Simulation, newPresence Presence)

func (*Deathknight) DiseasesAreActive

func (dk *Deathknight) DiseasesAreActive(target *core.Unit) bool

func (*Deathknight) DoRotation

func (dk *Deathknight) DoRotation(sim *core.Simulation)

func (*Deathknight) DrwDiseasesAreActive added in v0.1.17

func (dk *Deathknight) DrwDiseasesAreActive(target *core.Unit) bool

func (*Deathknight) DrwWeaponDamage added in v0.1.29

func (dk *Deathknight) DrwWeaponDamage(sim *core.Simulation, spell *core.Spell) float64

func (*Deathknight) GetCharacter

func (dk *Deathknight) GetCharacter() *core.Character

func (*Deathknight) GetDeathKnight

func (dk *Deathknight) GetDeathKnight() *Deathknight

func (*Deathknight) GetRuneTapHealing added in v0.1.14

func (dk *Deathknight) GetRuneTapHealing() float64

func (*Deathknight) HasMajorGlyph

func (dk *Deathknight) HasMajorGlyph(glyph proto.DeathknightMajorGlyph) bool

func (*Deathknight) HasMinorGlyph

func (dk *Deathknight) HasMinorGlyph(glyph proto.DeathknightMinorGlyph) bool

func (*Deathknight) Initialize

func (dk *Deathknight) Initialize()

func (*Deathknight) IsFuStrike

func (dk *Deathknight) IsFuStrike(spell *core.Spell) bool

func (*Deathknight) IsMainTank

func (dk *Deathknight) IsMainTank() bool

func (*Deathknight) ModifyDamageModifier added in v0.1.1

func (dk *Deathknight) ModifyDamageModifier(value float64)

func (*Deathknight) NewArmyGhoulPet

func (dk *Deathknight) NewArmyGhoulPet(_ int) *GhoulPet

func (*Deathknight) NewBloodwormPet

func (dk *Deathknight) NewBloodwormPet(_ int) *BloodwormPet

func (*Deathknight) NewGargoyle

func (dk *Deathknight) NewGargoyle(nerfedGargoyle bool) *GargoylePet

func (*Deathknight) NewGhoulPet

func (dk *Deathknight) NewGhoulPet(permanent bool) *GhoulPet

func (*Deathknight) NewRuneWeapon

func (dk *Deathknight) NewRuneWeapon() *RuneWeaponPet

func (*Deathknight) OnAutoAttack

func (dk *Deathknight) OnAutoAttack(_ *core.Simulation, _ *core.Spell)

func (*Deathknight) OnGCDReady

func (dk *Deathknight) OnGCDReady(sim *core.Simulation)

func (*Deathknight) PresenceMatches

func (dk *Deathknight) PresenceMatches(other Presence) bool

func (*Deathknight) Reset

func (dk *Deathknight) Reset(sim *core.Simulation)

func (*Deathknight) ResetBonusCoeffs

func (dk *Deathknight) ResetBonusCoeffs()

func (*Deathknight) RotationActionCallback_AOTD

func (dk *Deathknight) RotationActionCallback_AOTD(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_BB

func (dk *Deathknight) RotationActionCallback_BB(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_BP

func (dk *Deathknight) RotationActionCallback_BP(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_BS

func (dk *Deathknight) RotationActionCallback_BS(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_BT

func (dk *Deathknight) RotationActionCallback_BT(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_DC

func (dk *Deathknight) RotationActionCallback_DC(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_DND

func (dk *Deathknight) RotationActionCallback_DND(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_DRW

func (dk *Deathknight) RotationActionCallback_DRW(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_DS

func (dk *Deathknight) RotationActionCallback_DS(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_ERW

func (dk *Deathknight) RotationActionCallback_ERW(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_FP

func (dk *Deathknight) RotationActionCallback_FP(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_FS

func (dk *Deathknight) RotationActionCallback_FS(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_GF

func (dk *Deathknight) RotationActionCallback_GF(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_Garg

func (dk *Deathknight) RotationActionCallback_Garg(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_HB added in v0.1.5

func (dk *Deathknight) RotationActionCallback_HB(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_HS

func (dk *Deathknight) RotationActionCallback_HS(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_HW

func (dk *Deathknight) RotationActionCallback_HW(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_IT

func (dk *Deathknight) RotationActionCallback_IT(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_Obli

func (dk *Deathknight) RotationActionCallback_Obli(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_PS

func (dk *Deathknight) RotationActionCallback_PS(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_Pesti

func (dk *Deathknight) RotationActionCallback_Pesti(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_RD

func (dk *Deathknight) RotationActionCallback_RD(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_SS

func (dk *Deathknight) RotationActionCallback_SS(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_UF added in v0.1.10

func (dk *Deathknight) RotationActionCallback_UF(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) RotationActionCallback_UP

func (dk *Deathknight) RotationActionCallback_UP(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

func (*Deathknight) SetupGhoul

func (dk *Deathknight) SetupGhoul(ghoulPet *GhoulPet)

func (*Deathknight) ShouldHornOfWinter

func (dk *Deathknight) ShouldHornOfWinter(sim *core.Simulation) bool

func (*Deathknight) ToughnessArmorMultiplier added in v0.1.35

func (dk *Deathknight) ToughnessArmorMultiplier() float64

func (*Deathknight) Wait

func (dk *Deathknight) Wait(sim *core.Simulation)

type DeathknightCoeffs

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

type DeathknightInputs

type DeathknightInputs struct {
	// Option Vars
	IsDps  bool
	NewDrw bool

	UnholyFrenzyTarget *proto.UnitReference

	StartingRunicPower  float64
	PrecastGhoulFrenzy  bool
	PrecastHornOfWinter bool
	PetUptime           float64
	DrwPestiApply       bool
	BloodOpener         proto.Deathknight_Rotation_BloodOpener

	// Rotation Vars
	RefreshHornOfWinter bool
	ArmyOfTheDeadType   proto.Deathknight_Rotation_ArmyOfTheDead
	StartingPresence    proto.Deathknight_Rotation_Presence
	UseAMS              bool
	AvgAMSSuccessRate   float64
	AvgAMSHit           float64
	FuStrike            Rotation_FuStrike
	DiseaseDowntime     float64
	VirulenceRefresh    float64
}

type GargoylePet

type GargoylePet struct {
	core.Pet

	GargoyleStrike *core.Spell
	// contains filtered or unexported fields
}

func (*GargoylePet) GetPet

func (garg *GargoylePet) GetPet() *core.Pet

func (*GargoylePet) Initialize

func (garg *GargoylePet) Initialize()

func (*GargoylePet) OnGCDReady

func (garg *GargoylePet) OnGCDReady(_ *core.Simulation)

func (*GargoylePet) Reset

func (garg *GargoylePet) Reset(_ *core.Simulation)

type GhoulPet

type GhoulPet struct {
	core.Pet

	GhoulFrenzyAura *core.Aura
	Claw            *core.Spell
	// contains filtered or unexported fields
}

func (*GhoulPet) GetPet

func (ghoulPet *GhoulPet) GetPet() *core.Pet

func (*GhoulPet) Initialize

func (ghoulPet *GhoulPet) Initialize()

func (*GhoulPet) OnGCDReady

func (ghoulPet *GhoulPet) OnGCDReady(sim *core.Simulation)

func (*GhoulPet) Reset

func (ghoulPet *GhoulPet) Reset(_ *core.Simulation)

type Presence

type Presence uint8
const (
	BloodPresence Presence = 1 << iota
	FrostPresence
	UnholyPresence
	UnsetPresence
)

type RotationAction

type RotationAction func(sim *core.Simulation, target *core.Unit, s *Sequence) time.Duration

return bool is if its on GCD return duration is an optional wait time

type RotationHelper

type RotationHelper struct {
	RotationSequence *Sequence

	LastOutcome core.HitOutcome
	LastCast    *core.Spell
	NextCast    *core.Spell

	AoESpellNumTargetsHit int32
}

type Rotation_FuStrike

type Rotation_FuStrike int32
const (
	FuStrike_DeathStrike   Rotation_FuStrike = 0
	FuStrike_ScourgeStrike Rotation_FuStrike = 1
	FuStrike_Obliterate    Rotation_FuStrike = 2
)

type RuneWeaponPet

type RuneWeaponPet struct {
	core.Pet

	IcyTouch     *core.Spell
	PlagueStrike *core.Spell

	DeathStrike *core.Spell
	DeathCoil   *core.Spell

	BloodStrike       *core.Spell
	HeartStrike       *core.Spell
	HeartStrikeOffHit *core.Spell

	RuneStrike *core.Spell

	Pestilence *core.Spell
	BloodBoil  *core.Spell

	// Diseases
	FrostFeverSpell  *core.Spell
	BloodPlagueSpell *core.Spell
	// contains filtered or unexported fields
}

func (*RuneWeaponPet) GetPet

func (runeWeapon *RuneWeaponPet) GetPet() *core.Pet

func (*RuneWeaponPet) Initialize

func (runeWeapon *RuneWeaponPet) Initialize()

func (*RuneWeaponPet) OnGCDReady

func (runeWeapon *RuneWeaponPet) OnGCDReady(_ *core.Simulation)

func (*RuneWeaponPet) Reset

func (runeWeapon *RuneWeaponPet) Reset(_ *core.Simulation)

type ScourgelordBonusSpell added in v0.1.23

type ScourgelordBonusSpell int8

type Sequence

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

func (*Sequence) Advance

func (s *Sequence) Advance()

func (*Sequence) Clear

func (s *Sequence) Clear() *Sequence

func (*Sequence) ConditionalAdvance

func (s *Sequence) ConditionalAdvance(condition bool)

func (*Sequence) DoAction

func (s *Sequence) DoAction(sim *core.Simulation, target *core.Unit, _ *Deathknight) time.Duration

func (*Sequence) IsOngoing

func (s *Sequence) IsOngoing() bool

func (*Sequence) NewAction

func (s *Sequence) NewAction(action RotationAction) *Sequence

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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