ddon-server/Arrowgene.Ddon.GameServer/Handler/QuestGetTutorialQuestListHandler.cs
Paul Campbell 0bd7bcd404 feat: Add Sub Story Quest Handlers
Added handlers and required packets for:
- QuestAddPackageQuestPointHandler
- QuestGetPackageQuestInfoDetailHandler
- QuestGetPackageQuestInfoHandler

Added new quests
- q10300102.csx
- q60300030.csx

Added a new settings file substory.csx to describe the mission
requirements.

Database 56 -> 57

Co-authored-by: @hankhotspur
2026-04-21 23:02:46 -04:00

64 lines
2.4 KiB
C#

using Arrowgene.Ddon.GameServer.Characters;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Model.Quest;
using Arrowgene.Logging;
namespace Arrowgene.Ddon.GameServer.Handler
{
public class QuestGetTutorialQuestListHandler : GameRequestPacketHandler<C2SQuestGetTutorialQuestListReq, S2CQuestGetTutorialQuestListRes>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(QuestGetTutorialQuestListHandler));
public QuestGetTutorialQuestListHandler(DdonGameServer server) : base(server)
{
}
public override S2CQuestGetTutorialQuestListRes Handle(GameClient client, C2SQuestGetTutorialQuestListReq request)
{
var result = new S2CQuestGetTutorialQuestListRes()
{
StageNo = request.StageNo,
};
var completedQuests = Server.Database.GetCompletedQuestsByType(client.Character.CommonId, QuestType.Tutorial);
// This handler should return personal quests which have not been started
// yet when the player enters the StageNo
foreach (var questScheduleId in QuestManager.GetQuestByStageNo(QuestType.Tutorial, request.StageNo))
{
var quest = QuestManager.GetQuestByScheduleId(questScheduleId);
if (quest == null || !quest.IsActive(client))
{
continue;
}
uint stageNo = (uint) StageManager.ConvertIdToStageNo(quest.StageId);
if (stageNo != request.StageNo)
{
continue;
}
if (completedQuests.Exists(x => x.QuestId == quest.QuestId))
{
continue;
}
var questStateManager = QuestManager.GetQuestStateManager(client, quest);
var questState = questStateManager.GetQuestState(questScheduleId);
if (questState == null || questState.Step == 0)
{
var tutorialQuest = quest.ToCDataTutorialQuestList(0);
result.TutorialQuestList.Add(tutorialQuest);
}
if (questState == null)
{
questStateManager.AddNewQuest(quest, 0);
}
}
return result;
}
}
}