Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 5 additions & 5 deletions Arrowgene.Ddon.Database/DdonDatabaseBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using Arrowgene.Ddon.Database.Model;
using Arrowgene.Ddon.Database.Sql;
using Arrowgene.Ddon.Shared.Entity;
using Arrowgene.Logging;
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

namespace Arrowgene.Ddon.Database;

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

public const uint Version = 44;
public const uint Version = 45;
private static readonly ILogger Logger = LogProvider.Logger<Logger>(typeof(DdonDatabaseBuilder));

public static IDatabase Build(DatabaseSetting settings)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
CREATE TABLE "ddon_light_quests"
(
"variant_id" INTEGER NOT NULL,
"quest_schedule_id" INTEGER NOT NULL,
"quest_id" INTEGER NOT NULL,
"target" INTEGER NOT NULL,
"level" INTEGER NOT NULL,
"count" INTEGER NOT NULL,
"reward_xp" INTEGER NOT NULL,
"reward_g" INTEGER NOT NULL,
"reward_r" INTEGER NOT NULL,
"reward_ap" INTEGER NOT NULL,
"distribution_end" DATETIME NOT NULL,
CONSTRAINT "pk_ddon_light_quests_variant_id" PRIMARY KEY ("variant_id")
);
INSERT INTO "ddon_schedule_next"(type, timestamp)
VALUES (6, 0);

