priest

package
v0.0.21 Latest Latest
Warning

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

Go to latest
Published: Aug 12, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SpellCode_PriestNone int32 = iota
	SpellCode_PriestFlashHeal
	SpellCode_PriestGreaterHeal
	SpellCode_PriestHeal
	SpellCode_PriestHolyFire
	SpellCode_PriestMindBlast
	SpellCode_PriestMindFlay
	SpellCode_PriestMindSpike
	SpellCode_PriestSmite
	SpellCode_PriestVampiricTouch
)
View Source
const DevouringPlagueRanks = 6
View Source
const HolyFireRanks = 8
View Source
const MindBlastRanks = 9
View Source
const MindFlayRanks = 6
View Source
const MindFlayTicks = 3
View Source
const MindSearTicks = 5
View Source
const ShadowWordPainRanks = 8
View Source
const SmiteRanks = 8
View Source
const (
	SpellFlagPriest = core.SpellFlagAgentReserved1
)

Variables

View Source
var DevouringPlagueBaseDamage = [DevouringPlagueRanks + 1]float64{0, 152, 272, 400, 544, 712, 904}
View Source
var DevouringPlagueLevel = [DevouringPlagueRanks + 1]int{0, 20, 28, 36, 44, 52, 60}
View Source
var DevouringPlagueManaCost = [DevouringPlagueRanks + 1]float64{0, 215, 350, 495, 645, 810, 985}
View Source
var DevouringPlagueSpellId = [DevouringPlagueRanks + 1]int32{0, 2944, 19276, 19277, 19278, 19279, 19280}
View Source
var HolyFireBaseDamage = [HolyFireRanks + 1][]float64{{0}, {84, 104}, {97, 122}, {144, 178}, {173, 218}, {219, 273}, {259, 328}, {323, 406}, {355, 449}}
View Source
var HolyFireDotDamage = [HolyFireRanks + 1]float64{0, 30, 40, 55, 65, 85, 100, 125, 145}
View Source
var HolyFireLevel = [HolyFireRanks + 1]int{0, 20, 24, 30, 36, 42, 48, 54, 60}
View Source
var HolyFireManaCost = [HolyFireRanks + 1]float64{0, 85, 95, 125, 145, 170, 200, 230, 255}
View Source
var HolyFireSpellCoef = [HolyFireRanks + 1]float64{0, 0.123, 0.271, 0.554, 0.714, 0.714, 0.714, 0.714, 0.714}
View Source
var HolyFireSpellId = [HolyFireRanks + 1]int32{0, 14914, 15262, 15263, 15264, 15265, 15266, 15267, 15261}
View Source
var ItemSetBenevolentProphetsVestments = core.NewItemSet(core.ItemSet{
	Name: "Benevolent Prophet's Vestments",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.MP5, 4)
		},

		3: func(agent core.Agent) {
			c := agent.GetCharacter()

			procAura := c.NewTemporaryStatsAura("Faith and Magic Proc", core.ActionID{SpellID: 449923}, stats.Stats{stats.SpellPower: 60}, time.Second*15)

			handler := func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) {
				if spell.SpellSchool.Matches(core.SpellSchoolHoly) {
					procAura.Activate(sim)
				}
			}

			core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{
				Name:       "Faith and Magic",
				Callback:   core.CallbackOnCastComplete,
				ProcMask:   core.ProcMaskSpellDamage,
				ProcChance: 1,
				Handler:    handler,
			})
		},
	},
})
View Source
var ItemSetChampionsInvestiture = core.NewItemSet(core.ItemSet{
	Name: "Champion's Investiture",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.HealingPower, 44)
		},

		4: func(agent core.Agent) {

		},

		6: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.Stamina, 20)
		},
	},
})
View Source
var ItemSetChampionsRaiment = core.NewItemSet(core.ItemSet{
	Name: "Champion's Raiment",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.SpellPower, 23)
		},

		4: func(agent core.Agent) {

		},

		6: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.Stamina, 20)
		},
	},
})
View Source
var ItemSetDawnProphecy = core.NewItemSet(core.ItemSet{
	Name: "Dawn Prophecy",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {

		},

		4: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStats(stats.Stats{
				stats.MeleeCrit: 2 * core.CritRatingPerCritChance,
				stats.SpellCrit: 2 * core.CritRatingPerCritChance,
			})
		},

		6: func(agent core.Agent) {

		},
	},
})
View Source
var ItemSetLieutenantCommandersInvestiture = core.NewItemSet(core.ItemSet{
	Name: "Lieutenant Commander's Investiture",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.HealingPower, 44)
		},

		4: func(agent core.Agent) {

		},

		6: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.Stamina, 20)
		},
	},
})
View Source
var ItemSetLieutenantCommandersRaiment = core.NewItemSet(core.ItemSet{
	Name: "Lieutenant Commander's Raiment",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.SpellPower, 23)
		},

		4: func(agent core.Agent) {

		},

		6: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.Stamina, 20)
		},
	},
})
View Source
var ItemSetTwilightProphecy = core.NewItemSet(core.ItemSet{
	Name: "Twilight Prophecy",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {

		},

		4: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStats(stats.Stats{
				stats.MeleeCrit: 2 * core.CritRatingPerCritChance,
				stats.SpellCrit: 2 * core.CritRatingPerCritChance,
			})
		},

		6: func(agent core.Agent) {
			priest := agent.(PriestAgent).GetPriest()

			damageMultiplier := 1.50
			durationDivisor := time.Duration(2)

			buffAura := priest.GetOrRegisterAura(core.Aura{
				Label:    "Melting Faces",
				ActionID: core.ActionID{SpellID: 456549},
				Duration: core.NeverExpires,
				OnGain: func(aura *core.Aura, sim *core.Simulation) {
					for _, spells := range priest.MindFlay {
						for _, spell := range spells {
							if spell != nil {
								spell.DamageMultiplier *= damageMultiplier
								for _, dot := range spell.Dots() {
									if dot != nil {
										dot.TickLength /= durationDivisor
									}
								}
							}
						}
					}
				},
				OnExpire: func(aura *core.Aura, sim *core.Simulation) {
					for _, spells := range priest.MindFlay {
						for _, spell := range spells {
							if spell != nil {
								spell.DamageMultiplier /= damageMultiplier
								for _, dot := range spell.Dots() {
									if dot != nil {
										dot.TickLength *= durationDivisor
									}
								}
							}
						}
					}
				},
				OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) {
					if spell.SpellCode == SpellCode_PriestMindFlay {
						aura.Deactivate(sim)
					}
				},
			})

			priest.GetOrRegisterAura(core.Aura{
				Label:    "S03 - Item - T1 - Priest - Shadow 6P Bonus",
				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.SpellCode == SpellCode_PriestMindBlast && result.DidCrit() {
						buffAura.Activate(sim)
					}
				},
			})
		},
	},
})
View Source
var ItemSetVestmentsOfTheVirtuous = core.NewItemSet(core.ItemSet{
	Name: "Vestments of the Virtuous",
	Bonuses: map[int32]core.ApplyEffect{

		2: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.SpellPower, 23)
		},

		4: func(agent core.Agent) {
			c := agent.GetCharacter()
			actionID := core.ActionID{SpellID: 450576}
			manaMetrics := c.NewManaMetrics(actionID)

			core.MakeProcTriggerAura(&c.Unit, core.ProcTrigger{
				Name:       "S03 - Mana Proc on Cast - Vestments of the Devout",
				Callback:   core.CallbackOnCastComplete,
				ProcMask:   core.ProcMaskSpellDamage | core.ProcMaskSpellHealing,
				ProcChance: 0.06,
				Handler: func(sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) {
					if c.HasManaBar() {
						c.AddMana(sim, 300, manaMetrics)
					}
				},
			})
		},

		6: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddResistances(8)
		},

		8: func(agent core.Agent) {
			c := agent.GetCharacter()
			c.AddStat(stats.Armor, 200)
		},
	},
})
View Source
var MindBlastBaseDamage = [MindBlastRanks + 1][]float64{{0}, {42, 46}, {76, 83}, {115, 124}, {174, 184}, {225, 239}, {279, 297}, {354, 375}, {437, 461}, {508, 537}}
View Source
var MindBlastLevel = [MindBlastRanks + 1]int{0, 10, 16, 22, 28, 34, 40, 46, 52, 58}
View Source
var MindBlastManaCost = [MindBlastRanks + 1]float64{0, 50, 80, 110, 150, 185, 225, 265, 310, 350}
View Source
var MindBlastSpellCoef = [MindBlastRanks + 1]float64{0, .268, .364, .429, .429, .429, .429, .429, .429, .429}
View Source
var MindBlastSpellId = [MindBlastRanks + 1]int32{0, 8092, 8102, 8103, 8104, 8105, 8106, 10945, 10946, 10947}
View Source
var MindFlayBaseDamage = [MindFlayRanks + 1]float64{0, 75, 126, 186, 261, 330, 426}
View Source
var MindFlayLevel = [MindFlayRanks + 1]int{0, 20, 28, 36, 44, 52, 60}
View Source
var MindFlayManaCost = [MindFlayRanks + 1]float64{0, 45, 70, 100, 135, 165, 205}
View Source
var MindFlaySpellId = [MindFlayRanks + 1]int32{0, 15407, 17311, 17312, 17313, 17314, 18807}
View Source
var MindFlayTickSpellId = [MindFlayRanks + 1]int32{0, 16568, 7378, 17316, 17317, 17318, 18808}
View Source
var ShadowWordPainBaseDamage = [ShadowWordPainRanks + 1]float64{0, 30, 66, 132, 234, 366, 510, 672, 852}
View Source
var ShadowWordPainLevel = [ShadowWordPainRanks + 1]int{0, 4, 10, 18, 26, 34, 42, 50, 58}
View Source
var ShadowWordPainManaCost = [ShadowWordPainRanks + 1]float64{0, 25, 50, 95, 155, 230, 305, 385, 470}
View Source
var ShadowWordPainSpellCoef = [ShadowWordPainRanks + 1]float64{0, 0.067, 0.104, 0.154, 0.167, 0.167, 0.167, 0.167, 0.167} // per tick
View Source
var ShadowWordPainSpellId = [ShadowWordPainRanks + 1]int32{0, 589, 594, 970, 992, 2767, 10892, 10893, 10894}
View Source
var SmiteBaseDamage = [SmiteRanks + 1][]float64{{0}, {15, 20}, {28, 34}, {58, 67}, {94, 109}, {158, 178}, {216, 244}, {296, 333}, {384, 429}}
View Source
var SmiteCastTime = [SmiteRanks + 1]int{0, 1500, 2000, 2500, 2500, 2500, 2500, 2500, 2500}
View Source
var SmiteLevel = [SmiteRanks + 1]int{0, 1, 6, 14, 22, 30, 38, 46, 54}
View Source
var SmiteManaCost = [SmiteRanks + 1]float64{0, 20, 30, 60, 95, 140, 185, 230, 280}
View Source
var SmiteSpellCoef = [SmiteRanks + 1]float64{0, 0.123, 0.271, 0.554, 0.714, 0.714, 0.714, 0.714, 0.714}
View Source
var SmiteSpellId = [SmiteRanks + 1]int32{0, 585, 591, 598, 984, 1004, 6060, 10933, 10934}
View Source
var TalentTreeSizes = [3]int{15, 16, 16}

