Esempio n. 1
0
 public override void MeasureOverride(Vector2 parentAvailableSize)
 {
     m_blockIconWidget.IsVisible = false;
     m_labelWidget.IsVisible     = false;
     if (!string.IsNullOrEmpty(m_ingredient))
     {
         CraftingRecipesManager.DecodeIngredient(m_ingredient, out string craftingId, out int?data);
         Block[] array = BlocksManager.FindBlocksByCraftingId(craftingId);
         if (array.Length != 0)
         {
             Block block = array[(int)(1.0 * Time.RealTime) % array.Length];
             if (block != null)
             {
                 m_blockIconWidget.Value     = Terrain.MakeBlockValue(block.BlockIndex, 0, data.HasValue ? data.Value : 4);
                 m_blockIconWidget.Light     = 15;
                 m_blockIconWidget.IsVisible = true;
             }
         }
     }
     else if (m_resultValue != 0)
     {
         m_blockIconWidget.Value     = m_resultValue;
         m_blockIconWidget.Light     = 15;
         m_labelWidget.Text          = m_resultCount.ToString();
         m_blockIconWidget.IsVisible = true;
         m_labelWidget.IsVisible     = true;
     }
     base.MeasureOverride(parentAvailableSize);
 }
Esempio n. 2
0
        public List <List <int> > decodeIngredian(string[] ingredians)
        {//把配方解析成Block的value
            List <List <int> > result = new List <List <int> >();

            foreach (string needname in ingredians)
            {
                List <int> values = new List <int>();
                if (string.IsNullOrEmpty(needname))
                {
                    result.Add(values);
                    continue;
                }
                if (needname.Contains(":"))
                {
                    string[] split = needname.Split(':');
                    Block[]  array = BlocksManager.FindBlocksByCraftingId(split[0]);
                    if (array != null)
                    {
                        int dd = int.Parse(split[1], CultureInfo.InvariantCulture);
                        int tt = Terrain.MakeBlockValue(array[0].BlockIndex, 0, dd);
                        values.Add(getPosByValue(tt));
                    }
                }
                else
                {
                    int k = 0;
                    foreach (string element in craftids)
                    {
                        if (element == needname)
                        {
                            values.Add(k);
                        }
                        ++k;
                    }
                }

                result.Add(values);
            }
            return(result);
        }
        public static void Initialize()
        {
            if (Initialize1 != null)
            {
                Initialize1(); return;
            }
            XElement source1 = ContentManager.Get <XElement>("CraftingRecipes");

            ModsManager.CombineXml(source1, ModsManager.GetEntries(".cr"), "Description", "Result", "Recipes");
            IEnumerable <XElement> source2 = source1.Descendants("Recipe");

            foreach (XElement item in source2)
            {
                CraftingRecipe craftingRecipe = new CraftingRecipe();
                string         attributeValue = XmlUtils.GetAttributeValue <string>(item, "Result");
                string         desc           = LanguageControl.GetBlock(attributeValue, "CRDescription");
                if (item.Attribute("Description") != null)
                {
                    desc = XmlUtils.GetAttributeValue <string>(item, "Description");
                }
                craftingRecipe.ResultValue = DecodeResult(attributeValue);
                craftingRecipe.ResultCount = XmlUtils.GetAttributeValue <int>(item, "ResultCount");
                string attributeValue2 = XmlUtils.GetAttributeValue(item, "Remains", string.Empty);
                if (!string.IsNullOrEmpty(attributeValue2))
                {
                    craftingRecipe.RemainsValue = DecodeResult(attributeValue2);
                    craftingRecipe.RemainsCount = XmlUtils.GetAttributeValue <int>(item, "RemainsCount");
                }
                craftingRecipe.RequiredHeatLevel   = XmlUtils.GetAttributeValue <float>(item, "RequiredHeatLevel");
                craftingRecipe.RequiredPlayerLevel = XmlUtils.GetAttributeValue(item, "RequiredPlayerLevel", 1f);
                craftingRecipe.Description         = desc;
                craftingRecipe.Message             = XmlUtils.GetAttributeValue <string>(item, "Message", null);
                if (craftingRecipe.ResultCount > BlocksManager.Blocks[Terrain.ExtractContents(craftingRecipe.ResultValue)].MaxStacking)
                {
                    throw new InvalidOperationException($"In recipe for \"{attributeValue}\" ResultCount is larger than max stacking of result block.");
                }
                if (craftingRecipe.RemainsValue != 0 && craftingRecipe.RemainsCount > BlocksManager.Blocks[Terrain.ExtractContents(craftingRecipe.RemainsValue)].MaxStacking)
                {
                    throw new InvalidOperationException($"In Recipe for \"{attributeValue2}\" RemainsCount is larger than max stacking of remains block.");
                }
                Dictionary <char, string> dictionary = new Dictionary <char, string>();
                foreach (XAttribute item2 in from a in item.Attributes()
                         where a.Name.LocalName.Length == 1 && char.IsLower(a.Name.LocalName[0])
                         select a)
                {
                    DecodeIngredient(item2.Value, out string craftingId, out int?data);
                    if (BlocksManager.FindBlocksByCraftingId(craftingId).Length == 0)
                    {
                        throw new InvalidOperationException($"Block with craftingId \"{item2.Value}\" not found.");
                    }
                    if (data.HasValue && (data.Value < 0 || data.Value > 262143))
                    {
                        throw new InvalidOperationException($"Data in recipe ingredient \"{item2.Value}\" must be between 0 and 0x3FFFF.");
                    }
                    dictionary.Add(item2.Name.LocalName[0], item2.Value);
                }
                string[] array = item.Value.Trim().Split(new string[] { "\n" }, StringSplitOptions.None);
                for (int i = 0; i < array.Length; i++)
                {
                    int num  = array[i].IndexOf('"');
                    int num2 = array[i].LastIndexOf('"');
                    if (num < 0 || num2 < 0 || num2 <= num)
                    {
                        throw new InvalidOperationException("Invalid recipe line.");
                    }
                    string text = array[i].Substring(num + 1, num2 - num - 1);
                    for (int j = 0; j < text.Length; j++)
                    {
                        char c = text[j];
                        if (char.IsLower(c))
                        {
                            string text2 = dictionary[c];
                            craftingRecipe.Ingredients[j + i * 3] = text2;
                        }
                    }
                }
                m_recipes.Add(craftingRecipe);
            }
            Block[] blocks = BlocksManager.Blocks;
            foreach (Block block in blocks)
            {
                m_recipes.AddRange(block.GetProceduralCraftingRecipes());
            }
            m_recipes.Sort(delegate(CraftingRecipe r1, CraftingRecipe r2)
            {
                int y = r1.Ingredients.Count((string s) => !string.IsNullOrEmpty(s));
                int x = r2.Ingredients.Count((string s) => !string.IsNullOrEmpty(s));
                return(Comparer <int> .Default.Compare(x, y));
            });
        }
