From 9a8583c696c85286956048e4955e4314e46202a2 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期一, 25 二月 2019 14:18:36 +0800
Subject: [PATCH] 3335 物品相关类型重构
---
System/Pet/PetModel.cs | 1584 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 792 insertions(+), 792 deletions(-)
diff --git a/System/Pet/PlayerPetDatas.cs b/System/Pet/PetModel.cs
similarity index 99%
rename from System/Pet/PlayerPetDatas.cs
rename to System/Pet/PetModel.cs
index b627522..585cdc3 100644
--- a/System/Pet/PlayerPetDatas.cs
+++ b/System/Pet/PetModel.cs
@@ -1,792 +1,792 @@
-锘縰sing Snxxz.UI;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Text.RegularExpressions;
-
-using UnityEngine;
-[XLua.LuaCallCSharp]
-public class PetBackpack//瀹犵墿鑳屽寘
-{
- public int PetClass;//瀹犵墿闃剁骇
- public int PetStatus;//瀹犵墿褰撳墠鐘舵�� 1涓哄嚭鎴� 0鏈嚭鎴�
- public int ItemPlace;//瀹犵墿浣嶇疆绱㈠紩
- public int[] PetSkill;//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
- public int petExp; //瀹犵墿褰撳墠缁忛獙
-
-}
-public enum PetEnum
-{
- PetDan = 0,//鐏靛疇涓�
- PetDebris = 1,//鐏靛疇纰庣墖
- PetStone = 2,//鐏靛疇榄傜煶
-}
-public class PlayerPetDatas : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
-{
- public Dictionary<int, int> _TagPetItem = new Dictionary<int, int>();//鍏充簬鐏靛吔榄傜煶
- public Dictionary<int, PetBackpack> _DicPetBack = new Dictionary<int, PetBackpack>();//瀹犵墿鑳屽寘鍒楄〃
- public Dictionary<int, int> _PetSkillAcquire = new Dictionary<int, int>();//鐏靛疇宸茶幏寰楃殑鎶�鑳斤紙鍚岀被鎶�鑳藉彧瀛樻渶楂樼瓑绾э級1.鎶�鑳絋ypeID锛�2.鎶�鑳絀D
- public delegate void Delegate_HB701(HB701_tagMCPetLV info);
- public delegate void Delegate_Ha339(HA339_tagMCAttrFruitEatCntList info);
- public static event Delegate_Ha339 Event_Ha339;//鐏靛吔榄傜煶
- public delegate void Delegate_H0704();
- public static event Delegate_H0704 Event_H0704Add;//鐏靛疇娣诲姞(杩涢樁)
- public static Action<int> Event_H0704Update;//鐏靛疇鍒锋柊
- public delegate void SpiritPetPlay(int _toPlay = 0);//瀹犵墿鏄惁鍑烘垬
- public static event SpiritPetPlay Event_SpiritPetPlay;
- public int PetNow = 0;//鐢ㄦ潵淇濆瓨鍑烘垬鐨勭伒瀹�
- public bool Wait = true;//(浣跨敤鐏靛疇涓�)绛夊緟鍥炲寘
- public Dictionary<int, Redpoint> DeblockingRedPoint = new Dictionary<int, Redpoint>();//瑙i攣鎸夐挳绾㈢偣锛堢伒瀹犵孩鐐瑰瓙绾э級
- public Dictionary<int, Redpoint> PetRedpoint = new Dictionary<int, Redpoint>();//鐏靛疇鍒楄〃
- public Dictionary<int, Redpoint> CultivateRedPoint = new Dictionary<int, Redpoint>();//鐏靛疇鍩瑰吇鎸夐挳绾㈢偣
- private List<PetInfoConfig> Sortpet = new List<PetInfoConfig>();//鐢ㄤ簬绾㈢偣鎺掑簭
-
- public int MinAtkNunber = 0;//鐏靛疇鏈�灏忔敾鍑诲姏
- public int MaxAtkNunber = 0;//鐏靛疇鏈�澶ф敾鍑诲姏
-
- public int PetStoneItemId = 0;//鐢ㄦ潵璁板綍鍧愰獞榄傜煶鐨処D
-
- public bool IsOk = false;
- private int PetDanExp = 0;//鐏靛疇涓圭粡楠�
- public List<int> ListEffectSkill = new List<int>();
- PackModel _playerPack;
- PackModel playerPack
- {
- get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
- }
-
- public Dictionary<int, string> petLvNameDict { get; private set; }
- public int curPetId { get; set; }
- public int petUpgradeToolId { get; set; }
-
- public event Action PlayerLoginOkData;
- private Dictionary<int, int> DicDefaultPet = new Dictionary<int, int>();
- List<PetInfoConfig> allPetConfigs = new List<PetInfoConfig>();
- public override void Init()
- {
- ToAddSorting();
- playerPack.refreshItemCountEvent += OnItemRefreshEvent;
- FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange;
- PetAttributeWin.IsRedPointCultivate += IsRedPointCultivate;
- PetNumberPreservation();
-
- petLvNameDict = new Dictionary<int, string>();
- FuncConfigConfig petLvName = FuncConfigConfig.Get("PetQuality");
- int[] petLvArray = ConfigParse.GetMultipleStr<int>(petLvName.Numerical1);
- string[] petLvNameArray = ConfigParse.GetMultipleStr(petLvName.Numerical2);
- for (int i = 0; i < petLvArray.Length; i++)
- {
- if (!petLvNameDict.ContainsKey(petLvArray[i]))
- {
- petLvNameDict.Add(petLvArray[i], petLvNameArray[i]);
- }
- }
-
- petUpgradeToolId = int.Parse(FuncConfigConfig.Get("PetUpItem").Numerical1);
- string str = FuncConfigConfig.Get("PetSkillEffect").Numerical1;
- int[] listeffect = ConfigParse.GetMultipleStr<int>(str);
- ListEffectSkill.Clear();
- for (int i = 0; i < listeffect.Length; i++)
- {
- ListEffectSkill.Add(listeffect[i]);
- }
- string PetRedDotstr = FuncConfigConfig.Get("MountPetRedDot").Numerical2;
- DicDefaultPet = ConfigParse.GetDic<int, int>(PetRedDotstr);
- PetDanExp = int.Parse(FuncConfigConfig.Get("PetUpItem").Numerical2);
- }
-
- public override void UnInit()
- {
- playerPack.refreshItemCountEvent -= OnItemRefreshEvent;
- FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChange;
- PetAttributeWin.IsRedPointCultivate -= IsRedPointCultivate;
- }
-
-
-
- public void OnBeforePlayerDataInitialize()
- {
- Wait = true;
- IsOk = false;
- _TagPetItem.Clear();
- _DicPetBack.Clear();
- PetNow = 0;
- MinAtkNunber = 0;
- MaxAtkNunber = 0;
- curPetId = 0;
- }
-
- public void OnPlayerLoginOk()
- {
- GlobalTimeEvent.Instance.secondEvent -= secondEvent;
- GlobalTimeEvent.Instance.secondEvent += secondEvent;
- SinglePack singPack = playerPack.GetSinglePack(PackType.PetPack);
- if (singPack == null) return;
- foreach (var index in singPack.GetAllItems().Keys)
- {
- OnItemRefreshEvent(singPack.type, index, singPack.GetAllItems()[index].itemId);
- }
- IsOk = true;
- if (PlayerLoginOkData != null)
- {
- PlayerLoginOkData();
- }
- }
- private DateTime dateTimeA;
- private void secondEvent()
- {
- if (!Wait)
- {
- TimeSpan timeS = DateTime.Now - dateTimeA;
- if (timeS.Seconds >= 2f)
- {
- Wait = true;
- }
- }
- else
- {
- dateTimeA = DateTime.Now;
- }
- }
-
- #region 鍙戦�佹湇鍔$璇锋眰
- public void SendPetSwitchQuest(int petIndex)
- {
- C1603_tagCPetStateChange tag_Cpet = new C1603_tagCPetStateChange();
- tag_Cpet.PetID = (uint)petIndex;
- tag_Cpet.State = 1;
- GameNetSystem.Instance.SendInfo(tag_Cpet);
- }
-
- public void SendBreakPetLockQuest(int petId)
- {
- CA702_tagCMActivatePet CMPet = new CA702_tagCMActivatePet();
- CMPet.PetNPCID = (uint)petId;
- GameNetSystem.Instance.SendInfo(CMPet);
- if (ItemOperateUtility.Instance.useItemModel != null)
- {
- ItemOperateUtility.Instance.useItemModel = null;
- }
- }
-
- public void SendPetTrainQuest(int petIndex, int number)
- {
- CA704_tagCMPetClassUP _tagCA704 = new CA704_tagCMPetClassUP();
- _tagCA704.PetItemIndex = (byte)petIndex;
- _tagCA704.UseItemCnt = (ushort)number;
- GameNetSystem.Instance.SendInfo(_tagCA704);
- }
- #endregion
-
-
- private void OnItemRefreshEvent(PackType type, int index, int id)
- {
- PetH0704(playerPack.GetItemByIndex(type, index));
- if (type == PackType.Item)
- {
- if (_TagPetItem.ContainsKey(id))
- {
- PetStoneRed();
- }
- PetActivateRedPoint();
- GetCultivateRedPoint();
-
- }
- }
- private void OnFuncStateChange(int obj)
- {
- if (obj == 6)
- {
- PetStoneRed();
- PetActivateRedPoint();
- GetCultivateRedPoint();
- }
- }
-
- private const int Redpoint_key1 = 1050201;
- private Redpoint redPointStre1 = new Redpoint(MainRedDot.RedPoint_PetKey2, Redpoint_key1);
- private void PetStoneRed()//鐏靛疇榄傜煶绾㈢偣
- {
- redPointStre1.state = RedPointState.None;
- if (!FuncOpen.Instance.IsFuncOpen(6))
- {
- return;
- }
- int type = 0;
- foreach (var key in _TagPetItem.Keys)
- {
- if (_TagPetItem[key] >= AttrFruitConfig.Get(key).MaxUseCnt)
- {
- continue;
- }
- type += playerPack.GetItemCountByID(PackType.Item, key);
-
- }
- if (type > 0)
- {
- redPointStre1.state = RedPointState.Simple;
- return;
- }
- }
- private void PetNumberPreservation()//鐢ㄦ潵瀵圭伒瀹犱釜鏁拌繘琛屼繚瀛�
- {
- if (PetRedpoint.Count != 0)
- {
- return;
- }
- int type = 0;
- if (allPetConfigs.Count <= 0)
- {
- allPetConfigs = PetInfoConfig.GetValues();
- }
- // var allPetConfigs = PetInfoConfig.GetValues();
- foreach (var config in allPetConfigs)
- {
- if (!DeblockingRedPoint.ContainsKey(config.ID))
- {
- type += 1;
- int petID = config.ID;
- int RedPoint_Mountkey = MainRedDot.RedPoint_PetKey2 * 10 + type;
- Redpoint redPointMountStare = new Redpoint(MainRedDot.RedPoint_PetKey2, RedPoint_Mountkey);
- PetRedpoint.Add(petID, redPointMountStare);//鍒楄〃
-
- int RedPoint_Mountkey1 = RedPoint_Mountkey * 10 + type;
- Redpoint redPointMountStare1 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey1);
- DeblockingRedPoint.Add(petID, redPointMountStare1);//瑙i攣鎸夐挳
- int RedPoint_Mountkey2 = RedPoint_Mountkey1 * 10 + type;
- Redpoint redPointMountStare2 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey2);
- CultivateRedPoint.Add(petID, redPointMountStare2);
- }
- }
- }
-
- private void PetActivateRedPoint()//鐏靛疇婵�娲荤孩鐐�
- {
- foreach (var key in PetRedpoint.Keys)
- {
- DeblockingRedPoint[key].state = RedPointState.None;
- }
- if (!FuncOpen.Instance.IsFuncOpen(6))
- {
- return;
- }
- // var configs = PetInfoConfig.GetValues();
- if (allPetConfigs.Count <= 0)
- {
- allPetConfigs = PetInfoConfig.GetValues();
- }
- foreach (var config in allPetConfigs)
- {
- int unlockItemID = config.UnLockNeedItemID;
- int itemCount = playerPack.GetItemCountByID(PackType.Item, unlockItemID);
- int unlockItemCnt = config.UnLockNeedItemCnt;
- if (itemCount >= unlockItemCnt && !_DicPetBack.ContainsKey(config.ID) && FuncOpen.Instance.IsFuncOpen(6))
- {
- DeblockingRedPoint[config.ID].state = RedPointState.Simple;
- }
- }
- }
- private void IsRedPointCultivate()
- {
- GetCultivateRedPoint();
- }
- private void ToAddSorting()
- {
- Sortpet.Clear();
- if (allPetConfigs.Count <= 0)
- {
- allPetConfigs = PetInfoConfig.GetValues();
- }
- Sortpet = allPetConfigs;
- Sortpet.Sort(Compare);
- }
- int Compare(PetInfoConfig x, PetInfoConfig y)//鏁扮粍鎺掑垪
- {
- if (x.Sort.CompareTo(y.Sort) != 0)
- {
- return x.Sort.CompareTo(y.Sort);
- }
- return 1;
- }
- public void GetCultivateRedPoint()//鐏靛疇鍩瑰吇绾㈢偣
- {
- foreach (var key in CultivateRedPoint.Keys)
- {
- CultivateRedPoint[key].state = RedPointState.None;
- }
- if (!FuncOpen.Instance.IsFuncOpen(6))
- {
- return;
- }
- if (_DicPetBack.Count <= 0)
- {
- return;
- }
- int GetPetId = 0;
- int petLv = 100;
- int itemCount = playerPack.GetItemCountByID(PackType.Item, 4151);
- List<int> ListInt = new List<int>();
- for (int i = 0; i < Sortpet.Count; i++)
- {
- int petID = Sortpet[i].ID;
- int MaxLv = PetInfoConfig.Get(petID).MaxRank;
- if (_DicPetBack.ContainsKey(petID) && _DicPetBack[petID].PetClass < MaxLv)
- {
- int _NeedExp = PetClassCostConfig.GetPetIdAndRank(petID, _DicPetBack[petID].PetClass).UpNeedExp;
- int NeedExp = _NeedExp - _DicPetBack[petID].petExp;
- int NeedNumber = Mathf.CeilToInt((float)NeedExp / PetDanExp);
- if (itemCount >= NeedNumber)
- {
- ListInt.Add(petID);
- }
- }
- }
-
- foreach (var key in _DicPetBack.Keys)//鍥犱负鏈夋垚灏变换鍔¢檺鍒舵墍鏈� 绗竴鍙潗楠戠孩鐐归�昏緫鐗规畩鍐�
- {
- if (DicDefaultPet.ContainsKey(key) && DicDefaultPet[key] > _DicPetBack[key].PetClass
- && itemCount > 0 && CultivateRedPoint.ContainsKey(key))
- {
- CultivateRedPoint[key].state = RedPointState.Simple;
- return;
- }
- }
- List<int> IntListSkill = new List<int>();
- for (int i = 0; i < ListInt.Count; i++)//閫夋嫨鍑哄崌绾х伒瀹犵瓑绾ф渶浣庝笖鏈夋妧鑳芥湭瑙i攣鐨勪笖缁忛獙鏈�鎺ヨ繎
- {
- if (_DicPetBack.ContainsKey(ListInt[i]))
- {
- var PetConfig = PetInfoConfig.Get(ListInt[i]);
- if (PetConfig == null)
- {
- return;
- }
- int[] SkillUnLockInt = PetConfig.SkillUnLock;
- int SkillLvMax = SkillUnLockInt[(SkillUnLockInt.Length - 1)];
- if (_DicPetBack[(ListInt[i])].PetClass < SkillLvMax)
- {
- IntListSkill.Add((ListInt[i]));
- }
- }
- }
- int SkillPetId = GetRedPointPetID(IntListSkill);
- if (SkillPetId != 0 && CultivateRedPoint.ContainsKey(SkillPetId))
- {
- CultivateRedPoint[SkillPetId].state = RedPointState.Simple;
- return;
- }
-
-
- for (int i = 0; i < ListInt.Count; i++)//閫夋嫨鍑虹瓑绾ф渶浣庣殑鐏靛疇
- {
- if (_DicPetBack.ContainsKey(ListInt[i]))
- {
- if (_DicPetBack[(ListInt[i])].PetClass < petLv)
- {
- petLv = _DicPetBack[(ListInt[i])].PetClass;
- GetPetId = (ListInt[i]);
- }
- }
- }
- if (GetPetId != 0 && CultivateRedPoint.ContainsKey(GetPetId))
- {
- CultivateRedPoint[GetPetId].state = RedPointState.Simple;
- return;
- }
- }
-
-
- private int GetRedPointPetID(List<int> PetList)
- {
- int GetSkillMinLv = 999;
- for (int i = 0; i < PetList.Count; i++)
- {
- int SkillminLv = GetSkillLvDis(PetList[i]);
- if (SkillminLv < GetSkillMinLv && SkillminLv!=0)
- {
- GetSkillMinLv = SkillminLv;
- }
- }
-
- int petId = 0;
- int ExpNumber = 999999999;
- for (int i = 0; i < PetList.Count; i++)
- {
- int SkillLv = GetSkillLvDis(PetList[i]);
- if (SkillLv > GetSkillMinLv || SkillLv==0)
- {
- continue;
- }
- var Pet1 = PetClassCostConfig.GetPetIdAndRank(PetList[i], SkillLv);
- var Pet2 = PetClassCostConfig.GetPetIdAndRank(PetList[i], _DicPetBack[(PetList[i])].PetClass);
- int Exp = Pet1.NeedExpTotal - Pet2.NeedExpTotal - _DicPetBack[(PetList[i])].petExp;
- if (Exp < ExpNumber)
- {
- ExpNumber = Exp;
- petId = PetList[i];
- }
- }
- return petId;
- }
- private int GetSkillLvDis(int PetId)//鑾峰彇绂诲崌绾ф渶杩戠殑鎶�鑳界瓑绾�
- {
- int SkillLv = 0;
- var petInfo = PetInfoConfig.Get(PetId);
- if (petInfo == null)
- {
- return 0;
- }
- int[] ListPetSkillUnLock = petInfo.SkillUnLock;
- for (int i = 0; i < ListPetSkillUnLock.Length; i++)
- {
- if (_DicPetBack.ContainsKey(PetId) && ListPetSkillUnLock[i] > _DicPetBack[PetId].PetClass)
- {
- SkillLv = ListPetSkillUnLock[i];
- return SkillLv;
- }
- }
- return SkillLv;
- }
- public int GetMinPetExp()
- {
- foreach (var key in CultivateRedPoint.Keys)//褰撳瓨鍦ㄥ煿鍏荤孩鐐规椂锛岄�変腑褰撴湁绾㈢偣鐨勯偅鍙�
- {
- if (CultivateRedPoint[key].state == RedPointState.Simple)
- {
- return key;
- }
- }
-
- List<int> IntListSkill = new List<int>();
- foreach (var key in _DicPetBack.Keys)
- {
- var petConfig = PetInfoConfig.Get(key);
- if (_DicPetBack[key].PetClass < petConfig.MaxRank)
- {
- IntListSkill.Add(key);
- }
- }
- int SkillPetId = GetRedPointPetID(IntListSkill);
- if (SkillPetId != 0)
- {
- return SkillPetId;
- }
- int GetPetId = 0;
- int GetPetLv = 999;
-
- foreach (var key in _DicPetBack.Keys)//鏃犵孩鐐规椂璺宠浆閫変腑绛夌骇鏈�浣庣殑
- {
- var config = PetInfoConfig.Get(key);
- if (_DicPetBack[key].PetClass < GetPetLv && _DicPetBack[key].PetClass < config.MaxRank)
- {
- GetPetId = key;
- GetPetLv = _DicPetBack[key].PetClass;
- }
- }
- return GetPetId;
- }
- private int GetPetSkillMaxLv(int PetID)
- {
- int maxskillLV = 0;
- int[] curPetUnlocks;
- PetInfoConfig petInfo = PetInfoConfig.Get(PetID);
- if (petInfo != null)
- {
- curPetUnlocks = petInfo.SkillUnLock;
- maxskillLV = curPetUnlocks[(curPetUnlocks.Length) - 1];
- }
- return maxskillLV;
- }
- public void PetA339(HA339_tagMCAttrFruitEatCntList info)
- {
- for (int i = 0; i < info.count; i++)
- {
- var configItem = ItemConfig.Get((int)info.EatCntList[i].ItemID);
- if (configItem == null)
- {
- continue;
- }
- if (_TagPetItem.ContainsKey((int)info.EatCntList[i].ItemID))
- {
- _TagPetItem[(int)info.EatCntList[i].ItemID] = (int)info.EatCntList[i].EatCnt;
- if (Event_Ha339 != null)
- Event_Ha339(info);
- }
- else
- {
- if (configItem.Type == 28)
- {
- _TagPetItem.Add((int)info.EatCntList[i].ItemID, (int)info.EatCntList[i].EatCnt);
-
- }
- }
- }
- PetStoneRed();
- }
-
- private void AddPetSkill(int[] intlist)
- {
- for (int i = 0; i < intlist.Length; i++)
- {
- var skillPet = SkillConfig.Get(intlist[i]);
- if (_PetSkillAcquire.ContainsKey(skillPet.SkillTypeID))
- {
- int skilllv = SkillConfig.Get(_PetSkillAcquire[skillPet.SkillTypeID]).SkillLV;
- if (skillPet.SkillLV > skilllv)
- {
- _PetSkillAcquire[skillPet.SkillTypeID] = skillPet.SkillID;
- }
- }
- else
- {
- _PetSkillAcquire.Add(skillPet.SkillTypeID, skillPet.SkillID);
- }
- }
- }
-
- public void PetH0704(ItemModel info)//瀹犵墿鑳屽寘鍒楄〃
- {
- if (info == null)
- return;
-
- if (info.packType == PackType.PetPack)
- {
- Dictionary<int, int[]> _dic = Analysis(info.itemInfo.userData);
- if (GetUseDataModel(200, _dic) != null)
- {
- int petId = _dic[200][0];
- int petLv = 0;
- int petState = 0;
- int[] petSkill = null;
- int petIndex = info.itemPlace;
- int petExp = 0;
- if (GetUseDataModel(201, _dic) != null)
- {
- petSkill = _dic[201];//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
- }
-
- if (GetUseDataModel(202, _dic) != null)
- {
- petLv = _dic[202][0] + 1;//瀹犵墿闃剁骇
- }
-
- if (GetUseDataModel(204, _dic) != null)
- {
- petState = _dic[204][0];//瀹犵墿褰撳墠鐘舵��;
- }
-
- if (GetUseDataModel(208, _dic) != null)
- {
- petExp = _dic[208][0]; //瀹犵墿缁忛獙
- }
-
- if (!_DicPetBack.ContainsKey(petId))
- {
-
- PetBackpack _petBack = new PetBackpack();
- _petBack.PetClass = petLv;
- _petBack.petExp = petExp; //瀹犵墿缁忛獙
- _petBack.PetStatus = petState;//瀹犵墿褰撳墠鐘舵��
- if (_petBack.PetStatus == 1)
- {
- PetNow = petId;
- }
-
- if (petSkill != null)
- {
- _petBack.PetSkill = petSkill;//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
- AddPetSkill(_petBack.PetSkill);
- }
- else
- {
- _petBack.PetSkill = null;
- }
- _petBack.ItemPlace = petIndex;//瀹犵墿浣嶇疆绱㈠紩
- _DicPetBack.Add(petId, _petBack);
- if (Event_H0704Add != null && IsOk)
- {
- Event_H0704Add();
- }
-
- }
- else
- {
- _DicPetBack[petId].PetClass = petLv;
- _DicPetBack[petId].PetStatus = petState;
- _DicPetBack[petId].petExp = petExp; //瀹犵墿缁忛獙
- if (petSkill != null)
- {
- _DicPetBack[petId].PetSkill = petSkill;//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
- AddPetSkill(_DicPetBack[petId].PetSkill);
- }
- else
- {
- _DicPetBack[petId].PetSkill = null;
- }
-
- _DicPetBack[petId].ItemPlace = petIndex;
- if (Event_H0704Update != null && IsOk)
- {
- Event_H0704Update(petId);
- }
- if (_DicPetBack[petId].PetStatus == 1)
- {
- PetNow = petId;
- if (Event_SpiritPetPlay != null && IsOk)
- {
- Event_SpiritPetPlay(petState);
-
- }
- }
- }
- }
- }
- PetStoneRed();
- PetActivateRedPoint();
- GetCultivateRedPoint();
- GetPetMinAndMaxAttack();
- }
-
- public int[] GetUseDataModel(int key, Dictionary<int, int[]> useDataDict)
- {
- int[] list = null;
- if (useDataDict != null)
- {
- useDataDict.TryGetValue(key, out list);
- }
- return list;
- }
-
- private void GetPetMinAndMaxAttack()
- {
- if (_DicPetBack.Count <= 0)
- {
- return;
- }
- MinAtkNunber = 0;
- MaxAtkNunber = 0;
- foreach (var key in _DicPetBack.Keys)
- {
- PetClassCostConfig _tagPetClass = PetClassCostConfig.GetPetIdAndRank(key, _DicPetBack[key].PetClass);
- MinAtkNunber += _tagPetClass.AtkAdd;
- MaxAtkNunber += _tagPetClass.AtkAdd;
- }
- }
-
- public static Regex userData = new Regex(@"'([0-9]+)':\[(.*?)\]", RegexOptions.Singleline);
-
- public Dictionary<int, int[]> Analysis(string val)//姝e垯琛ㄨ揪寮忕殑瀛楃涓插垎鍓�
- {
- if (!userData.IsMatch(val))
- {
- return null;
- }
- else
- {
- Dictionary<int, int[]> dics = new Dictionary<int, int[]>();
- foreach (Match match in userData.Matches(val))
- {
- int id = int.Parse(match.Groups[1].Value);
- string str = match.Groups[2].Value;
- string[] vals = str.Split(',');
- int[] intarray = new int[vals.Length];
- for (int i = 0; i < vals.Length; i++)
- {
- int intval = int.Parse(vals[i].Replace('\'', ' '));
- intarray[i] = intval;
- }
- if (!dics.ContainsKey(id))
- {
- dics.Add(id, intarray);
- }
- }
- return dics;
- }
- }
-
- public bool IsHint(PetEnum petEnum, int id = 0)//True鎻愮ず锛孎alse涓嶆彁绀�
- {
- bool iSHint = false;
- switch (petEnum)
- {
- case PetEnum.PetDan:
- foreach (var key in _DicPetBack.Keys)
- {
- PetInfoConfig petConfig = PetInfoConfig.Get(key);
- if (petConfig.MaxRank > _DicPetBack[key].PetClass)
- {
- iSHint = true;
- }
- }
- return iSHint;
- case PetEnum.PetDebris:
- if (allPetConfigs.Count <= 0)
- {
- allPetConfigs = PetInfoConfig.GetValues();
- }
- foreach (var value in allPetConfigs)
- {
- if (value.UnLockNeedItemID == id)
- {
- if (!_DicPetBack.ContainsKey(value.ID))
- {
- iSHint = true;
- }
- }
- }
- return iSHint;
- case PetEnum.PetStone:
- int _maxuse = AttrFruitConfig.Get(id).MaxUseCnt;
- if (_TagPetItem.ContainsKey(id))
- {
- if (_maxuse > _TagPetItem[id])
- {
- iSHint = true;
- }
- }
- return iSHint;
- default:
- return true;
- }
- }
-
- public int IsPetPanelRedPointState()//鐢ㄤ簬鍒ゆ柇褰撳墠鐏靛疇椤电鏄惁鏈夌孩鐐逛寒璧�
- {
- int Type = 0;
- foreach (var value in DeblockingRedPoint.Values)
- {
- if (value.state == RedPointState.Simple)
- {
- Type = 2;
- return Type;
- }
- }
- if (MainRedDot.Instance.redPonintPetFunc2.state == RedPointState.Simple)
- {
- Type = 1;
- return Type;
- }
- return Type;
-
- }
-
- #region 棰勮瀹犵墿纰庣墖灞炴��
- Dictionary<int, int> petAttrDict = new Dictionary<int, int>();
- public Dictionary<int, int> GetPetAttrAddDict(int petCode)
- {
- PetInfoConfig infoConfig = PetInfoConfig.Get(petCode);
- petAttrDict.Clear();
- if (infoConfig == null) return petAttrDict;
-
- int maxRank = infoConfig.MaxRank;
- PetClassCostConfig cost = PetClassCostConfig.GetPetIdAndRank(petCode, maxRank);
- int allAtkAdd = 0;
- if (cost != null)
- {
- allAtkAdd = cost.AtkAdd;
- }
- petAttrDict.Add(7, allAtkAdd);
- return petAttrDict;
- }
- #endregion
-}
+锘縰sing Snxxz.UI;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+
+using UnityEngine;
+[XLua.LuaCallCSharp]
+public class PetBackpack//瀹犵墿鑳屽寘
+{
+ public int PetClass;//瀹犵墿闃剁骇
+ public int PetStatus;//瀹犵墿褰撳墠鐘舵�� 1涓哄嚭鎴� 0鏈嚭鎴�
+ public int ItemPlace;//瀹犵墿浣嶇疆绱㈠紩
+ public int[] PetSkill;//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
+ public int petExp; //瀹犵墿褰撳墠缁忛獙
+
+}
+public enum PetEnum
+{
+ PetDan = 0,//鐏靛疇涓�
+ PetDebris = 1,//鐏靛疇纰庣墖
+ PetStone = 2,//鐏靛疇榄傜煶
+}
+public class PetModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
+{
+ public Dictionary<int, int> _TagPetItem = new Dictionary<int, int>();//鍏充簬鐏靛吔榄傜煶
+ public Dictionary<int, PetBackpack> _DicPetBack = new Dictionary<int, PetBackpack>();//瀹犵墿鑳屽寘鍒楄〃
+ public Dictionary<int, int> _PetSkillAcquire = new Dictionary<int, int>();//鐏靛疇宸茶幏寰楃殑鎶�鑳斤紙鍚岀被鎶�鑳藉彧瀛樻渶楂樼瓑绾э級1.鎶�鑳絋ypeID锛�2.鎶�鑳絀D
+ public delegate void Delegate_HB701(HB701_tagMCPetLV info);
+ public delegate void Delegate_Ha339(HA339_tagMCAttrFruitEatCntList info);
+ public static event Delegate_Ha339 Event_Ha339;//鐏靛吔榄傜煶
+ public delegate void Delegate_H0704();
+ public static event Delegate_H0704 Event_H0704Add;//鐏靛疇娣诲姞(杩涢樁)
+ public static Action<int> Event_H0704Update;//鐏靛疇鍒锋柊
+ public delegate void SpiritPetPlay(int _toPlay = 0);//瀹犵墿鏄惁鍑烘垬
+ public static event SpiritPetPlay Event_SpiritPetPlay;
+ public int PetNow = 0;//鐢ㄦ潵淇濆瓨鍑烘垬鐨勭伒瀹�
+ public bool Wait = true;//(浣跨敤鐏靛疇涓�)绛夊緟鍥炲寘
+ public Dictionary<int, Redpoint> DeblockingRedPoint = new Dictionary<int, Redpoint>();//瑙i攣鎸夐挳绾㈢偣锛堢伒瀹犵孩鐐瑰瓙绾э級
+ public Dictionary<int, Redpoint> PetRedpoint = new Dictionary<int, Redpoint>();//鐏靛疇鍒楄〃
+ public Dictionary<int, Redpoint> CultivateRedPoint = new Dictionary<int, Redpoint>();//鐏靛疇鍩瑰吇鎸夐挳绾㈢偣
+ private List<PetInfoConfig> Sortpet = new List<PetInfoConfig>();//鐢ㄤ簬绾㈢偣鎺掑簭
+
+ public int MinAtkNunber = 0;//鐏靛疇鏈�灏忔敾鍑诲姏
+ public int MaxAtkNunber = 0;//鐏靛疇鏈�澶ф敾鍑诲姏
+
+ public int PetStoneItemId = 0;//鐢ㄦ潵璁板綍鍧愰獞榄傜煶鐨処D
+
+ public bool IsOk = false;
+ private int PetDanExp = 0;//鐏靛疇涓圭粡楠�
+ public List<int> ListEffectSkill = new List<int>();
+ PackModel _playerPack;
+ PackModel playerPack
+ {
+ get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
+ }
+
+ public Dictionary<int, string> petLvNameDict { get; private set; }
+ public int curPetId { get; set; }
+ public int petUpgradeToolId { get; set; }
+
+ public event Action PlayerLoginOkData;
+ private Dictionary<int, int> DicDefaultPet = new Dictionary<int, int>();
+ List<PetInfoConfig> allPetConfigs = new List<PetInfoConfig>();
+ public override void Init()
+ {
+ ToAddSorting();
+ playerPack.refreshItemCountEvent += OnItemRefreshEvent;
+ FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange;
+ PetAttributeWin.IsRedPointCultivate += IsRedPointCultivate;
+ PetNumberPreservation();
+
+ petLvNameDict = new Dictionary<int, string>();
+ FuncConfigConfig petLvName = FuncConfigConfig.Get("PetQuality");
+ int[] petLvArray = ConfigParse.GetMultipleStr<int>(petLvName.Numerical1);
+ string[] petLvNameArray = ConfigParse.GetMultipleStr(petLvName.Numerical2);
+ for (int i = 0; i < petLvArray.Length; i++)
+ {
+ if (!petLvNameDict.ContainsKey(petLvArray[i]))
+ {
+ petLvNameDict.Add(petLvArray[i], petLvNameArray[i]);
+ }
+ }
+
+ petUpgradeToolId = int.Parse(FuncConfigConfig.Get("PetUpItem").Numerical1);
+ string str = FuncConfigConfig.Get("PetSkillEffect").Numerical1;
+ int[] listeffect = ConfigParse.GetMultipleStr<int>(str);
+ ListEffectSkill.Clear();
+ for (int i = 0; i < listeffect.Length; i++)
+ {
+ ListEffectSkill.Add(listeffect[i]);
+ }
+ string PetRedDotstr = FuncConfigConfig.Get("MountPetRedDot").Numerical2;
+ DicDefaultPet = ConfigParse.GetDic<int, int>(PetRedDotstr);
+ PetDanExp = int.Parse(FuncConfigConfig.Get("PetUpItem").Numerical2);
+ }
+
+ public override void UnInit()
+ {
+ playerPack.refreshItemCountEvent -= OnItemRefreshEvent;
+ FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChange;
+ PetAttributeWin.IsRedPointCultivate -= IsRedPointCultivate;
+ }
+
+
+
+ public void OnBeforePlayerDataInitialize()
+ {
+ Wait = true;
+ IsOk = false;
+ _TagPetItem.Clear();
+ _DicPetBack.Clear();
+ PetNow = 0;
+ MinAtkNunber = 0;
+ MaxAtkNunber = 0;
+ curPetId = 0;
+ }
+
+ public void OnPlayerLoginOk()
+ {
+ GlobalTimeEvent.Instance.secondEvent -= secondEvent;
+ GlobalTimeEvent.Instance.secondEvent += secondEvent;
+ SinglePack singPack = playerPack.GetSinglePack(PackType.PetPack);
+ if (singPack == null) return;
+ foreach (var index in singPack.GetAllItems().Keys)
+ {
+ OnItemRefreshEvent(singPack.type, index, singPack.GetAllItems()[index].itemId);
+ }
+ IsOk = true;
+ if (PlayerLoginOkData != null)
+ {
+ PlayerLoginOkData();
+ }
+ }
+ private DateTime dateTimeA;
+ private void secondEvent()
+ {
+ if (!Wait)
+ {
+ TimeSpan timeS = DateTime.Now - dateTimeA;
+ if (timeS.Seconds >= 2f)
+ {
+ Wait = true;
+ }
+ }
+ else
+ {
+ dateTimeA = DateTime.Now;
+ }
+ }
+
+ #region 鍙戦�佹湇鍔$璇锋眰
+ public void SendPetSwitchQuest(int petIndex)
+ {
+ C1603_tagCPetStateChange tag_Cpet = new C1603_tagCPetStateChange();
+ tag_Cpet.PetID = (uint)petIndex;
+ tag_Cpet.State = 1;
+ GameNetSystem.Instance.SendInfo(tag_Cpet);
+ }
+
+ public void SendBreakPetLockQuest(int petId)
+ {
+ CA702_tagCMActivatePet CMPet = new CA702_tagCMActivatePet();
+ CMPet.PetNPCID = (uint)petId;
+ GameNetSystem.Instance.SendInfo(CMPet);
+ if (ItemOperateUtility.Instance.useItemModel != null)
+ {
+ ItemOperateUtility.Instance.useItemModel = null;
+ }
+ }
+
+ public void SendPetTrainQuest(int petIndex, int number)
+ {
+ CA704_tagCMPetClassUP _tagCA704 = new CA704_tagCMPetClassUP();
+ _tagCA704.PetItemIndex = (byte)petIndex;
+ _tagCA704.UseItemCnt = (ushort)number;
+ GameNetSystem.Instance.SendInfo(_tagCA704);
+ }
+ #endregion
+
+
+ private void OnItemRefreshEvent(PackType type, int index, int id)
+ {
+ PetH0704(playerPack.GetItemByIndex(type, index));
+ if (type == PackType.Item)
+ {
+ if (_TagPetItem.ContainsKey(id))
+ {
+ PetStoneRed();
+ }
+ PetActivateRedPoint();
+ GetCultivateRedPoint();
+
+ }
+ }
+ private void OnFuncStateChange(int obj)
+ {
+ if (obj == 6)
+ {
+ PetStoneRed();
+ PetActivateRedPoint();
+ GetCultivateRedPoint();
+ }
+ }
+
+ private const int Redpoint_key1 = 1050201;
+ private Redpoint redPointStre1 = new Redpoint(MainRedDot.RedPoint_PetKey2, Redpoint_key1);
+ private void PetStoneRed()//鐏靛疇榄傜煶绾㈢偣
+ {
+ redPointStre1.state = RedPointState.None;
+ if (!FuncOpen.Instance.IsFuncOpen(6))
+ {
+ return;
+ }
+ int type = 0;
+ foreach (var key in _TagPetItem.Keys)
+ {
+ if (_TagPetItem[key] >= AttrFruitConfig.Get(key).MaxUseCnt)
+ {
+ continue;
+ }
+ type += playerPack.GetItemCountByID(PackType.Item, key);
+
+ }
+ if (type > 0)
+ {
+ redPointStre1.state = RedPointState.Simple;
+ return;
+ }
+ }
+ private void PetNumberPreservation()//鐢ㄦ潵瀵圭伒瀹犱釜鏁拌繘琛屼繚瀛�
+ {
+ if (PetRedpoint.Count != 0)
+ {
+ return;
+ }
+ int type = 0;
+ if (allPetConfigs.Count <= 0)
+ {
+ allPetConfigs = PetInfoConfig.GetValues();
+ }
+ // var allPetConfigs = PetInfoConfig.GetValues();
+ foreach (var config in allPetConfigs)
+ {
+ if (!DeblockingRedPoint.ContainsKey(config.ID))
+ {
+ type += 1;
+ int petID = config.ID;
+ int RedPoint_Mountkey = MainRedDot.RedPoint_PetKey2 * 10 + type;
+ Redpoint redPointMountStare = new Redpoint(MainRedDot.RedPoint_PetKey2, RedPoint_Mountkey);
+ PetRedpoint.Add(petID, redPointMountStare);//鍒楄〃
+
+ int RedPoint_Mountkey1 = RedPoint_Mountkey * 10 + type;
+ Redpoint redPointMountStare1 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey1);
+ DeblockingRedPoint.Add(petID, redPointMountStare1);//瑙i攣鎸夐挳
+ int RedPoint_Mountkey2 = RedPoint_Mountkey1 * 10 + type;
+ Redpoint redPointMountStare2 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey2);
+ CultivateRedPoint.Add(petID, redPointMountStare2);
+ }
+ }
+ }
+
+ private void PetActivateRedPoint()//鐏靛疇婵�娲荤孩鐐�
+ {
+ foreach (var key in PetRedpoint.Keys)
+ {
+ DeblockingRedPoint[key].state = RedPointState.None;
+ }
+ if (!FuncOpen.Instance.IsFuncOpen(6))
+ {
+ return;
+ }
+ // var configs = PetInfoConfig.GetValues();
+ if (allPetConfigs.Count <= 0)
+ {
+ allPetConfigs = PetInfoConfig.GetValues();
+ }
+ foreach (var config in allPetConfigs)
+ {
+ int unlockItemID = config.UnLockNeedItemID;
+ int itemCount = playerPack.GetItemCountByID(PackType.Item, unlockItemID);
+ int unlockItemCnt = config.UnLockNeedItemCnt;
+ if (itemCount >= unlockItemCnt && !_DicPetBack.ContainsKey(config.ID) && FuncOpen.Instance.IsFuncOpen(6))
+ {
+ DeblockingRedPoint[config.ID].state = RedPointState.Simple;
+ }
+ }
+ }
+ private void IsRedPointCultivate()
+ {
+ GetCultivateRedPoint();
+ }
+ private void ToAddSorting()
+ {
+ Sortpet.Clear();
+ if (allPetConfigs.Count <= 0)
+ {
+ allPetConfigs = PetInfoConfig.GetValues();
+ }
+ Sortpet = allPetConfigs;
+ Sortpet.Sort(Compare);
+ }
+ int Compare(PetInfoConfig x, PetInfoConfig y)//鏁扮粍鎺掑垪
+ {
+ if (x.Sort.CompareTo(y.Sort) != 0)
+ {
+ return x.Sort.CompareTo(y.Sort);
+ }
+ return 1;
+ }
+ public void GetCultivateRedPoint()//鐏靛疇鍩瑰吇绾㈢偣
+ {
+ foreach (var key in CultivateRedPoint.Keys)
+ {
+ CultivateRedPoint[key].state = RedPointState.None;
+ }
+ if (!FuncOpen.Instance.IsFuncOpen(6))
+ {
+ return;
+ }
+ if (_DicPetBack.Count <= 0)
+ {
+ return;
+ }
+ int GetPetId = 0;
+ int petLv = 100;
+ int itemCount = playerPack.GetItemCountByID(PackType.Item, 4151);
+ List<int> ListInt = new List<int>();
+ for (int i = 0; i < Sortpet.Count; i++)
+ {
+ int petID = Sortpet[i].ID;
+ int MaxLv = PetInfoConfig.Get(petID).MaxRank;
+ if (_DicPetBack.ContainsKey(petID) && _DicPetBack[petID].PetClass < MaxLv)
+ {
+ int _NeedExp = PetClassCostConfig.GetPetIdAndRank(petID, _DicPetBack[petID].PetClass).UpNeedExp;
+ int NeedExp = _NeedExp - _DicPetBack[petID].petExp;
+ int NeedNumber = Mathf.CeilToInt((float)NeedExp / PetDanExp);
+ if (itemCount >= NeedNumber)
+ {
+ ListInt.Add(petID);
+ }
+ }
+ }
+
+ foreach (var key in _DicPetBack.Keys)//鍥犱负鏈夋垚灏变换鍔¢檺鍒舵墍鏈� 绗竴鍙潗楠戠孩鐐归�昏緫鐗规畩鍐�
+ {
+ if (DicDefaultPet.ContainsKey(key) && DicDefaultPet[key] > _DicPetBack[key].PetClass
+ && itemCount > 0 && CultivateRedPoint.ContainsKey(key))
+ {
+ CultivateRedPoint[key].state = RedPointState.Simple;
+ return;
+ }
+ }
+ List<int> IntListSkill = new List<int>();
+ for (int i = 0; i < ListInt.Count; i++)//閫夋嫨鍑哄崌绾х伒瀹犵瓑绾ф渶浣庝笖鏈夋妧鑳芥湭瑙i攣鐨勪笖缁忛獙鏈�鎺ヨ繎
+ {
+ if (_DicPetBack.ContainsKey(ListInt[i]))
+ {
+ var PetConfig = PetInfoConfig.Get(ListInt[i]);
+ if (PetConfig == null)
+ {
+ return;
+ }
+ int[] SkillUnLockInt = PetConfig.SkillUnLock;
+ int SkillLvMax = SkillUnLockInt[(SkillUnLockInt.Length - 1)];
+ if (_DicPetBack[(ListInt[i])].PetClass < SkillLvMax)
+ {
+ IntListSkill.Add((ListInt[i]));
+ }
+ }
+ }
+ int SkillPetId = GetRedPointPetID(IntListSkill);
+ if (SkillPetId != 0 && CultivateRedPoint.ContainsKey(SkillPetId))
+ {
+ CultivateRedPoint[SkillPetId].state = RedPointState.Simple;
+ return;
+ }
+
+
+ for (int i = 0; i < ListInt.Count; i++)//閫夋嫨鍑虹瓑绾ф渶浣庣殑鐏靛疇
+ {
+ if (_DicPetBack.ContainsKey(ListInt[i]))
+ {
+ if (_DicPetBack[(ListInt[i])].PetClass < petLv)
+ {
+ petLv = _DicPetBack[(ListInt[i])].PetClass;
+ GetPetId = (ListInt[i]);
+ }
+ }
+ }
+ if (GetPetId != 0 && CultivateRedPoint.ContainsKey(GetPetId))
+ {
+ CultivateRedPoint[GetPetId].state = RedPointState.Simple;
+ return;
+ }
+ }
+
+
+ private int GetRedPointPetID(List<int> PetList)
+ {
+ int GetSkillMinLv = 999;
+ for (int i = 0; i < PetList.Count; i++)
+ {
+ int SkillminLv = GetSkillLvDis(PetList[i]);
+ if (SkillminLv < GetSkillMinLv && SkillminLv!=0)
+ {
+ GetSkillMinLv = SkillminLv;
+ }
+ }
+
+ int petId = 0;
+ int ExpNumber = 999999999;
+ for (int i = 0; i < PetList.Count; i++)
+ {
+ int SkillLv = GetSkillLvDis(PetList[i]);
+ if (SkillLv > GetSkillMinLv || SkillLv==0)
+ {
+ continue;
+ }
+ var Pet1 = PetClassCostConfig.GetPetIdAndRank(PetList[i], SkillLv);
+ var Pet2 = PetClassCostConfig.GetPetIdAndRank(PetList[i], _DicPetBack[(PetList[i])].PetClass);
+ int Exp = Pet1.NeedExpTotal - Pet2.NeedExpTotal - _DicPetBack[(PetList[i])].petExp;
+ if (Exp < ExpNumber)
+ {
+ ExpNumber = Exp;
+ petId = PetList[i];
+ }
+ }
+ return petId;
+ }
+ private int GetSkillLvDis(int PetId)//鑾峰彇绂诲崌绾ф渶杩戠殑鎶�鑳界瓑绾�
+ {
+ int SkillLv = 0;
+ var petInfo = PetInfoConfig.Get(PetId);
+ if (petInfo == null)
+ {
+ return 0;
+ }
+ int[] ListPetSkillUnLock = petInfo.SkillUnLock;
+ for (int i = 0; i < ListPetSkillUnLock.Length; i++)
+ {
+ if (_DicPetBack.ContainsKey(PetId) && ListPetSkillUnLock[i] > _DicPetBack[PetId].PetClass)
+ {
+ SkillLv = ListPetSkillUnLock[i];
+ return SkillLv;
+ }
+ }
+ return SkillLv;
+ }
+ public int GetMinPetExp()
+ {
+ foreach (var key in CultivateRedPoint.Keys)//褰撳瓨鍦ㄥ煿鍏荤孩鐐规椂锛岄�変腑褰撴湁绾㈢偣鐨勯偅鍙�
+ {
+ if (CultivateRedPoint[key].state == RedPointState.Simple)
+ {
+ return key;
+ }
+ }
+
+ List<int> IntListSkill = new List<int>();
+ foreach (var key in _DicPetBack.Keys)
+ {
+ var petConfig = PetInfoConfig.Get(key);
+ if (_DicPetBack[key].PetClass < petConfig.MaxRank)
+ {
+ IntListSkill.Add(key);
+ }
+ }
+ int SkillPetId = GetRedPointPetID(IntListSkill);
+ if (SkillPetId != 0)
+ {
+ return SkillPetId;
+ }
+ int GetPetId = 0;
+ int GetPetLv = 999;
+
+ foreach (var key in _DicPetBack.Keys)//鏃犵孩鐐规椂璺宠浆閫変腑绛夌骇鏈�浣庣殑
+ {
+ var config = PetInfoConfig.Get(key);
+ if (_DicPetBack[key].PetClass < GetPetLv && _DicPetBack[key].PetClass < config.MaxRank)
+ {
+ GetPetId = key;
+ GetPetLv = _DicPetBack[key].PetClass;
+ }
+ }
+ return GetPetId;
+ }
+ private int GetPetSkillMaxLv(int PetID)
+ {
+ int maxskillLV = 0;
+ int[] curPetUnlocks;
+ PetInfoConfig petInfo = PetInfoConfig.Get(PetID);
+ if (petInfo != null)
+ {
+ curPetUnlocks = petInfo.SkillUnLock;
+ maxskillLV = curPetUnlocks[(curPetUnlocks.Length) - 1];
+ }
+ return maxskillLV;
+ }
+ public void PetA339(HA339_tagMCAttrFruitEatCntList info)
+ {
+ for (int i = 0; i < info.count; i++)
+ {
+ var configItem = ItemConfig.Get((int)info.EatCntList[i].ItemID);
+ if (configItem == null)
+ {
+ continue;
+ }
+ if (_TagPetItem.ContainsKey((int)info.EatCntList[i].ItemID))
+ {
+ _TagPetItem[(int)info.EatCntList[i].ItemID] = (int)info.EatCntList[i].EatCnt;
+ if (Event_Ha339 != null)
+ Event_Ha339(info);
+ }
+ else
+ {
+ if (configItem.Type == 28)
+ {
+ _TagPetItem.Add((int)info.EatCntList[i].ItemID, (int)info.EatCntList[i].EatCnt);
+
+ }
+ }
+ }
+ PetStoneRed();
+ }
+
+ private void AddPetSkill(int[] intlist)
+ {
+ for (int i = 0; i < intlist.Length; i++)
+ {
+ var skillPet = SkillConfig.Get(intlist[i]);
+ if (_PetSkillAcquire.ContainsKey(skillPet.SkillTypeID))
+ {
+ int skilllv = SkillConfig.Get(_PetSkillAcquire[skillPet.SkillTypeID]).SkillLV;
+ if (skillPet.SkillLV > skilllv)
+ {
+ _PetSkillAcquire[skillPet.SkillTypeID] = skillPet.SkillID;
+ }
+ }
+ else
+ {
+ _PetSkillAcquire.Add(skillPet.SkillTypeID, skillPet.SkillID);
+ }
+ }
+ }
+
+ public void PetH0704(ItemModel info)//瀹犵墿鑳屽寘鍒楄〃
+ {
+ if (info == null)
+ return;
+
+ if (info.packType == PackType.PetPack)
+ {
+ Dictionary<int, int[]> _dic = Analysis(info.itemInfo.userData);
+ if (GetUseDataModel(200, _dic) != null)
+ {
+ int petId = _dic[200][0];
+ int petLv = 0;
+ int petState = 0;
+ int[] petSkill = null;
+ int petIndex = info.itemPlace;
+ int petExp = 0;
+ if (GetUseDataModel(201, _dic) != null)
+ {
+ petSkill = _dic[201];//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
+ }
+
+ if (GetUseDataModel(202, _dic) != null)
+ {
+ petLv = _dic[202][0] + 1;//瀹犵墿闃剁骇
+ }
+
+ if (GetUseDataModel(204, _dic) != null)
+ {
+ petState = _dic[204][0];//瀹犵墿褰撳墠鐘舵��;
+ }
+
+ if (GetUseDataModel(208, _dic) != null)
+ {
+ petExp = _dic[208][0]; //瀹犵墿缁忛獙
+ }
+
+ if (!_DicPetBack.ContainsKey(petId))
+ {
+
+ PetBackpack _petBack = new PetBackpack();
+ _petBack.PetClass = petLv;
+ _petBack.petExp = petExp; //瀹犵墿缁忛獙
+ _petBack.PetStatus = petState;//瀹犵墿褰撳墠鐘舵��
+ if (_petBack.PetStatus == 1)
+ {
+ PetNow = petId;
+ }
+
+ if (petSkill != null)
+ {
+ _petBack.PetSkill = petSkill;//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
+ AddPetSkill(_petBack.PetSkill);
+ }
+ else
+ {
+ _petBack.PetSkill = null;
+ }
+ _petBack.ItemPlace = petIndex;//瀹犵墿浣嶇疆绱㈠紩
+ _DicPetBack.Add(petId, _petBack);
+ if (Event_H0704Add != null && IsOk)
+ {
+ Event_H0704Add();
+ }
+
+ }
+ else
+ {
+ _DicPetBack[petId].PetClass = petLv;
+ _DicPetBack[petId].PetStatus = petState;
+ _DicPetBack[petId].petExp = petExp; //瀹犵墿缁忛獙
+ if (petSkill != null)
+ {
+ _DicPetBack[petId].PetSkill = petSkill;//瀹犵墿褰撳墠瀛︿範鐨勬妧鑳�
+ AddPetSkill(_DicPetBack[petId].PetSkill);
+ }
+ else
+ {
+ _DicPetBack[petId].PetSkill = null;
+ }
+
+ _DicPetBack[petId].ItemPlace = petIndex;
+ if (Event_H0704Update != null && IsOk)
+ {
+ Event_H0704Update(petId);
+ }
+ if (_DicPetBack[petId].PetStatus == 1)
+ {
+ PetNow = petId;
+ if (Event_SpiritPetPlay != null && IsOk)
+ {
+ Event_SpiritPetPlay(petState);
+
+ }
+ }
+ }
+ }
+ }
+ PetStoneRed();
+ PetActivateRedPoint();
+ GetCultivateRedPoint();
+ GetPetMinAndMaxAttack();
+ }
+
+ public int[] GetUseDataModel(int key, Dictionary<int, int[]> useDataDict)
+ {
+ int[] list = null;
+ if (useDataDict != null)
+ {
+ useDataDict.TryGetValue(key, out list);
+ }
+ return list;
+ }
+
+ private void GetPetMinAndMaxAttack()
+ {
+ if (_DicPetBack.Count <= 0)
+ {
+ return;
+ }
+ MinAtkNunber = 0;
+ MaxAtkNunber = 0;
+ foreach (var key in _DicPetBack.Keys)
+ {
+ PetClassCostConfig _tagPetClass = PetClassCostConfig.GetPetIdAndRank(key, _DicPetBack[key].PetClass);
+ MinAtkNunber += _tagPetClass.AtkAdd;
+ MaxAtkNunber += _tagPetClass.AtkAdd;
+ }
+ }
+
+ public static Regex userData = new Regex(@"'([0-9]+)':\[(.*?)\]", RegexOptions.Singleline);
+
+ public Dictionary<int, int[]> Analysis(string val)//姝e垯琛ㄨ揪寮忕殑瀛楃涓插垎鍓�
+ {
+ if (!userData.IsMatch(val))
+ {
+ return null;
+ }
+ else
+ {
+ Dictionary<int, int[]> dics = new Dictionary<int, int[]>();
+ foreach (Match match in userData.Matches(val))
+ {
+ int id = int.Parse(match.Groups[1].Value);
+ string str = match.Groups[2].Value;
+ string[] vals = str.Split(',');
+ int[] intarray = new int[vals.Length];
+ for (int i = 0; i < vals.Length; i++)
+ {
+ int intval = int.Parse(vals[i].Replace('\'', ' '));
+ intarray[i] = intval;
+ }
+ if (!dics.ContainsKey(id))
+ {
+ dics.Add(id, intarray);
+ }
+ }
+ return dics;
+ }
+ }
+
+ public bool IsHint(PetEnum petEnum, int id = 0)//True鎻愮ず锛孎alse涓嶆彁绀�
+ {
+ bool iSHint = false;
+ switch (petEnum)
+ {
+ case PetEnum.PetDan:
+ foreach (var key in _DicPetBack.Keys)
+ {
+ PetInfoConfig petConfig = PetInfoConfig.Get(key);
+ if (petConfig.MaxRank > _DicPetBack[key].PetClass)
+ {
+ iSHint = true;
+ }
+ }
+ return iSHint;
+ case PetEnum.PetDebris:
+ if (allPetConfigs.Count <= 0)
+ {
+ allPetConfigs = PetInfoConfig.GetValues();
+ }
+ foreach (var value in allPetConfigs)
+ {
+ if (value.UnLockNeedItemID == id)
+ {
+ if (!_DicPetBack.ContainsKey(value.ID))
+ {
+ iSHint = true;
+ }
+ }
+ }
+ return iSHint;
+ case PetEnum.PetStone:
+ int _maxuse = AttrFruitConfig.Get(id).MaxUseCnt;
+ if (_TagPetItem.ContainsKey(id))
+ {
+ if (_maxuse > _TagPetItem[id])
+ {
+ iSHint = true;
+ }
+ }
+ return iSHint;
+ default:
+ return true;
+ }
+ }
+
+ public int IsPetPanelRedPointState()//鐢ㄤ簬鍒ゆ柇褰撳墠鐏靛疇椤电鏄惁鏈夌孩鐐逛寒璧�
+ {
+ int Type = 0;
+ foreach (var value in DeblockingRedPoint.Values)
+ {
+ if (value.state == RedPointState.Simple)
+ {
+ Type = 2;
+ return Type;
+ }
+ }
+ if (MainRedDot.Instance.redPonintPetFunc2.state == RedPointState.Simple)
+ {
+ Type = 1;
+ return Type;
+ }
+ return Type;
+
+ }
+
+ #region 棰勮瀹犵墿纰庣墖灞炴��
+ Dictionary<int, int> petAttrDict = new Dictionary<int, int>();
+ public Dictionary<int, int> GetPetAttrAddDict(int petCode)
+ {
+ PetInfoConfig infoConfig = PetInfoConfig.Get(petCode);
+ petAttrDict.Clear();
+ if (infoConfig == null) return petAttrDict;
+
+ int maxRank = infoConfig.MaxRank;
+ PetClassCostConfig cost = PetClassCostConfig.GetPetIdAndRank(petCode, maxRank);
+ int allAtkAdd = 0;
+ if (cost != null)
+ {
+ allAtkAdd = cost.AtkAdd;
+ }
+ petAttrDict.Add(7, allAtkAdd);
+ return petAttrDict;
+ }
+ #endregion
+}
--
Gitblit v1.8.0