using System.Collections.Generic; using UnityEngine; using GFGGame; using System; namespace GFGEditor { /// /// 物品获取途径扫描器:扫描获取途径,并填入物品表的获取途径字段 /// public class ItemApproachScanner { private delegate string GetApproachCall(int itemId); public static void startScan() { ItemCfgArray itemManager = ItemCfgArray.Instance; if (itemManager != null) { ItemCfg[] dataArray = itemManager.dataArray; GetApproachCall[] actions = new GetApproachCall[] { GetClothingShopApproach, GetZhaiXingApproach, GetStoryLevelApproach, GetClothingSyntheticApproach, GetSuitGuideApproach, GetSuitSyntheticApproach }; foreach (ItemCfg cfg in dataArray) { //HandleItemType(cfg); HandleItemApproch(cfg, actions); } 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()); } } catch (Exception e) { ET.Log.Error(e.ToString()); } finally { SQLiteHelper.Instance.CloseConnection(); } } } private static void HandleItemApproch(ItemCfg cfg, GetApproachCall[] actions) { List approachs = new List(); 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); } } } } /// /// 尝试获取服装店产出途径 /// /// /// 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"; } } return null; } /// /// 尝试获取摘星(抽奖)产出途径 /// /// /// private static string GetZhaiXingApproach(int itemId) { LuckyBoxCfgArray manager = LuckyBoxCfgArray.Instance; LuckyBoxCfg[] dataArray = manager.dataArray; if (itemId == 10090) { Debug.Log(""); } foreach (LuckyBoxCfg cfg in dataArray) { int dropId = cfg.bonus; bool approach = CheckDropApproach(itemId, dropId); if (approach) { return "ZHAI_XING"; } } return null; } /// /// 尝试获取剧情关卡产出途径 /// /// /// private static string GetStoryLevelApproach(int itemId) { List approachs = new List(); StoryLevelCfgArray manager = StoryLevelCfgArray.Instance; StoryLevelCfg[] dataArray = manager.dataArray; foreach (StoryLevelCfg cfg in dataArray) { 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; } /// /// 尝试获取服装合成产出途径 /// /// /// private static string GetClothingSyntheticApproach(int itemId) { SuitSyntheticMenuCfgArray manager = SuitSyntheticMenuCfgArray.Instance; SuitSyntheticMenuCfg[] dataArray = manager.dataArray; foreach (SuitSyntheticMenuCfg cfg in dataArray) { int suitId = CheckItemInSuit(itemId, cfg.suitIds); if (suitId > 0) { return "FU_ZHUANG_HE_CHENG=" + suitId; } } return null; } private static string GetSuitGuideApproach(int itemId) { SuitCfgArray manager = SuitCfgArray.Instance; SuitCfg[] dataArray = manager.dataArray; foreach (SuitCfg cfg in dataArray) { bool result = CheckItemInBonus(itemId, cfg.boxBonusArr); if (result) { return "TAO_ZHUANG_TU_JIAN"; } } return null; } private static string GetSuitSyntheticApproach(int itemId) { SuitSyntheticCfgArray manager = SuitSyntheticCfgArray.Instance; SuitSyntheticCfg[] dataArray = manager.dataArray; foreach (SuitSyntheticCfg cfg in dataArray) { bool result = CheckItemInBonus(itemId, cfg.boxBonusArr); if (result) { return "TAO_ZHUANG_HE_CHENG"; } } return null; } /// /// 检测掉落表是否产出该物品 /// /// /// private static bool CheckDropApproach(int itemId, int dropId) { DropOutCfgArray manager = DropOutCfgArray.Instance; DropOutCfg[] dataArray = manager.GetCfgs(dropId); for (int i = 0; i < dataArray.Length; i++) { if (dataArray[i].item == itemId) { return true; } if (manager.GetCfgs(dataArray[i].item).Length > 0) { return CheckDropApproach(itemId, dataArray[i].item); } } return false; } private static bool CheckItemInBonus(int itemId, StoryLevelCfg cfg) { if (cfg.fightID.Length > 0) { StoryFightCfgArray manager = StoryFightCfgArray.Instance; StoryFightCfg storyFightCfg = manager.GetCfg(cfg.fightID); List a = new List(); a.AddRange(cfg.bonusOnceArr); a.AddRange(storyFightCfg.bonusBaseArr); int[][] bonus = a.ToArray(); bool result = CheckItemInBonus(itemId, bonus); if (result) { return true; } result = CheckItemInDropOut(itemId, storyFightCfg.bonusRandomArr); return result; } return false; } private static bool CheckItemInBonus(int itemId, int[][] bosnu) { List aList = ItemUtil.CreateItemDataList(bosnu); foreach (ItemData itemData in aList) { if (itemId == itemData.id) { return true; } } return false; } private static bool CheckItemInDropOut(int itemId, int[] dropIds) { List result = new List(); foreach (int dropId in dropIds) { DropOutCfgArray manager = DropOutCfgArray.Instance; DropOutCfg[] aList = manager.GetCfgs(dropId); foreach (DropOutCfg dropOutCfg in aList) { if (itemId == dropOutCfg.item) { return true; } } } return false; } private static int CheckItemInSuit(int ItemId, string suitIds) { if (suitIds.Length > 0) { string[] aArray = suitIds.Split(';'); foreach (string value in aArray) { int valueInt = int.Parse(value); bool result = CheckItemInSuit(ItemId, valueInt); if (result) { return valueInt; } } } return 0; } private static bool CheckItemInSuit(int ItemId, int suitId) { SuitCfgArray manager = SuitCfgArray.Instance; SuitCfg suitCfg = manager.GetCfg(suitId); int[] aArray = suitCfg.partsArr; foreach (int valueInt in aArray) { if (ItemId == valueInt) { return true; } } return false; } } }