hch
2025-06-19 5022f4efe76121df33dc81249befa7556e535418
0312 红点增加“新”标识功能,其他代码优化
16个文件已修改
1 文件已重命名
2个文件已删除
3个文件已添加
3820 ■■■■■ 已修改文件
Main/System/Chat/ChatCenter.cs 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatManager.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FairyUnion/FairyModel.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FairyUnion/PlayerFairyData.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/GeneralConfig/GeneralDefine.cs 1368 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HappyXBModel.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/KnapSack/Logic/ItemLogicUtility.cs 405 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/KnapSack/PackManager.cs 920 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/KnapSack/VirtualPackManager.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/HomeWin.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/HomeWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/MainWin.cs 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/MainInterfacePanel.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/MainInterfacePanel/MainRedDot.cs 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Recharge/RechargeManager.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/MainRedDot.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/MainRedDot.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/RedpointBehaviour.cs 213 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/RedpointCenter.cs 244 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Store/StoreModel.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Task/TaskManager.cs 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatCenter.cs
@@ -49,8 +49,8 @@
        void ParseConfig()
        {
            chatCharacterLimit = int.Parse(FuncConfigConfig.Get("MessageLength").Numerical1);
            var _funcCfg = FuncConfigConfig.Get("BugleItem");
            bugleItem = int.Parse(_funcCfg.Numerical1);
            // var _funcCfg = FuncConfigConfig.Get("BugleItem");
            // bugleItem = int.Parse(_funcCfg.Numerical1);
            chatChannels = new List<ChatInfoType>();
            chatChannels.Add(ChatInfoType.System);
            chatChannels.Add(ChatInfoType.World);
@@ -63,16 +63,16 @@
            chatChannels.Add(ChatInfoType.Friend);
            chatChannels.Add(ChatInfoType.default1);
            var config = FuncConfigConfig.Get("ClientChatBan");
            banCheckSecond = int.Parse(config.Numerical1);
            repeatCountLimit = int.Parse(config.Numerical2);
            maliceCheckCount = int.Parse(config.Numerical3);
            maliceLimitCount = int.Parse(config.Numerical4);
            var array = ConfigParse.GetMultipleStr<int>(config.Numerical5);
            singleBanSecond = array[0];
            maxBanSecond = array[1];
            // var config = FuncConfigConfig.Get("ClientChatBan");
            // banCheckSecond = int.Parse(config.Numerical1);
            // repeatCountLimit = int.Parse(config.Numerical2);
            // maliceCheckCount = int.Parse(config.Numerical3);
            // maliceLimitCount = int.Parse(config.Numerical4);
            // var array = ConfigParse.GetMultipleStr<int>(config.Numerical5);
            // singleBanSecond = array[0];
            // maxBanSecond = array[1];
            config = FuncConfigConfig.Get("LocalChatHistoryCount");
            var config = FuncConfigConfig.Get("LocalChatHistoryCount");
            if (config != null)
            {
                LocalChatHistory.localSaveCount = int.Parse(config.Numerical1);
@@ -479,36 +479,38 @@
        public int singleBanSecond = 1;
        public int maxBanSecond = 1;
        public int banSecond {
            get { return LocalSave.GetInt("ClientChatBanSecond", 0); }
            set {
                LocalSave.SetInt("ClientChatBanSecond", value);
            }
        }
    public int banSecond;
        // {
        //     get { return LocalSave.GetInt("ClientChatBanSecond", 0); }
        //     set {
        //         LocalSave.SetInt("ClientChatBanSecond", value);
        //     }
        // }
        private int[] banTimeArray = new int[6];
        private DateTime bandTime {
            get {
                var timeArray = LocalSave.GetIntArray("ClientChatBanTime");
                if (null == timeArray)
                {
                    return TimeUtility.OriginalTime;
                }
                else
                {
                    return new DateTime(timeArray[0], timeArray[1], timeArray[2], timeArray[3], timeArray[4], timeArray[5]);
                }
            }
            set {
                banTimeArray[0] = value.Year;
                banTimeArray[1] = value.Month;
                banTimeArray[2] = value.Day;
                banTimeArray[3] = value.Hour;
                banTimeArray[4] = value.Minute;
                banTimeArray[5] = value.Second;
                LocalSave.SetIntArray("ClientChatBanTime", banTimeArray);
            }
        }
    private DateTime bandTime;
        // {
        //     get {
        //         var timeArray = LocalSave.GetIntArray("ClientChatBanTime");
        //         if (null == timeArray)
        //         {
        //             return TimeUtility.OriginalTime;
        //         }
        //         else
        //         {
        //             return new DateTime(timeArray[0], timeArray[1], timeArray[2], timeArray[3], timeArray[4], timeArray[5]);
        //         }
        //     }
        //     set {
        //         banTimeArray[0] = value.Year;
        //         banTimeArray[1] = value.Month;
        //         banTimeArray[2] = value.Day;
        //         banTimeArray[3] = value.Hour;
        //         banTimeArray[4] = value.Minute;
        //         banTimeArray[5] = value.Second;
        //         LocalSave.SetIntArray("ClientChatBanTime", banTimeArray);
        //     }
        // }
        public void ChatClientBan()
        {
Main/System/Chat/ChatManager.cs
@@ -155,8 +155,8 @@
        presentChatType = ChatInfoType.World;
        IsExtentOpen = false;
        var _funcCfg = FuncConfigConfig.Get("BugleItem");
        BugleItem = int.Parse(_funcCfg.Numerical1);
        // var _funcCfg = FuncConfigConfig.Get("BugleItem");
        // BugleItem = int.Parse(_funcCfg.Numerical1);
        DTC0102_tagCDBPlayer.switchAccountEvent += SwitchAccountEvent;
        // TODO YYL
@@ -165,28 +165,28 @@
        InitChatRedpoints();
        FuncConfigConfig _cfg = FuncConfigConfig.Get("RandomWord");
        try
        {
            achievementRandoms.Add(ChatInfoType.World, new List<string>(ConfigParse.GetMultipleStr(_cfg.Numerical1)));
            achievementRandoms.Add(ChatInfoType.Fairy, new List<string>(ConfigParse.GetMultipleStr(_cfg.Numerical2)));
            var json = LitJson.JsonMapper.ToObject(_cfg.Numerical3);
            foreach (var key in json.Keys)
            {
                var type = int.Parse(key);
                m_TaskRandomChats.Add(type, new List<string>(LitJson.JsonMapper.ToObject<string[]>(json[key].ToJson())));
            }
            assistThankLanguages.AddRange(ConfigParse.GetMultipleStr(_cfg.Numerical4));
            if (!string.IsNullOrEmpty(_cfg.Numerical5))
            {
                var levelArray = ConfigParse.GetMultipleStr<int>(_cfg.Numerical5);
                assistThankLevelLimit = new Int2(levelArray[0], levelArray[1]);
            }
        }
        catch (Exception e)
        {
            Debug.LogError(e.Message);
        }
        // FuncConfigConfig _cfg = FuncConfigConfig.Get("RandomWord");
        // try
        // {
        //     achievementRandoms.Add(ChatInfoType.World, new List<string>(ConfigParse.GetMultipleStr(_cfg.Numerical1)));
        //     achievementRandoms.Add(ChatInfoType.Fairy, new List<string>(ConfigParse.GetMultipleStr(_cfg.Numerical2)));
        //     var json = LitJson.JsonMapper.ToObject(_cfg.Numerical3);
        //     foreach (var key in json.Keys)
        //     {
        //         var type = int.Parse(key);
        //         m_TaskRandomChats.Add(type, new List<string>(LitJson.JsonMapper.ToObject<string[]>(json[key].ToJson())));
        //     }
        //     assistThankLanguages.AddRange(ConfigParse.GetMultipleStr(_cfg.Numerical4));
        //     if (!string.IsNullOrEmpty(_cfg.Numerical5))
        //     {
        //         var levelArray = ConfigParse.GetMultipleStr<int>(_cfg.Numerical5);
        //         assistThankLevelLimit = new Int2(levelArray[0], levelArray[1]);
        //     }
        // }
        // catch (Exception e)
        // {
        //     Debug.LogError(e.Message);
        // }
    }
    private void PlayerLoginOkEvent()
Main/System/FairyUnion/FairyModel.cs
@@ -163,19 +163,12 @@
    public readonly int changeFairyNameItem = 947;
    public int freeNotifyCount { get; private set; }
    public int changeNotifyCost { get; private set; }
    public int fairyFeastDeskNpc { get; private set; }
    public int fairyCreateTimes { get; private set; }
    void ParseConfig()
    {
        var config = FuncConfigConfig.Get("CreateFamily");
        createFairyCost = int.Parse(config.Numerical1);
        config = FuncConfigConfig.Get("FamilyBroadcast");
        freeNotifyCount = int.Parse(config.Numerical1);
        changeNotifyCost = int.Parse(config.Numerical2);
        config = FuncConfigConfig.Get("FamilyShop");
        fairyStoreLimit = int.Parse(config.Numerical2);
        config = FuncConfigConfig.Get("FamilyPartyDeskNpcID");
        fairyFeastDeskNpc = int.Parse(config.Numerical1);
        config = FuncConfigConfig.Get("FamilyMatchSet");
        fairyLeagueLimit = int.Parse(config.Numerical1);
    }
Main/System/FairyUnion/PlayerFairyData.cs
@@ -344,17 +344,17 @@
    public int[] funcArray = null;
    public bool IsCanFunc(LimitFunc funcType)
    {
        if (funcArray == null)
        {
            funcArray = ConfigParse.GetMultipleStr<int>(FuncConfigConfig.Get("FamilyPurview").Numerical1);
        }
        if (funcArray != null && funcArray.Length > 6)
        {
            if (mine != null)
            {
                return mine.FamilyLV >= funcArray[(int)funcType];
            }
        }
        // if (funcArray == null)
        // {
        //     funcArray = ConfigParse.GetMultipleStr<int>(FuncConfigConfig.Get("FamilyPurview").Numerical1);
        // }
        // if (funcArray != null && funcArray.Length > 6)
        // {
        //     if (mine != null)
        //     {
        //         return mine.FamilyLV >= funcArray[(int)funcType];
        //     }
        // }
        return false;
    }
    #endregion
Main/System/GeneralConfig/GeneralDefine.cs
@@ -246,727 +246,727 @@
    {
        try
        {
            equipStarUpAmendFactor = GetIntArray("EquipStarRate")[0];
            equipStarDownAmendFactor = GetIntArray("EquipStarRate")[1];
            // equipStarUpAmendFactor = GetIntArray("EquipStarRate")[0];
            // equipStarDownAmendFactor = GetIntArray("EquipStarRate")[1];
            normalEquipStarUpgradeRateFloor = GetIntArray("EquipStarRate", 2)[0];
            normalEquipStarUpgradeRateCeiling = GetIntArray("EquipStarRate", 2)[1];
            // normalEquipStarUpgradeRateFloor = GetIntArray("EquipStarRate", 2)[0];
            // normalEquipStarUpgradeRateCeiling = GetIntArray("EquipStarRate", 2)[1];
            suitEquipStarUpgradeRateFloor = GetIntArray("EquipStarRate", 3)[0];
            suitEquipStarUpgradeRateCeiling = GetIntArray("EquipStarRate", 3)[1];
            // suitEquipStarUpgradeRateFloor = GetIntArray("EquipStarRate", 3)[0];
            // suitEquipStarUpgradeRateCeiling = GetIntArray("EquipStarRate", 3)[1];
            BlueEquipJumpLevel = GetInt("BlueEquipJumpLevel");
            initDepotGridCount = GetInt("InitDepotCellCount");
            maxDepotGridCount = GetInt("MaxDepotCellCount");
            initBagGridCount = GetInt("InitBagCellCount");
            maxBagGridCount = GetInt("MaxBagCellCount");
            maxXBGridCount = GetInt("TreasureSet", 3);
            // BlueEquipJumpLevel = GetInt("BlueEquipJumpLevel");
            // initDepotGridCount = GetInt("InitDepotCellCount");
            // maxDepotGridCount = GetInt("MaxDepotCellCount");
            // initBagGridCount = GetInt("InitBagCellCount");
            // maxBagGridCount = GetInt("MaxBagCellCount");
            // maxXBGridCount = GetInt("TreasureSet", 3);
            CompareEquipPlaces = GetIntArray("EquipUpType");
            playerMaxLevel = GetInt("PlayerMaxLV");
            kylinHomeCollectItems = GetIntArray("KirinNpc", 2);
            dailyQuestOpenTime = GetTimeArray("ActionTime", 1);
            flyBootItemId = GetInt("TransportPay");
            flyBootItemMoney = GetInt("TransportPay", 2);
            teamReadyTime = GetInt("TeamReadyTime");
            playerNameLength = GetInt("RoleNameLength");
            elderGodAreaAngerTotal = GetInt("AngryAdd", 4);
            petRandomSpeak = GetFloat("PetRandomSpeak");
            guardDungeonCageNPCID = GetInt("GuardFBCageNPCID");
            guardBubbleInterval = GetFloat("GuardFBCageNPCID", 3);
            autoRideHorse = GetFloat("AutoRideHorseTime") * Constants.F_DELTA;
            moneyDisplayIds = ConfigParse.GetDic<int, int>(GetInputString("MoneyDisplayModel", 1));
            expDisplayId = GetInt("MoneyDisplayModel", 2);
            openJobs = GetIntArray("OpenJob");
            xpGuideDelay = GetFloat("GuideConfig");
            xpGuideDuration = GetFloat("GuideConfig", 2);
            ResetComAtkTime = GetFloat("AtkWaitingTime");
            autoOnHookMap = new List<int>(GetIntArray("AutoOnHookMap"));
            GuardianPickUpID = new List<int>(GetIntArray("GuardianPickUpID"));
            ArenaSetList = new List<int>(GetIntArray("ArenaSet"));
            RotateSpeed = GetInt("RoleTurnedAngle");
            CloseNpcDist = GetFloat("ConversationDistanc", 2);
            FarawayNpcDist = GetFloat("ConversationDistanc");
            SpecialNpcIDs = new List<int>(GetIntArray("SpecialCollectNpcs", 1));
            PetDanceInterval = GetInt("PetDanceInterval") * Constants.F_GAMMA;
            FuncNpcDanceInterval = GetInt("PetDanceInterval", 2) * Constants.F_GAMMA;
            ruinsTranscriptMapId = GetInt("SpRewardMapID");
            EarlierGetTreasure = new List<int>(GetIntArray("EarlierGetTreasure"));
            BossSound = GetInt("BossSound");
            PlayBossHurtInterval = GetFloat("BossSound", 2);
            var jobHeadPortraitConfig1 = FuncConfigConfig.Get("Job1Head");
            jobHeadPortrait[1] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig1.Numerical1);
            otherjobHeadPortrait[1] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig1.Numerical2);
            // CompareEquipPlaces = GetIntArray("EquipUpType");
            // playerMaxLevel = GetInt("PlayerMaxLV");
            // kylinHomeCollectItems = GetIntArray("KirinNpc", 2);
            // dailyQuestOpenTime = GetTimeArray("ActionTime", 1);
            // flyBootItemId = GetInt("TransportPay");
            // flyBootItemMoney = GetInt("TransportPay", 2);
            // teamReadyTime = GetInt("TeamReadyTime");
            // playerNameLength = GetInt("RoleNameLength");
            // elderGodAreaAngerTotal = GetInt("AngryAdd", 4);
            // petRandomSpeak = GetFloat("PetRandomSpeak");
            // guardDungeonCageNPCID = GetInt("GuardFBCageNPCID");
            // guardBubbleInterval = GetFloat("GuardFBCageNPCID", 3);
            // autoRideHorse = GetFloat("AutoRideHorseTime") * Constants.F_DELTA;
            // moneyDisplayIds = ConfigParse.GetDic<int, int>(GetInputString("MoneyDisplayModel", 1));
            // expDisplayId = GetInt("MoneyDisplayModel", 2);
            // openJobs = GetIntArray("OpenJob");
            // xpGuideDelay = GetFloat("GuideConfig");
            // xpGuideDuration = GetFloat("GuideConfig", 2);
            // ResetComAtkTime = GetFloat("AtkWaitingTime");
            // autoOnHookMap = new List<int>(GetIntArray("AutoOnHookMap"));
            // GuardianPickUpID = new List<int>(GetIntArray("GuardianPickUpID"));
            // ArenaSetList = new List<int>(GetIntArray("ArenaSet"));
            // RotateSpeed = GetInt("RoleTurnedAngle");
            // CloseNpcDist = GetFloat("ConversationDistanc", 2);
            // FarawayNpcDist = GetFloat("ConversationDistanc");
            // SpecialNpcIDs = new List<int>(GetIntArray("SpecialCollectNpcs", 1));
            // PetDanceInterval = GetInt("PetDanceInterval") * Constants.F_GAMMA;
            // FuncNpcDanceInterval = GetInt("PetDanceInterval", 2) * Constants.F_GAMMA;
            // ruinsTranscriptMapId = GetInt("SpRewardMapID");
            // EarlierGetTreasure = new List<int>(GetIntArray("EarlierGetTreasure"));
            // BossSound = GetInt("BossSound");
            // PlayBossHurtInterval = GetFloat("BossSound", 2);
            // var jobHeadPortraitConfig1 = FuncConfigConfig.Get("Job1Head");
            // jobHeadPortrait[1] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig1.Numerical1);
            // otherjobHeadPortrait[1] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig1.Numerical2);
            var jobHeadPortraitConfig2 = FuncConfigConfig.Get("Job2Head");
            jobHeadPortrait[2] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig2.Numerical1);
            otherjobHeadPortrait[2] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig2.Numerical2);
            // var jobHeadPortraitConfig2 = FuncConfigConfig.Get("Job2Head");
            // jobHeadPortrait[2] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig2.Numerical1);
            // otherjobHeadPortrait[2] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig2.Numerical2);
            var jobHeadPortraitConfig3 = FuncConfigConfig.Get("Job3Head");
            jobHeadPortrait[3] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig3.Numerical1);
            otherjobHeadPortrait[3] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig3.Numerical2);
            // var jobHeadPortraitConfig3 = FuncConfigConfig.Get("Job3Head");
            // jobHeadPortrait[3] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig3.Numerical1);
            // otherjobHeadPortrait[3] = ConfigParse.GetDic<int, string>(jobHeadPortraitConfig3.Numerical2);
            bossWearyValues = ConfigParse.GetDic<int, int>(GetInputString("KillBossCntLimit", 2));
            wingEquipLimits = ConfigParse.GetDic<int, int>(GetInputString("WingRealmLimit", 1));
            int i = 0;
            int[] equipPlaces = GetIntArray("EquipArea", 1);
            string[] equipPlacesNames = GetStringArray("EquipArea", 2);
            equipPlaceNameDict = new Dictionary<int, string>();
            for (i = 0; i < equipPlaces.Length; i++)
            {
                if (!equipPlaceNameDict.ContainsKey(equipPlaces[i]))
                {
                    equipPlaceNameDict.Add(equipPlaces[i], equipPlacesNames[i]);
                }
                else
                {
                    Debug.LogError("EquipArea : 装备位置重复");
                }
            }
            var _trailBossJson = LitJson.JsonMapper.ToObject(GetInputString("MuneKadoTrialBossHead", 1));
            trailBossHeadIcons = new Dictionary<int, string>();
            foreach (var _key in _trailBossJson.Keys)
            {
                var _npcId = int.Parse(_key);
                if (!trailBossHeadIcons.ContainsKey(_npcId))
                {
                    trailBossHeadIcons.Add(_npcId, _trailBossJson[_key].ToString());
                }
            }
            FuncConfigConfig HorseTrainConfig = FuncConfigConfig.Get("HorseTrain");
            HorseTrainIDList = LitJson.JsonMapper.ToObject<int[]>(HorseTrainConfig.Numerical1);
            FuncConfigConfig PetTrainConfig = FuncConfigConfig.Get("PetUpItem");
            PetTrainIDList = LitJson.JsonMapper.ToObject<int[]>(PetTrainConfig.Numerical3);
            FuncConfigConfig LingQiTrainConfig = FuncConfigConfig.Get("HorseTrain");
            var LingQiTrainJson = LitJson.JsonMapper.ToObject(GetInputString("LingQiTrain", 1));
            LingQiTrainIDList = new Dictionary<int, List<int>>();
            foreach (var key in LingQiTrainJson.Keys)
            {
                int attrId = int.Parse(key);
                var skillIds = LingQiTrainJson[key];
                foreach (var skillId in skillIds)
                {
                    int id = int.Parse(skillId.ToString());
                    if (!LingQiTrainIDList.ContainsKey(attrId))
                    {
                        List<int> list = new List<int>();
                        list.Add(id);
                        LingQiTrainIDList.Add(attrId, list);
                    }
                    else
                    {
                        LingQiTrainIDList[attrId].Add(id);
                    }
                }
            }
            var skillPlusAttrIDJson = LitJson.JsonMapper.ToObject(GetInputString("SkillPlusAttrID", 2));
            skillAttrIDDict = new Dictionary<int, List<int>>();
            foreach (var key in skillPlusAttrIDJson.Keys)
            {
                int attrId = int.Parse(key);
                var skillIds = skillPlusAttrIDJson[key];
                foreach (var skillId in skillIds)
                {
                    int id = int.Parse(skillId.ToString());
                    if (!skillAttrIDDict.ContainsKey(id))
                    {
                        List<int> list = new List<int>();
                        list.Add(attrId);
                        skillAttrIDDict.Add(id, list);
                    }
                    else
                    {
                        skillAttrIDDict[id].Add(attrId);
                    }
                }
            }
            var BossAssistAwardJson = LitJson.JsonMapper.ToObject(GetInputString("AssistAward", 1));
            BossAssistAward = new Dictionary<int, List<int>>();
            foreach (var key in BossAssistAwardJson.Keys)
            {
                int bossID = int.Parse(key);
                var awards = BossAssistAwardJson[key];
                if (!BossAssistAward.ContainsKey(bossID))
                {
                    BossAssistAward[bossID] = new List<int>();
                }
                foreach (var award in awards)
                {
                    BossAssistAward[bossID].Add(int.Parse(award.ToString()));
                }
            }
            var FBAssistAwardJson = LitJson.JsonMapper.ToObject(GetInputString("AssistAward", 2));
            FBAssistAward = new Dictionary<int, List<int>>();
            foreach (var key in FBAssistAwardJson.Keys)
            {
                int mapID = int.Parse(key);
                var awards = FBAssistAwardJson[key];
                if (!FBAssistAward.ContainsKey(mapID))
                {
                    FBAssistAward[mapID] = new List<int>();
                }
                foreach (var award in awards)
                {
                    FBAssistAward[mapID].Add(int.Parse(award.ToString()));
                }
            }
            var _godWeaponJson = LitJson.JsonMapper.ToObject(GetInputString("GodModel", 1));
            godWeaponMobs = new Dictionary<int, string>();
            foreach (var _key in _godWeaponJson.Keys)
            {
                var _godWeaponType = int.Parse(_key);
                if (!godWeaponMobs.ContainsKey(_godWeaponType))
                {
                    godWeaponMobs.Add(_godWeaponType, _godWeaponJson[_key].ToString());
                }
            }
            audioScaleWhenFullScreenOn = GetFloat("AudioSound");
            iceCrystalMonsterScores = ConfigParse.GetDic<int, int>(GetInputString("IceLodeNeedPoint", 2));
            NoXpDungeons = new List<int>(GetIntArray("XpNoUseDungeon"));
            RandomJobs = new List<int>(GetIntArray("RandomJob"));
            elderGodTalkingTime = GetInt("ElderGodTalkingTime");
            elderGodBigBoss = GetInt("ElderGodBigBoss");
            PassiveSkillShow = new List<int>(GetIntArray("PassiveSkillShow"));
            FuncConfigConfig func = FuncConfigConfig.Get("NpcPosOffset");
            LitJson.JsonData _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            foreach (var _key in _data.Keys)
            {
                int _npcID = int.Parse(_key);
                double[] _pos = new double[2];
                _pos[0] = (double)_data[_key][0];
                _pos[1] = (double)_data[_key][1];
                NpcPosOffset.Add(_npcID, new Vector3((float)_pos[0], 0, (float)_pos[1]));
            }
            //checkShowSwitchAccount
            var showSwitchAccount = FuncConfigConfig.Get("ShowSwitchAccount");
            LitJson.JsonData itemShowSwitchAccount = LitJson.JsonMapper.ToObject(showSwitchAccount.Numerical1);
            checkShowSwitchAccount = new List<string>();
            foreach(var item in itemShowSwitchAccount)
            {
                checkShowSwitchAccount.Add(item.ToString());
            }
            var putInItemPack = FuncConfigConfig.Get("PutInItemPack");
            LitJson.JsonData itemPutInData = LitJson.JsonMapper.ToObject(putInItemPack.Numerical1);
            itemPutInPackDict = new Dictionary<int, List<int>>();
            foreach (var _key in itemPutInData.Keys)
            {
                var itemTypeData = itemPutInData[_key];
                int packType = int.Parse(_key);
                List<int> itemTypes = new List<int>();
                itemPutInPackDict.Add(packType, itemTypes);
                if (itemTypeData.IsArray)
                {
                    for (i = 0; i < itemTypeData.Count; i++)
                    {
                        int itemType = int.Parse(itemTypeData[i].ToString());
                        itemTypes.Add(itemType);
                    }
                }
            }
            //拾取贵重物品
            FuncConfigConfig importantItemType = FuncConfigConfig.Get("AutoBuyDrug");
            ImportantItemType = LitJson.JsonMapper.ToObject<int[]>(importantItemType.Numerical2);
            ImportantItemID = LitJson.JsonMapper.ToObject<int[]>(importantItemType.Numerical3);
            FuncConfigConfig nxxdImg = FuncConfigConfig.Get("NXXDPicture");
            LitJson.JsonData nxxdData = LitJson.JsonMapper.ToObject(nxxdImg.Numerical1);
            multipleRealmImgDict = new Dictionary<int, string>();
            if (nxxdData.IsArray)
            {
                for (i = 0; i < nxxdData.Count; i++)
                {
                    if (nxxdData[i].IsArray)
                    {
                        multipleRealmImgDict.Add(int.Parse(nxxdData[i][0].ToString()), nxxdData[i][1].ToString());
                    }
                }
            }
            bossShuntMaps = new List<int>(GetIntArray("BossShunt"));
            bossShuntDays = GetInt("BossShunt", 3);
            itemDropEffect.Clear();
            func = FuncConfigConfig.Get("ItemEquipmentEffect");
            _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            List<string> _keys = new List<string>(_data.Keys);
            for (i = 0; i < _keys.Count; ++i)
            {
                int[] _props = new int[3];
                for (int j = 0; j < 3; ++j)
                {
                    _props[j] = (int)_data[_keys[i]][j];
                }
                itemDropEffect[int.Parse(_keys[i])] = _props;
            }
            xllyDropEffect.Clear();
            _data = LitJson.JsonMapper.ToObject(func.Numerical2);
            _keys.Clear();
            _keys.AddRange(_data.Keys);
            for (i = 0; i < _keys.Count; ++i)
            {
                int[] _props = new int[3];
                for (int j = 0; j < 3; ++j)
                {
                    _props[j] = (int)_data[_keys[i]][j];
                }
                xllyDropEffect[int.Parse(_keys[i])] = _props;
            }
            xqryDropEffect.Clear();
            _data = LitJson.JsonMapper.ToObject(func.Numerical3);
            _keys.Clear();
            _keys.AddRange(_data.Keys);
            for (i = 0; i < _keys.Count; ++i)
            {
                int[] _props = new int[3];
                for (int j = 0; j < 3; ++j)
                {
                    _props[j] = (int)_data[_keys[i]][j];
                }
                xqryDropEffect[int.Parse(_keys[i])] = _props;
            }
            dropEffectQuality.Clear();
            func = FuncConfigConfig.Get("IeemEquipmentEffectQuality");
            _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            _keys.Clear();
            _keys.AddRange(_data.Keys);
            for (i = 0; i < _keys.Count; ++i)
            {
                dropEffectQuality[int.Parse(_keys[i])] = (int)_data[_keys[i]];
            }
            customDropEffect.Clear();
            func = FuncConfigConfig.Get("ItemEquipmentEffectItem");
            _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            _keys.Clear();
            _keys.AddRange(_data.Keys);
            int[] _tmp = null;
            List<int[]> _content = null;
            for (i = 0; i < _keys.Count; ++i)
            {
                _content = new List<int[]>();
                foreach (LitJson.JsonData _values in _data[_keys[i]])
                {
                    if (_values.IsArray)
                    {
                        _tmp = new int[2];
                        _tmp[0] = (int)_values[0];
                        _tmp[1] = (int)_values[1];
                    }
                    else
                    {
                        _tmp = new int[1];
                        _tmp[0] = (int)_values;
                    }
                    _content.Add(_tmp);
                }
                customDropEffect.Add(int.Parse(_keys[i]), _content);
            }
            BuffToHitEffect.Clear();
            func = FuncConfigConfig.Get("BuffToHitEffect");
            if (!string.IsNullOrEmpty(func.Numerical1) && !string.IsNullOrEmpty(func.Numerical2))
            {
                string[] _buffs = func.Numerical1.Split('|');
                string[] _effects = func.Numerical2.Split('|');
                for (i = 0; i < _buffs.Length; ++i)
                {
                    BuffToHitEffect[int.Parse(_buffs[i])] = int.Parse(_effects[i]);
                }
            }
            demonJarHintLevelLimit = GetInt("DemonJarFirstRemin");
            demonJarHintLineId = GetInt("DemonJarFirstRemin", 2);
            skillPanelUnLock = GetInt("SkillPanelUnlock");
            dailyQuestRedpointLevelLimit = GetInt("DailyQuestRedPoint");
            lowHpRemind = GetInt("LowHpRemind");
            autoBuyItemIds = GetIntArray("BuyItemPrice", 1);
            autoBuyItemPrices = GetIntArray("BuyItemPrice", 2);
            neutralMaps.AddRange(GetIntArray("MapLine", 4));
            neutralBossMaps.AddRange(GetIntArray("BossListMapID"));
            var _propertyIconCfg = FuncConfigConfig.Get("PropertyIcon");
            var _propertyIconJson = LitJson.JsonMapper.ToObject(_propertyIconCfg.Numerical1);
            foreach (var _key in _propertyIconJson.Keys)
            {
                var _property = int.Parse(_key);
                propertyIconDict.Add(_property, _propertyIconJson[_key].ToString());
            }
            munekadolockLimit = GetInt("MunekadoLockLimit");
            demonJarRedPoint = GetInt("DemonJarRedPoint");
            LoadLV = GetInputString("LoadLV");
            mainWinSkillResetTime = GetFloat("AutomaticSwitch");
            heroDialogueOffset = GetInputString("NpcHalfLength", 1).Vector3Parse();
            heroDialogueRotation = GetInputString("NpcHalfLength", 2).Vector3Parse();
            heroDialogueScale = GetFloat("NpcHalfLength", 3);
            var ancientConfig = FuncConfigConfig.Get("ElderBattleTarget");
            ancientGrandTotalAchievements = new List<int>();
            ancientGrandTotalAchievements.AddRange(ConfigParse.GetMultipleStr<int>(ancientConfig.Numerical1));
            ancientContinueKillAchievements = new List<int>();
            ancientContinueKillAchievements.AddRange(ConfigParse.GetMultipleStr<int>(ancientConfig.Numerical2));
            trialDungeonGroupChallengeTipLv = GetInt("SingleIntoFB");
            prayerRedpointLimitLv = GetInt("PrayRedPoint");
            demonJarLevelLimit = GetInt("DemonJarLevelLimit");
            maxItemDropEffectCount = GetInt("ItemMaskEffect");
            specialGuide41Mission = GetInt("SpecialGuide41", 1);
            specialGuide41Achievement = GetInt("SpecialGuide41", 2);
            supremeRechargeVipLv = GetInt("SupremeCTGVipLimit", 1);
            rechargeRedpointLv = GetInt("FirstPayRedPoint", 1);
            rechargeRedpointMinLv = GetInt("FirstPayRedPoint", 2);
            runeTowerSweepBuyTimes = GetInt("RuneTowerSweepBuy");
            runeTowerSweepBuyPrice = GetInt("RuneTowerSweepBuy", 2);
            teamMatchingTimeOut = GetInt("TeamMatchingTimeOut");
            inGameDownLoadLevelCheckPoints = new List<int>(GetIntArray("InGameDownLoad"));
            inGameDownLoadTaskCheckPoints = new List<int>(GetIntArray("InGameDownLoad", 2));
            inGameDownLoadHighLevel = GetInt("InGameDownLoad", 3);
            worldBossNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 1));
            bossHomeNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 2));
            elderGodNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 3));
            demonJarNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 4));
            dogzNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 5));
            if (ModeDefaultConfig == null)
            {
                func = FuncConfigConfig.Get("ModeDefault");
                string[] _funcNpc = func.Numerical1.Split('|');
                string[] _fightNpc = func.Numerical2.Split('|');
                string[] _pet = func.Numerical3.Split('|');
                string[] _horse = func.Numerical4.Split('|');
                ModeDefaultConfig = new string[4][];
                ModeDefaultConfig[0] = _funcNpc;
                ModeDefaultConfig[1] = _fightNpc;
                ModeDefaultConfig[2] = _pet;
                ModeDefaultConfig[3] = _horse;
            }
            if (RealmGroup == null)
            {
                func = FuncConfigConfig.Get("RealmGroup");
                string[] _group = func.Numerical1.Split('|');
                RealmGroup = new int[_group.Length];
                for (int j = 0; j < _group.Length; ++j)
                {
                    int.TryParse(_group[j], out RealmGroup[j]);
                }
            }
            func = FuncConfigConfig.Get("PrefightAtkRange");
            PrefightAtkRange = float.Parse(func.Numerical1);
            inGameDownLoadHighestLevelPoint = GetInt("DownReward", 2);
            dungeonCanUseMoneyIds = new List<int>(GetIntArray("FBEnterTickeyAuto", 1));
            dungeonRebornClientTimes = ConfigParse.GetDic<int, int>(GetInputString("DuplicatesRebornTime", 2));
            dogzBoxLimit = GetInt("DogzBoxLimit");
            fairyGrabBossMapLines = ConfigParse.GetDic<int, int>(GetInputString("MapLine", 2));
            var grabBossMaps = fairyGrabBossMapLines.Keys.ToList();
            foreach (var _key in grabBossMaps)
            {
                fairyGrabBossMapLines[_key] = fairyGrabBossMapLines[_key] - 1;
            }
            if (DropItemEffectMapID == null)
            {
                DropItemEffectMapID = new Dictionary<int, List<int>>();
            }
            DropItemEffectMapID.Clear();
            func = FuncConfigConfig.Get("DropItemEffectMapID");
            _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            int _itemID;
            _keys.Clear();
            _keys.AddRange(_data.Keys);
            for (int j = 0; j < _keys.Count; ++j)
            {
                if (int.TryParse(_keys[j].ToString(), out _itemID))
                {
                    if (!DropItemEffectMapID.ContainsKey(_itemID))
                    {
                        DropItemEffectMapID.Add(_itemID, new List<int>());
                    }
                    var _jsonMapIDs = _data[_keys[j]];
                    foreach (var _jsonMapID in _jsonMapIDs)
                    {
                        var _mapID = ((LitJson.IJsonWrapper)_jsonMapID).GetInt();
                        if (!DropItemEffectMapID[_itemID].Contains(_mapID))
                        {
                            DropItemEffectMapID[_itemID].Add(_mapID);
                        }
                    }
                }
            }
            int[] mapIDs = GetIntArray("RebornAutoFightDungeon");
            RebornAutoFightMapID = new List<int>(mapIDs);
            teamWorldCall = GetInputString("TeamWorldCall");
            teamWorldCallInviteCount = GetInt("TeamWorldCall", 2);
            var ancientKingAwradConfig = FuncConfigConfig.Get("ElderBattlefieldTopAward");
            if (ancientKingAwradConfig != null)
            {
                var itemArray = LitJson.JsonMapper.ToObject<int[][]>(ancientKingAwradConfig.Numerical1);
                for (int k = 0; k < itemArray.Length; k++)
                {
                    // ancientKingAwards.Add(new Item()
                    // {
                    //     id = itemArray[k][0],
                    //     count = itemArray[k][1],
                    // });
                }
            }
            func = FuncConfigConfig.Get("QualityEffectConfig");
            lowQualityEffectCount = int.Parse(func.Numerical1);
            medQualityEffectCount = int.Parse(func.Numerical2);
            highQualityEffectCount = int.Parse(func.Numerical3);
            func = FuncConfigConfig.Get("QualityPetCountConfig");
            lowQualityPetCount = int.Parse(func.Numerical1);
            medQualityPetCount = int.Parse(func.Numerical2);
            highQualityPetCount = int.Parse(func.Numerical3);
            func = FuncConfigConfig.Get("QualityGuardCountConfig");
            lowQualityGuardCount = int.Parse(func.Numerical1);
            medQualityGuardCount = int.Parse(func.Numerical2);
            highQualityGuardCount = int.Parse(func.Numerical3);
            func = FuncConfigConfig.Get("QualityPetEffectCount");
            lowQualityPetEffectCount = int.Parse(func.Numerical1);
            medQualityPetEffectCount = int.Parse(func.Numerical2);
            highQualityPetEffectCount = int.Parse(func.Numerical3);
            func = FuncConfigConfig.Get("QualityHorseEffectCount");
            lowQualityHorseEffectCount = int.Parse(func.Numerical1);
            medQualityHorseEffectCount = int.Parse(func.Numerical2);
            highQualityHorseEffectCount = int.Parse(func.Numerical3);
            fairyLandBuffCondition = GetInt("XjmjAddHarm", 1);
            fairyLandBuffId = GetInt("XjmjAddHarm", 2);
            achievementEarlierStageLevel = GetInt("AchieveLV");
            func = FuncConfigConfig.Get("PreloadSkillEffect");
            PreloadSkillEffect = new int[2][];
            PreloadSkillEffect[0] = GetIntArray("PreloadSkillEffect");
            PreloadSkillEffect[1] = GetIntArray("PreloadSkillEffect", 2);
            demonJarAutoTime = GetInt("DemonJarAutoTime");
            // if (SgzzRobotEquipDict == null)
            // bossWearyValues = ConfigParse.GetDic<int, int>(GetInputString("KillBossCntLimit", 2));
            // wingEquipLimits = ConfigParse.GetDic<int, int>(GetInputString("WingRealmLimit", 1));
            // int i = 0;
            // int[] equipPlaces = GetIntArray("EquipArea", 1);
            // string[] equipPlacesNames = GetStringArray("EquipArea", 2);
            // equipPlaceNameDict = new Dictionary<int, string>();
            // for (i = 0; i < equipPlaces.Length; i++)
            // {
            //     SgzzRobotEquipDict = new Dictionary<int, Dictionary<int, GA_NpcFightSgzcZZ.EquipRandomInfo>>();
            //     for (int job = 1; job <= 3; ++job)
            //     if (!equipPlaceNameDict.ContainsKey(equipPlaces[i]))
            //     {
            //         string _jsonString = GetInputString("SGZCHelpBattleEquip", job);
            //         if (string.IsNullOrEmpty(_jsonString))
            //         equipPlaceNameDict.Add(equipPlaces[i], equipPlacesNames[i]);
            //     }
            //     else
            //     {
            //         Debug.LogError("EquipArea : 装备位置重复");
            //     }
            // }
            // var _trailBossJson = LitJson.JsonMapper.ToObject(GetInputString("MuneKadoTrialBossHead", 1));
            // trailBossHeadIcons = new Dictionary<int, string>();
            // foreach (var _key in _trailBossJson.Keys)
            // {
            //     var _npcId = int.Parse(_key);
            //     if (!trailBossHeadIcons.ContainsKey(_npcId))
            //     {
            //         trailBossHeadIcons.Add(_npcId, _trailBossJson[_key].ToString());
            //     }
            // }
            // FuncConfigConfig HorseTrainConfig = FuncConfigConfig.Get("HorseTrain");
            // HorseTrainIDList = LitJson.JsonMapper.ToObject<int[]>(HorseTrainConfig.Numerical1);
            // FuncConfigConfig PetTrainConfig = FuncConfigConfig.Get("PetUpItem");
            // PetTrainIDList = LitJson.JsonMapper.ToObject<int[]>(PetTrainConfig.Numerical3);
            // FuncConfigConfig LingQiTrainConfig = FuncConfigConfig.Get("HorseTrain");
            // var LingQiTrainJson = LitJson.JsonMapper.ToObject(GetInputString("LingQiTrain", 1));
            // LingQiTrainIDList = new Dictionary<int, List<int>>();
            // foreach (var key in LingQiTrainJson.Keys)
            // {
            //     int attrId = int.Parse(key);
            //     var skillIds = LingQiTrainJson[key];
            //     foreach (var skillId in skillIds)
            //     {
            //         int id = int.Parse(skillId.ToString());
            //         if (!LingQiTrainIDList.ContainsKey(attrId))
            //         {
            //             continue;
            //             List<int> list = new List<int>();
            //             list.Add(id);
            //             LingQiTrainIDList.Add(attrId, list);
            //         }
            //         var _jsonData = LitJson.JsonMapper.ToObject(_jsonString);
            //         var _jobDict = new Dictionary<int, GA_NpcFightSgzcZZ.EquipRandomInfo>();
            //         for (i = 0; i < _jsonData.Count; ++i)
            //         else
            //         {
            //             var _lvJson = _jsonData[i];
            //             var _lv = (int)_lvJson["LV"];
            //             if (!_jobDict.ContainsKey(_lv))
            //             {
            //                 var _equips = _lvJson["Equips"];
            //                 var _randEquip = new GA_NpcFightSgzcZZ.EquipRandomInfo();
            //                 _randEquip.randClothesItemIDs = new int[_equips[0].Count];
            //                 for (int j = 0; j < _equips[0].Count; ++j)
            //                 {
            //                     _randEquip.randClothesItemIDs[j] = (int)_equips[0][j];
            //                 }
            //                 _randEquip.randWeaponItemIDs = new int[_equips[1].Count];
            //                 for (int j = 0; j < _equips[1].Count; ++j)
            //                 {
            //                     _randEquip.randWeaponItemIDs[j] = (int)_equips[1][j];
            //                 }
            //                 _randEquip.randSecondaryItemIDs = new int[_equips[2].Count];
            //                 for (int j = 0; j < _equips[2].Count; ++j)
            //                 {
            //                     _randEquip.randSecondaryItemIDs[j] = (int)_equips[2][j];
            //                 }
            //                 _randEquip.randWingItemIDs = new int[_equips[3].Count];
            //                 for (int j = 0; j < _equips[3].Count; ++j)
            //                 {
            //                     _randEquip.randWingItemIDs[j] = (int)_equips[3][j];
            //                 }
            //                 _randEquip.godWeaponIDs = new int[_equips[4].Count];
            //                 for (int j = 0; j < _equips[4].Count; ++j)
            //                 {
            //                     _randEquip.godWeaponIDs[j] = (int)_equips[4][j];
            //                 }
            //                 _jobDict.Add(_lv, _randEquip);
            //             }
            //             LingQiTrainIDList[attrId].Add(id);
            //         }
            //     }
            //         SgzzRobotEquipDict.Add(job, _jobDict);
            // }
            // var skillPlusAttrIDJson = LitJson.JsonMapper.ToObject(GetInputString("SkillPlusAttrID", 2));
            // skillAttrIDDict = new Dictionary<int, List<int>>();
            // foreach (var key in skillPlusAttrIDJson.Keys)
            // {
            //     int attrId = int.Parse(key);
            //     var skillIds = skillPlusAttrIDJson[key];
            //     foreach (var skillId in skillIds)
            //     {
            //         int id = int.Parse(skillId.ToString());
            //         if (!skillAttrIDDict.ContainsKey(id))
            //         {
            //             List<int> list = new List<int>();
            //             list.Add(attrId);
            //             skillAttrIDDict.Add(id, list);
            //         }
            //         else
            //         {
            //             skillAttrIDDict[id].Add(attrId);
            //         }
            //     }
            // }
            // var BossAssistAwardJson = LitJson.JsonMapper.ToObject(GetInputString("AssistAward", 1));
            // BossAssistAward = new Dictionary<int, List<int>>();
            // foreach (var key in BossAssistAwardJson.Keys)
            // {
            //     int bossID = int.Parse(key);
            //     var awards = BossAssistAwardJson[key];
            //     if (!BossAssistAward.ContainsKey(bossID))
            //     {
            //         BossAssistAward[bossID] = new List<int>();
            //     }
            //     foreach (var award in awards)
            //     {
            //         BossAssistAward[bossID].Add(int.Parse(award.ToString()));
            //     }
            // }
            // var FBAssistAwardJson = LitJson.JsonMapper.ToObject(GetInputString("AssistAward", 2));
            // FBAssistAward = new Dictionary<int, List<int>>();
            // foreach (var key in FBAssistAwardJson.Keys)
            // {
            //     int mapID = int.Parse(key);
            //     var awards = FBAssistAwardJson[key];
            //     if (!FBAssistAward.ContainsKey(mapID))
            //     {
            //         FBAssistAward[mapID] = new List<int>();
            //     }
            //     foreach (var award in awards)
            //     {
            //         FBAssistAward[mapID].Add(int.Parse(award.ToString()));
            //     }
            // }
            // var _godWeaponJson = LitJson.JsonMapper.ToObject(GetInputString("GodModel", 1));
            // godWeaponMobs = new Dictionary<int, string>();
            // foreach (var _key in _godWeaponJson.Keys)
            // {
            //     var _godWeaponType = int.Parse(_key);
            //     if (!godWeaponMobs.ContainsKey(_godWeaponType))
            //     {
            //         godWeaponMobs.Add(_godWeaponType, _godWeaponJson[_key].ToString());
            //     }
            // }
            // audioScaleWhenFullScreenOn = GetFloat("AudioSound");
            if (SgzcRealm == null)
            {
                SgzcRealm = new Dictionary<int, int>();
            // iceCrystalMonsterScores = ConfigParse.GetDic<int, int>(GetInputString("IceLodeNeedPoint", 2));
                var _lvArr = GetInputString("SGZCRobotRealm", 1).Split('|');
                var _rLvArr = GetInputString("SGZCRobotRealm", 2).Split('|');
            // NoXpDungeons = new List<int>(GetIntArray("XpNoUseDungeon"));
            // RandomJobs = new List<int>(GetIntArray("RandomJob"));
            // elderGodTalkingTime = GetInt("ElderGodTalkingTime");
            // elderGodBigBoss = GetInt("ElderGodBigBoss");
            // PassiveSkillShow = new List<int>(GetIntArray("PassiveSkillShow"));
                for (int j = 0; j < _lvArr.Length; ++j)
                {
                    SgzcRealm[int.Parse(_lvArr[j])] = int.Parse(_rLvArr[j]);
                }
            }
            // FuncConfigConfig func = FuncConfigConfig.Get("NpcPosOffset");
            // LitJson.JsonData _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            // foreach (var _key in _data.Keys)
            // {
            //     int _npcID = int.Parse(_key);
            //     double[] _pos = new double[2];
            //     _pos[0] = (double)_data[_key][0];
            //     _pos[1] = (double)_data[_key][1];
            //     NpcPosOffset.Add(_npcID, new Vector3((float)_pos[0], 0, (float)_pos[1]));
            // }
            // //checkShowSwitchAccount
            // var showSwitchAccount = FuncConfigConfig.Get("ShowSwitchAccount");
            // LitJson.JsonData itemShowSwitchAccount = LitJson.JsonMapper.ToObject(showSwitchAccount.Numerical1);
            // checkShowSwitchAccount = new List<string>();
            // foreach(var item in itemShowSwitchAccount)
            // {
            //     checkShowSwitchAccount.Add(item.ToString());
            // }
            crossServerBattleFieldOpenDay = GetInt("CrossRealmCfg", 2);
            UISpringDecorate = GetInt("UISpringDecorate");
            // var putInItemPack = FuncConfigConfig.Get("PutInItemPack");
            // LitJson.JsonData itemPutInData = LitJson.JsonMapper.ToObject(putInItemPack.Numerical1);
            // itemPutInPackDict = new Dictionary<int, List<int>>();
            // foreach (var _key in itemPutInData.Keys)
            // {
            //     var itemTypeData = itemPutInData[_key];
            //     int packType = int.Parse(_key);
            //     List<int> itemTypes = new List<int>();
            //     itemPutInPackDict.Add(packType, itemTypes);
            //     if (itemTypeData.IsArray)
            //     {
            //         for (i = 0; i < itemTypeData.Count; i++)
            //         {
            //             int itemType = int.Parse(itemTypeData[i].ToString());
            //             itemTypes.Add(itemType);
            //         }
            //     }
            // }
            mixServerCustomDays = GetInt("MixServer");
            openServerCustomDays = GetInt("OperationAction");
            ClientPvpAttributePer = GetInt("ClientPvPAttributePer") * Constants.F_DELTA;
            // //拾取贵重物品
            // FuncConfigConfig importantItemType = FuncConfigConfig.Get("AutoBuyDrug");
            // ImportantItemType = LitJson.JsonMapper.ToObject<int[]>(importantItemType.Numerical2);
            // ImportantItemID = LitJson.JsonMapper.ToObject<int[]>(importantItemType.Numerical3);
            mysteryShopRefreshItem = GetInt("MysteryShopRefresh");
            mysteryShopRefreshItemCount = new Dictionary<int, int>();
            var mysteryShopJson = JsonMapper.ToObject(GetInputString("MysteryShopRefresh", 2));
            foreach (var key in mysteryShopJson.Keys)
            {
                var time = int.Parse(key);
                mysteryShopRefreshItemCount[time] = (int)mysteryShopJson[key];
            }
            // FuncConfigConfig nxxdImg = FuncConfigConfig.Get("NXXDPicture");
            // LitJson.JsonData nxxdData = LitJson.JsonMapper.ToObject(nxxdImg.Numerical1);
            // multipleRealmImgDict = new Dictionary<int, string>();
            // if (nxxdData.IsArray)
            // {
            //     for (i = 0; i < nxxdData.Count; i++)
            //     {
            //         if (nxxdData[i].IsArray)
            //         {
            //             multipleRealmImgDict.Add(int.Parse(nxxdData[i][0].ToString()), nxxdData[i][1].ToString());
            //         }
            //     }
            // }
            mysteryShopRefreshItemValue = GetInt("MysteryShopRefresh", 3);
            mysteryShopRefreshInterval = GetInt("MysteryShopRefresh", 4);
            // bossShuntMaps = new List<int>(GetIntArray("BossShunt"));
            // bossShuntDays = GetInt("BossShunt", 3);
            var equipStarConfig = FuncConfigConfig.Get("EquipPartStar");
            var equipStarJson = LitJson.JsonMapper.ToObject(equipStarConfig.Numerical1);
            equipStarLimit = new Dictionary<int, Dictionary<int, int>>();
            foreach (var itemColorKey in equipStarJson.Keys)
            {
                var itemColor = int.Parse(itemColorKey);
                Dictionary<int, int> dict = new Dictionary<int, int>();
                foreach (var itemLevelKey in equipStarJson[itemColorKey].Keys)
                {
                    var itemLevel = int.Parse(itemLevelKey);
                    var starLimit = int.Parse(equipStarJson[itemColorKey][itemLevelKey].ToString());
                    dict.Add(itemLevel, starLimit);
                }
                equipStarLimit.Add(itemColor, dict);
            }
            // itemDropEffect.Clear();
            // func = FuncConfigConfig.Get("ItemEquipmentEffect");
            // _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            // List<string> _keys = new List<string>(_data.Keys);
            // for (i = 0; i < _keys.Count; ++i)
            // {
            //     int[] _props = new int[3];
            //     for (int j = 0; j < 3; ++j)
            //     {
            //         _props[j] = (int)_data[_keys[i]][j];
            //     }
            //     itemDropEffect[int.Parse(_keys[i])] = _props;
            // }
            equipTrainMustItemId = GetInt("EquipWashMustID");
            acutionItemHour = GetInt("AuctionItem");
            mainWinTopCloseTime = GetInt("AutomaticSwitch");
            // xllyDropEffect.Clear();
            // _data = LitJson.JsonMapper.ToObject(func.Numerical2);
            // _keys.Clear();
            // _keys.AddRange(_data.Keys);
            // for (i = 0; i < _keys.Count; ++i)
            // {
            //     int[] _props = new int[3];
            //     for (int j = 0; j < 3; ++j)
            //     {
            //         _props[j] = (int)_data[_keys[i]][j];
            //     }
            //     xllyDropEffect[int.Parse(_keys[i])] = _props;
            // }
            equipDecomposeScreen.AddRange(GetIntArray("EquipDecomposeScreen", 2));
            // xqryDropEffect.Clear();
            // _data = LitJson.JsonMapper.ToObject(func.Numerical3);
            // _keys.Clear();
            // _keys.AddRange(_data.Keys);
            // for (i = 0; i < _keys.Count; ++i)
            // {
            //     int[] _props = new int[3];
            //     for (int j = 0; j < 3; ++j)
            //     {
            //         _props[j] = (int)_data[_keys[i]][j];
            //     }
            //     xqryDropEffect[int.Parse(_keys[i])] = _props;
            // }
            func = FuncConfigConfig.Get("AtkTypeIncreasePushDis");
            var _ks = func.Numerical1.Split('|');
            var _vs = func.Numerical2.Split('|');
            for (i = 0; i < _ks.Length; ++i)
            {
                AtkTypeIncreasePushDis[int.Parse(_ks[i])] = int.Parse(_vs[i]) * Constants.F_DELTA;
            }
            // dropEffectQuality.Clear();
            // func = FuncConfigConfig.Get("IeemEquipmentEffectQuality");
            // _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            // _keys.Clear();
            // _keys.AddRange(_data.Keys);
            // for (i = 0; i < _keys.Count; ++i)
            // {
            //     dropEffectQuality[int.Parse(_keys[i])] = (int)_data[_keys[i]];
            // }
            func = FuncConfigConfig.Get("NpcDieSetCamera");
            if (func != null)
            {
                var _jsonData = LitJson.JsonMapper.ToObject(func.Numerical1);
                for (i = 0; i < _jsonData.Count; ++i)
                {
                    var _child = _jsonData[i];
                    // var _lookAtData = new CameraController.LookAtData();
                    // _lookAtData.position = new Vector3(MathUtility.GetFloatFromLitJson(_child[1][0]),
                    //                                    MathUtility.GetFloatFromLitJson(_child[1][1]),
                    //                                    MathUtility.GetFloatFromLitJson(_child[1][2]));
                    // _lookAtData.rotX = (int)_child[2];
                    // _lookAtData.rotY = (int)_child[3];
                    // _lookAtData.lastTime = MathUtility.GetFloatFromLitJson(_child[4]);
            // customDropEffect.Clear();
            // func = FuncConfigConfig.Get("ItemEquipmentEffectItem");
            // _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            // _keys.Clear();
            // _keys.AddRange(_data.Keys);
            // int[] _tmp = null;
            // List<int[]> _content = null;
            // for (i = 0; i < _keys.Count; ++i)
            // {
            //     _content = new List<int[]>();
            //     foreach (LitJson.JsonData _values in _data[_keys[i]])
            //     {
            //         if (_values.IsArray)
            //         {
            //             _tmp = new int[2];
            //             _tmp[0] = (int)_values[0];
            //             _tmp[1] = (int)_values[1];
            //         }
            //         else
            //         {
            //             _tmp = new int[1];
            //             _tmp[0] = (int)_values;
            //         }
            //         _content.Add(_tmp);
            //     }
            //     customDropEffect.Add(int.Parse(_keys[i]), _content);
            // }
                    // NpcDieSetCamera[(int)_child[0]] = _lookAtData;
                }
            }
            WorkForEnemySkills = GetIntArray("ArenaSetSkills", 1);
            WorkForMeSkills = GetIntArray("ArenaSetSkills", 2);
            WorkNotSkills = GetIntArray("ArenaSetSkills", 3);
            defenseGetWays = GetIntArray("DefenseGetWays", 1);
            skillYinjis = ConfigParse.GetDic<int, int>(GetInputString("SkillYinji", 1));
            onlyUsedAtBackpackItems = new List<int>(GetIntArray("ItemPush", 2));
            // BuffToHitEffect.Clear();
            // func = FuncConfigConfig.Get("BuffToHitEffect");
            // if (!string.IsNullOrEmpty(func.Numerical1) && !string.IsNullOrEmpty(func.Numerical2))
            // {
            //     string[] _buffs = func.Numerical1.Split('|');
            //     string[] _effects = func.Numerical2.Split('|');
            //     for (i = 0; i < _buffs.Length; ++i)
            //     {
            //         BuffToHitEffect[int.Parse(_buffs[i])] = int.Parse(_effects[i]);
            //     }
            // }
            var signInSkillArray = GetIntArray("SignInPromoteSkill", 1);
            if (signInSkillArray != null)
            {
                signInPromoteSkills.AddRange(signInSkillArray);
            }
            // demonJarHintLevelLimit = GetInt("DemonJarFirstRemin");
            // demonJarHintLineId = GetInt("DemonJarFirstRemin", 2);
            // skillPanelUnLock = GetInt("SkillPanelUnlock");
            // dailyQuestRedpointLevelLimit = GetInt("DailyQuestRedPoint");
            // lowHpRemind = GetInt("LowHpRemind");
            // autoBuyItemIds = GetIntArray("BuyItemPrice", 1);
            // autoBuyItemPrices = GetIntArray("BuyItemPrice", 2);
            // neutralMaps.AddRange(GetIntArray("MapLine", 4));
            // neutralBossMaps.AddRange(GetIntArray("BossListMapID"));
            MasteryLoadingLevelLimit1 = GetInt("MasteryLoadingLevelLimit");
            MasteryLoadingLevelLimit2 = GetInt("MasteryLoadingLevelLimit", 2);
            // var _propertyIconCfg = FuncConfigConfig.Get("PropertyIcon");
            // var _propertyIconJson = LitJson.JsonMapper.ToObject(_propertyIconCfg.Numerical1);
            // foreach (var _key in _propertyIconJson.Keys)
            // {
            //     var _property = int.Parse(_key);
            //     propertyIconDict.Add(_property, _propertyIconJson[_key].ToString());
            // }
            chestDisplayItems = new List<int>(GetIntArray("ChestShowItems"));
            // munekadolockLimit = GetInt("MunekadoLockLimit");
            // demonJarRedPoint = GetInt("DemonJarRedPoint");
            // LoadLV = GetInputString("LoadLV");
            func = FuncConfigConfig.Get("Zhanling");
            if (func != null)
            {
                OldZhanLingCtgIdDict = new Dictionary<int, int>();
                ZhanLingCtgIdDict = new Dictionary<int, List<int>>();
                var tempDict = JsonMapper.ToObject(func.Numerical1);
                var keyList = tempDict.Keys.ToList();
                for (int j = 0; j < keyList.Count; j++)
                {
                    OldZhanLingCtgIdDict[int.Parse(keyList[j])] = JsonMapper.ToObject<List<int>>(tempDict[keyList[j]].ToJson())[0];
                    ZhanLingCtgIdDict[int.Parse(keyList[j])] = JsonMapper.ToObject<List<int>>(tempDict[keyList[j]].ToJson());
                }
            // mainWinSkillResetTime = GetFloat("AutomaticSwitch");
            // heroDialogueOffset = GetInputString("NpcHalfLength", 1).Vector3Parse();
            // heroDialogueRotation = GetInputString("NpcHalfLength", 2).Vector3Parse();
            // heroDialogueScale = GetFloat("NpcHalfLength", 3);
                ZhanLingCtgIdHDict = new Dictionary<int, List<int>>();
                tempDict = JsonMapper.ToObject(func.Numerical3);
                keyList = tempDict.Keys.ToList();
                for (int k = 0; k < keyList.Count; k++)
                {
                    ZhanLingCtgIdHDict[int.Parse(keyList[k])] = JsonMapper.ToObject<List<int>>(tempDict[keyList[k]].ToJson());
                }
            }
            // var ancientConfig = FuncConfigConfig.Get("ElderBattleTarget");
            // ancientGrandTotalAchievements = new List<int>();
            // ancientGrandTotalAchievements.AddRange(ConfigParse.GetMultipleStr<int>(ancientConfig.Numerical1));
            // ancientContinueKillAchievements = new List<int>();
            // ancientContinueKillAchievements.AddRange(ConfigParse.GetMultipleStr<int>(ancientConfig.Numerical2));
            func = FuncConfigConfig.Get("FBQuickPass");
            fightPowerMore = float.Parse(func.Numerical1) + 0.01f; //疑似玩家无法雷诛是C/S计算不对等问题,所以加0.01f
            flashOpenArr = JsonMapper.ToObject<int[]>(func.Numerical2);
            flashCntMoreArr = JsonMapper.ToObject<int[]>(func.Numerical3);
            flashKillMaxCount = int.Parse(func.Numerical4);
            // trialDungeonGroupChallengeTipLv = GetInt("SingleIntoFB");
            // prayerRedpointLimitLv = GetInt("PrayRedPoint");
            // demonJarLevelLimit = GetInt("DemonJarLevelLimit");
            // maxItemDropEffectCount = GetInt("ItemMaskEffect");
            // specialGuide41Mission = GetInt("SpecialGuide41", 1);
            // specialGuide41Achievement = GetInt("SpecialGuide41", 2);
            // supremeRechargeVipLv = GetInt("SupremeCTGVipLimit", 1);
            // rechargeRedpointLv = GetInt("FirstPayRedPoint", 1);
            // rechargeRedpointMinLv = GetInt("FirstPayRedPoint", 2);
            // runeTowerSweepBuyTimes = GetInt("RuneTowerSweepBuy");
            // runeTowerSweepBuyPrice = GetInt("RuneTowerSweepBuy", 2);
            // teamMatchingTimeOut = GetInt("TeamMatchingTimeOut");
            // inGameDownLoadLevelCheckPoints = new List<int>(GetIntArray("InGameDownLoad"));
            // inGameDownLoadTaskCheckPoints = new List<int>(GetIntArray("InGameDownLoad", 2));
            // inGameDownLoadHighLevel = GetInt("InGameDownLoad", 3);
            // worldBossNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 1));
            // bossHomeNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 2));
            // elderGodNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 3));
            // demonJarNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 4));
            // dogzNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 5));
            // if (ModeDefaultConfig == null)
            // {
            //     func = FuncConfigConfig.Get("ModeDefault");
            //     string[] _funcNpc = func.Numerical1.Split('|');
            //     string[] _fightNpc = func.Numerical2.Split('|');
            //     string[] _pet = func.Numerical3.Split('|');
            //     string[] _horse = func.Numerical4.Split('|');
            //     ModeDefaultConfig = new string[4][];
            //     ModeDefaultConfig[0] = _funcNpc;
            //     ModeDefaultConfig[1] = _fightNpc;
            //     ModeDefaultConfig[2] = _pet;
            //     ModeDefaultConfig[3] = _horse;
            // }
            // if (RealmGroup == null)
            // {
            //     func = FuncConfigConfig.Get("RealmGroup");
            //     string[] _group = func.Numerical1.Split('|');
            //     RealmGroup = new int[_group.Length];
            //     for (int j = 0; j < _group.Length; ++j)
            //     {
            //         int.TryParse(_group[j], out RealmGroup[j]);
            //     }
            // }
            // func = FuncConfigConfig.Get("PrefightAtkRange");
            // PrefightAtkRange = float.Parse(func.Numerical1);
            // inGameDownLoadHighestLevelPoint = GetInt("DownReward", 2);
            // dungeonCanUseMoneyIds = new List<int>(GetIntArray("FBEnterTickeyAuto", 1));
            // dungeonRebornClientTimes = ConfigParse.GetDic<int, int>(GetInputString("DuplicatesRebornTime", 2));
            // dogzBoxLimit = GetInt("DogzBoxLimit");
            // fairyGrabBossMapLines = ConfigParse.GetDic<int, int>(GetInputString("MapLine", 2));
            // var grabBossMaps = fairyGrabBossMapLines.Keys.ToList();
            // foreach (var _key in grabBossMaps)
            // {
            //     fairyGrabBossMapLines[_key] = fairyGrabBossMapLines[_key] - 1;
            // }
            // if (DropItemEffectMapID == null)
            // {
            //     DropItemEffectMapID = new Dictionary<int, List<int>>();
            // }
            // DropItemEffectMapID.Clear();
            // func = FuncConfigConfig.Get("DropItemEffectMapID");
            // _data = LitJson.JsonMapper.ToObject(func.Numerical1);
            // int _itemID;
            // _keys.Clear();
            // _keys.AddRange(_data.Keys);
            // for (int j = 0; j < _keys.Count; ++j)
            // {
            //     if (int.TryParse(_keys[j].ToString(), out _itemID))
            //     {
            //         if (!DropItemEffectMapID.ContainsKey(_itemID))
            //         {
            //             DropItemEffectMapID.Add(_itemID, new List<int>());
            //         }
            //         var _jsonMapIDs = _data[_keys[j]];
            //         foreach (var _jsonMapID in _jsonMapIDs)
            //         {
            //             var _mapID = ((LitJson.IJsonWrapper)_jsonMapID).GetInt();
            //             if (!DropItemEffectMapID[_itemID].Contains(_mapID))
            //             {
            //                 DropItemEffectMapID[_itemID].Add(_mapID);
            //             }
            //         }
            //     }
            // }
            // int[] mapIDs = GetIntArray("RebornAutoFightDungeon");
            // RebornAutoFightMapID = new List<int>(mapIDs);
            // teamWorldCall = GetInputString("TeamWorldCall");
            // teamWorldCallInviteCount = GetInt("TeamWorldCall", 2);
            // var ancientKingAwradConfig = FuncConfigConfig.Get("ElderBattlefieldTopAward");
            // if (ancientKingAwradConfig != null)
            // {
            //     var itemArray = LitJson.JsonMapper.ToObject<int[][]>(ancientKingAwradConfig.Numerical1);
            //     for (int k = 0; k < itemArray.Length; k++)
            //     {
            //         // ancientKingAwards.Add(new Item()
            //         // {
            //         //     id = itemArray[k][0],
            //         //     count = itemArray[k][1],
            //         // });
            //     }
            // }
            // func = FuncConfigConfig.Get("QualityEffectConfig");
            // lowQualityEffectCount = int.Parse(func.Numerical1);
            // medQualityEffectCount = int.Parse(func.Numerical2);
            // highQualityEffectCount = int.Parse(func.Numerical3);
            // func = FuncConfigConfig.Get("QualityPetCountConfig");
            // lowQualityPetCount = int.Parse(func.Numerical1);
            // medQualityPetCount = int.Parse(func.Numerical2);
            // highQualityPetCount = int.Parse(func.Numerical3);
            // func = FuncConfigConfig.Get("QualityGuardCountConfig");
            // lowQualityGuardCount = int.Parse(func.Numerical1);
            // medQualityGuardCount = int.Parse(func.Numerical2);
            // highQualityGuardCount = int.Parse(func.Numerical3);
            // func = FuncConfigConfig.Get("QualityPetEffectCount");
            // lowQualityPetEffectCount = int.Parse(func.Numerical1);
            // medQualityPetEffectCount = int.Parse(func.Numerical2);
            // highQualityPetEffectCount = int.Parse(func.Numerical3);
            // func = FuncConfigConfig.Get("QualityHorseEffectCount");
            // lowQualityHorseEffectCount = int.Parse(func.Numerical1);
            // medQualityHorseEffectCount = int.Parse(func.Numerical2);
            // highQualityHorseEffectCount = int.Parse(func.Numerical3);
            // fairyLandBuffCondition = GetInt("XjmjAddHarm", 1);
            // fairyLandBuffId = GetInt("XjmjAddHarm", 2);
            // achievementEarlierStageLevel = GetInt("AchieveLV");
            // func = FuncConfigConfig.Get("PreloadSkillEffect");
            // PreloadSkillEffect = new int[2][];
            // PreloadSkillEffect[0] = GetIntArray("PreloadSkillEffect");
            // PreloadSkillEffect[1] = GetIntArray("PreloadSkillEffect", 2);
            // demonJarAutoTime = GetInt("DemonJarAutoTime");
            // // if (SgzzRobotEquipDict == null)
            // // {
            // //     SgzzRobotEquipDict = new Dictionary<int, Dictionary<int, GA_NpcFightSgzcZZ.EquipRandomInfo>>();
            // //     for (int job = 1; job <= 3; ++job)
            // //     {
            // //         string _jsonString = GetInputString("SGZCHelpBattleEquip", job);
            // //         if (string.IsNullOrEmpty(_jsonString))
            // //         {
            // //             continue;
            // //         }
            // //         var _jsonData = LitJson.JsonMapper.ToObject(_jsonString);
            // //         var _jobDict = new Dictionary<int, GA_NpcFightSgzcZZ.EquipRandomInfo>();
            // //         for (i = 0; i < _jsonData.Count; ++i)
            // //         {
            // //             var _lvJson = _jsonData[i];
            // //             var _lv = (int)_lvJson["LV"];
            // //             if (!_jobDict.ContainsKey(_lv))
            // //             {
            // //                 var _equips = _lvJson["Equips"];
            // //                 var _randEquip = new GA_NpcFightSgzcZZ.EquipRandomInfo();
            // //                 _randEquip.randClothesItemIDs = new int[_equips[0].Count];
            // //                 for (int j = 0; j < _equips[0].Count; ++j)
            // //                 {
            // //                     _randEquip.randClothesItemIDs[j] = (int)_equips[0][j];
            // //                 }
            // //                 _randEquip.randWeaponItemIDs = new int[_equips[1].Count];
            // //                 for (int j = 0; j < _equips[1].Count; ++j)
            // //                 {
            // //                     _randEquip.randWeaponItemIDs[j] = (int)_equips[1][j];
            // //                 }
            // //                 _randEquip.randSecondaryItemIDs = new int[_equips[2].Count];
            // //                 for (int j = 0; j < _equips[2].Count; ++j)
            // //                 {
            // //                     _randEquip.randSecondaryItemIDs[j] = (int)_equips[2][j];
            // //                 }
            // //                 _randEquip.randWingItemIDs = new int[_equips[3].Count];
            // //                 for (int j = 0; j < _equips[3].Count; ++j)
            // //                 {
            // //                     _randEquip.randWingItemIDs[j] = (int)_equips[3][j];
            // //                 }
            // //                 _randEquip.godWeaponIDs = new int[_equips[4].Count];
            // //                 for (int j = 0; j < _equips[4].Count; ++j)
            // //                 {
            // //                     _randEquip.godWeaponIDs[j] = (int)_equips[4][j];
            // //                 }
            // //                 _jobDict.Add(_lv, _randEquip);
            // //             }
            // //         }
            // //         SgzzRobotEquipDict.Add(job, _jobDict);
            // //     }
            // // }
            // if (SgzcRealm == null)
            // {
            //     SgzcRealm = new Dictionary<int, int>();
            //     var _lvArr = GetInputString("SGZCRobotRealm", 1).Split('|');
            //     var _rLvArr = GetInputString("SGZCRobotRealm", 2).Split('|');
            //     for (int j = 0; j < _lvArr.Length; ++j)
            //     {
            //         SgzcRealm[int.Parse(_lvArr[j])] = int.Parse(_rLvArr[j]);
            //     }
            // }
            // crossServerBattleFieldOpenDay = GetInt("CrossRealmCfg", 2);
            // UISpringDecorate = GetInt("UISpringDecorate");
            // mixServerCustomDays = GetInt("MixServer");
            // openServerCustomDays = GetInt("OperationAction");
            // ClientPvpAttributePer = GetInt("ClientPvPAttributePer") * Constants.F_DELTA;
            // mysteryShopRefreshItem = GetInt("MysteryShopRefresh");
            // mysteryShopRefreshItemCount = new Dictionary<int, int>();
            // var mysteryShopJson = JsonMapper.ToObject(GetInputString("MysteryShopRefresh", 2));
            // foreach (var key in mysteryShopJson.Keys)
            // {
            //     var time = int.Parse(key);
            //     mysteryShopRefreshItemCount[time] = (int)mysteryShopJson[key];
            // }
            // mysteryShopRefreshItemValue = GetInt("MysteryShopRefresh", 3);
            // mysteryShopRefreshInterval = GetInt("MysteryShopRefresh", 4);
            // var equipStarConfig = FuncConfigConfig.Get("EquipPartStar");
            // var equipStarJson = LitJson.JsonMapper.ToObject(equipStarConfig.Numerical1);
            // equipStarLimit = new Dictionary<int, Dictionary<int, int>>();
            // foreach (var itemColorKey in equipStarJson.Keys)
            // {
            //     var itemColor = int.Parse(itemColorKey);
            //     Dictionary<int, int> dict = new Dictionary<int, int>();
            //     foreach (var itemLevelKey in equipStarJson[itemColorKey].Keys)
            //     {
            //         var itemLevel = int.Parse(itemLevelKey);
            //         var starLimit = int.Parse(equipStarJson[itemColorKey][itemLevelKey].ToString());
            //         dict.Add(itemLevel, starLimit);
            //     }
            //     equipStarLimit.Add(itemColor, dict);
            // }
            // equipTrainMustItemId = GetInt("EquipWashMustID");
            // acutionItemHour = GetInt("AuctionItem");
            // mainWinTopCloseTime = GetInt("AutomaticSwitch");
            // equipDecomposeScreen.AddRange(GetIntArray("EquipDecomposeScreen", 2));
            // func = FuncConfigConfig.Get("AtkTypeIncreasePushDis");
            // var _ks = func.Numerical1.Split('|');
            // var _vs = func.Numerical2.Split('|');
            // for (i = 0; i < _ks.Length; ++i)
            // {
            //     AtkTypeIncreasePushDis[int.Parse(_ks[i])] = int.Parse(_vs[i]) * Constants.F_DELTA;
            // }
            // func = FuncConfigConfig.Get("NpcDieSetCamera");
            // if (func != null)
            // {
            //     var _jsonData = LitJson.JsonMapper.ToObject(func.Numerical1);
            //     for (i = 0; i < _jsonData.Count; ++i)
            //     {
            //         var _child = _jsonData[i];
            //         // var _lookAtData = new CameraController.LookAtData();
            //         // _lookAtData.position = new Vector3(MathUtility.GetFloatFromLitJson(_child[1][0]),
            //         //                                    MathUtility.GetFloatFromLitJson(_child[1][1]),
            //         //                                    MathUtility.GetFloatFromLitJson(_child[1][2]));
            //         // _lookAtData.rotX = (int)_child[2];
            //         // _lookAtData.rotY = (int)_child[3];
            //         // _lookAtData.lastTime = MathUtility.GetFloatFromLitJson(_child[4]);
            //         // NpcDieSetCamera[(int)_child[0]] = _lookAtData;
            //     }
            // }
            // WorkForEnemySkills = GetIntArray("ArenaSetSkills", 1);
            // WorkForMeSkills = GetIntArray("ArenaSetSkills", 2);
            // WorkNotSkills = GetIntArray("ArenaSetSkills", 3);
            // defenseGetWays = GetIntArray("DefenseGetWays", 1);
            // skillYinjis = ConfigParse.GetDic<int, int>(GetInputString("SkillYinji", 1));
            // onlyUsedAtBackpackItems = new List<int>(GetIntArray("ItemPush", 2));
            // var signInSkillArray = GetIntArray("SignInPromoteSkill", 1);
            // if (signInSkillArray != null)
            // {
            //     signInPromoteSkills.AddRange(signInSkillArray);
            // }
            // MasteryLoadingLevelLimit1 = GetInt("MasteryLoadingLevelLimit");
            // MasteryLoadingLevelLimit2 = GetInt("MasteryLoadingLevelLimit", 2);
            // chestDisplayItems = new List<int>(GetIntArray("ChestShowItems"));
            // func = FuncConfigConfig.Get("Zhanling");
            // if (func != null)
            // {
            //     OldZhanLingCtgIdDict = new Dictionary<int, int>();
            //     ZhanLingCtgIdDict = new Dictionary<int, List<int>>();
            //     var tempDict = JsonMapper.ToObject(func.Numerical1);
            //     var keyList = tempDict.Keys.ToList();
            //     for (int j = 0; j < keyList.Count; j++)
            //     {
            //         OldZhanLingCtgIdDict[int.Parse(keyList[j])] = JsonMapper.ToObject<List<int>>(tempDict[keyList[j]].ToJson())[0];
            //         ZhanLingCtgIdDict[int.Parse(keyList[j])] = JsonMapper.ToObject<List<int>>(tempDict[keyList[j]].ToJson());
            //     }
            //     ZhanLingCtgIdHDict = new Dictionary<int, List<int>>();
            //     tempDict = JsonMapper.ToObject(func.Numerical3);
            //     keyList = tempDict.Keys.ToList();
            //     for (int k = 0; k < keyList.Count; k++)
            //     {
            //         ZhanLingCtgIdHDict[int.Parse(keyList[k])] = JsonMapper.ToObject<List<int>>(tempDict[keyList[k]].ToJson());
            //     }
            // }
            // func = FuncConfigConfig.Get("FBQuickPass");
            // fightPowerMore = float.Parse(func.Numerical1) + 0.01f; //疑似玩家无法雷诛是C/S计算不对等问题,所以加0.01f
            // flashOpenArr = JsonMapper.ToObject<int[]>(func.Numerical2);
            // flashCntMoreArr = JsonMapper.ToObject<int[]>(func.Numerical3);
            // flashKillMaxCount = int.Parse(func.Numerical4);
        }
        catch (Exception ex)
