package game import ( "strings" "thehouseoficarus/internal/net" "thehouseoficarus/internal/player" ) func (g *Game) BuffTick() { if g.Hub == nil { return } for _, sess := range g.Hub.AllSessions() { if sess.Player == nil { continue } p := sess.Player remaining := make([]player.PotionBuff, 0, len(p.ActiveBuffs)) dirty := false for _, buff := range p.ActiveBuffs { buff.TicksLeft-- if buff.TicksLeft > 0 { remaining = append(remaining, buff) } else { dirty = true } } if dirty { p.ActiveBuffs = remaining sess.WriteLine(g.colorize(sess, "broadcast", "\nYour potion buff has worn off.")) } } } func (g *Game) buffLevelBonus(p *player.Player, stat string) int { if g.Hub == nil { return 0 } totalPercent := 0 for _, buff := range p.ActiveBuffs { if strings.EqualFold(buff.Stat, stat) { totalPercent += buff.BonusPercent } } if totalPercent == 0 { return 0 } baseLevel := p.Level(player.SkillName(strings.ToLower(stat))) return baseLevel * totalPercent / 100 } func (g *Game) totalBuffedLevel(sess *net.Session, p *player.Player, stat string) int { return p.Level(player.SkillName(strings.ToLower(stat))) + g.buffLevelBonus(p, stat) }