hch
2025-09-17 f306d23e461ab236ed88173f7b4a5bc35a3e9bc9
Main/Utility/UIHelper.cs
@@ -69,20 +69,28 @@
    public static void SetIconWithMoneyType(this Image _image, int moneyType)
    {
        if (_image == null) return;
        string iconKey = StringUtility.Contact("Money_Type_", moneyType);
        _image.SetSprite(iconKey);
    }
    public static void SetSmallIconWithMoneyType(this Image _image, int moneyType)
    {
        if (_image == null) return;
        string iconKey = StringUtility.Contact("SmallMoney", moneyType);
        _image.SetSprite(iconKey);
        // 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)
    {
        return StringUtility.Contact("Money_Type_", moneyType);
        if (GeneralDefine.MoneyDisplayModel.ContainsKey(moneyType))
        {
            return ItemConfig.Get(GeneralDefine.MoneyDisplayModel[moneyType]).IconKey;
        }
        else
        {
            Debug.LogError("MoneyDisplayModel 未配置货币类型:" + moneyType);
            return "";
        }
    }
    /// <summary>
@@ -178,166 +186,7 @@
        else if (span.TotalMinutes > 1) return Math.Floor(span.TotalMinutes) + Language.Get("L1073");
        else return 1 + Language.Get("L1073");
    }
    /// <summary>
    /// 根据属性获取玩家数据
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    public static ulong GetPropertyValue(PropertyType type)
    {
        switch (type)
        {
            case PropertyType.LV:
                return PlayerDatas.Instance.baseData.LV;
            case PropertyType.POWER:
                return (ulong)PlayerDatas.Instance.baseData.STR;
            case PropertyType.AGILITY:
                return (ulong)PlayerDatas.Instance.baseData.PHY;
            case PropertyType.PHYSIQUE:
                return (ulong)PlayerDatas.Instance.baseData.CON;
            case PropertyType.MENTALITY:
                return (ulong)PlayerDatas.Instance.baseData.PNE;
            case PropertyType.HP:
                return PlayerDatas.Instance.extersion.MaxHP;
            case PropertyType.ATK:
                return (ulong)PlayerDatas.Instance.extersion.MAXATK;
            case PropertyType.DEF:
                return (ulong)PlayerDatas.Instance.extersion.DEF;
            case PropertyType.HIT:
                return (ulong)PlayerDatas.Instance.extersion.HIT;
            case PropertyType.MISS:
                return (ulong)PlayerDatas.Instance.extersion.Miss;
            case PropertyType.ATKSPEED:
                return (ulong)PlayerDatas.Instance.extersion.battleValEx1;
            case PropertyType.CritChance:
                return (ulong)PlayerDatas.Instance.extersion.SuperHitRate;
            case PropertyType.CritHurt:
                return (ulong)PlayerDatas.Instance.extersion.SuperHit;
            case PropertyType.CritResis:
                return (ulong)PlayerDatas.Instance.extersion.SuperHitReduce;
            case PropertyType.HeartHit:
                return (ulong)PlayerDatas.Instance.extersion.luckHitRate;
            case PropertyType.HeartHurt:
                return (ulong)PlayerDatas.Instance.extersion.luckHitVal;
            case PropertyType.HeartResis:
                return (ulong)PlayerDatas.Instance.extersion.LuckyHitRateReduce;
            case PropertyType.SkillHurt:
                return (ulong)PlayerDatas.Instance.extersion.SkillAtkRate;
            case PropertyType.PVPAddHurt:
                return (ulong)PlayerDatas.Instance.extersion.DamagePVP;
            case PropertyType.PVPReduceHurt:
                return PlayerDatas.Instance.GetPlayerDataByType((PlayerDataType)191);
            case PropertyType.LifeReply:
                return (ulong)PlayerDatas.Instance.extersion.HPRestorePer;
            case PropertyType.HurtReflect:
                return (ulong)PlayerDatas.Instance.extersion.DamageBackRate;
            case PropertyType.MoveSpeed:
                return (ulong)PlayerDatas.Instance.extersion.SpeedValue;
            case PropertyType.PetAddHurt:
                return (ulong)PlayerDatas.Instance.extersion.PetDamPer;
            case PropertyType.RealHurt:
                return (ulong)PlayerDatas.Instance.extersion.realATK;
            case PropertyType.RealResis:
                return (ulong)PlayerDatas.Instance.extersion.realDEF;
            case PropertyType.DefyDef:
                return (ulong)PlayerDatas.Instance.extersion.IgnoreDefRate;
            case PropertyType.DefyDefResis:
                return (ulong)PlayerDatas.Instance.extersion.IgnoreDefRateReduce;
            case PropertyType.DefChance:
                return (ulong)PlayerDatas.Instance.extersion.DamChanceDef;
            case PropertyType.BloodHurt:
                return (ulong)PlayerDatas.Instance.extersion.BleedDamage;
            case PropertyType.AktReplyBlood:
                return (ulong)PlayerDatas.Instance.extersion.BattleValEx2;
            case PropertyType.Stun:
                return (ulong)PlayerDatas.Instance.extersion.FaintRate;
            case PropertyType.CtrlResis:
                return (ulong)PlayerDatas.Instance.extersion.FaintDefRate;
            case PropertyType.AddFinalHurt:
                return (ulong)PlayerDatas.Instance.extersion.FinalHurt;
            case PropertyType.ReduceFinalHurt:
                return (ulong)PlayerDatas.Instance.extersion.FinalHurtReduce;
            case PropertyType.PVPAddHurtPer:
                return (ulong)PlayerDatas.Instance.extersion.DamagePerPVP;
            case PropertyType.PVPReduceHurtPer:
                return (ulong)PlayerDatas.Instance.extersion.DamagePerPVPReduce;
            case PropertyType.DleHitChance:
                return (ulong)PlayerDatas.Instance.extersion.ComboDamPerRate;
            case PropertyType.DleHurt:
                return (ulong)PlayerDatas.Instance.extersion.ComboDamPer;
            case PropertyType.ReduceSkillHurtPercent:
                return (ulong)PlayerDatas.Instance.extersion.skillAtkRateReduce;
            case PropertyType.NpcHurtAddPer:
                return (ulong)PlayerDatas.Instance.extersion.NpcHurtAddPer;
            case PropertyType.Luck:
                return (ulong)PlayerDatas.Instance.extersion.luckValue;
            case PropertyType.Mater:
                return (ulong)PlayerDatas.Instance.baseData.mater;
            case PropertyType.Wood:
                return (ulong)PlayerDatas.Instance.baseData.wood;
            case PropertyType.Water:
                return (ulong)PlayerDatas.Instance.baseData.water;
            case PropertyType.Fire:
                return (ulong)PlayerDatas.Instance.baseData.fire;
            case PropertyType.Earth:
                return (ulong)PlayerDatas.Instance.baseData.earth;
            case PropertyType.ReduceCrit:
                return (ulong)PlayerDatas.Instance.baseData.reduceCrit;
            case PropertyType.ReduceHeartHurtPer:
                return (ulong)PlayerDatas.Instance.baseData.reduceHeartHurt;
            case PropertyType.ReduceFinalHurtPer:
                return (ulong)PlayerDatas.Instance.baseData.reduceFinalHurt;
            case PropertyType.AtkPercent:
            case PropertyType.CritHurtPercent:
            case PropertyType.DodgePercent:
                // return (ulong)ModelCenter.Instance.GetModel<ReikiRootModel>().GetReikiPropertyValue((int)type);
                // TODO YYL
                return 0ul;
            case PropertyType.SkillAddPerA:
                return (ulong)PlayerDatas.Instance.baseData.skillAddPerA;
            case PropertyType.SkillAddPerB:
                return (ulong)PlayerDatas.Instance.baseData.skillAddPerB;
            case PropertyType.SkillAddPerC:
                return (ulong)PlayerDatas.Instance.baseData.skillAddPerC;
            case PropertyType.SkillAddPerD:
                return (ulong)PlayerDatas.Instance.baseData.skillAddPerD;
            case PropertyType.SkillAddPerE:
                return (ulong)PlayerDatas.Instance.baseData.skillAddPerE;
            case PropertyType.SkillAddPerF:
                return (ulong)PlayerDatas.Instance.baseData.skillAddPerF;
            case PropertyType.SkillAddPerG:
                return (ulong)PlayerDatas.Instance.baseData.skillAddPerG;
            case PropertyType.SkillReducePerA:
                return (ulong)PlayerDatas.Instance.baseData.skillReducePerA;
            case PropertyType.SkillReducePerB:
                return (ulong)PlayerDatas.Instance.baseData.skillReducePerB;
            case PropertyType.SkillReducePerC:
                return (ulong)PlayerDatas.Instance.baseData.skillReducePerC;
            case PropertyType.SkillReducePerD:
                return (ulong)PlayerDatas.Instance.baseData.skillReducePerD;
            case PropertyType.SkillReducePerE:
                return (ulong)PlayerDatas.Instance.baseData.skillReducePerE;
            case PropertyType.SkillReducePerF:
                return (ulong)PlayerDatas.Instance.baseData.skillReducePerF;
            case PropertyType.SkillReducePerG:
                return (ulong)PlayerDatas.Instance.baseData.skillReducePerG;
            case PropertyType.ReduceSkillCDPer:
                return (ulong)PlayerDatas.Instance.extersion.battleValEx3;
            case PropertyType.AddFinalHurtPer:
                return (ulong)PlayerDatas.Instance.extersion.FunalHurtPer;
            case PropertyType.AddNormalHurt:
                return (ulong)PlayerDatas.Instance.baseData.NormalHurt;
            case PropertyType.AddNormalHurtPer:
                return (ulong)PlayerDatas.Instance.baseData.NormalHurtPer;
            case PropertyType.AddSkillHurt:
                return (ulong)PlayerDatas.Instance.baseData.FabaoHurt;
            case PropertyType.AddSkillHurtPer:
                return (ulong)PlayerDatas.Instance.baseData.FabaoHurtPer;
            case PropertyType.AddPVEHurt:
                return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.DamagePVE);
        }
        return 0;
    }
    /// <summary>
