| | |
| | | { |
| | | public const int TotleEquip = 12; //装备栏大小 |
| | | public bool waitEquipOPPack = false; // 穿戴装备的操作 不含分解 |
| | | public float waitEquipOPTime = 0; |
| | | public float waitEquipOPTime = 0; |
| | | public event Action<bool, int> OnEquipOPResultAction; //是否换上了新装备且分解了 装备索引 |
| | | public event Action<BattleDrops> OnItemDropEvent; |
| | | |
| | |
| | | public int[] equipUIGirdEffects; //装备格子特效 |
| | | public ItemModel selectFloorEquip; //选中的地板装备 |
| | | public int lastShowEquipIndex = -1; //上一次界面显示装备的索引,拾取后物品消失需记录下做表现 |
| | | public Queue<int> waitEquipOP = new Queue<int>(); //等待操作的装备,需要和UI交互确认 不含分解 |
| | | public Queue<string> waitEquipOP = new Queue<string>(); //等待操作的装备,需要和UI交互确认 不含分解 |
| | | |
| | | public List<int> lastDropIndexs = new List<int>(); //上一次掉落物品索引 |
| | | |
| | |
| | | |
| | | if (checkDrop) |
| | | { |
| | | CalcAllFloorItems(); |
| | | // CalcAllFloorItems(); |
| | | } |
| | | } |
| | | |
| | |
| | | public void CalcFloorEquip(int itemIndex) |
| | | { |
| | | if (itemIndex == -1) |
| | | { |
| | | Debug.Log("CalcFloorEquip 无效的物品索引"); |
| | | return; |
| | | } |
| | | |
| | | var item = PackManager.Instance.GetItemByIndex(PackType.DropItem, itemIndex); |
| | | if (item == null) |
| | | { |
| | | Debug.Log("CalcFloorEquip 无效的物品索引"); |
| | | return; |
| | | } |
| | | |
| | | //非自动模式下,筛选装备打开装备操作界面 |
| | | if (IsEquip(item)) |
| | |
| | | } |
| | | } |
| | | |
| | | bool needMoreDrop = false; //由于掉落挤压导致,满掉落掉落背包的时候处理后再主动请求掉落 |
| | | //处理所有掉落的物品 |
| | | public void CalcAllFloorItems() |
| | | { |
| | | if (PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems().Count == 0) |
| | | { |
| | | |
| | | var items = PackManager.Instance.GetItems(PackType.DropItem); |
| | | if (items.IsNullOrEmpty()) |
| | | return; |
| | | } |
| | | |
| | | int cnt = items.Count; |
| | | needMoreDrop = cnt == 20; |
| | | |
| | | //构建所有物品 |
| | | foreach (var item in PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems()) |
| | | foreach (var item in items) |
| | | { |
| | | CalcFloorEquip(item.gridIndex); |
| | | } |
| | | if (needMoreDrop) |
| | | { |
| | | SendEquipOP(null, 3); |
| | | needMoreDrop = false; |
| | | } |
| | | } |
| | | |
| | |
| | | UIManager.Instance.CloseWindow<EquipExchangeWin>(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (!UIManager.Instance.IsOpened<EquipExchangeWin>()) |
| | | { |
| | | UIManager.Instance.OpenWindow<EquipExchangeWin>(); |
| | | } |
| | | } |
| | | // else |
| | | // { |
| | | // // if (!UIManager.Instance.IsOpened<EquipExchangeWin>()) |
| | | // // { |
| | | // // UIManager.Instance.OpenWindow<EquipExchangeWin>(); |
| | | // // } |
| | | |
| | | // //继续处理下一件装备 重新判断 |
| | | // CalcFloorEquip(selectFloorEquip.gridIndex); |
| | | // } |
| | | |
| | | OnEquipOPResultAction?.Invoke(isDone, lastShowEquipIndex); |
| | | } |
| | |
| | | |
| | | // NoteFloorEquip(itemIndexList, opType); |
| | | var pack = new CB415_tagCSMainDropItemOP(); |
| | | pack.Count = (byte)itemIndexList.Length; |
| | | pack.IndexList = itemIndexList; |
| | | if (itemIndexList != null) |
| | | { |
| | | pack.Count = (byte)itemIndexList.Length; |
| | | pack.IndexList = itemIndexList; |
| | | } |
| | | pack.OPType = opType; |
| | | pack.OPValue = (byte)(autoDecompose ? 1 : 0); // 替换后是否自动分解原装备:0否1是 |
| | | |
| | |
| | | waitEquipOPPack = true; |
| | | waitEquipOPTime = Time.time; |
| | | Debug.LogWarning("穿戴装备,向服务器请求"); |
| | | } |
| | | |
| | | //记录销毁或替换前的装备 |
| | | if ((opType == 1 || opType == 2) && !itemIndexList.IsNullOrEmpty()) |
| | | { |
| | | foreach (var index in itemIndexList) |
| | | { |
| | | ItemModel newEquip = PackManager.Instance.GetItemByIndex(PackType.DropItem, index); |
| | | if (newEquip == null) |
| | | continue; |
| | | int equipPlace = newEquip.config.EquipPlace - 1; |
| | | ItemModel oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, equipPlace); |
| | | EquipRecordManager.Instance.AddRecord(opType, newEquip, oldEquip); |
| | | } |
| | | } |
| | | GameNetSystem.Instance.SendInfo(pack); |
| | | } |
| | |
| | | public bool OpenEquipExchangeWin(ItemModel equip) |
| | | { |
| | | if (equip == null) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin) |
| | | { |
| | | Debug.LogWarning("OpenEquipExchangeWin: 未登录"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // 好几件装备需要处理的情况存起来 |
| | | waitEquipOP.Enqueue(equip.gridIndex); |
| | | if (!waitEquipOP.Contains(equip.guid)) |
| | | { |
| | | //检测时机频繁,导致重复推送,需要检测过滤,对应Dequeue 也做一次检测 |
| | | waitEquipOP.Enqueue(equip.guid); |
| | | } |
| | | //未回复装备操作结果,否则会显示旧装备 |
| | | if (waitEquipOPPack) |
| | | { |
| | | Debug.LogError("OpenEquipExchangeWin: 等待服务器响应"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | selectFloorEquip = GetSelectFloorEquip(); |
| | | if (selectFloorEquip == null) |
| | | { |
| | | return false; |
| | | |
| | | } |
| | | UIManager.Instance.OpenWindow<EquipExchangeWin>(); |
| | | return true; |
| | | |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | return PackManager.Instance.GetItemByIndex(PackType.DropItem, waitEquipOP.Dequeue()); |
| | | var item = PackManager.Instance.GetItemByGuid(waitEquipOP.Dequeue()); |
| | | if (item != null && item.packType == PackType.DropItem) |
| | | { |
| | | return item; |
| | | } |
| | | // Debug.LogError("GetSelectFloorEquip: 没有找到可选装备, 该装备已经转移"); |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | return equip.GetUseData(23); |
| | | } |
| | | |
| | | //战斗属性ID列表 |
| | | //装备战斗属性ID列表, 如果是卦玉的话基础和战斗都放一起 |
| | | public List<int> GetEquipFightAttrs(ItemModel equip) |
| | | { |
| | | if (equip == null) |
| | |
| | | return equip.GetUseData(19); |
| | | } |
| | | |
| | | //技能ID列表 |
| | | public List<int> GetEquipSkillIDs(ItemModel equip) |
| | | { |
| | | if (equip == null) |
| | | { |
| | | return new List<int>(); |
| | | } |
| | | return equip.GetUseData(37); |
| | | } |
| | | |
| | | public int GetEquipSkillID(ItemModel equip) |
| | | { |
| | | if (equip == null) |
| | | { |
| | | return 0; |
| | | } |
| | | var _list = equip.GetUseData(37); |
| | | return _list.IsNullOrEmpty() ? 0 : _list[0]; |
| | | } |
| | | |
| | | |
| | | //得到装备位对应的部位名称 |
| | | public string GetEquipPlaceName(int place) |
| | | { |
| | | |
| | | return Language.Get("equipPlace" + place); |
| | | return Language.Get(string.Concat("equipPlace", place)); |
| | | } |
| | | |
| | | //是否装备 |
| | |
| | | } |
| | | |
| | | public ItemModel GetEquip(int index) |
| | | { |
| | | { |
| | | return PackManager.Instance.GetItemByIndex(PackType.Equip, index); |
| | | } |
| | | } |