Пример #1
0
 public bool check_is_recipe_valid(CraftRecipe r, Actor a, World w)
 {
     for (int x = 0; x < r.input.Count; x++)
     {
         item_descriptor t = Acc.get_item_by_name(r.input[x].Key);
         if (t.item_type == ItemType.Empty || t.item_id == -1 || !a.items.has_item(t.item_type, t.item_id, r.input[x].Value))
         {
             return(false);
         }
     }
     for (int x = 0; x < r.furniture_require.Length; x++)
     {
         bool contained = false;
         for (int i = 0; i < id_nearby_furniture.Count; i++)
         {
             if (Exilania.furniture_manager.furniture[w.furniture[id_nearby_furniture[i]].furniture_id].name.ToLower() == r.furniture_require[x].ToLower())
             {
                 contained = true;
             }
         }
         if (!contained)
         {
             return(false);
         }
     }
     return(true);
 }
Пример #2
0
 public void take_item_requirements(CraftRecipe r, Actor a, World w)
 {
     for (int x = 0; x < r.input.Count; x++)
     {
         item_descriptor t = Acc.get_item_by_name(r.input[x].Key);
         if (t.item_type != ItemType.Empty && t.item_id != -1)
         {
             a.items.use_item(a, t.item_type, t.item_id, r.input[x].Value);
         }
     }
 }
Пример #3
0
        public void write_info_about_item(SpriteBatch s, CraftRecipe r, Point loc, Display d)
        {
            if (r.output[0].item_id != infos_item_type.item_id || r.output[0].type != infos_item_type.item_type)
            {
                infos_item_type.item_id   = r.output[0].item_id;
                infos_item_type.item_type = r.output[0].type;
                infos = new List <KeyValuePair <string, Vector2> >();
                string writing = "";
                switch (cur_available_crafts[hover_over].output[0].type)
                {
                case ItemType.Block:
                    writing = r.output[0].item_quantity + " " + Exilania.block_types.blocks[cur_available_crafts[hover_over].output[0].item_id].name;
                    infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing)));
                    break;

                case ItemType.Furniture:
                    writing = r.output[0].item_quantity + " " + Exilania.furniture_manager.furniture[r.output[0].item_id].name;
                    infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing)));
                    break;

                case ItemType.ItemPiece:
                    writing = Exilania.item_manager.item_pieces[r.output[0].item_id].name;
                    infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing)));
                    break;

                case ItemType.Material:
                    writing = Exilania.material_manager.materials[r.output[0].item_id].name;
                    infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing)));
                    break;
                }
                if (r.furniture_require.Length > 0)
                {
                    writing = "";
                    for (int x = 0; x < r.furniture_require.Length; x++)
                    {
                        if (x == 0)
                        {
                            writing = "Equipment Required: " + r.furniture_require[x];
                        }
                        else
                        {
                            writing += ", " + r.furniture_require[x];
                        }
                    }
                    infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing)));
                }
                writing   = "Requires: " + r.ToString();
                draw_size = new Point(0, infos.Count * 20 + 40);
                infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing)));
                writing = "Complexity: " + r.complexity;
                infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing)));
                for (int x = 0; x < infos.Count; x++)
                {
                    if (infos[x].Value.X > draw_size.X)
                    {
                        draw_size.X = (int)infos[x].Value.X;
                    }
                }
                draw_size.X += 20;
                draw_size.Y += 20;
            }
            d.draw_bounding_box(s, new Rectangle((int)loc.X - draw_size.X, (int)loc.Y, draw_size.X, draw_size.Y));
            d.draw_bounding_box(s, new Rectangle((int)loc.X - draw_size.X, (int)loc.Y, draw_size.X, draw_size.Y));
            for (int x = 0; x < infos.Count; x++)
            {
                d.draw_text(s, d.small_font, "@00" + infos[x].Key, (int)loc.X + 10 - draw_size.X, (int)loc.Y + 10 + (x * 20), 600);
            }
        }