Main/System/HappyXB/HappyXBModel.cs
@@ -58,12 +58,12 @@
        SetXBFuncDict(1);
        SetXBFuncDict(2);
        var treasureIDArr = JsonMapper.ToObject<int[]>(FuncConfigConfig.Get("TreasureLuckyDraw").Numerical1);
        for (int i = 0; i < treasureIDArr.Length; i++)
        {
            int type = XBGetItemConfig.Get(treasureIDArr[i]).TreasureType;
            SetXBFuncDict(type);
        }
        // var treasureIDArr = JsonMapper.ToObject<int[]>(FuncConfigConfig.Get("TreasureLuckyDraw").Numerical1);
        // for (int i = 0; i < treasureIDArr.Length; i++)
        // {
        //     int type = XBGetItemConfig.Get(treasureIDArr[i]).TreasureType;
        //     SetXBFuncDict(type);
        // }
        SetXBFuncDict(105);
        SetXBFuncDict(106);
@@ -75,11 +75,11 @@
        XBCostTypeDict[(int)HappXBTitle.Best] = TreasureSetConfig.Get(1).CostMoneyType;
        XBCostTypeDict[(int)HappXBTitle.Rune] = TreasureSetConfig.Get(2).CostMoneyType;
        for (int i = 0; i < treasureIDArr.Length; i++)
        {
            int type = XBGetItemConfig.Get(treasureIDArr[i]).TreasureType;
            XBCostTypeDict[(int)HappXBTitle.Gubao1 + i] = TreasureSetConfig.Get(type).CostMoneyType;
        }
        // for (int i = 0; i < treasureIDArr.Length; i++)
        // {
        //     int type = XBGetItemConfig.Get(treasureIDArr[i]).TreasureType;
        //     XBCostTypeDict[(int)HappXBTitle.Gubao1 + i] = TreasureSetConfig.Get(type).CostMoneyType;
        // }
        XBCostTypeDict[(int)HappXBTitle.YunShi1] = TreasureSetConfig.Get(105).CostMoneyType;
        XBCostTypeDict[(int)HappXBTitle.YunShi2] = TreasureSetConfig.Get(106).CostMoneyType;
        XBCostTypeDict[(int)HappXBTitle.YunShi3] = TreasureSetConfig.Get(107).CostMoneyType;
