完善任务系统 (#3)

This commit is contained in:
yeziuku 2024-12-31 20:08:11 +08:00 committed by GitHub
parent f66dd7bc85
commit a98c7b457c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 424 additions and 434 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Addon;
using Oshima.Core.Configs; using Oshima.Core.Configs;
@ -92,10 +92,10 @@ namespace Oshima.Core.WebAPI
foreach (string filePath in filePaths) foreach (string filePath in filePaths)
{ {
string fileName = Path.GetFileNameWithoutExtension(filePath); string fileName = Path.GetFileNameWithoutExtension(filePath);
PluginConfig pc = new("quests", fileName); EntityModuleConfig<Quest> quests = new("quests", fileName);
pc.Clear(); quests.Clear();
FunGameService.CheckQuestList(pc); FunGameService.CheckQuestList(quests);
pc.SaveConfig(); quests.SaveConfig();
} }
Controller.WriteLine("刷新每日任务"); Controller.WriteLine("刷新每日任务");
} }

View File

@ -1,4 +1,4 @@
using System.Text; using System.Text;
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
@ -554,39 +554,43 @@ namespace Oshima.Core.Utils
} }
// 任务结算 // 任务结算
PluginConfig pc2 = new("quests", user.Id.ToString()); EntityModuleConfig<Quest> quests = new("quests", user.Id.ToString());
pc2.LoadConfig(); quests.LoadConfig();
if (pc2.Count > 0) if (quests.Count > 0)
{ {
List<Quest> quests = pc2.Get<List<Quest>>("list") ?? []; IEnumerable<Quest> workingQuests = quests.Values.Where(q => q.Status == 1);
if (quests.Count > 0) foreach (Quest quest in workingQuests)
{ {
IEnumerable<Quest> finishQuests = quests.Where(q => q.Status == 2); if (quest.StartTime.HasValue && quest.StartTime.Value.AddMinutes(quest.EstimatedMinutes) <= DateTime.Now)
foreach (Quest quest in finishQuests)
{ {
quest.Status = 3; quest.Status = 2;
foreach (string name in quest.Awards.Keys) }
}
IEnumerable<Quest> finishQuests = quests.Values.Where(q => q.Status == 2);
foreach (Quest quest in finishQuests)
{
quest.Status = 3;
quest.SettleTime = DateTime.Now;
foreach (string name in quest.Awards.Keys)
{
if (name == General.GameplayEquilibriumConstant.InGameCurrency)
{ {
if (name == General.GameplayEquilibriumConstant.InGameCurrency) user.Inventory.Credits += quest.Awards[name];
{ }
user.Inventory.Credits += quest.Awards[name]; else if (name == General.GameplayEquilibriumConstant.InGameMaterial)
} {
else if (name == General.GameplayEquilibriumConstant.InGameMaterial) user.Inventory.Materials += quest.Awards[name];
{ }
user.Inventory.Credits += quest.Awards[name]; else if (AllItems.FirstOrDefault(i => i.Name == name) is Item item)
} {
else if (AllItems.FirstOrDefault(i => i.Name == name) is Item item) Item newItem = item.Copy();
{ newItem.User = user;
Item newItem = item.Copy(); SetSellAndTradeTime(newItem);
newItem.User = user; user.Inventory.Items.Add(newItem);
SetSellAndTradeTime(newItem);
user.Inventory.Items.Add(newItem);
}
} }
} }
pc2.Add("list", quests);
pc2.SaveConfig();
} }
quests.SaveConfig();
} }
return user; return user;
@ -1777,17 +1781,17 @@ namespace Oshima.Core.Utils
} }
} }
public static string CheckQuestList(PluginConfig pc) public static string CheckQuestList(EntityModuleConfig<Quest> quests)
{ {
if (pc.Count == 0) if (quests.Count == 0)
{ {
// 生成任务,任务名和奖励物品的数组 // 生成任务
List<Quest> quests = [];
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)
{ {
int minutes = Random.Shared.Next(10, 41);
Dictionary<string, int> items = []; Dictionary<string, int> items = [];
items[General.GameplayEquilibriumConstant.InGameCurrency] = 1500; items[General.GameplayEquilibriumConstant.InGameCurrency] = minutes * 50;
items[General.GameplayEquilibriumConstant.InGameMaterial] = 5; items[General.GameplayEquilibriumConstant.InGameMaterial] = minutes / 10 * 2;
int index = Random.Shared.Next(AllItems.Count); int index = Random.Shared.Next(AllItems.Count);
Item item = AllItems[index]; Item item = AllItems[index];
items.Add(item.Name, 1); items.Add(item.Name, 1);
@ -1804,20 +1808,18 @@ namespace Oshima.Core.Utils
string name = QuestList.Keys.OrderBy(o => Random.Shared.Next()).First(); string name = QuestList.Keys.OrderBy(o => Random.Shared.Next()).First();
Quest quest = new() Quest quest = new()
{ {
Id = quests.Count > 0 ? quests.Max(q => q.Id) + 1 : 1, Id = quests.Count > 0 ? quests.Values.Max(q => q.Id) + 1 : 1,
Name = name, Name = name,
Description = QuestList[name], Description = QuestList[name],
EstimatedMinutes = Random.Shared.Next(10, 41), EstimatedMinutes = minutes,
Awards = items Awards = items
}; };
quests.Add(quest); quests.Add(quest.GetIdName(), quest);
} }
pc.Add("list", quests);
return string.Join("\r\n", quests); return string.Join("\r\n", quests);
} }
else else
{ {
List<Quest> quests = pc.Get<List<Quest>>("list") ?? [];
if (quests.Count > 0) if (quests.Count > 0)
{ {
return string.Join("\r\n", quests); return string.Join("\r\n", quests);