Skip to content

Commit 73b85a3

Browse files
authored
Merge pull request #822 from RyanYappert/feat/board_quest_rework
Feat: Quest Schedule ID Rework + Board Quest Rotation
2 parents 05f9d0c + d2b9f7f commit 73b85a3

560 files changed

Lines changed: 9043 additions & 22040 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: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
using System;
2-
using System.IO;
3-
using System.Text;
4-
using System.Text.RegularExpressions;
51
using Arrowgene.Ddon.Database.Model;
62
using Arrowgene.Ddon.Database.Sql;
73
using Arrowgene.Ddon.Shared.Entity;
84
using Arrowgene.Logging;
5+
using System;
6+
using System.IO;
7+
using System.Text;
8+
using System.Text.RegularExpressions;
99

1010
namespace Arrowgene.Ddon.Database;
1111

1212
public static class DdonDatabaseBuilder
1313
{
1414
private const string DefaultSchemaFile = "Script/schema_sqlite.sql";
1515

16-
public const uint Version = 44;
16+
public const uint Version = 45;
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
@@ -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)