Skip to content

Commit 74e6752

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 eab69d2 commit 74e6752

555 files changed

Lines changed: 8918 additions & 22009 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.

Arrowgene.Ddon.Database/DdonDatabaseBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public static class DdonDatabaseBuilder
1313
{
1414
private const string DefaultSchemaFile = "Script/schema_sqlite.sql";
1515

16-
public const uint Version = 43;
16+
public const uint Version = 44;
1717
private static readonly ILogger Logger = LogProvider.Logger<Logger>(typeof(DdonDatabaseBuilder));
1818

1919
public static IDatabase Build(DatabaseSetting settings)
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
@@ -1022,3 +1022,21 @@ CREATE TABLE IF NOT EXISTS "ddon_job_emblem" (
10221022
CONSTRAINT pk_ddon_job_emblem PRIMARY KEY ("character_id", "job_id"),
10231023
CONSTRAINT fk_ddon_job_emblem_character_id FOREIGN KEY ("character_id") REFERENCES "ddon_character" ("character_id") ON DELETE CASCADE
10241024
);
1025+
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);

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
#region Pawn craft progress
592598

593599
bool ReplacePawnCraftProgress(CraftProgress craftProgress, 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)