-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathQuestGetLightQuestListHandler.cs
More file actions
64 lines (55 loc) · 2.68 KB
/
Copy pathQuestGetLightQuestListHandler.cs
File metadata and controls
64 lines (55 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using Arrowgene.Ddon.GameServer.Characters;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Ddon.Shared.Model.Quest;
using Arrowgene.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Arrowgene.Ddon.GameServer.Handler
{
public class QuestGetLightQuestListHandler : GameRequestPacketHandler<C2SQuestGetLightQuestListReq, S2CQuestGetLightQuestListRes>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(QuestGetLightQuestListHandler));
public QuestGetLightQuestListHandler(DdonGameServer server) : base(server)
{
}
public override S2CQuestGetLightQuestListRes Handle(GameClient client, C2SQuestGetLightQuestListReq request)
{
S2CQuestGetLightQuestListRes res = new S2CQuestGetLightQuestListRes
{
BaseId = request.BaseId,
// TODO: Investigate these values.
NotCompleteQuestNum = 10,
GpCompleteEnable = false,
GpCompletePriceGp = 1,
LightQuestList = []
};
var quests = QuestManager.GetQuestsByType(QuestType.Light).Where(x => QuestManager.GetQuestByScheduleId(x).LightQuestDetail.BoardId == request.BaseId);
foreach (var questScheduleId in quests)
{
var lightQuest = QuestManager.GetQuestByScheduleId(questScheduleId);
if (lightQuest.IsDistributionTimed && (DateTimeOffset.Now < lightQuest.DistributionStart || DateTimeOffset.Now > lightQuest.DistributionEnd))
{
continue;
}
if (QuestManager.IsBoardQuest(questScheduleId)
&& client.Character.CompletedQuests.GetValueOrDefault(lightQuest.QuestId)?.ClearCount
>= Server.GameSettings.GameServerSettings.LightQuestRepeatsPerDay)
{
continue;
}
var data = lightQuest.ToCDataLightQuestList();
data.Detail.ClearNum = Server.ClanManager.ClanQuestCompletionStatistics(client.Character.CharacterId, questScheduleId);
if (data.Detail.BoardType == 1 && data.Detail.GetAp == 0)
{
var (basePoints, bonusPoints) = Server.ExpManager.GetAdjustedPointsForQuest(PointType.AreaPoints, AreaRankManager.GetAreaPointReward(lightQuest), lightQuest.QuestType);
data.Detail.GetAp = basePoints + bonusPoints;
}
res.LightQuestList.Add(data);
}
return res;
}
}
}