Пример #4
0
        public CraftManager()
        {
            recipes = new List <CraftRecipe>();
            if (System.IO.File.Exists(@"craft_recipes.txt"))
            {
                System.IO.StreamReader r = new System.IO.StreamReader(@"craft_recipes.txt");
                string      line         = "";
                CraftRecipe p            = new CraftRecipe();
                bool        cont         = true;
                while (cont)
                {
                    line = r.ReadLine().Trim();
                    if (line.Length == 0 || line[0] == '#')
                    {
                        //skip this line
                    }
                    else
                    {
                        string[] items = line.Split(':');
                        switch (items[0].ToLower())
                        {
                        case "name":
                            if (p.name == "")
                            {
                                p.name = items[1].Trim();
                            }
                            else
                            {
                                p.crafting_id = (ushort)recipes.Count;
                                recipes.Add(p);
                                Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded.");
                                p      = new CraftRecipe();
                                p.name = items[1].Trim();
                            }
                            break;

                        case "output":
                            items = items[1].Split(',');
                            for (int i = 0; i < items.Length; i++)
                            {
                                item_descriptor t  = Acc.get_item_by_name(Acc.script_remove_content_of_outer_parenthesis(items[i]));
                                Output_Type     pr = new Output_Type(t.item_type, t.item_id, int.Parse(Acc.script_remove_outer_parentheses(items[i])));
                                p.output.Add(pr);
                            }
                            break;

                        case "input":
                            items = items[1].Split(',');
                            for (int x = 0; x < items.Length; x++)
                            {
                                p.input.Add(new KeyValuePair <string, int>(Acc.script_remove_content_of_outer_parenthesis(items[x]), int.Parse(Acc.script_remove_outer_parentheses(items[x]))));
                            }
                            break;

                        case "complexity":
                            p.complexity = int.Parse(items[1]);
                            break;

                        case "furniture-require":
                            items = items[1].Split(',');
                            p.furniture_require = new string[items.Length];
                            for (int x = 0; x < items.Length; x++)
                            {
                                p.furniture_require[x] = items[x];
                            }
                            break;

                        default:
                            Exilania.text_stream.WriteLine("UNHANDLED type " + items[0]);
                            break;
                        }
                    }
                    if (r.EndOfStream)
                    {
                        p.crafting_id = (ushort)recipes.Count;
                        recipes.Add(p);
                        Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded.");
                        cont = false;
                    }
                }
                r.Close();
                for (int x = 0; x < Exilania.item_manager.item_pieces.Count; x++)
                {
                    p      = new CraftRecipe();
                    p.name = Exilania.item_manager.item_pieces[x].name;
                    p.output.Add(new Output_Type(ItemType.ItemPiece, x, 1));
                    if (Exilania.item_manager.item_pieces[x].craft_require != "")
                    {
                        p.furniture_require = Exilania.item_manager.item_pieces[x].craft_require.Split(',');
                    }
                    else
                    {
                        p.furniture_require = new string[0];
                    }
                    if (Exilania.item_manager.item_pieces[x].materials.Count > 0)
                    {
                        foreach (var mats in Exilania.item_manager.item_pieces[x].materials)
                        {
                            p.input.Add(new KeyValuePair <string, int>(mats.Key, mats.Value));
                        }
                    }
                    p.complexity  = Exilania.item_manager.item_pieces[x].complexity;
                    p.crafting_id = (ushort)recipes.Count;
                    recipes.Add(p);
                    Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded.");
                }
                for (int x = 0; x < Exilania.furniture_manager.furniture.Count; x++)
                {
                    p      = new CraftRecipe();
                    p.name = Exilania.furniture_manager.furniture[x].name;
                    p.output.Add(new Output_Type(ItemType.Furniture, x, 1));
                    if (Exilania.furniture_manager.furniture[x].craft_require.Length > 0)
                    {
                        p.furniture_require = Exilania.furniture_manager.furniture[x].craft_require;
                    }
                    if (Exilania.furniture_manager.furniture[x].materials.Count > 0)
                    {
                        foreach (var mats in Exilania.furniture_manager.furniture[x].materials)
                        {
                            p.input.Add(new KeyValuePair <string, int>(mats.Key, mats.Value));
                        }
                    }
                    p.complexity  = Exilania.furniture_manager.furniture[x].complexity;
                    p.crafting_id = (ushort)recipes.Count;
                    recipes.Add(p);
                    Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded.");
                }
            }
            else
            {
                Exilania.text_stream.Write("ERROR! No craft_recipes.txt file.");
            }
        }