少年修仙传客户端代码仓库
client_Wu Xijin
2019-02-25 9a8583c696c85286956048e4955e4314e46202a2
3335 物品相关类型重构
5 文件已重命名
70个文件已修改
1个文件已删除
1 文件已复制
4908 ■■■■ 已修改文件
Core/GameEngine/Model/Player/PlayerDatas.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0428_tagPlayerRideHorse.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0433_tagDownHorse.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0605_tagObjAddBuff.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0606_tagObjDelBuff.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0612_tagClearObjBuff.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0617_tagObjAddBuffPack.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA301_tagTrainHorseData.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA339_tagMCAttrFruitEatCntList.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B3_tagMCEquipPartStarLVInfo.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/AttackHandler.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/StageLoad.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/DelegatesGensBridge.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/BlastFurnaceModel.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/GetPetMatPathWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerSettlementWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/FightingPKWin.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonFairyLandWin.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonLiquidBehaviour.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonLiquidCell.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonUseLiquidWin.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyGrabBossBuffTip.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/ItemLogicUtility.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/ItemOperateUtility.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/ItemTipsModel.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PackModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PetMatInfoWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PlayerStrengtheningLVWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/WashPointBatchUseWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/New/BatchBuyWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/New/BatchWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/New/RoleEquipStrengthTips.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/BuffListWin.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/CombatModeWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/HeadPortraitTip.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/MainInterfaceWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/PKModel.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/PlayerBuffDatas.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/PlayerMainDate.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Message/RichTableEvent.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/AutoTrainTipsWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountModel.cs 1506 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountModel.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountPanelAssignment.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountSkillWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountStoneTipsWin.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountWin.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetAttributeMethods.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetAttributeWin.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetButton.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetModel.cs 1584 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetModel.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetStoneTipsWin.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetWin.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/RidingAndPetActivationModel.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/RidingAndPetActivationWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/TargetPetAttrWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/RoleAttrWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/RoleParticularsWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewFuncCell.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewHorseDetailWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewPetDetailWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RolePromote/RolePromoteModel.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Store/Logic/BuyPetMatInfoWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Strengthening/EquipReinforceWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Strengthening/PlayerStrengthengDatas.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Strengthening/StrengthenModel.cs 1286 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Strengthening/StrengthenModel.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Strengthening/StrengtheningSripts.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SystemSetting/SettingEffectMgr.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/TreasureSoulModel.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/TreasureSoulPattern4.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/TreasureSoulWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowJump/WindowJumpMgr.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -24,8 +24,8 @@
    PlayerSkillDatas m_Skill = new PlayerSkillDatas();
    public PlayerSkillDatas skill { get { return m_Skill; } }
    PlayerStrengthengDatas m_StrengthengModel;
    PlayerStrengthengDatas strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()); } }
    StrengthenModel m_StrengthengModel;
    StrengthenModel strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>()); } }
    PlayerMethodData M_Method;
    PlayerMethodData method { get { return M_Method ?? (M_Method = ModelCenter.Instance.GetModel<PlayerMethodData>()); } }
Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
@@ -14,12 +14,12 @@
    TreasureModel m_Model;
    TreasureModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<TreasureModel>()); } }
    PlayerMountDatas m_HorseModel;
    PlayerMountDatas horsemodel
    MountModel m_HorseModel;
    MountModel horsemodel
    {
        get
        {
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
        }
    }
    PlayerMainDate m_MainModel;
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0428_tagPlayerRideHorse.cs
@@ -8,12 +8,12 @@
public class DTC0428_tagPlayerRideHorse : DtcBasic
{
    PlayerMountDatas m_HorseModel;
    PlayerMountDatas horsemodel
    MountModel m_HorseModel;
    MountModel horsemodel
    {
        get
        {
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
        }
    }
    private bool _horseRid
@@ -58,7 +58,7 @@
            }
        }
        if (string.IsNullOrEmpty(ModelCenter.Instance.GetModel<PlayerMountDatas>()._HorseIDNow) == false
        if (string.IsNullOrEmpty(ModelCenter.Instance.GetModel<MountModel>()._HorseIDNow) == false
         && FuncOpen.Instance.IsFuncOpen(8))
        {
            C0309_tagCRideHorse _tag0309 = new C0309_tagCRideHorse();
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0433_tagDownHorse.cs
@@ -8,12 +8,12 @@
public class DTC0433_tagDownHorse : DtcBasic {
    PlayerMountDatas m_HorseModel;
    PlayerMountDatas horsemodel
    MountModel m_HorseModel;
    MountModel horsemodel
    {
        get
        {
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
        }
    }
    public override void Done(GameNetPackBasic vNetPack) {
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0605_tagObjAddBuff.cs
@@ -9,12 +9,12 @@
public class DTC0605_tagObjAddBuff : DtcBasic
{
    PlayerBuffDatas m_BuffModel;
    PlayerBuffDatas model
    BuffModel m_BuffModel;
    BuffModel model
    {
        get
        {
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
        }
    }
    public override void Done(GameNetPackBasic vNetPack)
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0606_tagObjDelBuff.cs
@@ -4,12 +4,12 @@
public class DTC0606_tagObjDelBuff : DtcBasic
{
    PlayerBuffDatas m_BuffModel;
    PlayerBuffDatas model
    BuffModel m_BuffModel;
    BuffModel model
    {
        get
        {
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
        }
    }
    public override void Done(GameNetPackBasic vNetPack)
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0612_tagClearObjBuff.cs
@@ -9,12 +9,12 @@
public class DTC0612_tagClearObjBuff : DtcBasic
{
    PlayerBuffDatas m_BuffModel;
    PlayerBuffDatas model
    BuffModel m_BuffModel;
    BuffModel model
    {
        get
        {
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
        }
    }
    public override void Done(GameNetPackBasic vNetPack)
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0617_tagObjAddBuffPack.cs
@@ -6,12 +6,12 @@
public class DTC0617_tagObjAddBuffPack : DtcBasic
{
    PlayerBuffDatas m_BuffModel;
    PlayerBuffDatas model
    BuffModel m_BuffModel;
    BuffModel model
    {
        get
        {
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
        }
    }
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA301_tagTrainHorseData.cs
@@ -8,12 +8,12 @@
public class DTCA301_tagTrainHorseData : DtcBasic {
    PlayerMountDatas m_HorseModel;
    PlayerMountDatas horsemodel
    MountModel m_HorseModel;
    MountModel horsemodel
    {
        get
        {
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
        }
    }
    public override void Done(GameNetPackBasic vNetPack)
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA339_tagMCAttrFruitEatCntList.cs
@@ -7,20 +7,20 @@
public class DTCA339_tagMCAttrFruitEatCntList : DtcBasic {
    PlayerPetDatas m_petModel;
    PlayerPetDatas petmodel
    PetModel m_petModel;
    PetModel petmodel
    {
        get
        {
            return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>());
            return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>());
        }
    }
    PlayerMountDatas m_HorseModel;
    PlayerMountDatas horsemodel
    MountModel m_HorseModel;
    MountModel horsemodel
    {
        get
        {
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
            return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
        }
    }
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B3_tagMCEquipPartStarLVInfo.cs
@@ -8,8 +8,8 @@
public class DTCA3B3_tagMCEquipPartStarLVInfo : DtcBasic {
    PlayerStrengthengDatas m_StrengthengModel;
    PlayerStrengthengDatas strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()); } }
    StrengthenModel m_StrengthengModel;
    StrengthenModel strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>()); } }
   
    public override void Done(GameNetPackBasic vNetPack) {
      
Fight/Actor/Skill/AttackHandler.cs
@@ -953,7 +953,7 @@
        // 4511 buff中攻击造成坐骑攻击属性XX%的额外伤害
        if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4511, out _effectValue))
        {
            PlayerMountDatas _mountData = Snxxz.UI.ModelCenter.Instance.GetModel<PlayerMountDatas>();
            MountModel _mountData = Snxxz.UI.ModelCenter.Instance.GetModel<MountModel>();
            int _allMountAtk = _mountData.GetAllMountAttack();
            _allMountAtk = (int)(_effectValue.value1 * Constants.F_DELTA * _allMountAtk);
            _aFinalHurt += _allMountAtk;
Fight/Stage/StageLoad.cs
@@ -386,7 +386,7 @@
            itemModel = equipModel.GetItemByIndex((int)RoleEquipType.mount);
            if (itemModel != null)
            {
                var mountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>();
                var mountModel = ModelCenter.Instance.GetModel<MountModel>();
                if (mountModel.HorseRidingBool)
                {
                    hero.OnHorse(1);
Lua/Gen/DelegatesGensBridge.cs
@@ -958,7 +958,7 @@
#endif
        }
        
        public PlayerBuffDatas __Gen_Delegate_Imp42(object p0)
        public BuffModel __Gen_Delegate_Imp42(object p0)
        {
#if THREAD_SAFE || HOTFIX_ENABLE
            lock (luaEnv.luaEnvLock)
@@ -972,7 +972,7 @@
                PCall(L, 1, 1, errFunc);
                
                
                PlayerBuffDatas __gen_ret = (PlayerBuffDatas)translator.GetObject(L, errFunc + 1, typeof(PlayerBuffDatas));
                BuffModel __gen_ret = (BuffModel)translator.GetObject(L, errFunc + 1, typeof(BuffModel));
                LuaAPI.lua_settop(L, errFunc - 1);
                return  __gen_ret;
#if THREAD_SAFE || HOTFIX_ENABLE
System/BlastFurnace/BlastFurnaceModel.cs
@@ -39,8 +39,8 @@
        get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
    }
    ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
    PlayerPetDatas petModel { get { return ModelCenter.Instance.GetModel<PlayerPetDatas>(); } }
    PlayerMountDatas mountModel { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
    PetModel petModel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
    MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
    public override void Init()
    {
@@ -91,8 +91,8 @@
        playerPack.refreshItemSumUseCountEvent -= RefreshItemUsce;
        WindowCenter.Instance.windowAfterCloseEvent -= StoveUpgradAfterClose;
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= RefreshRealm;
        PlayerPetDatas.Event_H0704Add -= AddPetEvent;
        PlayerMountDatas.Event_MountHA301A -= AddMountEvent;
        PetModel.Event_H0704Add -= AddPetEvent;
        MountModel.Event_MountHA301A -= AddMountEvent;
    }
@@ -112,8 +112,8 @@
        WindowCenter.Instance.windowAfterCloseEvent += StoveUpgradAfterClose;
        playerPack.itemCntReduceEvent += RefreshDanReduce;
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshRealm;
        PlayerPetDatas.Event_H0704Add += AddPetEvent;
        PlayerMountDatas.Event_MountHA301A += AddMountEvent;
        PetModel.Event_H0704Add += AddPetEvent;
        MountModel.Event_MountHA301A += AddMountEvent;
    }
@@ -768,7 +768,7 @@
                if (tipsModel.unlockPetDict.ContainsKey(idlist[i]))
                {
                    PetInfoConfig petInfo = tipsModel.unlockPetDict[idlist[i]];
                    var petmodel = ModelCenter.Instance.GetModel<PlayerPetDatas>();
                    var petmodel = ModelCenter.Instance.GetModel<PetModel>();
                    if (!petmodel._DicPetBack.ContainsKey(petInfo.ID))
                    {
                        return false;
@@ -778,7 +778,7 @@
                if (tipsModel.unlockMountDict.ContainsKey(idlist[i]))
                {
                    HorseConfig horseConfig = tipsModel.unlockMountDict[idlist[i]];
                    var mountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>();
                    var mountModel = ModelCenter.Instance.GetModel<MountModel>();
                    if (!mountModel._DicHorse.ContainsKey(horseConfig.HorseID))
                    {
                        return false;
System/BlastFurnace/GetPetMatPathWin.cs
@@ -67,8 +67,8 @@
        Dictionary<int, List<int>> mountSkillDict;
        private List<GameObject> tempObjlist = new List<GameObject>();
        PetMatType matType = PetMatType.None;
        PlayerPetDatas petmodel { get { return ModelCenter.Instance.GetModel<PlayerPetDatas>(); } }
        PlayerMountDatas mountModel { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
        PetModel petmodel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
        MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        protected override void BindController()
        {
System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs
@@ -453,7 +453,7 @@
        }
        Clock clientMatchClock;
        PlayerBuffDatas buffDatas { get { return ModelCenter.Instance.GetModel<PlayerBuffDatas>(); } }
        BuffModel buffDatas { get { return ModelCenter.Instance.GetModel<BuffModel>(); } }
        /// <summary>
        ///0-取消匹配; 1-进行匹配
        /// </summary>
System/CrossServerOneVsOne/CrossServerSettlementWin.cs
@@ -49,8 +49,8 @@
        #region Built-in
        CrossServerOneVsOneModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerOneVsOneModel>(); } }
        DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>()); } }
        BuffModel m_BuffModel;
        BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
        float timer = 0f;
        private int WinSorce = 0;
        private int FailureSorce = 0;
System/CrossServerOneVsOne/FightingPKWin.cs
@@ -38,8 +38,8 @@
        private List<int> _OpponentBuffSortList = new List<int>();//对手buff列表
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        DateTime dungeonEndTime;
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>()); } }
        BuffModel m_BuffModel;
        BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
        private int positionType = 1;
        #region Built-in
@@ -101,9 +101,9 @@
            HeroBehaviour.OnStartHandupAI += OnHeroHandupAIStarted;
            dungeonModel.dungeonCoolDownEvent += DungeonCoolDownEvent;
            dungeonModel.updateMissionEvent += UpdateMissionEvent;
            PlayerBuffDatas.Even_ObjAddBuf += AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff += DelBuff;
            PlayerBuffDatas.BuffUpdateEvent += BuffUpdateEvent;
            BuffModel.Even_ObjAddBuf += AddBuff;
            BuffModel.Even_ObjDelBuff += DelBuff;
            BuffModel.BuffUpdateEvent += BuffUpdateEvent;
            OpponentInformation.Instance.ShieldUpdate += ShieldUpdate;
        }
@@ -121,9 +121,9 @@
            HeroBehaviour.OnStartHandupAI -= OnHeroHandupAIStarted;
            dungeonModel.dungeonCoolDownEvent -= DungeonCoolDownEvent;
            dungeonModel.updateMissionEvent -= UpdateMissionEvent;
            PlayerBuffDatas.Even_ObjAddBuf -= AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff -= DelBuff;
            PlayerBuffDatas.BuffUpdateEvent -= BuffUpdateEvent;
            BuffModel.Even_ObjAddBuf -= AddBuff;
            BuffModel.Even_ObjDelBuff -= DelBuff;
            BuffModel.BuffUpdateEvent -= BuffUpdateEvent;
            OpponentInformation.Instance.ShieldUpdate -= ShieldUpdate;
        }
System/Dungeon/DungeonFairyLandWin.cs
@@ -31,12 +31,12 @@
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<DungeonModel>());
            }
        }
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel
        BuffModel m_BuffModel;
        BuffModel Buffmodel
        {
            get
            {
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
            }
        }
        DungeonLiquidModel m_DungeonLiquidModel;
@@ -79,8 +79,8 @@
            UpdateBuf();
            model.dungeonFairyLandChangeEvent += StageChangeEvent;
            model.dungeonInspireLvEvent += DungeonEncourageEvent;
            PlayerBuffDatas.Even_ObjAddBuf += AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff += DeleteBuff;
            BuffModel.Even_ObjAddBuf += AddBuff;
            BuffModel.Even_ObjDelBuff += DeleteBuff;
            teamModel.myTeamRefreshEvent += MyTeamRefreshEvent;
        }
@@ -116,8 +116,8 @@
        {
            model.dungeonFairyLandChangeEvent -= StageChangeEvent;
            model.dungeonInspireLvEvent -= DungeonEncourageEvent;
            PlayerBuffDatas.Even_ObjAddBuf -= AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff -= DeleteBuff;
            BuffModel.Even_ObjAddBuf -= AddBuff;
            BuffModel.Even_ObjDelBuff -= DeleteBuff;
            teamModel.myTeamRefreshEvent -= MyTeamRefreshEvent;
        }
System/Dungeon/DungeonLiquidBehaviour.cs
@@ -30,12 +30,12 @@
            }
        }
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel
        BuffModel m_BuffModel;
        BuffModel Buffmodel
        {
            get
            {
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
            }
        }
@@ -49,8 +49,8 @@
        private void OnEnable()
        {
            ResetTween();
            PlayerBuffDatas.Even_ObjAddBuf += UpdateBuf;
            PlayerBuffDatas.Even_ObjDelBuff += UpdateBuf;
            BuffModel.Even_ObjAddBuf += UpdateBuf;
            BuffModel.Even_ObjDelBuff += UpdateBuf;
            UpdateBuf();
        }
@@ -91,8 +91,8 @@
        private void OnDisable()
        {
            PlayerBuffDatas.Even_ObjAddBuf -= UpdateBuf;
            PlayerBuffDatas.Even_ObjDelBuff -= UpdateBuf;
            BuffModel.Even_ObjAddBuf -= UpdateBuf;
            BuffModel.Even_ObjDelBuff -= UpdateBuf;
        }
        private void UpdateBuf()
System/Dungeon/DungeonLiquidCell.cs
@@ -31,12 +31,12 @@
        }
    }
    PlayerBuffDatas m_BuffModel;
    PlayerBuffDatas Buffmodel
    BuffModel m_BuffModel;
    BuffModel Buffmodel
    {
        get
        {
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
            return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
        }
    }
System/Dungeon/DungeonUseLiquidWin.cs
@@ -30,10 +30,10 @@
            }
        }
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel {
        BuffModel m_BuffModel;
        BuffModel Buffmodel {
            get {
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
            }
        }
@@ -59,8 +59,8 @@
        {
            OnRefershLiquid();
            playerPack.refreshItemCountEvent += OnRefreshItem;
            PlayerBuffDatas.Even_ObjAddBuf += UpdateBuf;
            PlayerBuffDatas.Even_ObjDelBuff += UpdateBuf;
            BuffModel.Even_ObjAddBuf += UpdateBuf;
            BuffModel.Even_ObjDelBuff += UpdateBuf;
            UpdateBuf();
        }
@@ -72,8 +72,8 @@
        protected override void OnPreClose()
        {
            playerPack.refreshItemCountEvent -= OnRefreshItem;
            PlayerBuffDatas.Even_ObjAddBuf -= UpdateBuf;
            PlayerBuffDatas.Even_ObjDelBuff -= UpdateBuf;
            BuffModel.Even_ObjAddBuf -= UpdateBuf;
            BuffModel.Even_ObjDelBuff -= UpdateBuf;
        }
        protected override void OnAfterClose()
System/FairyAu/FairyGrabBossBuffTip.cs
@@ -18,24 +18,24 @@
            get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); }
        }
        PlayerBuffDatas buffModel
        BuffModel buffModel
        {
            get { return ModelCenter.Instance.GetModel<PlayerBuffDatas>(); }
            get { return ModelCenter.Instance.GetModel<BuffModel>(); }
        }
        public void Init()
        {
            PlayerBuffDatas.Even_ObjAddBuf -= AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff -= DeleteBuff;
            BuffModel.Even_ObjAddBuf -= AddBuff;
            BuffModel.Even_ObjDelBuff -= DeleteBuff;
            PlayerBuffDatas.Even_ObjAddBuf += AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff += DeleteBuff;
            BuffModel.Even_ObjAddBuf += AddBuff;
            BuffModel.Even_ObjDelBuff += DeleteBuff;
        }
        public void UnInit()
        {
            PlayerBuffDatas.Even_ObjAddBuf -= AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff -= DeleteBuff;
            BuffModel.Even_ObjAddBuf -= AddBuff;
            BuffModel.Even_ObjDelBuff -= DeleteBuff;
        }
        public void Display(int _npcId)