Functions

This section is empty.

Types

type EyeOfTheVoid added in v0.0.7

type EyeOfTheVoid struct {
	core.Pet

	Priest     *Priest
	ShadowBolt *core.Spell
	// contains filtered or unexported fields
}

func (*EyeOfTheVoid) ExecuteCustomRotation added in v0.0.7

func (eyeOfTheVoid *EyeOfTheVoid) ExecuteCustomRotation(sim *core.Simulation)

func (*EyeOfTheVoid) GetPet added in v0.0.7

func (eyeOfTheVoid *EyeOfTheVoid) GetPet() *core.Pet

func (*EyeOfTheVoid) Initialize added in v0.0.7

func (eyeOfTheVoid *EyeOfTheVoid) Initialize()

func (*EyeOfTheVoid) OnPetDisable added in v0.0.7

func (eyeOfTheVoid *EyeOfTheVoid) OnPetDisable(sim *core.Simulation)

func (*EyeOfTheVoid) Reset added in v0.0.7

func (eyeOfTheVoid *EyeOfTheVoid) Reset(sim *core.Simulation)

type Homunculus

type Homunculus struct {
	core.Pet

	Priest       *Priest
	PrimarySpell *core.Spell
	// contains filtered or unexported fields
}

func (*Homunculus) ExecuteCustomRotation

