/// <summary> /// 返回受影响的卡槽 /// </summary> /// <param name="info">受影响的队列信息</param> /// <returns>卡槽对应的属性</returns> public Dictionary <Guid, PartAttr> CalcAttr(SlotCalcObj info) { var result = new Dictionary <Guid, PartAttr>(); foreach (var hero in info.ChangeSlotList) { var pa = new PartAttr(AttrType); result[hero.ID] = pa; // 增加属性调用pa.AddValue()就ok; // todo 临时加一个测试 pa.AddValue(new Dictionary <Int32, Int32>() { { 201, 100 } }); } return(result); }
/// <summary> /// 计算卡槽属性 /// </summary> /// <param name="heroList">武将集合</param> public static void CalcAllPartAttr(List <Hero> heroList) { SlotCalcObj info = new SlotCalcObj() { ChangeSlotList = heroList, }; // 计算各个模块属性,以及额外的属性 foreach (SlotAttrTypeEnum attrType in Enum.GetValues(typeof(SlotAttrTypeEnum))) { var resultChangeSlotDict = partAttrMethodDict[attrType].CalcAttr(info); foreach (var resultItem in resultChangeSlotDict) { var tempHero = info.ChangeSlotList.FirstOrDefault(item => item.ID == resultItem.Key); if (tempHero == null) { continue; } tempHero.PartAttrs[attrType] = resultItem.Value; } } // 汇总属性 foreach (var hero in info.ChangeSlotList) { // 合并基本属性 MergeBaseAttr(hero); // 这里写了三个方法,自己可以酌情合并方法,一定要按照这个步奏来处理,有些百分比加成要在所有属性之后处理的 /** * 这里可以进行其他处理 * * **/ SaveAttr(hero); } }