This commit is contained in:
Lightczx
2023-09-20 11:28:34 +08:00
parent 4285abd531
commit 68a6834d39
4 changed files with 40 additions and 10 deletions

View File

@@ -30,6 +30,36 @@ internal static partial class EnumerableExtension
return (double)sum / span.Length;
}
public static T? BinarySearch<T>(this List<T> list, Func<T, int> comparer)
where T : class
{
list.BinarySearch
Span<T> span = CollectionsMarshal.AsSpan(list);
int left = 0;
int right = span.Length - 1;
while (left <= right)
{
int middle = (left + right) / 2;
ref T current = ref span[middle];
int compareResult = comparer(current);
if (compareResult == 0)
{
return current;
}
else if (compareResult < 0)
{
right = middle - 1;
}
else
{
left = middle + 1;
}
}
return default;
}
/// <summary>
/// 如果传入列表不为空则原路返回,
/// 如果传入列表为空返回一个空的列表

View File

@@ -1987,7 +1987,7 @@ namespace Snap.Hutao.Resource.Localization {
}
/// <summary>
/// 查找类似 找不到游戏配置文件 {0} 的本地化字符串。
/// 查找类似 无法读取游戏配置文件 {0},可能是文件不存在 的本地化字符串。
/// </summary>
internal static string ServiceGameSetMultiChannelConfigFileNotFound {
get {
@@ -2005,7 +2005,7 @@ namespace Snap.Hutao.Resource.Localization {
}
/// <summary>
/// 查找类似 在查找必要的模块时遇到问题:无法读取任何模块,可能是保护驱动已经加载完成 的本地化字符串。
/// 查找类似 在查找必要的模块时遇到问题:无法读取任何模块,可能是保护驱动已经加载完成,请重试 的本地化字符串。
/// </summary>
internal static string ServiceGameUnlockerFindModuleNoModuleFound {
get {
@@ -2014,7 +2014,7 @@ namespace Snap.Hutao.Resource.Localization {
}
/// <summary>
/// 查找类似 在查找必要的模块时遇到问题:查找模块超时 的本地化字符串。
/// 查找类似 在查找必要的模块时遇到问题:查找模块超时,请重试 的本地化字符串。
/// </summary>
internal static string ServiceGameUnlockerFindModuleTimeLimitExeeded {
get {
@@ -3661,7 +3661,7 @@ namespace Snap.Hutao.Resource.Localization {
}
/// <summary>
/// 查找类似 无法读取游戏配置文件: {0} 的本地化字符串。
/// 查找类似 无法读取游戏配置文件: {0},可能是文件不存在或权限不足 的本地化字符串。
/// </summary>
internal static string ViewModelLaunchGameMultiChannelReadFail {
get {

View File

@@ -816,16 +816,16 @@
<value>找不到 PowerShell 的安装目录</value>
</data>
<data name="ServiceGameSetMultiChannelConfigFileNotFound" xml:space="preserve">
<value>找不到游戏配置文件 {0}</value>
<value>无法读取游戏配置文件 {0},可能是文件不存在</value>
</data>
<data name="ServiceGameSetMultiChannelUnauthorizedAccess" xml:space="preserve">
<value>无法读取或保存配置文件,请以管理员模式重试</value>
</data>
<data name="ServiceGameUnlockerFindModuleNoModuleFound" xml:space="preserve">
<value>在查找必要的模块时遇到问题:无法读取任何模块,可能是保护驱动已经加载完成</value>
<value>在查找必要的模块时遇到问题:无法读取任何模块,可能是保护驱动已经加载完成,请重试</value>
</data>
<data name="ServiceGameUnlockerFindModuleTimeLimitExeeded" xml:space="preserve">
<value>在查找必要的模块时遇到问题:查找模块超时</value>
<value>在查找必要的模块时遇到问题:查找模块超时,请重试</value>
</data>
<data name="ServiceGameUnlockerInterestedPatternNotFound" xml:space="preserve">
<value>在匹配内存时遇到问题:无法匹配到期望的内容</value>
@@ -1374,7 +1374,7 @@
<value>切换服务器失败</value>
</data>
<data name="ViewModelLaunchGameMultiChannelReadFail" xml:space="preserve">
<value>无法读取游戏配置文件: {0}</value>
<value>无法读取游戏配置文件: {0},可能是文件不存在或权限不足</value>
</data>
<data name="ViewModelLaunchGamePathInvalid" xml:space="preserve">
<value>游戏路径不正确,前往设置更改游戏路径</value>

View File

@@ -69,9 +69,9 @@ internal sealed partial class GachaStatisticsFactory : IGachaStatisticsFactory
// 'ref' is not allowed here because we have lambda below
foreach (Model.Entity.GachaItem item in CollectionsMarshal.AsSpan(items))
{
// Find target history wish to operate.
// Find target history wish to operate. // w.From <= item.Time <= w.To
HistoryWishBuilder? targetHistoryWishBuilder = item.GachaType is not (GachaConfigType.StandardWish or GachaConfigType.NoviceWish)
? historyWishBuilderMap[item.GachaType].FirstOrDefault(w => w.From <= item.Time && w.To >= item.Time)
? historyWishBuilderMap[item.GachaType].BinarySearch(w => item.Time < w.From ? -1 : item.Time > w.To ? 1 : 0)
: default;
switch (item.ItemId.StringLength())