Main/System/KnapSack/Logic/ItemLogicUtility.cs
@@ -7,22 +7,10 @@
    public class ItemLogicUtility : Singleton<ItemLogicUtility>
    {
        private string dogzGSFormula;
        private string normalGSFormula;
        private Dictionary<int, string> specialSpiritPropertyFormula = new Dictionary<int, string>();
        Dictionary<int, int> specialSpiritPropertyMaxLevels;
        private int[] preciousItemTypes;
        private int[] preciousItemIDs; // 不展示的物品ID
        public int[] drugIDs;
        private int[] onekeySellTypes;
        private int[] pushItemIds;
        private int lsItemCnt; // 背包中的灵石数量
        private List<int> equipBaseProperties = new List<int>();
        private Dictionary<int, int> promptUseLimitDict;
        private Dictionary<int, List<int>> betterEquipExceptDungeonDict;
        Dictionary<int, int> equipSkillScores = new Dictionary<int, int>();
        PackManager packModel { get { return PackManager.Instance; } }
@@ -38,15 +26,8 @@
        public void Init()
        {
            var GSFormulaConfig = FuncConfigConfig.Get("EquipGSFormula");
            dogzGSFormula = GSFormulaConfig.Numerical3;
            normalGSFormula = GSFormulaConfig.Numerical1;
            var json = JsonMapper.ToObject(FuncConfigConfig.Get("OutOfPrintValue").Numerical2);
            foreach (var key in json.Keys)
            {
                specialSpiritPropertyFormula[int.Parse(key)] = json[key].ToString();
            }
            specialSpiritPropertyMaxLevels = ConfigParse.GetDic<int, int>(FuncConfigConfig.Get("OutOfPrintValueDes").Numerical1);
            var equipSkillScoreJson = JsonMapper.ToObject(GSFormulaConfig.Numerical4);
            foreach (var key in equipSkillScoreJson.Keys)
            {
@@ -66,29 +47,9 @@
                    equipBaseProperties.Add(int.Parse(baseAttr[i].ToString()));
                }
            }
            lsItemCnt = int.Parse(FuncConfigConfig.Get("LingshiShowCount").Numerical1);
            preciousItemTypes = ConfigParse.GetMultipleStr<int>(FuncConfigConfig.Get("ItemPush").Numerical1);
            promptUseLimitDict = ConfigParse.GetDic<int, int>(FuncConfigConfig.Get("NoPromptUsetItem").Numerical1);
            preciousItemIDs = ConfigParse.GetMultipleStr<int>(FuncConfigConfig.Get("ItemPush").Numerical3);
            drugIDs = ConfigParse.GetMultipleStr<int>(FuncConfigConfig.Get("LifePotionlist").Numerical1);
            onekeySellTypes = ConfigParse.GetMultipleStr<int>(FuncConfigConfig.Get("OneKeySellItemType").Numerical1);
            pushItemIds = ConfigParse.GetMultipleStr<int>(FuncConfigConfig.Get("IntroductionItem").Numerical1);
            betterEquipExceptDungeonDict = new Dictionary<int, List<int>>();
            var excEquipData = JsonMapper.ToObject(FuncConfigConfig.Get("GoodItemDungeon").Numerical1);
            foreach (var dungeonId in excEquipData.Keys)
            {
                var itemIds = new List<int>();
                betterEquipExceptDungeonDict.Add(int.Parse(dungeonId), itemIds);
                for (var i = 0; i < excEquipData[dungeonId].Count; i++)
                {
                    var itemId = int.Parse(excEquipData[dungeonId][i].ToString());
                    itemIds.Add(itemId);
                }
            }
            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
        }