func (homunculus *Homunculus) ExecuteCustomRotation(sim *core.Simulation)

func (*Homunculus) GetPet

func (homunculus *Homunculus) GetPet() *core.Pet

func (*Homunculus) Initialize

func (homunculus *Homunculus) Initialize()

func (*Homunculus) OnPetDisable

func (homunculus *Homunculus) OnPetDisable(sim *core.Simulation)

func (*Homunculus) Reset

func (homunculus *Homunculus) Reset(sim *core.Simulation)

type Priest

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

	Latency                     float64
	MindFlayModifier            float64 // For Twisted Faith
	MindBlastModifier           float64 // For Twisted Faith
	MindBlastCritChanceModifier float64

	CircleOfHealing   *core.Spell
	DevouringPlague   []*core.Spell
	Dispersion        *core.Spell
	EmpoweredRenew    *core.Spell
	EyeOfTheVoid      *core.Spell
	FlashHeal         []*core.Spell
	GreaterHeal       []*core.Spell
	HolyFire          []*core.Spell
	Homunculi         *core.Spell
	InnerFocus        *core.Spell
	MindBlast         []*core.Spell
	MindFlay          [][]*core.Spell // 1 entry for each tick for each rank
	MindSear          []*core.Spell   // 1 entry for each tick
	MindSpike         *core.Spell
	Penance           *core.Spell
	PenanceHeal       *core.Spell
	PowerWordShield   []*core.Spell
	PrayerOfHealing   []*core.Spell
	PrayerOfMending   *core.Spell
	Renew             []*core.Spell
	Shadowfiend       *core.Spell
	Shadowform        *core.Spell
	ShadowWeavingProc *core.Spell
	ShadowWordDeath   *core.Spell
	ShadowWordPain    []*core.Spell
	Smite             []*core.Spell
	VampiricEmbrace   *core.Spell
	VampiricTouch     *core.Spell
	VoidPlague        *core.Spell

	DispersionAura   *core.Aura
	EyeOfTheVoidAura *core.Aura
	HomunculiAura    *core.Aura
	InnerFocusAura   *core.Aura
	ShadowfiendAura  *core.Aura
	ShadowformAura   *core.Aura
	SurgeOfLightAura *core.Aura

	MindSpikeAuras       core.AuraArray
	ShadowWeavingAuras   core.AuraArray
	VampiricEmbraceAuras core.AuraArray
	WeakenedSouls        core.AuraArray

	EyeOfTheVoidPet *EyeOfTheVoid
	HomunculiPets   []*Homunculus
	ShadowfiendPet  *Shadowfiend

	ProcPrayerOfMending core.ApplySpellResults
}