System/KnapSack/Logic/ItemLogicUtility.cs
@@ -25,10 +25,10 @@
        PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        PlayerBuffDatas buffDatas { get { return ModelCenter.Instance.GetModel<PlayerBuffDatas>(); } }
        PlayerMountDatas mountDatas { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
        PlayerPetDatas petDatas { get { return ModelCenter.Instance.GetModel<PlayerPetDatas>(); } }
        PlayerStrengthengDatas strengthDatas { get { return ModelCenter.Instance.GetModel<PlayerStrengthengDatas>(); } }
        BuffModel buffDatas { get { return ModelCenter.Instance.GetModel<BuffModel>(); } }
        MountModel mountDatas { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        PetModel petDatas { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
        StrengthenModel strengthDatas { get { return ModelCenter.Instance.GetModel<StrengthenModel>(); } }
        MagicianModel magicianModel { get { return ModelCenter.Instance.GetModel<MagicianModel>(); } }
        TrialDungeonModel trialModel { get { return ModelCenter.Instance.GetModel<TrialDungeonModel>(); } }
        ComposeWinModel composeModel { get { return ModelCenter.Instance.GetModel<ComposeWinModel>(); } }
System/KnapSack/Logic/ItemOperateUtility.cs
@@ -11,9 +11,9 @@
    {
        PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        PlayerStrengthengDatas strengthModel { get { return ModelCenter.Instance.GetModel<PlayerStrengthengDatas>(); } }
        StrengthenModel strengthModel { get { return ModelCenter.Instance.GetModel<StrengthenModel>(); } }
        EquipWashModel equipWashModel { get { return ModelCenter.Instance.GetModel<EquipWashModel>(); } }
        PlayerBuffDatas Buffmodel { get { return ModelCenter.Instance.GetModel<PlayerBuffDatas>(); } }
        BuffModel Buffmodel { get { return ModelCenter.Instance.GetModel<BuffModel>(); } }
        ItemOverdueModel itemOverdue { get { return ModelCenter.Instance.GetModel<ItemOverdueModel>(); } }
        FairyModel fairyModel { get { return ModelCenter.Instance.GetModel<FairyModel>(); } }
        BoxGetItemModel BoxModel { get { return ModelCenter.Instance.GetModel<BoxGetItemModel>(); } }
System/KnapSack/Logic/ItemTipsModel.cs
@@ -777,8 +777,8 @@
        {
            if (attrData == null) return;
            var horseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>();
            var petmodel = ModelCenter.Instance.GetModel<PlayerPetDatas>();
            var horseModel = ModelCenter.Instance.GetModel<MountModel>();
            var petmodel = ModelCenter.Instance.GetModel<PetModel>();
            bool isOverdue = ItemLogicUtility.Instance.IsOverdue(attrData.guid, attrData.itemId, attrData.useDataDict);
            HorseConfig horseConfig = null;
            PetInfoConfig petInfo = null;
@@ -2105,8 +2105,8 @@
        #endregion
        #region 物品增加战斗力
        PlayerMountDatas mountDatas { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
        public PlayerStrengthengDatas strengthengmodel { get { return ModelCenter.Instance.GetModel<PlayerStrengthengDatas>(); } }
        MountModel mountDatas { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        public StrengthenModel strengthengmodel { get { return ModelCenter.Instance.GetModel<StrengthenModel>(); } }
        public bool TryGetFightPowerByItemId(int itemId, out int fightPower)
        {
@@ -2632,7 +2632,7 @@
        public bool isHavePutLimit { get; private set; }
        PlayerStrengthengDatas strengthengmodel { get { return ModelCenter.Instance.GetModel<PlayerStrengthengDatas>(); } }
        StrengthenModel strengthengmodel { get { return ModelCenter.Instance.GetModel<StrengthenModel>(); } }
        EquipWashModel washModel { get { return ModelCenter.Instance.GetModel<EquipWashModel>(); } }
        ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        PlayerSuitModel SuitModel { get { return ModelCenter.Instance.GetModel<PlayerSuitModel>(); } }
System/KnapSack/Logic/PackModel.cs
@@ -1190,7 +1190,7 @@
            List<string> strenlist = ItemPlusSumAttrConfig.GetKeys();
            if (strenlist == null || strenlist.Count < 1) return false;
            int playerSumSTR = 0;
            Dictionary<int, EquipmentInitialization> strenInfoDict = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()._EqInfo;
            Dictionary<int, EquipmentInitialization> strenInfoDict = ModelCenter.Instance.GetModel<StrengthenModel>()._EqInfo;
            foreach (var value in strenInfoDict.Values)
            {
                ItemModel itemModel = GetItemByIndex(PackType.Equip, value.EquipIndex);
System/KnapSack/Logic/PetMatInfoWin.cs
@@ -36,8 +36,8 @@
        [SerializeField] CanvasGroup tipAlpha;
        ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        PlayerPetDatas petmodel { get { return ModelCenter.Instance.GetModel<PlayerPetDatas>(); } }
        PlayerMountDatas mountModel { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
        PetModel petmodel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
        MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        Dictionary<int, int> petSkillDict;
        Dictionary<int, List<int>> mountSkillDict;
System/KnapSack/Logic/PlayerStrengtheningLVWin.cs
@@ -33,12 +33,12 @@
        private ItemPlusSumAttrConfig nextActiveSTRConfig = null;
        private int nextActiveCnt = 0;
        PlayerStrengthengDatas m_StrengthengModel;
        PlayerStrengthengDatas strengthengmodel
        StrengthenModel m_StrengthengModel;
        StrengthenModel strengthengmodel
        {
            get
            {
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>());
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>());
            }
        }
System/KnapSack/Logic/WashPointBatchUseWin.cs
@@ -31,12 +31,12 @@
            get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
        }
        PlayerBuffDatas _buffModel;
        PlayerBuffDatas Buffmodel
        BuffModel _buffModel;
        BuffModel Buffmodel
        {
            get
            {
                return _buffModel ?? (_buffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
                return _buffModel ?? (_buffModel = ModelCenter.Instance.GetModel<BuffModel>());
            }
        }
System/KnapSack/New/BatchBuyWin.cs
@@ -41,12 +41,12 @@
            get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
        }
        PlayerBuffDatas _buffModel;
        PlayerBuffDatas Buffmodel
        BuffModel _buffModel;
        BuffModel Buffmodel
        {
            get
            {
                return _buffModel ?? (_buffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
                return _buffModel ?? (_buffModel = ModelCenter.Instance.GetModel<BuffModel>());
            }
        }
System/KnapSack/New/BatchWin.cs
@@ -28,7 +28,7 @@
        ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        PlayerBuffDatas Buffmodel { get { return ModelCenter.Instance.GetModel<PlayerBuffDatas>(); } }
        BuffModel Buffmodel { get { return ModelCenter.Instance.GetModel<BuffModel>(); } }
        private ItemModel itemModel;
        #region Built-in
System/KnapSack/New/RoleEquipStrengthTips.cs
@@ -41,12 +41,12 @@
        _noOpenText = transform.Find("CurrentStrength/NoOpenText").GetComponent<Text>();
       
    }
    PlayerStrengthengDatas m_StrengthengModel;
    PlayerStrengthengDatas strengthengmodel
    StrengthenModel m_StrengthengModel;
    StrengthenModel strengthengmodel
    {
        get
        {
            return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>());
            return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>());
        }
    }
    private void OnEnable()
System/MainInterfacePanel/BuffListWin.cs
@@ -23,12 +23,12 @@
        private ScrollRect _ScrollRect;
        private Dictionary<int, ObjBuff> objBuffic;
        private List<int> _SortList = new List<int>();//排序列表
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel
        BuffModel m_BuffModel;
        BuffModel Buffmodel
        {
            get
            {
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
            }
        }
        #region Built-in
@@ -45,8 +45,8 @@
        {
            objBuffic = Buffmodel._BuffDic;
            m_ScrollerController.OnRefreshCell += OnRefreshGridCell;
            PlayerBuffDatas.Even_ObjAddBuf += AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff += DelBuff;
            BuffModel.Even_ObjAddBuf += AddBuff;
            BuffModel.Even_ObjDelBuff += DelBuff;
            BuffScheduling();
            UpdateControllerPosition();
            OnCreateGridLineCell(m_ScrollerController);
@@ -63,8 +63,8 @@
        protected override void OnAfterClose()
        {
            m_ScrollerController.OnRefreshCell -= OnRefreshGridCell;
            PlayerBuffDatas.Even_ObjAddBuf -= AddBuff;
            PlayerBuffDatas.Even_ObjDelBuff -= DelBuff;
            BuffModel.Even_ObjAddBuf -= AddBuff;
            BuffModel.Even_ObjDelBuff -= DelBuff;
        }
        #endregion
System/MainInterfacePanel/CombatModeWin.cs
@@ -28,8 +28,8 @@
        private int _PkType = 0;
        private int[] AtkTypeList;
        #region Built-in
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>()); } }
        BuffModel m_BuffModel;
        BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
        PKModel m_PKModel;
        PKModel pKModel { get { return m_PKModel ?? (m_PKModel = ModelCenter.Instance.GetModel<PKModel>()); } }
        FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
System/MainInterfacePanel/HeadPortraitTip.cs
@@ -52,8 +52,8 @@
        private float loadingtime = 0f;//默认时间
        VipModel m_VipModel;
        VipModel vipModel { get { return m_VipModel ?? (m_VipModel = ModelCenter.Instance.GetModel<VipModel>()); } }
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>()); } }
        BuffModel m_BuffModel;
        BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
        PKModel m_PKModel;
        PKModel pKModel { get { return m_PKModel ?? (m_PKModel = ModelCenter.Instance.GetModel<PKModel>()); } }
        PlayerMainDate m_MainModel;
@@ -79,8 +79,8 @@
            _TimeTxt.text = DateTime.Now.ToString("HH:mm");
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;//数据的刷新(h0418)
            PlayerDatas.Instance.OnSwitchAttackMode += OnSwitchAttackMode;
            PlayerBuffDatas.Even_ObjAddBuf += BuffGameObject;
            PlayerBuffDatas.Even_ObjDelBuff += BuffGameObject;
            BuffModel.Even_ObjAddBuf += BuffGameObject;
            BuffModel.Even_ObjDelBuff += BuffGameObject;
            PlayerMainDate.ElectricQuantityEvent += OnElectricQuantity;
            OnNetworkState();
            PlayerMainDate.NetworkStateEvent += OnNetworkState;
@@ -110,8 +110,8 @@
        public void UnInit()
        {
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;//数据的刷新(h0418)
            PlayerBuffDatas.Even_ObjAddBuf -= BuffGameObject;
            PlayerBuffDatas.Even_ObjDelBuff -= BuffGameObject;
            BuffModel.Even_ObjAddBuf -= BuffGameObject;
            BuffModel.Even_ObjDelBuff -= BuffGameObject;
            PlayerDatas.Instance.OnSwitchAttackMode -= OnSwitchAttackMode;
            PlayerMainDate.ElectricQuantityEvent -= OnElectricQuantity;
            PlayerMainDate.NetworkStateEvent -= OnNetworkState;
System/MainInterfacePanel/MainInterfaceWin.cs
@@ -64,10 +64,10 @@
        public static event Action IsOpenMaininterface;
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        PlayerMountDatas horsemodel { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
        MountModel horsemodel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        PlayerMainDate onMainModel { get { return ModelCenter.Instance.GetModel<PlayerMainDate>(); } }
        PlayerTaskDatas onPlayerTask { get { return ModelCenter.Instance.GetModel<PlayerTaskDatas>(); } }
        PlayerBuffDatas Buffmodel { get { return ModelCenter.Instance.GetModel<PlayerBuffDatas>(); } }
        BuffModel Buffmodel { get { return ModelCenter.Instance.GetModel<BuffModel>(); } }
        PKModel pKModel { get { return ModelCenter.Instance.GetModel<PKModel>(); } }
        RuneTowerModel runeTowerModel { get { return ModelCenter.Instance.GetModel<RuneTowerModel>(); } }
        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
System/MainInterfacePanel/PKModel.cs
@@ -15,12 +15,12 @@
    [XLua.LuaCallCSharp]
    public class PKModel : Model,IBeforePlayerDataInitialize,IAfterPlayerDataInitialize
    {
        PlayerBuffDatas m_BuffModel;
        PlayerBuffDatas Buffmodel
        BuffModel m_BuffModel;
        BuffModel Buffmodel
        {
            get
            {
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>());
                return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>());
            }
        }
System/MainInterfacePanel/PlayerBuffDatas.cs
@@ -20,7 +20,7 @@
    public int SkillTypeID;
}
public class PlayerBuffDatas : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
public class BuffModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
{
    public int PkType = 0;//PK对象选择
    public delegate void OnObjAddBuff();
System/MainInterfacePanel/PlayerMainDate.cs
@@ -24,8 +24,8 @@
    {
        get { return m_PlayerPackModel ?? (m_PlayerPackModel = ModelCenter.Instance.GetModel<PackModel>()); }
    }
    PlayerBuffDatas m_BuffModel;
    PlayerBuffDatas Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<PlayerBuffDatas>()); } }
    BuffModel m_BuffModel;
    BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
    DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel<DungeonAssistModel>(); } }
    //用于记录XP技能的信息
    public delegate void OnXpSkill();
System/Message/RichTableEvent.cs
@@ -674,7 +674,7 @@
    public static int GetStrengthenType(int _id)
    {
        var _itemCfg = ItemConfig.Get(_id);
        var _type = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>().GameDefineIndex(_itemCfg.EquipPlace);
        var _type = ModelCenter.Instance.GetModel<StrengthenModel>().GameDefineIndex(_itemCfg.EquipPlace);
        return _type;
    }
