From 9f5db2e92b93dcbe7c5d53606d62c8f04aef3c19 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期三, 18 三月 2026 23:20:18 +0800
Subject: [PATCH] 533 开服冲榜-客户端  开服冲榜的将星云集、百炼成军、红袖添香、命定乾坤和限时冲刺的武将冲刺、古宝冲刺、元宝冲刺添加特权标识

---
 Main/Utility/UIHelper.cs |  258 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 196 insertions(+), 62 deletions(-)

diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index 2cd0ea7..79e6d75 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -8,6 +8,7 @@
 using System.Text.RegularExpressions;
 using System.IO;
 using LitJson;
+using Cysharp.Threading.Tasks;
 
 /// <summary>
 /// UI杈呭姪绫�
@@ -39,7 +40,7 @@
             if (part != 0)
             {
                 if (needZero)
-                    result = StringUtility.Contact(numbers[0] + result);
+                    result = StringUtility.Concat(numbers[0] + result);
 
                 result = numbers[part] + (unitPlace == 1 ? "" : units[unitPlace - 2]) + result; // 鍗曚綅鍙湪鍗併�佺櫨銆佸崈銆佷竾鍐呴儴浣跨敤
                 needZero = false;
@@ -79,7 +80,7 @@
         {
             // 鏆備笉鑰冭檻瀵屾枃鏈殑鎯呭喌
             // 涓嶉渶瑕佺墿鍝佺殑鎯呭喌琛ュ厖
-            // string iconKey = StringUtility.Contact("Money_Type_", moneyType);
+            // string iconKey = StringUtility.Concat("Money_Type_", moneyType);
             Debug.LogError("MoneyDisplayModel 鏈厤缃揣甯佺被鍨嬶細" + moneyType);
         }
     }
@@ -128,20 +129,20 @@
             {
                 if (attrName.Length == 2)
                 {
-                    suitStr = StringUtility.Contact(suitStr, attrName[i], "        ");
+                    suitStr = StringUtility.Concat(suitStr, attrName[i].ToString(), "        ");
                 }
                 else if (attrName.Length == 3)
                 {
-                    suitStr = StringUtility.Contact(suitStr, attrName[i], "  ");
+                    suitStr = StringUtility.Concat(suitStr, attrName[i].ToString(), "  ");
                 }
                 else
                 {
-                    suitStr = StringUtility.Contact(suitStr, attrName[i]);
+                    suitStr = StringUtility.Concat(suitStr, attrName[i].ToString());
                 }
             }
             else
             {
-                suitStr = StringUtility.Contact(suitStr, attrName[i]);
+                suitStr = StringUtility.Concat(suitStr, attrName[i].ToString());
             }
         }
         return suitStr;
@@ -237,19 +238,19 @@
 
         if (num >= T)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / T, 2), Language.Get("L1070_0"));
+            return StringUtility.Concat(FormatWithoutRounding(num / T, 2), Language.Get("L1070_0"));
         }
         else if (num >= B)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / B, 2), Language.Get("L1070_1"));
+            return StringUtility.Concat(FormatWithoutRounding(num / B, 2), Language.Get("L1070_1"));
         }
         else if (num >= M)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / M, decimalPlaces), Language.Get("L1070"));
+            return StringUtility.Concat(FormatWithoutRounding(num / M, decimalPlaces), Language.Get("L1070"));
         }
         else if (num >= K)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / K, decimalPlaces), Language.Get("L1071"));
+            return StringUtility.Concat(FormatWithoutRounding(num / K, decimalPlaces), Language.Get("L1071"));
         }
         else
         {
@@ -267,19 +268,19 @@
 
         if (num >= T)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / T, 2), "t");
+            return StringUtility.Concat(FormatWithoutRounding(num / T, 2), "t");
         }
         else if (num >= B)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / B, 2), "b");
+            return StringUtility.Concat(FormatWithoutRounding(num / B, 2), "b");
         }
         else if (num >= M)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / M, 1), "m");
+            return StringUtility.Concat(FormatWithoutRounding(num / M, 1), "m");
         }
         else if (num >= K)
         {
-            return StringUtility.Contact(FormatWithoutRounding(num / K, 1), "k");
+            return StringUtility.Concat(FormatWithoutRounding(num / K, 1), "k");
         }
         else
         {
@@ -334,6 +335,8 @@
         }
     }
 
