From aa84cb62bebb9c8a4e586bcc1ec28eb7a16a8860 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 26 一月 2026 18:10:34 +0800
Subject: [PATCH] 422 子 【内政】命格系统 / 【内政】命格系统-客户端
---
Main/System/Equip/EquipModel.cs | 527 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 496 insertions(+), 31 deletions(-)
diff --git a/Main/System/Equip/EquipModel.cs b/Main/System/Equip/EquipModel.cs
index bf04d84..f3c8966 100644
--- a/Main/System/Equip/EquipModel.cs
+++ b/Main/System/Equip/EquipModel.cs
@@ -3,35 +3,79 @@
using UnityEngine;
using System;
using LitJson;
+using UnityEngine.UI;
public class EquipModel : GameSystemManager<EquipModel>
{
-
+ public const int TotleEquip = 12; //瑁呭鏍忓ぇ灏�
+ public bool waitEquipOPPack = false; // 绌挎埓瑁呭鐨勬搷浣� 涓嶅惈鍒嗚В
+ public float waitEquipOPTime = 0;
+ public event Action<bool, int> OnEquipOPResultAction; //鏄惁鎹笂浜嗘柊瑁呭涓斿垎瑙d簡 瑁呭绱㈠紩
+ public event Action<BattleDrops> OnItemDropEvent;
+ //鐢ㄤ簬椋樺姩閫昏緫
+ // public Dictionary<int, EquipOnFloorInfo> equipFloorInfo = new Dictionary<int, EquipOnFloorInfo>(); //鐪熷疄鑳屽寘鐨勭储寮曪紝瀵瑰簲鍦版澘瑁呭鐨勪俊鎭�
- public void OnPlayerLoginOk()
- {
+ public int[] equipUIEffectLights; //瑁呭鎺夎惤鐗规晥
+ public float[] dropEffectScales; //鎺夎澶囩殑鍔ㄧ敾缂╂斁
+ public Dictionary<int, int> newEquipIDToGuideID = new Dictionary<int, int>(); //瑁呭鎺夎惤id锛屽紩瀵肩殑id
+ public int[] equipUIEffects; //瑁呭TIP闈㈡澘鐗规晥
+ public int[] equipUIGirdEffects; //瑁呭鏍煎瓙鐗规晥
+ public ItemModel selectFloorEquip; //閫変腑鐨勫湴鏉胯澶�
+ public int lastShowEquipIndex = -1; //涓婁竴娆$晫闈㈡樉绀鸿澶囩殑绱㈠紩锛屾嬀鍙栧悗鐗╁搧娑堝け闇�璁板綍涓嬪仛琛ㄧ幇
+ public Queue<string> waitEquipOP = new Queue<string>(); //绛夊緟鎿嶄綔鐨勮澶囷紝闇�瑕佸拰UI浜や簰纭 涓嶅惈鍒嗚В
- }
+ public List<int> lastDropIndexs = new List<int>(); //涓婁竴娆℃帀钀界墿鍝佺储寮�
+
+ int lastAttackHeroID = 0;
public override void Init()
{
-
+ DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent += OnEquipResult;
+ DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitialize;
+ EventBroadcast.Instance.AddListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
+ EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
+ EventBroadcast.Instance.AddListener<string>(EventName.RECORDPLAYER_END, RecordPlayerEnd);
+ GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
+ ParseConfig();
}
public override void Release()
{
+ DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent -= OnEquipResult;
+ DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitialize;
+ EventBroadcast.Instance.RemoveListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
+ EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
+ EventBroadcast.Instance.RemoveListener<string>(EventName.RECORDPLAYER_END, RecordPlayerEnd);
+ GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
}
- public Dictionary<int, int> EquipLevelFuncID = new Dictionary<int, int>();
-
- public void OnAfterPlayerDataInitialize()
+ void ParseConfig()
{
+ var config = FuncConfigConfig.Get("DropItem");
+ equipUIEffectLights = JsonMapper.ToObject<int[]>(config.Numerical1);
+ dropEffectScales = JsonMapper.ToObject<float[]>(config.Numerical2);
+ newEquipIDToGuideID = ConfigParse.ParseIntDict(config.Numerical3);
+ config = FuncConfigConfig.Get("EquipTip");
+ equipUIEffects = JsonMapper.ToObject<int[]>(config.Numerical1);
}
+ void BeforePlayerDataInitialize()
+ {
+ if (UIManager.Instance.IsOpened<EquipExchangeWin>())
+ {
+ //鍏堝叧闂紝鍚庣画鍐嶅鐞嗘帀钀�
+ UIManager.Instance.CloseWindow<EquipExchangeWin>();
+ }
+ selectFloorEquip = null;
+ waitEquipOP.Clear();
+ lastShowEquipIndex = -1;
+ lastDropIndexs.Clear();
+ waitEquipOPPack = false;
+ }
public static int GetItemServerEquipPlace(int itemId)
@@ -42,34 +86,455 @@
return -1;
}
- var serverEquipPlace = -1;
- switch ((RoleEquipType)config.EquipPlace)
+ if (config.EquipPlace > 0 && config.EquipPlace < 13)
{
- case RoleEquipType.Weapon:
- case RoleEquipType.Weapon2:
- case RoleEquipType.Hat:
- case RoleEquipType.Clothes:
- case RoleEquipType.Belt:
- case RoleEquipType.Trousers:
- case RoleEquipType.Shoes:
- case RoleEquipType.Neck:
- case RoleEquipType.FairyCan1:
- case RoleEquipType.FairyCan2:
- case RoleEquipType.Glove:
- case RoleEquipType.Jade:
- serverEquipPlace = EquipSet.ClientPlaceToServerPlace(new Int2(config.LV, config.EquipPlace));
- break;
- case RoleEquipType.Wing:
- case RoleEquipType.Guard:
- case RoleEquipType.PeerlessWeapon1:
- case RoleEquipType.PeerlessWeapon2:
- serverEquipPlace = EquipSet.ClientPlaceToServerPlace(new Int2(0, config.EquipPlace));
- break;
+ return config.EquipPlace - 1;
}
- return serverEquipPlace;
+
+ return -1;
}
+ //琛ㄧ幇鎺夎惤鍜屾嬀鍙栧垎绂诲紑锛屽厛鎺夎惤绛夋湰姝﹀皢鍥炲悎瀹屽叏缁撴潫鍐嶆嬀鍙�
+ void OnDropEvent(string guid, BattleDrops drops, Action action)
+ {
+ if (!string.IsNullOrEmpty(guid))
+ return;
+
+ // lastDropIndexs = drops.dropItemPackIndex;
+ // Debug.Log("-鎺夎惤瑁呭 " + lastDropIndexs.Count + " 涓�" + JsonMapper.ToJson(lastDropIndexs));
+ NotifyItemDrop(drops);
+ action?.Invoke();
+ }
+
+ //鎷惧彇鏃舵満涓轰笅涓�姝﹀皢锛堝惈鏁屾垜锛夋敾鍑� 鎴栬�� 鏈疆缁撶畻锛圡ainFightRequest 鍓嶏級
+ void OnSkillCast(string guid, SkillConfig skillConfig, TeamHero teamHero)
+ {
+ bool checkDrop = false;
+ if (!string.IsNullOrEmpty(guid))
+ return;
+
+ //闃茶寖鍥炴敹鎶ラ敊
+ if (teamHero == null)
+ checkDrop = true;
+ //鍙�氱煡鐜╁姝﹀皢鐨勬垬鏂�
+ else if (teamHero.NPCID != 0)
+ checkDrop = true;
+ else if (teamHero.heroId != lastAttackHeroID)
+ {
+ lastAttackHeroID = teamHero.heroId;
+ checkDrop = true;
+ }
+
+ if (checkDrop)
+ {
+ // CalcAllFloorItems();
+ }
+ }
+
+
+ void RecordPlayerEnd(string guid)
+ {
+ if (!string.IsNullOrEmpty(guid))
+ return;
+
+ CalcAllFloorItems();
+ }
+
+
+ //鎺夎惤閫氱煡
+ public void NotifyItemDrop(BattleDrops drops)//(List<int> indexs, RectTransform rect)
+ {
+ // 鐣岄潰涓嶆樉绀哄垯绔嬪嵆澶勭悊
+ // if (!UIManager.Instance.IsOpened<HomeWin>())
+ // {
+ // for (int i = 0; i < indexs.Count; i++)
+ // {
+ // CalcFloorEquip(indexs[i]);
+ // }
+ // }
+ // else
+ // {
+ // OnItemDropEvent?.Invoke(indexs, rect);
+ // }
+ OnItemDropEvent?.Invoke(drops);
+ }
+
+ 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))
+ {
+ OpenEquipExchangeWin(item);
+ }
+ else
+ {
+ SendEquipOP(new ushort[] { (ushort)itemIndex }, 0);
+ }
+ }
+
+ bool needMoreDrop = false; //鐢变簬鎺夎惤鎸ゅ帇瀵艰嚧锛屾弧鎺夎惤鎺夎惤鑳屽寘鐨勬椂鍊欏鐞嗗悗鍐嶄富鍔ㄨ姹傛帀钀�
+ //澶勭悊鎵�鏈夋帀钀界殑鐗╁搧
+ public void CalcAllFloorItems()
+ {
+
+ var items = PackManager.Instance.GetItems(PackType.DropItem);
+ if (items.IsNullOrEmpty())
+ return;
+
+ int cnt = items.Count;
+ needMoreDrop = cnt == 20;
+
+ //鏋勫缓鎵�鏈夌墿鍝�
+ foreach (var item in items)
+ {
+ CalcFloorEquip(item.gridIndex);
+ }
+ if (needMoreDrop)
+ {
+ SendEquipOP(null, 3);
+ needMoreDrop = false;
+ }
+ }
+
+
+ void OnSecondEvent()
+ {
+ if (waitEquipOPPack && Time.time - waitEquipOPTime > 2)
+ {
+ //閬垮厤瑁呭鍗℃鏃犳硶缁х画涓荤嚎
+ waitEquipOPPack = false;
+ }
+ }
+
+ private void OnEquipResult(HA814_tagMCMakeItemAnswer info)
+ {
+ if (info.MakeType != (int)MakeType.EquipOP)
+ return;
+ if (info.MakeValue == 0)
+ return;
+
+ if (info.MakeValue == 2)
+ {
+ waitEquipOPPack = false;
+ Debug.LogWarning("绌挎埓瑁呭锛屾湇鍔″櫒鍝嶅簲瑙i櫎绛夊緟鐘舵��");
+ }
+ bool isDone = false; // 鎹笂鏂拌澶囦笖鍒嗚В浜嗘棫瑁呭
+ //閫変腑鐨勫湴鏉胯澶囪繘琛屽鐞嗭紝鏇挎崲杩樻槸鎵句笅涓�浠讹紝妫�鏌nEquipOPResultAction
+ if (selectFloorEquip != null)
+ {
+ Debug.Log("OnEquipResult selectFloorEquip ID:" + selectFloorEquip.itemId);
+ if (PackManager.Instance.GetItemByIndex(PackType.DropItem, selectFloorEquip.gridIndex) == null)
+ {
+ selectFloorEquip = GetSelectFloorEquip(); //鍒犻櫎宸查�夋嫨鐨勮澶�
+ if (info.MakeValue == 2)
+ isDone = true;
+ }
+ }
+ else
+ {
+ selectFloorEquip = GetSelectFloorEquip();
+ if (info.MakeValue == 2)
+ isDone = true;
+ }
+
+ if (selectFloorEquip == null)
+ {
+ if (UIManager.Instance.IsOpened<EquipExchangeWin>())
+ {
+ UIManager.Instance.CloseWindow<EquipExchangeWin>();
+ }
+ }
+ // else
+ // {
+ // // if (!UIManager.Instance.IsOpened<EquipExchangeWin>())
+ // // {
+ // // UIManager.Instance.OpenWindow<EquipExchangeWin>();
+ // // }
+
+ // //缁х画澶勭悊涓嬩竴浠惰澶� 閲嶆柊鍒ゆ柇
+ // CalcFloorEquip(selectFloorEquip.gridIndex);
+ // }
+
+ OnEquipOPResultAction?.Invoke(isDone, lastShowEquipIndex);
+ }
+
+ /// <summary>
+ /// 瑁呭鎿嶄綔, // 0 - 鎷惧彇闈炶澶囩墿鍝侊紱1 - 鍒嗚В锛�2 - 绌挎埓/鏇挎崲
+ /// </summary>
+ /// <param name="itemIndexList"></param>
+ /// <param name="opType"></param>
+ /// <param name="autoDecompose"></param>
+ public void SendEquipOP(ushort[] itemIndexList, byte opType, bool autoDecompose = false)
+ {
+ if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin)
+ {
+ return;
+ }
+ if (opType == 2 && waitEquipOPPack) return;
+
+ // NoteFloorEquip(itemIndexList, opType);
+ var pack = new CB415_tagCSMainDropItemOP();
+ if (itemIndexList != null)
+ {
+ pack.Count = (byte)itemIndexList.Length;
+ pack.IndexList = itemIndexList;
+ }
+ pack.OPType = opType;
+ pack.OPValue = (byte)(autoDecompose ? 1 : 0); // 鏇挎崲鍚庢槸鍚﹁嚜鍔ㄥ垎瑙e師瑁呭锛�0鍚�1鏄�
+
+ if (opType == 2)
+ {
+ 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);
+ }
+
+ /// <summary>
+ /// equipFloorInfo璁板綍鍦版澘閬撳叿鐨勬渶鏂颁竴娆′俊鎭�,鐢ㄤ簬鏇挎崲鍜屽垎瑙h澶囩殑琛ㄧ幇
+ /// </summary>
+ /// <param name="itemIndexList">鍦版澘閬撳叿绱㈠紩</param>
+ /// <param name="opType"></param>
+ // public void NoteFloorEquip(ushort[] itemIndexList, int opType)
+ // {
+ // equipFloorInfo.Clear();
+ // foreach (var girdIndex in itemIndexList)
+ // {
+ // var equip = PackManager.Instance.GetItemByIndex(PackType.DropItem, girdIndex);
+ // if (equip == null) continue;
+ // equipFloorInfo[girdIndex] = new EquipOnFloorInfo()
+ // {
+ // equipID = equip.itemId,
+ // posX = floorItemCellArr[girdIndex].transform.position.x,
+ // posY = floorItemCellArr[girdIndex].transform.position.y,
+ // opType = opType
+ // };
+ // }
+
+ // }
+
+ public class EquipOnFloorInfo
+ {
+ public int equipID; //閬撳叿鎴栬�呰澶囷紝閬撳叿鍒嗚В瀵瑰簲涓嶅悓璐у竵锛岃澶囧浐瀹氳揣甯�
+ public float posX; //鍏ㄥ眬鍧愭爣 琛ㄧ幇鍐嶈浆鎴恖ocal
+ public float posY;
+ public int opType; // 0 - 鎷惧彇闈炶澶囩墿鍝侊紱1 - 鍒嗚В锛�2 - 绌挎埓/鏇挎崲锛�
+ }
+
+ // public EquipOnFloorInfo FindExchangeEquipInfo()
+ // {
+ // foreach (var info in equipFloorInfo)
+ // {
+ // if (info.Value.opType == 2)
+ // return info.Value;
+ // }
+ // return new EquipOnFloorInfo();
+ // }
+
+ public bool OpenEquipExchangeWin(ItemModel equip)
+ {
+ if (equip == null)
+ {
+ return false;
+ }
+
+ if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin)
+ {
+ return false;
+ }
+
+ // if (!IsEquip(equip))
+ // return false;
+
+ if (AutoFightModel.Instance.TryAutoFightDoEquip(equip))
+ {
+ //鑷姩鎴樺姏瀵规瘮, 鏉′欢涓嶆弧瓒崇殑鍒嗚В
+ return false;
+ }
+
+ // 濂藉嚑浠惰澶囬渶瑕佸鐞嗙殑鎯呭喌瀛樿捣鏉�
+ if (!waitEquipOP.Contains(equip.guid))
+ {
+ //妫�娴嬫椂鏈洪绻侊紝瀵艰嚧閲嶅鎺ㄩ�侊紝闇�瑕佹娴嬭繃婊わ紝瀵瑰簲Dequeue 涔熷仛涓�娆℃娴�
+ waitEquipOP.Enqueue(equip.guid);
+ }
+ //鏈洖澶嶈澶囨搷浣滅粨鏋滐紝鍚﹀垯浼氭樉绀烘棫瑁呭
+ if (waitEquipOPPack)
+ {
+ return false;
+ }
+
+
+ if (UIManager.Instance.IsOpened<EquipExchangeWin>())
+ {
+ return false;
+ }
+
+
+ selectFloorEquip = GetSelectFloorEquip();
+ if (selectFloorEquip == null)
+ {
+ return false;
+ }
+ UIManager.Instance.OpenWindow<EquipExchangeWin>();
+ return true;
+
+ }
+
+
+ ItemModel GetSelectFloorEquip()
+ {
+ if (waitEquipOP.Count == 0)
+ return null;
+
+ // 鏂版墜寮曞涓紝涓嶅厑璁稿垏鎹㈣澶囩晫闈�
+ if (NewBieCenter.Instance.inGuiding)
+ {
+ Debug.LogWarning("GetSelectFloorEquip: 鏂版墜寮曞涓紝涓嶅厑璁稿垏鎹㈣澶囩晫闈�");
+ return null;
+ }
+
+ string activeBattleName = BattleManager.Instance.GetActiveBattleName();
+ if (activeBattleName != "" && activeBattleName != "StoryBattleField")
+ {
+ Debug.LogWarning("闈炰富绾挎垬鏂椾笉寮圭獥");
+ return null;
+ }
+
+ var item = PackManager.Instance.GetItemByGuid(waitEquipOP.Dequeue());
+ if (item != null && item.packType == PackType.DropItem)
+ {
+ return item;
+ }
+ // Debug.LogError("GetSelectFloorEquip: 娌℃湁鎵惧埌鍙�夎澶�, 璇ヨ澶囧凡缁忚浆绉�");
+ return null;
+ }
+
+
+
+ //绛夌骇
+ public int GetEquipLV(ItemModel equip)
+ {
+ if (equip == null)
+ {
+ return 0;
+ }
+
+ return equip.GetUseDataFirstValue(22);
+ }
+
+ //鍩虹灞炴�D鍒楄〃
+ public List<int> GetEquipBaseAttrs(ItemModel equip)
+ {
+ if (equip == null)
+ {
+ return new List<int>();
+ }
+ return equip.GetUseData(21);
+ }
+
+
+ //鍩虹灞炴�у�煎垪琛�
+ public List<int> GetEquipBaseValues(ItemModel equip)
+ {
+ if (equip == null)
+ {
+ return new List<int>();
+ }
+ return equip.GetUseData(23);
+ }
+
+ //瑁呭鎴樻枟灞炴�D鍒楄〃, 濡傛灉鏄崷鐜夌殑璇濆熀纭�鍜屾垬鏂楅兘鏀句竴璧�
+ public List<int> GetEquipFightAttrs(ItemModel equip)
+ {
+ if (equip == null)
+ {
+ return new List<int>();
+ }
+ return equip.GetUseData(17);
+ }
+
+ //鎴樻枟灞炴�у�煎垪琛�
+ public List<int> GetEquipFightValues(ItemModel equip)
+ {
+ if (equip == null)
+ {
+ return new List<int>();
+ }
+ return equip.GetUseData(19);
+ }
+
+ //鎶�鑳絀D鍒楄〃
+ 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(string.Concat("equipPlace", place));
+ }
+
+ //鏄惁瑁呭
+ public bool IsEquip(ItemModel item)
+ {
+ return item.config.EquipPlace != 0;
+ }
+
+ public bool IsEquip(int itemID)
+ {
+ return ItemConfig.Get(itemID).EquipPlace != 0;
+ }
+
+ public ItemModel GetEquip(int index)
+ {
+ return PackManager.Instance.GetItemByIndex(PackType.Equip, index);
+ }
}
--
Gitblit v1.8.0