using GFGGame; using UnityEngine; using System.Collections.Generic; using System; namespace GFGEditor { /// /// 配置表检查器:在有限范围内检查表格间关联的数据是否合法,并打印非法数据 /// public class ExcelChecker { public static void StartCheck() { CheckLuckyBoxCfg(); CheckBonusListCfg(); CheckDropOutCfg(); CheckStoryChapterCfg(); CheckStoryLevelCfg(); CheckStoryFightCfg(); CheckClothingShopCfg(); CheckSuitCfg(); CheckSuitGuideMenuCfg(); CheckItemCfg(); CheckCardStarCfg(); CheckCardStoryCfg(); } private static void CheckLuckyBoxCfg() { LuckyBoxCfgArray cfgArray = LuckyBoxCfgArray.Instance; LuckyBoxCfg[] dataArray = cfgArray.dataArray; foreach (LuckyBoxCfg boxCfg in dataArray) { CheckItemIdExist(boxCfg.costID, "抽奖LuckyBoxCfg.costID"); foreach (int valueInt in boxCfg.bonusShowArr) { CheckBonusExist(valueInt, "抽奖LuckyBoxCfg.bonusShow"); } } } private static void CheckBonusListCfg() { BonusListCfgArray cfgArray = BonusListCfgArray.Instance; BonusListCfg[] dataArray = cfgArray.dataArray; foreach (BonusListCfg cfg in dataArray) { foreach (int[] values in cfg.bonusListArr) { CheckItemIdExist(values[0], "抽奖BonusListCfg.bonusList"); } } } private static void CheckDropOutCfg() { DropOutCfgArray cfgArray = DropOutCfgArray.Instance; DropOutCfg[] dataArray = cfgArray.dataArray; foreach (DropOutCfg cfg in dataArray) { if (cfg.item >= 10000000)//掉落id { CheckDropOutExist(cfg.item, "掉落DropOutCfg.item"); } else { CheckItemIdExist(cfg.item, "掉落DropOutCfg.item"); } } } private static void CheckStoryChapterCfg() { StoryChapterCfgArray cfgArray = StoryChapterCfgArray.Instance; StoryChapterCfg[] dataArray = cfgArray.dataArray; foreach (StoryChapterCfg cfg in dataArray) { CheckItemsExist(cfg.bonus1Arr, "剧情副本StoryChapterCfg.bonus1"); CheckItemsExist(cfg.bonus2Arr, "剧情副本StoryChapterCfg.bonus2"); CheckItemsExist(cfg.bonus3Arr, "剧情副本StoryChapterCfg.bonus3"); } } private static void CheckStoryLevelCfg() { StoryLevelCfgArray cfgArray = StoryLevelCfgArray.Instance; StoryLevelCfg[] dataArray = cfgArray.dataArray; foreach (StoryLevelCfg cfg in dataArray) { CheckItemsExist(cfg.bonusOnceArr, "剧情副本StoryLevelCfg.bonusOnce"); CheckStoryDialogExist(cfg.storyStartID, "剧情副本StoryLevelCfg.storyStartID"); CheckStoryFightExist(cfg.fightID, "剧情副本StoryLevelCfg.fightID"); } } private static void CheckStoryFightCfg() { StoryFightCfgArray cfgArray = StoryFightCfgArray.Instance; StoryFightCfg[] dataArray = cfgArray.dataArray; foreach (StoryFightCfg cfg in dataArray) { if (cfg.needSuitId > 0) { CheckSuitExist(cfg.needSuitId, "剧情副本StoryFightCfg.needSuitId"); } else if (cfg.needItemId > 0) { CheckItemIdExist(cfg.needItemId, "剧情副本StoryFightCfg.needItemId"); } CheckItemsExist(cfg.bonusBaseArr, "剧情副本StoryFightCfg.bonusBase"); foreach (int value in cfg.bonusRandomArr) { CheckDropOutExist(value, "剧情副本StoryFightCfg.bonusRandom"); } } } private static void CheckClothingShopCfg() { ShopCfgClothingArray cfgArray = ShopCfgClothingArray.Instance; ShopCfg[] dataArray = cfgArray.dataArray; foreach (ShopCfg cfg in dataArray) { CheckItemIdExist(cfg.itemID, "商城ClothingShopCfg.itemID"); CheckItemIdExist(cfg.costID, "商城ClothingShopCfg.costID"); } } private static void CheckSuitCfg() { SuitCfgArray cfgArray = SuitCfgArray.Instance; SuitCfg[] dataArray = cfgArray.dataArray; foreach (SuitCfg suitCfg in dataArray) { CheckItemsExist(suitCfg.partsArr, "套装suitCfg.parts"); CheckItemsExist(suitCfg.partsOptionalArr, "套装suitCfg.partsOptional"); } } private static void CheckSuitGuideMenuCfg() { SuitGuideMenuCfgArray cfgArray = SuitGuideMenuCfgArray.Instance; SuitGuideMenuCfg[] dataArray = cfgArray.dataArray; foreach (SuitGuideMenuCfg cfg in dataArray) { if (cfg.suitIds.Length > 0) { string[] values = cfg.suitIds.Split(';'); foreach (string value in values) { if (value.Length > 0) { int valueInt = int.Parse(value); CheckSuitExist(valueInt, "图鉴SuitGuideMenuCfg.suitIds"); } } } } } private static void CheckClothingSyntheticCfg() { //ClothingSyntheticCfgArray cfgArray = ClothingSyntheticCfgArray.Instance; //ClothingSyntheticCfg[] dataArray = cfgArray.dataArray; //foreach(ClothingSyntheticCfg cfg in dataArray) //{ // CheckItemIdExist(cfg.costID, "合成ClothingSyntheticCfg.costID"); // CheckItemsExist(cfg.materiarsArr, "合成ClothingSyntheticCfg.materiars"); //} } private static void CheckItemCfg() { ItemCfgArray cfgArray = ItemCfgArray.Instance; ItemCfg[] dataArray = cfgArray.dataArray; foreach (ItemCfg cfg in dataArray) { if (!string.IsNullOrEmpty(cfg.resLayer1) && !string.IsNullOrEmpty(cfg.resLayer2) && !string.IsNullOrEmpty(cfg.resLayer3) && ItemUtilCS.IsDressUpItem(cfg.id)) { ET.Log.Error(new Exception("物品" + cfg.id + "没有配置显示层")); } CheckClothingSyntheticCfgExist(cfg); } } //===================================================================================================== private static void CheckItemIdExist(int id, string keyName) { if (id > 0) { ItemCfgArray cfgArray = ItemCfgArray.Instance; ItemCfg itemCfg = cfgArray.GetCfg(id); if (itemCfg == null) { Debug.LogErrorFormat("{0}配置的物品{1}不存在", new object[] { keyName, id }); } } } private static void CheckItemsExist(string itemsStr, string keyName) { string[] itemInfos = itemsStr.Split(';'); foreach (string itemInfo in itemInfos) { if (itemInfo.Length > 0) { string[] itemValues = itemInfo.Split('*'); CheckItemIdExist(int.Parse(itemValues[0]), keyName); } } } private static void CheckItemsExist(int[] items, string keyName) { foreach (int itemId in items) { CheckItemIdExist(itemId, keyName); } } private static void CheckItemsExist(int[][] items, string keyName) { foreach (int[] itemInfo in items) { CheckItemIdExist(itemInfo[0], keyName); } } private static void CheckBonusExist(int id, string keyName) { BonusListCfgArray cfgArray = BonusListCfgArray.Instance; BonusListCfg cfg = cfgArray.GetCfg(id); if (cfg == null) { Debug.LogErrorFormat("{0}配置的奖励{1}不存在", new object[] { keyName, id }); } } private static void CheckStoryDialogExist(string id, string keyName) { if (id.Length > 0) { StoryDialogCfgArray cfgArray = StoryDialogCfgArray.Instance; List cfg = cfgArray.GetCfgsByid(id); if (cfg == null && cfg.Count > 0) { Debug.LogErrorFormat("{0}配置的对话{1}不存在", new object[] { keyName, id }); } } } private static void CheckStoryFightExist(string id, string keyName) { if (id.Length > 0) { StoryFightCfgArray cfgArray = StoryFightCfgArray.Instance; StoryFightCfg cfg = cfgArray.GetCfg(id); if (cfg == null) { Debug.LogErrorFormat("{0}配置的战斗{1}不存在", new object[] { keyName, id }); } } } private static void CheckDropOutExist(int id, string keyName) { var arr = DropOutCfgArray.Instance.GetCfgsByid(id); List dropOutCfgs = new List(arr); if (dropOutCfgs == null || dropOutCfgs.Count <= 0) { Debug.LogErrorFormat("{0}配置的掉落{1}不存在", new object[] { keyName, id }); } } private static void CheckSuitExist(int id, string keyName) { if (id > 0) { SuitCfgArray cfgArray = SuitCfgArray.Instance; SuitCfg cfg = cfgArray.GetCfg(id); if (cfg == null) { Debug.LogErrorFormat("{0}配置的套装{1}不存在", new object[] { keyName, id }); } } } private static void CheckClothingSyntheticCfgExist(ItemCfg itemCfg) { if (itemCfg.suitId > 0) { var suitCfg = SuitCfgArray.Instance.GetCfg(itemCfg.suitId); if (suitCfg != null && suitCfg.syntheticType > 0) { if (itemCfg.syntheticCostID <= 0 || itemCfg.syntheticCostNum <= 0 || itemCfg.syntheticMateriarsArr.Length <= 0) { Debug.LogErrorFormat("服装{0}没有对应的合成消耗配置", new object[] { itemCfg.id }); } } } } private static void CheckStoryLevelCfgExist(int id, string keyName) { if (id > 0) { StoryLevelCfgArray cfgArray = StoryLevelCfgArray.Instance; StoryLevelCfg cfg = cfgArray.GetCfg(id); if (cfg == null) { Debug.LogErrorFormat("{0}配置的关卡{1}不存在", new object[] { keyName, id }); } } } private static void CheckCardStarCfg() { CardStarCfgArray cfgArray = CardStarCfgArray.Instance; CardStarCfg[] dataArray = cfgArray.dataArray; foreach (CardStarCfg cfg in dataArray) { CheckItemsExist(cfg.materiarsArr, "卡牌CardStarCfg.materiars"); } } private static void CheckCardStoryCfg() { CardStoryCfgArray cfgArray = CardStoryCfgArray.Instance; CardStoryCfg[] dataArray = cfgArray.dataArray; foreach (CardStoryCfg cfg in dataArray) { CheckStoryDialogExist(cfg.storyStartID, "卡牌CardStoryCfg.storyStartID"); } } } }