+
+    // 鍙栧悕楠岃瘉
     static Regex s_SpecialCharacterRegex = new Regex("[()锛堬級@!#$%^&*[]|_]");
     static Regex s_AsciiCharacterRegex = new Regex("[\x00-\x1F]|[\x21-\x2F]|[\x3A-\x40]|[\x5B-\x60]|[\x7B-\x7E]");
     public static bool HasSpecialCharac(string str)
@@ -343,6 +346,17 @@
             return true;
         }
         if (s_AsciiCharacterRegex.IsMatch(str))
+        {
+            return true;
+        }
+        return false;
+    }
+
+    //鑱婂ぉ
+    static Regex s_AsciiCharacterRegexChat = new Regex("[\x00-\x1F]");
+    public static bool HasSpecCheckChat(string str)
+    {
+        if (s_AsciiCharacterRegexChat.IsMatch(str))
         {
             return true;
         }
@@ -461,19 +475,19 @@
     //     switch (crossDanLVConfig.DanType)
     //     {
     //         case 0:
-    //             return StringUtility.Contact("<color=#", bright ? "666666" : "dddddd", ">", name, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "666666" : "dddddd", ">", name, "</color>");
     //         case 1:
-    //             return StringUtility.Contact("<color=#", bright ? "9460ff" : "7999ff", ">", name, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "9460ff" : "7999ff", ">", name, "</color>");
     //         case 2:
-    //             return StringUtility.Contact("<color=#", bright ? "0066ff" : "00c6ff", ">", name, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "0066ff" : "00c6ff", ">", name, "</color>");
     //         case 3:
-    //             return StringUtility.Contact("<color=#", bright ? "00b337" : "66ff00", ">", name, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "00b337" : "66ff00", ">", name, "</color>");
     //         case 4:
-    //             return StringUtility.Contact("<color=#", bright ? "ff6600" : "ff9000", ">", name, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "ff6600" : "ff9000", ">", name, "</color>");
     //         case 5:
-    //             return StringUtility.Contact("<color=#", bright ? "ff0000" : "ff0000", ">", name, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "ff0000" : "ff0000", ">", name, "</color>");
     //         case 6:
-    //             return StringUtility.Contact("<color=#", bright ? "ff00f6" : "f000ff", ">", name, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "ff00f6" : "f000ff", ">", name, "</color>");
     //     }
     //     return name;
     // }
@@ -727,75 +741,75 @@
         {
             case TextColType.None:
             case TextColType.White:
-                return StringUtility.Contact("<color=#", bright ? "ffffff" : "ffffff", ">", msg, "</color>");
+                return StringUtility.Concat("<color=#", bright ? "ffffff" : "ffffff", ">", msg, "</color>");
             case TextColType.titleSelectColor:
-                return StringUtility.Contact("<color=#7F4139>", msg, "</color>");
+                return StringUtility.Concat("<color=#7F4139>", msg, "</color>");
             case TextColType.titleUnSelectColor:
-                return StringUtility.Contact("<color=#6E5C60>", msg, "</color>");
+                return StringUtility.Concat("<color=#6E5C60>", msg, "</color>");
             case TextColType.Red:
-                return StringUtility.Contact("<color=#", bright ? "ea261e" : "ea261e", ">", msg, "</color>");
+                return StringUtility.Concat("<color=#", bright ? "ea261e" : "ea261e", ">", msg, "</color>");
             case TextColType.Pink:
-                return StringUtility.Contact("<color=#", bright ? "f6408d" : "ff7c7c", ">", msg, "</color>");
+                return StringUtility.Concat("<color=#", bright ? "f6408d" : "ff7c7c", ">", msg, "</color>");
             case TextColType.Green:
-                return StringUtility.Contact("<color=#", bright ? "248B12" : "2ae337", ">", msg, "</color>");
+                return StringUtility.Concat("<color=#", bright ? "248B12" : "2ae337", ">", msg, "</color>");
             case TextColType.NavyBrown:
-                return StringUtility.Contact("<color=#6e4c31>", msg, "</color>");
+                return StringUtility.Concat("<color=#6e4c31>", msg, "</color>");
             case TextColType.DarkGreen:
-                return StringUtility.Contact("<color=#248B12>", msg, "</color>");
+                return StringUtility.Concat("<color=#248B12>", msg, "</color>");
             case TextColType.Black:
-                return StringUtility.Contact("<color=#000000>", msg, "</color>");
+                return StringUtility.Concat("<color=#000000>", msg, "</color>");
             case TextColType.LightWhite:
-                return StringUtility.Contact("<color=f5f646>", msg, "</color>");
+                return StringUtility.Concat("<color=f5f646>", msg, "</color>");
             case TextColType.LightGreen:
-                return StringUtility.Contact("<color=#8ddc11>", msg, "</color>");
+                return StringUtility.Concat("<color=#8ddc11>", msg, "</color>");
             case TextColType.Gray:
-                return StringUtility.Contact("<color=#bbbbbb>", msg, "</color>");
+                return StringUtility.Concat("<color=#bbbbbb>", msg, "</color>");
             case TextColType.NavyGray:
-                return StringUtility.Contact("<color=#797979>", msg, "</color>");
+                return StringUtility.Concat("<color=#797979>", msg, "</color>");
             case TextColType.lightYellow:
-                return StringUtility.Contact("<color=#fcedb9>", msg, "</color>");
+                return StringUtility.Concat("<color=#fcedb9>", msg, "</color>");
             case TextColType.NavyYellow:
-                return StringUtility.Contact("<color=#f2ee02>", msg, "</color>");
+                return StringUtility.Concat("<color=#f2ee02>", msg, "</color>");
             case TextColType.itemjingliang:
                 // 729de4 绮捐壇
-                return StringUtility.Contact("<color=#729de4>", msg, "</color>");
+                return StringUtility.Concat("<color=#729de4>", msg, "</color>");
             case TextColType.itemxiyou:
                 // c87bfa绋�鏈�
-                return StringUtility.Contact("<color=#c87bfa>", msg, "</color>");
+                return StringUtility.Concat("<color=#c87bfa>", msg, "</color>");
             case TextColType.itemshishi:
                 // f6de56 鍙茶瘲
-                return StringUtility.Contact("<color=#f6de56>", msg, "</color>");
+                return StringUtility.Concat("<color=#f6de56>", msg, "</color>");
             case TextColType.itemchuanqi:
                 // fe8534 浼犲
-                return StringUtility.Contact("<color=#fe8534>", msg, "</color>");
+                return StringUtility.Concat("<color=#fe8534>", msg, "</color>");
             case TextColType.itemshenhua:
                 // fe4a47 绁炶瘽
-                return StringUtility.Contact("<color=#fe4a47>", msg, "</color>");
+                return StringUtility.Concat("<color=#fe4a47>", msg, "</color>");
             case TextColType.itemwuxia:
                 // eb5ce9 鏃犵憰
-                return StringUtility.Contact("<color=#eb5ce9>", msg, "</color>");
+                return StringUtility.Concat("<color=#eb5ce9>", msg, "</color>");
             case TextColType.itemanjin:
                 // f9e29f 鏆楅噾
-                return StringUtility.Contact("<color=#f9e29f>", msg, "</color>");
+                return StringUtility.Concat("<color=#f9e29f>", msg, "</color>");
             case TextColType.itemjueyi:
                 // cdfef2 缁濊壓
-                return StringUtility.Contact("<color=#cdfef2>", msg, "</color>");
+                return StringUtility.Concat("<color=#cdfef2>", msg, "</color>");
             case TextColType.itemyuanzu:
                 // dfbbed 鍏冪
-                return StringUtility.Contact("<color=#dfbbed>", msg, "</color>");
+                return StringUtility.Concat("<color=#dfbbed>", msg, "</color>");
             case TextColType.itembuxiu:
                 // 5eeff2 涓嶆溄
-                return StringUtility.Contact("<color=#5eeff2>", msg, "</color>");
+                return StringUtility.Concat("<color=#5eeff2>", msg, "</color>");
             case TextColType.itemyonghen:
                 // f5b4ea 姘告亽
-                return StringUtility.Contact("<color=#f5b4ea>", msg, "</color>");
+                return StringUtility.Concat("<color=#f5b4ea>", msg, "</color>");
         }
         return msg;
     }
 
     public static string AppendColor(Color color, string msg)
     {
-        return StringUtility.Contact("<color=#", ColorToHexWithHash(color), ">", msg, "</color>");
+        return StringUtility.Concat("<color=#", ColorToHexWithHash(color), ">", msg, "</color>");
     }
 
 