@@ -523,7 +372,7 @@
    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(132, 121, 123, 255);  //84797b
    public static readonly Color s_Gray = new Color32(187, 187, 187, 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
@@ -694,6 +543,8 @@
                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);
@@ -825,7 +676,7 @@
                // 5d1d52 永恒
                return new Color32(93, 29, 82, 128);
            case QualityTextColType.red:
                return s_BrightRedColor;
                return s_DarkRedColor;
        }
        return new Color32(0, 0, 0, 128);
    }
@@ -854,11 +705,11 @@
            case TextColType.Pink:
                return StringUtility.Contact("<color=#", bright ? "f6408d" : "ff7c7c", ">", msg, "</color>");
            case TextColType.Green:
                return StringUtility.Contact("<color=#", bright ? "109d06" : "2ae337", ">", msg, "</color>");
                return StringUtility.Contact("<color=#", bright ? "248B12" : "2ae337", ">", msg, "</color>");
            case TextColType.NavyBrown:
                return StringUtility.Contact("<color=#6e4c31>", msg, "</color>");
            case TextColType.DarkGreen:
                return StringUtility.Contact("<color=#109d06>", msg, "</color>");
                return StringUtility.Contact("<color=#248B12>", msg, "</color>");
            case TextColType.Black:
                return StringUtility.Contact("<color=#000000>", msg, "</color>");
            case TextColType.LightWhite:
