priest

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Sep 25, 2023 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

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

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

		},
	},
})

T6 Shadow

View Source
var ItemSetAvatarRegalia = core.NewItemSet(core.ItemSet{
	Name: "Avatar Regalia",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
			priest := agent.(PriestAgent).GetPriest()
			manaMetrics := priest.NewManaMetrics(core.ActionID{SpellID: 37600})

			priest.RegisterAura(core.Aura{
				Label:    "Avatar Regalia 2pc",
				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 sim.RandomFloat("avatar 2p") > 0.06 {
						return
					}

					priest.AddMana(sim, 150, manaMetrics)
				},
			})
		},
		4: func(agent core.Agent) {
			priest := agent.(PriestAgent).GetPriest()

			procAura := priest.NewTemporaryStatsAura("Avatar Regalia 4pc Proc", core.ActionID{SpellID: 37604}, stats.Stats{stats.SpellPower: 100}, time.Second*15)
			procAura.OnSpellHitDealt = func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) {
				aura.Deactivate(sim)
			}

			priest.RegisterAura(core.Aura{
				Label:    "Avatar Regalia 4pc",
				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 != priest.ShadowWordPain {
						return
					}

					if sim.RandomFloat("avatar 4p") > 0.4 {
						return
					}

					procAura.Activate(sim)
				},
			})
		},
	},
})

T5 Shadow

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

		},
		4: func(agent core.Agent) {
			priest := agent.(PriestAgent).GetPriest()
			procAura := priest.NewTemporaryStatsAura("Devious Mind", core.ActionID{SpellID: 64907}, stats.Stats{stats.SpellHaste: 240}, time.Second*4)

			priest.RegisterAura(core.Aura{
				Label:    "Devious Mind Proc",
				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 spell == priest.MindBlast {
						procAura.Activate(sim)
					}
				},
			})
		},
	},
})
View Source
var ItemSetCrimsonAcolyte = core.NewItemSet(core.ItemSet{
	Name: "Crimson Acolyte's Regalia",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

		},
	},
})
View Source
var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{
	Name: "Crimson Acolyte's Raiment",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
			priest := agent.(PriestAgent).GetPriest()

			var curAmount float64
			procSpell := priest.RegisterSpell(core.SpellConfig{
				ActionID:    core.ActionID{SpellID: 70770},
				SpellSchool: core.SpellSchoolHoly,
				ProcMask:    core.ProcMaskEmpty,
				Flags:       core.SpellFlagNoOnCastComplete | core.SpellFlagIgnoreModifiers | core.SpellFlagHelpful,

				DamageMultiplier: 1,
				ThreatMultiplier: 1 - []float64{0, .07, .14, .20}[priest.Talents.SilentResolve],

				Hot: core.DotConfig{
					Aura: core.Aura{
						Label: "CrimsonAcolyteRaiment2pc",
					},
					NumberOfTicks: 3,
					TickLength:    time.Second * 3,
					OnSnapshot: func(sim *core.Simulation, target *core.Unit, dot *core.Dot, _ bool) {
						dot.SnapshotBaseDamage = curAmount * 0.33
						dot.SnapshotAttackerMultiplier = dot.Spell.CasterHealingMultiplier()
					},
					OnTick: func(sim *core.Simulation, target *core.Unit, dot *core.Dot) {
						dot.CalcAndDealPeriodicSnapshotHealing(sim, target, dot.OutcomeTick)
					},
				},
			})

			priest.RegisterAura(core.Aura{
				Label:    "Crimson Acolytes Raiment 2pc",
				Duration: core.NeverExpires,
				OnReset: func(aura *core.Aura, sim *core.Simulation) {
					aura.Activate(sim)
				},
				OnHealDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) {
					if spell != priest.FlashHeal || sim.RandomFloat("Crimson Acolytes Raiment 2pc") >= 0.33 {
						return
					}

					curAmount = result.Damage
					hot := procSpell.Hot(result.Target)
					hot.Apply(sim)
				},
			})
		},
		4: func(agent core.Agent) {

		},
	},
})
View Source
var ItemSetGladiatorsInvestiture = core.NewItemSet(core.ItemSet{
	Name: "Gladiator's Investiture",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
			agent.GetCharacter().AddStat(stats.Resilience, 100)
			agent.GetCharacter().AddStat(stats.SpellPower, 29)
		},
		4: func(agent core.Agent) {
			agent.GetCharacter().AddStat(stats.SpellPower, 88)
		},
	},
})
View Source
var ItemSetGladiatorsRaiment = core.NewItemSet(core.ItemSet{
	Name: "Gladiator's Raiment",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
			agent.GetCharacter().AddStat(stats.Resilience, 100)
			agent.GetCharacter().AddStat(stats.SpellPower, 29)
		},
		4: func(agent core.Agent) {
			agent.GetCharacter().AddStat(stats.SpellPower, 88)
		},
	},
})
View Source
var ItemSetIncarnateRegalia = core.NewItemSet(core.ItemSet{
	Name: "Incarnate Raiment",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

		},
	},
})

