public void TryAddDetails(object o, int name, int value, Category cat) { SearchDetail d = Details.FirstOrDefault(det => det.Attribute == o); if (o is Layer) { SearchDetail layer = Details.FirstOrDefault(det => det.Attribute is Layer && (Layer)det.Attribute != (Layer)o); if (layer != null) { Details.Remove(layer); } Details.Add(new SearchDetail(o, name, value, cat)); SearchType = (Layer)o; } else if (d == null) { Details.Add(new SearchDetail(o, name, value, cat)); } else if (d.Value != value) { d.Value = value; } }
public override void OnResponse(NetState state, RelayInfo info) { if (info.ButtonID != 0) { TextRelay searchname = info.GetTextEntry(0); if (searchname != null && !String.IsNullOrEmpty(searchname.Text)) { string text = searchname.Text.Trim(); if (Criteria.SearchName == null || text.ToLower() != Criteria.SearchName.ToLower()) { Criteria.SearchName = searchname.Text; } } } switch (info.ButtonID) { case 0: break; case 1: // Set Min/Max price TextRelay tr1 = info.GetTextEntry(1); TextRelay tr2 = info.GetTextEntry(2); if (tr1 != null && tr1.Text != null) { string text = tr1.Text.Trim(); int min = 0; if (int.TryParse(text, out min)) { Criteria.MinPrice = min; } } if (tr2 != null && tr2.Text != null) { string text = tr2.Text.Trim(); int max = 0; if (int.TryParse(text, out max)) { Criteria.MaxPrice = max; } } Refresh(); break; case 2: // Low to High Criteria.SortBy = SortBy.LowToHigh; Refresh(); break; case 3: // High to Low Criteria.SortBy = SortBy.HighToLow; Refresh(); break; case 4: // Nothing, resend gump Criteria.SortBy = SortBy.None; Refresh(); break; case 5: // Clear Criteria Criteria.Reset(); Refresh(); break; case 6: // Search User.CloseGump(typeof(SearchResultsGump)); if (Criteria.IsEmpty) { Refresh(false, true); } else { List <VendorItem> list = VendorSearch.DoSearch(User, Criteria); if (list == null || list.Count == 0) { Refresh(true); } else { Refresh(); User.SendGump(new SearchResultsGump(User, list)); } } break; case 7: // remove item name Criteria.SearchName = null; Refresh(); break; default: if (info.ButtonID >= 100 && info.ButtonID < 200) { ChosenCategory = info.ButtonID - 100; Refresh(); } else if (info.ButtonID >= 200 && info.ButtonID < 300 && ChosenCategory >= 0 && ChosenCategory < VendorSearch.Categories.Count) { int index = info.ButtonID - 200; SearchCategory category = VendorSearch.Categories[ChosenCategory]; Tuple <object, int> data = category.Objects[index]; object o = data.Item1; int value = 0; TextRelay valuetext = info.GetTextEntry(index + 400); if (valuetext != null) { value = Math.Max(o is AosAttribute && (AosAttribute)o == AosAttribute.CastSpeed ? -1 : 0, Utility.ToInt32(valuetext.Text)); } Criteria.TryAddDetails(o, data.Item2, value, category.Category); Refresh(); } else if (info.ButtonID >= 300 && info.ButtonID - 300 >= 0 && info.ButtonID - 300 < Criteria.Details.Count) { SearchDetail toRemove = Criteria.Details[info.ButtonID - 300]; if (toRemove.Category == Category.Equipment) { Criteria.SearchType = Layer.Invalid; } Criteria.Details.Remove(toRemove); Refresh(); } break; } }
public int GetValueForDetails(object o) { SearchDetail detail = Details.FirstOrDefault(d => d.Attribute == o); return(detail != null ? detail.Value : 0); }