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);
// }
}
}
}