T4 Shadow

View Source
var ItemSetRegaliaOfFaith = core.NewItemSet(core.ItemSet{
	Name: "Regalia of Faith",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

		},
	},
})
View Source
var ItemSetSanctificationRegalia = core.NewItemSet(core.ItemSet{
	Name: "Sanctification Regalia",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {
		},
		4: func(agent core.Agent) {
			priest := agent.(PriestAgent).GetPriest()
			procAura := priest.NewTemporaryStatsAura("Sanctification Reglia 4pc", core.ActionID{SpellID: 64912}, stats.Stats{stats.SpellPower: 250}, time.Second*5)

			priest.RegisterAura(core.Aura{
				Label:    "Sancitifcation Reglia 4pc",
				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 == priest.PowerWordShield {
						procAura.Activate(sim)
					}
				},
			})
		},
	},
})
View Source
var ItemSetValorous = core.NewItemSet(core.ItemSet{
	Name: "Garb of Faith",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

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

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

		},
	},
})

T6 Heal

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

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

		},
	},
})
View Source
var ItemSetZabrasRaiment = core.NewItemSet(core.ItemSet{
	Name:            "Zabra's Raiment",
	AlternativeName: "Velen's Raiment",
	Bonuses: map[int32]core.ApplyEffect{
		2: func(agent core.Agent) {

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

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

Functions

func MindTraumaAura added in v1.0.1

func MindTraumaAura(target *core.Unit) *core.Aura

Types

type Priest

type Priest struct {
	core.Character
	SelfBuffs
	Talents *proto.PriestTalents

	SurgeOfLight bool

	Latency float64

	ShadowfiendAura *core.Aura
	ShadowfiendPet  *Shadowfiend

	// cached cast stuff
	// TODO: aoe multi-target situations will need multiple spells ticking for each target.
	InnerFocusAura     *core.Aura
	ShadowWeavingAura  *core.Aura
	ShadowyInsightAura *core.Aura
	ImprovedSpiritTap  *core.Aura
	DispersionAura     *core.Aura

	SurgeOfLightProcAura *core.Aura

	BindingHeal     *core.Spell
	CircleOfHealing *core.Spell
	DevouringPlague *core.Spell
	FlashHeal       *core.Spell
	GreaterHeal     *core.Spell
	HolyFire        *core.Spell
	InnerFocus      *core.Spell
	ShadowWordPain  *core.Spell
	MindBlast       *core.Spell
	MindFlay        []*core.Spell
	//MindSear        []*core.Spell
	Penance         *core.Spell
	PenanceHeal     *core.Spell
	PowerWordShield *core.Spell
	PrayerOfHealing *core.Spell
	PrayerOfMending *core.Spell
	Renew           *core.Spell
	EmpoweredRenew  *core.Spell
	ShadowWordDeath *core.Spell
	Shadowfiend     *core.Spell
	Smite           *core.Spell
	VampiricTouch   *core.Spell
	Dispersion      *core.Spell

	WeakenedSouls core.AuraArray

	ProcPrayerOfMending core.ApplySpellResults

	DpInitMultiplier float64

	// set bonus cache
	// The mana cost of your Mind Blast is reduced by 10%.
	T7TwoSetBonus bool
	// Your Shadow Word: Death has an additional 10% chance to critically strike.
	T7FourSetBonus bool
	// Increases the damage done by your Devouring Plague by 15%.
	T8TwoSetBonus bool
	// Your Mind Blast also grants you 240 haste for 4 sec.
	T8FourSetBonus bool
	// Increases the duration of your Vampiric Touch spell by 6 sec.
	T9TwoSetBonus bool
	// Increases the critical strike chance of your Mind Flay spell by 5%.
	T9FourSetBonus bool
	// The critical strike chance of your Shadow Word: Pain, Devouring Plague, and Vampiric Touch spells is increased by 5%
	T10TwoSetBonus bool
	// Reduces the channel duration by 0.51 sec and period by 0.17 sec on your Mind Flay spell
	T10FourSetBonus bool
}

func New

func New(char core.Character, selfBuffs SelfBuffs, talents string) *Priest

func (*Priest) AddPartyBuffs

func (priest *Priest) AddPartyBuffs(partyBuffs *proto.PartyBuffs)

func (*Priest) AddRaidBuffs

func (priest *Priest) AddRaidBuffs(raidBuffs *proto.RaidBuffs)

func (*Priest) AddShadowWeavingStack

func (priest *Priest) AddShadowWeavingStack(sim *core.Simulation)

func (*Priest) ApplyRapture

func (priest *Priest) ApplyRapture(ppm float64)

This one is called from healing priest sim initialization because it needs an input.

func (*Priest) ApplyTalents

func (priest *Priest) ApplyTalents()

func (*Priest) AverageMindFlayLatencyDelay

func (priest *Priest) AverageMindFlayLatencyDelay(numTicks int, gcd time.Duration) time.Duration

func (*Priest) GetCharacter

func (priest *Priest) GetCharacter() *core.Character

func (*Priest) HasMajorGlyph

func (priest *Priest) HasMajorGlyph(glyph proto.PriestMajorGlyph) bool

func (*Priest) HasMinorGlyph

func (priest *Priest) HasMinorGlyph(glyph proto.PriestMinorGlyph) bool

func (*Priest) Initialize

func (priest *Priest) Initialize()

func (*Priest) MindFlayTickDuration

func (priest *Priest) MindFlayTickDuration() time.Duration

func (*Priest) NewShadowfiend

func (priest *Priest) NewShadowfiend() *Shadowfiend

func (*Priest) RegisterHealingSpells

func (priest *Priest) RegisterHealingSpells()

func (*Priest) RegisterHolyFireSpell

func (priest *Priest) RegisterHolyFireSpell(memeDream bool)

func (*Priest) RegisterPenanceSpell

func (priest *Priest) RegisterPenanceSpell()

func (*Priest) RegisterSmiteSpell

func (priest *Priest) RegisterSmiteSpell(memeDream bool)

func (*Priest) Reset

func (priest *Priest) Reset(_ *core.Simulation)

type PriestAgent

type PriestAgent interface {
	GetPriest() *Priest
}

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

type SelfBuffs

type SelfBuffs struct {
	UseShadowfiend bool
	UseInnerFire   bool

	PowerInfusionTarget *proto.UnitReference
}

type Shadowfiend

type Shadowfiend struct {
	core.Pet

	Priest          *Priest
	ManaMetric      *core.ResourceMetrics
	Shadowcrawl     *core.Spell
	ShadowcrawlAura *core.Aura
}

func (*Shadowfiend) GetPet

func (shadowfiend *Shadowfiend) GetPet() *core.Pet

func (*Shadowfiend) Initialize

func (shadowfiend *Shadowfiend) Initialize()

func (*Shadowfiend) OnAutoAttack

func (shadowfiend *Shadowfiend) OnAutoAttack(sim *core.Simulation, _ *core.Spell)

func (*Shadowfiend) OnGCDReady

func (shadowfiend *Shadowfiend) OnGCDReady(sim *core.Simulation)

func (*Shadowfiend) OnPetDisable added in v1.0.1

func (shadowfiend *Shadowfiend) OnPetDisable(sim *core.Simulation)

func (*Shadowfiend) Reset

func (shadowfiend *Shadowfiend) Reset(sim *core.Simulation)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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