完善了探索

This commit is contained in:
milimoe 2025-07-02 00:07:36 +08:00
parent 69ebb971f7
commit 2750bf1d01
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
4 changed files with 281 additions and 173 deletions

View File

@ -58,6 +58,16 @@ namespace Oshima.FunGame.OshimaModules.Skills
return 0; return 0;
} }
public override bool BeforeApplyTrueDamage(Character character, Character enemy, double damage, bool isNormalAttack, DamageResult damageResult)
{
if (enemy == Skill.Character && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical))
{
WriteLine($"[ {enemy} ] 发动了绝对领域,巧妙的化解了此伤害!");
return true;
}
return false;
}
public override void OnSkillCasting(Character caster, List<Character> targets) public override void OnSkillCasting(Character caster, List<Character> targets)
{ {
= caster.EP; = caster.EP;

View File

@ -302,10 +302,10 @@ namespace Oshima.FunGame.OshimaServers.Service
public static Dictionary<ExploreResult, double> ExploreResultProbabilities { get; } = new() public static Dictionary<ExploreResult, double> ExploreResultProbabilities { get; } = new()
{ {
{ ExploreResult.General, 0.4 }, { ExploreResult.General, 0.45 },
{ ExploreResult.Nothing, 0.2 }, { ExploreResult.Nothing, 0.2 },
{ ExploreResult.Fight, 0.2 }, { ExploreResult.Fight, 0.25 },
{ ExploreResult.Earned, 0.2 }, { ExploreResult.Earned, 0.1 },
{ ExploreResult.Event, 0 } { ExploreResult.Event, 0 }
}; };

View File

@ -1416,7 +1416,7 @@ namespace Oshima.FunGame.OshimaServers.Service
} }
private static void EnhanceBoss(Character boss, Item[] weapons, Item[] armors, Item[] shoes, Item[] accessory, Item[] consumables, private static void EnhanceBoss(Character boss, Item[] weapons, Item[] armors, Item[] shoes, Item[] accessory, Item[] consumables,
int cLevel, int sLevel, int mLevel, int naLevel, bool enhanceHPMP = true, bool enhanceCRCRD = true) int cLevel, int sLevel, int mLevel, int naLevel, bool enhanceHPMP = true, bool enhanceCRCRD = true, bool isUnit = false)
{ {
boss.Level = cLevel; boss.Level = cLevel;
boss.NormalAttack.Level = naLevel; boss.NormalAttack.Level = naLevel;
@ -1477,8 +1477,9 @@ namespace Oshima.FunGame.OshimaServers.Service
double exMP2 = 0.8; double exMP2 = 0.8;
if (!enhanceHPMP) if (!enhanceHPMP)
{ {
exHP2 = 0; if (isUnit) exHP2 = -0.1;
exMP2 = 0; else exHP2 = 0.5;
exMP2 = 0.2;
} }
double exCR = 0.35; double exCR = 0.35;
double exCRD = 0.9; double exCRD = 0.9;
@ -1494,16 +1495,16 @@ namespace Oshima.FunGame.OshimaServers.Service
"values", "values",
new Dictionary<string, object>() new Dictionary<string, object>()
{ {
{ "exatk", 3.4 * cLevel }, { "exatk", isUnit ? 1.4 * cLevel : 3.4 * cLevel },
{ "exdef", 3.4 * cLevel }, { "exdef", isUnit ? 1.4 * cLevel : 3.4 * cLevel },
{ "exhp2", exHP2 }, { "exhp2", exHP2 },
{ "exmp2", exMP2 }, { "exmp2", exMP2 },
{ "exhr", 0.15 * cLevel }, { "exhr", 0.15 * cLevel },
{ "exmr", 0.1 * cLevel }, { "exmr", 0.1 * cLevel },
{ "excr", exCR }, { "excr", exCR },
{ "excrd", exCRD }, { "excrd", exCRD },
{ "excdr", 0.25 }, { "excdr", isUnit ? 0.2 : 0.25 },
{ "exacc", 0.25 } { "exacc", isUnit ? 0.15 : 0.25 }
} }
} }
}); });
@ -1570,7 +1571,7 @@ namespace Oshima.FunGame.OshimaServers.Service
return roundRewards; return roundRewards;
} }
public static double CalculateRating(CharacterStatistics stats, Team? team = null) public static double CalculateRating(CharacterStatistics stats, Team? team = null, CharacterStatistics[]? teammateStats = null)
{ {
// 基础得分 // 基础得分
double baseScore = (stats.Kills + stats.Assists) / (stats.Kills + stats.Assists + stats.Deaths + 0.01); double baseScore = (stats.Kills + stats.Assists) / (stats.Kills + stats.Assists + stats.Deaths + 0.01);
@ -1586,6 +1587,17 @@ namespace Oshima.FunGame.OshimaServers.Service
// 伤害贡献 // 伤害贡献
double logDamageContribution = Math.Log(1 + (stats.TotalDamage / (stats.TotalTakenDamage + 1.75))); double logDamageContribution = Math.Log(1 + (stats.TotalDamage / (stats.TotalTakenDamage + 1.75)));
if (team != null && teammateStats != null)
{
// 考虑团队伤害排名,优先高伤害的
int damageRank = teammateStats.OrderByDescending(s => s.TotalDamage).ToList().IndexOf(stats) + 1;
if (damageRank > 1)
{
double d = 1 - (0.1 * (damageRank - 1));
if (d < 0.1) d = 0.1;
logDamageContribution *= d;
}
}
// 存活时间贡献 // 存活时间贡献
double liveTimeContribution = Math.Log(1 + (stats.LiveTime / (stats.TotalTakenDamage + 0.01) * 100)); double liveTimeContribution = Math.Log(1 + (stats.LiveTime / (stats.TotalTakenDamage + 0.01) * 100));
@ -1594,6 +1606,7 @@ namespace Oshima.FunGame.OshimaServers.Service
double teamContribution = 0; double teamContribution = 0;
if (team != null) if (team != null)
{ {
if (stats.Assists > team.Score) stats.Assists = team.Score;
teamContribution = (stats.Kills + stats.Assists) / (team.Score + 0.01); teamContribution = (stats.Kills + stats.Assists) / (team.Score + 0.01);
if (team.IsWinner) if (team.IsWinner)
{ {
@ -1618,11 +1631,16 @@ namespace Oshima.FunGame.OshimaServers.Service
foreach (Character character in statistics.Keys) foreach (Character character in statistics.Keys)
{ {
Team? team = null; Team? team = null;
CharacterStatistics[]? teammateStats = null;
if (isTeam) if (isTeam)
{ {
team = teams.Where(t => t.IsOnThisTeam(character)).FirstOrDefault(); team = teams.Where(t => t.IsOnThisTeam(character)).FirstOrDefault();
if (team != null)
{
teammateStats = [.. statistics.Where(kv => team.Members.Contains(kv.Key)).Select(kv => kv.Value)];
} }
statistics[character].Rating = CalculateRating(statistics[character], team); }
statistics[character].Rating = CalculateRating(statistics[character], team, teammateStats);
} }
} }
@ -1848,9 +1866,11 @@ namespace Oshima.FunGame.OshimaServers.Service
(min, max) = (range.Min, range.Max); (min, max) = (range.Min, range.Max);
} }
double price = Random.Shared.Next(min, max); double price = Random.Shared.Next(min, max);
int stock = Random.Shared.Next(1, 3);
if (item.ItemType == ItemType.MagicCard) if (item.ItemType == ItemType.MagicCard)
{ {
price *= 0.7; price *= 0.7;
stock = 1;
} }
else if (item.ItemType == ItemType.Consumable) else if (item.ItemType == ItemType.Consumable)
{ {
@ -1859,13 +1879,14 @@ namespace Oshima.FunGame.OshimaServers.Service
min = 300 * (1 + (prev * prev - prev)); min = 300 * (1 + (prev * prev - prev));
max = 300 * (1 + (current * current - current)); max = 300 * (1 + (current * current - current));
price = Random.Shared.Next(min, max); price = Random.Shared.Next(min, max);
stock += 3;
} }
if (price == 0) if (price == 0)
{ {
price = (Random.Shared.NextDouble() + 0.1) * Random.Shared.Next(1000, 5000) * Random.Shared.Next((int)item.QualityType + 2, 6 + ((int)item.QualityType)); price = (Random.Shared.NextDouble() + 0.1) * Random.Shared.Next(1000, 5000) * Random.Shared.Next((int)item.QualityType + 2, 6 + ((int)item.QualityType));
} }
item.Price = (int)price; item.Price = (int)price;
daily.AddItem(item, Random.Shared.Next(1, 3)); daily.AddItem(item, stock);
} }
store.Add("daily", daily); store.Add("daily", daily);
return daily.ToString() + "\r\n温馨提示使用【商店查看+序号】查看物品详细信息,使用【商店购买+序号】购买物品!每天 4:00 刷新每日商店。"; return daily.ToString() + "\r\n温馨提示使用【商店查看+序号】查看物品详细信息,使用【商店购买+序号】购买物品!每天 4:00 刷新每日商店。";
@ -2100,9 +2121,8 @@ namespace Oshima.FunGame.OshimaServers.Service
public static string GetEvents(ActivityState status = ActivityState.InProgress) public static string GetEvents(ActivityState status = ActivityState.InProgress)
{ {
EntityModuleConfig<Activity> activities = new("activities", "activities"); GetEventCenter();
activities.LoadConfig(); IEnumerable<Activity> filteredActivities = Activities.Where(a => a.Status == status);
IEnumerable<Activity> filteredActivities = activities.Values.Where(a => a.Status == status);
if (!filteredActivities.Any()) if (!filteredActivities.Any())
{ {
return $"当前没有任何{CommonSet.GetActivityStatus(status)}的活动,敬请期待。"; return $"当前没有任何{CommonSet.GetActivityStatus(status)}的活动,敬请期待。";
@ -2114,9 +2134,8 @@ namespace Oshima.FunGame.OshimaServers.Service
public static string GetEvent(long id) public static string GetEvent(long id)
{ {
EntityModuleConfig<Activity> activities = new("activities", "activities"); GetEventCenter();
activities.LoadConfig(); if (Activities.FirstOrDefault(a => a.Id == id) is Activity activity)
if (activities.Values.FirstOrDefault(a => a.Id == id) is Activity activity)
{ {
return $"{activity}"; return $"{activity}";
} }
@ -2189,27 +2208,25 @@ namespace Oshima.FunGame.OshimaServers.Service
switch (diff) switch (diff)
{ {
case 2: case 2:
probabilities[ExploreResult.General] -= 0.05; probabilities[ExploreResult.General] -= 0.1;
probabilities[ExploreResult.Earned] -= 0.05;
probabilities[ExploreResult.Fight] += 0.1; probabilities[ExploreResult.Fight] += 0.1;
break; break;
case 3: case 3:
probabilities[ExploreResult.General] -= 0.1; probabilities[ExploreResult.General] -= 0.15;
probabilities[ExploreResult.Earned] -= 0.05; probabilities[ExploreResult.Earned] -= 0.05;
probabilities[ExploreResult.Nothing] -= 0.05; probabilities[ExploreResult.Nothing] += 0.05;
probabilities[ExploreResult.Fight] += 0.2; probabilities[ExploreResult.Fight] += 0.15;
break; break;
case 4: case 4:
probabilities[ExploreResult.General] -= 0.2; probabilities[ExploreResult.General] -= 0.3;
probabilities[ExploreResult.Earned] -= 0.1; probabilities[ExploreResult.Earned] -= 0.05;
probabilities[ExploreResult.Nothing] -= 0.05;
probabilities[ExploreResult.Fight] += 0.35; probabilities[ExploreResult.Fight] += 0.35;
break; break;
case 5: case 5:
probabilities[ExploreResult.General] -= 0.3; probabilities[ExploreResult.General] -= 0.35;
probabilities[ExploreResult.Earned] -= 0.15; probabilities[ExploreResult.Earned] -= 0.05;
probabilities[ExploreResult.Nothing] -= 0.05; probabilities[ExploreResult.Nothing] -= 0.05;
probabilities[ExploreResult.Fight] += 0.5; probabilities[ExploreResult.Fight] += 0.45;
break; break;
default: default:
break; break;
@ -2247,10 +2264,10 @@ namespace Oshima.FunGame.OshimaServers.Service
// 筛选敌人 // 筛选敌人
List<Character> enemys = []; List<Character> enemys = [];
Character enemy; Character enemy;
bool isUnit = Random.Shared.Next(2) != 0;
if (region.Characters.Count > 0 && region.Units.Count > 0) if (region.Characters.Count > 0 && region.Units.Count > 0)
{ {
random = Random.Shared.Next(2); if (!isUnit)
if (random == 0)
{ {
enemy = region.Characters.OrderBy(o => Random.Shared.Next()).First().Copy(); enemy = region.Characters.OrderBy(o => Random.Shared.Next()).First().Copy();
enemy.ExHPPercentage += 0.5; enemy.ExHPPercentage += 0.5;
@ -2262,33 +2279,76 @@ namespace Oshima.FunGame.OshimaServers.Service
{ {
case 1: case 1:
case 2: case 2:
enemy = region.Units.OrderBy(o => Random.Shared.Next()).First(); enemy = region.Units.OrderBy(o => Random.Shared.Next()).First().Copy();
enemys.Add(enemy.Copy()); enemys.Add(enemy);
break; break;
case 3: case 3:
case 4: case 4:
enemy = region.Units.OrderBy(o => Random.Shared.Next()).First(); enemy = region.Units.OrderBy(o => Random.Shared.Next()).First().Copy();
enemys.Add(enemy.Copy()); enemys.Add(enemy);
enemy = region.Units.OrderBy(o => Random.Shared.Next()).First(); enemy = region.Units.OrderBy(o => Random.Shared.Next()).First().Copy();
enemys.Add(enemy.Copy()); enemy.FirstName = enemys.Any(e => e.Name == enemy.Name) ? "2" : "";
enemys.Add(enemy);
break; break;
case 5: case 5:
default: default:
enemy = region.Units.OrderBy(o => Random.Shared.Next()).First(); enemy = region.Units.OrderBy(o => Random.Shared.Next()).First().Copy();
enemys.Add(enemy.Copy()); enemys.Add(enemy);
enemy = region.Units.OrderBy(o => Random.Shared.Next()).First(); enemy = region.Units.OrderBy(o => Random.Shared.Next()).First().Copy();
enemys.Add(enemy.Copy()); enemy.FirstName = enemys.Any(e => e.Name == enemy.Name) ? "α" : "";
enemy = region.Units.OrderBy(o => Random.Shared.Next()).First(); enemys.Add(enemy);
enemys.Add(enemy.Copy()); enemy = region.Units.OrderBy(o => Random.Shared.Next()).First().Copy();
enemy.FirstName = enemys.Any(e => e.Name == enemy.Name) ? "β" : "";
enemys.Add(enemy);
break; break;
} }
} }
} }
else else
{
if (!isUnit)
{ {
enemy = new RegionCharacter(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName()); enemy = new RegionCharacter(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName());
enemys.Add(enemy); enemys.Add(enemy);
} }
else
{
switch (diff)
{
case 1:
case 2:
enemy = new RegionUnit(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName());
enemys.Add(enemy);
break;
case 3:
case 4:
enemy = new RegionUnit(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName());
enemys.Add(enemy);
enemy = new RegionUnit(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName());
enemys.Add(enemy);
break;
case 5:
default:
enemy = new RegionUnit(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName());
enemys.Add(enemy);
enemy = new RegionUnit(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName());
enemys.Add(enemy);
enemy = new RegionUnit(long.Parse(Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 8)), GenerateRandomChineseUserName());
enemys.Add(enemy);
break;
}
}
}
// 初始化掉落装备的概率
Dictionary<QualityType, double> pE = new()
{
{ QualityType.Blue, 0.4 },
{ QualityType.Purple, 0.27 + (0.01 * (characterCount - 1)) },
{ QualityType.Orange, 0.2 + (0.01 * (characterCount - 1)) },
{ QualityType.Red, 0.1 + (0.0075 * (characterCount - 1)) },
{ QualityType.Gold, 0.03 + (0.0075 * (characterCount - 1)) }
};
// 生成奖励 // 生成奖励
string award = ""; string award = "";
@ -2338,7 +2398,7 @@ namespace Oshima.FunGame.OshimaServers.Service
break; break;
case ExploreResult.Fight: case ExploreResult.Fight:
// 小队信息 // 小队信息
Character[] squad = [.. user.Inventory.Characters.Where((c, index) => characterIds.Contains(index + 1)).Select(c => CharacterBuilder.Build(c, false, true, user.Inventory, FunGameConstant.AllItems, FunGameConstant.AllSkills, false))]; Character[] squad = [.. user.Inventory.Characters.Where((c, index) => characterIds.Contains(index + 1)).Select(c => CharacterBuilder.Build(c, true, true, user.Inventory, FunGameConstant.AllItems, FunGameConstant.AllSkills, false))];
if (squad.All(c => c.HP <= 0)) if (squad.All(c => c.HP <= 0))
{ {
model.Result = ExploreResult.Nothing; model.Result = ExploreResult.Nothing;
@ -2365,7 +2425,7 @@ namespace Oshima.FunGame.OshimaServers.Service
int naLevel = mLevel; int naLevel = mLevel;
foreach (Character enemy_loop in enemys) foreach (Character enemy_loop in enemys)
{ {
EnhanceBoss(enemy_loop, weapons, armors, shoes, accessory, consumables, cLevel, sLevel, mLevel, naLevel, false, false); EnhanceBoss(enemy_loop, weapons, armors, shoes, accessory, consumables, cLevel, sLevel, mLevel, naLevel, false, false, isUnit);
} }
// 开始战斗 // 开始战斗
Team team1 = new($"{user.Username}的探索小队", squad); Team team1 = new($"{user.Username}的探索小队", squad);
@ -2407,7 +2467,16 @@ namespace Oshima.FunGame.OshimaServers.Service
$"{materials} {General.GameplayEquilibriumConstant.InGameMaterial}" + $"以及 {count} 个{item.Name}"; $"{materials} {General.GameplayEquilibriumConstant.InGameMaterial}" + $"以及 {count} 个{item.Name}";
if (Random.Shared.NextDouble() > 0.6) if (Random.Shared.NextDouble() > 0.6)
{ {
Item? itemDrop = region.Items.OrderBy(o => Random.Shared.Next()).FirstOrDefault(); QualityType qualityType = QualityType.Blue;
foreach (QualityType type in pE.Keys.OrderByDescending(q => (int)q))
{
if (Random.Shared.NextDouble() <= pE[type])
{
qualityType = type;
break;
}
}
Item? itemDrop = region.Items.Where(i => qualityType == QualityType.Blue ? (int)i.QualityType <= (int)qualityType : (int)i.QualityType == (int)qualityType).FirstOrDefault();
if (itemDrop != null) if (itemDrop != null)
{ {
string itemquality = ItemSet.GetQualityTypeName(itemDrop.QualityType); string itemquality = ItemSet.GetQualityTypeName(itemDrop.QualityType);
@ -2419,17 +2488,35 @@ namespace Oshima.FunGame.OshimaServers.Service
exploreString = $"{exploreString}\r\n{string.Join("\r\n", msgs)}\r\n探索小队战胜了{enemy.Name}!获得了:{award}"; exploreString = $"{exploreString}\r\n{string.Join("\r\n", msgs)}\r\n探索小队战胜了{enemy.Name}!获得了:{award}";
} }
else else
{
exploreString = $"{exploreString}\r\n{string.Join("\r\n", msgs)}\r\n探索小队未能战胜{enemy.Name}";
IEnumerable<Character> deadEnemys = enemys.Where(c => c.HP <= 0);
if (!deadEnemys.Any())
{
exploreString += "探索宣告失败!(什么也没有获得)";
}
else
{ {
Item item = FunGameConstant.ExploreItems[region][Random.Shared.Next(FunGameConstant.ExploreItems[region].Count)]; Item item = FunGameConstant.ExploreItems[region][Random.Shared.Next(FunGameConstant.ExploreItems[region].Count)];
model.Awards[item.Name] = characterCount; model.Awards[item.Name] = deadEnemys.Count();
award = $"{characterCount} 个{item.Name}"; award = $"{deadEnemys.Count()} 个{item.Name}";
exploreString = $"{exploreString}\r\n{string.Join("\r\n", msgs)}\r\n探索小队未能战胜{enemy.Name},但是获得了补偿:{award}"; exploreString += $"但是获得了补偿:{award}";
}
} }
model.AfterFightHPs = [.. squad.Select(c => c.HP)]; model.AfterFightHPs = [.. squad.Select(c => c.HP)];
} }
break; break;
case ExploreResult.Earned: case ExploreResult.Earned:
Item? itemEarned = region.Items.OrderBy(o => Random.Shared.Next()).FirstOrDefault(); QualityType quality = QualityType.Blue;
foreach (QualityType type in pE.Keys.OrderByDescending(q => (int)q))
{
if (Random.Shared.NextDouble() <= pE[type])
{
quality = type;
break;
}
}
Item? itemEarned = region.Items.OrderBy(i => quality == QualityType.Blue ? (int)i.QualityType <= (int)quality : (int)i.QualityType == (int)quality).FirstOrDefault();
if (itemEarned is null) if (itemEarned is null)
{ {
model.Result = ExploreResult.Nothing; model.Result = ExploreResult.Nothing;
@ -2520,13 +2607,13 @@ namespace Oshima.FunGame.OshimaServers.Service
return result; return result;
} }
public static bool SettleExploreAll(List<ExploreModel> list, User user) public static bool SettleExploreAll(List<ExploreModel> list, User user, bool skip = false)
{ {
bool settle = false; bool settle = false;
List<Guid> remove = []; List<Guid> remove = [];
foreach (ExploreModel model in list) foreach (ExploreModel model in list)
{ {
if (model.StartTime.HasValue && (DateTime.Now - model.StartTime.Value).TotalMinutes > FunGameConstant.ExploreTime + 2) if (skip || (model.StartTime.HasValue && (DateTime.Now - model.StartTime.Value).TotalMinutes > FunGameConstant.ExploreTime + 2))
{ {
if (SettleExplore(model.Guid, list, user, out string msg)) if (SettleExplore(model.Guid, list, user, out string msg))
{ {

View File

@ -25,6 +25,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{ {
private ILogger<FunGameController> Logger { get; set; } = logger; private ILogger<FunGameController> Logger { get; set; } = logger;
private readonly SemaphoreSlim _semaphore = new(1, 1);
private const int drawCardReduce = 1000; private const int drawCardReduce = 1000;
private const int drawCardReduce_Material = 5; private const int drawCardReduce_Material = 5;
private const string noSaved = "你还没有创建存档!请发送【创建存档】创建。"; private const string noSaved = "你还没有创建存档!请发送【创建存档】创建。";
@ -5249,6 +5250,9 @@ namespace Oshima.FunGame.WebAPI.Controllers
public async Task<(string, Guid)> ExploreRegion([FromQuery] long? uid = null, [FromQuery] long? id = null, [FromBody] long[]? cids = null) public async Task<(string, Guid)> ExploreRegion([FromQuery] long? uid = null, [FromQuery] long? id = null, [FromBody] long[]? cids = null)
{ {
Guid exploreId = Guid.Empty; Guid exploreId = Guid.Empty;
await _semaphore.WaitAsync();
try
{
long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
long regionid = id ?? 0; long regionid = id ?? 0;
long[] characterIds = cids ?? []; long[] characterIds = cids ?? [];
@ -5385,6 +5389,13 @@ namespace Oshima.FunGame.WebAPI.Controllers
return (noSaved, exploreId); return (noSaved, exploreId);
} }
} }
catch (Exception e)
{
_semaphore.Release();
Logger.LogError(e, "Error: ");
return (busy, exploreId);
}
}
[HttpGet("exploreinfo")] [HttpGet("exploreinfo")]
public string GetExploreInfo([FromQuery] long? uid = null) public string GetExploreInfo([FromQuery] long? uid = null)
@ -5449,7 +5460,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
} }
[HttpPost("exploresettleall")] [HttpPost("exploresettleall")]
public string SettleExploreAll([FromQuery] long? uid = null) public string SettleExploreAll([FromQuery] long? uid = null, [FromQuery] bool? skip = null)
{ {
long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
@ -5464,7 +5475,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
List<ExploreModel> list = pc.Get<List<ExploreModel>>("exploring") ?? []; List<ExploreModel> list = pc.Get<List<ExploreModel>>("exploring") ?? [];
if (list.Count > 0) if (list.Count > 0)
{ {
if (FunGameService.SettleExploreAll(list, user)) if (FunGameService.SettleExploreAll(list, user, skip ?? false))
{ {
pc.Add("exploring", list); pc.Add("exploring", list);
msg = $"已完成探索结算。"; msg = $"已完成探索结算。";