Skip to content

Commit d001f3d

Browse files
committed
Remove skiptutorial. Add /ql for quest lookup due to ID changes.
Decayed quest cancellation notice on area reset. Clean up EnemyId/EnemyUIId/ClientItemInfos implementation; use ItemId, EnemyId, and EnemyUIId when possible instead of uints Light quest DB stuff, adjustments to handle variant ids, removing decayed quests when returning to town, rotation task and RPC for child servers. Fix some tasks announcing to the non-head servers on the wrong route. Migration 43 -> 44; add support for new quest_id + variant_index scheme for decoupling quest and schedule id. Cleanup inconsistent packet id naming; add some new quest cancellation packets. Light quest generation, mixin for light quest rewards, and asset. Add DeliveryItemsLight and KillTargetEnemies block support to QuestBlockExtension. Add explicit support for DistributionStart/End in the quest asset and quest system. Remove existing board quests.
1 parent fec10c5 commit d001f3d

555 files changed

Lines changed: 8880 additions & 22008 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
CREATE TABLE "ddon_light_quests"
2+
(
3+
"variant_id" INTEGER NOT NULL,
4+
"quest_schedule_id" INTEGER NOT NULL,
5+
"quest_id" INTEGER NOT NULL,
6+
"target" INTEGER NOT NULL,
7+
"level" INTEGER NOT NULL,
8+
"count" INTEGER NOT NULL,
9+
"reward_xp" INTEGER NOT NULL,
10+
"reward_g" INTEGER NOT NULL,
11+
"reward_r" INTEGER NOT NULL,
12+
"reward_ap" INTEGER NOT NULL,
13+
"distribution_end" DATETIME NOT NULL,
14+
CONSTRAINT "pk_ddon_light_quests_variant_id" PRIMARY KEY ("variant_id")
15+
);
16+
INSERT INTO "ddon_schedule_next"(type, timestamp)
17+
VALUES (6, 0);
18+
19+
DELETE FROM ddon_priority_quests;
20+
DELETE FROM ddon_rank_record;

Arrowgene.Ddon.Database/Files/Database/Script/schema_sqlite.sql

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,6 +1023,24 @@ CREATE TABLE IF NOT EXISTS "ddon_job_emblem" (
10231023
CONSTRAINT fk_ddon_job_emblem_character_id FOREIGN KEY ("character_id") REFERENCES "ddon_character" ("character_id") ON DELETE CASCADE
10241024
);
10251025