@@ -866,7 +717,9 @@
            case TextColType.LightGreen:
                return StringUtility.Contact("<color=#8ddc11>", msg, "</color>");
            case TextColType.Gray:
                return StringUtility.Contact("<color=#84797b>", msg, "</color>");
                return StringUtility.Contact("<color=#bbbbbb>", msg, "</color>");
            case TextColType.NavyGray:
                return StringUtility.Contact("<color=#797979>", msg, "</color>");
            case TextColType.lightYellow:
                return StringUtility.Contact("<color=#fcedb9>", msg, "</color>");
            case TextColType.NavyYellow:
@@ -900,13 +753,37 @@
                return StringUtility.Contact("<color=#dfbbed>", msg, "</color>");
            case TextColType.itembuxiu:
                // 5eeff2 不朽
                return  StringUtility.Contact("<color=#5eeff2>", msg, "</color>");
                return StringUtility.Contact("<color=#5eeff2>", msg, "</color>");
            case TextColType.itemyonghen:
                // f5b4ea 永恒
                return StringUtility.Contact("<color=#f5b4ea>", msg, "</color>");
        }
        return msg;
    }
    public static string AppendColor(Color color, string msg)
    {
        return StringUtility.Contact("<color=#", ColorToHexWithHash(color), ">", msg, "</color>");
    }
    public static string ColorToHexWithHash(Color color, bool includeAlpha = false)
    {
        int r = Mathf.RoundToInt(color.r * 255);
        int g = Mathf.RoundToInt(color.g * 255);
        int b = Mathf.RoundToInt(color.b * 255);
        if (includeAlpha)
        {
            int a = Mathf.RoundToInt(color.a * 255);
            return string.Format("{0:X2}{1:X2}{2:X2}{3:X2}", r, g, b, a);
        }
        else
        {
            return string.Format("{0:X2}{1:X2}{2:X2}", r, g, b);
        }
    }
    //needName 指官职0是否需要名称
    public static string GetRealmName(int realmLv, bool bright = true, bool needName = false)