@@ -814,6 +828,33 @@
             return string.Format("{0:X2}{1:X2}{2:X2}", r, g, b);
         }
     }
+
+
+    //鍔熻兘鍝佽川鏂囧瓧棰滆壊锛屽摢浜涘姛鑳界敱缇庢湳鍐冲畾锛岀洰鍓嶇敤浜庡彜瀹�
+    public static Color GetFuncQualityColor(int quality)
+    {
+
+        switch (quality)
+        {
+            case 1:
+                // bbd5ff
+                return new Color32(187, 213, 255, 255);
+            case 2:
+                // e4bbfe
+                return new Color32(228, 187, 254, 255);
+            case 3:
+                // f7eba4
+                return new Color32(247, 235, 164, 255);
+            case 4:
+                // ffc096
+                return new Color32(255, 192, 150, 255);
+            case 5:
+                // fe9896
+                return new Color32(254, 152, 150, 255);
+        }
+        return Color.white;
+    }
+
 
 
 
@@ -858,17 +899,17 @@
     //     switch (config.Quality)
     //     {
     //         case 1:
-    //             return StringUtility.Contact("<color=#", bright ? "666666" : "dddddd", ">", msg, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "666666" : "dddddd", ">", msg, "</color>");
     //         case 2:
-    //             return StringUtility.Contact("<color=#", bright ? "00b337" : "66ff00", ">", msg, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "00b337" : "66ff00", ">", msg, "</color>");
     //         case 3:
