diff --git a/src/main/java/emu/grasscutter/game/quest/GameMainQuest.java b/src/main/java/emu/grasscutter/game/quest/GameMainQuest.java index 3685b2c30..45aff59ee 100644 --- a/src/main/java/emu/grasscutter/game/quest/GameMainQuest.java +++ b/src/main/java/emu/grasscutter/game/quest/GameMainQuest.java @@ -346,6 +346,10 @@ public class GameMainQuest { public void save() { DatabaseHelper.saveQuest(this); } + + public void delete() { + DatabaseHelper.deleteQuest(this); + } public ParentQuest toProto() { ParentQuest.Builder proto = ParentQuest.newBuilder() diff --git a/src/main/java/emu/grasscutter/game/quest/GameQuest.java b/src/main/java/emu/grasscutter/game/quest/GameQuest.java index 8605c19b3..e82d9aaa7 100644 --- a/src/main/java/emu/grasscutter/game/quest/GameQuest.java +++ b/src/main/java/emu/grasscutter/game/quest/GameQuest.java @@ -181,6 +181,7 @@ public class GameQuest { } return false; } + public void save() { getMainQuest().save(); } diff --git a/src/main/java/emu/grasscutter/game/quest/QuestManager.java b/src/main/java/emu/grasscutter/game/quest/QuestManager.java index 05238e401..462b83ba8 100644 --- a/src/main/java/emu/grasscutter/game/quest/QuestManager.java +++ b/src/main/java/emu/grasscutter/game/quest/QuestManager.java @@ -313,16 +313,27 @@ public class QuestManager extends BasePlayerManager { } public void loadFromDatabase() { List quests = DatabaseHelper.getAllQuests(getPlayer()); - + for (GameMainQuest mainQuest : quests) { + boolean cancelAdd = false; mainQuest.setOwner(this.getPlayer()); for (GameQuest quest : mainQuest.getChildQuests().values()) { + QuestData questConfig = GameData.getQuestDataMap().get(quest.getSubQuestId()); + + if (questConfig == null) { + mainQuest.delete(); + cancelAdd = true; + break; + } + quest.setMainQuest(mainQuest); - quest.setConfig(GameData.getQuestDataMap().get(quest.getSubQuestId())); + quest.setConfig(questConfig); } - this.getMainQuests().put(mainQuest.getParentQuestId(), mainQuest); + if (!cancelAdd) { + this.getMainQuests().put(mainQuest.getParentQuestId(), mainQuest); + } } }