@@ -920,7 +797,7 @@
        {
            return string.Empty;
        }
        return GetRealmColorByLv(realmLv, config.Name, bright);
        return AppendColor(realmLv, config.Name, bright);
    }
    //strFormat附加 境界名以外的文字
@@ -939,31 +816,31 @@
    //     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("<color=#", bright ? "666666" : "dddddd", ">", msg, "</color>");
            case 2:
                return StringUtility.Contact("<color=#", bright ? "00b337" : "66ff00", ">", msg, "</color>");
            case 3:
                return StringUtility.Contact("<color=#", bright ? "0066ff" : "00c6ff", ">", msg, "</color>");
            case 4:
                return StringUtility.Contact("<color=#", bright ? "ff00f6" : "f000ff", ">", msg, "</color>");
            case 5:
                return StringUtility.Contact("<color=#", bright ? "ff6600" : "ff9000", ">", msg, "</color>");
            case 6:
                return StringUtility.Contact("<color=#", bright ? "ff0000" : "ff0000", ">", msg, "</color>");
            default:
                return msg;
        }
    }
    // 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("<color=#", bright ? "666666" : "dddddd", ">", msg, "</color>");
    //         case 2:
    //             return StringUtility.Contact("<color=#", bright ? "00b337" : "66ff00", ">", msg, "</color>");
    //         case 3:
    //             return StringUtility.Contact("<color=#", bright ? "0066ff" : "00c6ff", ">", msg, "</color>");
    //         case 4:
    //             return StringUtility.Contact("<color=#", bright ? "ff00f6" : "f000ff", ">", msg, "</color>");
    //         case 5:
    //             return StringUtility.Contact("<color=#", bright ? "ff6600" : "ff9000", ">", msg, "</color>");
    //         case 6:
    //             return StringUtility.Contact("<color=#", bright ? "ff0000" : "ff0000", ">", msg, "</color>");
    //         default:
    //             return msg;
    //     }
    // }
    //物品 各功能品质  从精良1品质 对应 3开始
    /// <summary>
