Skip to content

Commit

Permalink
Merge pull request #4107 from wowsims/apl
Browse files Browse the repository at this point in the history
Fix sindragosa crash in large raids with lots of pets
  • Loading branch information
jimmyt857 authored Dec 24, 2023
2 parents 339ba20 + 099fc49 commit 98783f3
Showing 1 changed file with 37 additions and 43 deletions.
80 changes: 37 additions & 43 deletions sim/encounters/icc/sindragosa25h_ai.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,50 +163,44 @@ func (ai *Sindragosa25HAI) registerMysticBuffetAuras() {
}

ai.MysticBuffetAuras = make([]*core.Aura, 0)
pendingActions := make([]*core.PendingAction, 50)
i := 0
pendingActions := make([]*core.PendingAction, len(ai.Target.Env.AllUnits))

for _, party := range ai.Target.Env.Raid.Parties {
for _, player := range party.PlayersAndPets {
i += 1
character := player.GetCharacter()
aura := character.GetOrRegisterAura(core.Aura{
Label: "Mystic Buffet",
ActionID: core.ActionID{SpellID: 70127},
MaxStacks: math.MaxInt32,
Duration: time.Second * 8,
OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) {
aura.Unit.PseudoStats.SchoolDamageTakenMultiplier[stats.SchoolIndexFrost] /= 1.0 + 0.2*float64(oldStacks)
aura.Unit.PseudoStats.SchoolDamageTakenMultiplier[stats.SchoolIndexFrost] *= 1.0 + 0.2*float64(newStacks)
},
OnGain: func(aura *core.Aura, sim *core.Simulation) {
period := time.Second * 6
numTicks := int(sim.GetRemainingDuration() / period)

if pendingActions[i-1] != nil {
pendingActions[i-1].Cancel(sim)
}

pendingActions[i-1] = core.StartPeriodicAction(sim, core.PeriodicActionOptions{
NumTicks: numTicks,
Period: period,
OnAction: func(sim *core.Simulation) {
aura.Refresh(sim)
aura.AddStack(sim)
},
})
},
OnExpire: func(aura *core.Aura, sim *core.Simulation) {
pendingActions[i-1].Cancel(sim)
},
OnReset: func(aura *core.Aura, sim *core.Simulation) {
if pendingActions[i-1] != nil {
pendingActions[i-1].Cancel(sim)
}
},
})
ai.MysticBuffetAuras = append(ai.MysticBuffetAuras, aura)
}
for _, raidUnit := range ai.Target.Env.Raid.AllUnits {
ai.MysticBuffetAuras = append(ai.MysticBuffetAuras, raidUnit.GetOrRegisterAura(core.Aura{
Label: "Mystic Buffet",
ActionID: core.ActionID{SpellID: 70127},
MaxStacks: math.MaxInt32,
Duration: time.Second * 8,
OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) {
aura.Unit.PseudoStats.SchoolDamageTakenMultiplier[stats.SchoolIndexFrost] /= 1.0 + 0.2*float64(oldStacks)
aura.Unit.PseudoStats.SchoolDamageTakenMultiplier[stats.SchoolIndexFrost] *= 1.0 + 0.2*float64(newStacks)
},
OnGain: func(aura *core.Aura, sim *core.Simulation) {
period := time.Second * 6
numTicks := int(sim.GetRemainingDuration() / period)

if pendingActions[aura.Unit.UnitIndex] != nil {
pendingActions[aura.Unit.UnitIndex].Cancel(sim)
}

pendingActions[aura.Unit.UnitIndex] = core.StartPeriodicAction(sim, core.PeriodicActionOptions{
NumTicks: numTicks,
Period: period,
OnAction: func(sim *core.Simulation) {
aura.Refresh(sim)
aura.AddStack(sim)
},
})
},
OnExpire: func(aura *core.Aura, sim *core.Simulation) {
pendingActions[aura.Unit.UnitIndex].Cancel(sim)
},
OnReset: func(aura *core.Aura, sim *core.Simulation) {
if pendingActions[aura.Unit.UnitIndex] != nil {
pendingActions[aura.Unit.UnitIndex].Cancel(sim)
}
},
}))
}
}

Expand Down

0 comments on commit 98783f3

Please sign in to comment.