System/Mount/AutoTrainTipsWin.cs
@@ -37,8 +37,8 @@
        private bool isBool = true;
        public static bool IsFairy = false;
        List<HorseSkillClass> MountSkills = new List<HorseSkillClass>();
        PlayerMountDatas m_MountModel;
        PlayerMountDatas mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        MountModel m_MountModel;
        MountModel mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        protected override void BindController()
        {
            moutwin = WindowCenter.Instance.Get<MountWin>();
System/Mount/MountModel.cs
File was renamed from System/Mount/PlayerMountDatas.cs
@@ -1,753 +1,753 @@
using Snxxz.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
//用于坐骑
[XLua.LuaCallCSharp]
public class HorseClass
{
    public int Lv;//坐骑等级
    public int Exp;//经验
}
public enum HorseEnum
{
    HorseDan = 0,//坐骑丹
    HorseDebris = 1,//坐骑碎片
    HorseStone = 2,//坐骑魂石
}
public class HorseSkillClass
{
    public int SkillID;//技能ID
    public int SkillItem;//升级技能所需道具
    public int HorseID;//坐骑ID
    public int HorseLV;//所需等级
}
public class PlayerMountDatas : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
{
    public string _HorseIDNow = string.Empty;//获取当前的坐骑ID
    public int HorseIDNow = 0;
    public delegate void MountHA301Update(int _HorseID);
    public static event MountHA301Update Event_MountHA301U;//坐骑的更新
    public delegate void MountHA301Add(int _HorseID);
    public static event MountHA301Add Event_MountHA301A;//坐骑的添加
    public delegate void MountHA339Update(HA339_tagMCAttrFruitEatCntList info);
    public static event MountHA339Update Event_MountHA339U;//坐骑魂石的刷新
    public Dictionary<int, HorseSkillClass> GetMountSkillAndItem = new Dictionary<int, HorseSkillClass>();//1技能TypeID,所需的消耗物品ID
    public delegate void OnMountAlteration(string NowMount);//当前坐骑变更
    public static event OnMountAlteration Event_MountAlteration;
    public static event Action OnMountUieffectUpLv;//关于坐骑升级时特效播放时的调用
    public Dictionary<int, HorseClass> _DicHorse = new Dictionary<int, HorseClass>();//当前的坐骑字典
    public Dictionary<int, int> _DicMountItem = new Dictionary<int, int>();//坐骑魂石的字典
    public Dictionary<int, Redpoint> mountRedpoint = new Dictionary<int, Redpoint>();//坐骑外观切换红点
    public Dictionary<int, Redpoint> DeblockingRedPoint = new Dictionary<int, Redpoint>();//激活按钮红点
    public Dictionary<int, Redpoint> ASingleFeedRedPoint = new Dictionary<int, Redpoint>();//单次喂养红点
    private List<HorseConfig> SortMount = new List<HorseConfig>();//用于红点排序
    public int MountStoneItemId = 0;
    public bool IsOk = false;
    public List<int> ListEffectSkill = new List<int>();
    private int HorseDanExp = 0;//坐骑丹经验
    PackModel _playerPack;
    PackModel playerPack
    {
        get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
    }
    public bool HorseRidingBool = false;//用来判断玩家是都在骑马
    public bool Wait = true;//等待回包(使用坐骑丹)
    public static Action<int, bool> MultipleEvent;
    public static event Action PlayerLoginOKData;
    private Dictionary<int, int> DicDefaultMount = new Dictionary<int, int>();
    public override void Init()
    {
        ToAddSorting();
        playerPack.refreshItemCountEvent += OnItemRefreshEvent;
        MountWin.RedPointMountDan += RedPointMountDan;
        MountSkillAndItem();
        MountNumberPreservation();
        string str = FuncConfigConfig.Get("MountSkillEffect").Numerical1;
        int[] listeffect = ConfigParse.GetMultipleStr<int>(str);
        ListEffectSkill.Clear();
        for (int i = 0; i < listeffect.Length; i++)
        {
            ListEffectSkill.Add(listeffect[i]);
        }
        string MountRedDotstr = FuncConfigConfig.Get("MountPetRedDot").Numerical1;
        DicDefaultMount = ConfigParse.GetDic<int, int>(MountRedDotstr);
        string HorseUpItem = FuncConfigConfig.Get("HorseUpItem").Numerical2;
        HorseDanExp = int.Parse(HorseUpItem);
    }
    public override void UnInit()
    {
        MountWin.RedPointMountDan -= RedPointMountDan;
        playerPack.refreshItemCountEvent -= OnItemRefreshEvent;
    }
    public void OnBeforePlayerDataInitialize()
    {
        IsOk = false;
        _HorseIDNow = string.Empty;
        HorseIDNow = 0;
        _DicHorse.Clear();
        HorseRidingBool = false;
        Wait = true;
    }
    public void OnPlayerLoginOk()
    {
        GlobalTimeEvent.Instance.secondEvent -= secondEvent;
        GlobalTimeEvent.Instance.secondEvent += secondEvent;
        IsOk = true;
        SinglePack singPack = playerPack.GetSinglePack(PackType.Equip);
        if (singPack == null) return;
        foreach (var index in singPack.GetAllItems().Keys)
        {
            OnItemRefreshEvent(singPack.type, index, singPack.GetAllItems()[index].itemId);
        }
        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;
        }
    }
    List<HorseConfig> Hconfigs = new List<HorseConfig>();
    List<HorseUpConfig> Uconfigs = new List<HorseUpConfig>();
    private void MountNumberPreservation()//用来对坐骑个数的保存
    {
        if (mountRedpoint.Count != 0)
            return;
        // var configs = HorseConfig.GetValues();
        if (Hconfigs.Count <= 0)
        {
            Hconfigs = HorseConfig.GetValues();
        }
        int type = 0;
        foreach (var config in Hconfigs)
        {
            if (!mountRedpoint.ContainsKey(config.HorseID))
            {
                type += 1;
                int mountID = config.HorseID;
                int RedPoint_Mountkey = MainRedDot.RedPoint_MountPackKey * 10 + mountID;
                Redpoint redPointMountStare = new Redpoint(Redpoint_key1, RedPoint_Mountkey);
                mountRedpoint.Add(mountID, redPointMountStare);
                int RedPoint_Mountkey1 = RedPoint_Mountkey * 10 + type;
                Redpoint redPointMountStare1 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey1);
                DeblockingRedPoint.Add(mountID, redPointMountStare1);
                int RedPoint_Mountkey2 = RedPoint_Mountkey1 * 10 + type;
                Redpoint redPointMountStare2 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey2);
                ASingleFeedRedPoint.Add(mountID, redPointMountStare2);
            }
        }
    }
    private void MountChangeRedPoint()//坐骑激活红点
    {
        foreach (var key in DeblockingRedPoint.Keys)
        {
            DeblockingRedPoint[key].state = RedPointState.None;
        }
        if (!FuncOpen.Instance.IsFuncOpen(8))
        {
            return;
        }
        if (Hconfigs.Count <= 0)
        {
            Hconfigs = HorseConfig.GetValues();
        }
        //  var configs = HorseConfig.GetValues();
        foreach (var config in Hconfigs)
        {
            int unlockItemID = config.UnlockItemID;
            int itemCount = playerPack.GetItemCountByID(PackType.Item, unlockItemID);
            int unlockItemCnt = config.UnlockItemCnt;
            if (itemCount >= unlockItemCnt && !_DicHorse.ContainsKey(config.HorseID))
            {
                DeblockingRedPoint[config.HorseID].state = RedPointState.Simple;
            }
        }
    }
    void MountSkillAndItem()//获取坐骑技能
    {
        if (GetMountSkillAndItem.Count != 0)
            return;
        if (Uconfigs.Count <= 0)
        {
            Uconfigs = HorseUpConfig.GetValues();
        }
        //var configs = HorseUpConfig.GetValues();
        foreach (var config in Uconfigs)
        {
            for (int i = 0; i < config.SkillID.Length; i++)
            {
                int skillID = config.SkillID[i];
                if (skillID != 0 && !GetMountSkillAndItem.ContainsKey(skillID))
                {
                    SkillConfig _skillModel = SkillConfig.Get(skillID);
                    HorseSkillClass horseSkillClass = new HorseSkillClass();
                    horseSkillClass.SkillID = skillID;
                    horseSkillClass.SkillItem = _skillModel.ExAttr4;
                    horseSkillClass.HorseID = config.HorseID;
                    horseSkillClass.HorseLV = config.LV;
                    GetMountSkillAndItem.Add(skillID, horseSkillClass);
                }
            }
        }
    }
    private const int Redpoint_key1 = 1050101;
    public Redpoint redPointStre1 = new Redpoint(MainRedDot.RedPoint_MountPackKey, Redpoint_key1);//坐骑外观
    private const int Redpoint_key2 = 1050102;
    public Redpoint redPointStre2 = new Redpoint(MainRedDot.RedPoint_MountPackKey, Redpoint_key2);//坐骑兽魂
    private void OnItemRefreshEvent(PackType type, int index, int id)
    {
        MountH0704(playerPack.GetItemByIndex(type, index));
        if (type == PackType.Item)
        {
            if (_DicMountItem.ContainsKey(id))
            {
                MountStoneRed();
            }
            MountChangeRedPoint();
            MountDanRed();
        }
    }
    private void MountStoneRed()//坐骑魂石红点
    {
        redPointStre2.state = RedPointState.None;
        if (!FuncOpen.Instance.IsFuncOpen(8))
            return;
        int type = 0;
        foreach (var key in _DicMountItem.Keys)
        {
            var AttrFruit = AttrFruitConfig.Get(key);
            if (AttrFruit == null)
            {
                continue;
            }
            if (_DicMountItem[key] >= AttrFruit.MaxUseCnt)
            {
                continue;
            }
            type += playerPack.GetItemCountByID(PackType.Item, key);
        }
        if (type > 0)
        {
            redPointStre2.state = RedPointState.Simple;
            return;
        }
    }
    private void RedPointMountDan()
    {
        MountDanRed();
    }
    private void ToAddSorting()
    {
        SortMount.Clear();
        if (Hconfigs.Count <= 0)
        {
            Hconfigs = HorseConfig.GetValues();
        }
        SortMount = Hconfigs;
        SortMount.Sort(Compare);
    }
    int Compare(HorseConfig x, HorseConfig y)//数组排列
    {
        if (x.Sort.CompareTo(y.Sort) != 0)
        {
            return x.Sort.CompareTo(y.Sort);
        }
        return 1;
    }
    private void MountDanRed()//关于坐骑丹红点
    {
        foreach (var key in ASingleFeedRedPoint.Keys)
        {
            ASingleFeedRedPoint[key].state = RedPointState.None;
        }
        if (!FuncOpen.Instance.IsFuncOpen(8) || _DicHorse.Count == 0)
        {
            return;
        }
        List<int> IntList = new List<int>();
        FuncConfigConfig _tagfun = FuncConfigConfig.Get("HorseUpItem");
        ItemConfig _tagchine = ItemConfig.Get(int.Parse(_tagfun.Numerical1));
        int number = playerPack.GetItemCountByID(PackType.Item, _tagchine.ID);
        for (int i = 0; i < SortMount.Count; i++)
        {
            int horseID = SortMount[i].HorseID;
            int MaxLv = HorseConfig.Get(horseID).MaxLV;
            if (_DicHorse.ContainsKey(horseID) && _DicHorse[horseID].Lv < MaxLv)
            {
                int _NeedExp = HorseUpConfig.GetHorseIDAndLV(horseID, (_DicHorse[horseID].Lv)).NeedExp;
                int NeedExp = _NeedExp - _DicHorse[horseID].Exp;
                int NeedNumber = Mathf.CeilToInt((float)NeedExp / HorseDanExp);
                if (number >= NeedNumber)
                {
                    IntList.Add(horseID);
                }
            }
        }
        foreach (var key in _DicHorse.Keys)//因为有成就任务限制所有 第一只坐骑红点逻辑特殊写
        {
            if (DicDefaultMount.ContainsKey(key) && DicDefaultMount[key] > _DicHorse[key].Lv
                && number > 0 && ASingleFeedRedPoint.ContainsKey(key))
            {
                ASingleFeedRedPoint[key].state = RedPointState.Simple;
                return;
            }
        }
        int GetMinLV = 100;
        int GetMountID = 0;
        List<int> IntListSkill = new List<int>();
        for (int j = 0; j < SortMount.Count; j++)//选取出可升级坐骑等级最低且有未激活技能的坐骑切经验最少
        {
            int Id = SortMount[j].HorseID;
            int GetHorseMaxLv = GetMountSkillMaxLV(Id);
            if (IntList.Contains(Id) && _DicHorse.ContainsKey(Id))
            {
                if (_DicHorse[Id].Lv < GetHorseMaxLv)
                {
                    IntListSkill.Add(Id);
                }
            }
        }
        int SkillHorseId = GetRedPointMountID(IntListSkill);
        if (SkillHorseId != 0 && ASingleFeedRedPoint.ContainsKey(SkillHorseId))
        {
            ASingleFeedRedPoint[SkillHorseId].state = RedPointState.Simple;
            return;
        }
        for (int j = 0; j < SortMount.Count; j++)//选取出可升级坐骑等级最低
        {
            int Id = SortMount[j].HorseID;
            if (IntList.Contains(Id) && _DicHorse.ContainsKey(Id))
            {
                if (_DicHorse[Id].Lv < GetMinLV)
                {
                    GetMinLV = _DicHorse[Id].Lv;
                    GetMountID = Id;
                }
            }
        }
        if (GetMountID != 0 && ASingleFeedRedPoint.ContainsKey(GetMountID))
        {
            ASingleFeedRedPoint[GetMountID].state = RedPointState.Simple;
            return;
        }
    }
    public int GetMinExpMount()
    {
        foreach (var key in ASingleFeedRedPoint.Keys)//当存在驯养红点时选中当有红点的那只
        {
            if (ASingleFeedRedPoint[key].state == RedPointState.Simple)
            {
                return key;
            }
        }
        int GetMountID = 0;
        int MountLV = 999;
        List<int> IntListSkill = new List<int>();
        foreach (var key in _DicHorse.Keys)
        {
            var mountConfig = HorseConfig.Get(key);
            if (_DicHorse[key].Lv < mountConfig.MaxLV)
            {
                IntListSkill.Add(key);
            }
        }
        int SkillHorseId = GetRedPointMountID(IntListSkill);
        if (SkillHorseId != 0)
        {
            GetMountID = SkillHorseId;
            return GetMountID;
        }
        foreach (var key in _DicHorse.Keys)//无红点时跳转选中最低阶数且未满级
        {
            var mountConfig = HorseConfig.Get(key);
            if (_DicHorse[key].Lv < MountLV && _DicHorse[key].Lv < mountConfig.MaxLV)
            {
                GetMountID = key;
                MountLV = _DicHorse[key].Lv;
            }
        }
        return GetMountID;
    }
    private int GetRedPointMountID(List<int> MountList)
    {
        int GetSkillMinLv = 999;
        for (int i = 0; i < MountList.Count; i++)
        {
            int SkillminLv = GetSkillLvDis(MountList[i]);
            if (SkillminLv < GetSkillMinLv && SkillminLv!=0)
            {
                GetSkillMinLv = SkillminLv;
            }
        }
        int mountId = 0;
        int ExpNumber = 999999999;
        for (int i = 0; i < MountList.Count; i++)
        {
            int SkillLv = GetSkillLvDis(MountList[i]);
            if (SkillLv > GetSkillMinLv || SkillLv==0)
            {
                continue;
            }
            var Hor1 = HorseUpConfig.GetHorseIDAndLV(MountList[i], SkillLv);
            var Hor2 = HorseUpConfig.GetHorseIDAndLV(MountList[i],_DicHorse[(MountList[i])].Lv);
            int Exp = Hor1.NeedExpTotal - Hor2.NeedExpTotal - _DicHorse[(MountList[i])].Exp;
            if (Exp < ExpNumber)
            {
                ExpNumber = Exp;
                mountId = MountList[i];
            }
        }
        return mountId;
    }
    private int GetSkillLvDis(int MountId)//获取离升级最近的技能等级
    {
        int SkillLv = 0;
        foreach (var key in GetMountSkillAndItem.Keys)
        {
            if (_DicHorse.ContainsKey(MountId) && GetMountSkillAndItem[key].HorseID == MountId)
            {
                if (GetMountSkillAndItem[key].HorseLV > _DicHorse[MountId].Lv)
                {
                    SkillLv = GetMountSkillAndItem[key].HorseLV;
                    return SkillLv;
                }
            }
        }
        return SkillLv;
    }
    public int GetMountSkillMaxLV(int MountId)//获取坐骑最大技能等级
    {
        int SkillLv = 0;
        foreach (var key in GetMountSkillAndItem.Keys)
        {
            if (GetMountSkillAndItem[key].HorseID == MountId)
            {
                if (GetMountSkillAndItem[key].HorseLV > SkillLv)
                {
                    SkillLv = GetMountSkillAndItem[key].HorseLV;
                }
            }
        }
        return SkillLv;
    }
    public void MountH0704(ItemModel info)//获取当前的坐骑
    {
        if (info == null || info.packType != PackType.Equip)
            return;
        if (info.itemPlace == (byte)RoleEquipType.mount)//坐骑位置19
        {
            if (Hconfigs.Count <= 0)
            {
                Hconfigs = HorseConfig.GetValues();
            }
            // var configs = HorseConfig.GetValues();
            foreach (var config in Hconfigs)
            {
                if (config.ItemID == info.itemId)
                {
                    HorseIDNow = config.HorseID;
                    _HorseIDNow = config.HorseID.ToString();
                    if (Event_MountAlteration != null && IsOk)
                    {
                        Event_MountAlteration(_HorseIDNow);
                    }
                }
            }
        }
        MountDanRed();
        MountStoneRed();
    }
    public void MountHA301(HA301_tagTrainHorseData info)//已拥有的坐骑(获得与刷新)
    {
        for (int i = 0; i < info.Num; i++)
        {
            if (_DicHorse.ContainsKey((int)info.InfoList[i].HorseID))
            {
                if ((int)info.InfoList[i].LV > _DicHorse[(int)info.InfoList[i].HorseID].Lv)
                {
                    if (OnMountUieffectUpLv != null && IsOk)
                    {
                        OnMountUieffectUpLv();
                    }
                }
                _DicHorse[(int)info.InfoList[i].HorseID].Lv = (int)info.InfoList[i].LV;//坐骑等级
                _DicHorse[(int)info.InfoList[i].HorseID].Exp = (int)info.InfoList[i].Exp;//坐骑经验
                if (Event_MountHA301U != null && IsOk)
                {
                    Event_MountHA301U((int)info.InfoList[i].HorseID);
                }
            }
            else
            {
                HorseClass _horseClass = new HorseClass();
                _horseClass.Lv = (int)info.InfoList[i].LV;//坐骑等级
                _horseClass.Exp = (int)info.InfoList[i].Exp;//坐骑经验
                _DicHorse.Add((int)info.InfoList[i].HorseID, _horseClass);
                if (Event_MountHA301A != null && IsOk)
                {
                    Event_MountHA301A((int)info.InfoList[i].HorseID);
                }
            }
        }
        MountStoneRed();
        MountChangeRedPoint();
        MountDanRed();
    }
    public void MountHA339(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 (_DicMountItem.ContainsKey((int)info.EatCntList[i].ItemID))
            {
                _DicMountItem[(int)info.EatCntList[i].ItemID] = (int)info.EatCntList[i].EatCnt;
                if (Event_MountHA339U != null)
                    Event_MountHA339U(info);//坐骑魂石的刷新
            }
            else
            {
                if (configItem.Type == 22)
                {
                    _DicMountItem.Add((int)info.EatCntList[i].ItemID, (int)info.EatCntList[i].EatCnt);
                }
            }
        }
        MountStoneRed();
    }
    public int GetAllMountAttack()//得到所有坐骑的攻击
    {
        Dictionary<int, int> dicStone = Bonuses();
        if (_DicHorse.Count == 0)
        {
            return dicStone[7];
        }
        else
        {
            int _AttT = 0;//攻击
            foreach (int key in _DicHorse.Keys)
            {
                HorseUpConfig tagMode = HorseUpConfig.GetHorseIDAndLV(key, _DicHorse[key].Lv);
                int[] intAttrValue = tagMode.AttrValue;
                if (intAttrValue.Length != 0)
                {
                    _AttT += intAttrValue[1];
                }
            }
            return _AttT + dicStone[7];
        }
    }
    Dictionary<int, int> Bonuses()//属性加成
    {
        Dictionary<int, int> dic = new Dictionary<int, int>();
        dic.Clear();
        dic.Add(6, 0);//生命
        dic.Add(7, 0);//攻击
        dic.Add(8, 0);//防御
        foreach (int key in _DicMountItem.Keys)
        {
            if (_DicMountItem[key] != 0)
            {
                ItemConfig itemModel = ItemConfig.Get(key);
                if (dic.ContainsKey(itemModel.Effect1))
                {
                    dic[itemModel.Effect1] += itemModel.EffectValueA1 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect2))
                {
                    dic[itemModel.Effect2] += itemModel.EffectValueA2 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect3))
                {
                    dic[itemModel.Effect3] += itemModel.EffectValueA3 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect4))
                {
                    dic[itemModel.Effect4] += itemModel.EffectValueA4 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect5))
                {
                    dic[itemModel.Effect5] += itemModel.EffectValueA5 * _DicMountItem[key];
                }
            }
        }
        return dic;
    }
    public bool IsHint(HorseEnum horseEnum, int id = 0)//True提示,False不提示
    {
        bool iSHint = false;
        switch (horseEnum)
        {
            case HorseEnum.HorseDan:
                foreach (var key in _DicHorse.Keys)
                {
                    HorseConfig horseConfig = HorseConfig.Get(key);
                    if (horseConfig.MaxLV > _DicHorse[key].Lv)
                    {
                        iSHint = true;
                    }
                }
                return iSHint;
            case HorseEnum.HorseDebris:
                if (Hconfigs.Count <= 0)
                {
                    Hconfigs = HorseConfig.GetValues();
                }
                foreach (var value in Hconfigs)
                {
                    if (value.UnlockItemID == id)
                    {
                        if (!_DicHorse.ContainsKey(value.HorseID))
                        {
                            iSHint = true;
                        }
                    }
                }
                return iSHint;
            case HorseEnum.HorseStone:
                int _maxuse = AttrFruitConfig.Get(id).MaxUseCnt;
                if (_DicMountItem.ContainsKey(id))
                {
                    if (_maxuse > _DicMountItem[id])
                    {
                        iSHint = true;
                    }
                }
                return iSHint;
            default:
                return true;
        }
    }
    public void AppearanceSwitch(int HorseID)//坐骑外观切换
    {
        CA502_tagPlayerChooseHorse _tagCA502 = new CA502_tagPlayerChooseHorse();
        _tagCA502.Index = (uint)HorseID;
        GameNetSystem.Instance.SendInfo(_tagCA502);
    }
    public void MountDanUse(int HorseID, int Number, bool IsAutoBuy = false)//是否自动购买
    {
        CA527_tagCMHorseUp _tagC527 = new CA527_tagCMHorseUp();//向服务端发包坐骑经验单
        _tagC527.HorseID = (uint)HorseID;
        _tagC527.UseItemCnt = (byte)Number;
        if (IsAutoBuy)
        {
            _tagC527.IsAutoBuy = 1;
        }
        GameNetSystem.Instance.SendInfo(_tagC527);
    }
    public int IsHorsePanelState()
    {
        int Type = 0;
        foreach (var value in DeblockingRedPoint.Values)
        {
            if (value.state == RedPointState.Simple)
            {
                Type = 2;
                return Type;
            }
        }
        if (MainRedDot.Instance.redPointMountFunc.state == RedPointState.Simple)
        {
            Type = 1;
            return Type;
        }
        return Type;
    }
    #region 预览坐骑碎片属性
    Dictionary<int, int> mountAttrDict = new Dictionary<int, int>();
    public Dictionary<int, int> GetMountAttrAddDict(int mountCode)
    {
        HorseConfig horseConfig = HorseConfig.Get(mountCode);
        mountAttrDict.Clear();
        if (horseConfig == null) return mountAttrDict;
        int maxRank = horseConfig.MaxLV;
        HorseUpConfig cost = HorseUpConfig.GetHorseIDAndLV(mountCode, maxRank);
        if (cost != null)
        {
            int[] attrIds = cost.AttrType;
            int[] attrValues = cost.AttrValue;
            if (attrIds != null)
            {
                for (int j = 0; j < attrIds.Length; j++)
                {
                    if (!mountAttrDict.ContainsKey(attrIds[j]))
                    {
                        mountAttrDict.Add(attrIds[j], attrValues[j]);
                    }
                    else
                    {
                        mountAttrDict[attrIds[j]] += attrValues[j];
                    }
                }
            }
        }
        return mountAttrDict;
    }
    #endregion
}
using Snxxz.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
//用于坐骑
[XLua.LuaCallCSharp]
public class HorseClass
{
    public int Lv;//坐骑等级
    public int Exp;//经验
}
public enum HorseEnum
{
    HorseDan = 0,//坐骑丹
    HorseDebris = 1,//坐骑碎片
    HorseStone = 2,//坐骑魂石
}
public class HorseSkillClass
{
    public int SkillID;//技能ID
    public int SkillItem;//升级技能所需道具
    public int HorseID;//坐骑ID
    public int HorseLV;//所需等级
}
public class MountModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
{
    public string _HorseIDNow = string.Empty;//获取当前的坐骑ID
    public int HorseIDNow = 0;
    public delegate void MountHA301Update(int _HorseID);
    public static event MountHA301Update Event_MountHA301U;//坐骑的更新
    public delegate void MountHA301Add(int _HorseID);
    public static event MountHA301Add Event_MountHA301A;//坐骑的添加
    public delegate void MountHA339Update(HA339_tagMCAttrFruitEatCntList info);
    public static event MountHA339Update Event_MountHA339U;//坐骑魂石的刷新
    public Dictionary<int, HorseSkillClass> GetMountSkillAndItem = new Dictionary<int, HorseSkillClass>();//1技能TypeID,所需的消耗物品ID
    public delegate void OnMountAlteration(string NowMount);//当前坐骑变更
    public static event OnMountAlteration Event_MountAlteration;
    public static event Action OnMountUieffectUpLv;//关于坐骑升级时特效播放时的调用
    public Dictionary<int, HorseClass> _DicHorse = new Dictionary<int, HorseClass>();//当前的坐骑字典
    public Dictionary<int, int> _DicMountItem = new Dictionary<int, int>();//坐骑魂石的字典
    public Dictionary<int, Redpoint> mountRedpoint = new Dictionary<int, Redpoint>();//坐骑外观切换红点
    public Dictionary<int, Redpoint> DeblockingRedPoint = new Dictionary<int, Redpoint>();//激活按钮红点
    public Dictionary<int, Redpoint> ASingleFeedRedPoint = new Dictionary<int, Redpoint>();//单次喂养红点
    private List<HorseConfig> SortMount = new List<HorseConfig>();//用于红点排序
    public int MountStoneItemId = 0;
    public bool IsOk = false;
    public List<int> ListEffectSkill = new List<int>();
    private int HorseDanExp = 0;//坐骑丹经验
    PackModel _playerPack;
    PackModel playerPack
    {
        get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
    }
    public bool HorseRidingBool = false;//用来判断玩家是都在骑马
    public bool Wait = true;//等待回包(使用坐骑丹)
    public static Action<int, bool> MultipleEvent;
    public static event Action PlayerLoginOKData;
    private Dictionary<int, int> DicDefaultMount = new Dictionary<int, int>();
    public override void Init()
    {
        ToAddSorting();
        playerPack.refreshItemCountEvent += OnItemRefreshEvent;
        MountWin.RedPointMountDan += RedPointMountDan;
        MountSkillAndItem();
        MountNumberPreservation();
        string str = FuncConfigConfig.Get("MountSkillEffect").Numerical1;
        int[] listeffect = ConfigParse.GetMultipleStr<int>(str);
        ListEffectSkill.Clear();
        for (int i = 0; i < listeffect.Length; i++)
        {
            ListEffectSkill.Add(listeffect[i]);
        }
        string MountRedDotstr = FuncConfigConfig.Get("MountPetRedDot").Numerical1;
        DicDefaultMount = ConfigParse.GetDic<int, int>(MountRedDotstr);
        string HorseUpItem = FuncConfigConfig.Get("HorseUpItem").Numerical2;
        HorseDanExp = int.Parse(HorseUpItem);
    }
    public override void UnInit()
    {
        MountWin.RedPointMountDan -= RedPointMountDan;
        playerPack.refreshItemCountEvent -= OnItemRefreshEvent;
    }
    public void OnBeforePlayerDataInitialize()
    {
        IsOk = false;
        _HorseIDNow = string.Empty;
        HorseIDNow = 0;
        _DicHorse.Clear();
        HorseRidingBool = false;
        Wait = true;
    }
    public void OnPlayerLoginOk()
    {
        GlobalTimeEvent.Instance.secondEvent -= secondEvent;
        GlobalTimeEvent.Instance.secondEvent += secondEvent;
        IsOk = true;
        SinglePack singPack = playerPack.GetSinglePack(PackType.Equip);
        if (singPack == null) return;
        foreach (var index in singPack.GetAllItems().Keys)
        {
            OnItemRefreshEvent(singPack.type, index, singPack.GetAllItems()[index].itemId);
        }
        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;
        }
    }
    List<HorseConfig> Hconfigs = new List<HorseConfig>();
    List<HorseUpConfig> Uconfigs = new List<HorseUpConfig>();
    private void MountNumberPreservation()//用来对坐骑个数的保存
    {
        if (mountRedpoint.Count != 0)
            return;
        // var configs = HorseConfig.GetValues();
        if (Hconfigs.Count <= 0)
        {
            Hconfigs = HorseConfig.GetValues();
        }
        int type = 0;
        foreach (var config in Hconfigs)
        {
            if (!mountRedpoint.ContainsKey(config.HorseID))
            {
                type += 1;
                int mountID = config.HorseID;
                int RedPoint_Mountkey = MainRedDot.RedPoint_MountPackKey * 10 + mountID;
                Redpoint redPointMountStare = new Redpoint(Redpoint_key1, RedPoint_Mountkey);
                mountRedpoint.Add(mountID, redPointMountStare);
                int RedPoint_Mountkey1 = RedPoint_Mountkey * 10 + type;
                Redpoint redPointMountStare1 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey1);
                DeblockingRedPoint.Add(mountID, redPointMountStare1);
                int RedPoint_Mountkey2 = RedPoint_Mountkey1 * 10 + type;
                Redpoint redPointMountStare2 = new Redpoint(RedPoint_Mountkey, RedPoint_Mountkey2);
                ASingleFeedRedPoint.Add(mountID, redPointMountStare2);
            }
        }
    }
    private void MountChangeRedPoint()//坐骑激活红点
    {
        foreach (var key in DeblockingRedPoint.Keys)
        {
            DeblockingRedPoint[key].state = RedPointState.None;
        }
        if (!FuncOpen.Instance.IsFuncOpen(8))
        {
            return;
        }
        if (Hconfigs.Count <= 0)
        {
            Hconfigs = HorseConfig.GetValues();
        }
        //  var configs = HorseConfig.GetValues();
        foreach (var config in Hconfigs)
        {
            int unlockItemID = config.UnlockItemID;
            int itemCount = playerPack.GetItemCountByID(PackType.Item, unlockItemID);
            int unlockItemCnt = config.UnlockItemCnt;
            if (itemCount >= unlockItemCnt && !_DicHorse.ContainsKey(config.HorseID))
            {
                DeblockingRedPoint[config.HorseID].state = RedPointState.Simple;
            }
        }
    }
    void MountSkillAndItem()//获取坐骑技能
    {
        if (GetMountSkillAndItem.Count != 0)
            return;
        if (Uconfigs.Count <= 0)
        {
            Uconfigs = HorseUpConfig.GetValues();
        }
        //var configs = HorseUpConfig.GetValues();
        foreach (var config in Uconfigs)
        {
            for (int i = 0; i < config.SkillID.Length; i++)
            {
                int skillID = config.SkillID[i];
                if (skillID != 0 && !GetMountSkillAndItem.ContainsKey(skillID))
                {
                    SkillConfig _skillModel = SkillConfig.Get(skillID);
                    HorseSkillClass horseSkillClass = new HorseSkillClass();
                    horseSkillClass.SkillID = skillID;
                    horseSkillClass.SkillItem = _skillModel.ExAttr4;
                    horseSkillClass.HorseID = config.HorseID;
                    horseSkillClass.HorseLV = config.LV;
                    GetMountSkillAndItem.Add(skillID, horseSkillClass);
                }
            }
        }
    }
    private const int Redpoint_key1 = 1050101;
    public Redpoint redPointStre1 = new Redpoint(MainRedDot.RedPoint_MountPackKey, Redpoint_key1);//坐骑外观
    private const int Redpoint_key2 = 1050102;
    public Redpoint redPointStre2 = new Redpoint(MainRedDot.RedPoint_MountPackKey, Redpoint_key2);//坐骑兽魂
    private void OnItemRefreshEvent(PackType type, int index, int id)
    {
        MountH0704(playerPack.GetItemByIndex(type, index));
        if (type == PackType.Item)
        {
            if (_DicMountItem.ContainsKey(id))
            {
                MountStoneRed();
            }
            MountChangeRedPoint();
            MountDanRed();
        }
    }
    private void MountStoneRed()//坐骑魂石红点
    {
        redPointStre2.state = RedPointState.None;
        if (!FuncOpen.Instance.IsFuncOpen(8))
            return;
        int type = 0;
        foreach (var key in _DicMountItem.Keys)
        {
            var AttrFruit = AttrFruitConfig.Get(key);
            if (AttrFruit == null)
            {
                continue;
            }
            if (_DicMountItem[key] >= AttrFruit.MaxUseCnt)
            {
                continue;
            }
            type += playerPack.GetItemCountByID(PackType.Item, key);
        }
        if (type > 0)
        {
            redPointStre2.state = RedPointState.Simple;
            return;
        }
    }
    private void RedPointMountDan()
    {
        MountDanRed();
    }
    private void ToAddSorting()
    {
        SortMount.Clear();
        if (Hconfigs.Count <= 0)
        {
            Hconfigs = HorseConfig.GetValues();
        }
        SortMount = Hconfigs;
        SortMount.Sort(Compare);
    }
    int Compare(HorseConfig x, HorseConfig y)//数组排列
    {
        if (x.Sort.CompareTo(y.Sort) != 0)
        {
            return x.Sort.CompareTo(y.Sort);
        }
        return 1;
    }
    private void MountDanRed()//关于坐骑丹红点
    {
        foreach (var key in ASingleFeedRedPoint.Keys)
        {
            ASingleFeedRedPoint[key].state = RedPointState.None;
        }
        if (!FuncOpen.Instance.IsFuncOpen(8) || _DicHorse.Count == 0)
        {
            return;
        }
        List<int> IntList = new List<int>();
        FuncConfigConfig _tagfun = FuncConfigConfig.Get("HorseUpItem");
        ItemConfig _tagchine = ItemConfig.Get(int.Parse(_tagfun.Numerical1));
        int number = playerPack.GetItemCountByID(PackType.Item, _tagchine.ID);
        for (int i = 0; i < SortMount.Count; i++)
        {
            int horseID = SortMount[i].HorseID;
            int MaxLv = HorseConfig.Get(horseID).MaxLV;
            if (_DicHorse.ContainsKey(horseID) && _DicHorse[horseID].Lv < MaxLv)
            {
                int _NeedExp = HorseUpConfig.GetHorseIDAndLV(horseID, (_DicHorse[horseID].Lv)).NeedExp;
                int NeedExp = _NeedExp - _DicHorse[horseID].Exp;
                int NeedNumber = Mathf.CeilToInt((float)NeedExp / HorseDanExp);
                if (number >= NeedNumber)
                {
                    IntList.Add(horseID);
                }
            }
        }
        foreach (var key in _DicHorse.Keys)//因为有成就任务限制所有 第一只坐骑红点逻辑特殊写
        {
            if (DicDefaultMount.ContainsKey(key) && DicDefaultMount[key] > _DicHorse[key].Lv
                && number > 0 && ASingleFeedRedPoint.ContainsKey(key))
            {
                ASingleFeedRedPoint[key].state = RedPointState.Simple;
                return;
            }
        }
        int GetMinLV = 100;
        int GetMountID = 0;
        List<int> IntListSkill = new List<int>();
        for (int j = 0; j < SortMount.Count; j++)//选取出可升级坐骑等级最低且有未激活技能的坐骑切经验最少
        {
            int Id = SortMount[j].HorseID;
            int GetHorseMaxLv = GetMountSkillMaxLV(Id);
            if (IntList.Contains(Id) && _DicHorse.ContainsKey(Id))
            {
                if (_DicHorse[Id].Lv < GetHorseMaxLv)
                {
                    IntListSkill.Add(Id);
                }
            }
        }
        int SkillHorseId = GetRedPointMountID(IntListSkill);
        if (SkillHorseId != 0 && ASingleFeedRedPoint.ContainsKey(SkillHorseId))
        {
            ASingleFeedRedPoint[SkillHorseId].state = RedPointState.Simple;
            return;
        }
        for (int j = 0; j < SortMount.Count; j++)//选取出可升级坐骑等级最低
        {
            int Id = SortMount[j].HorseID;
            if (IntList.Contains(Id) && _DicHorse.ContainsKey(Id))
            {
                if (_DicHorse[Id].Lv < GetMinLV)
                {
                    GetMinLV = _DicHorse[Id].Lv;
                    GetMountID = Id;
                }
            }
        }
        if (GetMountID != 0 && ASingleFeedRedPoint.ContainsKey(GetMountID))
        {
            ASingleFeedRedPoint[GetMountID].state = RedPointState.Simple;
            return;
        }
    }
    public int GetMinExpMount()
    {
        foreach (var key in ASingleFeedRedPoint.Keys)//当存在驯养红点时选中当有红点的那只
        {
            if (ASingleFeedRedPoint[key].state == RedPointState.Simple)
            {
                return key;
            }
        }
        int GetMountID = 0;
        int MountLV = 999;
        List<int> IntListSkill = new List<int>();
        foreach (var key in _DicHorse.Keys)
        {
            var mountConfig = HorseConfig.Get(key);
            if (_DicHorse[key].Lv < mountConfig.MaxLV)
            {
                IntListSkill.Add(key);
            }
        }
        int SkillHorseId = GetRedPointMountID(IntListSkill);
        if (SkillHorseId != 0)
        {
            GetMountID = SkillHorseId;
            return GetMountID;
        }
        foreach (var key in _DicHorse.Keys)//无红点时跳转选中最低阶数且未满级
        {
            var mountConfig = HorseConfig.Get(key);
            if (_DicHorse[key].Lv < MountLV && _DicHorse[key].Lv < mountConfig.MaxLV)
            {
                GetMountID = key;
                MountLV = _DicHorse[key].Lv;
            }
        }
        return GetMountID;
    }
    private int GetRedPointMountID(List<int> MountList)
    {
        int GetSkillMinLv = 999;
        for (int i = 0; i < MountList.Count; i++)
        {
            int SkillminLv = GetSkillLvDis(MountList[i]);
            if (SkillminLv < GetSkillMinLv && SkillminLv!=0)
            {
                GetSkillMinLv = SkillminLv;
            }
        }
        int mountId = 0;
        int ExpNumber = 999999999;
        for (int i = 0; i < MountList.Count; i++)
        {
            int SkillLv = GetSkillLvDis(MountList[i]);
            if (SkillLv > GetSkillMinLv || SkillLv==0)
            {
                continue;
            }
            var Hor1 = HorseUpConfig.GetHorseIDAndLV(MountList[i], SkillLv);
            var Hor2 = HorseUpConfig.GetHorseIDAndLV(MountList[i],_DicHorse[(MountList[i])].Lv);
            int Exp = Hor1.NeedExpTotal - Hor2.NeedExpTotal - _DicHorse[(MountList[i])].Exp;
            if (Exp < ExpNumber)
            {
                ExpNumber = Exp;
                mountId = MountList[i];
            }
        }
        return mountId;
    }
    private int GetSkillLvDis(int MountId)//获取离升级最近的技能等级
    {
        int SkillLv = 0;
        foreach (var key in GetMountSkillAndItem.Keys)
        {
            if (_DicHorse.ContainsKey(MountId) && GetMountSkillAndItem[key].HorseID == MountId)
            {
                if (GetMountSkillAndItem[key].HorseLV > _DicHorse[MountId].Lv)
                {
                    SkillLv = GetMountSkillAndItem[key].HorseLV;
                    return SkillLv;
                }
            }
        }
        return SkillLv;
    }
    public int GetMountSkillMaxLV(int MountId)//获取坐骑最大技能等级
    {
        int SkillLv = 0;
        foreach (var key in GetMountSkillAndItem.Keys)
        {
            if (GetMountSkillAndItem[key].HorseID == MountId)
            {
                if (GetMountSkillAndItem[key].HorseLV > SkillLv)
                {
                    SkillLv = GetMountSkillAndItem[key].HorseLV;
                }
            }
        }
        return SkillLv;
    }
    public void MountH0704(ItemModel info)//获取当前的坐骑
    {
        if (info == null || info.packType != PackType.Equip)
            return;
        if (info.itemPlace == (byte)RoleEquipType.mount)//坐骑位置19
        {
            if (Hconfigs.Count <= 0)
            {
                Hconfigs = HorseConfig.GetValues();
            }
            // var configs = HorseConfig.GetValues();
            foreach (var config in Hconfigs)
            {
                if (config.ItemID == info.itemId)
                {
                    HorseIDNow = config.HorseID;
                    _HorseIDNow = config.HorseID.ToString();
                    if (Event_MountAlteration != null && IsOk)
                    {
                        Event_MountAlteration(_HorseIDNow);
                    }
                }
            }
        }
        MountDanRed();
        MountStoneRed();
    }
    public void MountHA301(HA301_tagTrainHorseData info)//已拥有的坐骑(获得与刷新)
    {
        for (int i = 0; i < info.Num; i++)
        {
            if (_DicHorse.ContainsKey((int)info.InfoList[i].HorseID))
            {
                if ((int)info.InfoList[i].LV > _DicHorse[(int)info.InfoList[i].HorseID].Lv)
                {
                    if (OnMountUieffectUpLv != null && IsOk)
                    {
                        OnMountUieffectUpLv();
                    }
                }
                _DicHorse[(int)info.InfoList[i].HorseID].Lv = (int)info.InfoList[i].LV;//坐骑等级
                _DicHorse[(int)info.InfoList[i].HorseID].Exp = (int)info.InfoList[i].Exp;//坐骑经验
                if (Event_MountHA301U != null && IsOk)
                {
                    Event_MountHA301U((int)info.InfoList[i].HorseID);
                }
            }
            else
            {
                HorseClass _horseClass = new HorseClass();
                _horseClass.Lv = (int)info.InfoList[i].LV;//坐骑等级
                _horseClass.Exp = (int)info.InfoList[i].Exp;//坐骑经验
                _DicHorse.Add((int)info.InfoList[i].HorseID, _horseClass);
                if (Event_MountHA301A != null && IsOk)
                {
                    Event_MountHA301A((int)info.InfoList[i].HorseID);
                }
            }
        }
        MountStoneRed();
        MountChangeRedPoint();
        MountDanRed();
    }
    public void MountHA339(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 (_DicMountItem.ContainsKey((int)info.EatCntList[i].ItemID))
            {
                _DicMountItem[(int)info.EatCntList[i].ItemID] = (int)info.EatCntList[i].EatCnt;
                if (Event_MountHA339U != null)
                    Event_MountHA339U(info);//坐骑魂石的刷新
            }
            else
            {
                if (configItem.Type == 22)
                {
                    _DicMountItem.Add((int)info.EatCntList[i].ItemID, (int)info.EatCntList[i].EatCnt);
                }
            }
        }
        MountStoneRed();
    }
    public int GetAllMountAttack()//得到所有坐骑的攻击
    {
        Dictionary<int, int> dicStone = Bonuses();
        if (_DicHorse.Count == 0)
        {
            return dicStone[7];
        }
        else
        {
            int _AttT = 0;//攻击
            foreach (int key in _DicHorse.Keys)
            {
                HorseUpConfig tagMode = HorseUpConfig.GetHorseIDAndLV(key, _DicHorse[key].Lv);
                int[] intAttrValue = tagMode.AttrValue;
                if (intAttrValue.Length != 0)
                {
                    _AttT += intAttrValue[1];
                }
            }
            return _AttT + dicStone[7];
        }
    }
    Dictionary<int, int> Bonuses()//属性加成
    {
        Dictionary<int, int> dic = new Dictionary<int, int>();
        dic.Clear();
        dic.Add(6, 0);//生命
        dic.Add(7, 0);//攻击
        dic.Add(8, 0);//防御
        foreach (int key in _DicMountItem.Keys)
        {
            if (_DicMountItem[key] != 0)
            {
                ItemConfig itemModel = ItemConfig.Get(key);
                if (dic.ContainsKey(itemModel.Effect1))
                {
                    dic[itemModel.Effect1] += itemModel.EffectValueA1 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect2))
                {
                    dic[itemModel.Effect2] += itemModel.EffectValueA2 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect3))
                {
                    dic[itemModel.Effect3] += itemModel.EffectValueA3 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect4))
                {
                    dic[itemModel.Effect4] += itemModel.EffectValueA4 * _DicMountItem[key];
                }
                if (dic.ContainsKey(itemModel.Effect5))
                {
                    dic[itemModel.Effect5] += itemModel.EffectValueA5 * _DicMountItem[key];
                }
            }
        }
        return dic;
    }
    public bool IsHint(HorseEnum horseEnum, int id = 0)//True提示,False不提示
    {
        bool iSHint = false;
        switch (horseEnum)
        {
            case HorseEnum.HorseDan:
                foreach (var key in _DicHorse.Keys)
                {
                    HorseConfig horseConfig = HorseConfig.Get(key);
                    if (horseConfig.MaxLV > _DicHorse[key].Lv)
                    {
                        iSHint = true;
                    }
                }
                return iSHint;
            case HorseEnum.HorseDebris:
                if (Hconfigs.Count <= 0)
                {
                    Hconfigs = HorseConfig.GetValues();
                }
                foreach (var value in Hconfigs)
                {
                    if (value.UnlockItemID == id)
                    {
                        if (!_DicHorse.ContainsKey(value.HorseID))
                        {
                            iSHint = true;
                        }
                    }
                }
                return iSHint;
            case HorseEnum.HorseStone:
                int _maxuse = AttrFruitConfig.Get(id).MaxUseCnt;
                if (_DicMountItem.ContainsKey(id))
                {
                    if (_maxuse > _DicMountItem[id])
                    {
                        iSHint = true;
                    }
                }
                return iSHint;
            default:
                return true;
        }
    }
    public void AppearanceSwitch(int HorseID)//坐骑外观切换
    {
        CA502_tagPlayerChooseHorse _tagCA502 = new CA502_tagPlayerChooseHorse();
        _tagCA502.Index = (uint)HorseID;
        GameNetSystem.Instance.SendInfo(_tagCA502);
    }
    public void MountDanUse(int HorseID, int Number, bool IsAutoBuy = false)//是否自动购买
    {
        CA527_tagCMHorseUp _tagC527 = new CA527_tagCMHorseUp();//向服务端发包坐骑经验单
        _tagC527.HorseID = (uint)HorseID;
        _tagC527.UseItemCnt = (byte)Number;
        if (IsAutoBuy)
        {
            _tagC527.IsAutoBuy = 1;
        }
        GameNetSystem.Instance.SendInfo(_tagC527);
    }
    public int IsHorsePanelState()
    {
        int Type = 0;
        foreach (var value in DeblockingRedPoint.Values)
        {
            if (value.state == RedPointState.Simple)
            {
                Type = 2;
                return Type;
            }
        }
        if (MainRedDot.Instance.redPointMountFunc.state == RedPointState.Simple)
        {
            Type = 1;
            return Type;
        }
        return Type;
    }
    #region 预览坐骑碎片属性
    Dictionary<int, int> mountAttrDict = new Dictionary<int, int>();
    public Dictionary<int, int> GetMountAttrAddDict(int mountCode)
    {
        HorseConfig horseConfig = HorseConfig.Get(mountCode);
        mountAttrDict.Clear();
        if (horseConfig == null) return mountAttrDict;
        int maxRank = horseConfig.MaxLV;
        HorseUpConfig cost = HorseUpConfig.GetHorseIDAndLV(mountCode, maxRank);
        if (cost != null)
        {
            int[] attrIds = cost.AttrType;
            int[] attrValues = cost.AttrValue;
            if (attrIds != null)
            {
                for (int j = 0; j < attrIds.Length; j++)
                {
                    if (!mountAttrDict.ContainsKey(attrIds[j]))
                    {
                        mountAttrDict.Add(attrIds[j], attrValues[j]);
                    }
                    else
                    {
                        mountAttrDict[attrIds[j]] += attrValues[j];
                    }
                }
            }
        }
        return mountAttrDict;
    }
    #endregion
}
System/Mount/MountModel.cs.meta
System/Mount/MountPanelAssignment.cs
@@ -68,8 +68,8 @@
        [SerializeField] ScrollerController allPetSkillCtrl;//所有的技能
        private int mount_ID = 0;//用来标记坐骑的ID
        PlayerMountDatas m_MountModel;
        PlayerMountDatas mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        MountModel m_MountModel;
        MountModel mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        GetItemPathModel _GetItemPath;
        GetItemPathModel GetItemPath { get { return _GetItemPath ?? (_GetItemPath = ModelCenter.Instance.GetModel<GetItemPathModel>()); } }
