using System;
using System.Text;
using UnityEngine;
using System.Linq;
using System.Collections.Generic;
using UnityEngine.UI;
using System.Text.RegularExpressions;
using System.IO;
using LitJson;
///
/// UI辅助类
///
public static class UIHelper
{
public static readonly string no_breaking_space = "\u00A0"; //Text文本框输入空格自动换行问题 替换编码
//不需要提取翻译的文本
private static readonly string[] numbers = new string[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
private static readonly string[] units = new string[] { "十", "百", "千", "万" };
//数字转中文(只做小数字),海外版本调用改函数切换版本请直接返回数字
public static string ChineseNumber(int number)
{
if (number == 0)
return numbers[0];
string result = "";
int unitPlace = 1; // 位数,1 表示十位,2 表示百位,3 表示千位,4 表示万位
bool needZero = false; // 是否需要添加 '零'
while (number > 0)
{
int part = number % 10;
if (part != 0)
{
if (needZero)
result = StringUtility.Contact(numbers[0] + result);
result = numbers[part] + (unitPlace == 1 ? "" : units[unitPlace - 2]) + result; // 单位只在十、百、千、万内部使用
needZero = false;
}
else
{
needZero = true;
}
number /= 10;
unitPlace++;
}
if (result.StartsWith("一十"))
{
result = result.Substring(1);
}
if (result.EndsWith("零"))
{
result = result.Replace("零", "");
}
return result;
}
#region UI通用
public static void SetIconWithMoneyType(this Image _image, int moneyType)
{
if (_image == null) return;
// string iconKey = StringUtility.Contact("Money_Type_", moneyType);
if (GeneralDefine.MoneyDisplayModel.ContainsKey(moneyType))
{
_image.SetOrgSprite(ItemConfig.Get(GeneralDefine.MoneyDisplayModel[moneyType]).IconKey);
}
else
{
Debug.LogError("MoneyDisplayModel 为配置货币类型:" + moneyType);
}
}
public static string GetIconNameWithMoneyType(int moneyType)
{
if (GeneralDefine.MoneyDisplayModel.ContainsKey(moneyType))
{
return ItemConfig.Get(GeneralDefine.MoneyDisplayModel[moneyType]).IconKey;
}
else
{
Debug.LogError("MoneyDisplayModel 为配置货币类型:" + moneyType);
return "";
}
}
///
/// 分离字符串插入空格
///
public static string GetSuitNameByName(string attrName)
{
string suitStr = "";
for (int i = 0; i < attrName.Length; i++)
{
if (i != attrName.Length - 1)
{
if (attrName.Length == 2)
{
suitStr = StringUtility.Contact(suitStr, attrName[i], " ");
}
else if (attrName.Length == 3)
{
suitStr = StringUtility.Contact(suitStr, attrName[i], " ");
}
else
{
suitStr = StringUtility.Contact(suitStr, attrName[i]);
}
}
else
{
suitStr = StringUtility.Contact(suitStr, attrName[i]);
}
}
return suitStr;
}
// 基于itemColor 下,ColorEx做二级区分
public static void SetItemBackGround(this Image _image, int itemColor)
{
if (_image == null)
{
return;
}
_image.SetSprite($"ItemBG{itemColor}");
}
///
/// 剩余时间
///
/// 格式 年-月-日 小时:分钟:秒
/// 毫秒
///
private static Regex TimeRegex = new Regex(@"([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)", RegexOptions.Singleline);
public static int GetSurplusSeconds(string startTime, int seconds)
{
string start = GetTime(startTime);
if (start.Equals(string.Empty))
{
return 0;
}
DateTime s = Convert.ToDateTime(start);
DateTime t = s.AddTicks(seconds * TimeSpan.TicksPerSecond);
DateTime n = TimeUtility.ServerNow;
TimeSpan span = t - n;
return Mathf.Max(0, (int)span.TotalSeconds);
}
public static string GetTime(string startTime)
{
if (!TimeRegex.IsMatch(startTime))
{
return string.Empty;
}
Match match = TimeRegex.Match(startTime);
int year = int.Parse(match.Groups[1].Value);
int month = int.Parse(match.Groups[2].Value);
int day = int.Parse(match.Groups[3].Value);
int h = int.Parse(match.Groups[4].Value);
int mi = int.Parse(match.Groups[5].Value);
int sc = int.Parse(match.Groups[6].Value);
return string.Format("{0}-{1}-{2} {3}:{4}:{5}", year, month, day, h, mi, sc);
}
///
/// 获取消逝的时间
///
///
///
public static string GetFadeTime(uint lastTime)
{
DateTime n = TimeUtility.ServerNow;
TimeSpan span = n - TimeUtility.GetTime(lastTime);
if (span.TotalDays > 1) return Math.Floor(span.TotalDays) + Language.Get("L1074");
else if (span.TotalHours > 1) return Math.Floor(span.TotalHours) + Language.Get("L1072");
else if (span.TotalMinutes > 1) return Math.Floor(span.TotalMinutes) + Language.Get("L1073");
else return 1 + Language.Get("L1073");
}
///
/// 换行
///
///
///
private static Regex NewLineRegex = new Regex(@"", RegexOptions.Singleline);
public static string ReplaceNewLine(string val)
{
return val.Replace(@"", "\n");
}
public static double numto2Decimals(double value)
{
//为什么要value * 1000/10 这么写,特殊的数字会有问题,比如36.80000,会(int)(value * 100)被计算为3679
//测试下只有30几点8000的才会这样
return (int)(value * 1000 / 10) / 100.00;
}
///
/// 大数值转化 格式 最多两个小数
/// K -千,M -百萬,B-十億,T -萬億
/// 不四舍五入,不用Math.Round,因为当玩家只有23.3456,但是Math.Round会显示23.35, 当购买价格为23.35时无法购买的
///
public static string ReplaceLargeNum(double num)
{
const long K = 10000; //国内为万,海外为千
const long M = K * 10000;
const long B = M * 10000;
const long T = B * 10000;
if (num >= T)
{
return StringUtility.Contact(numto2Decimals(num / T).ToString("0.##"), Language.Get("L1070_0"));
}
else if (num >= B)
{
return StringUtility.Contact(numto2Decimals(num / B).ToString("0.##"), Language.Get("L1070_1"));
}
else if (num >= M)
{
return StringUtility.Contact(numto2Decimals(num / M).ToString("0.#"), Language.Get("L1070"));
}
else if (num >= K)
{
return StringUtility.Contact(numto2Decimals(num / K).ToString("0.#"), Language.Get("L1071"));
}
else
{
return numto2Decimals(num).ToString("0.#");
}
}
//用于美术字 统一用字母KMBT代表使用,小数点用.
public static string ReplaceLargeArtNum(double num)
{
const long K = 10000; //国内为万,海外为千
const long M = K * 10000;
const long B = M * 10000;
const long T = B * 10000;
if (num >= T)
{
return StringUtility.Contact(numto2Decimals(num / T).ToString("0.##"), "t");
}
else if (num >= B)
{
return StringUtility.Contact(numto2Decimals(num / B).ToString("0.##"), "b");
}
else if (num >= M)
{
return StringUtility.Contact(numto2Decimals(num / M).ToString("0.#"), "m");
}
else if (num >= K)
{
return StringUtility.Contact(numto2Decimals(num / K).ToString("0.#"), "k");
}
else
{
return numto2Decimals(num).ToString("0.#");
}
}
// 转化大数值带单位的显示,如果小于200000则显示原值,否则显示大数值
public static string ReplaceLargeNumEx(double num)
{
if (num < 200000)
{
//根据界面的显示假定值 200000,可根据实际情况调整
return GetNumFormat(num);
}
else
{
return ReplaceLargeNum(num);
}
}
//显示最多两位小数,并按地区显示格式
// 如中文用F2 显示 1111.34,英文用N2 显示 1,111.34(带逗号)
public static string GetNumFormat(double num)
{
if (num == (int)num)
{
return num.ToString("F0");
}
return num.ToString("F2").TrimEnd('0').TrimEnd('.');
}
public static float ReplacePercentage(float num, int isPer, int decimals = 1)
{
if (isPer == 1 || isPer == 2)
{
return (float)Math.Round(num / 100, decimals);
}
else
{
return (int)num;
}
}
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)
{
if (s_SpecialCharacterRegex.IsMatch(str))
{
return true;
}
if (s_AsciiCharacterRegex.IsMatch(str))
{
return true;
}
return false;
}
public static string GetColorNameByItemColor(int itemColor)
{
switch (itemColor)
{
case 1:
return Language.Get("Market_Text_42");
case 2:
return Language.Get("Market_Text_43");
case 3:
return Language.Get("Market_Text_44");
case 4:
return Language.Get("Market_Text_45");
case 5:
return Language.Get("Market_Text_46");
case 6:
case 7:
case 8:
return Language.Get("Market_Text_47");
case 9:
return Language.Get("Market_Text_471");
}
return "";
}
#endregion
#region 文字色值 Bright 和 Dark指背景色系是明还是暗,暗底亮字,亮底暗字的规则
public static readonly Color s_BrightPinkColor = new Color32(246, 64, 141, 255);
public static readonly Color s_BrightRedColor = new Color32(234, 38, 30, 255);
public static readonly Color s_BrightPurpleColor = new Color32(218, 72, 213, 255);
public static readonly Color s_BrightBlueColor = new Color32(0, 107, 227, 255); //006BE3FF
public static readonly Color s_BrightOrangeColor = new Color32(255, 103, 1, 255); //FF6701FF
public static readonly Color s_BrightWhiteColor = new Color32(255, 255, 255, 255); //ffffff //new Color32(104, 104, 104, 255); //686868
public static readonly Color s_BrightGreenColor = new Color32(36, 139, 18, 255); //248b12
public static readonly Color s_DarkPinkColor = new Color32(255, 124, 124, 255);
public static readonly Color s_DarkRedColor = new Color32(234, 38, 30, 255);
public static readonly Color s_DarkPurpleColor = new Color32(236, 75, 246, 255);
public static readonly Color s_DarkBlueColor = new Color32(49, 206, 251, 255);//31cefb
public static readonly Color s_DarkOrangeColor = new Color32(248, 152, 59, 255);
public static readonly Color s_DarkWhiteColor = new Color32(255, 255, 255, 255); //ffffff
public static readonly Color s_DarkGreenColor = new Color32(42, 227, 55, 255);//2ae337
public static readonly Color s_NavyBrown = new Color32(110, 76, 49, 255);//6e4c31
public static readonly Color s_Black = new Color32(0, 0, 0, 255);
public static readonly Color s_NavyYellow = new Color32(242, 238, 2, 255); //f2ee02
public static readonly Color s_LightGreen = new Color32(42, 227, 55, 255);//2ae337
public static readonly Color s_LightWhite = new Color32(245, 246, 230, 255); //f5f6e6
public static readonly Color s_Gray = new Color32(104, 104, 104,255); //bbbbbb
public static readonly Color s_Gold = new Color32(255, 239, 71, 255);//ffef47
public static readonly Color s_EarthYellow = new Color32(248, 152, 59, 255);//f8983b
public static readonly Color s_BrightDanLV0 = new Color32(102, 102, 102, 255); //666666
public static readonly Color s_BrightDanLV1 = new Color32(148, 96, 255, 255); //9460ff
public static readonly Color s_BrightDanLV2 = new Color32(0, 102, 255, 255); //0066ff
public static readonly Color s_BrightDanLV3 = new Color32(0, 179, 55, 255); //00b337
public static readonly Color s_BrightDanLV4 = new Color32(255, 102, 0, 255); //ff6600
public static readonly Color s_BrightDanLV5 = new Color32(255, 0, 0, 255); //ff0000
public static readonly Color s_BrightDanLV6 = new Color32(255, 0, 246, 255); //ff00f6
public static readonly Color s_GrayDanLV0 = new Color32(221, 221, 221, 255); //dddddd
public static readonly Color s_GrayDanLV1 = new Color32(121, 153, 255, 255); //7999ff
public static readonly Color s_GrayDanLV2 = new Color32(0, 198, 255, 255); //00c6ff
public static readonly Color s_GrayDanLV3 = new Color32(102, 255, 0, 255); //66ff00
public static readonly Color s_GrayDanLV4 = new Color32(255, 144, 0, 255); //ff9000
public static readonly Color s_GrayDanLV5 = new Color32(255, 0, 0, 255); //ff0000
public static readonly Color s_GrayDanLV6 = new Color32(240, 0, 255, 255); //f000ff
// public static Color GetDanLVColor(int danLv, bool bright = true)
// {
// var crossDanLVConfig = CrossServerArenaConfig.Get(danLv);
// if (crossDanLVConfig != null)
// {
// switch (crossDanLVConfig.DanType)
// {
// case 0:
// return bright ? s_BrightDanLV0 : s_GrayDanLV0;
// case 1:
// return bright ? s_BrightDanLV1 : s_GrayDanLV1;
// case 2:
// return bright ? s_BrightDanLV2 : s_GrayDanLV2;
// case 3:
// return bright ? s_BrightDanLV3 : s_GrayDanLV3;
// case 4:
// return bright ? s_BrightDanLV4 : s_GrayDanLV4;
// case 5:
// return bright ? s_BrightDanLV5 : s_GrayDanLV5;
// case 6:
// return bright ? s_BrightDanLV6 : s_GrayDanLV6;
// }
// }
// return Color.white;
// }
// public static string AppendDanLVNameColor(int danLv, bool bright = true)
// {
// var crossDanLVConfig = CrossServerArenaConfig.Get(danLv);
// if (crossDanLVConfig == null)
// {
// return string.Empty;
// }
// var name = crossDanLVConfig.Name;
// switch (crossDanLVConfig.DanType)
// {
// case 0:
// return StringUtility.Contact("", name, "");
// case 1:
// return StringUtility.Contact("", name, "");
// case 2:
// return StringUtility.Contact("", name, "");
// case 3:
// return StringUtility.Contact("", name, "");
// case 4:
// return StringUtility.Contact("", name, "");
// case 5:
// return StringUtility.Contact("", name, "");
// case 6:
// return StringUtility.Contact("", name, "");
// }
// return name;
// }
//物品 各功能品质 从精良1品质 对应 3开始
public static Color GetUIColorByFunc(int itemColor, bool bright = true)
{
return GetUIColor(itemColor + 2, bright);
}
//对应品质(树);物品 各功能品质 用GetUIColorByFunc
public static Color GetUIColor(int itemColor, bool bright = true)
{
switch (itemColor)
{
case 0:
case 1:
return GetUIColor(TextColType.Gray, bright);
case 2:
return GetUIColor(TextColType.White, bright);
case 3:
return GetUIColor(TextColType.itemjingliang, bright);
case 4:
return GetUIColor(TextColType.itemxiyou, bright);
case 5:
return GetUIColor(TextColType.itemshishi, bright);
case 6:
return GetUIColor(TextColType.itemchuanqi, bright);
case 7:
return GetUIColor(TextColType.itemshenhua, bright);
case 8:
return GetUIColor(TextColType.itemwuxia, bright);
case 9:
return GetUIColor(TextColType.itemanjin, bright);
case 10:
case 11:
case 12:
case 13:
case 14:
return GetUIColor(TextColType.itemjueyi, bright);
case 15:
case 16:
case 17:
case 18:
case 19:
return GetUIColor(TextColType.itemyuanzu, bright);
case 20:
case 21:
case 22:
case 23:
case 24:
return GetUIColor(TextColType.itembuxiu, bright);
case 25:
case 26:
case 27:
case 28:
case 29:
return GetUIColor(TextColType.itemyonghen, bright);
}
return GetUIColor(TextColType.White, bright);
}
public static Color GetUIColor(TextColType type, bool bright = true)
{
//Bright 和 Dark指背景色系是明还是暗,暗底亮字,亮底暗字的规则
switch (type)
{
case TextColType.None:
case TextColType.White:
return bright ? s_BrightWhiteColor : s_DarkWhiteColor; // s_BrightWhiteColor 是亮底灰色
case TextColType.titleSelectColor:
return new Color32(127, 65, 57, 255);
case TextColType.titleUnSelectColor:
return new Color32(110, 92, 96, 255);
case TextColType.Red:
return bright ? s_BrightRedColor : s_DarkRedColor;
case TextColType.Pink:
return bright ? s_BrightPinkColor : s_DarkPinkColor;
case TextColType.Green:
return bright ? s_BrightGreenColor : s_DarkGreenColor;
case TextColType.NavyBrown:
return s_NavyBrown;
case TextColType.DarkGreen:
return s_BrightGreenColor;
case TextColType.Black:
return s_Black;
case TextColType.lightYellow: //浅黄色
return new Color32(252, 237, 185, 255);
case TextColType.NavyYellow:
return s_NavyYellow;
case TextColType.LightGreen:
return s_LightGreen;
case TextColType.LightWhite:
return s_LightWhite;
case TextColType.Gray:
return s_Gray;
case TextColType.NavyGray:
return new Color32(121, 121, 121, 255);
case TextColType.itemjingliang:
// 729de4 精良
return new Color32(114, 157, 228, 255);
case TextColType.itemxiyou:
// c87bfa稀有
return new Color32(199, 123, 253, 255);
case TextColType.itemshishi:
// f6de56 史诗
return new Color32(246, 222, 86, 255);
case TextColType.itemchuanqi:
// fe8534 传奇
return new Color32(254, 133, 52, 255);
case TextColType.itemshenhua:
// fe4a47 神话
return new Color32(254, 66, 71, 255);
case TextColType.itemwuxia:
// eb5ce9 无瑕
return new Color32(235, 90, 233, 255);
case TextColType.itemanjin:
// f9e29f 暗金
return new Color32(254, 181, 68, 255);
case TextColType.itemjueyi:
// cdfef2 绝艺
return new Color32(205, 239, 242, 255);
case TextColType.itemyuanzu:
// dfbbed 元祖
return new Color32(223, 187, 237, 255);
case TextColType.itembuxiu:
// 5eeff2 不朽
return new Color32(94, 239, 242, 255);
case TextColType.itemyonghen:
// f5b4ea 永恒
return new Color32(245, 180, 234, 255);
}
return bright ? s_BrightWhiteColor : s_DarkWhiteColor;
}
//对应品质(树);物品 各功能品质 用GetUIOutlineColorByFunc
public static Color GetUIOutlineColor(int quality)
{
switch (quality)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
return GetUIOutlineColor((QualityTextColType)quality);
case 10:
case 11:
case 12:
case 13:
case 14:
return GetUIOutlineColor(QualityTextColType.itemjueyi);
case 15:
case 16:
case 17:
case 18:
case 19:
return GetUIOutlineColor(QualityTextColType.itemyuanzu);
case 20:
case 21:
case 22:
case 23:
case 24:
return GetUIOutlineColor(QualityTextColType.itembuxiu);
case 25:
case 26:
case 27:
case 28:
case 29:
return GetUIOutlineColor(QualityTextColType.itemyonghen);
}
return GetUIOutlineColor(QualityTextColType.itemputong);
}
//物品 各功能品质 从精良1品质 对应 3开始
public static Color GetUIOutlineColorByFunc(int quality)
{
return GetUIOutlineColor((QualityTextColType)(quality + 2));
}
//描边颜色,对应品质(树)
public static Color GetUIOutlineColor(QualityTextColType type)
{
switch (type)
{
case QualityTextColType.itemcucao:
// 2d2d2d 粗糙
return new Color32(45, 45, 45, 128);
case QualityTextColType.itemputong:
// 424242 普通
return new Color32(66, 66, 66, 128);
case QualityTextColType.itemjingliang:
// 172543 精良
return new Color32(23, 37, 67, 128);
case QualityTextColType.itemxiyou:
// 2a0f30 稀有
return new Color32(42, 15, 48, 128);
case QualityTextColType.itemshishi:
// 4a2f00 史诗
return new Color32(74, 47, 0, 128);
case QualityTextColType.itemchuanqi:
// 451800 传奇
return new Color32(69, 24, 0, 128);
case QualityTextColType.itemshenhua:
// 510000 神话
return new Color32(81, 0, 0, 128);
case QualityTextColType.itemwuxia:
// 43003e 无瑕
return new Color32(67, 0, 62, 128);
case QualityTextColType.itemanjin:
// 6f4401 暗金
return new Color32(111, 68, 1, 128);
case QualityTextColType.itemjueyi:
// 203995 绝艺
return new Color32(32, 57, 149, 128);
case QualityTextColType.itemyuanzu:
// 461f5d 元祖
return new Color32(70, 31, 93, 128);
case QualityTextColType.itembuxiu:
// 2e3975 不朽
return new Color32(46, 57, 117, 128);
case QualityTextColType.itemyonghen:
// 5d1d52 永恒
return new Color32(93, 29, 82, 128);
case QualityTextColType.red:
return s_BrightRedColor;
}
return new Color32(0, 0, 0, 128);
}
// private static Regex m_TextColorRegex = new Regex("(.*)", RegexOptions.Singleline);
public static string AppendColor(TextColType type, string msg, bool bright = true)
{
// if (m_TextColorRegex.IsMatch(msg) && msg.ToLower().StartsWith(""))
// {
// Match match = m_TextColorRegex.Match(msg);
// msg = match.Groups[1].Value;
// }
switch (type)
{
case TextColType.None:
case TextColType.White:
return StringUtility.Contact("", msg, "");
case TextColType.titleSelectColor:
return StringUtility.Contact("", msg, "");
case TextColType.titleUnSelectColor:
return StringUtility.Contact("", msg, "");
case TextColType.Red:
return StringUtility.Contact("", msg, "");
case TextColType.Pink:
return StringUtility.Contact("", msg, "");
case TextColType.Green:
return StringUtility.Contact("", msg, "");
case TextColType.NavyBrown:
return StringUtility.Contact("", msg, "");
case TextColType.DarkGreen:
return StringUtility.Contact("", msg, "");
case TextColType.Black:
return StringUtility.Contact("", msg, "");
case TextColType.LightWhite:
return StringUtility.Contact("", msg, "");
case TextColType.LightGreen:
return StringUtility.Contact("", msg, "");
case TextColType.Gray:
return StringUtility.Contact("", msg, "");
case TextColType.NavyGray:
return StringUtility.Contact("", msg, "");
case TextColType.lightYellow:
return StringUtility.Contact("", msg, "");
case TextColType.NavyYellow:
return StringUtility.Contact("", msg, "");
case TextColType.itemjingliang:
// 729de4 精良
return StringUtility.Contact("", msg, "");
case TextColType.itemxiyou:
// c87bfa稀有
return StringUtility.Contact("", msg, "");
case TextColType.itemshishi:
// f6de56 史诗
return StringUtility.Contact("", msg, "");
case TextColType.itemchuanqi:
// fe8534 传奇
return StringUtility.Contact("", msg, "");
case TextColType.itemshenhua:
// fe4a47 神话
return StringUtility.Contact("", msg, "");
case TextColType.itemwuxia:
// eb5ce9 无瑕
return StringUtility.Contact("", msg, "");
case TextColType.itemanjin:
// f9e29f 暗金
return StringUtility.Contact("", msg, "");
case TextColType.itemjueyi:
// cdfef2 绝艺
return StringUtility.Contact("", msg, "");
case TextColType.itemyuanzu:
// dfbbed 元祖
return StringUtility.Contact("", msg, "");
case TextColType.itembuxiu:
// 5eeff2 不朽
return StringUtility.Contact("", msg, "");
case TextColType.itemyonghen:
// f5b4ea 永恒
return StringUtility.Contact("", msg, "");
}
return msg;
}
//needName 指官职0是否需要名称
public static string GetRealmName(int realmLv, bool bright = true, bool needName = false)
{
if (realmLv <= 0 && !needName)
{
return string.Empty;
}
var config = RealmConfig.Get(realmLv);
if (config == null)
{
return string.Empty;
}
return AppendColor(realmLv, config.Name, bright);
}
//strFormat附加 境界名以外的文字
//needName 指境界0是否需要名称
// public static string GetRealmNameEx(int realmLv, string strFormat, bool bright = false, bool needName = false)
// {
// if (realmLv <= 0 && !needName)
// {
// return string.Empty;
// }
// var config = RealmConfig.Get(realmLv);
// if (config == null)
// {
// return string.Empty;
// }
// return GetRealmColorByLv(realmLv, string.Format(strFormat, config.Name), bright);
// }
// public static string GetRealmColorByLv(int realmLv, string msg, bool bright = true)
// {
// var config = RealmConfig.Get(realmLv);
// if (config == null)
// {
// return string.Empty;
// }
// switch (config.Quality)
// {
// case 1:
// return StringUtility.Contact("", msg, "");
// case 2:
// return StringUtility.Contact("", msg, "");
// case 3:
// return StringUtility.Contact("", msg, "");
// case 4:
// return StringUtility.Contact("", msg, "");
// case 5:
// return StringUtility.Contact("", msg, "");
// case 6:
// return StringUtility.Contact("", msg, "");
// default:
// return msg;
// }
// }
//物品 各功能品质 从精良1品质 对应 3开始
///
/// 颜色定义根据分组处理,如普通物品的颜色精良是1开始,树和装备也是粗糙1开始,需要调整匹配
///
///
///
///
///
///
public static string AppendColor(int itemColor, string msg, bool bright = true, int colorGroupType = 0)
{
if (colorGroupType == 0)
{
itemColor = itemColor + 2;
}
switch (itemColor)
{
case 1:
return AppendColor(TextColType.Gray, msg, bright);
case 2:
return AppendColor(TextColType.White, msg, bright);
case 3:
return AppendColor(TextColType.itemjingliang, msg, bright);
case 4:
return AppendColor(TextColType.itemxiyou, msg, bright);
case 5:
return AppendColor(TextColType.itemshishi, msg, bright);
case 6:
return AppendColor(TextColType.itemchuanqi, msg, bright);
case 7:
return AppendColor(TextColType.itemshenhua, msg, bright);
case 8:
return AppendColor(TextColType.itemwuxia, msg, bright);
case 9:
return AppendColor(TextColType.itemanjin, msg, bright);
case 10:
case 11:
case 12:
case 13:
case 14:
return AppendColor(TextColType.itemjueyi, msg, bright);
case 15:
case 16:
case 17:
case 18:
case 19:
return AppendColor(TextColType.itemyuanzu, msg, bright);
case 20:
case 21:
case 22:
case 23:
case 24:
return AppendColor(TextColType.itembuxiu, msg, bright);
case 25:
case 26:
case 27:
case 28:
case 29:
return AppendColor(TextColType.itemyonghen, msg, bright);
}
return msg;
}
public static Color GetPropertyColor(int property)
{
switch ((PropertyType)property)
{
case PropertyType.Mater:
return s_Gold;
case PropertyType.Wood:
return s_LightGreen;
case PropertyType.Water:
return s_DarkBlueColor;
case PropertyType.Fire:
return s_GrayDanLV5;
case PropertyType.Earth:
return s_EarthYellow;
}
return s_NavyBrown;
}
#endregion
#region 得到金钱数量根据金钱类型
//货币单位的显示,海外显示逗号, 国内不加逗号
public static string GetMoneyFormat(double money)
{
if (money == (int)money)
{
return money.ToString("F0");
}
return money.ToString("F2").TrimEnd('0').TrimEnd('.');
//return money.ToString();
}
//仅用于显示 仙玉和灵石的特殊处理,存在负数情况,如GM惩罚扣除货币
public static int GetMoneyCntEx(int moneyType)
{
switch (moneyType)
{
case 1:
{
return (int)(PlayerDatas.Instance.baseData.diamond - PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default5));
}
case 2:
{
return (int)(PlayerDatas.Instance.baseData.bindDiamond - PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default6));
}
}
return 0;
}
//货币对应0418类型
public static Dictionary moneyTypeToPlayerDataType = new Dictionary()
{
{1, PlayerDataType.Gold},
{2, PlayerDataType.GoldPaper},
{3, PlayerDataType.Silver},
{41, PlayerDataType.default26},
{42, PlayerDataType.default33},
};
public static long GetMoneyCnt(int moneyType)
{
switch (moneyType)
{
case 1:
{
return PlayerDatas.Instance.baseData.diamond;
}
case 2:
{
return PlayerDatas.Instance.baseData.bindDiamond;
}
case 3:
{
return PlayerDatas.Instance.baseData.allCopper;
}
case 18:
{
return PlayerDatas.Instance.extersion.honorValue;
}
case 25:
{
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.CDBPlayerRefresh_TreasureScore);
//return (ulong)ModelCenter.Instance.GetModel().GetTCBPlayerData(PlayerDataType.CDBPlayerRefresh_TreasureScore);
}
case 24:
{
return PlayerDatas.Instance.extersion.runeChip;
}
case 15:
{
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.UnionLiven);
//return (ulong)ModelCenter.Instance.GetModel().GetTCBPlayerData(PlayerDataType.UnionLiven);
}
case 17:
{
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.FBHelpPoint);
//return (ulong)ModelCenter.Instance.GetModel().GetTCBPlayerData(PlayerDataType.FBHelpPoint);
}
case 27:
{
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.CDBPlayerRefresh_Danjing);
//return (ulong)ModelCenter.Instance.GetModel().GetTCBPlayerData(PlayerDataType.CDBPlayerRefresh_Danjing);
}
case 28:
{
return PlayerDatas.Instance.extersion.soulDust; //废弃了用44
}
case 29:
{
return PlayerDatas.Instance.extersion.soulSplinters;
}
case 30:
{
return PlayerDatas.Instance.extersion.soulCore;
}
case 32:
{
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default4);
}
case 34:
{
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default13);
}
case 35:
{
//功德点
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default14);
}
case 37:
{
//机缘点
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default17);
}
case 39:
{
//成就积分
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default19);
}
case 40:
{
//万界积分
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default20);
}
case 41:
{
//战锤
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default26);
}
case 42:
{
//将星玉髓
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default33);
}
case 43:
{
//凭证积分
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default34);
}
case 44:
{
//聚魂精华
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default35);
}
case 45:
{
//骑宠积分
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default37);
}
case 46:
{
//古宝养成货币
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default38);
}
case 47:
{
//天道币
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default39);
}
case 49:
{
//仙缘积分
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default42);
}
case 50:
{
//幻境阁积分
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default43);
}
case 51:
{
//武将招募积分
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default44);
}
case 98:
{
//过期型代金券
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default41);
}
case 99:
{
//代金券
return PlayerDatas.Instance.baseData.ExAttr11;
}
}
return 0;
}
public static int GetAllVourcher()
{
return (int)GetMoneyCnt(98) + (int)GetMoneyCnt(99);
}
//显示数量, 格式n/m, 足够绿色不足红色
public static string ShowUseMoney(int moneyType, long useCnt, TextColType engoughColor = TextColType.Green)
{
long cnt = GetMoneyCnt(moneyType);
return AppendColor(useCnt <= cnt ? engoughColor : TextColType.Red, $"{ReplaceLargeNum(useCnt)}/{ReplaceLargeNum(cnt)}");
}
public static string ShowUseItem(PackType type, int itemId, long useCnt, TextColType engoughColor = TextColType.Green)
{
long cnt = PackManager.Instance.GetItemCountByID(type, itemId);
return AppendColor(useCnt <= cnt ? engoughColor : TextColType.Red, $"{ReplaceLargeNum(useCnt)}/{ReplaceLargeNum(cnt)}");
}
#endregion
#region 得到装备位或者祝福树品质名称 带颜色
public static string GetQualityNameWithColor(int quality, string format="{0}")
{
return AppendColor(quality, string.Format(format, Language.Get("equipQuality" + quality)), true, 1);
}
#endregion
#region 服务端发过来文字显示不出来问题
public static string ServerStringTrim(string str)
{
if (!string.IsNullOrEmpty(str))
{
str = str.Replace("\0", "");
str = str.Replace("\x00", "");
return str;
}
else
{
return string.Empty;
}
}
#endregion
//账号:706907@1@hyyngame@s30,服务器ID:30
public static int GetServerIDByAccount(string account)
{
string[] strArray = account.Split('@');
if (strArray.Length < 2)
{
//判断长度2不是一个实际长度,一般都是大于2
return 0;
}
if (strArray[strArray.Length - 1].Length < 2)
return 0;
int id = 0;
int.TryParse(strArray[strArray.Length - 1].Substring(1), out id);
return id;
}
#region 获取间隔奖励
public static int GetIntervalAward(ICollection _keys, int _present)
{
foreach (var _key in _keys)
{
if (_present <= _key)
{
return _key;
}
}
return _keys.Last();
}
#endregion
public static string GetGrade(int _star)
{
switch (_star)
{
case 5:
return "S";
case 4:
return "A";
case 3:
return "B";
case 2:
return "C";
case 1:
return "D";
}
return "D";
}
public static string TrimContentToServer(string content)
{
content = WordAnalysis.Color_Start_Regex.Replace(content, string.Empty);
content = WordAnalysis.Color_End_Regex.Replace(content, string.Empty);
content = content.Replace("=", string.Empty);
content = content.Replace(" ", string.Empty);
return content;
}
public static bool SatisfyNameLength(string name, out int error)
{
error = 0;
//bool pureChinese = Regex.IsMatch(name, "^[\u4e00-\u9fa5]+$");
//var chsCount = GetChsCount(name);
int length = Encoding.Default.GetBytes(name).Length;
var maxlength = 20;
var minlength = 3;
if (length > maxlength)
{
error = 1;
}
else if (length < minlength)
{
error = 2;
}
return error == 0;
}
public static int GetChsCount(string name)
{
var count = 0;
for (int i = 0; i < name.Length; i++)
{
if (Regex.IsMatch(name[i].ToString(), "[\u4e00-\u9fa5]"))
{
count++;
}
}
return count;
}
// public static string GetEquipSuitName(int itemId, bool bright = true)
// {
// if (ItemLogicUtility.Instance.IsSuitEquip(itemId))
// {
// var itemConfig = ItemConfig.Get(itemId);
// return AppendColor(TextColType.Green, EquipModel.GetSuitName(itemConfig.LV), bright);
// }
// return string.Empty;
// }
// public static string GetItemName(int itmeId, bool bright = true)
// {
// var itemConfig = ItemConfig.Get(itmeId);
// if (itemConfig == null)
// {
// return string.Empty;
// }
// return StringUtility.Contact(GetEquipSuitName(itmeId, bright), itemConfig.ItemName);
// }
public static string GetStar(int star)
{
switch (star)
{
case 5:
return "S";
case 4:
return "A";
case 3:
return "B";
case 2:
return "C";
case 1:
return "D";
}
return string.Empty;
}
//转为s1,s2,s3格式
public static string GetServers(string serverIDRangeInfo)
{
var serverList = new List();
if (string.IsNullOrEmpty(serverIDRangeInfo) || serverIDRangeInfo == "[]")
{
return "all";
}
var serverArray = JsonMapper.ToObject(serverIDRangeInfo);
for (int i = 0; i < serverArray.Length; i++)
{
int startID = serverArray[i][0];
int endID = serverArray[i][1];
for (int j = startID; j <= endID; j++)
{
var serverName = ServerListCenter.Instance.GetServerName(j);
serverList.Add(serverName);
//太长会导致界面顶点数超过65000
if (serverList.Count > 1000)
return string.Join(", ", serverList.ToArray());
}
}
return string.Join(", ", serverList.ToArray());
}
//不同版本现金的单位不一样,比如越南盾是整数,下发是原值;美元和RMB是小数,下发是原值的100
public static float GetRealCoin(int money, float scale = 100.0f)
{
return money / scale;
}
}