priest

package
v0.1.10 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 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) {

		},
	},
})
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{ItemID: 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()

			spell := 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],
			})

			var curAmount float64
			hots := core.NewAllyHotArray(
				&priest.Unit,
				core.Dot{
					Spell:         spell,
					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)
					},
				},
				core.Aura{
					Label:    "CrimsonAcolyteRaiment2pc" + strconv.Itoa(int(priest.Index)),
					ActionID: spell.ActionID,
				})

			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 := hots[result.Target.UnitIndex]
					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 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) {

		},
	},
})
View Source
var ItemSetZabras = core.NewItemSet(core.ItemSet{
	Name: "Zabra'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

This section is empty.

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
	MiseryAura         *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
	Starshards      *core.Spell
	VampiricTouch   *core.Spell
	Dispersion      *core.Spell

	ShadowWordPainDot  *core.Dot
	DevouringPlagueDot *core.Dot
	HolyFireDot        *core.Dot
	MindFlayDot        []*core.Dot
	MindSearDot        []*core.Dot
	StarshardsDot      *core.Dot
	VampiricTouchDot   *core.Dot

	RenewHots     []*core.Dot
	PWSShields    []*core.Shield
	WeakenedSouls []*core.Aura

	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 added in v0.1.7

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 added in v0.1.10

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

func (*Priest) CanCastPWS

func (priest *Priest) CanCastPWS(sim *core.Simulation, target *core.Unit) bool

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

func (priest *Priest) MindFlayActionID(numTicks int32) core.ActionID

TODO Mind Flay (48156) now "periodically triggers" Mind Flay (58381), probably to allow haste to work.

The first never deals damage, so the latter should probably be used as ActionID here.

func (*Priest) MindFlayTickDuration

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

func (*Priest) MindSearActionID

func (priest *Priest) MindSearActionID(numTicks int32) core.ActionID

TODO see Mind Flay: Mind Sear (53023) now "periodically triggers" Mind Sear (53022).

Since Mind Flay no longer is a binary spell, Mind Sear likely isn't, either.

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

func (priest *Priest) RegisterHymnOfHopeCD()

TODO: This currently only affects the caster, not other raid members.

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.RaidTarget
}

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, spell *core.Spell)

func (*Shadowfiend) OnGCDReady

func (shadowfiend *Shadowfiend) OnGCDReady(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