@@ -385,370 +346,7 @@
        #endregion
        #region 主界面物品弹框展示
        public event Action<PackType, string> GetPreciousItemEvent; //得到珍品  value 物品的实例ID
        public event Action<PackType, string> GetExpItemEvent; //得到经验物品  value 物品的实例ID
        public void RecommendItem(ItemModel item)
        {
            if (item.packType != PackType.Item)
            {
                return;
            }
            if (!preciousItemTypes.Contains(item.config.Type))
            {
                int mapId = PlayerDatas.Instance.baseData.MapID;
                var drugList = packModel.GetDrugIDListByDungeonID(mapId);
                if (drugList == null)
                    return;
                if (!drugList.Contains(item.config.ID))
                    return;
            }
            if (item.config.Type == 145 && item.config.CDTime > 0)
            {
                var createTime = item.GetUseDataFirstValue((int)ItemUseDataKey.createTime);
                if (createTime > 0)
                {
                    DateTime useTime;
                    if (item.config.CDTypeEx == 1)
                    {
                        //itemConfig.CDTime 为天,过0点可用
                        useTime = TimeUtility.GetTime((uint)createTime).AddDays(item.config.CDTime);
                        useTime = TimeUtility.GetDayStartTime(useTime.Year, useTime.Month, useTime.Day);
                    }
                    else
                    {
                        useTime = TimeUtility.GetTime((uint)createTime).AddSeconds(item.config.CDTime);
                    }
                    if (TimeUtility.ServerNow < useTime)
                    {
                        return;
                    }
                }
            }
            if (preciousItemIDs != null && preciousItemIDs.Contains(item.config.ID))
            {
                return;
            }
            if (item.config.ID == packModel.lsItemID)
            {
                int tmpCnt = PlayerDatas.Instance.baseData.LV < 50 ? 5 : lsItemCnt;
                if (packModel.GetItemCountByID(PackType.Item, packModel.lsItemID) < tmpCnt)
                    return;
            }
            //if (item.isAuction)
            //{
            //    return;
            //}
            if (item.config.UseLV > PlayerDatas.Instance.baseData.LV)
            {
                return;
            }
            if (IsOverdue(item.guid))
            {
                return;
            }
            // if (!IsAbleToUse(item))
            // {
            //     return;
            // }
            if (IsSpiritWeapon(item.itemId))
            {
                if (IsFightUp(item.itemId, item.score) != 1)
                {
                    return;
                }
            }
            if (item.config.Type == 13)
            {
                // 经验丹特殊处理,优先显示
                if (GetExpItemEvent != null)
                {
                    GetExpItemEvent(item.packType, item.guid);
                }
            }
            else
            {
                if (GetPreciousItemEvent != null)
                {
                    GetPreciousItemEvent(item.packType, item.guid);
                }
            }
        }
        // bool IsAbleToUse(ItemModel item)
        // {
        //     var windowSearch = WindowSearchConfig.Get(item.config.Jump);
        //     if (windowSearch != null)
        //     {
        //         if (!FuncOpen.Instance.IsFuncOpen(windowSearch.Lv) && windowSearch.Lv != 0)
        //         {
        //             return false;
        //         }
        //     }
        //     if (pushItemIds.Contains(item.itemId))
        //     {
        //         var itemCnt = packModel.GetItemCountByID(PackType.Item, item.itemId) - item.count;
        //         if (itemCnt > 0)
        //         {
        //             return false;
        //         }
        //         else
        //         {
        //             if (item.preItemCount > 0)
        //             {
        //                 return false;
        //             }
        //         }
        //     }
        //     if (promptUseLimitDict.ContainsKey(item.itemId))
        //     {
        //         var playerLv = PlayerDatas.Instance.baseData.LV;
        //         if (playerLv < promptUseLimitDict[item.itemId])
        //         {
        //             return false;
        //         }
        //     }
        //     ulong canUseCnt = 0;
        //     if (packModel.IsReachUseLimit(item.guid, out canUseCnt))
        //     {
        //         return false;
        //     }
        //     bool isBox = false;
        //     bool isCanOpen = ModelCenter.Instance.GetModel<BoxGetItemModel>().CheckOpenBoxCondition(item.itemId, out isBox);
        //     if (isBox)
        //     {
        //         if (!isCanOpen)
        //         {
        //             return false;
        //         }
        //     }
        //     //if (trialModel.trialTokens.Contains(item.itemId))
        //     //{
        //     //    if (!trialModel.IsAnySatisfyExchangeBetter(item.itemId))
        //     //    {
        //     //        return false;
        //     //    }
        //     //}
        //     if (packModel.CheckIsDrugById(item.itemId))
        //     {
        //         if (item.config.RealmLimit > PlayerDatas.Instance.baseData.realmLevel)
        //         {
        //             return false;
        //         }
        //     }
        //     var fruitConfig = AttrFruitConfig.Get(item.itemId);
        //     if (fruitConfig != null && fruitConfig.FuncID == 2)
        //     {
        //         if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BlastFurnace))
        //         {
        //             return false;
        //         }
        //     }
        //     switch (item.config.Type)
        //     {
        //         case 8:
        //             if (buffDatas.BastBuff(item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 20:
        //             if (magicianModel.IsGodWeaponMaxLevelByItem(item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 21:
        //             if (!mountDatas.IsHint(HorseEnum.HorseDan, item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 22:
        //             if (!mountDatas.IsHint(HorseEnum.HorseStone, item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 41:
        //             if (!mountDatas.IsHint(HorseEnum.HorseDebris, item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 26:
        //             if (!petDatas.IsHint(PetEnum.PetDebris, item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 27:
        //             if (!petDatas.IsHint(PetEnum.PetDan, item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 28:
        //             if (!petDatas.IsHint(PetEnum.PetStone, item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 25:
        //             if (!ModelCenter.Instance.GetModel<EquipGemModel>().IsBetterGem(item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 39:
        //             if (!IsBetterWings(item))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 52:
        //             if (!strengthDatas.IsHint(item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 55:
        //             if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BlastFurnace))
        //             {
        //                 return false;
        //             }
        //             var alchemyId = 0;
        //             if (alchemyModel.TryGetAlchemyByStudyMaterial(item.itemId, out alchemyId))
        //             {
        //                 var alchemyConfig = AlchemyConfig.Get(alchemyId);
        //                 int alchemingId;
        //                 if (alchemyModel.IsStoveAlcheming((AlchemyType)alchemyConfig.AlchemType, out alchemingId))
        //                 {
        //                     return false;
        //                 }
        //                 if (alchemyModel.IsGraspRecipe(alchemyId))
        //                 {
        //                     return false;
        //                 }
        //                 var studyError = 0;
        //                 if (!alchemyModel.TryLearn(alchemyId, out studyError))
        //                 {
        //                     return false;
        //                 }
        //             }
        //             break;
        //         case 127:
        //             var error = 0;
        //             bool isHaveMakeNum = ItemOperateUtility.Instance.CanUseItem(item.guid, 1, out error);
        //             int remainNum = CrossServerOneVsOnePlayerInfo.Instance.GetDayRemainNum();
        //             if (!CrossServerOneVsOnePKSeason.Instance.isSatisfyMatch
        //                 || remainNum > 0
        //                 || !isHaveMakeNum)
        //             {
        //                 return false;
        //             }
        //             break;
        //         default:
        //             break;
        //     }
        //     switch (item.itemId)
        //     {
        //         case 951:
        //             if (!CheckIsExtendGrid(item.itemId))
        //             {
        //                 return false;
        //             }
        //             break;
        //         case 952:
        //             return false;
        //             break;
        //     }
        //     return true;
        // }
        // private bool IsBetterWings(ItemModel item)
        // {
        //     if (item == null)
        //     {
        //         return false;
        //     }
        //     var putModel = packModel.GetItemByIndex(PackType.Equip, SpiritWeaponModel.WING_EQUIPINDEX);
        //     var singlePack = packModel.GetSinglePack(PackType.Item);
        //     if (singlePack == null)
        //     {
        //         return false;
        //     }
        //     int[] composeTypes = item.config.JumpComposeCondi;
        //     bool isOpenCompose = false;
        //     if (composeTypes != null && composeTypes.Length >= 3)
        //     {
        //         int first = composeTypes[0];
        //         int second = composeTypes[1];
        //         int third = composeTypes[2];
        //         ComposeWinModel.ComposeThirdTypeData thirdTypeData = null;
        //         composeModel.TryGetThirdTypeData(first, second, third, out thirdTypeData);
        //         if (thirdTypeData != null)
        //         {
        //             var itemCompound = thirdTypeData.itemCompound;
        //             if (itemCompound.levelNeed <= PlayerDatas.Instance.baseData.LV)
        //             {
        //                 isOpenCompose = true;
        //             }
        //         }
        //     }
        //     if (!isOpenCompose)
        //     {
        //         return false;
        //     }
        //     if (putModel != null && putModel.config.LV >= item.config.LV)
        //     {
        //         return false;
        //     }
        //     var itemModels = packModel.GetItems(PackType.Item, new SinglePack.FilterParams()
        //     {
        //         itemTypes = new List<int>() { (int)ItemType.Equip_Wing }
        //     });
        //     if (itemModels != null)
        //     {
        //         for (int i = 0; i < itemModels.Count; i++)
        //         {
        //             if (IsJobCompatibleItem(itemModels[i].itemId))
        //             {
        //                 if (itemModels[i].config.LV >= item.config.LV)
        //                 {
        //                     return false;
        //                 }
        //             }
        //         }
        //     }
        //     return true;
        // }
        private bool CheckIsExtendGrid(int itemId)
        {
            SinglePack singlePack = packModel.GetSinglePack(PackType.Item);
@@ -954,7 +552,6 @@
        //     }
        //     return RealmDruglist;
        // }
        #endregion
        #region 物品处于CD中的逻辑处理
Main/System/KnapSack/PackManager.cs
@@ -24,12 +24,9 @@
        //AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
        //ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        public int lsItemID = 150; //可兑换的灵石物品ID
        int lsItemCnt = 0;
        List<string> commonShowAwardEvents = new List<string>();
        public int[] autoUseItemIDs;
        UIEffect lingshiEffect;  //灵石特效
        public override void Init()
        {
            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
@@ -37,72 +34,25 @@
            DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
            ParseConfig();
            //SysNotifyMgr.Instance.sysNotifyEvent += RefreshSysInfo;
            // List<DungeonOpenTimeConfig> dungeonlist = DungeonOpenTimeConfig.GetValues();
            // if (dungeonlist != null)
            // {
            //     //DrugToDungeonDict = new Dictionary<int, int>();
            //     DungeonToDrugDict = new Dictionary<int, int[]>();
            //     for (int i = 0; i < dungeonlist.Count; i++)
            // FuncConfigConfig ShareUseCntItem = FuncConfigConfig.Get("ShareUseCntItem");
            // sharedUseCountItemDict = new Dictionary<int, List<int>>();
            // JsonData shareUseJson = JsonMapper.ToObject(ShareUseCntItem.Numerical1);
            // if (shareUseJson.IsArray)
            // {
            //     for (int i = 0; i < shareUseJson.Count; i++)
            //     {
            //         int[] drugIdlist = dungeonlist[i].ElixirHint;
            //         if (drugIdlist != null && drugIdlist.Length > 0)
            //         var idListJson = shareUseJson[i];
            //         var idlist = new List<int>();
            //         sharedUseCountItemDict.Add(i, idlist);
            //         foreach (var id in idListJson)
            //         {
            //             DungeonToDrugDict.Add(dungeonlist[i].DataMapID, drugIdlist);
            //             //for (int j = 0; j < drugIdlist.Length; j++)
            //             //{
            //             //    DrugToDungeonDict.Add(drugIdlist[j], dungeonlist[i].DataMapID);
            //             //}
            //             idlist.Add(int.Parse(id.ToString()));
            //         }
            //     }
            // }
            // makeDruglist = new List<AttrFruitConfig>();
            // List<AttrFruitConfig> fruitlist = AttrFruitConfig.GetValues();
            // for (int i = 0; i < fruitlist.Count; i++)
            // {
            //     if (fruitlist[i].FuncID == 2)
            //     {
            //         makeDruglist.Add(fruitlist[i]);
            //     }
            // }
            // StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
            SetDevourEquipPlace();
            // decomposeAttrDict.Clear();
            // List<EquipDeComposeConfig> decomlist = EquipDeComposeConfig.GetValues();
            // for (int i = 0; i < decomlist.Count; i++)
            // {
            //     JsonData attrData = JsonMapper.ToObject(decomlist[i].Attr);
            //     Dictionary<int, int> attrDict = new Dictionary<int, int>();
            //     decomposeAttrDict.Add(decomlist[i].LV, attrDict);
            //     foreach (var id in attrData.Keys)
            //     {
            //         attrDict.Add(int.Parse(id), int.Parse(attrData[id].ToString()));
            //     }
            // }
            FuncConfigConfig equipDecompose = FuncConfigConfig.Get("EquipDevourCount");
            minDecomposeNum = int.Parse(equipDecompose.Numerical1);
            defaultUnSelectlist = ConfigParse.GetMultipleStr<int>(equipDecompose.Numerical2);
            FuncConfigConfig ShareUseCntItem = FuncConfigConfig.Get("ShareUseCntItem");
            sharedUseCountItemDict = new Dictionary<int, List<int>>();
            JsonData shareUseJson = JsonMapper.ToObject(ShareUseCntItem.Numerical1);
            if (shareUseJson.IsArray)
            {
                for (int i = 0; i < shareUseJson.Count; i++)
                {
                    var idListJson = shareUseJson[i];
                    var idlist = new List<int>();
                    sharedUseCountItemDict.Add(i, idlist);
                    foreach (var id in idListJson)
                    {
                        idlist.Add(int.Parse(id.ToString()));
                    }
                }
            }
            ParseItemCount();
@@ -140,27 +90,18 @@
        private void OnFuncStateChangeEvent(int id)
        {
            if (id == (int)FuncOpenEnum.EquipDecompose)
            {
                EquipDecomRedCtrl();
            }
        }
        public void OnBeforePlayerDataInitialize()
        {
            GlobalTimeEvent.Instance.secondEvent -= UpdateSecond;
            PlayerDatas.Instance.playerDataRefreshEvent -= UpdatePlayerLv;
            LocalSave.DeleteKey(RecordKnapsackTitle);
            cacheMapId = 0;
            playerPackDict.Clear();
            itemDayUseCntDict.Clear();
            itemSumUseCntDict.Clear();
            itemGUIDDict.Clear();
            isPlayBetterEquipEffect = false;
            colorType = EquipColorType.Orange;
            decomposeLv = 1;
            decomposeExp = 0;
            decomposeProgress = 0;
            isAutoDecompose = false;
        }
        public void OnAfterPlayerDataInitialize()
@@ -171,7 +112,6 @@
        public void OnPlayerLoginOk()
        {
            //ItemOperateUtility.Instance.RequestWarehouseData();
            EquipDecomRedCtrl();
            RoleEquipLocalSave = StringUtility.Contact("RoleEquipLocalSave", PlayerDatas.Instance.baseData.PlayerID);
            StrengthAttrShift_RecordKey = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "StrengthAttrShift");
            if (LocalSave.GetIntArray(RoleEquipLocalSave) != null)
@@ -321,20 +261,10 @@
            UpdatePackRedpoint(type);
            //EquipDecomRedCtrl();
            m_CheckEquipDecomRedCtrl = true;
            AutoUseItem(itemInfo.itemId, serverItem.ItemGUID);
        }
        bool m_CheckEquipDecomRedCtrl = false;
        void CheckEquipDecomRedCtrl()
        {
            if (m_CheckEquipDecomRedCtrl)
            {
                EquipDecomRedCtrl();
                m_CheckEquipDecomRedCtrl = false;
            }
        }
        public void UpdateUnlockedGridCount(H0724_tagRolePackCanUseCount useCount)
@@ -381,7 +311,6 @@
                        {
                            itemCntAddEvent(type, itemModel.gridIndex, itemModel.itemId);
                        }
                        ItemLogicUtility.Instance.RecommendItem(itemModel);
                        ItemLogicUtility.Instance.RefreshPickItem(type, itemModel.itemId.ToString());
                    }
                    else
