You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
817 B
Go

package model
import "time"
// ShiftHeroEffectDeadlines moves buff/debuff expiry and buff quota windows by d so in-game time
// does not advance during a global server pause (wall clock still moves).
func ShiftHeroEffectDeadlines(h *Hero, d time.Duration) {
if h == nil || d <= 0 {
return
}
for i := range h.Buffs {
h.Buffs[i].ExpiresAt = h.Buffs[i].ExpiresAt.Add(d)
h.Buffs[i].AppliedAt = h.Buffs[i].AppliedAt.Add(d)
}
for i := range h.Debuffs {
h.Debuffs[i].ExpiresAt = h.Debuffs[i].ExpiresAt.Add(d)
h.Debuffs[i].AppliedAt = h.Debuffs[i].AppliedAt.Add(d)
}
if h.BuffQuotaPeriodEnd != nil {
t := h.BuffQuotaPeriodEnd.Add(d)
h.BuffQuotaPeriodEnd = &t
}
for k, v := range h.BuffCharges {
if v.PeriodEnd != nil {
t := v.PeriodEnd.Add(d)
v.PeriodEnd = &t
}
h.BuffCharges[k] = v
}
}