1026+
CREATE TABLE IF NOT EXISTS "ddon_light_quests"
1027+
(
1028+
"variant_id" INTEGER NOT NULL,
1029+
"quest_schedule_id" INTEGER NOT NULL,
1030+
"quest_id" INTEGER NOT NULL,
1031+
"target" INTEGER NOT NULL,
1032+
"level" INTEGER NOT NULL,
1033+
"count" INTEGER NOT NULL,
1034+
"reward_xp" INTEGER NOT NULL,
1035+
"reward_g" INTEGER NOT NULL,
1036+
"reward_r" INTEGER NOT NULL,
1037+
"reward_ap" INTEGER NOT NULL,
1038+
"distribution_end" DATETIME NOT NULL,
1039+
CONSTRAINT "pk_ddon_light_quests_variant_id" PRIMARY KEY ("variant_id")
1040+
);
1041+
INSERT INTO "ddon_schedule_next"(type, timestamp)
1042+
VALUES (6, 0);
1043+
10261044
CREATE TABLE IF NOT EXISTS "ddon_pawn_favorites" (
10271045
"character_id" INTEGER NOT NULL,
10281046
"pawn_id" INTEGER NOT NULL,

Arrowgene.Ddon.Database/IDatabase.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Arrowgene.Ddon.Database.Model;
77
using Arrowgene.Ddon.Database.Sql.Core.Migration;
88
using Arrowgene.Ddon.Shared.Entity;
9+
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
910
using Arrowgene.Ddon.Shared.Entity.Structure;
1011
using Arrowgene.Ddon.Shared.Model;
1112
using Arrowgene.Ddon.Shared.Model.BattleContent;
@@ -588,6 +589,11 @@ List<CDataJobOrderProgress> GetJobMasterActiveOrderProgress(uint characterId, Jo
588589
public JobEmblem GetJobEmblemData(uint characterId, JobId jobId, DbConnection? connectionIn = null);
589590
public List<JobEmblem> GetAllJobEmblemData(uint characterId, DbConnection? connectionIn = null);
590591

592+
// Light Quest Rotation
593+
bool InsertLightQuestRecord(LightQuestRecord lightQuestRecord, DbConnection? connectionIn = null);
594+
List<LightQuestRecord> SelectLightQuestRecords(DbConnection? connectionIn = null);
595+
bool DeleteLightQuestRecord(uint scheduleId, DbConnection? connectionIn = null);
596+
591597
bool InsertPawnFavorite(uint characterId, uint pawnId, DbConnection? connectionIn = null);
592598
bool DeletePawnFavorite(uint characterId, uint pawnId, DbConnection? connectionIn = null);
593599
HashSet<uint> GetPawnFavorites(uint characterId, DbConnection? connectionIn = null);
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
2+
using Arrowgene.Ddon.Shared.Entity.Structure;
3+
using Arrowgene.Ddon.Shared.Model;
4+
using Arrowgene.Ddon.Shared.Model.Quest;
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Data.Common;
8+
using System.Linq;
9+
using System.Text;
10+
using System.Threading.Tasks;
11+
12+
namespace Arrowgene.Ddon.Database.Sql.Core
13+
{
14+
public partial class DdonSqlDb : SqlDb
15+
{
16+
private static readonly string[] DdonLightQuestFields =
17+
[
18+
"variant_id",
19+
"quest_schedule_id", "quest_id", "target", "level", "count",
20+
"reward_xp", "reward_g", "reward_r", "reward_ap",
21+
"distribution_end"
22+
];
23+
24+
private readonly string SqlInsertLightQuestRecord =
25+
$"INSERT INTO \"ddon_light_quests\" ({BuildQueryField(DdonLightQuestFields)}) VALUES ({BuildQueryInsert(DdonLightQuestFields)});";
26+
private readonly string SqlSelectLightQuestRecords =
27+
$"SELECT {BuildQueryField(DdonLightQuestFields)} FROM \"ddon_light_quests\";";
28+
private readonly string SqlDeleteLightQuestRecord =
29+
$"DELETE FROM \"ddon_light_quests\" WHERE \"quest_schedule_id\"=@quest_schedule_id;";
30+
31+
private void AddParameter(DbCommand command, LightQuestRecord record)
32+
{
33+
AddParameter(command, "variant_id", record.VariantIndex);
34+
AddParameter(command, "quest_schedule_id", record.QuestScheduleId);
35+
AddParameter(command, "quest_id", (uint)record.QuestId);
36+
AddParameter(command, "target", record.Target);
37+
AddParameter(command, "level", record.Level);
38+
AddParameter(command, "count", record.Count);
39+
AddParameter(command, "reward_xp", record.RewardXP);
40+
AddParameter(command, "reward_g", record.RewardG);
41+
AddParameter(command, "reward_r", record.RewardR);
42+
AddParameter(command, "reward_ap", record.RewardAP);
43+
AddParameter(command, "distribution_end", record.DistributionEnd.UtcDateTime);
44+
}
45+
46+
private LightQuestRecord ReadLightQuestRecord(DbDataReader reader)
47+
{
48+
LightQuestRecord record = new();
49+
record.VariantIndex = GetUInt32(reader, "variant_id");
50+
record.QuestId = (QuestId)GetUInt32(reader, "quest_id");
51+
record.Target = GetInt32(reader, "target");
52+
record.Level = GetUInt16(reader, "level");
53+
record.Count = GetInt32(reader, "count");
54+
record.RewardXP = GetUInt32(reader, "reward_xp");
55+
record.RewardG = GetUInt32(reader, "reward_g");
56+
record.RewardR = GetUInt32(reader, "reward_r");
57+
record.RewardAP = GetUInt32(reader, "reward_ap");
58+
record.DistributionEnd = GetDateTime(reader, "distribution_end");
59+
60+
return record;
61+
}
62+
63+
public override bool InsertLightQuestRecord(LightQuestRecord record, DbConnection? connectionIn = null)
64+
{
65+
return ExecuteQuerySafe(connectionIn, connection =>
66+
{
67+
return ExecuteNonQuery(connection, SqlInsertLightQuestRecord, command =>
68+
{
69+
AddParameter(command, record);
70+
}) == 1;
71+
});
72+
}
73+
74+
public override List<LightQuestRecord> SelectLightQuestRecords(DbConnection? connectionIn = null)
75+
{
76+
List<LightQuestRecord> results = new();
77+
ExecuteQuerySafe(connectionIn, connection =>
78+
{
79+
ExecuteReader(connection, SqlSelectLightQuestRecords, command =>
80+
{},
81+
reader =>
82+
{
83+
while (reader.Read())
84+
{
85+
results.Add(ReadLightQuestRecord(reader));
86+
}
87+
});
88+
});
89+
return results;
90+
}
91+
92+
public override bool DeleteLightQuestRecord(uint scheduleId, DbConnection? connectionIn = null)
93+
{
94+
return ExecuteQuerySafe(connectionIn, connection =>
95+
{
96+
return ExecuteNonQuery(connection, SqlDeleteLightQuestRecord, command =>
97+
{
98+
AddParameter(command, "@quest_schedule_id", scheduleId);
99+
}) == 1;
100+
});
101+
}
102+
103+
104+
}
105+
}

0 commit comments

Comments
 (0)