@@ -397,7 +326,6 @@
                        refreshItemCountEvent(type, itemModel.gridIndex, itemModel.itemId);
                    }
                    UpdateLSRedpoint(type, itemModel.itemId);
                }
            }
@@ -444,8 +372,6 @@
            }
            UpdatePackRedpoint(type);
            m_CheckEquipDecomRedCtrl = true;
            //EquipDecomRedCtrl();
            if (GetItemByGuid(guid) == null)
            {
@@ -468,16 +394,6 @@
                return;
            }
            MakeUseItemSuccess(success.ItemIndex, (int)success.ItemID);
            switch (success.ItemID)
            {
                // case 221:
                //     if (WindowCenter.Instance.IsOpen<KnapSackWin>())
                //     {
                //         WindowCenter.Instance.Close<KnapSackWin>();
                //     }
                //     break;
            }
            if (useItemSuccessEvent != null)
            {
@@ -493,28 +409,6 @@
            // }
        }
        private void MakeUseItemSuccess(int index, int id)
        {
            ItemConfig itemConfig = ItemConfig.Get(id);
            if (itemConfig.CDType != 0)
            {
                var items = GetItems(PackType.Item, new SinglePack.FilterParams()
                {
                    itemTypes = new List<int>() { (int)ItemType.Buff }
                });
                for (int i = 0; i < items.Count; i++)
                {
                    if (ItemLogicUtility.Instance.drugIDs.Contains(items[i].itemId))
                    {
                        itemConfig = ItemConfig.Get(items[i].itemId);
                        float configCdTime = (float)Math.Round((double)itemConfig.CDTime / 1000, 1);
                        KnapsackTimeCDMgr.Instance.Register(items[i].guid, items[i].itemId, configCdTime);
                    }
                }
            }
        }
        void AddItemGUIDDict(ItemModel itemModel, bool showNewItem)
        {
@@ -586,67 +480,16 @@
        #endregion
        #region 玩家装备特殊逻辑
        public Dictionary<int, Dictionary<int, int>> spiritWeaponPathIds { get; private set; }
        public Dictionary<int, int> wingsGetPathIdDict { get; private set; }
        public Dictionary<int, List<int>> dungeonUseDict { get; private set; }
        void ParseConfig()
        {
            FuncConfigConfig funcConfig = FuncConfigConfig.Get("WingYuPeiHQTJ");
            spiritWeaponPathIds = new Dictionary<int, Dictionary<int, int>>();
            var splits = funcConfig.Numerical3.Split('|');
            for (int i = 0; i < splits.Length; i++)
            {
                var tempString = splits[i];
                var matches = Regex.Matches(tempString.Trim(), "\\d+");
                var equipPlace = int.Parse(matches[0].Value);
                var job = int.Parse(matches[1].Value);
                var itemId = int.Parse(matches[2].Value);
                if (!spiritWeaponPathIds.ContainsKey(equipPlace))
                {
                    spiritWeaponPathIds[equipPlace] = new Dictionary<int, int>();
                }
                spiritWeaponPathIds[equipPlace][job] = itemId;
            }
            FuncConfigConfig copyItemBulletWindow = FuncConfigConfig.Get("CopyItemBulletWindow");
            JsonData copyWinData = JsonMapper.ToObject(copyItemBulletWindow.Numerical1);
            dungeonUseDict = new Dictionary<int, List<int>>();
            foreach (var dungeonId in copyWinData.Keys)
            {
                List<int> idlist = new List<int>();
                dungeonUseDict.Add(int.Parse(dungeonId), idlist);
                if (copyWinData[dungeonId].IsArray)
                {
                    JsonData useData = copyWinData[dungeonId];
                    for (int i = 0; i < useData.Count; i++)
                    {
                        idlist.Add(int.Parse(useData[i].ToString()));
                    }
                }
            }
            lsItemCnt = int.Parse(FuncConfigConfig.Get("LingshiShowCount").Numerical1);
            var config = FuncConfigConfig.Get("CommonShowAwards");
            commonShowAwardEvents = JsonMapper.ToObject<List<string>>(config.Numerical1);
        }
        public int GetRoleEquipPathId(int equipPlace)
        {
            int playerJob = PlayerDatas.Instance.baseData.Job;
            switch ((RoleEquipType)equipPlace)
            {
                case RoleEquipType.Guard:
                case RoleEquipType.PeerlessWeapon1:
                case RoleEquipType.PeerlessWeapon2:
                case RoleEquipType.Wing:
                    return spiritWeaponPathIds[equipPlace][playerJob];
                default:
                    return 0;
            }
        }
        private void UpdateSecond()
        {
@@ -654,7 +497,6 @@
            {
                isUpdatePlayerLv = false;
            }
            CheckEquipDecomRedCtrl();
        }
        private void UpdatePlayerLv(PlayerDataType type)
@@ -947,27 +789,6 @@
        const int LS_REDKEY = 102011015;
        Redpoint redpointLS = new Redpoint(MainRedDot.RedPoint_BagFuncKey, LS_REDKEY);
        private void UpdateLSRedpoint(PackType type, int itemID)
        {
            var singlePack = GetSinglePack(type);
            if (singlePack == null)
            {
                return;
            }
            if (type != PackType.Item) return;
            if (itemID != lsItemID) return;
            if (GetItemCountByID(PackType.Item, lsItemID) < lsItemCnt)
            {
                redpointLS.state = RedPointState.None;
            }
            else
            {
                redpointLS.state = RedPointState.Simple;
            }
        }
        private void UpdatePackRedpoint(PackType type)
        {
@@ -989,14 +810,7 @@
                    {
                        redpointItemPack.state = RedPointState.None;
                    }
                    if (GetItemCountByID(PackType.Item, lsItemID) < lsItemCnt)
                    {
                        redpointLS.state = RedPointState.None;
                    }
                    else
                    {
                        redpointLS.state = RedPointState.Simple;
                    }
                    break;
                case PackType.Warehouse:
                    if (singlePack.GetEmptyGridCount() <= 0)
@@ -1011,34 +825,7 @@
            }
        }
        const int PLAYERSUMSTAR_REDKEY = 102011002;
        Redpoint redpointSTAR = new Redpoint(MainRedDot.RedPoint_BagFuncKey, PLAYERSUMSTAR_REDKEY);
        public const int EquipDecompose_RedKey = 10205;
        public Redpoint redpointEquipDecom = new Redpoint(MainRedDot.RedPoint_MainPackKey, EquipDecompose_RedKey);
        public void EquipDecomRedCtrl()
        {
            if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.EquipDecompose))
            {
                return;
            }
            if (PlayerDatas.Instance.baseData.LV < devourRedpointLevel)
            {
                redpointEquipDecom.state = RedPointState.None;
                return;
            }
            var canDevourItems = GetCanDevourModellist();
            if (canDevourItems != null && canDevourItems.Count >= minDevourEquipNum)
            {
                redpointEquipDecom.state = RedPointState.Simple;
            }
            else
            {
                redpointEquipDecom.state = RedPointState.None;
            }
        }
        #endregion
        #region 查看某个位置的物品
