Merge remote-tracking branch 'origin/digital-collectibles' into digital-collectibles
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
using Volo.Abp.BackgroundWorkers.Hangfire;
|
||||||
|
using Yi.Framework.DigitalCollectibles.Domain.Managers;
|
||||||
|
|
||||||
|
namespace Yi.Framework.DigitalCollectibles.Application.Jobs;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自动更新藏品价值
|
||||||
|
/// </summary>
|
||||||
|
public class AutoUpdateCollectiblesValueJob : HangfireBackgroundWorkerBase
|
||||||
|
{
|
||||||
|
private readonly CollectiblesManager _collectiblesManager;
|
||||||
|
|
||||||
|
public AutoUpdateCollectiblesValueJob(CollectiblesManager collectiblesManager)
|
||||||
|
{
|
||||||
|
_collectiblesManager = collectiblesManager;
|
||||||
|
RecurringJobId = "更新藏品价值";
|
||||||
|
//每天早上9点执行一次
|
||||||
|
CronExpression = "0 0 9 * * ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task DoWorkAsync(CancellationToken cancellationToken = new CancellationToken())
|
||||||
|
{
|
||||||
|
await _collectiblesManager.UpdateAllValueAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,13 +4,23 @@ using Yi.Framework.DigitalCollectibles.Domain.Shared.Consts;
|
|||||||
|
|
||||||
namespace Yi.Framework.DigitalCollectibles.Domain.Shared.Attributes;
|
namespace Yi.Framework.DigitalCollectibles.Domain.Shared.Attributes;
|
||||||
|
|
||||||
|
|
||||||
public class ProbabilityAttribute : Attribute
|
public class ProbabilityAttribute : Attribute
|
||||||
{
|
{
|
||||||
public double Value { get; set; }
|
/// <summary>
|
||||||
|
/// 概率
|
||||||
|
/// </summary>
|
||||||
|
public double Probability { get; set; }
|
||||||
|
|
||||||
public ProbabilityAttribute(double value)
|
/// <summary>
|
||||||
|
/// 默认价值
|
||||||
|
/// </summary>
|
||||||
|
public double DefaultValue { get; set; }
|
||||||
|
|
||||||
|
public ProbabilityAttribute(double probability,double defaultValue)
|
||||||
{
|
{
|
||||||
this.Value = value;
|
this.Probability = probability;
|
||||||
|
this.DefaultValue = defaultValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ namespace Yi.Framework.DigitalCollectibles.Domain.Shared.Consts;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public enum RarityEnum
|
public enum RarityEnum
|
||||||
{
|
{
|
||||||
[Display(Name = "普通")][Probability(0.6f)] Ordinary = 0,
|
[Display(Name = "普通")][Probability(0.6f,100f)] Ordinary = 0,
|
||||||
[Display(Name = "高级")][Probability(0.25f)] Senior = 1,
|
[Display(Name = "高级")][Probability(0.25f,200f)] Senior = 1,
|
||||||
[Display(Name = "稀有")][Probability(0.1f)] Rare = 2,
|
[Display(Name = "稀有")][Probability(0.1f,300f)] Rare = 2,
|
||||||
[Display(Name = "珍品")][Probability(0.04f)] Gem = 3,
|
[Display(Name = "珍品")][Probability(0.04f,400f)] Gem = 3,
|
||||||
[Display(Name = "传说")][Probability(0.01f)] Legend = 4
|
[Display(Name = "传说")][Probability(0.01f,600f)] Legend = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class RarityEnumExtensions
|
public static class RarityEnumExtensions
|
||||||
@@ -45,9 +45,15 @@ public static class RarityEnumExtensions
|
|||||||
public static decimal GetProbabilityValue(this RarityEnum rarity)
|
public static decimal GetProbabilityValue(this RarityEnum rarity)
|
||||||
{
|
{
|
||||||
var attribute = GetAttribute<ProbabilityAttribute>(rarity);
|
var attribute = GetAttribute<ProbabilityAttribute>(rarity);
|
||||||
return attribute.Value.To<decimal>();
|
return attribute.Probability.To<decimal>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static double GetDefaultValue(this RarityEnum rarity)
|
||||||
|
{
|
||||||
|
var attribute = GetAttribute<ProbabilityAttribute>(rarity);
|
||||||
|
return attribute.DefaultValue.To<double>();
|
||||||
|
}
|
||||||
|
|
||||||
public static string GetDisplayValue(this RarityEnum rarity)
|
public static string GetDisplayValue(this RarityEnum rarity)
|
||||||
{
|
{
|
||||||
var display = GetAttribute<DisplayAttribute>(rarity);
|
var display = GetAttribute<DisplayAttribute>(rarity);
|
||||||
@@ -65,7 +71,7 @@ public static class RarityEnumExtensions
|
|||||||
if (attribute != null)
|
if (attribute != null)
|
||||||
{
|
{
|
||||||
// 将特性值添加到列表
|
// 将特性值添加到列表
|
||||||
probabilityList.Add(attribute.Value.To<decimal>());
|
probabilityList.Add(attribute.Probability.To<decimal>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Volo.Abp.Domain.Services;
|
|||||||
using Volo.Abp.Users;
|
using Volo.Abp.Users;
|
||||||
using Yi.Framework.DigitalCollectibles.Domain.Entities;
|
using Yi.Framework.DigitalCollectibles.Domain.Entities;
|
||||||
using Yi.Framework.DigitalCollectibles.Domain.Shared.Caches;
|
using Yi.Framework.DigitalCollectibles.Domain.Shared.Caches;
|
||||||
|
using Yi.Framework.DigitalCollectibles.Domain.Shared.Consts;
|
||||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||||
|
|
||||||
namespace Yi.Framework.DigitalCollectibles.Domain.Managers;
|
namespace Yi.Framework.DigitalCollectibles.Domain.Managers;
|
||||||
@@ -111,4 +112,36 @@ public class CollectiblesManager:DomainService
|
|||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 全量更新藏品价值
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task UpdateAllValueAsync()
|
||||||
|
{
|
||||||
|
//全部藏品
|
||||||
|
var collectibles = await _collectiblesRepository.GetListAsync();
|
||||||
|
foreach (var item in collectibles)
|
||||||
|
{
|
||||||
|
var defaultValue= item.Rarity.GetDefaultValue();
|
||||||
|
//计算实际的百分比
|
||||||
|
var realValueRate= CalculateValue(item.FindTotal);
|
||||||
|
|
||||||
|
var realValue = Math.Round(defaultValue * realValueRate);
|
||||||
|
item.ValueNumber = realValue.To<decimal>();
|
||||||
|
}
|
||||||
|
|
||||||
|
await _collectiblesRepository.UpdateRangeAsync(collectibles);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 价值计算公式
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private double CalculateValue(double x)
|
||||||
|
{
|
||||||
|
return 0.1 + 0.9 * Math.Exp(-0.00824 * (x - 1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -176,7 +176,7 @@ public class MiningPoolManager : DomainService
|
|||||||
|
|
||||||
//如果概率是挖到了矿,再从矿物中随机选择一个稀有度,再在当前稀有度中的矿物列表,随机选择一个具体的矿物
|
//如果概率是挖到了矿,再从矿物中随机选择一个稀有度,再在当前稀有度中的矿物列表,随机选择一个具体的矿物
|
||||||
var pool = await GetMiningPoolContentAsync();
|
var pool = await GetMiningPoolContentAsync();
|
||||||
if (pool is null|| pool.TotalNumber == 0)
|
if (pool is null || pool.TotalNumber == 0)
|
||||||
{
|
{
|
||||||
throw new UserFriendlyException($"失败,矿池已经被掏空了,请等矿池刷新后再来");
|
throw new UserFriendlyException($"失败,矿池已经被掏空了,请等矿池刷新后再来");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user