-    //             return StringUtility.Contact("<color=#", bright ? "0066ff" : "00c6ff", ">", msg, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "0066ff" : "00c6ff", ">", msg, "</color>");
     //         case 4:
-    //             return StringUtility.Contact("<color=#", bright ? "ff00f6" : "f000ff", ">", msg, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "ff00f6" : "f000ff", ">", msg, "</color>");
     //         case 5:
-    //             return StringUtility.Contact("<color=#", bright ? "ff6600" : "ff9000", ">", msg, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "ff6600" : "ff9000", ">", msg, "</color>");
     //         case 6:
-    //             return StringUtility.Contact("<color=#", bright ? "ff0000" : "ff0000", ">", msg, "</color>");
+    //             return StringUtility.Concat("<color=#", bright ? "ff0000" : "ff0000", ">", msg, "</color>");
     //         default:
     //             return msg;
     //     }
@@ -876,18 +917,22 @@
 
     //鐗╁搧 鍚勫姛鑳藉搧璐�  浠庣簿鑹�1鍝佽川 瀵瑰簲 3寮�濮�
     /// <summary>
-    /// 棰滆壊瀹氫箟鏍规嵁鍒嗙粍澶勭悊锛屽鏅�氱墿鍝佺殑棰滆壊绮捐壇鏄�1寮�濮嬶紝鏍戝拰瑁呭涔熸槸绮楃硻1寮�濮嬶紝闇�瑕佽皟鏁村尮閰�
+    /// 棰滆壊瀹氫箟鏍规嵁鍒嗙粍澶勭悊锛屽鏅�氱墿鍝佺殑棰滆壊绮捐壇鏄�1寮�濮嬶紝鏍戝拰瑁呭涔熸槸绮楃硻1寮�濮嬶紝鍛芥牸鏄粠棰滆壊2寮�濮嬮渶瑕佽皟鏁村尮閰�
     /// </summary>
     /// <param name="itemColor"></param>
     /// <param name="msg"></param>
     /// <param name="bright"></param>
-    /// <param name="colorGroupType">0 閫氱敤鍔熻兘鍝佽川鍒嗙粍绮捐壇鍒扮璇�</param>
+    /// <param name="colorGroupType">0 閫氱敤鍔熻兘鍝佽川鍒嗙粍绮捐壇鍒扮璇� 1 绁濈鍜岃澶囩敤 2鍛芥牸鐢�</param>
     /// <returns></returns>
     public static string AppendColor(int itemColor, string msg, bool bright = true, int colorGroupType = 0)
     {
         if (colorGroupType == 0)
         {
             itemColor = itemColor + 2;
+        }
+        else if (colorGroupType == 2)
+        {
+            itemColor = itemColor + 1;
         }
 
         switch (itemColor)
@@ -1003,6 +1048,10 @@
         {43, PlayerDataType.default34},
         {42, PlayerDataType.default33},
         {53, PlayerDataType.ChallengeVoucher},
+        {54, PlayerDataType.DailySpecials},
+        {55, PlayerDataType.OSGalaScore},
+        {57, PlayerDataType.QYScore},
+        {58, PlayerDataType.heroSkin},
         {99, PlayerDataType.ExAttr11},
     };
 
@@ -1151,6 +1200,31 @@
                     //鎸戞垬鍑瘉
                     return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.ChallengeVoucher);
                 }