DELETE FROM ddon_priority_quests;
DELETE FROM ddon_rank_record;
18 changes: 18 additions & 0 deletions Arrowgene.Ddon.Database/Files/Database/Script/schema_sqlite.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1023,6 +1023,24 @@ CREATE TABLE IF NOT EXISTS "ddon_job_emblem" (
CONSTRAINT fk_ddon_job_emblem_character_id FOREIGN KEY ("character_id") REFERENCES "ddon_character" ("character_id") ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS "ddon_light_quests"
(
"variant_id" INTEGER NOT NULL,
"quest_schedule_id" INTEGER NOT NULL,
"quest_id" INTEGER NOT NULL,
"target" INTEGER NOT NULL,
"level" INTEGER NOT NULL,
"count" INTEGER NOT NULL,
"reward_xp" INTEGER NOT NULL,
"reward_g" INTEGER NOT NULL,
"reward_r" INTEGER NOT NULL,
"reward_ap" INTEGER NOT NULL,
"distribution_end" DATETIME NOT NULL,
CONSTRAINT "pk_ddon_light_quests_variant_id" PRIMARY KEY ("variant_id")
);
INSERT INTO "ddon_schedule_next"(type, timestamp)
VALUES (6, 0);

CREATE TABLE IF NOT EXISTS "ddon_pawn_favorites" (
"character_id" INTEGER NOT NULL,
"pawn_id" INTEGER NOT NULL,
Expand Down
6 changes: 6 additions & 0 deletions Arrowgene.Ddon.Database/IDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Arrowgene.Ddon.Database.Model;
using Arrowgene.Ddon.Database.Sql.Core.Migration;
using Arrowgene.Ddon.Shared.Entity;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Entity.Structure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Ddon.Shared.Model.BattleContent;
Expand Down Expand Up @@ -588,6 +589,11 @@ List<CDataJobOrderProgress> GetJobMasterActiveOrderProgress(uint characterId, Jo
public JobEmblem GetJobEmblemData(uint characterId, JobId jobId, DbConnection? connectionIn = null);
public List<JobEmblem> GetAllJobEmblemData(uint characterId, DbConnection? connectionIn = null);

// Light Quest Rotation
bool InsertLightQuestRecord(LightQuestRecord lightQuestRecord, DbConnection? connectionIn = null);
List<LightQuestRecord> SelectLightQuestRecords(DbConnection? connectionIn = null);
bool DeleteLightQuestRecord(uint scheduleId, DbConnection? connectionIn = null);

bool InsertPawnFavorite(uint characterId, uint pawnId, DbConnection? connectionIn = null);
bool DeletePawnFavorite(uint characterId, uint pawnId, DbConnection? connectionIn = null);
HashSet<uint> GetPawnFavorites(uint characterId, DbConnection? connectionIn = null);
Expand Down
105 changes: 105 additions & 0 deletions Arrowgene.Ddon.Database/Sql/Core/DdonSqlDbLightQuest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Entity.Structure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Ddon.Shared.Model.Quest;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Arrowgene.Ddon.Database.Sql.Core
{
public partial class DdonSqlDb : SqlDb
{
private static readonly string[] DdonLightQuestFields =
[
"variant_id",
"quest_schedule_id", "quest_id", "target", "level", "count",
"reward_xp", "reward_g", "reward_r", "reward_ap",
"distribution_end"
];

private readonly string SqlInsertLightQuestRecord =
$"INSERT INTO \"ddon_light_quests\" ({BuildQueryField(DdonLightQuestFields)}) VALUES ({BuildQueryInsert(DdonLightQuestFields)});";
private readonly string SqlSelectLightQuestRecords =
$"SELECT {BuildQueryField(DdonLightQuestFields)} FROM \"ddon_light_quests\";";
private readonly string SqlDeleteLightQuestRecord =
$"DELETE FROM \"ddon_light_quests\" WHERE \"quest_schedule_id\"=@quest_schedule_id;";

private void AddParameter(DbCommand command, LightQuestRecord record)
{
AddParameter(command, "variant_id", record.VariantIndex);
AddParameter(command, "quest_schedule_id", record.QuestScheduleId);
AddParameter(command, "quest_id", (uint)record.QuestId);
AddParameter(command, "target", record.Target);
AddParameter(command, "level", record.Level);
AddParameter(command, "count", record.Count);
AddParameter(command, "reward_xp", record.RewardXP);
AddParameter(command, "reward_g", record.RewardG);
AddParameter(command, "reward_r", record.RewardR);
AddParameter(command, "reward_ap", record.RewardAP);
AddParameter(command, "distribution_end", record.DistributionEnd.UtcDateTime);
}

private LightQuestRecord ReadLightQuestRecord(DbDataReader reader)
{
LightQuestRecord record = new();
record.VariantIndex = GetUInt32(reader, "variant_id");
record.QuestId = (QuestId)GetUInt32(reader, "quest_id");
record.Target = GetInt32(reader, "target");
record.Level = GetUInt16(reader, "level");
record.Count = GetInt32(reader, "count");
record.RewardXP = GetUInt32(reader, "reward_xp");
record.RewardG = GetUInt32(reader, "reward_g");
record.RewardR = GetUInt32(reader, "reward_r");
record.RewardAP = GetUInt32(reader, "reward_ap");
record.DistributionEnd = GetDateTime(reader, "distribution_end");

return record;
}

public override bool InsertLightQuestRecord(LightQuestRecord record, DbConnection? connectionIn = null)
{
return ExecuteQuerySafe(connectionIn, connection =>
{
return ExecuteNonQuery(connection, SqlInsertLightQuestRecord, command =>
{
AddParameter(command, record);
}) == 1;
});
}

public override List<LightQuestRecord> SelectLightQuestRecords(DbConnection? connectionIn = null)
{
List<LightQuestRecord> results = new();
ExecuteQuerySafe(connectionIn, connection =>
{
ExecuteReader(connection, SqlSelectLightQuestRecords, command =>
{},
reader =>
{
while (reader.Read())
{
results.Add(ReadLightQuestRecord(reader));
}
});
});
return results;
}

public override bool DeleteLightQuestRecord(uint scheduleId, DbConnection? connectionIn = null)
{
return ExecuteQuerySafe(connectionIn, connection =>
{
return ExecuteNonQuery(connection, SqlDeleteLightQuestRecord, command =>
{
AddParameter(command, "@quest_schedule_id", scheduleId);
}) == 1;
});
}


}
}
Loading
Loading