| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509 | using System.Collections.Generic;using UnityEngine;using GFGGame;using System;namespace GFGEditor{    /// <summary>    /// 物品扫描器:    /// 1.扫描获取途径,并填入物品表的获取途径字段    /// 2.扫描套装部件个数    /// </summary>    public class ItemApproachScanner    {        private delegate string GetApproachCall(int itemId);        public static void startScan()        {            ItemCfg[] dataArray = ItemCfgArray.Instance.dataArray;            GetApproachCall[] actions = new GetApproachCall[] { GetClothingShopApproach, GetStoryLevelApproach, GetClothingSyntheticApproach, GetSuitGuideApproach, GetSuitSyntheticApproach, GetClothingDecomposeApproach, CheckGiftBagApproach, CheckShopExchangeApproach, CheckClothingFosterApproach, CheckDailyTaskApproach, GetZhaiXingApproach };            Dictionary<SuitCfg, List<int>> suitDic = new Dictionary<SuitCfg, List<int>>();            int suitPartTotalCount = 0;            foreach (ItemCfg cfg in dataArray)            {                HandleSuitTable(cfg, suitDic);                HandleItemApproch(cfg, actions);            }            var globalCfg = GlobalCfgArray.globalCfg;            SQLiteHelper.Instance.OpenConnection();            try            {                //物品                foreach (ItemCfg cfg in dataArray)                {                    var names = new string[] { nameof(cfg.subType), nameof(cfg.itemType), nameof(cfg.approach) };                    var values = new string[] { "" + cfg.subType, "" + cfg.itemType, "" + cfg.approach };                    SQLiteHelper.Instance.UpdateValues(nameof(ItemCfgArray), names, values, nameof(cfg.id), cfg.id.ToString());                }                //套装                foreach (var a in suitDic)                {                    suitPartTotalCount += a.Value.Count;                    var names = new string[] { nameof(a.Key.partsArr).Replace("Arr", "") };                    var values = new string[] { string.Join(";", a.Value) };                    SQLiteHelper.Instance.UpdateValues(nameof(SuitCfgArray), names, values, nameof(a.Key.id), a.Key.id.ToString());                }                globalCfg.suitPartTotalCount = suitPartTotalCount;                UpdateGlobalCfg(globalCfg);            }            catch (Exception e)            {                ET.Log.Error(e.ToString());            }            finally            {                SQLiteHelper.Instance.CloseConnection();            }        }        private static void UpdateGlobalCfg(GlobalCfg globalCfg)        {            var names = new string[] { nameof(globalCfg.suitPartTotalCount) };            var values = new string[] { globalCfg.suitPartTotalCount.ToString() };            SQLiteHelper.Instance.UpdateValues(nameof(GlobalCfgArray), names, values, nameof(globalCfg.id), globalCfg.id.ToString());        }        private static void HandleSuitTable(ItemCfg itemCfg, Dictionary<SuitCfg, List<int>> suitDic)        {            if (itemCfg.suitId <= 0)            {                return;            }            var suitCfg = SuitCfgArray.Instance.GetCfg(itemCfg.suitId);            if (suitCfg == null)            {                return;            }            suitDic.TryGetValue(suitCfg, out var partsList);            if (partsList == null)            {                partsList = new List<int>();                suitDic[suitCfg] = partsList;            }            partsList.Add(itemCfg.id);        }        private static void HandleItemApproch(ItemCfg cfg, GetApproachCall[] actions)        {            List<string> approachs = new List<string>();            foreach (GetApproachCall action in actions)            {                string tempApproach = action(cfg.id);                if (tempApproach != null)                {                    approachs.Add(tempApproach);                }            }            if (approachs.Count > 0)            {                string approach = string.Join(";", approachs);                cfg.approach = approach;                if (approachs.Count > 5)                {                    Debug.LogFormat("物品{0}的获取途径为 {1}", cfg.name, approach);                }            }            else            {                if (cfg.id < 1000000 || cfg.id >= 2000000)                {                    if ((!cfg.name.Contains("原始") && !cfg.name.Contains("默认")) || cfg.id >= 1000000)                    {                        //Debug.LogErrorFormat("物品 {0} {1} 没有获取途径", cfg.id, cfg.name);                    }                }            }        }        /// <summary>        /// 尝试获取服装店产出途径        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string GetClothingShopApproach(int itemId)        {            ShopCfgClothingArray manager = ShopCfgClothingArray.Instance;            ShopCfg[] dataArray = manager.dataArray;            foreach (ShopCfg cfg in dataArray)            {                if (cfg.itemID == itemId)                {                    return "FU_ZHUANG_DIAN=" + ConstStoreId.CLOTHING_STORE_ID; ;                }            }            ShopCfg[] shopCfgCJs = ShopCfgCJArray.Instance.dataArray;            foreach (ShopCfg cfg in shopCfgCJs)            {                if (cfg.itemID == itemId)                {                    return "FU_ZHUANG_DIAN=" + ConstStoreId.LUCKY_BOX_STORE_ID;                }            }            ShopCfg[] shopCfgCJAs = ShopCfgCJAArray.Instance.dataArray;            foreach (ShopCfg cfg in shopCfgCJAs)            {                if (cfg.itemID == itemId)                {                    return "FU_ZHUANG_DIAN=" + ConstStoreId.LUCKY_BOX_ACTIVITY_STORE_ID;                }            }            ShopCfg[] shopCfgGallerys = ShopCfgGalleryArray.Instance.dataArray;            foreach (ShopCfg cfg in shopCfgGallerys)            {                if (cfg.itemID == itemId)                {                    return "FU_ZHUANG_DIAN=" + ConstStoreId.GALLERY_STORE_ID;                }            }            return null;        }        /// <summary>        /// 尝试获取服装分解产出途径        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string GetClothingDecomposeApproach(int itemId)        {            DecomposeCfgArray manager = DecomposeCfgArray.Instance;            DecomposeCfg[] dataArray = manager.dataArray;            foreach (DecomposeCfg cfg in dataArray)            {                for (int i = 0; i < cfg.itemsArr.Length; i++)                {                    if (cfg.itemsArr[i][0] == itemId)                    {                        return "FU_ZHUANG_DECOMPOSE";                    }                }            }            return null;        }        /// <summary>        /// 尝试获取摘星(抽奖)产出途径        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string GetZhaiXingApproach(int itemId)        {            LuckyBoxCfgArray manager = LuckyBoxCfgArray.Instance;            LuckyBoxCfg[] dataArray = manager.dataArray;            if (itemId == 10090)            {                Debug.Log("");            }            foreach (LuckyBoxCfg cfg in dataArray)            {                for (int i = 0; i < cfg.bonusArr.Length; i++)                {                    if (itemId == cfg.bonusArr[i][0])                    {                        return "ZHAI_XING";                    }                }                int dropId = cfg.dropId;                if (itemId == 10014)                {                    if (dropId == 11000008)                    {                        ET.Log.Debug("");                    }                    ET.Log.Debug("");                }                int[] _dropIds = { dropId };                bool approach = CheckItemInDropOut(itemId, _dropIds);                if (approach)                {                    return "ZHAI_XING";                }                // }            }            return null;        }        /// <summary>        /// 尝试获取剧情关卡产出途径        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string GetStoryLevelApproach(int itemId)        {            List<string> approachs = new List<string>();            StoryLevelCfgArray manager = StoryLevelCfgArray.Instance;            StoryLevelCfg[] dataArray = manager.dataArray;            foreach (StoryLevelCfg cfg in dataArray)            {                if (itemId == 3000041)                {                    ET.Log.Debug("");                }                if (itemId == 3002001)                {                }                bool result = CheckItemInBonus(itemId, cfg);                if (result)                {                    string approach = "JU_QING_GUAN_QIA=" + cfg.id;                    approachs.Add(approach);                }            }            if (approachs.Count > 0)            {                return string.Join(";", approachs);            }            return null;        }        /// <summary>        /// 尝试获取服装合成产出途径        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string GetClothingSyntheticApproach(int itemId)        {            var itemCfg = ItemCfgArray.Instance.GetCfg(itemId);            if (itemCfg == null)            {                return null;            }            if (itemCfg.suitId <= 0)            {                return null;            }            var suitCfg = SuitCfgArray.Instance.GetCfg(itemCfg.suitId);            if (suitCfg == null)            {                return null;            }            if (suitCfg.syntheticType <= 0)            {                return null;            }            return "FU_ZHUANG_HE_CHENG=" + suitCfg.id;        }        private static string GetSuitGuideApproach(int itemId)        {            SuitCfgArray manager = SuitCfgArray.Instance;            SuitCfg[] dataArray = manager.dataArray;            foreach (SuitCfg cfg in dataArray)            {                bool result = CheckItemInBonus(itemId, cfg.guideBoxBonusArr);                if (result)                {                    return "TAO_ZHUANG_TU_JIAN";                }            }            return null;        }        private static string GetSuitSyntheticApproach(int itemId)        {            var itemCfg = ItemCfgArray.Instance.GetCfg(itemId);            if (itemCfg == null)            {                return null;            }            if (itemCfg.suitId <= 0)            {                return null;            }            var suitCfg = SuitCfgArray.Instance.GetCfg(itemCfg.suitId);            if (suitCfg == null)            {                return null;            }            if (suitCfg.syntheticType <= 0)            {                return null;            }            bool result = CheckItemInBonus(itemId, suitCfg.syntheticBoxBonusArr);            if (result)            {                return "TAO_ZHUANG_HE_CHENG";            }            return null;        }        private static bool CheckItemInBonus(int itemId, StoryLevelCfg cfg)        {            if (cfg.fightID.Length > 0)            {                StoryFightCfgArray manager = StoryFightCfgArray.Instance;                StoryFightCfg storyFightCfg = manager.GetCfg(cfg.fightID);                List<int[]> a = new List<int[]>();                a.AddRange(cfg.bonusOnceArr);                a.AddRange(storyFightCfg.bonusBaseArr);                int[][] bonus = a.ToArray();                bool result = CheckItemInBonus(itemId, bonus);                if (storyFightCfg.id == "501")                {                    ET.Log.Debug("");                }                if (result)                {                    return true;                }                result = CheckItemInDropOut(itemId, storyFightCfg.bonusRandomArr);                return result;            }            return false;        }        private static bool CheckItemInBonus(int itemId, int[][] bosnu)        {            List<ItemData> aList = ItemUtil.CreateItemDataList(bosnu);            foreach (ItemData itemData in aList)            {                if (itemId == itemData.id)                {                    return true;                }            }            return false;        }        /// <summary>        /// 检测掉落表是否产出该物品        /// </summary>        /// <param name="itemId"></param>        /// <param name="dropIds"></param>        /// <returns></returns>        private static bool CheckItemInDropOut(int itemId, int[] dropIds)        {            List<ItemData> result = new List<ItemData>();            foreach (int dropId in dropIds)            {                DropOutCfgArray manager = DropOutCfgArray.Instance;                List<DropOutCfg> aList = manager.GetCfgsByid(dropId);                foreach (DropOutCfg dropOutCfg in aList)                {                    if (manager.GetCfgsByid(dropOutCfg.item).Count > 0)                    {                        int[] _dropIds = { dropOutCfg.item };                        if (CheckItemInDropOut(itemId, _dropIds))                        {                            return true;                        }                    }                    else                    {                        if (itemId == dropOutCfg.item)                        {                            return true;                        }                    }                }            }            return false;        }        /// <summary>        /// 检测商城-礼包是否产出该物品        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string CheckGiftBagApproach(int itemId)        {            GiftBagCfgArray manager = GiftBagCfgArray.Instance;            GiftBagCfg[] dataArray = manager.dataArray;            for (int i = 0; i < dataArray.Length; i++)            {                for (int j = 0; j < dataArray[i].itemsArr.Length; j++)                {                    if (dataArray[i].itemsArr[j][0] == itemId)                    {                        return ConstFunctionId.SHOP_GIFT_BAG + "=1";                    }                }            }            return null;        }        /// <summary>        /// 检测商城-道具兑换是否产出该物品        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string CheckShopExchangeApproach(int itemId)        {            ShopExchangeCfgArray manager = ShopExchangeCfgArray.Instance;            ShopExchangeCfg[] dataArray = manager.dataArray;            for (int i = 0; i < dataArray.Length; i++)            {                if (dataArray[i].itemId == itemId)                {                    return ConstFunctionId.SHOP_EXCHANGE + "=2";                }            }            return null;        }        /// <summary>        /// 检测服装升级是否产出该物品        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string CheckClothingFosterApproach(int itemId)        {            //培养            SuitFosterCfgArray manager = SuitFosterCfgArray.Instance;            SuitFosterCfg[] dataArray = manager.dataArray;            for (int i = 0; i < dataArray.Length; i++)            {                for (int j = 0; j < dataArray[i].rewardsArr.Length; j++)                {                    if (dataArray[i].rewardsArr[j][0] == itemId)                    {                        return ConstFunctionId.SUIT_FOSTER;                    }                }            }            //换新            SuitFosterListCfgArray manager1 = SuitFosterListCfgArray.Instance;            SuitFosterListCfg[] dataArray1 = manager1.dataArray;            for (int i = 0; i < dataArray1.Length; i++)            {                for (int j = 0; j < dataArray1[i].renewRewardsArr.Length; j++)                {                    if (dataArray1[i].renewRewardsArr[j][0] == itemId)                    {                        return ConstFunctionId.SUIT_FOSTER;                    }                }            }            return null;        }        /// <summary>        /// 检测每日任务是否产出该物品        /// </summary>        /// <param name="itemId"></param>        /// <returns></returns>        private static string CheckDailyTaskApproach(int itemId)        {            DailyActiveRewardCfgArray manager = DailyActiveRewardCfgArray.Instance;            DailyActiveRewardCfg[] dataArray = manager.dataArray;            for (int i = 0; i < dataArray.Length; i++)            {                for (int j = 0; j < dataArray[i].rewardsArr.Length; j++)                {                    if (dataArray[i].rewardsArr[j][0] == itemId)                    {                        return ConstFunctionId.DAILY_TASK;                    }                }            }            return null;        }    }}
 |