@@ -87,7 +87,7 @@
        private void OnEnable()
        {
            PlayerMountDatas.Event_MountHA301U += OnMountHA301Update;
            MountModel.Event_MountHA301U += OnMountHA301Update;
            allPetSkillCtrl.OnRefreshCell += RefreshAllMountSkillCell;
            FlySkillIconWin.FlySkillID += FlySkillID;
            CreateAllMountSkill();
@@ -95,7 +95,7 @@
        private void OnDisable()
        {
            mount_ID = 0;
            PlayerMountDatas.Event_MountHA301U -= OnMountHA301Update;
            MountModel.Event_MountHA301U -= OnMountHA301Update;
            allPetSkillCtrl.OnRefreshCell -= RefreshAllMountSkillCell;
            FlySkillIconWin.FlySkillID -= FlySkillID;
            m_MountRawImg.gameObject.SetActive(false);
System/Mount/MountSkillWin.cs
@@ -52,8 +52,8 @@
        private Dictionary<int, int> _GetMountSkills;//坐骑获得的技能(技能的Type值和技能等级)
        private List<int> _MountList = new List<int>();//坐骑技能列表
        private Dictionary<int, HorseClass> _dicHorse;//已拥有是我坐骑字典
        PlayerMountDatas m_HorseModel;
        PlayerMountDatas horsemodel { get { return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        MountModel m_HorseModel;
        MountModel horsemodel { get { return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        ItemTipsModel _itemTipsModel;
        ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel<ItemTipsModel>()); } }
System/Mount/MountStoneTipsWin.cs
@@ -25,12 +25,12 @@
        private Dictionary<int, int> tag_Item = new Dictionary<int, int>();//坐骑魂石存
        Dictionary<string, ItemConfig> tagCIM = new Dictionary<string, ItemConfig>();
        private List<int> ListID = new List<int>();
        PlayerMountDatas m_HorseModel;
        PlayerMountDatas horsemodel
        MountModel m_HorseModel;
        MountModel horsemodel
        {
            get
            {
                return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
                return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
            }
        }
        protected override void BindController()
@@ -58,7 +58,7 @@
        protected override void OnAfterOpen()
        {
            PlayerMountDatas.Event_MountHA339U += HA339;
            MountModel.Event_MountHA339U += HA339;
            roleParticularModel.PowerUpdate += PowerUpdate;
        }
@@ -70,7 +70,7 @@
        protected override void OnAfterClose()
        {
            m_ScrollerController.OnRefreshCell -= OnRefreshGridCell;
            PlayerMountDatas.Event_MountHA339U -= HA339;
            MountModel.Event_MountHA339U -= HA339;
            roleParticularModel.PowerUpdate -= PowerUpdate;
        }
System/Mount/MountWin.cs
@@ -50,8 +50,8 @@
        GetItemPathModel GetItemPath { get { return _GetItemPath ?? (_GetItemPath = ModelCenter.Instance.GetModel<GetItemPathModel>()); } }
        PackModel _playerPack;
        PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); } }
        PlayerMountDatas m_MountModel;
        PlayerMountDatas mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        MountModel m_MountModel;
        MountModel mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        RidingAndPetActivationModel ridingAndPetActivationModel { get { return ModelCenter.Instance.GetModel<RidingAndPetActivationModel>(); } }
        public static event Action RedPointMountDan;
