| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 | 
							- using System.Collections.Generic;
 
- using Excel2Json;
 
- using Fort23.Mono;
 
- using Fort23.UTool;
 
- using GameLogic.Bag;
 
- using GameLogic.Player;
 
- using UnityEditor;
 
- using UnityEngine;
 
- namespace GameLogic.Equipment
 
- {
 
-     public class EqAddAttribute
 
-     {
 
-         public long atk;
 
-         public long def;
 
-         public long hp;
 
-         // public void AddAtk(long atk)
 
-         // {
 
-         //     this.atk += atk;
 
-         // }
 
-         //
 
-         // public void AddDef(long def)
 
-         // {
 
-         //     this.def += def;
 
-         // }
 
-         //
 
-         // public void AddHp(long hp)
 
-         // {
 
-         //     this.hp += hp;
 
-         // }
 
-     } 
 
-     
 
-     public class EquipmentController
 
-     {
 
-         /// <summary>
 
-         /// 所有的装备 按 这个逻辑存储 {职业, {部位, 装备列表}}
 
-         /// 存在意义:一键换装的时候,可以快速找到目标装备
 
-         /// 
 
-         /// </summary>
 
-         public Dictionary<int, Dictionary<int ,List<ItemInfo>>> allZyEqDic = new Dictionary<int, Dictionary<int ,List<ItemInfo>>>();
 
-         /// <summary>
 
-         /// 已穿戴的装备
 
-         /// </summary>
 
-         public Dictionary<int, List<ItemInfo>> equipZyEqDic = new Dictionary<int, List<ItemInfo>>();
 
-         
 
-         /// <summary>
 
-         /// 职业装备提供的属性
 
-         /// </summary>
 
-         public Dictionary<int, EqAddAttribute> zyEqAddAttributeDic = new Dictionary<int, EqAddAttribute>();
 
-         
 
-         // private long curGUID;
 
-         public EquipmentController()
 
-         {
 
-             zyEqAddAttributeDic.Add(1, new EqAddAttribute());
 
-             zyEqAddAttributeDic.Add(2, new EqAddAttribute());
 
-             zyEqAddAttributeDic.Add(3, new EqAddAttribute());
 
-             zyEqAddAttributeDic.Add(4, new EqAddAttribute());
 
-             
 
-             equipZyEqDic.Add(1, new List<ItemInfo>());
 
-             equipZyEqDic.Add(2, new List<ItemInfo>());
 
-             equipZyEqDic.Add(3, new List<ItemInfo>());
 
-             equipZyEqDic.Add(4, new List<ItemInfo>());
 
-         }
 
-         
 
-         public void Init(ItemInfo itemInfo)
 
-         {
 
-             AddEquipment(itemInfo);
 
-             if (itemInfo.eqInfo != null && itemInfo.eqInfo.isWear)
 
-             {
 
-                 AddToCurEquip(itemInfo, true);
 
-             }
 
-         }
 
-         private void CalZyEqAddAttribute()
 
-         {
 
-             foreach (KeyValuePair<int,List<ItemInfo>> keyValuePair in equipZyEqDic)
 
-             {
 
-                 int zy = keyValuePair.Key;
 
-                 ResetZyEqAddAttribute(zy);
 
-                 foreach (ItemInfo eqItem in keyValuePair.Value)
 
-                 {
 
-                     zyEqAddAttributeDic[zy].atk += eqItem.eqInfo.Attack;
 
-                     zyEqAddAttributeDic[zy].def += eqItem.eqInfo.Defense;
 
-                     zyEqAddAttributeDic[zy].hp += eqItem.eqInfo.Hp;
 
-                 }
 
-             }
 
-         }
 
-         private void ResetZyEqAddAttribute(int zy)
 
-         {
 
-             zyEqAddAttributeDic[zy].atk = 0;
 
-             zyEqAddAttributeDic[zy].def = 0;
 
-             zyEqAddAttributeDic[zy].hp = 0;
 
-         }
 
-         /// <summary>
 
-         /// 通过品质获取装备的额外参数,装备属性会叠加这个值
 
-         /// </summary>
 
-         /// <param name="quality"></param>
 
-         /// <returns></returns>
 
-         public float GetEquipmentRarityAttributeFactor(int quality)
 
-         {
 
-             int[] factors = PlayerManager.Instance.gameConstantConfig.equipmentRarityAttributeFactor;
 
-             // LogTool.Log(quality);
 
-             return factors[quality - 1] / (float)100;
 
-         }
 
-         
 
-         public ItemInfo BuildEquipment(int equipModelDropID, int qualityDropID, int lvDropID)
 
-         {
 
-             ItemInfo info = null;
 
-             List<ItemInfo> equipModelDropItems = DropManager.Instance.DropItem(equipModelDropID);
 
-             if (equipModelDropItems == null || equipModelDropItems.Count == 0)
 
-             {
 
-                 return info;
 
-             }
 
-             
 
-             ItemInfo equipModelInfo = equipModelDropItems[0];
 
-             
 
-             List<ItemInfo> qualityDropItems = DropManager.Instance.DropItem(qualityDropID);
 
-             List<ItemInfo> lvDropItems = DropManager.Instance.DropItem(lvDropID);
 
-             info = equipModelInfo;
 
-             info.eqInfo = new EquipmentInfo();
 
-             // info.eqInfo.InitEquipment(info.config,
 
-             //     lvDropItems[0].dropItemConfig.itemID[0], 
 
-             //     qualityDropItems[0].dropItemConfig.itemID[0]);
 
-             info.eqInfo.InitEquipment(equipModelInfo, lvDropItems[0], qualityDropItems[0]);
 
-             
 
-             return info;
 
-         }
 
-         public ItemInfo BuildEquipmentForItemId(int itemId, int qualityDropID, int lvDropID)
 
-         {
 
-             ItemInfo info = null;
 
-             ItemInfo equipModelInfo = new ItemInfo(itemId, 1);
 
-             
 
-             List<ItemInfo> qualityDropItems = DropManager.Instance.DropItem(qualityDropID);
 
-             List<ItemInfo> lvDropItems = DropManager.Instance.DropItem(lvDropID);
 
-             info = equipModelInfo;
 
-             info.eqInfo = new EquipmentInfo();
 
-             // info.eqInfo.InitEquipment(info.config,
 
-             //     lvDropItems[0].dropItemConfig.itemID[0], 
 
-             //     qualityDropItems[0].dropItemConfig.itemID[0]);
 
-             info.eqInfo.InitEquipment(equipModelInfo, lvDropItems[0], qualityDropItems[0]);
 
-             
 
-             return info;
 
-         }
 
-         public bool atLeastOneBetterEq = false;
 
-         /// <summary>
 
-         /// 是否有更好的装备
 
-         /// </summary>
 
-         /// <param name="isReCal">是否重新计算最好的装备</param>
 
-         /// <returns></returns>
 
-         public bool IsBetterEqs(bool isReCal = true)
 
-         {
 
-             if (isReCal)
 
-             {
 
-                 UpdateAllBestEqs();
 
-             }
 
-             atLeastOneBetterEq = false;
 
-             int count = 0;
 
-             
 
-             foreach (KeyValuePair<int,Dictionary<int,ItemInfo>> keyValuePair in allBestEqDic)
 
-             {
 
-                 int zy = keyValuePair.Key;
 
-                 Dictionary<int, ItemInfo> bwDic = keyValuePair.Value;
 
-                 count += bwDic.Count;
 
-                 // if (bwDic.Count > 0)
 
-                 // {
 
-                 //     // return true;
 
-                 //     count++;
 
-                 // }
 
-             }
 
-             if (count >= 1)
 
-             {
 
-                 atLeastOneBetterEq = true;
 
-             }
 
-             
 
-             //有2个以上的职业,有更好准备是再显示最外层的小红点.
 
-             if (count > 3)
 
-             {
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         /// <summary>
 
-         /// 具体职业是否有更好装备
 
-         /// </summary>
 
-         /// <param name="zy"></param>
 
-         /// <returns></returns>
 
-         public bool IsBetterEqs4OneZy(int zy, bool isReCal = false)
 
-         {
 
-             if (isReCal)
 
-             {
 
-                 UpdateAllBestEqs();
 
-             }
 
-             if (allBestEqDic != null)
 
-             {
 
-                 if (allBestEqDic.TryGetValue(zy, out var bwDic))
 
-                 {
 
-                     if (bwDic.Count > 0)
 
-                     {
 
-                         return true;
 
-                     }
 
-                 } 
 
-                 
 
-             }
 
-             return false;
 
-         }
 
-         public Dictionary<int, Dictionary<int, ItemInfo>> allBestEqDic;
 
-         /// <summary>
 
-         /// 计算所有职业最好的装备,用于小红点
 
-         /// allBestEqDic里面存的,就是所有职业,最好的装备
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public Dictionary<int, Dictionary<int, ItemInfo>> UpdateAllBestEqs()
 
-         {
 
-             allBestEqDic = new Dictionary<int, Dictionary<int, ItemInfo>>();
 
-             allBestEqDic.Add(1, GetZyBestEqs(1));
 
-             allBestEqDic.Add(2, GetZyBestEqs(2));
 
-             allBestEqDic.Add(3, GetZyBestEqs(3));
 
-             allBestEqDic.Add(4, GetZyBestEqs(4));
 
-             return allBestEqDic;
 
-         }
 
-         public Dictionary<int, ItemInfo> GetZyBestEqs(int zy)
 
-         {
 
-             Dictionary<int, ItemInfo> bestEqDic = new Dictionary<int, ItemInfo>();
 
-             bool changed = false;
 
-             //拿到这个职业的所有部位的装备,bwDic就是一个按部位划分的字典key=部位,value=这个部位下的所有装备
 
-             if (allZyEqDic.TryGetValue(zy, out var bwDic))
 
-             {
 
-                 foreach (KeyValuePair<int, List<ItemInfo>> keyValuePair in bwDic)
 
-                 {
 
-                     ItemInfo bestBwEq = null;
 
-                     foreach (ItemInfo bwItem in keyValuePair.Value)
 
-                     {
 
-                         // if (bwItem.eqInfo.isWear)
 
-                         // {
 
-                         //     continue;
 
-                         // }
 
-                         // bwItem.eqInfo.isEquip = false;
 
-                         if (bestBwEq == null)
 
-                         {
 
-                             bestBwEq = bwItem;
 
-                             continue;
 
-                         }
 
-                         if (bwItem.eqInfo.Attack > bestBwEq.eqInfo.Attack ||
 
-                             bwItem.eqInfo.Defense > bestBwEq.eqInfo.Defense ||
 
-                             bwItem.eqInfo.Hp > bestBwEq.eqInfo.Hp)
 
-                         {
 
-                             bestBwEq = bwItem;
 
-                         }
 
-                     }
 
-                     if (bestBwEq != null)
 
-                     {
 
-                         if(!bestBwEq.eqInfo.isWear)
 
-                             bestEqDic.Add(keyValuePair.Key, bestBwEq);
 
-                     }
 
-                 }
 
-             }
 
-             
 
-             return bestEqDic;
 
-         }
 
-         /// <summary>
 
-         /// 一键穿职业装备
 
-         /// 把对应职业,对应部位的,最好的装备找出来
 
-         /// </summary>
 
-         /// <param name="zy"></param>
 
-         /// <returns>true = 有装备变动 </returns>
 
-         public bool QuickEquip(int zy)
 
-         {
 
-             bool changed = false;
 
-             //拿到这个职业的所有部位的装备,bwDic就是一个按部位划分的字典key=部位,value=这个部位下的所有装备
 
-             if (allZyEqDic.TryGetValue(zy, out var bwDic))
 
-             {
 
-                 foreach (KeyValuePair<int, List<ItemInfo>> keyValuePair in bwDic)
 
-                 {
 
-                     ItemInfo bestBwEq = null;
 
-                     foreach (ItemInfo bwItem in keyValuePair.Value)
 
-                     {
 
-                         // if (bwItem.eqInfo.isWear)
 
-                         // {
 
-                         //     continue;
 
-                         // }
 
-                         // bwItem.eqInfo.isEquip = false;
 
-                         if (bestBwEq == null)
 
-                         {
 
-                             bestBwEq = bwItem;
 
-                             continue;
 
-                         }
 
-                         if (bwItem.eqInfo.Attack > bestBwEq.eqInfo.Attack ||
 
-                             bwItem.eqInfo.Defense > bestBwEq.eqInfo.Defense ||
 
-                             bwItem.eqInfo.Hp > bestBwEq.eqInfo.Hp)
 
-                         {
 
-                             bestBwEq = bwItem;
 
-                         }
 
-                     }
 
-                     if (bestBwEq != null)
 
-                     {
 
-                         bool b = AddToCurEquip(bestBwEq);
 
-                         if (!changed)
 
-                         {
 
-                             changed = b;     
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-             
 
-             return changed;
 
-         }
 
-         /// <summary>
 
-         /// 把装备加到:当前已经穿的装备列表中管理
 
-         /// </summary>
 
-         /// <param name="bestEqItem"></param>
 
-         /// <param name="isInit">true 表示是初始化,初始化时,不支持保存数据的逻辑</param>
 
-         /// <returns></returns>
 
-         public bool AddToCurEquip(ItemInfo bestEqItem, bool isInit = false)
 
-         {
 
-             int zy = bestEqItem.eqInfo.basicEquipConfig.profession;
 
-             
 
-             bool isAdd = true;
 
-             
 
-             if (equipZyEqDic.TryGetValue(zy, out var eqList))
 
-             {
 
-                 // 从后往前遍历,这样删除元素不会影响索引
 
-                 for (int i = eqList.Count - 1; i >= 0; i--)
 
-                 {
 
-                     ItemInfo itemInfo = eqList[i];
 
-                     if (itemInfo.eqInfo.basicEquipConfig.Type == bestEqItem.eqInfo.basicEquipConfig.Type)
 
-                     {
 
-                         //已经在已装备列表里面了,就不加了
 
-                         if (itemInfo.Equals(bestEqItem))
 
-                         {
 
-                             isAdd = false;
 
-                         }
 
-                         else
 
-                         {
 
-                             //老装备脱下来
 
-                             EquipLogic(false, itemInfo);
 
-                             //从已装备的列表处,移除
 
-                             eqList.RemoveAt(i);
 
-                             if (!isInit)
 
-                             {
 
-                                 AccountFileInfo.Instance.SaveItemData(itemInfo);
 
-                             }
 
-                         }
 
-                         break;
 
-                     }
 
-                 }
 
-                 if (isAdd)
 
-                 {
 
-                     EquipLogic(true, bestEqItem);
 
-                     eqList.Add(bestEqItem);
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 EquipLogic(true, bestEqItem);
 
-                 
 
-                 eqList = new List<ItemInfo>();
 
-                 eqList.Add(bestEqItem);
 
-                 equipZyEqDic.Add(zy, eqList);
 
-             }
 
-             //有装备变更时,计算一下装备提供的属性
 
-             if (isAdd)
 
-             {
 
-                 CalZyEqAddAttribute();
 
-                 if (!isInit)
 
-                 {
 
-                     AccountFileInfo.Instance.SaveItemData(bestEqItem);
 
-                 }
 
-             }
 
-             return isAdd;
 
-         }
 
-         /// <summary>
 
-         /// 穿/脱 装备的逻辑
 
-         /// </summary>
 
-         /// <param name="equip">穿or脱</param>
 
-         /// <param name="eqItemInfo">装备item</param>
 
-         public void EquipLogic(bool equip, ItemInfo eqItemInfo)
 
-         {
 
-             eqItemInfo.eqInfo.isWear = equip;
 
-             if (equip)
 
-             {
 
-                 eqItemInfo.count.Value--;
 
-             }
 
-             else
 
-             {
 
-                 eqItemInfo.count.Value++;
 
-             }
 
-         }
 
-         
 
-         /// <summary>
 
-         /// 这里2次管理装备item的目的是为了:后续穿脱装备时,遍历效率更高
 
-         /// </summary>
 
-         /// <param name="eqItemInfo"></param>
 
-         public void AddEquipment(ItemInfo eqItemInfo)
 
-         {
 
-             if (!eqItemInfo.IsEquipItem())
 
-             {
 
-                 return;
 
-             }
 
-             
 
-             // allEqDic.Add(eqItemInfo.guid, eqItemInfo);
 
-             
 
-             int zy = eqItemInfo.eqInfo.basicEquipConfig.profession;
 
-             int bw = eqItemInfo.eqInfo.basicEquipConfig.Type;
 
-             if (allZyEqDic.TryGetValue(zy, out var bwDic))
 
-             {
 
-                 if (bwDic.TryGetValue(bw, out var eqBwList))
 
-                 {
 
-                     bool isAdd = true;
 
-                     foreach (ItemInfo itemInfo in eqBwList)
 
-                     {
 
-                         if (itemInfo.guid == eqItemInfo.guid)
 
-                         {
 
-                             isAdd = false;
 
-                             // LogTool.Warning("已经有这个装备,不再重复添加:"+ eqItemInfo.guid);
 
-                             break;
 
-                         }
 
-                     }
 
-                     if (isAdd)
 
-                     {
 
-                         eqBwList.Add(eqItemInfo);
 
-                     }
 
-                     
 
-                 }
 
-                 else
 
-                 {
 
-                     eqBwList = new List<ItemInfo>();
 
-                     eqBwList.Add(eqItemInfo);
 
-                     bwDic.Add(bw, eqBwList);
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 bwDic = new Dictionary<int, List<ItemInfo>>();
 
-                 List<ItemInfo> eqBwList = new List<ItemInfo>();
 
-                 eqBwList.Add(eqItemInfo);
 
-                 bwDic.Add(bw, eqBwList);
 
-                 allZyEqDic.Add(zy, bwDic);
 
-             }
 
-         }
 
-         // public void RemoveEquipment(ItemInfo eqItemInfo)
 
-         // {
 
-         //     if (eqItemInfo.eqInfo == null)
 
-         //     {
 
-         //         return;
 
-         //     }
 
-         //
 
-         //     int zy = eqItemInfo.eqInfo.basicEquipConfig.profession;
 
-         //     int bw = eqItemInfo.eqInfo.basicEquipConfig.Type;
 
-         //
 
-         //     if (allZyEqDic.TryGetValue(zy, out var bwDic))
 
-         //     {
 
-         //         if (bwDic.TryGetValue(bw, out var eqList))
 
-         //         {
 
-         //             eqList.Remove(eqItemInfo);
 
-         //         }
 
-         //         else
 
-         //         {
 
-         //             LogTool.Error("移除一个在背包不存在的(bw),装备: guid=" + eqItemInfo.guid + "   职业=" + zy);
 
-         //         }
 
-         //     }
 
-         //     else
 
-         //     {
 
-         //         LogTool.Error("移除一个在背包不存在的(zy),装备: guid=" + eqItemInfo.guid + "   职业=" + zy);
 
-         //     }
 
-         //     
 
-         //     // if (zyEqDic.ContainsKey(pro) && zyEqDic[pro].Contains(eqItemInfo))
 
-         //     // {
 
-         //     //     zyEqDic[pro].Remove(eqItemInfo);
 
-         //     // }
 
-         //     // else
 
-         //     // {
 
-         //     //     LogTool.Error("移除一个在背包不存在的,装备: guid=" + eqItemInfo.guid + "   职业=" + pro);
 
-         //     // }
 
-         // }
 
-     }
 
- }
 
 
  |