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