@@ -1090,33 +877,7 @@
        private int cacheMapId = 0;
        public event Action<PackType, string> itemUseAct;
        private Dictionary<int, int> itemUseTypeDict = new Dictionary<int, int>(); //key SkillTypeID,value 使用物品的ID
        private void OnStageLoadFinish()
        {
            // itemUseTypeDict.Clear();
            // if (PlayerDatas.Instance.baseData.MapID == cacheMapId)
            // {
            //     return;
            // }
            // cacheMapId = PlayerDatas.Instance.baseData.MapID;
            // UpdateDungeonDanUse();
            // UpdateDungeonUse();
            // SinglePack singlePack = GetSinglePack(PackType.Item);
            // foreach (int itemId in itemUseTypeDict.Values)
            // {
            //     var modellist = singlePack.GetItemsById(itemId);
            //     if (modellist.Count > 0)
            //     {
            //         ItemModel itemModel = modellist[0];
            //         bool isExist = StatusMgr.Instance.IsExist(PlayerDatas.Instance.hero.ServerInstID, itemModel.config.AddSkill1);
            //         Debug.Log("Buff是否存在" + isExist);
            //         if (itemUseAct != null && !isExist)
            //         {
            //             itemUseAct(PackType.Item, itemModel.guid);
            //         }
            //     }
            // }
        }
        private void AddItemUseTypeDict(int id)
        {
@@ -1139,31 +900,8 @@
            }
        }
        private void UpdateDungeonDanUse()
        {
            int mapId = PlayerDatas.Instance.baseData.MapID;
            int[] useDrugs = GetDrugIDListByDungeonID(mapId);
            if (useDrugs == null) return;
            for (int i = 0; i < useDrugs.Length; i++)
            {
                int id = useDrugs[i];
                AddItemUseTypeDict(id);
            }
        }
        private void UpdateDungeonUse()
        {
            int mapId = PlayerDatas.Instance.baseData.MapID;
            if (!dungeonUseDict.ContainsKey(mapId)) return;
            List<int> useIdlist = dungeonUseDict[mapId];
            for (int i = 0; i < useIdlist.Count; i++)
            {
                int id = useIdlist[i];
                AddItemUseTypeDict(id);
            }
        }
        public SkillConfig GetSkillConfig(int itemId)
        {
@@ -1172,19 +910,8 @@
            return skillConfig;
        }
        public int GetDungeonIDByDrugID(int drugID)
        {
            int dungeonID = 0;
            //DrugToDungeonDict.TryGetValue(drugID, out dungeonID);
            return dungeonID;
        }
        public int[] GetDrugIDListByDungeonID(int dungeonID)
        {
            int[] drugIDlist = null;
            DungeonToDrugDict.TryGetValue(dungeonID, out drugIDlist);
            return drugIDlist;
        }
        #endregion
        #region 判断物品是否达到使用上限
