//--------------------------------------------------------------------------------------------- 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)); } }
//--------------------------------------------------------------------------------------------- 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)); } }
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."); }