Esempio n. 4
0
        public static void Initialize()
        {
            m_recipes = new List <CraftingRecipe>();
            for (var i = ContentManager.CombineXml(ContentManager.Get <XElement>("CraftingRecipes"), ModsManager.GetEntries(".cr"), "Description", "Result", "Recipes").Descendants("Recipe").GetEnumerator(); i.MoveNext();)
            {
                var descendant      = i.Current;
                var recipe          = new CraftingRecipe();
                var attributeValue1 = XmlUtils.GetAttributeValue <string>(descendant, "Result");
                recipe.ResultValue = DecodeResult(attributeValue1);
                recipe.ResultCount = XmlUtils.GetAttributeValue <int>(descendant, "ResultCount");
                var attributeValue2 = XmlUtils.GetAttributeValue(descendant, "Remains", string.Empty);
                if (!string.IsNullOrEmpty(attributeValue2))
                {
                    recipe.RemainsValue = DecodeResult(attributeValue2);
                    recipe.RemainsCount = XmlUtils.GetAttributeValue <int>(descendant, "RemainsCount");
                }

                recipe.RequiredHeatLevel = XmlUtils.GetAttributeValue <float>(descendant, "RequiredHeatLevel");
                recipe.Description       = XmlUtils.GetAttributeValue <string>(descendant, "Description");
                if (recipe.ResultCount >
                    BlocksManager.Blocks[Terrain.ExtractContents(recipe.ResultValue)].MaxStacking)
                {
                    throw new InvalidOperationException(string.Format(
                                                            "In recipe for \"{0}\" ResultCount is larger than max stacking of result block.",
                                                            new object[1] {
                        attributeValue1
                    }));
                }
                if (recipe.RemainsValue != 0 && recipe.RemainsCount >
                    BlocksManager.Blocks[Terrain.ExtractContents(recipe.RemainsValue)].MaxStacking)
                {
                    throw new InvalidOperationException(string.Format(
                                                            "In Recipe for \"{0}\" RemainsCount is larger than max stacking of remains block.",
                                                            new object[1] {
                        attributeValue2
                    }));
                }
                var dictionary = new Dictionary <char, string>();
                foreach (var xattribute in descendant.Attributes().Where(a =>
                                                                         a.Name.LocalName.Length == 1 && char.IsLower(a.Name.LocalName[0])))
                {
                    string craftingId;
                    int?   data;
                    DecodeIngredient(xattribute.Value, out craftingId, out data);
                    if (BlocksManager.FindBlocksByCraftingId(craftingId).Length == 0)
                    {
                        throw new InvalidOperationException(string.Format("Block with craftingId \"{0}\" not found.",
                                                                          new object[1] {
                            xattribute.Value
                        }));
                    }
                    if (data.HasValue && (data.Value < 0 || data.Value > 262143))
                    {
                        throw new InvalidOperationException(string.Format(
                                                                "Data in recipe ingredient \"{0}\" must be between 0 and 0x3FFFF.",
                                                                new object[1] {
                            xattribute.Value
                        }));
                    }
                    dictionary.Add(xattribute.Name.LocalName[0], xattribute.Value);
                }

                var strArray = descendant.Value.Trim().Split('\n');
                for (var index1 = 0; index1 < strArray.Length; ++index1)
                {
                    var num1 = strArray[index1].IndexOf('"');
                    var num2 = strArray[index1].LastIndexOf('"');
                    if (num1 < 0 || num2 < 0 || num2 <= num1)
                    {
                        throw new InvalidOperationException("Invalid recipe line.");
                    }
                    var str1 = strArray[index1].Substring(num1 + 1, num2 - num1 - 1);
                    for (var index2 = 0; index2 < str1.Length; ++index2)
                    {
                        var c = str1[index2];
                        if (char.IsLower(c))
                        {
                            recipe.Ingredients[index2 + index1 * 3] = dictionary[c];
                        }
                    }
                }

                m_recipes.Add(recipe);
            }

            var blocks = BlocksManager.Blocks;

            for (int i = 0; i < blocks.Length; i++)
            {
                m_recipes.AddRange(blocks[i].GetProceduralCraftingRecipes());
            }
            m_recipes.Sort((r1, r2) =>
            {
                return(Comparer <int> .Default.Compare(r2.Ingredients.Count(s => !string.IsNullOrEmpty(s)), r1.Ingredients.Count(s => !string.IsNullOrEmpty(s))));
            });
        }
