添加任务系统

This commit is contained in:
milimoe 2024-12-31 02:26:13 +08:00
parent 2abe63dc80
commit f66dd7bc85
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
3 changed files with 374 additions and 0 deletions

View File

@ -3383,6 +3383,105 @@ namespace Oshima.Core.Controllers
}
}
[HttpPost("checkquestlist")]
public string CheckQuestList([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
PluginConfig pc2 = new("quests", userid.ToString());
pc2.LoadConfig();
string msg = FunGameService.CheckQuestList(pc2);
pc2.SaveConfig();
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize(msg);
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("acceptquest")]
public string AcceptQuest([FromQuery] long? qq = null, [FromQuery] int? id = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int questid = id ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
string msg = "";
PluginConfig pc2 = new("quests", userid.ToString());
pc2.LoadConfig();
if (pc2.Count > 0)
{
List<Quest> quests = pc2.Get<List<Quest>>("list") ?? [];
if (quests.Count > 0)
{
if (quests.FirstOrDefault(q => q.Status == 1) is Quest quest)
{
msg = $"你正在进行任务【{quest.Name}】,无法开始新任务!\r\n{quest}";
}
else if (quests.FirstOrDefault(q => q.Id == questid) is Quest quest2)
{
if (quest2.Status != 0)
{
msg = $"这个任务正在进行中,或已经完成,不能重复做任务!";
}
else
{
quest2.Status = 1;
pc2.Add("list", quests);
pc2.SaveConfig();
msg = $"开始任务【{quest2.Name}】成功!\r\n任务信息如下{quest2}\r\n预计完成时间{DateTime.Now.AddMinutes(quest2.EstimatedMinutes).ToString(General.GeneralDateTimeFormatChinese)}";
Milimoe.FunGame.Core.Api.Utility.TaskScheduler.Shared.AddTask($"{userid}-{quest2.Name}", TimeSpan.FromMinutes(quest2.EstimatedMinutes), () =>
{
quest2.Status = 2;
});
}
}
else
{
msg = $"没有找到序号为 {questid} 的任务!";
}
}
else
{
msg = "任务列表为空,请等待刷新!";
}
}
else
{
msg = "任务列表为空,请等待刷新!";
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize(msg);
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpGet("reload")]
public string Relaod([FromQuery] long? master = null)
{

View File

@ -83,6 +83,23 @@ namespace Oshima.Core.WebAPI
Controller.WriteLine("读取 FunGame 存档缓存");
}
}, true);
TaskScheduler.Shared.AddTask("刷新每日任务", new TimeSpan(4, 0, 0), () =>
{
string directoryPath = $@"{AppDomain.CurrentDomain.BaseDirectory}configs/quests";
if (Directory.Exists(directoryPath))
{
string[] filePaths = Directory.GetFiles(directoryPath);
foreach (string filePath in filePaths)
{
string fileName = Path.GetFileNameWithoutExtension(filePath);
PluginConfig pc = new("quests", fileName);
pc.Clear();
FunGameService.CheckQuestList(pc);
pc.SaveConfig();
}
Controller.WriteLine("刷新每日任务");
}
});
TaskScheduler.Shared.AddRecurringTask("刷新boss", TimeSpan.FromHours(1), () =>
{
FunGameService.GenerateBoss();

View File

@ -553,6 +553,42 @@ namespace Oshima.Core.Utils
}
}
// 任务结算
PluginConfig pc2 = new("quests", user.Id.ToString());
pc2.LoadConfig();
if (pc2.Count > 0)
{
List<Quest> quests = pc2.Get<List<Quest>>("list") ?? [];
if (quests.Count > 0)
{
IEnumerable<Quest> finishQuests = quests.Where(q => q.Status == 2);
foreach (Quest quest in finishQuests)
{
quest.Status = 3;
foreach (string name in quest.Awards.Keys)
{
if (name == General.GameplayEquilibriumConstant.InGameCurrency)
{
user.Inventory.Credits += quest.Awards[name];
}
else if (name == General.GameplayEquilibriumConstant.InGameMaterial)
{
user.Inventory.Credits += quest.Awards[name];
}
else if (AllItems.FirstOrDefault(i => i.Name == name) is Item item)
{
Item newItem = item.Copy();
newItem.User = user;
SetSellAndTradeTime(newItem);
user.Inventory.Items.Add(newItem);
}
}
}
pc2.Add("list", quests);
pc2.SaveConfig();
}
}
return user;
}
@ -1480,6 +1516,176 @@ namespace Oshima.Core.Utils
}
}
public static Dictionary<string, string> QuestList
{
get
{
return new()
{
{
"丢失的共享单车之谜",
"寻找被魔法传送走的共享单车。"
},
{
"咖啡店的神秘顾客",
"调查每天都点奇怪饮品的神秘顾客。"
},
{
"地铁里的幽灵乘客",
"找出在地铁里出没的半透明乘客。"
},
{
"公园的精灵涂鸦",
"清除公园里突然出现的精灵涂鸦。"
},
{
"手机信号的干扰源",
"找出干扰手机信号的魔法源头。"
},
{
"外卖小哥的奇遇",
"帮助外卖小哥找回被偷走的魔法外卖。"
},
{
"广场舞的魔法节奏",
"调查广场舞音乐中隐藏的魔法节奏。"
},
{
"自动贩卖机的秘密",
"找出自动贩卖机里突然出现的奇怪物品。"
},
{
"便利店的异次元入口",
"调查便利店里突然出现的异次元入口。"
},
{
"街头艺人的魔法表演",
"调查街头艺人表演中使用的魔法。"
},
{
"午夜电台的幽灵来电",
"调查午夜电台收到的奇怪来电。"
},
{
"高楼大厦的秘密通道",
"寻找隐藏在高楼大厦里的秘密通道。"
},
{
"城市下水道的神秘生物",
"调查城市下水道里出现的神秘生物。"
},
{
"废弃工厂的魔法实验",
"调查废弃工厂里进行的秘密魔法实验。"
},
{
"博物馆的活化雕像",
"调查博物馆里突然活化的雕像。"
},
{
"公园的都市传说",
"调查公园里流传的都市传说。"
},
{
"闹鬼公寓的真相",
"调查闹鬼公寓里的真相。"
},
{
"地下酒吧的秘密交易",
"调查地下酒吧里进行的秘密魔法交易。"
},
{
"旧书店的魔法书籍",
"寻找旧书店里隐藏的魔法书籍。"
},
{
"涂鸦墙的预言",
"解读涂鸦墙上出现的神秘预言。"
},
{
"黑客的魔法入侵",
"阻止黑客利用魔法入侵城市网络。"
},
{
"高科技魔法装备的测试",
"测试新型的高科技魔法装备。"
},
{
"无人机的魔法改造",
"改造无人机,使其拥有魔法能力。"
},
{
"人工智能的觉醒",
"调查人工智能觉醒的原因。"
},
{
"虚拟现实的魔法世界",
"探索虚拟现实中出现的魔法世界。"
},
{
"智能家居的魔法故障",
"修复智能家居的魔法故障。"
},
{
"能量饮料的魔法副作用",
"调查能量饮料的魔法副作用。"
},
{
"社交媒体的魔法病毒",
"清除社交媒体上出现的魔法病毒。"
},
{
"共享汽车的魔法漂移",
"调查共享汽车的魔法漂移现象。"
},
{
"城市监控的魔法干扰",
"修复城市监控的魔法干扰。"
},
{
"寻找丢失的魔法宠物",
"寻找在城市里走失的魔法宠物。"
},
{
"参加魔法美食节",
"参加城市举办的魔法美食节。"
},
{
"解开城市谜题",
"解开隐藏在城市各处的谜题。"
},
{
"参加魔法cosplay大赛",
"参加城市举办的魔法cosplay大赛。"
},
{
"寻找隐藏的魔法商店",
"寻找隐藏在城市里的魔法商店。"
},
{
"制作魔法主题的街头艺术",
"在城市里创作魔法主题的街头艺术。"
},
{
"举办一场魔法快闪活动",
"在城市里举办一场魔法快闪活动。"
},
{
"寻找失落的魔法乐器",
"寻找失落的魔法乐器,让城市充满音乐。"
},
{
"参加魔法运动会",
"参加城市举办的魔法运动会。"
},
{
"拯救被困在魔法结界里的市民",
"拯救被困在城市魔法结界里的市民。"
}
};
}
}
public static Dictionary<int, List<Skill>> GenerateRoundRewards(int maxRound)
{
Dictionary<int, List<Skill>> roundRewards = [];
@ -1570,5 +1776,57 @@ namespace Oshima.Core.Utils
statistics[character].Rating = CalculateRating(statistics[character], team);
}
}
public static string CheckQuestList(PluginConfig pc)
{
if (pc.Count == 0)
{
// 生成任务,任务名和奖励物品的数组
List<Quest> quests = [];
for (int i = 0; i < 6; i++)
{
Dictionary<string, int> items = [];
items[General.GameplayEquilibriumConstant.InGameCurrency] = 1500;
items[General.GameplayEquilibriumConstant.InGameMaterial] = 5;
int index = Random.Shared.Next(AllItems.Count);
Item item = AllItems[index];
items.Add(item.Name, 1);
while (true)
{
int index2 = Random.Shared.Next(AllItems.Count);
if (index2 != index)
{
Item item2 = AllItems[index2];
items.Add(item2.Name, 1);
break;
}
}
string name = QuestList.Keys.OrderBy(o => Random.Shared.Next()).First();
Quest quest = new()
{
Id = quests.Count > 0 ? quests.Max(q => q.Id) + 1 : 1,
Name = name,
Description = QuestList[name],
EstimatedMinutes = Random.Shared.Next(10, 41),
Awards = items
};
quests.Add(quest);
}
pc.Add("list", quests);
return string.Join("\r\n", quests);
}
else
{
List<Quest> quests = pc.Get<List<Quest>>("list") ?? [];
if (quests.Count > 0)
{
return string.Join("\r\n", quests);
}
else
{
return "任务列表为空,请等待刷新!";
}
}
}
}
}