mirror of
https://github.com/oshima-studios/OshimaGameModule.git
synced 2026-04-20 05:25:01 +00:00
补全做活动任务、领活动奖励
This commit is contained in:
parent
5aa1701d85
commit
b344b9b20b
@ -163,8 +163,8 @@
|
||||
{"公告", "查看系统公告"},
|
||||
{"活动", "查看活动中心"},
|
||||
{"查活动 <活动序号>", "查看指定活动详情"},
|
||||
{"做活动任务 <活动序号> <任务序号>", "开始指定活动任务"},
|
||||
{"领取奖励 <活动序号>", "领取活动的奖励"},
|
||||
{"做活动任务 <活动序号> <任务序号>", "做指定的活动任务"},
|
||||
{"领取奖励 <活动序号> <任务序号>", "领取活动任务的奖励"},
|
||||
};
|
||||
|
||||
public static Dictionary<string, string> StoreHelp { get; } = new() {
|
||||
|
||||
@ -2607,7 +2607,7 @@ namespace Oshima.FunGame.OshimaServers.Service
|
||||
if (userActivities.Values.FirstOrDefault(a => a.Id == id) is Activity userActivity)
|
||||
{
|
||||
if (result != "") result += "\r\n";
|
||||
result += userActivity.ToString(true, true);
|
||||
result += GetActivityString(userActivity, true, true);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@ -4973,6 +4973,100 @@ namespace Oshima.FunGame.OshimaServers.Service
|
||||
return builder.ToString().Trim();
|
||||
}
|
||||
|
||||
public static bool ExecuteImmediateQuest(User user, Quest quest, out string result, Activity? activity = null)
|
||||
{
|
||||
result = "在任务过程中,你碰巧遇到了米莉,任务直接完成了!";
|
||||
return true;
|
||||
}
|
||||
|
||||
public static string SettleActivityQuest(User user, Activity activity, Quest quest)
|
||||
{
|
||||
if (quest.AwardsString != "")
|
||||
{
|
||||
if (quest.CreditsAward > 0)
|
||||
{
|
||||
user.Inventory.Credits += quest.CreditsAward;
|
||||
}
|
||||
if (quest.MaterialsAward > 0)
|
||||
{
|
||||
user.Inventory.Materials += quest.MaterialsAward;
|
||||
}
|
||||
foreach (Item item in quest.Awards)
|
||||
{
|
||||
if (quest.AwardsCount.TryGetValue(item.Name, out int qty))
|
||||
{
|
||||
for (int i = 0; i < qty; i++)
|
||||
{
|
||||
if (FunGameConstant.AllItems.FirstOrDefault(i => i.Name == item.Name) != null)
|
||||
{
|
||||
AddItemToUserInventory(user, item, copyLevel: item.ItemType == ItemType.MagicCard);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $"活动【{activity.Name}】的任务【{quest.Name}】已结算,获得奖励:【{quest.AwardsString}】!";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string GetActivityString(Activity activity, bool showQuests, bool isSubActivity = false, User? user = null)
|
||||
{
|
||||
activity.UpdateState();
|
||||
StringBuilder builder = new();
|
||||
|
||||
if (!isSubActivity)
|
||||
{
|
||||
builder.AppendLine($"☆--- {activity.Name} ---☆");
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.AppendLine($"==[ {activity.Name} ]==");
|
||||
}
|
||||
|
||||
builder.AppendLine($"{activity.Description}");
|
||||
builder.AppendLine($"活动状态:{CommonSet.GetActivityStatus(activity.Status)}");
|
||||
builder.AppendLine(activity.GetTimeString(!isSubActivity));
|
||||
|
||||
if (showQuests && activity.Quests.Count > 0)
|
||||
{
|
||||
builder.AppendLine("=== 任务列表 ===");
|
||||
builder.AppendLine(string.Join("\r\n", activity.Quests.Select(q => GetQuestString(q, activity, user))));
|
||||
}
|
||||
|
||||
return builder.ToString().Trim();
|
||||
}
|
||||
|
||||
public static string GetQuestString(Quest quest, Activity? activity = null, User? user = null)
|
||||
{
|
||||
string progressString = "";
|
||||
if (quest.QuestType == QuestType.Progressive)
|
||||
{
|
||||
progressString = $"\r\n当前进度:{quest.Progress}/{quest.MaxProgress}";
|
||||
}
|
||||
|
||||
string str = $"{quest.Id}. {quest.Name}\r\n" +
|
||||
$"{quest.Description}\r\n" +
|
||||
(quest.QuestType == QuestType.Continuous ? $"需要时间:{quest.EstimatedMinutes} 分钟\r\n" : "") +
|
||||
(quest.StartTime.HasValue ? $"开始时间:{quest.StartTime.Value.ToString(General.GeneralDateTimeFormatChinese)}" +
|
||||
(quest.Status == QuestState.InProgress && quest.QuestType == QuestType.Continuous ?
|
||||
$"\r\n预计在 {Math.Max(Math.Round((quest.StartTime.Value.AddMinutes(quest.EstimatedMinutes) - DateTime.Now).TotalMinutes, MidpointRounding.ToPositiveInfinity), 1)} 分钟后完成" : "")
|
||||
+ "\r\n"
|
||||
: "") +
|
||||
$"完成奖励:{quest.AwardsString}\r\n" +
|
||||
$"任务状态:";
|
||||
|
||||
if (activity != null && user != null && activity.QuestsAwardedUsers.TryGetValue(quest.Id, out HashSet<long>? value) && (value?.Contains(user.Id) ?? false))
|
||||
{
|
||||
str += CommonSet.GetQuestStatus(QuestState.Settled);
|
||||
}
|
||||
else
|
||||
{
|
||||
str += CommonSet.GetQuestStatus(quest.Status);
|
||||
}
|
||||
|
||||
return str + progressString + (quest.SettleTime.HasValue ? $"\r\n结算时间:{quest.SettleTime.Value.ToString(General.GeneralDateTimeFormatChinese)}" : "");
|
||||
}
|
||||
|
||||
public static void RefreshNotice()
|
||||
{
|
||||
Notices.LoadConfig();
|
||||
|
||||
@ -4538,9 +4538,15 @@ namespace Oshima.FunGame.WebAPI.Controllers
|
||||
else if (quest.QuestType == QuestType.Immediate)
|
||||
{
|
||||
msgs.Add($"开始任务【{quest.Name}】成功!任务信息如下:\r\n{quest}");
|
||||
// TODO:实现任务逻辑
|
||||
if (FunGameService.ExecuteImmediateQuest(user, quest, out string result))
|
||||
{
|
||||
quest.Status = QuestState.Completed;
|
||||
msgs.Add("在任务过程中,你碰巧遇到了米莉,任务直接完成了!");
|
||||
msgs.Add(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
msgs.Add("你的任务失败了,重新做一次吧……");
|
||||
}
|
||||
}
|
||||
else if (quest.QuestType == QuestType.Progressive)
|
||||
{
|
||||
@ -6572,6 +6578,109 @@ namespace Oshima.FunGame.WebAPI.Controllers
|
||||
{
|
||||
User user = FunGameService.GetUser(pc);
|
||||
|
||||
FunGameService.GetEventCenter(user);
|
||||
if (FunGameService.Activities.FirstOrDefault(a => a.Id == activityid) is Activity activity && activity.Quests.FirstOrDefault(q => q.Id == questid) is Quest quest)
|
||||
{
|
||||
if (quest.QuestType == QuestType.Immediate)
|
||||
{
|
||||
if (activity.HasUserAwarded(user.Id, quest))
|
||||
{
|
||||
msg = "你已经结算过该任务的奖励了!请检查活动详情。";
|
||||
}
|
||||
else if (quest.Status != QuestState.NotStarted)
|
||||
{
|
||||
msg = "现在还不可以做这个任务。";
|
||||
}
|
||||
else if (FunGameService.ExecuteImmediateQuest(user, quest, out string result, activity))
|
||||
{
|
||||
string awardString = FunGameService.SettleActivityQuest(user, activity, quest);
|
||||
if (awardString != "")
|
||||
{
|
||||
msg = awardString;
|
||||
activity.RegisterAwardedUser(user.Id, quest);
|
||||
}
|
||||
if (result != "")
|
||||
{
|
||||
msg = result + "\r\n" + msg;
|
||||
}
|
||||
if (msg == "")
|
||||
{
|
||||
msg = "任务无法进行,请联系服务器管理员。";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = $"请根据任务要求完成任务:\r\n{quest}。";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = "找不到符合条件的活动/任务。";
|
||||
}
|
||||
|
||||
FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user);
|
||||
|
||||
return msg;
|
||||
}
|
||||
else
|
||||
{
|
||||
FunGameService.ReleaseUserSemaphoreSlim(userid);
|
||||
return noSaved;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("claimeventprize")]
|
||||
public string ClaimEventPrize([FromQuery] long? uid = null, [FromQuery] long? aid = null, [FromQuery] long? qid = null)
|
||||
{
|
||||
long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
|
||||
long activityid = aid ?? 0;
|
||||
long questid = qid ?? 0;
|
||||
|
||||
PluginConfig pc = FunGameService.GetUserConfig(userid, out _);
|
||||
|
||||
string msg = "";
|
||||
if (pc.Count > 0)
|
||||
{
|
||||
User user = FunGameService.GetUser(pc);
|
||||
|
||||
FunGameService.GetEventCenter(user);
|
||||
if (FunGameService.Activities.FirstOrDefault(a => a.Id == activityid) is Activity activity && activity.Quests.FirstOrDefault(q => q.Id == questid) is Quest quest)
|
||||
{
|
||||
if (quest.QuestType == QuestType.Progressive || quest.QuestType == QuestType.Continuous)
|
||||
{
|
||||
if (activity.HasUserAwarded(user.Id, quest))
|
||||
{
|
||||
msg = "你已经结算过该任务的奖励了!请检查活动详情。";
|
||||
}
|
||||
else if (quest.Status != QuestState.Completed)
|
||||
{
|
||||
msg = $"该任务还未完成。\r\n{quest}";
|
||||
}
|
||||
else
|
||||
{
|
||||
string awardString = FunGameService.SettleActivityQuest(user, activity, quest);
|
||||
if (awardString != "")
|
||||
{
|
||||
msg = awardString;
|
||||
activity.RegisterAwardedUser(user.Id, quest);
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = "无法领取该任务的奖励。";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = "该任务只能通过【做活动任务】指令完成并领取奖励。";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = "找不到符合条件的活动/任务。";
|
||||
}
|
||||
|
||||
FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user);
|
||||
|
||||
return msg;
|
||||
|
||||
@ -2561,6 +2561,44 @@ namespace Oshima.FunGame.WebAPI.Services
|
||||
return result;
|
||||
}
|
||||
|
||||
if (e.Detail.StartsWith("做活动任务", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
string detail = e.Detail.Replace("做活动任务", "").Trim();
|
||||
string[] strings = detail.Split(" ", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
|
||||
int aid = -1, qid = -1;
|
||||
if (strings.Length > 0 && int.TryParse(strings[0].Trim(), out aid) && strings.Length > 1 && int.TryParse(strings[1].Trim(), out qid))
|
||||
{
|
||||
if (aid != -1 && qid != -1)
|
||||
{
|
||||
string msg = Controller.PerformEvent(uid, aid, qid);
|
||||
if (msg != "")
|
||||
{
|
||||
await SendAsync(e, "做活动任务", msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
if (e.Detail.StartsWith("领取奖励", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
string detail = e.Detail.Replace("领取奖励", "").Trim();
|
||||
string[] strings = detail.Split(" ", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
|
||||
int aid = -1, qid = -1;
|
||||
if (strings.Length > 0 && int.TryParse(strings[0].Trim(), out aid) && strings.Length > 1 && int.TryParse(strings[1].Trim(), out qid))
|
||||
{
|
||||
if (aid != -1 && qid != -1)
|
||||
{
|
||||
string msg = Controller.ClaimEventPrize(uid, aid, qid);
|
||||
if (msg != "")
|
||||
{
|
||||
await SendAsync(e, "领取奖励", msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
if (e.Detail.StartsWith("批量锁定", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
string detail = e.Detail.Replace("批量锁定", "").Trim();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user