Implement quests

This commit is contained in:
Melledy
2022-05-11 03:56:40 -07:00
parent 54cf45a72e
commit e9d7d5d5f2
27 changed files with 1183 additions and 6 deletions

View File

@@ -12,6 +12,7 @@ import emu.grasscutter.data.custom.AbilityEmbryoEntry;
import emu.grasscutter.data.custom.AbilityModifier;
import emu.grasscutter.data.custom.AbilityModifierEntry;
import emu.grasscutter.data.custom.OpenConfigEntry;
import emu.grasscutter.data.custom.QuestConfig;
import emu.grasscutter.data.custom.ScenePointEntry;
import emu.grasscutter.data.def.*;
import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap;
@@ -27,6 +28,7 @@ public class GameData {
private static final Map<String, AbilityModifierEntry> abilityModifiers = new HashMap<>();
private static final Map<String, OpenConfigEntry> openConfigEntries = new HashMap<>();
private static final Map<String, ScenePointEntry> scenePointEntries = new HashMap<>();
private static final Int2ObjectMap<QuestConfig> questConfigs = new Int2ObjectOpenHashMap<>();
// ExcelConfigs
private static final Int2ObjectMap<PlayerLevelData> playerLevelDataMap = new Int2ObjectOpenHashMap<>();
@@ -122,6 +124,10 @@ public class GameData {
return getScenePointEntries().get(sceneId + "_" + pointId);
}
public static Int2ObjectMap<QuestConfig> getQuestConfigs() {
return questConfigs;
}
public static Int2ObjectMap<AvatarData> getAvatarDataMap() {
return avatarDataMap;
}

View File

@@ -24,6 +24,9 @@ import emu.grasscutter.data.custom.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.data.custom.AbilityModifier.AbilityModifierActionType;
import emu.grasscutter.data.custom.AbilityModifierEntry;
import emu.grasscutter.data.custom.OpenConfigEntry;
import emu.grasscutter.data.custom.QuestConfig;
import emu.grasscutter.data.custom.QuestConfigData;
import emu.grasscutter.data.custom.QuestConfigData.SubQuestConfigData;
import emu.grasscutter.data.custom.ScenePointEntry;
import emu.grasscutter.game.world.SpawnDataEntry;
import emu.grasscutter.game.world.SpawnDataEntry.SpawnGroupEntry;
@@ -57,8 +60,9 @@ public class ResourceLoader {
loadResources();
// Process into depots
GameDepot.load();
// Load spawn data
// Load spawn data and quests
loadSpawnData();
loadQuests();
// Load scene points - must be done AFTER resources are loaded
loadScenePoints();
// Custom - TODO move this somewhere else
@@ -396,6 +400,34 @@ public class ResourceLoader {
GameData.getOpenConfigEntries().put(entry.getName(), entry);
}
}
private static void loadQuests() {
File folder = new File(Grasscutter.getConfig().RESOURCE_FOLDER + "BinOutput/Quest/");
if (!folder.exists()) {
return;
}
for (File file : folder.listFiles()) {
QuestConfigData mainQuest = null;
try (FileReader fileReader = new FileReader(file)) {
mainQuest = Grasscutter.getGsonFactory().fromJson(fileReader, QuestConfigData.class);
} catch (Exception e) {
e.printStackTrace();
continue;
}
if (mainQuest.getSubQuests() != null) {
for (SubQuestConfigData subQuest : mainQuest.getSubQuests()) {
QuestConfig quest = new QuestConfig(mainQuest, subQuest);
GameData.getQuestConfigs().put(quest.getId(), quest);
}
}
}
Grasscutter.getLogger().info("Loaded " + GameData.getQuestConfigs().size() + " Quest Configs");
}
// BinOutput configs

View File

@@ -0,0 +1,25 @@
package emu.grasscutter.data.custom;
import emu.grasscutter.data.custom.QuestConfigData.SubQuestConfigData;
public class QuestConfig {
private final QuestConfigData mainQuest;
private final SubQuestConfigData subQuest;
public QuestConfig(QuestConfigData mainQuest, SubQuestConfigData subQuest) {
this.mainQuest = mainQuest;
this.subQuest = subQuest;
}
public int getId() {
return subQuest.getSubId();
}
public QuestConfigData getMainQuest() {
return mainQuest;
}
public SubQuestConfigData getSubQuest() {
return subQuest;
}
}

View File

@@ -0,0 +1,104 @@
package emu.grasscutter.data.custom;
import emu.grasscutter.game.quest.enums.LogicType;
import emu.grasscutter.game.quest.enums.QuestCondType;
import emu.grasscutter.game.quest.enums.QuestType;
public class QuestConfigData {
private int id;
private int series;
private QuestType type;
private long titleTextMapHash;
private int[] suggestTrackMainQuestList;
private int[] rewardIdList;
private SubQuestConfigData[] subQuests;
public int getId() {
return id;
}
public int getSeries() {
return series;
}
public QuestType getType() {
return type;
}
public long getTitleTextMapHash() {
return titleTextMapHash;
}
public int[] getSuggestTrackMainQuestList() {
return suggestTrackMainQuestList;
}
public int[] getRewardIdList() {
return rewardIdList;
}
public SubQuestConfigData[] getSubQuests() {
return subQuests;
}
public class SubQuestConfigData {
private int subId;
private int mainId;
private LogicType acceptCondComb;
private QuestCondition[] acceptCond;
private LogicType finishCondComb;
private QuestCondition[] finishCond;
private LogicType failCondComb;
private QuestCondition[] failCond;
public int getSubId() {
return subId;
}
public int getMainId() {
return mainId;
}
public LogicType getAcceptCondComb() {
return acceptCondComb;
}
public QuestCondition[] getAcceptCond() {
return acceptCond;
}
public LogicType getFinishCondComb() {
return finishCondComb;
}
public QuestCondition[] getFinishCond() {
return finishCond;
}
public LogicType getFailCondComb() {
return failCondComb;
}
public QuestCondition[] getFailCond() {
return failCond;
}
}
public class QuestCondition {
private QuestCondType type;
private int[] param;
public QuestCondType getType() {
return type;
}
public int[] getParam() {
return param;
}
}
}