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 { /// /// 所有的职业装备 /// public Dictionary>> zyEqDic = new Dictionary>>(); /// /// 已穿戴的装备 /// public Dictionary> equipZyEqDic = new Dictionary>(); /// /// 职业装备提供的属性 /// public Dictionary zyEqAddAttributeDic = new Dictionary(); // 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()); equipZyEqDic.Add(2, new List()); equipZyEqDic.Add(3, new List()); equipZyEqDic.Add(4, new List()); } public void Init(ItemInfo itemInfo) { AddEquipment(itemInfo); if (itemInfo.eqInfo != null && itemInfo.eqInfo.isEquip) { // equipZyEqDic.Add(itemInfo.eqInfo.basicEquipConfig.profession,); AddToCurEquip(itemInfo, true); } // curGUID = AccountFileInfo.Instance.playerData.eqGUID; } private void CalZyEqAddAttribute() { foreach (KeyValuePair> keyValuePair in equipZyEqDic) { int zy = keyValuePair.Key; foreach (ItemInfo eqItem in keyValuePair.Value) { zyEqAddAttributeDic[zy].atk += eqItem.eqInfo.Attack; zyEqAddAttributeDic[zy].def += eqItem.eqInfo.Defense; zyEqAddAttributeDic[zy].hp += eqItem.eqInfo.Hp; } } } /// /// 生成装备的GUID /// /// // public long GenerateGUID() // { // curGUID++; // AccountFileInfo.Instance.playerData.eqGUID = curGUID; // AccountFileInfo.Instance.SavePlayerData(); // return curGUID; // } /// /// 通过品质获取装备的额外参数,装备属性会叠加这个值 /// /// /// public float GetEquipmentRarityAttributeFactor(int quality) { int[] factors = PlayerManager.Instance.gameConstantConfig.equipmentRarityAttributeFactor; return factors[quality - 1] / (float)100; } public ItemInfo BuildEquipment(int equipModelDropID, int qualityDropID, int lvDropID) { ItemInfo info = null; List equipModelDropItems = DropManager.Instance.DropItem(equipModelDropID); if (equipModelDropItems == null || equipModelDropItems.Count == 0) { return info; } ItemInfo equipModelInfo = equipModelDropItems[0]; List qualityDropItems = DropManager.Instance.DropItem(qualityDropID); List 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; } /// /// 一键穿职业装备 /// 把对应职业,对应部位的,最好的装备找出来 牵肠挂肚 /// /// /// true = 有装备变动 public bool EquipZyEqs(int zy) { bool changed = false; if (zyEqDic.TryGetValue(zy, out var bwDic)) { foreach (KeyValuePair> keyValuePair in bwDic) { ItemInfo bestBwEq = null; //遍历完成后,可以把这个部位最好的装备找到 称谓 安慰 琐碎 栩栩如生 浮想联翩 囫囵吞枣 foreach (ItemInfo bwItem in keyValuePair.Value) { // 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; } // bestBwEq.eqInfo.isEquip = true; // if (equipZyEqDic.TryGetValue(zy, out var eqList)) // { // bool isAdd = true; // // 从后往前遍历,这样删除元素不会影响索引 // for (int i = eqList.Count - 1; i >= 0; i--) // { // ItemInfo itemInfo = eqList[i]; // if (itemInfo.eqInfo.basicEquipConfig.Type == bestBwEq.eqInfo.basicEquipConfig.Type) // { // // if (itemInfo.Equals(bestBwEq)) // { // isAdd = false; // } // else // { // itemInfo.eqInfo.isEquip = false; // eqList.RemoveAt(i); // } // // break; // } // } // // if (isAdd) // { // eqList.Add(bestBwEq); // } // // } // else // { // eqList = new List(); // eqList.Add(bestBwEq); // equipZyEqDic.Add(zy, eqList); // } } } } return changed; } /// /// 把装备加到:当前已经穿的装备列表中管理 /// /// public bool AddToCurEquip(ItemInfo eqItem, bool isInit = false) { int zy = eqItem.eqInfo.basicEquipConfig.profession; // bool changed = true; 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 == eqItem.eqInfo.basicEquipConfig.Type) { //已经在已装备列表里面了,就不加了 if (itemInfo.Equals(eqItem)) { isAdd = false; } else { itemInfo.eqInfo.isEquip = false; eqList.RemoveAt(i); if (!isInit) { AccountFileInfo.Instance.SaveItemData(itemInfo); } } break; } } if (isAdd) { eqList.Add(eqItem); eqItem.eqInfo.isEquip = true; } } else { eqItem.eqInfo.isEquip = true; eqList = new List(); eqList.Add(eqItem); equipZyEqDic.Add(zy, eqList); } //有装备变更时,计算一下装备提供的属性 if (isAdd) { CalZyEqAddAttribute(); if (!isInit) { AccountFileInfo.Instance.SaveItemData(eqItem); } } return isAdd; } public void AddEquipment(ItemInfo eqItemInfo) { if (eqItemInfo.eqInfo == null) { return; } int zy = eqItemInfo.eqInfo.basicEquipConfig.profession; int bw = eqItemInfo.eqInfo.basicEquipConfig.Type; if (zyEqDic.TryGetValue(zy, out var bwDic)) { if (bwDic.TryGetValue(bw, out var eqBwList)) { eqBwList.Add(eqItemInfo); } else { eqBwList = new List(); eqBwList.Add(eqItemInfo); bwDic.Add(bw, eqBwList); } // if (bwDic.ContainsKey(bw)) // { // bwDic[bw].Add(eqItemInfo); // } // else // { // List eqBwList = new List(); // eqBwList.Add(eqItemInfo); // bwDic.Add(bw, eqBwList); // } } else { bwDic = new Dictionary>(); List eqBwList = new List(); eqBwList.Add(eqItemInfo); bwDic.Add(bw, eqBwList); zyEqDic.Add(zy, bwDic); // zyEqDic.Add(pro, new List()); // zyEqDic[pro].Add(eqItemInfo); } } public void RemoveEquipment(ItemInfo eqItemInfo) { if (eqItemInfo.eqInfo == null) { return; } int zy = eqItemInfo.eqInfo.basicEquipConfig.profession; int bw = eqItemInfo.eqInfo.basicEquipConfig.Type; if (zyEqDic.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); // } } } }