ItemApproachScanner.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using GFGGame;
  4. using System;
  5. namespace GFGEditor
  6. {
  7. /// <summary>
  8. /// 物品扫描器:
  9. /// 1.扫描获取途径,并填入物品表的获取途径字段
  10. /// 2.扫描套装部件个数
  11. /// </summary>
  12. public class ItemApproachScanner
  13. {
  14. private delegate string GetApproachCall(int itemId);
  15. public static void startScan()
  16. {
  17. ItemCfg[] dataArray = ItemCfgArray.Instance.dataArray;
  18. GetApproachCall[] actions = new GetApproachCall[] { GetClothingShopApproach, GetStoryLevelApproach, GetClothingSyntheticApproach, GetSuitGuideApproach, GetSuitSyntheticApproach, GetClothingDecomposeApproach, CheckGiftBagApproach, CheckShopExchangeApproach, CheckClothingFosterApproach, CheckDailyTaskApproach, GetZhaiXingApproach, GetLeaguePrayApproach, GetLeagueAnswerApproach };
  19. Dictionary<SuitCfg, List<int>> suitDic = new Dictionary<SuitCfg, List<int>>();
  20. int suitPartTotalCount = 0;
  21. foreach (ItemCfg cfg in dataArray)
  22. {
  23. HandleSuitTable(cfg, suitDic);
  24. HandleItemApproch(cfg, actions);
  25. }
  26. var globalCfg = GlobalCfgArray.globalCfg;
  27. SQLiteHelper.Instance.OpenConnection();
  28. try
  29. {
  30. //物品
  31. foreach (ItemCfg cfg in dataArray)
  32. {
  33. var names = new string[] { nameof(cfg.subType), nameof(cfg.itemType), nameof(cfg.approach) };
  34. var values = new string[] { "" + cfg.subType, "" + cfg.itemType, "" + cfg.approach };
  35. SQLiteHelper.Instance.UpdateValues(nameof(ItemCfgArray), names, values, nameof(cfg.id), cfg.id.ToString());
  36. }
  37. //套装
  38. foreach (var a in suitDic)
  39. {
  40. if(a.Key.isHide <= 0)
  41. {
  42. suitPartTotalCount += a.Value.Count;
  43. }
  44. var names = new string[] { nameof(a.Key.partsArr).Replace("Arr", "") };
  45. var values = new string[] { string.Join(";", a.Value) };
  46. SQLiteHelper.Instance.UpdateValues(nameof(SuitCfgArray), names, values, nameof(a.Key.id), a.Key.id.ToString());
  47. }
  48. globalCfg.suitPartTotalCount = suitPartTotalCount;
  49. UpdateGlobalCfg(globalCfg);
  50. }
  51. catch (Exception e)
  52. {
  53. ET.Log.Error(e.ToString());
  54. }
  55. finally
  56. {
  57. SQLiteHelper.Instance.CloseConnection();
  58. }
  59. }
  60. private static void UpdateGlobalCfg(GlobalCfg globalCfg)
  61. {
  62. var names = new string[] { nameof(globalCfg.suitPartTotalCount) };
  63. var values = new string[] { globalCfg.suitPartTotalCount.ToString() };
  64. SQLiteHelper.Instance.UpdateValues(nameof(GlobalCfgArray), names, values, nameof(globalCfg.id), globalCfg.id.ToString());
  65. }
  66. private static void HandleSuitTable(ItemCfg itemCfg, Dictionary<SuitCfg, List<int>> suitDic)
  67. {
  68. if (itemCfg.suitId <= 0)
  69. {
  70. return;
  71. }
  72. var suitCfg = SuitCfgArray.Instance.GetCfg(itemCfg.suitId);
  73. if (suitCfg == null)
  74. {
  75. return;
  76. }
  77. suitDic.TryGetValue(suitCfg, out var partsList);
  78. if (partsList == null)
  79. {
  80. partsList = new List<int>();
  81. suitDic[suitCfg] = partsList;
  82. }
  83. partsList.Add(itemCfg.id);
  84. }
  85. private static void HandleItemApproch(ItemCfg cfg, GetApproachCall[] actions)
  86. {
  87. List<string> approachs = new List<string>();
  88. foreach (GetApproachCall action in actions)
  89. {
  90. string tempApproach = action(cfg.id);
  91. if (tempApproach != null)
  92. {
  93. approachs.Add(tempApproach);
  94. }
  95. }
  96. if (approachs.Count > 0)
  97. {
  98. string approach = string.Join(";", approachs);
  99. cfg.approach = approach;
  100. if (approachs.Count > 5)
  101. {
  102. Debug.LogFormat("物品{0}的获取途径为 {1}", cfg.name, approach);
  103. }
  104. }
  105. else
  106. {
  107. if (cfg.id < 1000000 || cfg.id >= 2000000)
  108. {
  109. if ((!cfg.name.Contains("原始") && !cfg.name.Contains("默认")) || cfg.id >= 1000000)
  110. {
  111. //Debug.LogErrorFormat("物品 {0} {1} 没有获取途径", cfg.id, cfg.name);
  112. }
  113. }
  114. }
  115. }
  116. /// <summary>
  117. /// 尝试获取服装店产出途径
  118. /// </summary>
  119. /// <param name="itemId"></param>
  120. /// <returns></returns>
  121. private static string GetClothingShopApproach(int itemId)
  122. {
  123. List<ShopCfg> dataArray = ShopCfgArray.Instance.GetCfgsBymenu1Andmenu2(ConstStoreTabId.FU_ZHUANG_DIAN, ConstStoreSubId.FU_ZHUANG_DIAN);
  124. foreach (ShopCfg cfg in dataArray)
  125. {
  126. if (cfg.itemId == itemId)
  127. {
  128. return "FU_ZHUANG_DIAN=" + ConstStoreId.CLOTHING_STORE_ID; ;
  129. }
  130. }
  131. List<ShopCfg> shopCfgGallerys = ShopCfgArray.Instance.GetCfgsBymenu1Andmenu2(ConstStoreTabId.STORE_EXCHANGE, ConstStoreSubId.STORE_EXCHANGE_GALLERY);
  132. foreach (ShopCfg cfg in shopCfgGallerys)
  133. {
  134. if (cfg.itemId == itemId)
  135. {
  136. return "FU_ZHUANG_DIAN=" + ConstStoreId.GALLERY_STORE_ID;
  137. }
  138. }
  139. return null;
  140. }
  141. /// <summary>
  142. /// 尝试获取服装分解产出途径
  143. /// </summary>
  144. /// <param name="itemId"></param>
  145. /// <returns></returns>
  146. private static string GetClothingDecomposeApproach(int itemId)
  147. {
  148. DecomposeCfgArray manager = DecomposeCfgArray.Instance;
  149. DecomposeCfg[] dataArray = manager.dataArray;
  150. foreach (DecomposeCfg cfg in dataArray)
  151. {
  152. for (int i = 0; i < cfg.itemsArr.Length; i++)
  153. {
  154. if (cfg.itemsArr[i][0] == itemId)
  155. {
  156. return "FU_ZHUANG_DECOMPOSE";
  157. }
  158. }
  159. }
  160. return null;
  161. }
  162. /// <summary>
  163. /// 尝试获取摘星(抽奖)产出途径
  164. /// </summary>
  165. /// <param name="itemId"></param>
  166. /// <returns></returns>
  167. private static string GetZhaiXingApproach(int itemId)
  168. {
  169. LuckyBoxCfgArray manager = LuckyBoxCfgArray.Instance;
  170. LuckyBoxCfg[] dataArray = manager.dataArray;
  171. if (itemId == 10090)
  172. {
  173. Debug.Log("");
  174. }
  175. foreach (LuckyBoxCfg cfg in dataArray)
  176. {
  177. for (int i = 0; i < cfg.bonusArr.Length; i++)
  178. {
  179. if (itemId == cfg.bonusArr[i][0])
  180. {
  181. return "ZHAI_XING";
  182. }
  183. }
  184. int dropId = cfg.dropId;
  185. if (itemId == 10014)
  186. {
  187. if (dropId == 11000008)
  188. {
  189. ET.Log.Debug("");
  190. }
  191. ET.Log.Debug("");
  192. }
  193. int[] _dropIds = { dropId };
  194. bool approach = CheckItemInDropOut(itemId, _dropIds);
  195. if (approach)
  196. {
  197. return "ZHAI_XING";
  198. }
  199. // }
  200. }
  201. return null;
  202. }
  203. /// <summary>
  204. /// 尝试获取剧情关卡产出途径
  205. /// </summary>
  206. /// <param name="itemId"></param>
  207. /// <returns></returns>
  208. private static string GetStoryLevelApproach(int itemId)
  209. {
  210. List<string> approachs = new List<string>();
  211. StoryLevelCfgArray manager = StoryLevelCfgArray.Instance;
  212. StoryLevelCfg[] dataArray = manager.dataArray;
  213. foreach (StoryLevelCfg cfg in dataArray)
  214. {
  215. if (itemId == 3000041)
  216. {
  217. ET.Log.Debug("");
  218. }
  219. if (itemId == 3002001)
  220. {
  221. }
  222. bool result = CheckItemInBonus(itemId, cfg);
  223. if (result)
  224. {
  225. string approach = "JU_QING_GUAN_QIA=" + cfg.id;
  226. approachs.Add(approach);
  227. }
  228. }
  229. if (approachs.Count > 0)
  230. {
  231. return string.Join(";", approachs);
  232. }
  233. return null;
  234. }
  235. /// <summary>
  236. /// 尝试获取服装合成产出途径
  237. /// </summary>
  238. /// <param name="itemId"></param>
  239. /// <returns></returns>
  240. private static string GetClothingSyntheticApproach(int itemId)
  241. {
  242. var itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  243. if (itemCfg == null)
  244. {
  245. return null;
  246. }
  247. if (itemCfg.suitId <= 0)
  248. {
  249. return null;
  250. }
  251. var suitCfg = SuitCfgArray.Instance.GetCfg(itemCfg.suitId);
  252. if (suitCfg == null)
  253. {
  254. return null;
  255. }
  256. if (suitCfg.syntheticType <= 0)
  257. {
  258. return null;
  259. }
  260. return "FU_ZHUANG_HE_CHENG=" + suitCfg.id;
  261. }
  262. private static string GetSuitGuideApproach(int itemId)
  263. {
  264. SuitCfgArray manager = SuitCfgArray.Instance;
  265. SuitCfg[] dataArray = manager.dataArray;
  266. foreach (SuitCfg cfg in dataArray)
  267. {
  268. bool result = CheckItemInBonus(itemId, cfg.guideBoxBonusArr);
  269. if (result)
  270. {
  271. return "TAO_ZHUANG_TU_JIAN";
  272. }
  273. }
  274. return null;
  275. }
  276. private static string GetSuitSyntheticApproach(int itemId)
  277. {
  278. var itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  279. if (itemCfg == null)
  280. {
  281. return null;
  282. }
  283. if (itemCfg.suitId <= 0)
  284. {
  285. return null;
  286. }
  287. var suitCfg = SuitCfgArray.Instance.GetCfg(itemCfg.suitId);
  288. if (suitCfg == null)
  289. {
  290. return null;
  291. }
  292. if (suitCfg.syntheticType <= 0)
  293. {
  294. return null;
  295. }
  296. bool result = CheckItemInBonus(itemId, suitCfg.syntheticBoxBonusArr);
  297. if (result)
  298. {
  299. return "TAO_ZHUANG_HE_CHENG";
  300. }
  301. return null;
  302. }
  303. private static bool CheckItemInBonus(int itemId, StoryLevelCfg cfg)
  304. {
  305. if (cfg.fightID.Length > 0)
  306. {
  307. StoryFightCfgArray manager = StoryFightCfgArray.Instance;
  308. StoryFightCfg storyFightCfg = manager.GetCfg(cfg.fightID);
  309. List<int[]> a = new List<int[]>();
  310. // a.AddRange(cfg.bonusOnceArr);
  311. a.AddRange(storyFightCfg.bonusBaseArr);
  312. int[][] bonus = a.ToArray();
  313. bool result = CheckItemInBonus(itemId, bonus);
  314. if (storyFightCfg.id == "501")
  315. {
  316. ET.Log.Debug("");
  317. }
  318. if (result)
  319. {
  320. return true;
  321. }
  322. result = CheckItemInDropOut(itemId, storyFightCfg.bonusRandomArr);
  323. return result;
  324. }
  325. return false;
  326. }
  327. private static bool CheckItemInBonus(int itemId, int[][] bosnu)
  328. {
  329. List<ItemData> aList = ItemUtil.CreateItemDataList(bosnu);
  330. foreach (ItemData itemData in aList)
  331. {
  332. if (itemId == itemData.id)
  333. {
  334. return true;
  335. }
  336. }
  337. return false;
  338. }
  339. /// <summary>
  340. /// 检测掉落表是否产出该物品
  341. /// </summary>
  342. /// <param name="itemId"></param>
  343. /// <param name="dropIds"></param>
  344. /// <returns></returns>
  345. private static bool CheckItemInDropOut(int itemId, int[] dropIds)
  346. {
  347. List<ItemData> result = new List<ItemData>();
  348. foreach (int dropId in dropIds)
  349. {
  350. DropOutCfgArray manager = DropOutCfgArray.Instance;
  351. List<DropOutCfg> aList = manager.GetCfgsByid(dropId);
  352. foreach (DropOutCfg dropOutCfg in aList)
  353. {
  354. if (manager.GetCfgsByid(dropOutCfg.item).Count > 0)
  355. {
  356. int[] _dropIds = { dropOutCfg.item };
  357. if (CheckItemInDropOut(itemId, _dropIds))
  358. {
  359. return true;
  360. }
  361. }
  362. else
  363. {
  364. if (itemId == dropOutCfg.item)
  365. {
  366. return true;
  367. }
  368. }
  369. }
  370. }
  371. return false;
  372. }
  373. /// <summary>
  374. /// 检测商城-礼包是否产出该物品
  375. /// </summary>
  376. /// <param name="itemId"></param>
  377. /// <returns></returns>
  378. private static string CheckGiftBagApproach(int itemId)
  379. {
  380. // GiftBagCfgArray manager = GiftBagCfgArray.Instance;
  381. // GiftBagCfg[] dataArray = manager.dataArray;
  382. // for (int i = 0; i < dataArray.Length; i++)
  383. // {
  384. // for (int j = 0; j < dataArray[i].itemsArr.Length; j++)
  385. // {
  386. // if (dataArray[i].itemsArr[j][0] == itemId)
  387. // {
  388. // return ConstFunctionId.SHOP_GIFT_BAG + "=1";
  389. // }
  390. // }
  391. // }
  392. return null;
  393. }
  394. /// <summary>
  395. /// 检测商城-道具兑换是否产出该物品
  396. /// </summary>
  397. /// <param name="itemId"></param>
  398. /// <returns></returns>
  399. private static string CheckShopExchangeApproach(int itemId)
  400. {
  401. // ShopExchangeCfgArray manager = ShopExchangeCfgArray.Instance;
  402. // ShopExchangeCfg[] dataArray = manager.dataArray;
  403. // for (int i = 0; i < dataArray.Length; i++)
  404. // {
  405. // if (dataArray[i].itemId == itemId)
  406. // {
  407. // return ConstFunctionId.SHOP_EXCHANGE + "=2";
  408. // }
  409. // }
  410. return null;
  411. }
  412. /// <summary>
  413. /// 检测服装升级是否产出该物品
  414. /// </summary>
  415. /// <param name="itemId"></param>
  416. /// <returns></returns>
  417. private static string CheckClothingFosterApproach(int itemId)
  418. {
  419. //培养
  420. SuitFosterCfgArray manager = SuitFosterCfgArray.Instance;
  421. SuitFosterCfg[] dataArray = manager.dataArray;
  422. for (int i = 0; i < dataArray.Length; i++)
  423. {
  424. for (int j = 0; j < dataArray[i].rewardsArr.Length; j++)
  425. {
  426. if (dataArray[i].rewardsArr[j][0] == itemId)
  427. {
  428. return ConstFunctionId.SUIT_FOSTER;
  429. }
  430. }
  431. }
  432. //换新
  433. SuitFosterListCfgArray manager1 = SuitFosterListCfgArray.Instance;
  434. SuitFosterListCfg[] dataArray1 = manager1.dataArray;
  435. for (int i = 0; i < dataArray1.Length; i++)
  436. {
  437. for (int j = 0; j < dataArray1[i].renewRewardsArr.Length; j++)
  438. {
  439. if (dataArray1[i].renewRewardsArr[j][0] == itemId)
  440. {
  441. return ConstFunctionId.SUIT_FOSTER;
  442. }
  443. }
  444. }
  445. return null;
  446. }
  447. /// <summary>
  448. /// 检测每日任务是否产出该物品
  449. /// </summary>
  450. /// <param name="itemId"></param>
  451. /// <returns></returns>
  452. private static string CheckDailyTaskApproach(int itemId)
  453. {
  454. DailyActiveRewardCfgArray manager = DailyActiveRewardCfgArray.Instance;
  455. DailyActiveRewardCfg[] dataArray = manager.dataArray;
  456. for (int i = 0; i < dataArray.Length; i++)
  457. {
  458. for (int j = 0; j < dataArray[i].rewardsArr.Length; j++)
  459. {
  460. if (dataArray[i].rewardsArr[j][0] == itemId)
  461. {
  462. return ConstFunctionId.DAILY_TASK;
  463. }
  464. }
  465. }
  466. return null;
  467. }
  468. private static string GetLeaguePrayApproach(int itemId)
  469. {
  470. LeaguePrayCfg[] prayCfgs = LeaguePrayCfgArray.Instance.dataArray;
  471. for (int i = 0; i < prayCfgs.Length; i++)
  472. {
  473. for (int j = 0; j < prayCfgs[i].bonusArr.Length; j++)
  474. {
  475. if (prayCfgs[i].bonusArr[j][0] == itemId)
  476. {
  477. return ConstFunctionId.LEAGUE_PRAY;
  478. }
  479. }
  480. for (int j = 0; j < prayCfgs[i].bonusOnceArr.Length; j++)
  481. {
  482. if (prayCfgs[i].bonusOnceArr[j][0] == itemId)
  483. {
  484. return ConstFunctionId.LEAGUE_PRAY;
  485. }
  486. }
  487. }
  488. return null;
  489. }
  490. private static string GetLeagueAnswerApproach(int itemId)
  491. {
  492. LeagueQuestionCfg[] questionCfgs = LeagueQuestionCfgArray.Instance.dataArray;
  493. for (int i = 0; i < questionCfgs.Length; i++)
  494. {
  495. for (int j = 0; j < questionCfgs[i].bonusArr.Length; j++)
  496. {
  497. if (questionCfgs[i].bonusArr[j][0] == itemId)
  498. {
  499. return ConstFunctionId.LEAGUE_ANSWER;
  500. }
  501. }
  502. }
  503. LeagueQuestionBonusCfg[] questionBonusCfgs = LeagueQuestionBonusCfgArray.Instance.dataArray;
  504. for (int i = 0; i < questionBonusCfgs.Length; i++)
  505. {
  506. for (int j = 0; j < questionBonusCfgs[i].bonusArr.Length; j++)
  507. {
  508. if (questionBonusCfgs[i].bonusArr[j][0] == itemId)
  509. {
  510. return ConstFunctionId.LEAGUE_ANSWER;
  511. }
  512. }
  513. }
  514. return null;
  515. }
  516. }
  517. }