package game import ( "fmt" "thehouseoficarus/internal/combat" "thehouseoficarus/internal/engine" "thehouseoficarus/internal/net" ) func (g *Game) checkAggro(sess *net.Session) { p := sess.Player if combat.GetCombat(p.Name) != nil { return } playerLevel := p.CombatLevel() mobs := g.MobStore.MobsInRoom(p.RoomID) for _, mob := range mobs { if !mob.Aggressive || mob.HP <= 0 || mob.Protected { continue } if combat.IsMobInCombat(mob.InstanceID) { continue } mobLevel := mobCombatLevel(mob) if playerLevel > mobLevel*2 { continue } aggMob := mob g.Ticks.Subscribe(engine.ToTicks(1), func() bool { if combat.GetCombat(p.Name) != nil { return false } if aggMob.HP <= 0 || aggMob.RoomID != p.RoomID { return false } if combat.IsMobInCombat(aggMob.InstanceID) { return false } attacker := aggMob.Name if !aggMob.Unique { attacker = "The " + aggMob.Name } sess.WriteLine(fmt.Sprintf("\n%s attacks you!", g.colorize(sess, "mob_name", attacker))) g.startCombat(sess, p, aggMob) return false }) break } }