@@ -1228,442 +955,9 @@
        // }
        #endregion
        #region 物品吞噬逻辑处理
        public EquipColorType colorType { get; private set; }
        public event Action<EquipColorType> RefreshColorSelectAct;
        public event Action RefreshEquipDecomNumAct;
        public int[] defaultUnSelectlist { get; private set; }
        public int GetBetterEquipCount(List<ItemModel> itemModels)
        {
            if (itemModels.IsNullOrEmpty())
            {
                return 0;
            }
            var count = 0;
            foreach (var item in itemModels)
            {
                if (ItemLogicUtility.Instance.IsFightUp(item.itemId, item.score) == 1)
                {
                    count += item.count;
                }
            }
            return count;
        }
        public void SetColorSelect(EquipColorType type)
        {
            colorType = type;
            if (RefreshColorSelectAct != null)
            {
                RefreshColorSelectAct(type);
            }
            SendEquipDevourRecordQuest();
            EquipDecomRedCtrl();
        }
        public List<int> devourPlacelist { get; private set; }
        public int devourRedpointLevel { get; private set; }
        public int minDevourEquipNum { get; private set; }
        public void SetDevourEquipPlace()
        {
            devourPlacelist = new List<int>();
            FuncConfigConfig funcConfig = FuncConfigConfig.Get("PetAbsorbType");
            int[] placeArray = ConfigParse.GetMultipleStr<int>(funcConfig.Numerical1);
            for (int i = 0; i < placeArray.Length; i++)
            {
                devourPlacelist.Add(placeArray[i]);
            }
            devourRedpointLevel = int.Parse(funcConfig.Numerical2);
            minDevourEquipNum = int.Parse(funcConfig.Numerical3);
        }
        List<ItemModel> devourModellist = new List<ItemModel>();
        List<ItemModel> orderDevourModellist = new List<ItemModel>();
        public List<ItemModel> GetDevourModellist()
        {
            SinglePack singlePack = GetSinglePack(PackType.Item);
            if (singlePack == null) return null;
            devourModellist.Clear();
            orderDevourModellist.Clear();
            foreach (var model in singlePack.GetAllItems().Values)
            {
                if (model.config.Type == 29)
                {
                    devourModellist.Add(model);
                }
                else
                {
                    if (devourPlacelist.Contains(model.config.EquipPlace))
                    {
                        if (GeneralDefine.equipDecomposeScreen.Contains(model.config.ItemColor))
                        {
                            devourModellist.Add(model);
                        }
                    }
                }
            }
            orderDevourModellist.AddRange(devourModellist);
            orderDevourModellist.Sort(CompareByColor);
            return orderDevourModellist;
        }
        public int CompareByColor(ItemModel start, ItemModel next)
        {
            bool typeX = start.config.Type == 29 ? true : false;
            bool typeY = next.config.Type == 29 ? true : false;
            if (typeX.CompareTo(typeY) != 0) return -typeX.CompareTo(typeY);
            int colorX = start.config.ItemColor;
            int colorY = next.config.ItemColor;
            if (colorX.CompareTo(colorY) != 0) return colorX.CompareTo(colorY);
            int startIndex = devourModellist.IndexOf(start);
            int nextIndex = devourModellist.IndexOf(next);
            if (startIndex.CompareTo(nextIndex) != 0) return startIndex.CompareTo(nextIndex);
            return 0;
        }
        public List<ItemModel> GetCanDevourModellist()
        {
            List<ItemModel> canDevourModellist = new List<ItemModel>();
            SinglePack singlePack = GetSinglePack(PackType.Item);
            if (singlePack == null || colorType == EquipColorType.None)
            {
                if (RefreshEquipDecomNumAct != null)
                {
                    RefreshEquipDecomNumAct();
                }
                return null;
            }
            foreach (var model in singlePack.GetAllItems().Values)
            {
                if (model.config.Type == 29)
                {
                    if (!defaultUnSelectlist.Contains(model.itemId))
                    {
                        canDevourModellist.Add(model);
                    }
                }
                else
                {
                    if (IsCanDevour(model))
                    {
                        canDevourModellist.Add(model);
                    }
                }
            }
            if (RefreshEquipDecomNumAct != null)
            {
                RefreshEquipDecomNumAct();
            }
            return canDevourModellist;
        }
        public bool IsCanDevour(ItemModel model)
        {
            // if (devourPlacelist.Contains(model.config.EquipPlace))
            // {
            //     if (GeneralDefine.equipDecomposeScreen.Contains(model.config.ItemColor))
            //     {
            //         var eatEquipConfig = PetEatEquipConfig.GetEquipColorAndEquipClass(model.config.ItemColor, model.config.LV);
            //         if (eatEquipConfig == null) return false;
            //         if (EquipControlConfig.Get(model.config.LV, 1).realm > PlayerDatas.Instance.baseData.realmLevel)
            //         {
            //             //bug:玩家挂机会打高境界怪,导致装备无法分解背包太满的情况
            //             //境界大于玩家境界,且在指定颜色品质下的直接分解紫色以下装备
            //             if (model.config.ItemColor <= (int)colorType && model.config.ItemColor <= 3)
            //             {
            //                 return true;
            //             }
            //         }
            //         //1. 非拍卖装备
            //         //2. 装备品质小于等于当前选择的品质
            //         //3. 非本职业的套装装备
            //         //4. 非战斗力提升的装备
            //         if (!model.isAuction && model.config.ItemColor <= (int)colorType
            //             && !(ItemLogicUtility.Instance.IsJobCompatibleItem(model.itemId)
            //                     && model.config.ItemColor == 4 && model.config.SuiteiD != 0)
            //             && ItemLogicUtility.Instance.IsFightUp(model.itemId, model.score) != 1)
            //         {
            //             return true;
            //         }
            //     }
            // }
            return false;
        }
        public bool IsMaxDecomLv(int decomLv, out int realLv)
        {
            realLv = decomLv;
            // var decomlist = EquipDeComposeConfig.GetValues();
            // if (decomLv > decomlist[decomlist.Count - 1].LV)
            // {
            //     realLv = decomlist[decomlist.Count - 1].LV;
            //     return true;
            // }
            return false;
        }
        public List<ItemModel> selectDevourlist = new List<ItemModel>();
        public void GetSelectDevourList()
        {
            selectDevourlist.Clear();
            List<ItemModel> itemModels = GetCanDevourModellist();
            if (itemModels != null)
            {
                selectDevourlist.AddRange(itemModels);
            }
        }
        public void RefreshGetNewItem(ItemModel model)
        {
            if (model == null) return;
            if (CheckIsReachDevourCondi(model))
            {
                selectDevourlist.Add(model);
                if (RefreshEquipDecomNumAct != null)
                {
                    RefreshEquipDecomNumAct();
                }
            }
        }
        public void AddSelectDevourModellist(ItemModel model)
        {
            selectDevourlist.Add(model);
            if (RefreshEquipDecomNumAct != null)
            {
                RefreshEquipDecomNumAct();
            }
        }
        public bool CheckIsReachDevourCondi(ItemModel model)
        {
            if (model.config.Type == 29)
            {
                if (!defaultUnSelectlist.Contains(model.itemId))
                {
                    return true;
                }
                return false;
            }
            else
            {
                if (IsCanDevour(model))
                {
                    return true;
                }
            }
            return false;
        }
        public void RemoveSelectDevourModellist(ItemModel model)
        {
            if (selectDevourlist.Contains(model))
            {
                selectDevourlist.Remove(model);
            }
            if (RefreshEquipDecomNumAct != null)
            {
                RefreshEquipDecomNumAct();
            }
        }
        public Dictionary<int, int> GetDecomAttrDictByLv(int decomLv)
        {
            if (decomposeAttrDict.ContainsKey(decomLv))
            {
                return decomposeAttrDict[decomLv];
            }
            return null;
        }
        public bool IsReachMinDecomposeNum()
        {
            List<ItemModel> itemModels = GetCanDevourModellist();
            if (itemModels != null && itemModels.Count >= minDecomposeNum)
            {
                return true;
            }
            return false;
        }
        public void SendEquipdevourQuest(bool auto)
        {
            List<ItemModel> items = null;
            if (auto)
            {
                items = GetCanDevourModellist();
            }
            else
            {
                items = selectDevourlist;
            }
            // if (items == null || items.Count < minDecomposeNum || !ItemLogicUtility.Instance.isPackResetOk || SettingEffectMgr.Instance.isStartDecompose) return;
            // SettingEffectMgr.Instance.isStartDecompose = true;
            // isAutoDecompose = auto;
            // recordAutoDecomNum = Math.Min(items.Count, 100);    //单次最多100件分解
            // var package = new CA32C_tagCMEquipDecompose();
            // var indexLists = new ushort[recordAutoDecomNum];
            // var idlist = new uint[recordAutoDecomNum];
            // for (int i = 0; i < recordAutoDecomNum; i++)
            // {
            //     indexLists[i] = (ushort)items[i].gridIndex;
            //     idlist[i] = (uint)items[i].itemId;
            //     if ((items[i].config.EquipPlace == 0 && items[i].config.Type != 29))
            //     {
            //         return;
            //     }
            // }
            // package.Count = (byte)indexLists.Length;
            // package.IndexList = indexLists;
            // package.ItemIDList = idlist;
            // package.IsAuto = (byte)(auto ? 1 : 0);
            // GameNetSystem.Instance.SendInfo(package);
        }
        public void SendEquipDevourRecordQuest()
        {
            var record = StringUtility.Contact((int)colorType + 1, 1, 1);
            var decomSet = new CA32D_tagCMDecomposeSeting();
            decomSet.Seting = uint.Parse(record);
            GameNetSystem.Instance.SendInfo(decomSet);
        }
        public int decomposeLv { get; private set; }
        public int decomposeExp { get; private set; }
        public int decomposeProgress { get; private set; }
        public int addDecomposeExp { get; private set; }
        public int minDecomposeNum { get; private set; }
        public bool isAutoDecompose { get; set; }
        public int recordAutoDecomNum { get; private set; }
        public DecomposeGetMatInfo[] getItems { get; private set; }
        public event Action RefreshDecomAttrAct;
        // public void GetServerDecomposeSet(HA31C_tagMCEquipDecomposeInfo info)
        // {
        //     addDecomposeExp = 0;
        //     int realLv = info.LV + 1;
        //     bool isMax = IsMaxDecomLv(realLv, out realLv);
        //     if (realLv == decomposeLv)
        //     {
        //         addDecomposeExp = (int)info.Exp - decomposeExp;
        //     }
        //     else
        //     {
        //         for (int i = decomposeLv; i <= realLv; i++)
        //         {
        //             var deComposeConfig = EquipDeComposeConfig.Get(i);
        //             if (i == decomposeLv)
        //             {
        //                 addDecomposeExp = deComposeConfig.UpNeedExp - decomposeExp;
        //             }
        //             else if (i == realLv)
        //             {
        //                 addDecomposeExp += (int)info.Exp;
        //             }
        //             else
        //             {
        //                 addDecomposeExp += deComposeConfig.UpNeedExp;
        //             }
        //         }
        //     }
        //     decomposeLv = realLv;
        //     decomposeExp = (int)info.Exp;
        //     decomposeProgress = info.DecomposeCnt;
        //     getItems = JsonMapper.ToObject<DecomposeGetMatInfo[]>(info.GetItemData);
        //     if (info.Seting != 0)
        //     {
        //         string decomSetStr = info.Seting.ToString();
        //         string colorStr = decomSetStr.Substring(0, 1);
        //         colorType = (EquipColorType)(int.Parse(colorStr) - 1);
        //         string lvStr = decomSetStr.Substring(1, decomSetStr.Length - 2);
        //     }
        //     if (RefreshDecomAttrAct != null)
        //     {
        //         RefreshDecomAttrAct();
        //     }
        // }
        /// <summary>
        /// 设置获得炼丹材料的展示数据
        /// </summary>
        /// <param name="getMatInfos"></param>
        /// <returns></returns>
        private List<DecomposeGetMatInfo> getMatInfos = new List<DecomposeGetMatInfo>();
        public List<DecomposeGetMatInfo> SetShowMatInfo()
        {
            getMatInfos.Clear();
            int sumMatCnt = 0;
            if (getItems != null)
            {
                for (int i = 0; i < getItems.Length; i++)
                {
                    if (getItems[i].Count > 0)
                    {
                        sumMatCnt += getItems[i].Count;
                    }
                    else
                    {
                        sumMatCnt += 1;
                    }
                }
            }
            if (sumMatCnt > 5)
            {
                for (int i = 0; i < getItems.Length; i++)
                {
                    getMatInfos.Add(getItems[i]);
                }
            }
            else
            {
                if (getItems != null)
                {
                    for (int i = 0; i < getItems.Length; i++)
                    {
                        //if (getItems[i].Count > 0)
                        //{
                        //    for (int j = 0; j < getItems[i].Count; j++)
                        //    {
                        //        DecomposeGetMatInfo matInfo = new DecomposeGetMatInfo();
                        //        matInfo.ItemID = getItems[i].ItemID;
                        //        matInfo.Count = 1;
                        //        matInfo.IsSuite = getItems[i].IsSuite;
                        //        matInfo.UserData = getItems[i].UserData;
                        //        getMatInfos.Add(matInfo);
                        //    }
                        //}
                        //else
                        {
                            getMatInfos.Add(getItems[i]);
                        }
                    }
                }
            }
            return getMatInfos;
        }
        public enum EquipColorType
        {
@@ -1673,177 +967,11 @@
            Purple = 3,
            Orange = 4,
            Red = 5,
            //后续IL开发添加预设
            default1,
            default2,
            default3,
            default4,
            All = 10,
        }
        public class DecomposeGetMatInfo
        {
            public int ItemID;
            public int Count;
            public int IsSuite;
            public string UserData;
        }
        #endregion
        #region 丹药逻辑处理
        // private int CompareMakeDrug(AttrFruitConfig start, AttrFruitConfig end)
        // {
        //     ItemConfig configS = ItemConfig.Get(start.ID);
        //     ItemConfig configE = ItemConfig.Get(end.ID);
        //     if (configS.RealmLimit.CompareTo(configE.RealmLimit) != 0)
        //     {
        //         return configS.RealmLimit.CompareTo(configE.RealmLimit);
        //     }
        //     if (configS.LV.CompareTo(configE.LV) != 0)
        //     {
        //         return configS.LV.CompareTo(configE.LV);
        //     }
        //     int x = makeDruglist.IndexOf(start);
        //     int y = makeDruglist.IndexOf(end);
        //     if (x.CompareTo(y) != 0) x.CompareTo(y);
        //     return 0;
        // }
        // List<AttrFruitConfig> drugOrderlist = new List<AttrFruitConfig>();
        // List<AttrFruitConfig> haveDruglist = new List<AttrFruitConfig>();
        // public List<AttrFruitConfig> GetDrugOrderByCnt()
        // {
        //     drugOrderlist.Clear();
        //     haveDruglist.Clear();
        //     drugOrderlist.AddRange(makeDruglist);
        //     drugOrderlist.Sort(CompareByIsHave);
        //     for (int i = 0; i < drugOrderlist.Count; i++)
        //     {
        //         if (IsHaveDrugUse(drugOrderlist[i]))
        //         {
        //             haveDruglist.Add(drugOrderlist[i]);
        //         }
        //     }
        //     haveDruglist.Sort(CompareMakeDrug);
        //     for (int i = 0; i < haveDruglist.Count; i++)
        //     {
        //         drugOrderlist[i] = haveDruglist[i];
        //     }
        //     return drugOrderlist;
        // }
        public bool CheckIsDrugById(int itemId)
        {
            // for (int i = 0; i < makeDruglist.Count; i++)
            // {
            //     if (makeDruglist[i].ID == itemId)
            //     {
            //         return true;
            //     }
            // }
            return false;
        }
        // public int CompareByIsHave(AttrFruitConfig start, AttrFruitConfig end)
        // {
        //     bool isHaveStart = IsHaveDrugUse(start);
        //     bool isHaveEnd = IsHaveDrugUse(end);
        //     if (isHaveStart.CompareTo(isHaveEnd) != 0) return -isHaveStart.CompareTo(isHaveEnd);
        //     //isHaveStart = IsHaveDrugRecycle(start);
        //     //isHaveEnd = IsHaveDrugRecycle(end);
        //     //if (isHaveStart.CompareTo(isHaveEnd) != 0) return -isHaveStart.CompareTo(isHaveEnd);
        //     isHaveStart = GetItemCountByID(PackType.Item, start.ID) > 0 ? true : false;
        //     isHaveEnd = GetItemCountByID(PackType.Item, end.ID) > 0 ? true : false;
        //     if (isHaveStart.CompareTo(isHaveEnd) != 0) return isHaveStart.CompareTo(isHaveEnd);
        //     isHaveStart = IsReachMaxUseDrug(start);
        //     isHaveEnd = IsReachMaxUseDrug(end);
        //     if (isHaveStart.CompareTo(isHaveEnd) != 0) return isHaveStart.CompareTo(isHaveEnd);
        //     int x = makeDruglist.IndexOf(start);
        //     int y = makeDruglist.IndexOf(end);
        //     if (x.CompareTo(y) != 0) return x.CompareTo(y);
        //     return 0;
        // }
        // public bool IsHaveDrugUse(AttrFruitConfig fruitConfig)
        // {
        //     if (!IsReachMaxUseDrug(fruitConfig))
        //     {
        //         return GetItemCountByID(PackType.Item, fruitConfig.ID) > 0 ? true : false;
        //     }
        //     return false;
        // }
        // public bool IsHaveDrugRecycle(AttrFruitConfig fruitConfig)
        // {
        //     if (IsReachMaxUseDrug(fruitConfig))
        //     {
        //         return GetItemCountByID(PackType.Item, fruitConfig.ID) > 0 ? true : false;
        //     }
        //     return false;
        // }
        // public bool IsReachMaxUseDrug(AttrFruitConfig fruitConfig)
        // {
        //     if (fruitConfig == null)
        //     {
        //         return false;
        //     }
        //     if (fruitConfig.FuncID == 2)
        //     {
        //         AlchemyDrugUseLimit drugUseLimit;
        //         if (alchemyModel.TryGetAlchemyUseLimit(fruitConfig.ID, out drugUseLimit))
        //         {
        //             return drugUseLimit.IsReachLimit();
        //         }
        //     }
        //     int useNum = GetItemTotalUsedTimes(fruitConfig.ID);
        //     if (useNum >= fruitConfig.basicUseLimit)
        //     {
        //         return true;
        //     }
        //     return false;
        // }
        #endregion
        //获取背包中的一件可拍卖物品 优先其他职业
        public string GetAuctionEquip()
        {
            var itemPackage = GetSinglePack(PackType.Item);
            var allItems = itemPackage.GetAllItems();
            var guid = string.Empty;
            List<string> guidList = new List<string>();
            foreach (var item in allItems.Values)
            {
                var isAuction = item.isAuction;
                if (isAuction && ItemLogicUtility.Instance.IsRealmEquip(item.itemId))
                {
                    if (!ItemLogicUtility.Instance.IsJobCompatibleItem(item.itemId))
                    {
                        return item.guid;
                    }
                    else
                    {
                        if (guid != string.Empty)
                            continue;
                        guid = item.guid;
                    }
                }
            }
            return guid;
        }
        public void ReceiveAwardNotify(HA801_tagMCGiveAwardInfo netPack)
        {
Main/System/KnapSack/VirtualPackManager.cs
@@ -60,8 +60,7 @@
    void ParseConfig()
    {
        var funcConfig = FuncConfigConfig.Get("RunePackageNum");
        virtualPackCapacityDict.Add(PackType.RunePack, int.Parse(funcConfig.Numerical1));
        // virtualPackCapacityDict.Add(PackType.RunePack, int.Parse(funcConfig.Numerical1));
    }
    public bool IsVirtualPack(PackType packType)
Main/System/Main/HomeWin.cs
New file
@@ -0,0 +1,62 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 游戏主界面
/// </summary>
public class HomeWin : UIBase
{
    /// <summary>
    /// 初始化组件
    /// </summary>
    protected override void InitComponent()
    {
    }
    public override void Refresh()
    {
        UpdatePlayerInfo();
        UpdateCurrency();
    }
    protected override void OnPreOpen()
    {
        Refresh();
    }
    // protected override void OnPreClose()
    // {
    // }
    /// <summary>
    /// 更新玩家信息
    /// </summary>
    private void UpdatePlayerInfo()
    {
        // 从玩家数据中获取信息并更新UI
        // 例如:
        // playerNameText.text = PlayerData.Instance.Name;
        // playerLevelText.text = "Lv." + PlayerData.Instance.Level;
        // powerText.text = PlayerData.Instance.Power.ToString();
        // expSlider.value = PlayerData.Instance.ExpRatio;
    }
    /// <summary>
    /// 更新货币信息
    /// </summary>
    private void UpdateCurrency()
    {
        // 从玩家数据中获取货币信息并更新UI
        // 例如:
        // goldText.text = PlayerData.Instance.Gold.ToString();
        // diamondText.text = PlayerData.Instance.Diamond.ToString();
        // energyText.text = PlayerData.Instance.Energy + "/" + PlayerData.Instance.MaxEnergy;
    }
}
Main/System/Main/HomeWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 428e25b7deff7474e8c611d41bbbaf7b
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Main/MainWin.cs
@@ -4,16 +4,13 @@
using UnityEngine.UI;
/// <summary>
/// 游戏主界面
/// 游戏主界面底部功能按钮
/// </summary>
public class MainWin : UIBase
{
    public GameObject windowBackground;
    // 底部按钮组
    public Button[] bottomTabButtons;
    private GameObject[] bottomTabEffects;
    
    // 当前选中的底部标签索引
    private int currentTabIndex = 0;
@@ -48,55 +45,25 @@
    }
    
    protected override void OnOpen()
    public override void Refresh()
    {
        base.OnOpen();
        UpdateCurrency();
    }
    protected override void OnPreOpen()
    {
        // 默认选中第一个标签
        SelectBottomTab(0);
        // 刷新UI
        Refresh();
    }
    public override void Refresh()
    {
        UpdatePlayerInfo();
        UpdateCurrency();
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        bottomTabEffects = new GameObject[bottomTabButtons.Length];
        for (int i = 0; i < bottomTabButtons.Length; i++)
        {
            bottomTabEffects[i] = PlayUIEffect(1004, bottomTabButtons[i].transform, false);
        }
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        foreach (var effectGO in bottomTabEffects)
        {
            DestroyImmediate(effectGO);
        }
        bottomTabEffects = null;
    }
    // protected override void OnPreClose()
    // {
    // }
    
    /// <summary>
    /// 更新玩家信息
    /// </summary>
    private void UpdatePlayerInfo()
    {
        // 从玩家数据中获取信息并更新UI
        // 例如:
        // playerNameText.text = PlayerData.Instance.Name;
        // playerLevelText.text = "Lv." + PlayerData.Instance.Level;
        // powerText.text = PlayerData.Instance.Power.ToString();
        // expSlider.value = PlayerData.Instance.ExpRatio;
    }
    
    /// <summary>
    /// 更新货币信息
@@ -115,6 +82,13 @@
    /// </summary>
    private void OnBottomTabButtonClicked(int index)
    {
        if (index == 0)
        {
            if (currentSubUI != null && currentSubUI.name == "HomeWin")
            {
                //打开主界面的情况下再点击按钮,执行攻击逻辑
            }
        }
        SelectBottomTab(index);
    }
    
@@ -150,12 +124,8 @@
        // 遍历所有按钮,设置选中状态
        for (int i = 0; i < bottomTabButtons.Length; i++)
        {
            // 这里可以根据是否选中设置按钮的视觉效果
            // 例如:改变图片、颜色等
            // bottomTabButtons[i].GetComponent<Image>().color = (i == currentTabIndex) ? Color.blue : Color.white;
            // 或者激活/禁用选中图标
            bottomTabButtons[i].image.color = (i == currentTabIndex) ?  Color.white : Color.gray;
            // bottomTabButtons[i].image.color = (i == currentTabIndex) ?  Color.white : Color.gray;
        }
    }
    
@@ -179,34 +149,29 @@
    {
        Debug.Log("打开子界面 : " + index);
        // 主城 阵容 同盟 福利 冒险
        windowBackground.SetActive(index != 4);
        // 主城 内政 武将 挑战 公会
        //根据索引打开不同的界面
         switch (index)
        {
            case 0:
                // 例如:打开主页界面
                // currentSubUI = UIManager.Instance.OpenUI<HomeUI>();
                // 打开主页界面
                currentSubUI = UIManager.Instance.OpenWindow<HomeWin>();
                Debug.Log("打开主城界面");
                break;
            case 1:
                // 例如:打开角色界面
                // currentSubUI = UIManager.Instance.OpenUI<CharacterUI>();
                Debug.Log("打开阵容界面");
                break;
            case 2:
                // 例如:打开背包界面
                // currentSubUI = UIManager.Instance.OpenUI<BagUI>();
                Debug.Log("打开同盟界面");
                break;
            case 3:
                // 例如:打开任务界面
                // currentSubUI = UIManager.Instance.OpenUI<QuestUI>();
                Debug.Log("打开福利界面");
                break;
            case 4:
                // 例如:打开设置界面
                currentSubUI = UIManager.Instance.OpenWindow<PlaceWin>();
                //currentSubUI = UIManager.Instance.OpenWindow<PlaceWin>();
                Debug.Log("打开冒险界面");
                break;
            default:
Main/System/MainInterfacePanel.meta
File was deleted
Main/System/MainInterfacePanel/MainRedDot.cs
File was deleted
Main/System/Recharge/RechargeManager.cs
@@ -217,11 +217,6 @@
#endif
            }
        }
        var _funcConfig = FuncConfigConfig.Get("ChargeDelayTime");
        m_CTGDelayTime = int.Parse(_funcConfig.Numerical1);
        m_CTGLimitDelayTime = int.Parse(_funcConfig.Numerical2);
        _funcConfig = FuncConfigConfig.Get("FirstGoldMobs");
        firstRechargeWeapon = ConfigParse.GetDic<int, int>(_funcConfig.Numerical1);
    }
    public List<int> GetCTGConfigs(string _appid)
@@ -305,7 +300,6 @@
    
    #region 充值
    public Dictionary<int, int> firstRechargeWeapon { get; private set; }
    public Dictionary<int, List<Item>> m_RechargeGainItemDict { get; private set; }
    private Dictionary<int, RechargeCount> m_RechargeCountDict = new Dictionary<int, RechargeCount>();
    Dictionary<string, List<OrderInfoConfig>> m_OrderInfoDict = new Dictionary<string, List<OrderInfoConfig>>();
