//可以增加或者删除物品(count是负数的时候),添加物品的时候可以在数量后面加"xxAttr1:4,xxAttr2:5"添加该物品的附加属性 public bool DealItems(Dictionary <string, string> itemDict, DoerAttrParser doerAttrParser = null) { doerAttrParser = doerAttrParser ?? new DoerAttrParser(this); foreach (var itemId in itemDict.Keys) { string value = itemDict[itemId]; Hashtable addAttrDict = new Hashtable(); //带属性 int pos = value.IndexOf("("); if (pos != -1) { string attrString = value.Substring(pos + 1, value.Length - pos - 2); //最后一个)也要删除 value = value.Substring(0, pos); addAttrDict = attrString.ToDictionary <string, string>().ToHashtable(); } int count = doerAttrParser.ParseInt(value); if (count < 0) //remove Items { count = Math.Abs(count); Item[] items = this.RemoveItems(itemId, count); for (var i = 0; i < items.Length; i++) { var item = items[i]; item.Destruct(); } } else //add Items { Item item = Client.instance.itemFactory.NewDoer(itemId) as Item; for (int i = 0; i < count; i++) { if (!addAttrDict.IsNullOrEmpty()) { var list = new ArrayList(addAttrDict.Keys); for (var j = 0; j < list.Count; j++) { var attrName = (string)list[j]; addAttrDict[attrName] = doerAttrParser.Parse(addAttrDict[attrName] as string); } item.AddAll(addAttrDict); } bool isCanFold = item.CanFold(); if (isCanFold) { item.SetCount(count); this.AddItem(item); break; } this.AddItem(item); } } } return(true); }
public Dictionary <string, int> GetRewards(DoerAttrParser doerAttrParser) { Dictionary <string, int> result = new Dictionary <string, int>(); Dictionary <string, string> rewardDict = GetCfgMissionData()._reward_dict; if (!rewardDict.IsNullOrEmpty()) { foreach (string itemId in rewardDict.Keys) { string curItemId = doerAttrParser.ParseString(itemId); string countString = rewardDict[itemId]; int count = doerAttrParser.ParseInt(countString); result[curItemId] = count; } } return(result); }
public override bool OnAccept(User user) { if (!base.OnAccept(user)) { return(false); } DoerAttrParser doerAttrParser = new DoerAttrParser(Client.instance.user, this, this.GetOwner(), null); Dictionary <string, string> findItemDict = GetCfgMissionData()._find_item_dict; Dictionary <string, int> curFindItemDict = new Dictionary <string, int>(); foreach (var itemId in findItemDict.Keys) { string itemCountString = findItemDict[itemId]; int itemCount = doerAttrParser.ParseInt(itemCountString, 0); curFindItemDict[itemId] = itemCount; } this.Set("find_item_dict", curFindItemDict); return(true); }