Exemple #1
0
        //---------------------------------------------------------------------------------------------

        public static UOItem FindType(this ItemsCollection items, IUOItemType itemType)
        {
            if (!itemType.Color.IsConstant)
            {
                return(items.FindType(itemType.Graphic));
            }
            else
            {
                return(items.FindType(itemType.Graphic, itemType.Color));
            }
        }
Exemple #2
0
        //---------------------------------------------------------------------------------------------

        public static UOItem FindType(this ItemsCollection items, IUOItemType itemType)
        {
            bool typeOnly = itemType.Color == 0x0000 || itemType.Color == 0xFFFF || !itemType.Color.IsConstant;

            if (typeOnly)//!itemType.Color.IsConstant)//Spis ==0x000 0 nebo 0xFFFF
            {
                return(items.FindType(itemType.Graphic));
            }
            else
            {
                return(items.FindType(itemType.Graphic, itemType.Color));
            }
        }
Exemple #3
0
        public static void RefullLahve(Serial zdrojBagl, Serial cilBagl, params string[] options)
        {
            Game.PrintMessage("options.Length: " + options.Length);

            Dictionary <string, ReuqipItemInfo> requipInfo = new Dictionary <string, ReuqipItemInfo>();

            try
            {
                foreach (string opt in options)
                {
                    //if (opt.StartsWith("Potion:"))
                    //{
                    ReuqipItemInfo optInfo = new ReuqipItemInfo();

                    foreach (FieldInfo fInfo in optInfo.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
                    {
                        Match match = Regex.Match(opt, fInfo.Name + ":[ ]?(?<value>[^}{,]+),?");
                        if (match.Success)
                        {
                            string strValue    = (match.Groups["value"].Value + String.Empty).Trim();
                            object converValue = null;
                            if (fInfo.FieldType == typeof(PotionQuality))
                            {
                                converValue = Enum.Parse(typeof(PotionQuality), strValue);
                            }
                            else
                            {
                                converValue = Convert.ChangeType(strValue, fInfo.FieldType);
                            }
                            fInfo.SetValue(optInfo, converValue);
                        }
                    }

                    Potion potion = PotionCollection.Potions.GetItemByName(optInfo.Name);

                    if (potion != null && !requipInfo.ContainsKey(optInfo.Name))
                    {
                        optInfo.OriginalOpt = opt;
                        optInfo.Type        = new UOItemType()
                        {
                            Graphic = potion.Qualities[optInfo.Quality].Graphic, Color = potion.Qualities[optInfo.Quality].Color
                        };
                        requipInfo.Add(optInfo.Name, optInfo);
                    }
                    else
                    {
                        Game.PrintMessage("Potion Failed OPT NAME: " + optInfo.Name + " " + (potion == null));
                    }
                    //}
                    //else
                    //  Game.PrintMessage("Not implemented OPT");
                }
            }
            catch (Exception ex)
            {
                Game.PrintMessage(ex.Message);
                return;
            }

            UOItem zdrojKont = new UOItem(zdrojBagl);

            if (zdrojKont.Serial == Serial.Invalid && zdrojBagl > 0)
            {
                Game.PrintMessage("Vyber bednu s zdrojem (ESC = Ground):");
                zdrojKont = new UOItem(UIManager.TargetObject());
            }

            bool ground = !zdrojKont.ExistCust();

            UOItem cilKont = new UOItem(cilBagl);

            if (cilKont.Serial == Serial.Invalid)
            {
                Game.PrintMessage("Vyber pytel kam:");
                cilKont = new UOItem(UIManager.TargetObject());
            }

            Game.PrintMessage("Nacitam Itemy ...");

            List <UOItem> bagitems = new List <UOItem>();

            bagitems.AddRange(ItemHelper.OpenContainerRecursive(cilKont));

            Game.Wait();

            foreach (UOItem item in bagitems)
            {
                foreach (KeyValuePair <string, ReuqipItemInfo> kvp in requipInfo)
                {
                    ReuqipItemInfo info = kvp.Value;
                    if (info.Type.Graphic == item.Graphic && item.Color == info.Type.Color)
                    {
                        info.Items.Add(item);
                        info.Count++;
                    }
                }
            }

            Game.Wait();


            Game.PrintMessage("requipInfo.Count: " + requipInfo.Count);

            ushort startX = 15;
            ushort startY = 15;

            ushort currentX = startX;
            ushort currentY = startY;

            int counter = 0;

            foreach (KeyValuePair <String, ReuqipItemInfo> kvp in requipInfo)
            {
                ReuqipItemInfo info = kvp.Value;

                if (counter == 0)
                {
                    if (info.PositionX > 0)
                    {
                        currentX = startX = info.PositionX;
                    }
                    if (info.PositionY > 0)
                    {
                        currentY = startY = info.PositionY;
                    }
                }

                Potion potion = PotionCollection.Potions.GetItemByName(info.Name);
                UOItem kad    = new UOItem(Serial.Invalid);
                if (ground)
                {
                    kad = World.Ground.FindType(potion.Qualities[info.Quality].KadGraphic, potion.Qualities[info.Quality].KadColor);
                }
                else
                {
                    kad = zdrojKont.Items.FindType(potion.Qualities[info.Quality].KadGraphic, potion.Qualities[info.Quality].KadColor);
                    if (kad.ExistCust())
                    {
                        kad.Move(1, World.Player.Backpack);
                        Game.Wait();
                    }
                }

                Game.PrintMessage(info.Name + ": " + kad.Exist + " / " + kad.Distance + " / " + info.Count + " / " + info.MaxItem);

                if (kad.ExistCust() && (!ground || kad.Distance <= 6))
                {
                    while (info.Count < info.MaxItem)
                    {
                        UOItem empty = World.Ground.FindType(Potion.Empty);


                        if (!empty.Exist)
                        {
                            if (zdrojBagl.IsValid)
                            {
                                Game.PrintMessage("Nacitam Itemy ...");
                                ItemsCollection items = new ItemsCollection(zdrojKont, true);// ItemHelper.OpenContainerRecursive(zdrojKont);

                                empty = items.FindType(Potion.Empty);

                                if (empty.Exist)
                                {
                                    empty.Move(1, World.Player.Backpack);
                                    Game.Wait();
                                    empty = World.Player.Backpack.AllItems.FindType(Potion.Empty);
                                }
                            }

                            if (!empty.Exist)
                            {
                                empty = World.Player.Backpack.AllItems.FindType(Potion.Empty);
                            }
                        }

                        if (empty.Exist)
                        {
                            kad.Use();
                            UO.WaitTargetObject(empty);// nebo jednoduse targettype ..?
                            Game.Wait();
                        }

                        info.Count++;
                    }
                    Game.Wait();
                    if (!ground)
                    {
                        kad.Move(1, zdrojKont.Serial);
                        Game.Wait();
                    }

                    bagitems.Clear();
                    bagitems.AddRange(ItemHelper.OpenContainerRecursive(World.Player.Backpack));

                    foreach (UOItem item in bagitems)
                    {
                        info = kvp.Value;
                        if (info.Type.Graphic == item.Graphic && item.Color == info.Type.Color && !info.Items.Contains(item.Serial))
                        {
                            info.Items.Add(item);
                        }
                    }
                }

                counter++;
                Game.Wait();

                for (int i = 0; i < kvp.Value.Items.Count; i++)
                {
                    UOItem item = new UOItem(kvp.Value.Items[i]);

                    if (currentX > 95)
                    {
                        currentX  = startX;
                        currentY += 8;
                    }

                    if (item.X != currentX && item.Y != currentY || item.Container != cilKont.Serial)
                    {
                        item.Move(1, cilKont.Serial, currentX, currentY);
                        Game.Wait(Game.SmallWait);
                    }
                    currentX += 4;
                }
            }

            Game.PrintMessage("Konec.");
        }