@@ -78,10 +78,10 @@
        protected override void OnPreOpen()
        {
            mountModel.Wait = true;
            PlayerMountDatas.Event_MountAlteration += OnMountAlteration;
            PlayerMountDatas.Event_MountHA301U += OnMountUpdate;
            PlayerMountDatas.Event_MountHA301A += OnMountAdd;
            PlayerMountDatas.OnMountUieffectUpLv += OnMountUieffectUpLv;
            MountModel.Event_MountAlteration += OnMountAlteration;
            MountModel.Event_MountHA301U += OnMountUpdate;
            MountModel.Event_MountHA301A += OnMountAdd;
            MountModel.OnMountUieffectUpLv += OnMountUieffectUpLv;
            RidingAndPetActivationWin.FairyJadeDEvent += FairyJadeDEvent;
            FlySkillIconWin.FairyJadeDEvent += FairyJadeDEvent;
            m_ScrollerController.OnRefreshCell += OnRefreshGridCell;
@@ -103,11 +103,11 @@
        protected override void OnPreClose()
        {
            AchievementGoto.achievementType = 0;
            PlayerMountDatas.Event_MountAlteration -= OnMountAlteration;
            PlayerMountDatas.Event_MountHA301U -= OnMountUpdate;
            PlayerMountDatas.Event_MountHA301A -= OnMountAdd;
            MountModel.Event_MountAlteration -= OnMountAlteration;
            MountModel.Event_MountHA301U -= OnMountUpdate;
            MountModel.Event_MountHA301A -= OnMountAdd;
            m_ScrollerController.OnRefreshCell -= OnRefreshGridCell;
            PlayerMountDatas.OnMountUieffectUpLv -= OnMountUieffectUpLv;
            MountModel.OnMountUieffectUpLv -= OnMountUieffectUpLv;
            RidingAndPetActivationWin.FairyJadeDEvent -= FairyJadeDEvent;
            FlySkillIconWin.FairyJadeDEvent -= FairyJadeDEvent;
            OnClickStopDomesticateBtn();
System/Pet/PetAttributeMethods.cs
@@ -79,8 +79,8 @@
        [SerializeField] UIEffect m_UIeffect2;//经验条特效
        private int typePetID = 0;
        private float timePlay = 0;//灵宠动作播放时间
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>()); } }
        PetModel m_petModel;
        PetModel petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>()); } }
        GetItemPathModel pathModel { get { return ModelCenter.Instance.GetModel<GetItemPathModel>(); } }
        PackModel _playerPack;
        PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); } }
@@ -95,8 +95,8 @@
            isAutoTrain = false;
            breakLockBtn.AddListener(ClickBreakBtn);
            petAutoTrainBtn.AddListener(ClickPetAutoTrainBtn);
            PlayerPetDatas.Event_H0704Update += RefreshPetInfoUpdate;
            PlayerPetDatas.Event_H0704Add += RefreshPetInfo;
            PetModel.Event_H0704Update += RefreshPetInfoUpdate;
            PetModel.Event_H0704Add += RefreshPetInfo;
            petStoneBtn.AddListener(() => { WindowCenter.Instance.Open<PetStoneTipsWin>(); });
            curPetSkillCtrl.OnRefreshCell += RefreshCurPetSkillCell;
            allPetSkillCtrl.OnRefreshCell += RefreshAllPetSkillCell;
@@ -115,8 +115,8 @@
        {
            typePetID = 0;
            StopCoroutine("FrameDelay");
            PlayerPetDatas.Event_H0704Update -= RefreshPetInfoUpdate;
            PlayerPetDatas.Event_H0704Add -= RefreshPetInfo;
            PetModel.Event_H0704Update -= RefreshPetInfoUpdate;
            PetModel.Event_H0704Add -= RefreshPetInfo;
            curPetSkillCtrl.OnRefreshCell -= RefreshCurPetSkillCell;
            allPetSkillCtrl.OnRefreshCell -= RefreshAllPetSkillCell;
            FlySkillIconWin.FlySkillID -= FlySkillID;
System/Pet/PetAttributeWin.cs
@@ -25,8 +25,8 @@
        List<PetInfoConfig> sortlist = new List<PetInfoConfig>();//灵兽顺序排列
        GetItemPathModel _GetItemPath;
        GetItemPathModel GetItemPath { get { return _GetItemPath ?? (_GetItemPath = ModelCenter.Instance.GetModel<GetItemPathModel>()); } }
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>()); } }
        PetModel m_petModel;
        PetModel petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>()); } }
        PackModel _playerPack;
        PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); } }
@@ -56,9 +56,9 @@
            ToAddSorting();
            isOpenFirst = true;
            petmodel.Wait = true;
            PlayerPetDatas.Event_H0704Add += AddPet;
            PlayerPetDatas.Event_H0704Update += PetUpdate;
            PlayerPetDatas.Event_SpiritPetPlay += OnSpiritPetPlay;
            PetModel.Event_H0704Add += AddPet;
            PetModel.Event_H0704Update += PetUpdate;
            PetModel.Event_SpiritPetPlay += OnSpiritPetPlay;
            m_ScrollerController.OnRefreshCell += OnRefreshGridCell;
            OptionIsSelected();//默认赋值
            OnCreateGridLineCell(m_ScrollerController);
@@ -81,10 +81,10 @@
        {
            StopCoroutine("IeWait");
            AchievementGoto.achievementType = 0;
            PlayerPetDatas.Event_H0704Add -= AddPet;
            PetModel.Event_H0704Add -= AddPet;
            m_ScrollerController.OnRefreshCell -= OnRefreshGridCell;
            PlayerPetDatas.Event_SpiritPetPlay -= OnSpiritPetPlay;
            PlayerPetDatas.Event_H0704Update -= PetUpdate;
            PetModel.Event_SpiritPetPlay -= OnSpiritPetPlay;
            PetModel.Event_H0704Update -= PetUpdate;
        }
System/Pet/PetButton.cs
@@ -27,8 +27,8 @@
        [SerializeField] PetAttributeMethods _PetAttributeMethods;
        [SerializeField] Button m_PlayedButton;//出战按钮
        [SerializeField] Text m_Played_Text;//出战文本
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>()); } }
        PetModel m_petModel;
        PetModel petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>()); } }
        public Button PetButton1
        {
System/Pet/PetModel.cs
File was renamed from System/Pet/PlayerPetDatas.cs
@@ -1,792 +1,792 @@
using 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.技能TypeID,2.技能ID
    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>();//解锁按钮红点(灵宠红点子级)
    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;//用来记录坐骑魂石的ID
    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);//解锁按钮
                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++)//选择出升级灵宠等级最低且有技能未解锁的且经验最接近
        {
            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)//正则表达式的字符串分割
    {
        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提示,False不提示
    {
        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
}
using 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.技能TypeID,2.技能ID
    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>();//解锁按钮红点(灵宠红点子级)
    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;//用来记录坐骑魂石的ID
    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);//解锁按钮
                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++)//选择出升级灵宠等级最低且有技能未解锁的且经验最接近
        {
            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)//正则表达式的字符串分割
    {
        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提示,False不提示
    {
        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
}
System/Pet/PetModel.cs.meta
copy from System/Pet/PlayerPetDatas.cs.meta copy to System/Pet/PetModel.cs.meta
File was copied from System/Pet/PlayerPetDatas.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 7d2b250209cbc8143a7380cc7db246e7
timeCreated: 1504666613
guid: 8265a87a293bfe24f8ff0e6436b7c7da
timeCreated: 1551075434
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/Pet/PetStoneTipsWin.cs
@@ -31,8 +31,8 @@
        PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); } }
        #region Built-in
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>()); } }
        PetModel m_petModel;
        PetModel petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>()); } }
        RoleParticularModel m_RoleParticularModel;
        RoleParticularModel roleParticularModel { get { return m_RoleParticularModel ?? (m_RoleParticularModel = ModelCenter.Instance.GetModel<RoleParticularModel>()); } }
@@ -60,7 +60,7 @@
        protected override void OnAfterOpen()
        {
           
            PlayerPetDatas.Event_Ha339 += HA339;
            PetModel.Event_Ha339 += HA339;
            roleParticularModel.PowerUpdate += PowerUpdate;
        }