+            case 54:
+                {
+                    //鐗规儬鍗扮欢
+                    return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.DailySpecials);
+                }
+            case 55:
+                {
+                    //寮�鏈嶅簡鍏哥Н鍒�
+                    return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.OSGalaScore);
+                }
+            case 56:
+                {
+                    //缇よ嫳鎸戞垬浠�
+                    return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.QunyingWDL);
+                }
+            case 57:
+                {
+                    //缇よ嫳绉垎
+                    return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.QYScore);
+                }
+            case 58:
+                {
+                    //鏃惰璐у竵
+                    return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.heroSkin);
+                }
             case 98:
                 {
                     //杩囨湡鍨嬩唬閲戝埜
@@ -1181,13 +1255,13 @@
             return AppendColor(useCnt <= cnt ? TextColType.Green : TextColType.Red, $"{cnt}/{useCnt}");
     }
 
-    public static string ShowUseItem(PackType type, int itemId, long useCnt, bool showLargeNum = false)
+    public static string ShowUseItem(PackType type, int itemId, long useCnt, bool showLargeNum = false, bool bright = true)
     {
         long cnt = PackManager.Instance.GetItemCountByID(type, itemId);
         if (showLargeNum)
-            return AppendColor(useCnt <= cnt ? TextColType.Green : TextColType.Red, $"{ReplaceLargeNum(cnt)}/{useCnt}");
+            return AppendColor(useCnt <= cnt ? TextColType.Green : TextColType.Red, $"{ReplaceLargeNum(cnt)}/{useCnt}", bright);
         else
-            return AppendColor(useCnt <= cnt ? TextColType.Green : TextColType.Red, $"{cnt}/{useCnt}");
+            return AppendColor(useCnt <= cnt ? TextColType.Green : TextColType.Red, $"{cnt}/{useCnt}", bright);
     }
 
 
@@ -1218,6 +1292,34 @@
         return isEnough;
     }
 
+    /// <param name="needTips">0 涓嶅搷搴� 1 寮规彁绀� 2 寮硅幏鍙栭�斿緞tips</param>
+    public static bool CheckItemCount(int itemId, long needCount, int needTips = 0)
+    {
+        if (needCount <= 0)
+        {
+            return true;
+        }
+        long haveCount = PackManager.Instance.GetItemCountByID(PackType.Item, itemId);
+        bool isEnough = haveCount >= needCount;
+
+        if (!isEnough)
+        {
+            if (needTips == 1)
+            {
+                ItemConfig itemConfig = ItemConfig.Get(itemId);
+                if (itemConfig != null)
+                {
+                    SysNotifyMgr.Instance.ShowTip("LackItem", itemConfig.ItemName);
+                }
+            }
+            else if (needTips == 2)
+            {
+                ItemTipUtility.Show(itemId, true);
+            }
+        }
+
+        return isEnough;
+    }
 
     #endregion
 
@@ -1353,7 +1455,7 @@
     //     {
     //         return string.Empty;
     //     }
-    //     return StringUtility.Contact(GetEquipSuitName(itmeId, bright), itemConfig.ItemName);
+    //     return StringUtility.Concat(GetEquipSuitName(itmeId, bright), itemConfig.ItemName);
     // }
 
     public static string GetStar(int star)
@@ -1423,11 +1525,43 @@
         GUIUtility.systemCopyBuffer = text;
         Debug.Log("鏂囧瓧宸插鍒跺埌鍓创鏉�: " + text);
     }
-    
+
     //鑾峰彇鍓垏鏉垮唴瀹�
     public static string GetClipboardText()
     {
         return GUIUtility.systemCopyBuffer;
     }
-    
+
+    /// <summary>
+    /// 寮哄埗鍒锋柊Layout锛岃В鍐冲祵濂桳ayout鍜孋ontentSizeFitter鐨勯噸鍙犻棶棰�
+    /// </summary>
+    public static async UniTask ForceRefreshLayout(Transform transform)
+    {
+        await UniTask.DelayFrame(2);
+        // 鍒锋柊鎵�鏈塋ayout缁勪欢
+        var layouts = transform.GetComponentsInChildren<LayoutGroup>(true);
+        foreach (var layout in layouts)
+        {
+            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
+        }
+        await UniTask.DelayFrame(2);
+        // 鍒锋柊鎵�鏈塋ayout缁勪欢
+        foreach (var layout in layouts)
+        {
+            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
+        }
+
+    }
+
+
+    public static void ShowServersPanel(List<int> serverIDList)
+    {
+        if (UIManager.Instance.IsOpened<ServersSmallTipWin>())
+        {
+            UIManager.Instance.CloseWindow<ServersSmallTipWin>();
+        }
+        ServersSmallTipWin.serverIDList = serverIDList;
+        UIManager.Instance.OpenWindow<ServersSmallTipWin>();
+    }
+
 }

--
Gitblit v1.8.0