84 lines
2.6 KiB
C#
84 lines
2.6 KiB
C#
using SepCore.Definition;
|
|
|
|
namespace SepCore.CustomUtility
|
|
{
|
|
public static class WeaponUtility
|
|
{
|
|
public const int IdMultiplier = 1000;
|
|
|
|
/// <summary>
|
|
/// 根据武器种类与品质换算武器配置编号。
|
|
/// </summary>
|
|
public static int GetWeaponId(WeaponType weaponType, Rarity rarity = Rarity.White)
|
|
{
|
|
return (int)weaponType * IdMultiplier + (int)rarity;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据武器编号反推武器种类。
|
|
/// </summary>
|
|
public static WeaponType GetWeaponType(int weaponId)
|
|
{
|
|
return (WeaponType)(weaponId / IdMultiplier);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据武器编号反推武器品质。
|
|
/// </summary>
|
|
public static Rarity GetRarity(int weaponId)
|
|
{
|
|
return (Rarity)(weaponId % IdMultiplier);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取指定种类与品质的武器配置。
|
|
/// </summary>
|
|
public static WeaponConfig GetWeaponConfig(WeaponType weaponType, Rarity rarity = Rarity.White)
|
|
{
|
|
return GameEntry.Luban.Get<WeaponConfig>(GetWeaponId(weaponType, rarity));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取指定武器编号的武器配置。
|
|
/// </summary>
|
|
public static WeaponConfig GetWeaponConfig(int weaponId)
|
|
{
|
|
return GameEntry.Luban.Get<WeaponConfig>(weaponId);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取同种武器的下一阶品质配置(用于武器合成升阶)。
|
|
/// 若已达到最高品质(Red)则返回 false。
|
|
/// </summary>
|
|
public static bool TryGetNextTierConfig(WeaponConfig current, out WeaponConfig nextTierConfig)
|
|
{
|
|
if (current.Rarity >= Rarity.Red)
|
|
{
|
|
nextTierConfig = null;
|
|
return false;
|
|
}
|
|
|
|
int nextId = (int)current.WeaponType * IdMultiplier + ((int)current.Rarity + 1);
|
|
nextTierConfig = GameEntry.Luban.Get<WeaponConfig>(nextId);
|
|
return nextTierConfig != null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 计算同种武器的下一阶品质武器编号。
|
|
/// 若已达到最高品质(Red)则返回 false。
|
|
/// </summary>
|
|
public static bool TryGetNextTierWeaponId(int currentWeaponId, out int nextWeaponId)
|
|
{
|
|
Rarity rarity = GetRarity(currentWeaponId);
|
|
if (rarity >= Rarity.Red)
|
|
{
|
|
nextWeaponId = 0;
|
|
return false;
|
|
}
|
|
|
|
nextWeaponId = currentWeaponId + 1;
|
|
return true;
|
|
}
|
|
}
|
|
}
|