@@ -68,7 +68,7 @@
        {
            m_petModel.PetStoneItemId = 0;
            m_ScrollerController.OnRefreshCell -= OnRefreshGridCell;
            PlayerPetDatas.Event_Ha339 -= HA339;
            PetModel.Event_Ha339 -= HA339;
            roleParticularModel.PowerUpdate -= PowerUpdate;
        }
System/Pet/PetWin.cs
@@ -19,10 +19,10 @@
        [SerializeField] Button _CloseBtn;
        [SerializeField] Button _LeftBtn;
        [SerializeField] Button _RightBtn;
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>()); } }
        PlayerMountDatas m_MountModel;
        PlayerMountDatas mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        PetModel m_petModel;
        PetModel petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>()); } }
        MountModel m_MountModel;
        MountModel mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        void CloseBtn()
        {
            CloseChild();
System/Pet/RidingAndPetActivationModel.cs
@@ -21,11 +21,11 @@
        public int SkillID1 = 0;
        public int Lv = 1;
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>()); } }
        PetModel m_petModel;
        PetModel petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>()); } }
        PlayerMountDatas m_MountModel;
        PlayerMountDatas mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        MountModel m_MountModel;
        MountModel mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        //==============坐骑属性弹框
        public PropertyTip property;
        public int RidingId;
System/Pet/RidingAndPetActivationWin.cs
@@ -42,8 +42,8 @@
        [SerializeField] GameObject m_Text;
        #region Built-in
        PlayerMountDatas m_MountModel;
        PlayerMountDatas mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        MountModel m_MountModel;
        MountModel mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        RidingAndPetActivationModel ridingAndPetActivationModel { get { return ModelCenter.Instance.GetModel<RidingAndPetActivationModel>(); } }
        List<HorseSkillClass> MountSkills = new List<HorseSkillClass>();
        Dictionary<int, int> FightDic = new Dictionary<int, int>();
System/Pet/TargetPetAttrWin.cs
@@ -53,9 +53,9 @@
        [Header("关闭按钮")]
        [SerializeField]
        Button m_CloseButton;//满级
        PlayerPetDatas petmodel { get { return ModelCenter.Instance.GetModel<PlayerPetDatas>(); } }
        PlayerMountDatas m_MountModel;
        PlayerMountDatas mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>()); } }
        PetModel petmodel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
        MountModel m_MountModel;
        MountModel mountModel { get { return m_MountModel ?? (m_MountModel = ModelCenter.Instance.GetModel<MountModel>()); } }
        RidingAndPetActivationModel ridingModel { get { return ModelCenter.Instance.GetModel<RidingAndPetActivationModel>(); } }
        protected override void BindController()
System/Role/RoleAttrWin.cs
@@ -27,12 +27,12 @@
        [SerializeField] ScrollerController m_Controller;
        private int attrShowType = 0;
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel
        PetModel m_petModel;
        PetModel petmodel
        {
            get
            {
                return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>());
                return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>());
            }
        }
        List<PlayerPropertyConfig> propList = null;
System/RoleParticulars/RoleParticularsWin.cs
@@ -48,10 +48,10 @@
                return m_EquipWashModel ?? (m_EquipWashModel = ModelCenter.Instance.GetModel<EquipWashModel>());
            }
        }
        PlayerStrengthengDatas m_StrengthengModel;
        PlayerStrengthengDatas strengthengmodel {
        StrengthenModel m_StrengthengModel;
        StrengthenModel strengthengmodel {
            get {
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>());
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>());
            }
        }
System/RoleParticulars/ViewFuncCell.cs
@@ -36,12 +36,12 @@
            }
        }
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel
        PetModel m_petModel;
        PetModel petmodel
        {
            get
            {
                return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>());
                return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>());
            }
        }
@@ -51,20 +51,20 @@
            get { return _suitModel ?? (_suitModel = ModelCenter.Instance.GetModel<PlayerSuitModel>()); }
        }
        PlayerMountDatas m_HorseModel;
        PlayerMountDatas horsemodel
        MountModel m_HorseModel;
        MountModel horsemodel
        {
            get
            {
                return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
                return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
            }
        }
        PlayerStrengthengDatas m_StrengthengModel;
        PlayerStrengthengDatas strengthengmodel
        StrengthenModel m_StrengthengModel;
        StrengthenModel strengthengmodel
        {
            get
            {
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>());
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>());
            }
        }
System/RoleParticulars/ViewHorseDetailWin.cs
@@ -232,7 +232,7 @@
                m_SkillBtn.AddListener(OnClickSkill);
                m_Effect.StopImediatly();
                var model = ModelCenter.Instance.GetModel<PlayerMountDatas>();
                var model = ModelCenter.Instance.GetModel<MountModel>();
                if (model.ListEffectSkill != null
                    && model.ListEffectSkill.Contains(_skillId))
                {
System/RoleParticulars/ViewPetDetailWin.cs
@@ -217,7 +217,7 @@
                m_SkillBtn.AddListener(OnClickSkill);
                m_Effect.StopImediatly();
                var model = ModelCenter.Instance.GetModel<PlayerPetDatas>();
                var model = ModelCenter.Instance.GetModel<PetModel>();
                if (model.ListEffectSkill != null
                    && model.ListEffectSkill.Contains(_skillId))
                {
System/RolePromote/RolePromoteModel.cs
@@ -21,14 +21,14 @@
            ParseConfig();
            playerPack.refreshItemCountEvent += RefreshItemCountAct;
            PlayerStoneData.OnRefreshStoneData += OnRefreshStoneData;
            PlayerMountDatas.Event_MountHA301A += OnRefreshMountData;
            PlayerPetDatas.Event_H0704Add += OnRefreshPetData;
            PlayerPetDatas.Event_H0704Update += OnRefreshPetData;
            MountModel.Event_MountHA301A += OnRefreshMountData;
            PetModel.Event_H0704Add += OnRefreshPetData;
            PetModel.Event_H0704Update += OnRefreshPetData;
            petmodel.PlayerLoginOkData += OnRefreshPetData;
            equipWashModel.RefreshWashModelEvent += RefreshWashModelEvent;
            RedpointCenter.Instance.redpointValueChangeEvent += RedpointValueChangeEvent;
            ItemLogicUtility.Instance.GetBetterEquipEvent += RefreshGetBetterEquipEvent;
            PlayerMountDatas.PlayerLoginOKData += PlayerLoginOKData;
            MountModel.PlayerLoginOKData += PlayerLoginOKData;
            blastFurnaceModel.blastFurnacePromoteUpdate += BlastFurnacePromoteUpdate;
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
            OnBeforePlayerDataInitialize();
@@ -98,28 +98,28 @@
                return m_RuneModel ?? (m_RuneModel = ModelCenter.Instance.GetModel<RuneModel>());
            }
        }
        PlayerPetDatas m_petModel;
        PlayerPetDatas petmodel
        PetModel m_petModel;
        PetModel petmodel
        {
            get
            {
                return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>());
                return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>());
            }
        }
        PlayerMountDatas m_HorseModel;
        PlayerMountDatas horsemodel
        MountModel m_HorseModel;
        MountModel horsemodel
        {
            get
            {
                return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<PlayerMountDatas>());
                return m_HorseModel ?? (m_HorseModel = ModelCenter.Instance.GetModel<MountModel>());
            }
        }
        PlayerStrengthengDatas m_StrengthengModel;
        PlayerStrengthengDatas strengthengmodel
        StrengthenModel m_StrengthengModel;
        StrengthenModel strengthengmodel
        {
            get
            {
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>());
                return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>());
            }
        }