@@ -972,7 +849,7 @@
    /// <param name="itemColor"></param>
    /// <param name="msg"></param>
    /// <param name="bright"></param>
    /// <param name="colorGroupType"></param>
    /// <param name="colorGroupType">0 通用功能品质分组精良到神话</param>
    /// <returns></returns>
    public static string AppendColor(int itemColor, string msg, bool bright = true, int colorGroupType = 0)
    {
@@ -1050,7 +927,7 @@
    }
    #endregion
    #region 得到金钱数量根据金钱类型
@@ -1083,8 +960,18 @@
        return 0;
    }
    //货币对应0418类型
    public static Dictionary<int, PlayerDataType> moneyTypeToPlayerDataType = new Dictionary<int, PlayerDataType>()
    {
        {1, PlayerDataType.Gold},
        {2, PlayerDataType.GoldPaper},
        {3, PlayerDataType.Silver},
        {41, PlayerDataType.default26},
        {42, PlayerDataType.default33},
    public static ulong GetMoneyCnt(int moneyType)
    };
    public static long GetMoneyCnt(int moneyType)
    {
        switch (moneyType)
        {
@@ -1102,7 +989,7 @@
                }
            case 18:
                {
                    return (ulong)PlayerDatas.Instance.extersion.honorValue;
                    return PlayerDatas.Instance.extersion.honorValue;
                }
            case 25:
                {
@@ -1111,7 +998,7 @@
                }
            case 24:
                {
                    return (ulong)PlayerDatas.Instance.extersion.runeChip;
                    return PlayerDatas.Instance.extersion.runeChip;
                }
            case 15:
                {
@@ -1232,28 +1119,29 @@
        return 0;
    }
    public static int GetAllVourcher()
    {
        return (int)GetMoneyCnt(98) + (int)GetMoneyCnt(99);
    }
    //显示数量, 格式n/m, 足够绿色不足红色
    public static string ShowUseMoney(int moneyType, ulong useCnt, TextColType engoughColor = TextColType.Green)
    public static string ShowUseMoney(int moneyType, long useCnt, TextColType engoughColor = TextColType.Green)
    {
        ulong cnt = GetMoneyCnt(moneyType);
        return AppendColor(useCnt <= cnt ? engoughColor : TextColType.Red, $"{ReplaceLargeNum(useCnt)}/{ReplaceLargeNum(cnt)}");
        long cnt = GetMoneyCnt(moneyType);
        return AppendColor(useCnt <= cnt ? engoughColor : TextColType.Red, $"{ReplaceLargeNum(cnt)}/{ReplaceLargeNum(useCnt)}");
    }
    public static string ShowUseItem(PackType type, int itemId, ulong useCnt, TextColType engoughColor = TextColType.Green)
    public static string ShowUseItem(PackType type, int itemId, long useCnt, TextColType engoughColor = TextColType.Green)
    {
        ulong cnt = PackManager.Instance.GetItemCountByID(type, itemId);
        return AppendColor(useCnt <= cnt ? engoughColor : TextColType.Red, $"{ReplaceLargeNum(useCnt)}/{ReplaceLargeNum(cnt)}");
        long cnt = PackManager.Instance.GetItemCountByID(type, itemId);
        return AppendColor(useCnt <= cnt ? engoughColor : TextColType.Red, $"{ReplaceLargeNum(cnt)}/{ReplaceLargeNum(useCnt)}");
    }
    #endregion
    #region 得到装备位或者祝福树品质名称 带颜色
    public static string GetQualityNameWithColor(int quality, string format="{0}")
    public static string GetQualityNameWithColor(int quality, string format = "{0}")
    {
        return AppendColor(quality, string.Format(format, Language.Get("equipQuality" + quality)), true, 1);
    }
@@ -1437,4 +1325,11 @@
        return money / scale;
    }
    public static string RemoveColor(string content)
    {
        content = WordAnalysis.Color_Start_Regex.Replace(content, string.Empty);
        content = WordAnalysis.Color_End_Regex.Replace(content, string.Empty);
        return content;
    }
}