Esempio n. 5
0
        public static void CRInitialize()
        {
            CraftingRecipesManager.m_recipes = new List <CraftingRecipe>();
            var recipes    = new List <CraftingRecipe>();
            var enumerator = ContentManager.CombineXml(ContentManager.Get <XElement>("CraftingRecipes"), ModsManager.GetEntries(".cr"), "Description", "Result", "Recipes").Descendants("Recipe").GetEnumerator();

            while (enumerator.MoveNext())
            {
                XElement xelement       = enumerator.Current;
                var      craftingRecipe = new CraftingRecipe
                {
                    Ingredients = new string[36]
                };
                string attributeValue = XmlUtils.GetAttributeValue <string>(xelement, "Result");
                craftingRecipe.ResultValue = CraftingRecipesManager.DecodeResult(attributeValue);
                craftingRecipe.ResultCount = XmlUtils.GetAttributeValue <int>(xelement, "ResultCount");
                string attributeValue2 = XmlUtils.GetAttributeValue(xelement, "Remains", string.Empty);
                if (!string.IsNullOrEmpty(attributeValue2))
                {
                    craftingRecipe.RemainsValue = CraftingRecipesManager.DecodeResult(attributeValue2);
                    craftingRecipe.RemainsCount = XmlUtils.GetAttributeValue <int>(xelement, "RemainsCount");
                }
                craftingRecipe.RequiredHeatLevel = XmlUtils.GetAttributeValue <float>(xelement, "RequiredHeatLevel");
                craftingRecipe.Description       = XmlUtils.GetAttributeValue <string>(xelement, "Description");
                if (craftingRecipe.ResultCount > BlocksManager.Blocks[Terrain.ExtractContents(craftingRecipe.ResultValue)].MaxStacking)
                {
                    throw new InvalidOperationException($"In recipe for \"{attributeValue}\" ResultCount is larger than max stacking of result block.");
                }
                if (craftingRecipe.RemainsValue != 0 && craftingRecipe.RemainsCount > BlocksManager.Blocks[Terrain.ExtractContents(craftingRecipe.RemainsValue)].MaxStacking)
                {
                    throw new InvalidOperationException($"In Recipe for \"{attributeValue2}\" RemainsCount is larger than max stacking of remains block.");
                }
                var dictionary = new Dictionary <char, string>();
                foreach (XAttribute item in xelement.Attributes().Where(CraftingRecipesManager.c._.Initialize_b__3_1))
                {
                    CraftingRecipesManager.DecodeIngredient(item.Value, out string craftingId, out int?data);
                    if (BlocksManager.FindBlocksByCraftingId(craftingId).Length == 0)
                    {
                        throw new InvalidOperationException($"Block with craftingId \"{item.Value}\" not found.");
                    }
                    if (data.HasValue && (data.Value < 0 || data.Value > 262143))
                    {
                        throw new InvalidOperationException($"Data in recipe ingredient \"{item.Value}\" must be between 0 and 0x3FFFF.");
                    }
                    dictionary.Add(item.Name.LocalName[0], item.Value);
                }
                string[] array       = xelement.Value.Trim().Split('\n');
                string[] ingredients = craftingRecipe.Ingredients;
                for (int i = 0; i < array.Length; i++)
                {
                    int num2 = array[i].IndexOf('"');
                    int num3 = array[i].LastIndexOf('"');
                    if (num2 < 0 || num3 < 0 || num3 <= num2)
                    {
                        throw new InvalidOperationException("Invalid recipe line.");
                    }
                    string text = array[i].Substring(num2 + 1, num3 - num2 - 1);
                    for (int j = 0; j < text.Length; j++)
                    {
                        char c = text[j];
                        if (char.IsLower(c))
                        {
                            string text2 = dictionary[c];
                            if (ItemBlock.IdTable.TryGetValue(text2, out int value))
                            {
                                text2 = BlocksManager.Blocks[Terrain.ExtractContents(value)].CraftingId + ":" + Terrain.ExtractData(value);
                            }
                            ingredients[j + i * 6] = text2;
                        }
                    }
                }
                CraftingRecipesManager.m_recipes.Add(craftingRecipe);
                if (craftingRecipe.RequiredHeatLevel >= 300f)
                {
                    CraftingRecipesManager.DecodeIngredient(ingredients[0], out string craftingId, out int?num);
                    if (!num.HasValue)
                    {
                        continue;
                    }
                    recipes.Add(new CraftingRecipe
                    {
                        ResultValue       = Terrain.ReplaceData(BlocksManager.FindBlocksByCraftingId(craftingId)[0].BlockIndex, num.Value),
                        ResultCount       = GetCount(ingredients),
                        RemainsValue      = craftingRecipe.RemainsValue,
                        RemainsCount      = craftingRecipe.RemainsCount,
                        RequiredHeatLevel = 1f,
                        Ingredients       = (string[])ingredients.Clone(),
                        Description       = craftingRecipe.Description + Utils.Get(" (温度过低)")
                    });
                }
            }
            var blocks = BlocksManager.Blocks;

            for (int i = 0; i < blocks.Length; i++)
            {
                using (var enumerator2 = blocks[i].GetProceduralCraftingRecipes().GetEnumerator())
                    while (enumerator2.MoveNext())
                    {
                        var old = enumerator2.Current.Ingredients;
                        if (old.Length == 9)
                        {
                            var ingredients = new string[36];
                            ingredients[0]  = old[0];
                            ingredients[1]  = old[1];
                            ingredients[2]  = old[2];
                            ingredients[6]  = old[3];
                            ingredients[7]  = old[4];
                            ingredients[8]  = old[5];
                            ingredients[12] = old[6];
                            ingredients[13] = old[7];
                            ingredients[14] = old[8];
                            enumerator2.Current.Ingredients = ingredients;
                        }
                        CraftingRecipesManager.m_recipes.Add(enumerator2.Current);
                    }
            }
            CraftingRecipesManager.m_recipes.Sort(CraftingRecipesManager.c._.Initialize_b__3_0);
            CraftingRecipesManager.m_recipes.AddRange(recipes);
        }