예제 #1
0
 public void add(CraftData craft, bool save = true)
 {
     if (!this.rule_based)
     {
         this.craft.AddUnique(Tags.craft_reference_key(craft));
         craft.tag_name_cache = null;
         if (save)
         {
             Tags.save();
         }
     }
 }
예제 #2
0
 public void remove(CraftData craft, bool save = true)
 {
     if (!this.rule_based && this.craft.Contains(Tags.craft_reference_key(craft)))
     {
         this.craft.Remove(Tags.craft_reference_key(craft));
         craft.tag_name_cache = null;
         if (save)
         {
             Tags.save();
         }
     }
 }
예제 #3
0
        //returns list of craft_references which match the criteria of the tag's rule
        public List <string> rule()
        {
            List <string> data = new List <string>();

            List <CraftData> found = CraftData.all_craft.FindAll(craft => {
                var c_attr = craft.GetType().GetProperty(rule_attribute).GetValue(craft, null);
                float n;
                bool is_numeric = float.TryParse(c_attr.ToString(), out n);
                if (is_numeric)
                {
                    if (rule_comparitor == "greater_than")
                    {
                        return(float.Parse(c_attr.ToString()) > float.Parse(rule_value));
                    }
                    else if (rule_comparitor == "less_than")
                    {
                        return(float.Parse(c_attr.ToString()) < float.Parse(rule_value));
                    }
                    else
                    {
                        return(float.Parse(c_attr.ToString()) == float.Parse(rule_value));
                    }
                }
                else
                {
                    if (rule_comparitor == "includes")
                    {
                        return(c_attr.ToString().ToLower().Contains(rule_value.ToLower()));
                    }
                    else if (rule_comparitor == "starts_with")
                    {
                        return(c_attr.ToString().ToLower().StartsWith(rule_value.ToLower()));
                    }
                    else
                    {
                        return(c_attr.ToString().ToLower() == rule_value.ToLower());
                    }
                }
            });

            foreach (CraftData c in found)
            {
                data.AddUnique(Tags.craft_reference_key(c));
            }
            return(data);
        }
예제 #4
0
        //returns the number of craft associated with a given tag name. Takes a second optional argument to specify if the count
        //is for all loaded craft ("<all_saves>"), or limited to the search results ("filtered")
        public static int craft_count_for(string tag_name, string mode = "")
        {
            List <Tag> tags  = Tags.find_all(tag_name);
            int        count = 0;

            if (mode == "filtered")
            {
                foreach (Tag tag in tags)
                {
                    count += CraftData.filtered.FindAll(c => tag.save_dir == c.save_dir && tag.craft.Contains(Tags.craft_reference_key(c))).Count;
                }
            }
            else if (mode == "raw_count")
            {
                foreach (Tag tag in tags)
                {
                    count += tag.craft.Count;
                }
            }
            else
            {
                foreach (Tag tag in tags)
                {
                    count += CraftData.all_craft.FindAll(c => tag.save_dir == c.save_dir && tag.craft.Contains(Tags.craft_reference_key(c))).Count;
                }
            }
            return(count);
        }