Пример #1
0
 //creates a tag with all attribute options, returns "200" (status ok) if valid. returns error message is not valid
 public static string create(string tag_name, string save_dir, bool rule_based, string rule_attr, string rule_comparator, string rule_value, List <CraftData> craft = null)
 {
     tag_name = sanitize_name(tag_name);
     if (String.IsNullOrEmpty(tag_name))
     {
         return("Tag Name cannot be blank");
     }
     else if (names.Contains(tag_name))
     {
         return("A tag with this name already exists");
     }
     else
     {
         Tag tag = Tags.find_or_create_by(tag_name, save_dir, false);
         if (rule_based)
         {
             tag.set_rule(rule_attr, rule_comparator, rule_value);
         }
         else
         {
             if (craft != null)
             {
                 foreach (CraftData c in craft)
                 {
                     tag.add(c);
                 }
             }
         }
         Tags.save();
         return("200");
     }
 }
Пример #2
0
        //Loads Tag data from confignode file for a given save or for all saves if "<all_saves>" is given
        //If a save does not have a craft.tags file it copies the default.tags file into the save.
        //Will also instanciate an instance of Tags if one does not already exist.
        public static void load(string save_name)
        {
            if (Tags.instance == null)
            {
                new Tags();
            }
            List <string> save_dirs = new List <string> {
                save_name
            };

            Tags.instance.data.Clear();
            if (save_name == CMBrowser.all_saves_ref)
            {
                save_dirs = CraftData.save_names;
            }

            foreach (string save_dir in save_dirs)
            {
                CraftManager.log("loading tags for " + save_dir);
                if (!File.Exists(tag_file_path(save_dir)))
                {
                    FileInfo default_tags = new FileInfo(Paths.joined(CraftManager.ksp_root, "GameData", "CraftManager", "default.tags"));
                    //TODO handle case where default.tags file is not present.
                    default_tags.CopyTo(tag_file_path(save_dir));
                }
                ConfigNode raw_data  = ConfigNode.Load(tag_file_path(save_dir));
                ConfigNode tag_nodes = raw_data.GetNode("TAGS");

                foreach (ConfigNode tag_node in tag_nodes.nodes)
                {
                    string tag_name = tag_node.GetValue("tag_name");

                    Tag tag = Tags.find_or_create_by(tag_name, save_dir, false);
                    if (tag_node.HasNode("RULE"))
                    {
                        ConfigNode rule_node  = tag_node.GetNode("RULE");
                        bool       rule_added = tag.set_rule(rule_node.GetValue("attribute"), rule_node.GetValue("comparator"), rule_node.GetValue("value"));
                        if (!rule_added)
                        {
                            CraftManager.log("failed to load rule for tag: " + tag_name);
                        }
                    }
                    else
                    {
                        string[] craft = tag_node.GetValues("craft");
                        foreach (string craft_ref in craft)
                        {
                            tag.craft.AddUnique(craft_ref);
                        }
                    }
                }
            }
            Tags.update_lists();
        }
Пример #3
0
        //Associate a craft with a tag. Will create a Tag with the given name if it doesn't already exist
        public static void tag_craft(CraftData craft, string tag_name)
        {
            Tag tag = Tags.find_or_create_by(tag_name, craft.save_dir);

            tag.add(craft);
        }