System/Store/Logic/BuyPetMatInfoWin.cs
@@ -80,8 +80,8 @@
        {
            get { return _storeModel ?? (_storeModel = ModelCenter.Instance.GetModel<StoreModel>()); }
        }
        PlayerPetDatas petmodel { get { return ModelCenter.Instance.GetModel<PlayerPetDatas>(); } }
        PlayerMountDatas mountModel { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
        PetModel petmodel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
        MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        BuyItemPopModel buyItem;
        BuyShopItemLimit shopItemLimit;
System/Strengthening/EquipReinforceWin.cs
@@ -11,8 +11,8 @@
        private WingsRedDot W_ModelRedDit;
        private WingsRedDot model { get { return W_ModelRedDit ?? (W_ModelRedDit = ModelCenter.Instance.GetModel<WingsRedDot>()); } }
        private PlayerStrengthengDatas M_Strengtheng;
        private PlayerStrengthengDatas strengtheng { get { return M_Strengtheng ?? (M_Strengtheng = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()); } }
        private StrengthenModel M_Strengtheng;
        private StrengthenModel strengtheng { get { return M_Strengtheng ?? (M_Strengtheng = ModelCenter.Instance.GetModel<StrengthenModel>()); } }
        private WashTips _washTips;
        public WashTips WashTip {
            get {
System/Strengthening/PlayerStrengthengDatas.cs.meta
File was deleted
System/Strengthening/StrengthenModel.cs
File was renamed from System/Strengthening/PlayerStrengthengDatas.cs
@@ -1,643 +1,643 @@
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System;
using Snxxz.UI;
public class EquipmentInitialization
{
    private int _equipIndex;//装备位置
    private int _equipPartStarLV;//装备强化等级
    private int _proficiency;//熟练度
    public int EquipIndex
    {
        get { return _equipIndex; }
        set { _equipIndex = value; }
    }
    public int EquipPartStarLV
    {
        get { return _equipPartStarLV; }
        set { _equipPartStarLV = value; }
    }
    public int Proficiency
    {
        get { return _proficiency; }
        set { _proficiency = value; }
    }
    public EquipmentInitialization() { }
    public EquipmentInitialization(int equipIndex, int equipPartStarLV, int proficiency)
    {
        this._equipIndex = equipIndex;
        this._equipPartStarLV = equipPartStarLV;
        this._proficiency = proficiency;
    }
}
public class PlayerStrengthengDatas : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
{
    public Dictionary<int, EquipmentInitialization> _EqInfo = new Dictionary<int, EquipmentInitialization>();//接收服务器下发的数值
    Dictionary<int, int> DefineIndexDic = new Dictionary<int, int>();//装备强化类型
    Dictionary<int, int> EquipMaxDic = new Dictionary<int, int>();//装备强化最大上限强化类型
    List<string> listStrengtheningAll = new List<string>();//用于全身装备属性
    public Dictionary<int, Redpoint> StrengthengRedPoint = new Dictionary<int, Redpoint>();//强化部位红点
    public delegate void Delegate_Ha3b3(HA3B3_tagMCEquipPartStarLVInfo info);
    public static event Delegate_Ha3b3 Event_Ha3b3;     //事件刷新的委托
    public static event Action<int> RefreshEquipUpgradLvAct;
    public int MoneyMax = 0;//所需最大的钱数
    public bool LevelAstrictBool = true;
    public int equipmentA = 0;
    PackModel _playerPack;
    PackModel playerPack
    {
        get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
    }
    PlayerStrengthengDatas m_StrengthengModel;
    PlayerStrengthengDatas strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()); } }
    public class EquipRedDot
    {
        public int CurrentLevel;//当前等级
        public int Money;//所需的钱数
    }
    Dictionary<int, EquipRedDot> DicEquip = new Dictionary<int, EquipRedDot>();
    public override void Init()
    {
        listStrengtheningAll = ItemPlusSumAttrConfig.GetKeys();
        FuncConfigConfig funConfig = FuncConfigConfig.Get("StrengthenLevelLimit");
        DefineIndexDic = ConfigParse.GetDic<int, int>(funConfig.Numerical2);
        EquipMaxDic = ConfigParse.GetDic<int, int>(funConfig.Numerical1);
    }
    public override void UnInit()
    {
    }
    public void OnPlayerLoginOk()
    {
        playerPack.refreshItemCountEvent -= OnItemRefreshEvent;
        playerPack.itemCntAddEvent -= OnEquipRefreshEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChange;
        playerPack.refreshItemCountEvent += OnItemRefreshEvent;//背包刷新
        playerPack.itemCntAddEvent += OnEquipRefreshEvent;//角色装备刷新
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange;
        FuncConfigConfig StrengthenRedPointLevel = FuncConfigConfig.Get("StrengthenRedPointLevel");//强化红点规则
        string[] strStrengthenRedPointLevel = ConfigParse.GetMultipleStr(StrengthenRedPointLevel.Numerical1);
        StrengthengRedPointAdd();
        ClassList.Clear();
        for (int i = 0; i < strStrengthenRedPointLevel.Length; i++)
        {
            ClassList.Add(int.Parse(strStrengthenRedPointLevel[i]));
        }
        ClassList.Add(600);
        MoneyData();
        int playerLv = PlayerDatas.Instance.baseData.LV;
        ulong copper = UIHelper.GetMoneyCnt(3);
        if (playerLv >= 150 && MoneyMax > (int)copper)
        {
            LevelAstrictBool = false;
        }
    }
    private void OnFuncStateChange(int obj)
    {
        if (obj == 1)
        {
            MoneyData();
        }
    }
    public void OnBeforePlayerDataInitialize()
    {
        _EqInfo.Clear();
        MoneyMax = 0;
     //   LevelAstrictBool = true;
    }
    private void OnEquipRefreshEvent(PackType type, int index, int id)
    {
        MoneyData();
    }
    private void OnItemRefreshEvent(PackType type, int index, int id)
    {
        if (type == PackType.Equip)
        {
            MoneyData();
        }
    }
    private const int RedPoint_key2 = 10601;
    public Redpoint redPointStre = new Redpoint(MainRedDot.RedPoint_key1, RedPoint_key2);
    public Redpoint StrengthRedpoint
    {
        get
        {
            return redPointStre;
        }
    }
    public void MoneyRequired(int EquippedWith, int EquipmentLevel)//获取最高阶所需的钱数
    {
        int Type = GameDefineIndex(EquippedWith);
        ItemPlusConfig _tagItemPlue = ItemPlusConfig.GetTypeAndGrade(Type, EquipmentLevel);
        if (DicEquip.ContainsKey(EquippedWith))
        {
            DicEquip[EquippedWith].CurrentLevel = EquipmentLevel;
            DicEquip[EquippedWith].Money = _tagItemPlue.costCount;
        }
        else
        {
            EquipRedDot _EquipRedDot = new EquipRedDot();
            _EquipRedDot.CurrentLevel = EquipmentLevel;
            _EquipRedDot.Money = _tagItemPlue.costCount;
            DicEquip.Add(EquippedWith, _EquipRedDot);
        }
        MoneyData();
    }
    public void MoneyData()//获取金钱数据
    {
        equipmentA = 0;
        MoneyMax = ContrastObtain();
        ulong copper = UIHelper.GetMoneyCnt(3);
        //redPointStre.state = RedPointState.None;
        foreach (int key in StrengthengRedPoint.Keys)
        {
            StrengthengRedPoint[key].state = RedPointState.None;
        }
        if (!FuncOpen.Instance.IsFuncOpen(1))
            return;
        if (copper != 0 && MoneyMax != 0 && copper >= (ulong)MoneyMax)
        {
            // redPointStre.state = RedPointState.Simple;
            Lowest();
        }
    }
    private int ContrastObtain()
    {
        MoneyMax = 0;
        SinglePack singlePack = playerPack.GetSinglePack(PackType.Equip);
        if (singlePack == null)
            return MoneyMax;
        foreach (var key in DicEquip.Keys)
        {
            ItemModel itemModel = singlePack.GetItemByIndex(key);
            if (itemModel != null)
            {
                ItemConfig _Item = ItemConfig.Get((int)itemModel.itemId);
                ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
                if (EquipMax(_Item.EquipPlace) != 3)
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
                }
                else
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
                }
                if (_itemPM.levelMax > DicEquip[key].CurrentLevel)
                {
                    if (DicEquip[key].Money > MoneyMax)
                    {
                        MoneyMax = DicEquip[key].Money;
                    }
                }
            }
        }
        return MoneyMax;
    }
    public void OnEquipmentToStrengthen(HA3B3_tagMCEquipPartStarLVInfo info)
    {
        for (int i = 0; i < info.Count; i++)
        {
            if ((int)info.InfoList[i].EquipIndex > 0 && (int)info.InfoList[i].EquipIndex <= 10)
            {
                AddInfo(i, info);
            }
        }
    }
    public bool TheRatingPrompt(int ItemID)//评级提示
    {
        ItemConfig _Item = ItemConfig.Get(ItemID);
        if (_EqInfo.ContainsKey(_Item.EquipPlace))
        {
            int EqInfoLV = _EqInfo[_Item.EquipPlace].EquipPartStarLV;//装备等级
            ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
            if (EquipMax(_Item.EquipPlace) != 3)
            {
                _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
            }
            else
            {
                _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
            }
            int MaxLV = _itemPM.levelMax;
            if (EqInfoLV >= MaxLV)
                return true;
            else
                return false;
        }
        return false;
    }
    public void AddInfo(int equipPlace, HA3B3_tagMCEquipPartStarLVInfo info)//装备位置
    {
        int index = (int)info.InfoList[equipPlace].EquipIndex;
        MoneyRequired(index, (int)info.InfoList[equipPlace].EquipPartStarLV);
        if (_EqInfo.ContainsKey(index))
        {
            _EqInfo[index].EquipIndex = index;
            bool isUpgrad = false;
            if ((int)info.InfoList[equipPlace].EquipPartStarLV > _EqInfo[index].EquipPartStarLV)
            {
                isUpgrad = true;
            }
            _EqInfo[index].EquipPartStarLV = (int)info.InfoList[equipPlace].EquipPartStarLV;
            _EqInfo[index].Proficiency = (int)info.InfoList[equipPlace].Proficiency;
            if (Event_Ha3b3 != null)
                Event_Ha3b3(info);
            if (isUpgrad && RefreshEquipUpgradLvAct != null)
            {
                RefreshEquipUpgradLvAct(index);
            }
        }
        else
        {
            EquipmentInitialization equip = new EquipmentInitialization();
            equip.EquipIndex = index;
            equip.EquipPartStarLV = (int)info.InfoList[equipPlace].EquipPartStarLV;
            equip.Proficiency = (int)info.InfoList[equipPlace].Proficiency;
            _EqInfo.Add(index, equip);
        }
    }
    public int GameDefineIndex(int _location)//强化类型返回
    {
        if (DefineIndexDic.ContainsKey(_location))
        {
            return DefineIndexDic[_location];
        }
        else
        {
            return 0;
        }
    }
    public int EquipMax(int _location)//强化最大上限返回类型
    {
        if (EquipMaxDic.ContainsKey(_location))
        {
            return EquipMaxDic[_location];
        }
        else
        {
            return 0;
        }
    }
    public int StrengthenTheCeiling(int _equippedWith = 1)//装备位
    {
        if (!_EqInfo.ContainsKey(_equippedWith))
        {
            return 0;
        }
        int EquipPartStarLV = _EqInfo[_equippedWith].EquipPartStarLV;
        ItemModel itemModel = playerPack.GetItemByIndex(PackType.Equip, _equippedWith);
        ;
        ItemConfig _Item = ItemConfig.Get((int)itemModel.itemId);
        ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
        if (EquipMax(_Item.EquipPlace) != 3)
        {
            _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
        }
        else
        {
            _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
        }
        if (_itemPM.levelMax >= EquipPartStarLV)
        {
            return EquipPartStarLV;
        }
        else
        {
            return _itemPM.levelMax;
        }
    }
    public Dictionary<int, Dictionary<int, int>> StrengtheningAll()//全身属性
    {
        Dictionary<int, Dictionary<int, int>> _dic = new Dictionary<int, Dictionary<int, int>>();
        int _wholeBodyLevel = 0;
        foreach (int key in _EqInfo.Keys)
        {
            _wholeBodyLevel += _EqInfo[key].EquipPartStarLV;
        }
        for (int i = 0; i < listStrengtheningAll.Count; i++)
        {
            if (int.Parse(listStrengtheningAll[i]) > _wholeBodyLevel)
            {
                int _index = listStrengtheningAll.IndexOf(listStrengtheningAll[i]);
                _dic = GeneralProperties(_index, int.Parse(listStrengtheningAll[i]));
                return _dic;
            }
        }
        return null;
    }
    Dictionary<int, Dictionary<int, int>> GeneralProperties(int _index, int key)
    {
        Dictionary<int, Dictionary<int, int>> _dic = new Dictionary<int, Dictionary<int, int>>();
        if (_index <= 0)
        {
            Dictionary<int, int> _dic1 = new Dictionary<int, int>();
            _dic.Add(0, _dic1);
            Dictionary<int, int> _dic2 = new Dictionary<int, int>();
            var config = ItemPlusSumAttrConfig.Get(key);
            _dic2.Add(config.attType[0], config.attValue[0]);
            _dic2.Add(config.attType[1], config.attValue[1]);
            _dic.Add(key, _dic2);
            return _dic;
        }
        else
        {
            Dictionary<int, int> _dic1 = new Dictionary<int, int>();
            var config = ItemPlusSumAttrConfig.Get(listStrengtheningAll[(_index - 1)]);
            _dic1.Add(config.attType[0], config.attValue[0]);
            _dic1.Add(config.attType[1], config.attValue[1]);
            _dic.Add(int.Parse(listStrengtheningAll[(_index - 1)]), _dic1);
            Dictionary<int, int> _dic2 = new Dictionary<int, int>();
            config = ItemPlusSumAttrConfig.Get(key);
            _dic2.Add(config.attType[0], config.attValue[0]);
            _dic2.Add(config.attType[1], config.attValue[1]);
            _dic.Add(key, _dic2);
            return _dic;
        }
    }
    //==========装备红点
    List<int> StrengthList = new List<int>();
     private bool IsFairyDevice(int Index)
    {
        if (Index == 9 || Index == 10)
        {
            SinglePack singlePack = playerPack.GetSinglePack(PackType.Equip);
            if (singlePack != null && singlePack.GetAllItems().ContainsKey(Index))
            {
                ItemModel item = singlePack.GetItemByIndex(Index);
                ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
                _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(strengthengmodel.EquipMax(Index), 0, 0);
                if (_itemPM.levelMax > strengthengmodel._EqInfo[Index].EquipPartStarLV)//最大可升阶等级和服务端对比
                {
                    return true;
                }
            }
        }
        return false;
    }
    private int Compare(string x, string y)//数组排列
    {
        var _index_x = int.Parse(x);
        var _index_y = int.Parse(y);
        bool havex = IsFairyDevice(_index_x);
        bool havey = IsFairyDevice(_index_y);
        if (havex.CompareTo(havey) != 0)
        {
            return -havex.CompareTo(havey);
        }
        var _sort_x = StrengthList.IndexOf(_index_x);
        var _sort_y = StrengthList.IndexOf(_index_y);
        return _sort_x.CompareTo(_sort_y);
    }
    private void StrengthengRedPointAdd()
    {
        string str = FuncConfigConfig.Get("EquipArea").Numerical1;
        int[] intList = ConfigParse.GetMultipleStr<int>(str);
        if (StrengthList.Count <= 0)
        {
            for (int i = 0; i < intList.Length; i++)
            {
                StrengthList.Add(intList[i]);
            }
        }
        List<string> SortList = new List<string>();
        for (int i = 0; i < intList.Length; i++)
        {
            SortList.Add((intList[i]).ToString());
        }
        SortList.Sort(Compare);
        string[] StrengthenDisplay = SortList.ToArray();
        for (int i = 0; i < StrengthenDisplay.Length; i++)
        {
            int equippedWith = int.Parse(StrengthenDisplay[i]);
            if (!StrengthengRedPoint.ContainsKey(equippedWith))
            {
                int RedPoint_Strength = RedPoint_key2 * 10 + equippedWith;
                Redpoint redPoint = new Redpoint(RedPoint_key2, RedPoint_Strength);
                StrengthengRedPoint.Add(equippedWith, redPoint);
            }
        }
    }
    List<int> ClassList = new List<int>();//红点阶级
    List<int> equipmentRed = new List<int>();//当前存在的装备
    int LowestZbw = 0;
    private void Lowest()//筛选强化部位上最低阶级装备
    {
        equipmentRed.Clear();
        int LowestLV = 0;
        var StrengthengRedPointAllKey = StrengthengRedPoint.Keys;
        foreach (int key in StrengthengRedPointAllKey)
        {
            ItemModel itemModel = playerPack.GetItemByIndex(PackType.Equip, key);
            if (itemModel != null)
            {
                ItemConfig _Item = ItemConfig.Get((int)itemModel.itemId);
                ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
                if (EquipMax(_Item.EquipPlace) != 3)
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
                }
                else
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
                }
                if (_itemPM.levelMax > DicEquip[key].CurrentLevel)
                {
                    if (LowestLV == 0)
                    {
                        LowestLV = DicEquip[key].CurrentLevel;
                        LowestZbw = key;
                    }
                    if (DicEquip[key].CurrentLevel < LowestLV)
                    {
                        LowestLV = DicEquip[key].CurrentLevel;
                        LowestZbw = key;
                    }
                    equipmentRed.Add(key);
                }
            }
        }
        //DesignDebug.LogError(LowestZbw);
        //DesignDebug.LogError(DicEquip[LowestZbw].CurrentLevel);
        if (!DicEquip.ContainsKey(LowestZbw))
        {
            return;
        }
        int Lv = ClassifyJudge(DicEquip[LowestZbw].CurrentLevel);
        RedPointPart(Lv);
    }
    private int ClassifyJudge(int Lv)
    {
        for (int i = 0; i < ClassList.Count; i++)
        {
            if (Lv < ClassList[i])
            {
                return ClassList[i];
            }
        }
        return 0;
    }
    private void RedPointPart(int Lv)
    {
        //DesignDebug.LogError("得到限制等级"+ Lv);
        for (int i = 0; i < equipmentRed.Count; i++)
        {
            if (_EqInfo.ContainsKey(equipmentRed[i]) && _EqInfo[(equipmentRed[i])].EquipPartStarLV < Lv && LevelAstrictBool)
            {
                equipmentA = equipmentRed[i];
                StrengthengRedPoint[(equipmentRed[i])].state = RedPointState.Simple;
                //  DesignDebug.LogError("得到装备位" + (equipmentRed[i]));
                return;
            }
        }
    }
    //===========羽翼精炼
    Dictionary<int, WingRefineAttrModel> _DicWingRe = new Dictionary<int, WingRefineAttrModel>();
    class WingRefineAttrModel
    {
        public int Ability1;//属性值1
        public int Ability1Value;//数值1
        public int Ability2;//属性值2
        public int Ability2Value;//数值2
    }
    private List<WingRefineAttrConfig> tegWing = new List<WingRefineAttrConfig>();
    void WingRefine()//精炼属性
    {
        if (tegWing.Count <= 0)
        {
            tegWing= WingRefineAttrConfig.GetValues();
        }
        //var tegWing = WingRefineAttrConfig.GetValues();
        foreach (var values in tegWing)
        {
            if (!_DicWingRe.ContainsKey(values.wingsPhase))
            {
                WingRefineAttrModel _wingRefineAttrModel = new WingRefineAttrModel();
                int[] array = ConfigParse.GetKeyValueKeys<int>(values.attrupper);
                int[] intarray = ConfigParse.GetKeyValueValues<int>(values.attrupper);
                _wingRefineAttrModel.Ability1 = array[0];
                _wingRefineAttrModel.Ability2 = array[1];
                _wingRefineAttrModel.Ability1Value = intarray[0];
                _wingRefineAttrModel.Ability2Value = intarray[1];
                _DicWingRe.Add(values.wingsPhase, _wingRefineAttrModel);
            }
        }
    }
    public float[] BackpackWings(int ItemID, int _Refining)//用于背包 翅膀(1.翅膀ID,2.精炼值)
    {
        WingRefine();
        int _currentRefiningAll = 0;//总精炼度
        ItemConfig Item = ItemConfig.Get(ItemID);
        if (tegWing.Count <= 0)
        {
            tegWing = WingRefineAttrConfig.GetValues();
        }
      //  var configs = WingRefineAttrConfig.GetValues();
        foreach (var values in tegWing)
        {
            if (Item.LV == values.wingsPhase)
            {
                _currentRefiningAll = values.EXPupper;//总精炼度
                if (_Refining >= _currentRefiningAll)
                {
                    _Refining = _currentRefiningAll;
                }
            }
        }
        float _RefiningRatio = (float)_Refining / _currentRefiningAll;//精炼比值
        float _RefiningDegrees = _DicWingRe[Item.LV].Ability2Value * _RefiningRatio;
        float _life = _DicWingRe[Item.LV].Ability1Value * _RefiningRatio;
        float[] _floList = new float[2];
        _floList[0] = _RefiningDegrees;
        _floList[1] = _life;
        return _floList;
    }
    public bool IsHint(int ID)
    {
        if (WingRefineAttrConfig.Get(ID) == null)
        {
            return false;
        }
        ItemModel itemModel = playerPack.GetItemByIndex(PackType.Equip, (int)RoleEquipType.Wing);
        if (itemModel.GetUseDataModel((int)ItemUseDataKey.wingProgressValue) != null)
        {
            int currentRefining = 0;
            int currentReAll = 0;
            currentRefining = itemModel.GetUseDataModel((int)ItemUseDataKey.wingProgressValue)[0];//当前精炼度
            if (tegWing.Count <= 0)
            {
                tegWing = WingRefineAttrConfig.GetValues();
            }
          //  var wingRefineAttrConfigs = WingRefineAttrConfig.GetValues();
            foreach (var value in tegWing)
            {
                if (itemModel.config.LV == value.wingsPhase)
                {
                    currentReAll = value.EXPupper;//总精炼度
                }
            }
            if (currentReAll > currentRefining)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System;
using Snxxz.UI;
public class EquipmentInitialization
{
    private int _equipIndex;//装备位置
    private int _equipPartStarLV;//装备强化等级
    private int _proficiency;//熟练度
    public int EquipIndex
    {
        get { return _equipIndex; }
        set { _equipIndex = value; }
    }
    public int EquipPartStarLV
    {
        get { return _equipPartStarLV; }
        set { _equipPartStarLV = value; }
    }
    public int Proficiency
    {
        get { return _proficiency; }
        set { _proficiency = value; }
    }
    public EquipmentInitialization() { }
    public EquipmentInitialization(int equipIndex, int equipPartStarLV, int proficiency)
    {
        this._equipIndex = equipIndex;
        this._equipPartStarLV = equipPartStarLV;
        this._proficiency = proficiency;
    }
}
public class StrengthenModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
{
    public Dictionary<int, EquipmentInitialization> _EqInfo = new Dictionary<int, EquipmentInitialization>();//接收服务器下发的数值
    Dictionary<int, int> DefineIndexDic = new Dictionary<int, int>();//装备强化类型
    Dictionary<int, int> EquipMaxDic = new Dictionary<int, int>();//装备强化最大上限强化类型
    List<string> listStrengtheningAll = new List<string>();//用于全身装备属性
    public Dictionary<int, Redpoint> StrengthengRedPoint = new Dictionary<int, Redpoint>();//强化部位红点
    public delegate void Delegate_Ha3b3(HA3B3_tagMCEquipPartStarLVInfo info);
    public static event Delegate_Ha3b3 Event_Ha3b3;     //事件刷新的委托
    public static event Action<int> RefreshEquipUpgradLvAct;
    public int MoneyMax = 0;//所需最大的钱数
    public bool LevelAstrictBool = true;
    public int equipmentA = 0;
    PackModel _playerPack;
    PackModel playerPack
    {
        get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); }
    }
    StrengthenModel m_StrengthengModel;
    StrengthenModel strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>()); } }
    public class EquipRedDot
    {
        public int CurrentLevel;//当前等级
        public int Money;//所需的钱数
    }
    Dictionary<int, EquipRedDot> DicEquip = new Dictionary<int, EquipRedDot>();
    public override void Init()
    {
        listStrengtheningAll = ItemPlusSumAttrConfig.GetKeys();
        FuncConfigConfig funConfig = FuncConfigConfig.Get("StrengthenLevelLimit");
        DefineIndexDic = ConfigParse.GetDic<int, int>(funConfig.Numerical2);
        EquipMaxDic = ConfigParse.GetDic<int, int>(funConfig.Numerical1);
    }
    public override void UnInit()
    {
    }
    public void OnPlayerLoginOk()
    {
        playerPack.refreshItemCountEvent -= OnItemRefreshEvent;
        playerPack.itemCntAddEvent -= OnEquipRefreshEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChange;
        playerPack.refreshItemCountEvent += OnItemRefreshEvent;//背包刷新
        playerPack.itemCntAddEvent += OnEquipRefreshEvent;//角色装备刷新
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange;
        FuncConfigConfig StrengthenRedPointLevel = FuncConfigConfig.Get("StrengthenRedPointLevel");//强化红点规则
        string[] strStrengthenRedPointLevel = ConfigParse.GetMultipleStr(StrengthenRedPointLevel.Numerical1);
        StrengthengRedPointAdd();
        ClassList.Clear();
        for (int i = 0; i < strStrengthenRedPointLevel.Length; i++)
        {
            ClassList.Add(int.Parse(strStrengthenRedPointLevel[i]));
        }
        ClassList.Add(600);
        MoneyData();
        int playerLv = PlayerDatas.Instance.baseData.LV;
        ulong copper = UIHelper.GetMoneyCnt(3);
        if (playerLv >= 150 && MoneyMax > (int)copper)
        {
            LevelAstrictBool = false;
        }
    }
    private void OnFuncStateChange(int obj)
    {
        if (obj == 1)
        {
            MoneyData();
        }
    }
    public void OnBeforePlayerDataInitialize()
    {
        _EqInfo.Clear();
        MoneyMax = 0;
     //   LevelAstrictBool = true;
    }
    private void OnEquipRefreshEvent(PackType type, int index, int id)
    {
        MoneyData();
    }
    private void OnItemRefreshEvent(PackType type, int index, int id)
    {
        if (type == PackType.Equip)
        {
            MoneyData();
        }
    }
    private const int RedPoint_key2 = 10601;
    public Redpoint redPointStre = new Redpoint(MainRedDot.RedPoint_key1, RedPoint_key2);
    public Redpoint StrengthRedpoint
    {
        get
        {
            return redPointStre;
        }
    }
    public void MoneyRequired(int EquippedWith, int EquipmentLevel)//获取最高阶所需的钱数
    {
        int Type = GameDefineIndex(EquippedWith);
        ItemPlusConfig _tagItemPlue = ItemPlusConfig.GetTypeAndGrade(Type, EquipmentLevel);
        if (DicEquip.ContainsKey(EquippedWith))
        {
            DicEquip[EquippedWith].CurrentLevel = EquipmentLevel;
            DicEquip[EquippedWith].Money = _tagItemPlue.costCount;
        }
        else
        {
            EquipRedDot _EquipRedDot = new EquipRedDot();
            _EquipRedDot.CurrentLevel = EquipmentLevel;
            _EquipRedDot.Money = _tagItemPlue.costCount;
            DicEquip.Add(EquippedWith, _EquipRedDot);
        }
        MoneyData();
    }
    public void MoneyData()//获取金钱数据
    {
        equipmentA = 0;
        MoneyMax = ContrastObtain();
        ulong copper = UIHelper.GetMoneyCnt(3);
        //redPointStre.state = RedPointState.None;
        foreach (int key in StrengthengRedPoint.Keys)
        {
            StrengthengRedPoint[key].state = RedPointState.None;
        }
        if (!FuncOpen.Instance.IsFuncOpen(1))
            return;
        if (copper != 0 && MoneyMax != 0 && copper >= (ulong)MoneyMax)
        {
            // redPointStre.state = RedPointState.Simple;
            Lowest();
        }
    }
    private int ContrastObtain()
    {
        MoneyMax = 0;
        SinglePack singlePack = playerPack.GetSinglePack(PackType.Equip);
        if (singlePack == null)
            return MoneyMax;
        foreach (var key in DicEquip.Keys)
        {
            ItemModel itemModel = singlePack.GetItemByIndex(key);
            if (itemModel != null)
            {
                ItemConfig _Item = ItemConfig.Get((int)itemModel.itemId);
                ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
                if (EquipMax(_Item.EquipPlace) != 3)
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
                }
                else
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
                }
                if (_itemPM.levelMax > DicEquip[key].CurrentLevel)
                {
                    if (DicEquip[key].Money > MoneyMax)
                    {
                        MoneyMax = DicEquip[key].Money;
                    }
                }
            }
        }
        return MoneyMax;
    }
    public void OnEquipmentToStrengthen(HA3B3_tagMCEquipPartStarLVInfo info)
    {
        for (int i = 0; i < info.Count; i++)
        {
            if ((int)info.InfoList[i].EquipIndex > 0 && (int)info.InfoList[i].EquipIndex <= 10)
            {
                AddInfo(i, info);
            }
        }
    }
    public bool TheRatingPrompt(int ItemID)//评级提示
    {
        ItemConfig _Item = ItemConfig.Get(ItemID);
        if (_EqInfo.ContainsKey(_Item.EquipPlace))
        {
            int EqInfoLV = _EqInfo[_Item.EquipPlace].EquipPartStarLV;//装备等级
            ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
            if (EquipMax(_Item.EquipPlace) != 3)
            {
                _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
            }
            else
            {
                _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
            }
            int MaxLV = _itemPM.levelMax;
            if (EqInfoLV >= MaxLV)
                return true;
            else
                return false;
        }
        return false;
    }
    public void AddInfo(int equipPlace, HA3B3_tagMCEquipPartStarLVInfo info)//装备位置
    {
        int index = (int)info.InfoList[equipPlace].EquipIndex;
        MoneyRequired(index, (int)info.InfoList[equipPlace].EquipPartStarLV);
        if (_EqInfo.ContainsKey(index))
        {
            _EqInfo[index].EquipIndex = index;
            bool isUpgrad = false;
            if ((int)info.InfoList[equipPlace].EquipPartStarLV > _EqInfo[index].EquipPartStarLV)
            {
                isUpgrad = true;
            }
            _EqInfo[index].EquipPartStarLV = (int)info.InfoList[equipPlace].EquipPartStarLV;
            _EqInfo[index].Proficiency = (int)info.InfoList[equipPlace].Proficiency;
            if (Event_Ha3b3 != null)
                Event_Ha3b3(info);
            if (isUpgrad && RefreshEquipUpgradLvAct != null)
            {
                RefreshEquipUpgradLvAct(index);
            }
        }
        else
        {
            EquipmentInitialization equip = new EquipmentInitialization();
            equip.EquipIndex = index;
            equip.EquipPartStarLV = (int)info.InfoList[equipPlace].EquipPartStarLV;
            equip.Proficiency = (int)info.InfoList[equipPlace].Proficiency;
            _EqInfo.Add(index, equip);
        }
    }
    public int GameDefineIndex(int _location)//强化类型返回
    {
        if (DefineIndexDic.ContainsKey(_location))
        {
            return DefineIndexDic[_location];
        }
        else
        {
            return 0;
        }
    }
    public int EquipMax(int _location)//强化最大上限返回类型
    {
        if (EquipMaxDic.ContainsKey(_location))
        {
            return EquipMaxDic[_location];
        }
        else
        {
            return 0;
        }
    }
    public int StrengthenTheCeiling(int _equippedWith = 1)//装备位
    {
        if (!_EqInfo.ContainsKey(_equippedWith))
        {
            return 0;
        }
        int EquipPartStarLV = _EqInfo[_equippedWith].EquipPartStarLV;
        ItemModel itemModel = playerPack.GetItemByIndex(PackType.Equip, _equippedWith);
        ;
        ItemConfig _Item = ItemConfig.Get((int)itemModel.itemId);
        ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
        if (EquipMax(_Item.EquipPlace) != 3)
        {
            _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
        }
        else
        {
            _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
        }
        if (_itemPM.levelMax >= EquipPartStarLV)
        {
            return EquipPartStarLV;
        }
        else
        {
            return _itemPM.levelMax;
        }
    }
    public Dictionary<int, Dictionary<int, int>> StrengtheningAll()//全身属性
    {
        Dictionary<int, Dictionary<int, int>> _dic = new Dictionary<int, Dictionary<int, int>>();
        int _wholeBodyLevel = 0;
        foreach (int key in _EqInfo.Keys)
        {
            _wholeBodyLevel += _EqInfo[key].EquipPartStarLV;
        }
        for (int i = 0; i < listStrengtheningAll.Count; i++)
        {
            if (int.Parse(listStrengtheningAll[i]) > _wholeBodyLevel)
            {
                int _index = listStrengtheningAll.IndexOf(listStrengtheningAll[i]);
                _dic = GeneralProperties(_index, int.Parse(listStrengtheningAll[i]));
                return _dic;
            }
        }
        return null;
    }
    Dictionary<int, Dictionary<int, int>> GeneralProperties(int _index, int key)
    {
        Dictionary<int, Dictionary<int, int>> _dic = new Dictionary<int, Dictionary<int, int>>();
        if (_index <= 0)
        {
            Dictionary<int, int> _dic1 = new Dictionary<int, int>();
            _dic.Add(0, _dic1);
            Dictionary<int, int> _dic2 = new Dictionary<int, int>();
            var config = ItemPlusSumAttrConfig.Get(key);
            _dic2.Add(config.attType[0], config.attValue[0]);
            _dic2.Add(config.attType[1], config.attValue[1]);
            _dic.Add(key, _dic2);
            return _dic;
        }
        else
        {
            Dictionary<int, int> _dic1 = new Dictionary<int, int>();
            var config = ItemPlusSumAttrConfig.Get(listStrengtheningAll[(_index - 1)]);
            _dic1.Add(config.attType[0], config.attValue[0]);
            _dic1.Add(config.attType[1], config.attValue[1]);
            _dic.Add(int.Parse(listStrengtheningAll[(_index - 1)]), _dic1);
            Dictionary<int, int> _dic2 = new Dictionary<int, int>();
            config = ItemPlusSumAttrConfig.Get(key);
            _dic2.Add(config.attType[0], config.attValue[0]);
            _dic2.Add(config.attType[1], config.attValue[1]);
            _dic.Add(key, _dic2);
            return _dic;
        }
    }
    //==========装备红点
    List<int> StrengthList = new List<int>();
     private bool IsFairyDevice(int Index)
    {
        if (Index == 9 || Index == 10)
        {
            SinglePack singlePack = playerPack.GetSinglePack(PackType.Equip);
            if (singlePack != null && singlePack.GetAllItems().ContainsKey(Index))
            {
                ItemModel item = singlePack.GetItemByIndex(Index);
                ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
                _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(strengthengmodel.EquipMax(Index), 0, 0);
                if (_itemPM.levelMax > strengthengmodel._EqInfo[Index].EquipPartStarLV)//最大可升阶等级和服务端对比
                {
                    return true;
                }
            }
        }
        return false;
    }
    private int Compare(string x, string y)//数组排列
    {
        var _index_x = int.Parse(x);
        var _index_y = int.Parse(y);
        bool havex = IsFairyDevice(_index_x);
        bool havey = IsFairyDevice(_index_y);
        if (havex.CompareTo(havey) != 0)
        {
            return -havex.CompareTo(havey);
        }
        var _sort_x = StrengthList.IndexOf(_index_x);
        var _sort_y = StrengthList.IndexOf(_index_y);
        return _sort_x.CompareTo(_sort_y);
    }
    private void StrengthengRedPointAdd()
    {
        string str = FuncConfigConfig.Get("EquipArea").Numerical1;
        int[] intList = ConfigParse.GetMultipleStr<int>(str);
        if (StrengthList.Count <= 0)
        {
            for (int i = 0; i < intList.Length; i++)
            {
                StrengthList.Add(intList[i]);
            }
        }
        List<string> SortList = new List<string>();
        for (int i = 0; i < intList.Length; i++)
        {
            SortList.Add((intList[i]).ToString());
        }
        SortList.Sort(Compare);
        string[] StrengthenDisplay = SortList.ToArray();
        for (int i = 0; i < StrengthenDisplay.Length; i++)
        {
            int equippedWith = int.Parse(StrengthenDisplay[i]);
            if (!StrengthengRedPoint.ContainsKey(equippedWith))
            {
                int RedPoint_Strength = RedPoint_key2 * 10 + equippedWith;
                Redpoint redPoint = new Redpoint(RedPoint_key2, RedPoint_Strength);
                StrengthengRedPoint.Add(equippedWith, redPoint);
            }
        }
    }
    List<int> ClassList = new List<int>();//红点阶级
    List<int> equipmentRed = new List<int>();//当前存在的装备
    int LowestZbw = 0;
    private void Lowest()//筛选强化部位上最低阶级装备
    {
        equipmentRed.Clear();
        int LowestLV = 0;
        var StrengthengRedPointAllKey = StrengthengRedPoint.Keys;
        foreach (int key in StrengthengRedPointAllKey)
        {
            ItemModel itemModel = playerPack.GetItemByIndex(PackType.Equip, key);
            if (itemModel != null)
            {
                ItemConfig _Item = ItemConfig.Get((int)itemModel.itemId);
                ItemPlusMaxConfig _itemPM = new ItemPlusMaxConfig();
                if (EquipMax(_Item.EquipPlace) != 3)
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), _Item.LV, _Item.ItemColor);
                }
                else
                {
                    _itemPM = ItemPlusMaxConfig.GetEquipTypeAndPhaseColor(EquipMax(_Item.EquipPlace), 0, 0);
                }
                if (_itemPM.levelMax > DicEquip[key].CurrentLevel)
                {
                    if (LowestLV == 0)
                    {
                        LowestLV = DicEquip[key].CurrentLevel;
                        LowestZbw = key;
                    }
                    if (DicEquip[key].CurrentLevel < LowestLV)
                    {
                        LowestLV = DicEquip[key].CurrentLevel;
                        LowestZbw = key;
                    }
                    equipmentRed.Add(key);
                }
            }
        }
        //DesignDebug.LogError(LowestZbw);
        //DesignDebug.LogError(DicEquip[LowestZbw].CurrentLevel);
        if (!DicEquip.ContainsKey(LowestZbw))
        {
            return;
        }
        int Lv = ClassifyJudge(DicEquip[LowestZbw].CurrentLevel);
        RedPointPart(Lv);
    }
    private int ClassifyJudge(int Lv)
    {
        for (int i = 0; i < ClassList.Count; i++)
        {
            if (Lv < ClassList[i])
            {
                return ClassList[i];
            }
        }
        return 0;
    }
    private void RedPointPart(int Lv)
    {
        //DesignDebug.LogError("得到限制等级"+ Lv);
        for (int i = 0; i < equipmentRed.Count; i++)
        {
            if (_EqInfo.ContainsKey(equipmentRed[i]) && _EqInfo[(equipmentRed[i])].EquipPartStarLV < Lv && LevelAstrictBool)
            {
                equipmentA = equipmentRed[i];
                StrengthengRedPoint[(equipmentRed[i])].state = RedPointState.Simple;
                //  DesignDebug.LogError("得到装备位" + (equipmentRed[i]));
                return;
            }
        }
    }
    //===========羽翼精炼
    Dictionary<int, WingRefineAttrModel> _DicWingRe = new Dictionary<int, WingRefineAttrModel>();
    class WingRefineAttrModel
    {
        public int Ability1;//属性值1
        public int Ability1Value;//数值1
        public int Ability2;//属性值2
        public int Ability2Value;//数值2
    }
    private List<WingRefineAttrConfig> tegWing = new List<WingRefineAttrConfig>();
    void WingRefine()//精炼属性
    {
        if (tegWing.Count <= 0)
        {
            tegWing= WingRefineAttrConfig.GetValues();
        }
        //var tegWing = WingRefineAttrConfig.GetValues();
        foreach (var values in tegWing)
        {
            if (!_DicWingRe.ContainsKey(values.wingsPhase))
            {
                WingRefineAttrModel _wingRefineAttrModel = new WingRefineAttrModel();
                int[] array = ConfigParse.GetKeyValueKeys<int>(values.attrupper);
                int[] intarray = ConfigParse.GetKeyValueValues<int>(values.attrupper);
                _wingRefineAttrModel.Ability1 = array[0];
                _wingRefineAttrModel.Ability2 = array[1];
                _wingRefineAttrModel.Ability1Value = intarray[0];
                _wingRefineAttrModel.Ability2Value = intarray[1];
                _DicWingRe.Add(values.wingsPhase, _wingRefineAttrModel);
            }
        }
    }
    public float[] BackpackWings(int ItemID, int _Refining)//用于背包 翅膀(1.翅膀ID,2.精炼值)
    {
        WingRefine();
        int _currentRefiningAll = 0;//总精炼度
        ItemConfig Item = ItemConfig.Get(ItemID);
        if (tegWing.Count <= 0)
        {
            tegWing = WingRefineAttrConfig.GetValues();
        }
      //  var configs = WingRefineAttrConfig.GetValues();
        foreach (var values in tegWing)
        {
            if (Item.LV == values.wingsPhase)
            {
                _currentRefiningAll = values.EXPupper;//总精炼度
                if (_Refining >= _currentRefiningAll)
                {
                    _Refining = _currentRefiningAll;
                }
            }
        }
        float _RefiningRatio = (float)_Refining / _currentRefiningAll;//精炼比值
        float _RefiningDegrees = _DicWingRe[Item.LV].Ability2Value * _RefiningRatio;
        float _life = _DicWingRe[Item.LV].Ability1Value * _RefiningRatio;
        float[] _floList = new float[2];
        _floList[0] = _RefiningDegrees;
        _floList[1] = _life;
        return _floList;
    }
    public bool IsHint(int ID)
    {
        if (WingRefineAttrConfig.Get(ID) == null)
        {
            return false;
        }
        ItemModel itemModel = playerPack.GetItemByIndex(PackType.Equip, (int)RoleEquipType.Wing);
        if (itemModel.GetUseDataModel((int)ItemUseDataKey.wingProgressValue) != null)
        {
            int currentRefining = 0;
            int currentReAll = 0;
            currentRefining = itemModel.GetUseDataModel((int)ItemUseDataKey.wingProgressValue)[0];//当前精炼度
            if (tegWing.Count <= 0)
            {
                tegWing = WingRefineAttrConfig.GetValues();
            }
          //  var wingRefineAttrConfigs = WingRefineAttrConfig.GetValues();
            foreach (var value in tegWing)
            {
                if (itemModel.config.LV == value.wingsPhase)
                {
                    currentReAll = value.EXPupper;//总精炼度
                }
            }
            if (currentReAll > currentRefining)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
}
System/Strengthening/StrengthenModel.cs.meta
File was renamed from System/Pet/PlayerPetDatas.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 7d2b250209cbc8143a7380cc7db246e7
timeCreated: 1504666613
guid: 2d254a99ec23f0d4d8fa268703d6c70b
timeCreated: 1551075430
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/Strengthening/StrengtheningSripts.cs
@@ -76,8 +76,8 @@
    GetItemPathModel _GetItemPath;
    GetItemPathModel GetItemPath { get { return _GetItemPath ?? (_GetItemPath = ModelCenter.Instance.GetModel<GetItemPathModel>()); } }
    PlayerStrengthengDatas m_StrengthengModel;
    PlayerStrengthengDatas strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()); } }
    StrengthenModel m_StrengthengModel;
    StrengthenModel strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<StrengthenModel>()); } }
    ItemTipsModel _itemTipsModel;
    ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel<ItemTipsModel>()); } }