Main/System/Redpoint/MainRedDot.cs
New file
@@ -0,0 +1,115 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, November 16, 2017
//--------------------------------------------------------
public class MainRedDot : Singleton<MainRedDot>
{
    //主界面
    public const int MainAffairsRedpoint = 1;   //内政
    public Redpoint redpointAffairs = new Redpoint(MainAffairsRedpoint);
    public const int MainHerosRedpoint = 2;     //武将
    public Redpoint redpointHeros = new Redpoint(MainHerosRedpoint);
    public const int MainChallengeRedpoint = 3; //挑战
    public Redpoint redpointChallenge = new Redpoint(MainChallengeRedpoint);
    public const int MainGuildRedpoint = 4;     //公会
    public Redpoint redpointGuild = new Redpoint(MainGuildRedpoint);
    public const int RedPoint_key = 11;
    public const int FAIRY_REDPOINT_KEY1 = 107;
    public const int RedPoint_UpFuncBase = 12;
    private Redpoint rightTopRedpint = new Redpoint(RedPoint_UpFuncBase);
    private Redpoint redPointStrePrentOne = new Redpoint(RedPoint_key);
    //public Redpoint jadeDynastyRedpoint = new Redpoint(1, 117);
    #region 邮件红点
    public const int RedPoint_MainMailKey = 24;
    public const int RedPoint_MailFuncKey = 2401;
    public Redpoint redpointMainMail = new Redpoint(RedPoint_MainMailKey);
    public Redpoint redpointMailFunc = new Redpoint(RedPoint_MainMailKey, RedPoint_MailFuncKey);
    #endregion
    #region 好友红点
    public const int RedPoint_FriendQuestKey = 26;
    public const int RedPoint_FriendChatKey = 25; //好友
    public Redpoint redpointFriendQuest = new Redpoint(RedPoint_FriendQuestKey);
    public Redpoint redPointFriendChat = new Redpoint(RedPoint_FriendChatKey);
    #endregion
    #region 背包红点
    public const int RedPoint_MainPackKey = 102;
    public const int RedPoint_BagFuncKey = 10201;
    public const int RedPoint_DepotFuncKey = 10204;
    public Redpoint redPointMainPack = new Redpoint(RedPoint_MainPackKey);
    public Redpoint redPointBagFunc = new Redpoint(RedPoint_MainPackKey, RedPoint_BagFuncKey);
    public Redpoint redPointDepotFunc = new Redpoint(RedPoint_MainPackKey, RedPoint_DepotFuncKey);
    #endregion
    #region 仙盟公用红点
    public const int FAIRY_REDPOINT_KEY2 = 10701;
    public Redpoint fairyLaunch = new Redpoint(RedPoint_key, FAIRY_REDPOINT_KEY1);
    public Redpoint fairyBaseFuncRedPoint = new Redpoint(FAIRY_REDPOINT_KEY1, FAIRY_REDPOINT_KEY2);
    #endregion
    #region 仙盟商店红点
    public const int FAIRYStore_REDPOINT_KEY3 = 1070106;
    public Redpoint fairyStoreRedPoint = new Redpoint(FAIRY_REDPOINT_KEY2, FAIRYStore_REDPOINT_KEY3);
    #endregion
    #region 开服活动红点
    public const int REDPOINT_OPENSERVER = 209;
    public Redpoint openServerRedpoint = new Redpoint(REDPOINT_OPENSERVER);
    //280 开头用于节日祝福
    public const int RedPoint_HolidayWishes = 280;
    public Redpoint holidayWishesRedpoint = new Redpoint(RedPoint_HolidayWishes);
    #endregion
    public const int REDPOINT_OPENRANK = 258;
    public Redpoint openRankRedpoint = new Redpoint(REDPOINT_OPENRANK);
    #region 仙盟活动红点
    public readonly Redpoint fairyActivityRedpoint = new Redpoint(218);
    #endregion
    public static int DailySpecialsRedpoint = 439;  //每日特惠入口红点
    public static int BlessedLandRedpoint = 444; //福地红点
    public const int CustomizedGiftRedpoint = 448; //自选礼包
    public const int LoginZhanLingRedpoint = 449; //登录战令
    public const int PhantasmPavilionRepoint = 459; //幻境阁
    public const int FairyEmbleManageRepoint = 462;//仙盟徽章管理入口红点
    public const int CycleHallRepoint = 463; //轮回殿
    public const int YunShiRepoint = 464; //运势
    public const int LianQiRepoint = 465; //仙匠大会
    public const int FairySiegeRepoint = 466; //仙盟攻城战
    public const int MailRepoint = 467; //邮箱
    public void Register()
    {
    }
}
Main/System/Redpoint/MainRedDot.cs.meta
Main/System/Redpoint/RedpointBehaviour.cs
@@ -6,114 +6,119 @@
using System.Collections;
using UnityEngine.UI;
    public class RedpointBehaviour : MonoBehaviour
    {
        [SerializeField]
        int m_RedpointId;
        public int redpointId {
            get {
                return m_RedpointId;
            }
            set {
                m_RedpointId = value;
                UpdateRedpoint(value);
            }
public class RedpointBehaviour : MonoBehaviour
{
    [SerializeField]
    int m_RedpointId;
    public int redpointId {
        get {
            return m_RedpointId;
        }
        [SerializeField]
        Transform m_SimpleRedpoint;
        public Transform simpleRedpoint {
            get {
                return m_SimpleRedpoint;
            }
        set {
            m_RedpointId = value;
            UpdateRedpoint(value);
        }
        [SerializeField]
        Transform m_QuantityRedpoint;
        public Transform quantityRedpoint {
            get {
                return m_QuantityRedpoint;
            }
        }
        [SerializeField]
        Text m_Quantity;
        public Text quantityText {
            get {
                return m_Quantity;
            }
        }
        [SerializeField]
        Transform m_FullRedpoint;
        [SerializeField]
        Transform m_GetRewardRedpoint;
        bool m_Show = false;
        public bool show {
            get { return m_Show; }
            set {
                if (m_Show != value)
                {
                    m_Show = value;
                    this.SetActive(m_Show);
                }
            }
        }
        private void Awake()
        {
            UpdateRedpoint(redpointId);
            RedpointCenter.Instance.redpointValueChangeEvent += UpdateRedpoint;
        }
        private void OnDestroy()
        {
            RedpointCenter.Instance.redpointValueChangeEvent -= UpdateRedpoint;
        }
        void UpdateRedpoint(int _id)
        {
            if (_id != redpointId)
            {
                return;
            }
            var state = RedpointCenter.Instance.GetRedpointState(redpointId);
            if (m_SimpleRedpoint != null)
            {
                m_SimpleRedpoint.SetActive(state == RedPointState.Simple);
            }
            if (m_QuantityRedpoint != null)
            {
                m_QuantityRedpoint.SetActive(state == RedPointState.Quantity);
            }
            if (m_Quantity != null)
            {
                m_Quantity.SetActive(state == RedPointState.Quantity);
            }
            if (m_FullRedpoint != null)
            {
                m_FullRedpoint.SetActive(state == RedPointState.Full);
            }
            if (m_GetRewardRedpoint != null)
            {
                m_GetRewardRedpoint.SetActive(state == RedPointState.GetReward);
            }
            if (state == RedPointState.Quantity && m_Quantity != null)
            {
                var count = RedpointCenter.Instance.GetRedpointCount(redpointId);
                m_Quantity.text = count > 9 ? "N" : count >= 1 ? count.ToString() : "";
            }
        }
    }
    [SerializeField]
    Transform m_SimpleRedpoint;
    public Transform simpleRedpoint {
        get {
            return m_SimpleRedpoint;
        }
    }
    [SerializeField]
    Transform m_QuantityRedpoint;
    public Transform quantityRedpoint {
        get {
            return m_QuantityRedpoint;
        }
    }
    [SerializeField]
    Text m_Quantity;
    public Text quantityText {
        get {
            return m_Quantity;
        }
    }
    [SerializeField]
    Transform m_FullRedpoint;
    [SerializeField]
    Transform m_GetRewardRedpoint;
    [SerializeField] Transform m_NewRedpoint;
    bool m_Show = false;
    public bool show {
        get { return m_Show; }
        set {
            if (m_Show != value)
            {
                m_Show = value;
                this.SetActive(m_Show);
            }
        }
    }
    private void Awake()
    {
        UpdateRedpoint(redpointId);
        RedpointCenter.Instance.redpointValueChangeEvent += UpdateRedpoint;
    }
    private void OnDestroy()
    {
        RedpointCenter.Instance.redpointValueChangeEvent -= UpdateRedpoint;
    }
    void UpdateRedpoint(int _id)
    {
        if (_id != redpointId)
        {
            return;
        }
        var state = RedpointCenter.Instance.GetRedpointState(redpointId);
        if (m_SimpleRedpoint != null)
        {
            m_SimpleRedpoint.SetActive(state == RedPointState.Simple);
        }
        if (m_QuantityRedpoint != null)
        {
            m_QuantityRedpoint.SetActive(state == RedPointState.Quantity);
        }
        if (m_Quantity != null)
        {
            m_Quantity.SetActive(state == RedPointState.Quantity);
        }
        if (m_FullRedpoint != null)
        {
            m_FullRedpoint.SetActive(state == RedPointState.Full);
        }
        if (m_GetRewardRedpoint != null)
        {
            m_GetRewardRedpoint.SetActive(state == RedPointState.GetReward);
        }
        if (state == RedPointState.Quantity && m_Quantity != null)
        {
            var count = RedpointCenter.Instance.GetRedpointCount(redpointId);
            m_Quantity.text = count > 9 ? "N" : count >= 1 ? count.ToString() : "";
        }
        if (m_NewRedpoint != null)
        {
            m_NewRedpoint.SetActive(state == RedPointState.New);
        }
    }
}
Main/System/Redpoint/RedpointCenter.cs
@@ -3,128 +3,128 @@
using UnityEngine;
using System;
    public class RedpointCenter : Singleton<RedpointCenter>
public class RedpointCenter : Singleton<RedpointCenter>
{
    public event Action<int> redpointValueChangeEvent;
    Dictionary<int, Redpoint> redpoints = new Dictionary<int, Redpoint>();
    Dictionary<int, List<int>> parentChildren = new Dictionary<int, List<int>>();
    public RedpointCenter()
    {
        public event Action<int> redpointValueChangeEvent;
        Dictionary<int, Redpoint> redpoints = new Dictionary<int, Redpoint>();
        Dictionary<int, List<int>> parentChildren = new Dictionary<int, List<int>>();
        public RedpointCenter()
        {
        }
        public void ResetAllRedpointState()
        {
            foreach (var redpoint in redpoints.Values)
            {
                redpoint.state = RedPointState.None;
            }
        }
        public void Register(Redpoint _redpoint)
        {
            var id = _redpoint.id;
            if (redpoints.ContainsKey(id))
            {
                Debug.LogErrorFormat("重复注册红点:id->{0}", id);
            }
            redpoints[id] = _redpoint;
            var parentId = _redpoint.parent;
            if (parentId > 0)
            {
                List<int> children = null;
                if (!parentChildren.TryGetValue(parentId, out children))
                {
                    parentChildren[parentId] = children = new List<int>();
                }
                if (!children.Contains(id))
                {
                    children.Add(id);
                }
            }
        }
        public void Report(Redpoint _redpoint)
        {
            var parentId = _redpoint.parent;
            if (redpointValueChangeEvent != null)
            {
                redpointValueChangeEvent(_redpoint.id);
            }
            if (parentId > 0)
            {
                TestParentValue(_redpoint.parent);
            }
        }
        public void ReportWithoutParent(Redpoint _redpoint)
        {
            if (redpointValueChangeEvent != null)
            {
                redpointValueChangeEvent(_redpoint.id);
            }
        }
        public RedPointState GetRedpointState(int _id)
        {
            Redpoint redpoint = null;
            if (this.redpoints.TryGetValue(_id, out redpoint))
            {
                return redpoint.state;
            }
            else
            {
                return RedPointState.None;
            }
        }
        public int GetRedpointCount(int _id)
        {
            Redpoint redpoint = null;
            if (this.redpoints.TryGetValue(_id, out redpoint))
            {
                return redpoint.count;
            }
            else
            {
                return 0;
            }
        }
        void TestParentValue(int _parentId)
        {
            List<int> children = null;
            Redpoint parent = null;
            if (redpoints.TryGetValue(_parentId, out parent) && parentChildren.TryGetValue(_parentId, out children))
            {
                var parentState = RedPointState.None;
                for (int i = 0; i < children.Count; i++)
                {
                    Redpoint child = null;
                    if (redpoints.TryGetValue(children[i], out child))
                    {
                        if (child.state > parentState)
                        {
                            parentState = child.state;
                        }
                    }
                    if (parentState == RedPointState.Full)
                    {
                        break;
                    }
                }
                parent.state = parentState;
            }
        }
    }
    public void ResetAllRedpointState()
    {
        foreach (var redpoint in redpoints.Values)
        {
            redpoint.state = RedPointState.None;
        }
    }
    public void Register(Redpoint _redpoint)
    {
        var id = _redpoint.id;
        if (redpoints.ContainsKey(id))
        {
            Debug.LogErrorFormat("重复注册红点:id->{0}", id);
        }
        redpoints[id] = _redpoint;
        var parentId = _redpoint.parent;
        if (parentId > 0)
        {
            List<int> children = null;
            if (!parentChildren.TryGetValue(parentId, out children))
            {
                parentChildren[parentId] = children = new List<int>();
            }
            if (!children.Contains(id))
            {
                children.Add(id);
            }
        }
    }
    public void Report(Redpoint _redpoint)
    {
        var parentId = _redpoint.parent;
        if (redpointValueChangeEvent != null)
        {
            redpointValueChangeEvent(_redpoint.id);
        }
        if (parentId > 0)
        {
            TestParentValue(_redpoint.parent);
        }
    }
    public void ReportWithoutParent(Redpoint _redpoint)
    {
        if (redpointValueChangeEvent != null)
        {
            redpointValueChangeEvent(_redpoint.id);
        }
    }
    public RedPointState GetRedpointState(int _id)
    {
        Redpoint redpoint = null;
        if (this.redpoints.TryGetValue(_id, out redpoint))
        {
            return redpoint.state;
        }
        else
        {
            return RedPointState.None;
        }
    }
    public int GetRedpointCount(int _id)
    {
        Redpoint redpoint = null;
        if (this.redpoints.TryGetValue(_id, out redpoint))
        {
            return redpoint.count;
        }
        else
        {
            return 0;
        }
    }
    void TestParentValue(int _parentId)
    {
        List<int> children = null;
        Redpoint parent = null;
        if (redpoints.TryGetValue(_parentId, out parent) && parentChildren.TryGetValue(_parentId, out children))
        {
            var parentState = RedPointState.None;
            for (int i = 0; i < children.Count; i++)
            {
                Redpoint child = null;
                if (redpoints.TryGetValue(children[i], out child))
                {
                    if (child.state > parentState)
                    {
                        parentState = child.state;
                    }
                }
                if (parentState == RedPointState.Full)
                {
                    break;
                }
            }
            parent.state = parentState;
        }
    }
}
Main/System/Store/StoreModel.cs
@@ -28,13 +28,11 @@
public class StoreModel : GameSystemManager<StoreModel>
{
    public int[] normalBuyCoinsTypes { get; private set; }
    public string UNIONSTORESAVE_KEY { get; private set; }
    public string MUSTBUYSAVE_KEY { get; private set; }
    public string StoreEffectRecord_Key { get; private set; }
    public Dictionary<int, Dictionary<int, int>> JobReplaceIdDict = new Dictionary<int, Dictionary<int, int>>();
    public Dictionary<int, string> resetTimeDict { get; private set; }
    public Dictionary<int, int> showCoinsUIDict { get; private set; }
    public Dictionary<int, int> showCoinUIDict { get; private set; }
    public int storeTrailerLv { get; private set; }
@@ -72,15 +70,6 @@
        ParseFuncConfig();
        ParseStoreConfig();
        SetShopRedpoint();
        FuncConfigConfig buyItemHinit = FuncConfigConfig.Get("BuyItemHinit");
        normalBuyCoinsTypes = ConfigParse.GetMultipleStr<int>(buyItemHinit.Numerical1);
        FuncConfigConfig restTimeConfig = FuncConfigConfig.Get("RefreshText");
        resetTimeDict = ConfigParse.GetDic<int, string>(restTimeConfig.Numerical1);
        FuncConfigConfig mallCurrency = FuncConfigConfig.Get("MallCurrency");
        showCoinsUIDict = ConfigParse.GetDic<int, int>(mallCurrency.Numerical1);
        FuncConfigConfig mallPush = FuncConfigConfig.Get("MallPush");
        storeTrailerLv = int.Parse(mallPush.Numerical1);
    }
    public void OnBeforePlayerDataInitialize()
@@ -677,19 +666,7 @@
    }
    #endregion
    public string GetStoreRefreshTimeByType(int type)
    {
        if (resetTimeDict == null || !resetTimeDict.ContainsKey(type)) return string.Empty;
        switch (type)
        {
            case 7:
                int willRefreshTime = GetWillRefreshTime();
                return Language.Get(resetTimeDict[type], UIHelper.AppendColor(TextColType.Green, TimeUtility.SecondsToHMS(willRefreshTime), true));
            default:
                return Language.Get(resetTimeDict[type]);
        }
    }
    public string GetMysteryStoreRefreshTime()
    {
@@ -1056,28 +1033,15 @@
    public void GetBuyResult(HA811_tagMCShoppingResult result)
    {
        Debug.Log("GetBuyResult");
        //Debug.Log("GetBuyResult");
        StoreConfig tagStore = StoreConfig.Get((int)result.ItemIndex);
        if (tagStore != null)
        {
            ItemConfig chinModel = ItemConfig.Get(GetReplaceId(tagStore.ID, tagStore.ItemID));
            if (!normalBuyCoinsTypes.Contains(tagStore.MoneyType))
            if (tagStore.RemindSuccess == 0)
            {
                if (tagStore.RemindSuccess == 0)
                {
                    return;
                }
                // BuySuccessModel.Instance.SetBuySuccessModel(chinModel.ID, (int)result.ItemCnt);
                // if (!WindowCenter.Instance.IsOpen<BuySuccessWin>())
                // {
                //     WindowCenter.Instance.Open<BuySuccessWin>();
                // }
            }
            else
            {
                float costMoney = tagStore.MoneyNumber;
                SysNotifyMgr.Instance.ShowTip("BuyItemHinit", costMoney, tagStore.MoneyType, chinModel.ItemName);
                return;
            }
            if (RefreshBuyResultEvent != null)
Main/System/Task/TaskManager.cs
@@ -170,36 +170,36 @@
        // StageLoad.Instance.onStageLoadFinish += onStageLoadFinish;
        // NPCInteractProcessor.s_NpcInteractEvent += NpcInterac;
        string BossDelayTime = FuncConfigConfig.Get("BossDelayTime").Numerical1;
        BossDelayTimeint = float.Parse(BossDelayTime);
        var Task_Auto = FuncConfigConfig.Get("TaskAuto");
        TaskAutoLv = int.Parse(Task_Auto.Numerical1);
        TaskAutoTime = int.Parse(Task_Auto.Numerical2);
        mainTaskAutoWaitTime = int.Parse(Task_Auto.Numerical3) / 1000f;
        var mapIds = ConfigParse.GetMultipleStr<int>(Task_Auto.Numerical4);
        if (mapIds != null && mapIds.Length > 0)
        {
            allowAutoTaskMapIds.AddRange(mapIds);
        }
        // string BossDelayTime = FuncConfigConfig.Get("BossDelayTime").Numerical1;
        // BossDelayTimeint = float.Parse(BossDelayTime);
        // var Task_Auto = FuncConfigConfig.Get("TaskAuto");
        // TaskAutoLv = int.Parse(Task_Auto.Numerical1);
        // TaskAutoTime = int.Parse(Task_Auto.Numerical2);
        // mainTaskAutoWaitTime = int.Parse(Task_Auto.Numerical3) / 1000f;
        // var mapIds = ConfigParse.GetMultipleStr<int>(Task_Auto.Numerical4);
        // if (mapIds != null && mapIds.Length > 0)
        // {
        //     allowAutoTaskMapIds.AddRange(mapIds);
        // }
        FairyAuTaskCount_Day = int.Parse(FuncConfigConfig.Get("RunTaskCnt").Numerical1.Split('|')[1].Split('_')[1]);
        FairyAuTaskCount_Round = int.Parse(FuncConfigConfig.Get("RunTaskCnt").Numerical2.Split('|')[1].Split('_')[1]);
        // FairyAuTaskCount_Day = int.Parse(FuncConfigConfig.Get("RunTaskCnt").Numerical1.Split('|')[1].Split('_')[1]);
        // FairyAuTaskCount_Round = int.Parse(FuncConfigConfig.Get("RunTaskCnt").Numerical2.Split('|')[1].Split('_')[1]);
        var cliengGuardConfig = FuncConfigConfig.Get("ClientGuardDungeon");
        clientGuardDugeonTask = int.Parse(cliengGuardConfig.Numerical5);
        // var cliengGuardConfig = FuncConfigConfig.Get("ClientGuardDungeon");
        // clientGuardDugeonTask = int.Parse(cliengGuardConfig.Numerical5);
        var funcConfig = FuncConfigConfig.Get("AutoSelectTaskChain");
        var taskChainArray = LitJson.JsonMapper.ToObject<int[][]>(funcConfig.Numerical1);
        if (taskChainArray != null)
        {
            for (int i = 0; i < taskChainArray.Length; i++)
            {
                priorityTaskChains.Add(taskChainArray[i]);
            }
        }
        var config = FuncConfigConfig.Get("NPCTalk");
        npcImages = JsonMapper.ToObject<List<int>>(config.Numerical1);
        playerJobImages = JsonMapper.ToObject<List<int>>(config.Numerical2);
        // var funcConfig = FuncConfigConfig.Get("AutoSelectTaskChain");
        // var taskChainArray = LitJson.JsonMapper.ToObject<int[][]>(funcConfig.Numerical1);
        // if (taskChainArray != null)
        // {
        //     for (int i = 0; i < taskChainArray.Length; i++)
        //     {
        //         priorityTaskChains.Add(taskChainArray[i]);
        //     }
        // }
        // var config = FuncConfigConfig.Get("NPCTalk");
        // npcImages = JsonMapper.ToObject<List<int>>(config.Numerical1);
        // playerJobImages = JsonMapper.ToObject<List<int>>(config.Numerical2);
    }
    public override void Release()
Main/Utility/EnumHelper.cs
@@ -1144,6 +1144,7 @@
    Quantity = 2,
    Full = 3,
    GetReward = 4,
    New = 5,
}