GameController.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. using UnityEngine;
  2. using ET;
  3. using static GFGGame.LauncherConfig;
  4. using System;
  5. using YooAsset;
  6. using System.Collections;
  7. using FairyGUI;
  8. namespace GFGGame
  9. {
  10. public class GameController
  11. {
  12. public static async void Start()
  13. {
  14. //初始化声音,不可以去掉
  15. try
  16. {
  17. MusicManager.Instance.Stop();
  18. }
  19. catch (Exception e)
  20. {
  21. Debug.LogError("调试1" + e);
  22. throw;
  23. }
  24. Debug.Log($"正在初始化 MusicManager");
  25. try
  26. {
  27. SoundManager.Instance.Stop();
  28. }
  29. catch (Exception e)
  30. {
  31. Debug.LogError("调试2" + e);
  32. throw;
  33. }
  34. Debug.Log($"正在初始化 SoundManager");
  35. try
  36. {
  37. VoiceManager.Instance.Stop();
  38. }
  39. catch (Exception e)
  40. {
  41. Debug.LogError("调试3" + e);
  42. throw;
  43. }
  44. Debug.Log($"正在初始化 VoiceManager");
  45. //GameObject对象池
  46. try
  47. {
  48. PrefabManager.Instance.Init();
  49. }
  50. catch (Exception e)
  51. {
  52. Debug.LogError("调试4" + e);
  53. throw;
  54. }
  55. Debug.Log($"正在初始化 PrefabManager");
  56. try
  57. {
  58. //字体
  59. await FontLoader.Instance.Init();
  60. }
  61. catch (Exception e)
  62. {
  63. Debug.LogError("调试5" + e);
  64. throw;
  65. }
  66. Debug.Log($"正在初始化 FontLoader");
  67. //界面
  68. try
  69. {
  70. UGUIManager.Instance.Init();
  71. }
  72. catch (Exception e)
  73. {
  74. Debug.LogError("调试6" + e);
  75. throw;
  76. }
  77. Debug.Log($"正在初始化 UGUIManager2");
  78. //日志
  79. try
  80. {
  81. LogController.Instance.Init();
  82. }
  83. catch (Exception e)
  84. {
  85. Debug.LogError("调试8" + e);
  86. throw;
  87. }
  88. Debug.Log($"正在初始化 LogController");
  89. try
  90. {
  91. //全局
  92. GameGlobal.Init();
  93. }
  94. catch (Exception e)
  95. {
  96. Debug.LogError("调试9" + e);
  97. throw;
  98. }
  99. Debug.Log($"正在初始化 GameGlobal");
  100. //sqlite
  101. //SqliteController.Instance.Init(false, ResPathUtil.SQLITE_FILE_PATH);
  102. try
  103. {
  104. //渠道
  105. QDManager.Init();
  106. }
  107. catch (Exception e)
  108. {
  109. Debug.LogError("调试10" + e);
  110. throw;
  111. }
  112. Debug.Log($"正在初始化 ViewGlobal");
  113. try
  114. {
  115. //获取游戏配置
  116. GetGameCfg();
  117. }
  118. catch (Exception e)
  119. {
  120. Debug.LogError("调试12" + e);
  121. throw;
  122. }
  123. }
  124. /// <summary>
  125. /// 获取游戏配置
  126. /// </summary>
  127. public static void GetGameCfg()
  128. {
  129. var url = LauncherConfig.cfgUrl.Replace("{cfgName}", GameGlobal.cfgName);
  130. url = url + "?t=" + TimeHelper.ClientNow();
  131. LauncherView.Instance.SetDesc("正在解压数据...");
  132. HttpTool.Instance.Get(url, (string data) =>
  133. {
  134. //初始化游戏配置
  135. GameConfig.InitData(data);
  136. //缓存一部分配置文件
  137. FightScoreCfgArray.Instance.Init();
  138. StudioCfgArray.Instance.Init();
  139. DailySignCfgArray.Instance.Init();
  140. DailyLoginCfgArray.Instance.Init();
  141. DressUpMenuItemCfg2Array.Instance.Init();
  142. AdCfgArray.Instance.Init();
  143. ItemTypeCfgArray.Instance.Init();
  144. GuideCfgArray.Instance.Init();
  145. SuitCfgArray.Instance.Init();
  146. ShopCfgArray.Instance.Init();
  147. SuitFosterCfgArray.Instance.Init();
  148. VipCfgArray.Instance.Init();
  149. ActivityRechargeCfgArray.Instance.Init();
  150. ActivityLuckybonusCfgArray.Instance.Init();
  151. Activity7DaysTaskCfgArray.Instance.Init();
  152. Activity7DaysCfgArray.Instance.Init();
  153. SuitGuideMenuCfgArray.Instance.Init();
  154. ActivityRecharge2CfgArray.Instance.Init();
  155. SuitFosterListCfgArray.Instance.Init();
  156. TaskCfgArray.Instance.Init();
  157. LauncherView.Instance.Close();
  158. //显示登录
  159. LoginController.ShowLogin();
  160. });
  161. }
  162. public static bool CheckLoginCache(bool doLogin)
  163. {
  164. string account = PlayerPrefs.GetString(GameConst.ACCOUNT_LAST_LOGIN_KEY, null);
  165. string password = PlayerPrefs.GetString(GameConst.PASSWORD_LAST_LOGIN_KEY, null);
  166. bool lastLoginIsVisitor = LocalCache.GetBool(GameConst.LAST_LOGIN_IS_VISITOR_KEY, false);
  167. if (lastLoginIsVisitor)
  168. {
  169. long id = (long)PlayerPrefs.GetFloat(GameConst.VISITOR_ID_KEY, -1);
  170. if (id >= 0)
  171. {
  172. if (doLogin)
  173. {
  174. //LoginProxy.LoginAsVisitor();
  175. }
  176. return true;
  177. }
  178. }
  179. else if (!string.IsNullOrEmpty(account))
  180. {
  181. if (!string.IsNullOrEmpty(password))
  182. {
  183. if (doLogin)
  184. {
  185. LoginController.Login(account, password, true).Coroutine();
  186. }
  187. return true;
  188. }
  189. else if (LauncherConfig.netType == LauncherConfig.EnumNetType.LOCAL &&
  190. PlayerPrefs.HasKey(GameConst.PASSWORD_LAST_LOGIN_KEY))
  191. {
  192. if (doLogin)
  193. {
  194. LoginController.LoginTest(account).Coroutine();
  195. }
  196. return true;
  197. }
  198. }
  199. return false;
  200. }
  201. public static void CheckSpecialAccount(string account)
  202. {
  203. GameGlobal.antiAddiction = !(account.IndexOf("sygfg") == 0);
  204. }
  205. public static void ShowCreateRole()
  206. {
  207. ViewManager.Show<CreateRoleView>();
  208. }
  209. public static async ETTask PreEnterGameAsync()
  210. {
  211. QDManager.OnEnterGame();
  212. RoleDataHandler.StartUpdate();
  213. //GFGUIPackage.AddPackage(ResPathUtil.GetUIPackagePath("CommonGame"));
  214. //GFGUIPackage.AddPackage(ResPathUtil.GetUIPackagePath("Main"));
  215. await ItemProxy.GetItemInfos();
  216. await RoleLimitSProxy.ReqUnitLimitInfos();
  217. await InstanceZonesSProxy.GetInstanceZonesInfos();
  218. await StorageSProxy.ReqGetClientValues();
  219. await RoleInfoSProxy.ReqPersonalInfo();
  220. await CollegeSProxy.ReqCollectUpgradeInfo();
  221. //功能协议数据不要放这里获取,放在AfterEnterGame函数中
  222. GameGlobal.lastLoginTime = StorageDataManager.Instance.GetStorageValue(ConstStorageId.LAST_LOGIN_TIME);
  223. long lastTime = GameGlobal.myNumericComponent.GetAsInt(NumericType.OnlineTimeSecs);
  224. StorageSProxy.ReqSetClientValue(ConstStorageId.LAST_LOGIN_TIME, (int)lastTime).Coroutine();
  225. int skipGuide = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_SKIP_GUIDE);
  226. if (skipGuide <= 0 && (LauncherConfig.netType == EnumNetType.LOCAL &&
  227. LauncherConfig.ChannelId == (int)ChannelID.Test))
  228. {
  229. AlertUI.Show("是否跳过引导?如果您是第一次体验,建议不要跳过引导!")
  230. .SetLeftButton(true, "不用", (obj) =>
  231. {
  232. EnterGame();
  233. StorageSProxy.ReqSetClientValue(ConstStorageId.STORAGE_SKIP_GUIDE, 1).Coroutine();
  234. })
  235. .SetRightButton(true, "跳过", (obj) =>
  236. {
  237. GameGlobal.skipGuide = true;
  238. EnterGame();
  239. StorageSProxy.ReqSetClientValue(ConstStorageId.STORAGE_SKIP_GUIDE, 2).Coroutine();
  240. });
  241. }
  242. else
  243. {
  244. if (skipGuide == 2) GameGlobal.skipGuide = true;
  245. EnterGame();
  246. }
  247. }
  248. private static void EnterGame()
  249. {
  250. LoadingView.Instance.SetProgress(100, () =>
  251. {
  252. ViewManager.Hide<LoadingView>();
  253. GameGlobal.isEnterGame = true;
  254. if (MainStoryDataManager.CheckOpenMainUI() || GameGlobal.skipGuide)
  255. {
  256. ViewManager.Show<MainUIView>();
  257. }
  258. else
  259. {
  260. MainStoryDataManager.currentChapterCfgId = 10001;
  261. // GameGlobal.isFirstEntry == true
  262. if (!InstanceZonesDataManager.CheckLevelPass(100001001))
  263. {
  264. UICGView.Instance.Show();
  265. //StoryController.ShowLevelView(100001001);
  266. }
  267. else
  268. {
  269. //ViewManager.Show<StoryChapterView>(StudioDataManager.Instance.luckyBoxFilingChapterId, new object[] { typeof(ActivityThemeLuckyBoxView).FullName, this.viewData });
  270. ViewManager.Show<StoryChapterView>(MainStoryDataManager.currentChapterCfgId);
  271. ////新玩家选择套装
  272. //if (RoleInfoManager.Instance.NewRoleSuitStatus == false)
  273. //{
  274. //ViewManager.Show<NewRoleGetSuitView>();
  275. //}
  276. }
  277. }
  278. GMController.AddShowGMViewEventListener();
  279. });
  280. }
  281. public static async void AfterShowMainUI(object param = null)
  282. {
  283. if (GameGlobal.AfterDataInited) return;
  284. await ActivitySProxy.ReqSevenDayLoginInfos();
  285. await ActivityGlobalSProxy.GetActivityInfo();
  286. await ShopSProxy.ReqShopInfo();
  287. await ActivitySProxy.ReqGetNewPlayerBonusStatus();
  288. await ActivitySProxy.GetNewPlayerOnceStatus();
  289. await ActivitySProxy.GetTipsStatus();
  290. await ActivitySProxy.GetOnceStatus(ActivityDataManager.Instance.activityZCJBId);
  291. await RoleInfoSProxy.GetThemeID();
  292. await MatchingCompetitionSproxy.ReqMatchingCompetitionInfo();
  293. FieldDataManager.Instance.waitToShowFieldFightEndView = false;
  294. bool result = await FieldSProxy.ReqFieldInstanceInfos();
  295. if (result && FieldDataManager.Instance.fieldInfos.hasBonus)
  296. {
  297. bool result1 = await FieldSProxy.ReqFieldInstanceResult();
  298. if (result1)
  299. {
  300. FieldDataManager.Instance.waitToShowFieldFightEndView = true;
  301. }
  302. }
  303. GameGlobal.AfterDataInited = true;
  304. EventAgent.DispatchEvent(ConstMessage.AFTER_DATA_INITED);
  305. ActivitySProxy.ReqGetTurnTableInfo().Coroutine();
  306. ItemProxy.GetItemAttributeInfos().Coroutine();
  307. ItemProxy.ReqGetItemCollect().Coroutine();
  308. MainStorySProxy.GetStoryBonusInfos().Coroutine();
  309. MainStorySProxy.GetStoryBonusDate().Coroutine();
  310. CardSProxy.GetCardInfos().Coroutine();
  311. TaskSProxy.GetTaskInfos();
  312. BattlePassTaskSProxy.GetBattlePassInfo().Coroutine();
  313. DailyTaskSProxy.ReqDailyTaskInfos().Coroutine();
  314. NoticeSProxy.ReqSystemNoticeList().Coroutine();
  315. MailSProxy.ReqMailCount().Coroutine();
  316. FriendSProxy.ReqAllFriendInfos().Coroutine();
  317. ActivityAfuGiftSProxy.GetAfuGiftInfo().Coroutine();
  318. ActivityTeaSProxy.ReqGetNPCVisitInfo().Coroutine();
  319. ActivitySProxy.ReqActivityZCJBInfo().Coroutine();
  320. MiniGameProxy.ReqGetChallengeReward().Coroutine();
  321. MiniGameProxy.ReqGetActivityGameInfos(5003).Coroutine();
  322. MiniGameProxy.ReqMergeGameInfo().Coroutine();
  323. TimeTracingDataManager.Instance.InitRewardDic();
  324. TimeTracingSProxy.ReqGetLevelRewardStatus().Coroutine();
  325. TimeTracingSProxy.ReqGetSuitRewardStatus().Coroutine();
  326. TimeTracingSProxy.ReqGetDataRecord().Coroutine();
  327. PoemPhotoSProxy.ReqAllPhotoInfos().Coroutine();
  328. MatchingCompetitionSproxy.ReqMatchingPhotoData().Coroutine();
  329. TravelSProxy.ReqTravelInfo().Coroutine();
  330. TravelSProxy.ReqTravelGuideInfo().Coroutine();
  331. PoemGallerySProxy.ReqGalleryTheme().Coroutine();
  332. ArenaDataManager.Instance.ReqArenaInfo();
  333. FieldWorkSproxy.ReqFieldWorkInfos().Coroutine();
  334. SkillSProxy.ReqGetSkillList(SkillType.LeagueSkill).Coroutine();
  335. EnduringGiftBoxSProxy.ReqGetAllGiftBagRebateStatus().Coroutine();
  336. ChatSProxy.ReqQueryChatMsg(ChatType.League).Coroutine();
  337. ChatSProxy.ReqQueryChatMsg(ChatType.LeagueQuestion).Coroutine();
  338. LuckyBoxSProxy.ReqGetLuckyBoxInfo().Coroutine();
  339. LeagueSproxy.ReqGetLeagueInfo().Coroutine();
  340. SuitFosterProxy.SendGetSuitInfos().Coroutine();
  341. StudioSProxy.ReqStudioInfos().Coroutine();
  342. LuckyBoxSProxy.ReqGetLuckyBoxRotatingInfo().Coroutine();
  343. LeagueSproxy.GetTeapartyInfos().Coroutine();
  344. LeagueSproxy.GetTeapartyMatchingInfos(RoleDataManager.roleId).Coroutine();
  345. ActivitySProxy.ReqGetActivitySignInfos().Coroutine();
  346. ShopSProxy.ReqGetGrowthFundInfo().Coroutine();
  347. ActivityAfuGiftSProxy.GetSummerGiftInfo().Coroutine();
  348. //RoleInfoSProxy.ReqNewRoleGetSuitStatus().Coroutine();
  349. MatchingCompetitionSproxy.ReqCurrentRank().Coroutine();
  350. int storageAutoPlay = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_AUTO_PLAY);
  351. FightDataManager.Instance.autoPlay = storageAutoPlay <= 0 ? false : true;
  352. int fightSpeed = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_FIGHT_AUTO_PLAY_SPEED);
  353. FightDataManager.Instance.fightSpeed = fightSpeed <= 0 ? 1 : fightSpeed;
  354. int dialogSpeed =
  355. StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_DIALOG_AUTO_PLAY_SPEED);
  356. FightDataManager.Instance.dialogSpeed = dialogSpeed <= 0 ? 1 : dialogSpeed;
  357. int filingChapterId = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STUDIO_FILING_CHAPTERID);
  358. StudioDataManager.Instance.npcFilingChapterId =
  359. filingChapterId <= 0 ? StudioDataManager.Instance.FilingDatas[0].id : filingChapterId;
  360. StudioDataManager.Instance.filingChapterId = StudioDataManager.Instance.npcFilingChapterId;
  361. GameGlobal.skipCheckOpen = StorageDataManager.Instance.GetStorageValue(ConstStorageId.SKIP_CHECK_OPEN) <= 0
  362. ? false
  363. : true;
  364. }
  365. public static void QuitToLoginView(bool logout, bool fromSdkLogoutCallback = false)
  366. {
  367. FieldDataManager.Instance.waitToShowFieldFightEndView = false;
  368. GameGlobal.AutoSevenDayLoginView = true;
  369. GameGlobal.AutoDailySignView = true;
  370. GameGlobal.AutoSpecialOfferGiftBoxView = true;
  371. GameGlobal.AutoAcitivtyTipsLoginView = true;
  372. GameGlobal.AutoMonthlyCardView = true;
  373. GameGlobal.AutoZGTHDCTips = true;
  374. GameGlobal.AutoZGTHTips = true;
  375. GameGlobal.AutoPearRebateTips = true;
  376. GameGlobal.AutoZCJBTips = true;
  377. GameGlobal.AutoShowCompleted = false;
  378. GameGlobal.PreDataInited = false;
  379. GameGlobal.AfterDataInited = false;
  380. QDManager.OnQuitToLoginView();
  381. GameGlobal.isVisitor = false;
  382. GameGlobal.antiAddiction = true;
  383. GameGlobal.userId = 0;
  384. GameGlobal.userAge = 0;
  385. GameGlobal.skipGuide = false;
  386. GuideDataManager.currentGuideId = 0;
  387. MainDataManager.Instance.ViewType = 0;
  388. RoleDataHandler.StopUpdate();
  389. CardDataManager.Clear();
  390. ItemDataManager.Clear();
  391. ViewManager.Clear();
  392. DecomposeDataManager.Instance.Clear();
  393. PhotographDataManager.Instance.Clear();
  394. SkillDataManager.Instance.Clear();
  395. SuitFosterDataManager.Instance.Clear();
  396. StudioDataManager.Instance.Clear();
  397. StorageDataManager.Instance.Clear();
  398. ShopDataManager.Instance.Clear();
  399. DressUpMenuItemDataManager.Clear();
  400. GuideDataManager.Clear();
  401. GetSuitItemController.Clear();
  402. FriendDataManager.Instance.Clear();
  403. RedDotController.Instance.Clear();
  404. BagDataManager.Instance.Clear();
  405. PoemPhotoDataManager.Instance.Clear();
  406. PoemGalleryDataManager.Instance.Clear();
  407. RoleInfoManager.Instance.Clear();
  408. DailyTaskDataManager.Instance.Clear();
  409. TravelDataManager.Instance.Clear();
  410. ArenaDataManager.Instance.Clear();
  411. ChatDataManager.Instance.Clear();
  412. ActivityDataManager.Instance.Clear();
  413. ActivityGlobalDataManager.Instance.Clear();
  414. EnduringGiftBoxDataManager.Instance.Clear();
  415. LimitedTimeGiftBoxDataManager.Instance.Clear();
  416. BattlePassTaskDataManager.Instance.Clear();
  417. TaskDataManager.Instance.Clear();
  418. LeagueDataManager.Instance.Clear();
  419. ActivityAfuGiftDataManager.Instance.Clear();
  420. FightDataManager.Instance.Clear();
  421. MainDataManager.Instance.Clear();
  422. NewYearRedEnvelopeDataManager.Instance.Clear();
  423. MatchingCompetitionDataManager.Instance.MyNtextture = null;
  424. MatchingCompetitionDataManager.Instance.MathingDressDate.bgId = 0;
  425. FieldWorkDataManager.Instance.IsAutoStart = false;
  426. GameGlobal.zoneScene.GetComponent<SessionComponent>()?.Disconnect();
  427. GameGlobal.zoneScene.GetComponent<ServerInfosComponent>()?.ServerInfoList?.Clear();
  428. GameGlobal.zoneScene.GetComponent<AccountInfoComponent>()?.Clear();
  429. if (logout)
  430. {
  431. QDManager.Logout();
  432. }
  433. ViewManager.Hide<GuideView>();
  434. if (!ViewManager.isViewOpen(typeof(LoginView).FullName))
  435. {
  436. ViewManager.Show<LoginView>(null, true);
  437. GameController.CheckUpdateVersion(true);
  438. }
  439. }
  440. //断线重连后需要处理的事情
  441. public static async void OnReconnected()
  442. {
  443. //重连成功请求邮件和公告等离线后会变更的数据
  444. NoticeSProxy.ReqSystemNoticeList().Coroutine();
  445. MailSProxy.ReqMailCount().Coroutine();
  446. FriendSProxy.ReqAllFriendInfos().Coroutine();
  447. PoemGallerySProxy.ReqGalleryTheme().Coroutine();
  448. TaskSProxy.GetTaskInfos();
  449. ArenaDataManager.Instance.ReqArenaInfo();
  450. if (LeagueDataManager.Instance.Type == LeagueJoinType.Join)
  451. {
  452. await LeagueSproxy.ReqGetLeagueInfo();
  453. LeagueSproxy.GetTeapartyMatchingInfos(RoleDataManager.roleId).Coroutine();
  454. LeagueSproxy.GetTeapartyInfos().Coroutine();
  455. LeagueSproxy.ReqJoinAnswer().Coroutine();
  456. }
  457. }
  458. public static void GoBackToMainView()
  459. {
  460. MainDataManager.Instance.ViewType = 0;
  461. ViewManager.Show<MainUIView>(null, true);
  462. }
  463. public static void ShowExitAlert(Action sureCallback = null)
  464. {
  465. AlertSystem.Show("我会想你的")
  466. .SetLeftButton(true, "继续游戏")
  467. .SetRightButton(true, "退出游戏", (object data) =>
  468. {
  469. if (sureCallback != null)
  470. {
  471. sureCallback.Invoke();
  472. }
  473. else
  474. {
  475. Application.Quit();
  476. }
  477. });
  478. }
  479. public static void CheckUpdateVersion(bool force = false)
  480. {
  481. if (ET.TimeHelper.ClientNowSeconds() - GameGlobal.pauseTime > 180 ||
  482. LauncherConfig.netType == LauncherConfig.EnumNetType.LOCAL || force)
  483. {
  484. Timers.inst.StartCoroutine(CheckVersion(VersionController.DefaultPackage, force));
  485. }
  486. }
  487. private static IEnumerator CheckVersion(string packageName, bool force)
  488. {
  489. var package = YooAssets.GetPackage(packageName);
  490. if (string.IsNullOrEmpty(GameGlobal.promotedVersion))
  491. {
  492. GameGlobal.promotedVersion = package.GetPackageVersion();
  493. }
  494. var operation = package.UpdatePackageVersionAsync();
  495. yield return operation;
  496. if (operation.Status == EOperationStatus.Succeed)
  497. {
  498. LogUtil.LogDev($"版本对比: {GameGlobal.promotedVersion} {operation.PackageVersion}");
  499. if (!string.IsNullOrEmpty(operation.PackageVersion)
  500. && !string.IsNullOrEmpty(operation.PackageVersion)
  501. && !operation.PackageVersion.Equals(GameGlobal.promotedVersion))
  502. {
  503. GameGlobal.promotedVersion = operation.PackageVersion;
  504. if (force)
  505. {
  506. AlertSystem.Show("游戏已有更新,请重启游戏获取最佳游戏体验。")
  507. .SetRightButton(true, "重启游戏", (obj) => { Application.Quit(); });
  508. }
  509. else
  510. {
  511. AlertSystem.Show("游戏已有更新,您可以立即重启游戏获取最佳游戏体验,也可以稍后重启更新。")
  512. .SetLeftButton(true, "稍后更新")
  513. .SetRightButton(true, "重启游戏", (obj) => { Application.Quit(); });
  514. }
  515. }
  516. }
  517. }
  518. }
  519. }