@@ -170,7 +170,7 @@
        _effects = true;
        _open = true;
        _money = PlayerDatas.Instance.baseData.allSliver;
        PlayerStrengthengDatas.Event_Ha3b3 += EquipPartStar;//刷新服务器关于装备信息
        StrengthenModel.Event_Ha3b3 += EquipPartStar;//刷新服务器关于装备信息
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshMoney;//金钱的刷新
        Initialize();
        WindowCenter.Instance.windowBeforeCloseEvent += windowBeforeCloseEvent;
@@ -1216,7 +1216,7 @@
    {
        _open = false;
        StopBtn();//停止强化关闭携程
        PlayerStrengthengDatas.Event_Ha3b3 -= EquipPartStar;//刷新服务器关于装备信息
        StrengthenModel.Event_Ha3b3 -= EquipPartStar;//刷新服务器关于装备信息
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= RefreshMoney;//金钱的刷新
        WindowCenter.Instance.windowBeforeCloseEvent -= windowBeforeCloseEvent;
        int playerLv = PlayerDatas.Instance.baseData.LV;
System/SystemSetting/SettingEffectMgr.cs
@@ -17,10 +17,10 @@
    private StoreConfig _tagShopModel;
    private int[] shopIdlist;
    PlayerPetDatas m_petModel;
    PlayerPetDatas petmodel {
    PetModel m_petModel;
    PetModel petmodel {
        get {
            return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>());
            return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>());
        }
    }
System/Treasure/TreasureSoulModel.cs
@@ -47,7 +47,7 @@
        public override void Init()
        {
            packModel.refreshItemCountEvent += RefreshItemCountAct;
            PlayerStrengthengDatas.RefreshEquipUpgradLvAct += RefreshEquipSTRLv;
            StrengthenModel.RefreshEquipUpgradLvAct += RefreshEquipSTRLv;
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
            ParseConfig();
        }
@@ -74,7 +74,7 @@
        public override void UnInit()
        {
            packModel.refreshItemCountEvent -= RefreshItemCountAct;
            PlayerStrengthengDatas.RefreshEquipUpgradLvAct -= RefreshEquipSTRLv;
            StrengthenModel.RefreshEquipUpgradLvAct -= RefreshEquipSTRLv;
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        }
@@ -447,7 +447,7 @@
                    state = itemGet ? TreasurePrivilegeState.Doing : TreasurePrivilegeState.Reward;
                    break;
                case TreasurePrivilege.StrengthenAdd:
                    var strengthen = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>();
                    var strengthen = ModelCenter.Instance.GetModel<StrengthenModel>();
                    var playerpack = ModelCenter.Instance.GetModel<PackModel>();
                    presentGetCount = 0;
                    foreach (var value in strengthen._EqInfo.Values)
System/Treasure/TreasureSoulPattern4.cs
@@ -12,11 +12,11 @@
        PlayerSuitModel suitModel { get { return ModelCenter.Instance.GetModel<PlayerSuitModel>(); } }
        PackModel pack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        public PlayerStrengthengDatas strengthengmodel
        public StrengthenModel strengthengmodel
        {
            get
            {
                return ModelCenter.Instance.GetModel<PlayerStrengthengDatas>();
                return ModelCenter.Instance.GetModel<StrengthenModel>();
            }
        }
        public override void Display(int _id)
System/Treasure/TreasureSoulWin.cs
@@ -46,11 +46,11 @@
        PlayerSuitModel suitModel { get { return ModelCenter.Instance.GetModel<PlayerSuitModel>(); } }
        PackModel pack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        public PlayerStrengthengDatas strengthengmodel
        public StrengthenModel strengthengmodel
        {
            get
            {
                return ModelCenter.Instance.GetModel<PlayerStrengthengDatas>();
                return ModelCenter.Instance.GetModel<StrengthenModel>();
            }
        }
System/WindowBase/ModelCenter.cs
@@ -127,11 +127,11 @@
            RegisterModel<TitleModel>();
            RegisterModel<KingFairyModel>();
            RegisterModel<DemonJarModel>();
            RegisterModel<PlayerBuffDatas>();
            RegisterModel<PlayerPetDatas>();
            RegisterModel<PlayerMountDatas>();
            RegisterModel<BuffModel>();
            RegisterModel<PetModel>();
            RegisterModel<MountModel>();
            RegisterModel<TaiChiModel>();
            RegisterModel<PlayerStrengthengDatas>();
            RegisterModel<StrengthenModel>();
            RegisterModel<OffLineOnHookModel>();
            RegisterModel<RuneComposeModel>();
            RegisterModel<ItemOverdueModel>();
System/WindowJump/WindowJumpMgr.cs
@@ -20,12 +20,12 @@
    private FuncOpenLVConfig _tagOpenLvModel;
    private Dictionary<int, List<string>> openWindows = new Dictionary<int, List<string>>();
    public Dictionary<int, string> jumpWinNameDict = new Dictionary<int, string>();
    PlayerPetDatas m_petModel;
    PlayerPetDatas petmodel
    PetModel m_petModel;
    PetModel petmodel
    {
        get
        {
            return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PlayerPetDatas>());
            return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel<PetModel>());
        }
    }
@@ -40,8 +40,8 @@
    TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
    DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
    PlayerPetDatas petModel { get { return ModelCenter.Instance.GetModel<PlayerPetDatas>(); } }
    PlayerMountDatas mountModel { get { return ModelCenter.Instance.GetModel<PlayerMountDatas>(); } }
    PetModel petModel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
    MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
    TreasureFindHostModel hostModel { get { return ModelCenter.Instance.GetModel<TreasureFindHostModel>(); } }
    FairyModel fairyModel { get { return ModelCenter.Instance.GetModel<FairyModel>(); } }
    DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }