package game import ( "strings" "thehouseoficarus/internal/action" "thehouseoficarus/internal/combat" "thehouseoficarus/internal/engine" "thehouseoficarus/internal/net" "thehouseoficarus/internal/object" "thehouseoficarus/internal/player" ) func (g *Game) executeClean(sess *net.Session, args []string, rawInput string) { g.doClean(sess, strings.Join(args, " ")) } func (g *Game) doClean(sess *net.Session, input string) { p := sess.Player if combat.GetCombat(p.Name) != nil { sess.WriteLine("You can't do that during combat!") return } items := g.CraftIndex.ByType("clean") filter := strings.TrimSpace(input) found := false for _, item := range items { if filter != "" && !matchesCleanFilter(item, filter) { continue } if p.Level(player.Pharmacy) < item.FirstCraft().Level { continue } if !craftHasAllItems(item.FirstCraft(), p.HasItem) { continue } found = true break } if !found { hasHerbs := false for _, item := range items { if filter != "" && !matchesCleanFilter(item, filter) { continue } if craftHasAllItems(item.FirstCraft(), p.HasItem) { hasHerbs = true break } } if hasHerbs { sess.WriteLine("You don't have the Pharmacy level to clean any of your herbs.") } else { sess.WriteLine("You don't have any herbs to clean.") } return } g.cancelBgAction(p) p.BackgroundAction = &action.Action{ Type: "clean", TargetID: "clean_herbs", Data: &action.CleanData{ Phase: 0, Filter: filter, }, WaitLeft: engine.ToTicks(1), } g.broadcastAction(sess, "%s starts cleaning herbs.", p.Name) sess.WriteLine("You begin cleaning herbs.") } func matchesCleanFilter(item *object.ItemDef, filter string) bool { if len(item.Craft) > 0 && len(item.FirstCraft().Consume) > 0 && len(item.FirstCraft().Consume[0].Items) > 0 { if strings.Contains(item.FirstCraft().Consume[0].Items[0], filter) { return true } } if strings.Contains(item.ID, filter) { return true } return false }