Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: Area Ranks #671

Open
wants to merge 26 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
d859740
feat: Area Rank Exploration
pacampbell Oct 12, 2024
933c351
Structures for the remaining area packets. Upgrades some handlers to …
RyanYappert Dec 22, 2024
6abc6fb
Area Rank Spot Info.
RyanYappert Dec 23, 2024
0c3d1cd
Fix serialization to JSON for CDataQuestOrderList; upgrade handler to…
RyanYappert Dec 23, 2024
ec3801b
Tweaks to many area rank packets and CDatas.
RyanYappert Dec 27, 2024
fa81f34
Area Rank assets; supply and requirements.
RyanYappert Dec 27, 2024
df5b850
Area Rank stuff in the DB. Migrates DB version 27 -> 28.
RyanYappert Dec 27, 2024
2291843
AreaRankManager, /areapoint command, and handlers for ranking up, rec…
RyanYappert Dec 27, 2024
b4343a6
AreaPointResetTask, every Monday at 5.
RyanYappert Dec 27, 2024
669e9bf
Some cleanup on other chat commands; research on the ShopType enum.
RyanYappert Dec 27, 2024
9a066f8
Add AP support to quests, provide all existing quests with some AP va…
RyanYappert Dec 27, 2024
197c491
Fix missing area ranks on character creation, add ResponseErrorExcept…
RyanYappert Dec 27, 2024
4b39796
Review comments.
RyanYappert Dec 28, 2024
e3356fe
The party leader's personal quests can always drive world state.
RyanYappert Jan 8, 2025
7b96b25
Adjustments to Area Rank data structure; add toggle for ranks control…
RyanYappert Jan 17, 2025
48370da
Add fallback for quests without explicit AP rewards; revert WQ files.
RyanYappert Jan 17, 2025
ccb1326
Clean up rebase from hell; add areapoint and arearank commands.
RyanYappert Jan 17, 2025
a0ef7ba
Fix typo in migration; upgrade QuestQuestProgressHandler so errors pr…
RyanYappert Jan 28, 2025
8868816
Improve the data structure of Area Rank assets.
RyanYappert Jan 28, 2025
57a9303
Clean up /info; add the current encounter spot to that information.
RyanYappert Jan 28, 2025
413fff0
Finishing an area trial should alert the player that they can rank up.
RyanYappert Jan 28, 2025
6052780
Clean up training room handler.
RyanYappert Feb 1, 2025
503583d
Support for the CAUTION announcement in quest blocks.
RyanYappert Feb 3, 2025
15e144f
Fix Area Rank/Spot Unlock handlers, after much pain and grief.
RyanYappert Feb 8, 2025
2b0956f
Add Area Rank restrictions to MSQ where applicable.
RyanYappert Feb 8, 2025
4f198cf
Area Trials for Hidell Plains and Breya Coast.
RyanYappert Feb 8, 2025
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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion Arrowgene.Ddon.Database/DdonDatabaseBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public static class DdonDatabaseBuilder
private static readonly ILogger Logger = LogProvider.Logger<Logger>(typeof(DdonDatabaseBuilder));
private const string DefaultSchemaFile = "Script/schema_sqlite.sql";

public const uint Version = 27;
public const uint Version = 28;

public static IDatabase Build(DatabaseSetting settings)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
CREATE TABLE "ddon_area_rank" (
"character_id" INTEGER NOT NULL,
"area_id" INTEGER NOT NULL,
"rank" INTEGER NOT NULL,
"point" INTEGER NOT NULL,
"week_point" INTEGER NOT NULL,
"last_week_point" INTEGER NOT NULL,
CONSTRAINT "pk_ddon_area_rank" PRIMARY KEY ("character_id", "area_id"),
CONSTRAINT "fk_ddon_area_rank_character_id" FOREIGN KEY ("character_id") REFERENCES "ddon_character"("character_id") ON DELETE CASCADE
);

CREATE TABLE "ddon_area_rank_supply" (
"character_id" INTEGER NOT NULL,
"area_id" INTEGER NOT NULL,
"index" INTEGER NOT NULL,
"item_id" INTEGER NOT NULL,
"num" INTEGER NOT NULL,
CONSTRAINT "pk_ddon_area_rank_supply" PRIMARY KEY ("character_id", "area_id", "index"),
CONSTRAINT "fk_ddon_area_rank_supply_character_id" FOREIGN KEY ("character_id") REFERENCES "ddon_character"("character_id") ON DELETE CASCADE
);

CREATE TABLE "temp_area_rank"
(
"character_id" INTEGER NOT NULL,
"area_id" INTEGER NOT NULL,
"rank" INTEGER NOT NULL,
"point" INTEGER NOT NULL,
"week_point" INTEGER NOT NULL,
"last_week_point" INTEGER NOT NULL
);

INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 1, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 2, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 3, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 4, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 5, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 6, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 7, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 8, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 9, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 10, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 11, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 12, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 13, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 14, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 15, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 16, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 17, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 18, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 19, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 20, 0, 0, 0, 0 FROM "ddon_character";
INSERT INTO "temp_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point") SELECT "character_id", 21, 0, 0, 0, 0 FROM "ddon_character";

INSERT INTO "ddon_area_rank" ("character_id", "area_id", "rank", "point", "week_point", "last_week_point")
SELECT * FROM "temp_area_rank"
ORDER BY "character_id", "area_id";

DROP TABLE "temp_area_rank";
alborrajo marked this conversation as resolved.
Show resolved Hide resolved

INSERT INTO "ddon_schedule_next" ("type", "timestamp") VALUES (4, 0);
28 changes: 25 additions & 3 deletions Arrowgene.Ddon.Database/Files/Database/Script/schema_sqlite.sql
Original file line number Diff line number Diff line change
Expand Up @@ -776,17 +776,39 @@ CREATE TABLE IF NOT EXISTS "ddon_epitaph_road_unlocks" (
CONSTRAINT "fk_ddon_epitaph_road_unlocks_character_id" FOREIGN KEY ("character_id") REFERENCES "ddon_character"("character_id") ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS ddon_epitaph_claimed_weekly_rewards (
CREATE TABLE IF NOT EXISTS "ddon_epitaph_claimed_weekly_rewards" (
"character_id" INTEGER NOT NULL,
"epitaph_id" INTEGER NOT NULL,
CONSTRAINT "pk_ddon_epitaph_claimed_weekly_rewards" PRIMARY KEY ("character_id", "epitaph_id"),
CONSTRAINT "fk_ddon_epitaph_claimed_weekly_rewards_character_id" FOREIGN KEY ("character_id") REFERENCES "ddon_character"("character_id") ON DELETE CASCADE
);


CREATE TABLE IF NOT EXISTS ddon_schedule_next (
CREATE TABLE IF NOT EXISTS "ddon_schedule_next" (
"type" INTEGER NOT NULL,
"timestamp" BIGINT NOT NULL,
PRIMARY KEY("type")
);
INSERT INTO ddon_schedule_next(type, timestamp) VALUES (19, 0);

CREATE TABLE IF NOT EXISTS "ddon_area_rank" (
"character_id" INTEGER NOT NULL,
"area_id" INTEGER NOT NULL,
"rank" INTEGER NOT NULL,
"point" INTEGER NOT NULL,
"week_point" INTEGER NOT NULL,
"last_week_point" INTEGER NOT NULL,
CONSTRAINT "pk_ddon_area_rank" PRIMARY KEY ("character_id", "area_id"),
CONSTRAINT "fk_ddon_area_rank_character_id" FOREIGN KEY ("character_id") REFERENCES "ddon_character"("character_id") ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS "ddon_area_rank_supply" (
"character_id" INTEGER NOT NULL,
"area_id" INTEGER NOT NULL,
"index" INTEGER NOT NULL,
"item_id" INTEGER NOT NULL,
"num" INTEGER NOT NULL,
CONSTRAINT "pk_ddon_area_rank_supply" PRIMARY KEY ("character_id", "area_id", "index"),
CONSTRAINT "fk_ddon_area_rank_supply_character_id" FOREIGN KEY ("character_id") REFERENCES "ddon_character"("character_id") ON DELETE CASCADE
);

INSERT INTO "ddon_schedule_next" ("type", "timestamp") VALUES (4, 0);
12 changes: 12 additions & 0 deletions Arrowgene.Ddon.Database/IDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -600,5 +600,17 @@ bool InsertBBMContentTreasure(
// Scheduler
Dictionary<TaskType, SchedulerTaskEntry> SelectAllTaskEntries();
bool UpdateScheduleInfo(TaskType type, long timestamp);

// Area Rank
bool InsertAreaRank(uint characterId, AreaRank areaRank, DbConnection? connectionIn = null);
bool UpdateAreaRank(uint characterId, AreaRank areaRank, DbConnection? connectionIn = null);
Dictionary<QuestAreaId, AreaRank> SelectAreaRank(uint characterId, DbConnection? connectionIn = null);
List<(uint CharacterId, AreaRank Rank)> SelectAllAreaRank(DbConnection? connectionIn = null);
bool ResetAreaRankPoint(DbConnection? connectionIn = null);
bool InsertAreaRankSupply(uint characterId, QuestAreaId areaId, uint index, uint itemId, uint num, DbConnection? connectionIn = null);
bool UpdateAreaRankSupply(uint characterId, QuestAreaId areaId, uint index, uint itemId, uint num, DbConnection? connectionIn = null);
Dictionary<QuestAreaId, List<CDataRewardItemInfo>> SelectAreaRankSupply(uint characterId, DbConnection? connectionIn = null);
List<CDataRewardItemInfo> SelectAreaRankSupply(uint characterId, QuestAreaId areaId, DbConnection? connectionIn = null);
bool DeleteAreaRankSupply(DbConnection? connectionIn = null);
}
}
Loading
Loading