func New

func New(character *core.Character, talents string) *Priest

func (*Priest) AddPartyBuffs

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

func (*Priest) AddRaidBuffs

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

func (*Priest) AddShadowWeavingStack

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

func (*Priest) ApplyRunes

func (priest *Priest) ApplyRunes()

func (*Priest) ApplyTalents

func (priest *Priest) ApplyTalents()

func (*Priest) GetCharacter

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

func (*Priest) HasRune

func (priest *Priest) HasRune(rune proto.PriestRune) bool

func (*Priest) Initialize

func (priest *Priest) Initialize()

func (*Priest) NewEyeOfTheVoid added in v0.0.7

func (priest *Priest) NewEyeOfTheVoid() *EyeOfTheVoid

func (*Priest) NewHomunculus

func (priest *Priest) NewHomunculus(idx int32, npcID int32) *Homunculus

func (*Priest) NewShadowfiend

func (priest *Priest) NewShadowfiend() *Shadowfiend

func (*Priest) RegisterHealingSpells

func (priest *Priest) RegisterHealingSpells()

func (*Priest) RegisterPenanceSpell

func (priest *Priest) RegisterPenanceSpell()

func (*Priest) RegisterSmiteSpell

func (priest *Priest) RegisterSmiteSpell()

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 Shadowfiend

type Shadowfiend struct {
	core.Pet

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

func (*Shadowfiend) ExecuteCustomRotation

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

func (*Shadowfiend) GetPet

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

func (*Shadowfiend) Initialize

func (shadowfiend *Shadowfiend) Initialize()

func (*Shadowfiend) OnPetDisable

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