Core/GameEngine/Model/Config/RealmTowerConfig.cs
New file @@ -0,0 +1,209 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: 2023年10月26日 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; using LitJson; public partial class RealmTowerConfig { public readonly int FloorID; public readonly int NeedRealmLV; public readonly int BossID; public readonly int[][] RewardItemList; public RealmTowerConfig() { } public RealmTowerConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out FloorID); int.TryParse(tables[1],out NeedRealmLV); int.TryParse(tables[2],out BossID); RewardItemList = JsonMapper.ToObject<int[][]>(tables[3]); } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, RealmTowerConfig> configs = new Dictionary<string, RealmTowerConfig>(); public static RealmTowerConfig Get(string id) { if (!inited) { Debug.Log("RealmTowerConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } RealmTowerConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new RealmTowerConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static RealmTowerConfig Get(int id) { return Get(id.ToString()); } public static List<string> GetKeys() { var keys = new List<string>(); keys.AddRange(configs.Keys); keys.AddRange(rawDatas.Keys); return keys; } public static List<RealmTowerConfig> GetValues() { var values = new List<RealmTowerConfig>(); values.AddRange(configs.Values); var keys = new List<string>(rawDatas.Keys); for (int i = 0; i < keys.Count; i++) { values.Add(Get(keys[i])); } return values; } public static bool Has(string id) { return configs.ContainsKey(id) || rawDatas.ContainsKey(id); } public static bool Has(int id) { return Has(id.ToString()); } public static bool inited { get; private set; } protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>(); public static void Init(bool sync=false) { inited = false; var path = string.Empty; if (AssetSource.refdataFromEditor) { path = ResourcesPath.CONFIG_FODLER +"/RealmTower.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/RealmTower.txt"); } configs.Clear(); var tempConfig = new RealmTowerConfig(); var preParse = tempConfig is IConfigPostProcess; if (sync) { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new RealmTowerConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; } else { ThreadPool.QueueUserWorkItem((object _object) => { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new RealmTowerConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; }); } } } Core/GameEngine/Model/Config/RealmTowerConfig.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 9b5af2f3ff821c84080b5efab685ea74 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/GameEngine/Model/TelPartialConfig/RealmTowerConfig.cs
New file @@ -0,0 +1,44 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public partial class RealmTowerConfig : IConfigPostProcess { public static Dictionary<int, List<int>> realmTowerDict = new Dictionary<int, List<int>>(); //大境界对应的塔层 public void OnConfigParseCompleted() { int realm = Math.Max(1, RealmConfig.Get(NeedRealmLV).LvLarge); if (!realmTowerDict.ContainsKey(realm)) { realmTowerDict.Add(realm, new List<int>()); } realmTowerDict[realm].Add(FloorID); } //获取当前塔所在境界的所有塔层 public static List<int> GetFloorsByFloorID(int floorID) { int largeRealm = Math.Max(1, RealmConfig.Get(Get(floorID).NeedRealmLV).LvLarge); if (realmTowerDict.ContainsKey(largeRealm)) { return realmTowerDict[largeRealm]; } return null; } //塔层转化,一个新的大境界显示从1层开始 public static int GetFloorIDByFloorID(int floorID) { int largeRealm = Math.Max(1, RealmConfig.Get(Get(floorID).NeedRealmLV).LvLarge); if (realmTowerDict.ContainsKey(largeRealm)) { return realmTowerDict[largeRealm].IndexOf(floorID) + 1; } return 0; } } Core/GameEngine/Model/TelPartialConfig/RealmTowerConfig.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 00359c00408181b4bb3147df6effa0cb MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB217_tagMCRealmTowerInfo.cs
New file @@ -0,0 +1,13 @@ using UnityEngine; using System.Collections; using Snxxz.UI; // B2 17 境界塔信息 #tagMCRealmTowerInfo public class DTCB217_tagMCRealmTowerInfo : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); HB217_tagMCRealmTowerInfo vNetData = vNetPack as HB217_tagMCRealmTowerInfo; ModelCenter.Instance.GetModel<RealmModel>().UpdateRealmTowerInfo(vNetData); } } Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB217_tagMCRealmTowerInfo.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 0476680daf70e1941b0505f17493e075 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/ServerPack/HB2_ActionMap/HB217_tagMCRealmTowerInfo.cs
New file @@ -0,0 +1,17 @@ using UnityEngine; using System.Collections; // B2 17 境界塔信息 #tagMCRealmTowerInfo public class HB217_tagMCRealmTowerInfo : GameNetPackBasic { public uint Floor; // 已通关层 public HB217_tagMCRealmTowerInfo () { _cmd = (ushort)0xB217; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out Floor, vBytes, NetDataType.DWORD); } } Core/NetworkPackage/ServerPack/HB2_ActionMap/HB217_tagMCRealmTowerInfo.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 927062e6c63a6984492223933bd765fd MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Fight/Stage/Dungeon/DungeonStage.cs
@@ -299,6 +299,10 @@ WindowCenter.Instance.Close<DungeonEndCoolDownWin>(); WindowCenter.Instance.Open<DungeonCollectItemSuccWin>(); break; case RealmModel.Tower_MapId: WindowCenter.Instance.Open<RealmTowerHintWin>(); ModelCenter.Instance.GetModel<RealmModel>().RequestRefreshMonster(); break; default: WindowCenter.Instance.Open<DungeonStageTimeWin>(); break; System/Dungeon/DungeonFightWin.cs
@@ -57,6 +57,8 @@ HazyGrassModel hazyGrassModel { get { return ModelCenter.Instance.GetModel<HazyGrassModel>(); } } HazyDemonKingModel hazyDemonKingModel { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } } RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } } #region Built-in protected override void BindController() { @@ -465,6 +467,9 @@ case SkyTowerModel.DATA_MAPID: ProcessSkyTowerExitCoolDownEnd(); break; case RealmModel.Tower_MapId: ProcessRealmTowerExitCoolDownEnd(); break; case HazyDemonKingModel.CROSSSERVERDATAMAP: case HazyGrassModel.REIKI_DATAMAP: case HazyGrassModel.FAIRY_DATAMAP: @@ -641,6 +646,25 @@ } } private void ProcessRealmTowerExitCoolDownEnd() { WindowCenter.Instance.Close<RealmTowerVictoryWin>(); if (model.dungeonResult.isPass == 0) { model.ExitCurrentDungeon(); return; } var config = SkyTowerConfig.Get(skyTowerModel.currentFloor); if (realmModel.currentFloor != realmModel.selectFloorID || RealmTowerConfig.Get(realmModel.currentFloor).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel) { model.ExitCurrentDungeon(); return; } realmModel.RequestRefreshMonster(); WindowCenter.Instance.Open<RealmTowerHintWin>(); } } } System/Dungeon/DungeonModel.cs
@@ -989,6 +989,12 @@ WindowCenter.Instance.Open<FairyBossDungeonWin>(); } break; case RealmModel.Tower_MapId: if (!WindowCenter.Instance.IsOpen<RealmTowerHintWin>()) { WindowCenter.Instance.Open<RealmTowerHintWin>(); } break; default: if (GetDungeonHintId(mapId, lineId) != 0) { @@ -1288,6 +1294,10 @@ case ClientGuardDungeon.DATAMAPID: WindowCenter.Instance.Open<DungeonGuardVictoryWin>(); break; case RealmModel.Tower_MapId: WindowCenter.Instance.Open<RealmTowerVictoryWin>(); WindowCenter.Instance.Close<RealmTowerHintWin>(); break; default: WindowCenter.Instance.Open<DungeonVictoryWin>(); break; System/FindPrecious/RewardPreviewGroup.cs
@@ -64,6 +64,23 @@ Display(items); } public void Display(int[][] rewards) { if (rewards == null) { return; } var items = new List<Item>(); foreach (var reward in rewards) { items.Add(new Item(reward[0], reward[1])); } Display(items); } public void LuaDisplay(int[] itemIds, int[] itemCounts) { if (itemIds == null || itemCounts == null) System/Realm/RealmModel.cs
@@ -1,9 +1,6 @@ using LitJson; using Snxxz.UI; using System; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace Snxxz.UI @@ -84,7 +81,19 @@ UIEffect realmEffect; int realmEffectCount = 0; public event Action OnTowerPassEvent; public int passedFloor; //可挑战层 public int currentFloor { get { return passedFloor + 1; } } public int selectFloorID; //新的大境界未解锁,或者最后一层时,显示可选的最高层 public const int REALM_DUNGEON_ID = 31110; public const int Tower_MapId = 31310; public readonly Redpoint levelUpRedpoint = new Redpoint(114, 11401); public readonly Redpoint challengeRedpoint = new Redpoint(114, 11402); @@ -138,6 +147,7 @@ PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } ActivitiesPushModel pushModel { get { return ModelCenter.Instance.GetModel<ActivitiesPushModel>(); } } TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } } public override void Init() { @@ -983,6 +993,78 @@ selectXXZL = index; } #endregion #region 境界塔 public void RequestChallenge() { var error = GetErrorOfChallenge(); if (error == 0) { dungeonModel.RequestChallangeDungeon(Tower_MapId, 0); } else { switch (error) { case 1: SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmTowerConfig.Get(selectFloorID).NeedRealmLV); break; default: break; } } } private int GetErrorOfChallenge() { if (RealmTowerConfig.Get(selectFloorID).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel) { return 1; } if (selectFloorID <= passedFloor) { //已通关 return 2; } return 0; } public void UpdateRealmTowerInfo(HB217_tagMCRealmTowerInfo netPack) { passedFloor = (int)netPack.Floor; //显示不超过当前的大境界塔层 var config = RealmTowerConfig.Get(currentFloor); if (config != null) { int largeRealm = Math.Max(1, RealmConfig.Get(RealmTowerConfig.Get(currentFloor).NeedRealmLV).LvLarge); int largeRealmNow = Math.Max(1, RealmConfig.Get(PlayerDatas.Instance.baseData.realmLevel).LvLarge); if (largeRealm > largeRealmNow) { selectFloorID = passedFloor; } else { selectFloorID = currentFloor; } } else { selectFloorID = passedFloor; } OnTowerPassEvent?.Invoke(); } public void RequestRefreshMonster() { var sendInfo = new CA508_tagCMDoFBAction(); sendInfo.ActionType = 0; sendInfo.ActionInfo = (uint)currentFloor; GameNetSystem.Instance.SendInfo(sendInfo); } #endregion } public struct RealmLevelUpEquipCondition System/Realm/RealmTowerFloorCell.cs
New file @@ -0,0 +1,35 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, November 09, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; namespace Snxxz.UI { public class RealmTowerFloorCell : CellView { [SerializeField] Image m_Challenge; [SerializeField] Image m_Passed; [SerializeField] TextEx m_FloorName; [SerializeField] Transform m_SelectImg; RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } } public void Display(int _floorId) { m_FloorName.text = Language.Get("Z1814", RealmTowerConfig.GetFloorIDByFloorID(_floorId)); m_FloorName.color = realmModel.currentFloor == _floorId ? UIHelper.GetUIColor(TextColType.NavyYellow) : UIHelper.s_LightYellow; m_Challenge.SetActive(realmModel.currentFloor == _floorId); m_Passed.SetActive(realmModel.currentFloor > _floorId); m_SelectImg.SetActive(realmModel.selectFloorID == _floorId); } } } System/Realm/RealmTowerFloorCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: a55f12666bf2a434cbd7461ddf8373d3 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Realm/RealmTowerHintWin.cs
New file @@ -0,0 +1,65 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, January 21, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RealmTowerHintWin : Window { [SerializeField] Text m_TowerName; [SerializeField] Text m_Floor; [SerializeField] RewardPreviewGroup m_Rewards; RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion private void Display() { var config = RealmTowerConfig.Get(realmModel.currentFloor); m_Floor.text = Language.Get("Z1814", RealmTowerConfig.GetFloorIDByFloorID(realmModel.currentFloor)); m_Rewards.Display(config.RewardItemList); m_TowerName.text = Language.Get("RealmTower4", RealmConfig.Get(RealmConfig.Get(RealmTowerConfig.Get(realmModel.selectFloorID).NeedRealmLV).LvLarge).Name); } } } System/Realm/RealmTowerHintWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: dcf33a9374124cb4f840b1ff19f1fc3b MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Realm/RealmTowerVictoryWin.cs
New file @@ -0,0 +1,98 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, January 22, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RealmTowerVictoryWin : DungeonVictoryWin { [SerializeField] Button m_NextLevel; [SerializeField] Text m_NextLevelTimer; RealmModel model { get { return ModelCenter.Instance.GetModel<RealmModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_NextLevel.SetListener(ChallengeNext); m_Exit.SetListener(ExitDungeon); } protected override void OnPreOpen() { m_ContainerPoivt.SetActive(false); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion protected override void Display() { base.RequireDungeonExit(); m_ContainerPoivt.SetActive(true); base.DrawPassTime(); base.DrawGetExp(); base.DrawItemRewards(); base.DrawPassGrade(); if (model.currentFloor != model.selectFloorID || RealmTowerConfig.Get(model.currentFloor).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel) { m_NextLevel.SetActive(false); } else { m_NextLevel.SetActive(true); } } protected override void DrawExitTimer(int seconds) { if (model.currentFloor != model.selectFloorID || RealmTowerConfig.Get(model.currentFloor).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel) { m_ExitTimer.text = Language.Get("DungeonVictoryWin_Btn_Exit_1", Mathf.Clamp(seconds, 0, int.MaxValue)); } else { m_NextLevelTimer.text = Language.Get("SkyTowerNextLevel", Mathf.Clamp(seconds, 0, int.MaxValue)); m_ExitTimer.text = Language.Get("DemonDungeonExit"); } } private void ChallengeNext() { model.RequestRefreshMonster(); CloseClick(); WindowCenter.Instance.Open<RealmTowerHintWin>(); } } } System/Realm/RealmTowerVictoryWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: fbc1a91515c29f24da5e8170cd43b651 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Realm/RealmTowerWin.cs
New file @@ -0,0 +1,148 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, January 18, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RealmTowerWin : Window { [SerializeField] ScrollerController m_TowerBehaviour; [SerializeField] List<ItemCell> items; [SerializeField] TextEx m_LevelLimit; [SerializeField] Button m_Challenge; [SerializeField] TextEx m_TopNow; [SerializeField] TextEx m_TowerName; [SerializeField] Button m_Close; RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Challenge.SetListener(Challenge); m_Close.AddListener(CloseClick); } protected override void OnPreOpen() { m_TowerBehaviour.OnRefreshCell += RefreshCell; realmModel.OnTowerPassEvent += OnTowerPassEvent; Display(); OnCreateScroller(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { m_TowerBehaviour.OnRefreshCell -= RefreshCell; realmModel.OnTowerPassEvent -= OnTowerPassEvent; } protected override void OnAfterClose() { } protected override void OnActived() { } #endregion void Display() { var config = RealmTowerConfig.Get(realmModel.selectFloorID); var awards = config.RewardItemList; for (int i = 0; i < items.Count; i++) { if (i < awards.Length) { items[i].SetActive(true); int itemID = awards[i][0]; items[i].Init(new ItemCellModel(itemID, false, (ulong)awards[i][1])); items[i].button.AddListener(() => { ItemTipUtility.Show(itemID); }); } else { items[i].SetActive(false); } } m_LevelLimit.text = UIHelper.GetRealmName(config.NeedRealmLV, false, true); m_Challenge.SetActive(realmModel.currentFloor == realmModel.selectFloorID); m_TopNow.SetActive(realmModel.currentFloor != realmModel.selectFloorID); m_TowerName.text = Language.Get("RealmTower4", RealmConfig.Get(RealmConfig.Get(RealmTowerConfig.Get(realmModel.selectFloorID).NeedRealmLV).LvLarge).Name); } void OnCreateScroller() { var floors = RealmTowerConfig.GetFloorsByFloorID(realmModel.selectFloorID); if (floors == null) return; m_TowerBehaviour.Refresh(); for (int i = floors.Count - 1; i >= 0; i--) { if (i == floors.Count - 1) { m_TowerBehaviour.AddCell(ScrollerDataType.Header, floors[i]); } else { m_TowerBehaviour.AddCell(ScrollerDataType.Normal, floors[i]); } } m_TowerBehaviour.AddCell(ScrollerDataType.Tail, 0); m_TowerBehaviour.Restart(); m_TowerBehaviour.JumpIndex(floors.Count - floors.IndexOf(realmModel.currentFloor) - 2); } void Challenge() { realmModel.RequestChallenge(); } void RefreshCell(ScrollerDataType type, CellView cell) { if (type == ScrollerDataType.Header || type == ScrollerDataType.Normal) { var floorCell = cell as RealmTowerFloorCell; floorCell.Display(cell.index); } } void OnTowerPassEvent() { Display(); m_TowerBehaviour.m_Scorller.RefreshActiveCellViews(); } } } System/Realm/RealmTowerWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 4dad758548660ec449c4c0bd31d6220c MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Realm/RealmWin.cs
@@ -49,6 +49,7 @@ [SerializeField] Button leftBtn; [SerializeField] Button rightBtn; [SerializeField] UIEffect xxzlOverEffect; [SerializeField] Button towerBtn; int cacheRealmLevel = 0; ulong cacheFightPower = 0; @@ -131,6 +132,10 @@ model.selectXXZL++; juanImgs[model.selectXXZL].onClick.Invoke(); }); towerBtn.AddListener(() => { WindowJumpMgr.Instance.WindowJumpToEx("RealmTowerWin"); }); } protected override void OnPreOpen() Utility/ConfigInitiator.cs
@@ -328,6 +328,7 @@ normalTasks.Add(new ConfigInitTask("RealmXXZL", () => { RealmXXZLConfig.Init(); }, () => { return RealmXXZLConfig.inited; })); normalTasks.Add(new ConfigInitTask("HorseStarUp", () => { HorseStarUpConfig.Init(); }, () => { return HorseStarUpConfig.inited; })); normalTasks.Add(new ConfigInitTask("TitleStarUp", () => { TitleStarUpConfig.Init(); }, () => { return TitleStarUpConfig.inited; })); normalTasks.Add(new ConfigInitTask("RealmTower", () => { RealmTowerConfig.Init(); }, () => { return RealmTowerConfig.inited; })); } Utility/UIHelper.cs
@@ -720,6 +720,7 @@ return GetRealmColorByLv(realmLv, config.Name, bright); } //strFormat附加 境界名以外的文字 //needName 指境界0是否需要名称 public static string GetRealmNameEx(int realmLv, string strFormat, bool bright = false, bool needName = false) {