mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 09:25:06 +01:00
Switch to using quest excels
This commit is contained in:
@@ -10,7 +10,6 @@ import dev.morphia.annotations.Id;
|
||||
import dev.morphia.annotations.Indexed;
|
||||
import dev.morphia.annotations.Transient;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.custom.QuestConfig;
|
||||
import emu.grasscutter.database.DatabaseHelper;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.quest.enums.ParentQuestState;
|
||||
|
||||
@@ -2,9 +2,11 @@ package emu.grasscutter.game.quest;
|
||||
|
||||
import dev.morphia.annotations.Entity;
|
||||
import dev.morphia.annotations.Transient;
|
||||
import emu.grasscutter.data.custom.QuestConfig;
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.custom.QuestConfigData.SubQuestConfigData;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.custom.MainQuestData;
|
||||
import emu.grasscutter.data.custom.MainQuestData.SubQuestData;
|
||||
import emu.grasscutter.data.def.QuestData;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.quest.enums.LogicType;
|
||||
import emu.grasscutter.game.quest.enums.QuestState;
|
||||
@@ -16,7 +18,7 @@ import emu.grasscutter.utils.Utils;
|
||||
@Entity
|
||||
public class GameQuest {
|
||||
@Transient private GameMainQuest mainQuest;
|
||||
@Transient private QuestConfig config;
|
||||
@Transient private QuestData questData;
|
||||
|
||||
private int questId;
|
||||
private int mainQuestId;
|
||||
@@ -32,21 +34,21 @@ public class GameQuest {
|
||||
@Deprecated // Morphia only. Do not use.
|
||||
public GameQuest() {}
|
||||
|
||||
public GameQuest(GameMainQuest mainQuest, QuestConfig config) {
|
||||
public GameQuest(GameMainQuest mainQuest, QuestData questData) {
|
||||
this.mainQuest = mainQuest;
|
||||
this.questId = config.getId();
|
||||
this.mainQuestId = config.getMainQuest().getId();
|
||||
this.config = config;
|
||||
this.questId = questData.getId();
|
||||
this.mainQuestId = questData.getMainId();
|
||||
this.questData = questData;
|
||||
this.acceptTime = Utils.getCurrentSeconds();
|
||||
this.startTime = this.acceptTime;
|
||||
this.state = QuestState.QUEST_STATE_UNFINISHED;
|
||||
|
||||
if (config.getSubQuest().getFinishCond() != null) {
|
||||
this.finishProgressList = new int[config.getSubQuest().getFinishCond().length];
|
||||
if (questData.getFinishCond()!= null) {
|
||||
this.finishProgressList = new int[questData.getFinishCond().length];
|
||||
}
|
||||
|
||||
if (config.getSubQuest().getFailCond() != null) {
|
||||
this.failProgressList = new int[config.getSubQuest().getFailCond().length];
|
||||
if (questData.getFailCond() != null) {
|
||||
this.failProgressList = new int[questData.getFailCond().length];
|
||||
}
|
||||
|
||||
this.mainQuest.getChildQuests().put(this.questId, this);
|
||||
@@ -72,13 +74,13 @@ public class GameQuest {
|
||||
return mainQuestId;
|
||||
}
|
||||
|
||||
public QuestConfig getConfig() {
|
||||
return config;
|
||||
public QuestData getData() {
|
||||
return questData;
|
||||
}
|
||||
|
||||
public void setConfig(QuestConfig config) {
|
||||
public void setConfig(QuestData config) {
|
||||
if (this.getQuestId() != config.getId()) return;
|
||||
this.config = config;
|
||||
this.questData = config;
|
||||
}
|
||||
|
||||
public QuestState getState() {
|
||||
@@ -148,16 +150,23 @@ public class GameQuest {
|
||||
|
||||
public boolean tryAcceptQuestLine() {
|
||||
try {
|
||||
for (SubQuestConfigData questData : getConfig().getMainQuest().getSubQuests()) {
|
||||
GameQuest quest = getMainQuest().getChildQuestById(questData.getSubId());
|
||||
MainQuestData questConfig = GameData.getMainQuestDataMap().get(this.getMainQuestId());
|
||||
for (SubQuestData subQuest : questConfig.getSubQuests()) {
|
||||
GameQuest quest = getMainQuest().getChildQuestById(subQuest.getSubId());
|
||||
|
||||
if (quest == null) {
|
||||
QuestData questData = GameData.getQuestDataMap().get(subQuest.getSubId());
|
||||
|
||||
if (questData == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int[] accept = new int[questData.getAcceptCond().length];
|
||||
|
||||
// TODO
|
||||
for (int i = 0; i < questData.getAcceptCond().length; i++) {
|
||||
QuestCondition condition = questData.getAcceptCond()[i];
|
||||
boolean result = getOwner().getServer().getQuestHandler().triggerCondition(this, condition);
|
||||
boolean result = getOwner().getServer().getQuestHandler().triggerCondition(this, condition, condition.getParam());
|
||||
|
||||
accept[i] = result ? 1 : 0;
|
||||
}
|
||||
@@ -165,7 +174,7 @@ public class GameQuest {
|
||||
boolean shouldAccept = LogicType.calculate(questData.getAcceptCondComb(), accept);
|
||||
|
||||
if (shouldAccept) {
|
||||
this.getOwner().getQuestManager().addQuest(questData.getSubId());
|
||||
this.getOwner().getQuestManager().addQuest(questData.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,12 +9,11 @@ import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.custom.QuestConfig;
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.custom.QuestConfigData.SubQuestConfigData;
|
||||
import emu.grasscutter.data.def.QuestData;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.database.DatabaseHelper;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.enums.LogicType;
|
||||
import emu.grasscutter.game.quest.enums.QuestState;
|
||||
import emu.grasscutter.server.packet.send.PacketFinishedParentQuestUpdateNotify;
|
||||
@@ -46,12 +45,12 @@ public class QuestManager {
|
||||
}
|
||||
|
||||
public GameQuest getQuestById(int questId) {
|
||||
QuestConfig questConfig = GameData.getQuestConfigs().get(questId);
|
||||
QuestData questConfig = GameData.getQuestDataMap().get(questId);
|
||||
if (questConfig == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
GameMainQuest mainQuest = getQuests().get(questConfig.getMainQuest().getId());
|
||||
GameMainQuest mainQuest = getQuests().get(questConfig.getMainId());
|
||||
|
||||
if (mainQuest == null) {
|
||||
return null;
|
||||
@@ -79,8 +78,8 @@ public class QuestManager {
|
||||
}
|
||||
}
|
||||
|
||||
public GameMainQuest addMainQuest(QuestConfig questConfig) {
|
||||
GameMainQuest mainQuest = new GameMainQuest(getPlayer(), questConfig.getMainQuest().getId());
|
||||
public GameMainQuest addMainQuest(QuestData questConfig) {
|
||||
GameMainQuest mainQuest = new GameMainQuest(getPlayer(), questConfig.getMainId());
|
||||
getQuests().put(mainQuest.getParentQuestId(), mainQuest);
|
||||
|
||||
getPlayer().sendPacket(new PacketFinishedParentQuestUpdateNotify(mainQuest));
|
||||
@@ -89,13 +88,13 @@ public class QuestManager {
|
||||
}
|
||||
|
||||
public GameQuest addQuest(int questId) {
|
||||
QuestConfig questConfig = GameData.getQuestConfigs().get(questId);
|
||||
QuestData questConfig = GameData.getQuestDataMap().get(questId);
|
||||
if (questConfig == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Main quest
|
||||
GameMainQuest mainQuest = this.getMainQuestById(questConfig.getMainQuest().getId());
|
||||
GameMainQuest mainQuest = this.getMainQuestById(questConfig.getMainId());
|
||||
|
||||
// Create main quest if it doesnt exist
|
||||
if (mainQuest == null) {
|
||||
@@ -122,11 +121,11 @@ public class QuestManager {
|
||||
return quest;
|
||||
}
|
||||
|
||||
public void triggerEvent(QuestTriggerType condType, int... params) {
|
||||
public void triggerEvent(QuestTrigger condType, int... params) {
|
||||
Set<GameQuest> changedQuests = new HashSet<>();
|
||||
|
||||
this.forEachActiveQuest(quest -> {
|
||||
SubQuestConfigData data = quest.getConfig().getSubQuest();
|
||||
QuestData data = quest.getData();
|
||||
|
||||
for (int i = 0; i < data.getFinishCond().length; i++) {
|
||||
if (quest.getFinishProgressList()[i] == 1) {
|
||||
@@ -150,7 +149,7 @@ public class QuestManager {
|
||||
});
|
||||
|
||||
for (GameQuest quest : changedQuests) {
|
||||
LogicType logicType = quest.getConfig().getSubQuest().getFailCondComb();
|
||||
LogicType logicType = quest.getData().getFailCondComb();
|
||||
int[] progress = quest.getFinishProgressList();
|
||||
|
||||
// Handle logical comb
|
||||
@@ -174,7 +173,7 @@ public class QuestManager {
|
||||
|
||||
for (GameQuest quest : mainQuest.getChildQuests().values()) {
|
||||
quest.setMainQuest(mainQuest);
|
||||
quest.setConfig(GameData.getQuestConfigs().get(quest.getQuestId()));
|
||||
quest.setConfig(GameData.getQuestDataMap().get(quest.getQuestId()));
|
||||
}
|
||||
|
||||
this.getQuests().put(mainQuest.getParentQuestId(), mainQuest);
|
||||
|
||||
@@ -3,9 +3,9 @@ package emu.grasscutter.game.quest;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface QuestValue {
|
||||
QuestTriggerType value();
|
||||
QuestTrigger value();
|
||||
}
|
||||
|
||||
@@ -4,11 +4,9 @@ import java.util.Set;
|
||||
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.handlers.QuestBaseHandler;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.server.game.GameServer;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
@@ -62,7 +60,7 @@ public class ServerQuestHandler {
|
||||
public boolean triggerCondition(GameQuest quest, QuestCondition condition, int... params) {
|
||||
QuestBaseHandler handler = condHandlers.get(condition.getType().getValue());
|
||||
|
||||
if (handler == null || quest.getConfig() == null) {
|
||||
if (handler == null || quest.getData() == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -72,7 +70,7 @@ public class ServerQuestHandler {
|
||||
public boolean triggerContent(GameQuest quest, QuestCondition condition, int... params) {
|
||||
QuestBaseHandler handler = contHandlers.get(condition.getType().getValue());
|
||||
|
||||
if (handler == null || quest.getConfig() == null) {
|
||||
if (handler == null || quest.getData() == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -82,7 +80,7 @@ public class ServerQuestHandler {
|
||||
public boolean triggerExec(GameQuest quest, QuestCondition condition, int... params) {
|
||||
QuestBaseHandler handler = execHandlers.get(condition.getType().getValue());
|
||||
|
||||
if (handler == null || quest.getConfig() == null) {
|
||||
if (handler == null || quest.getData() == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package emu.grasscutter.game.quest.conditions;
|
||||
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.QuestValue;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.handlers.QuestBaseHandler;
|
||||
|
||||
@QuestValue(QuestTriggerType.QUEST_CONTENT_NONE)
|
||||
@QuestValue(QuestTrigger.QUEST_CONTENT_NONE)
|
||||
public class BaseCondition extends QuestBaseHandler {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package emu.grasscutter.game.quest.conditions;
|
||||
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.QuestValue;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.handlers.QuestBaseHandler;
|
||||
|
||||
@QuestValue(QuestTriggerType.QUEST_COND_PLAYER_LEVEL_EQUAL_GREATER)
|
||||
@QuestValue(QuestTrigger.QUEST_COND_PLAYER_LEVEL_EQUAL_GREATER)
|
||||
public class ConditionPlayerLevelEqualGreater extends QuestBaseHandler {
|
||||
|
||||
@Override
|
||||
public boolean execute(GameQuest quest, QuestCondition condition, int... params) {
|
||||
return quest.getOwner().getLevel() >= condition.getParam()[0];
|
||||
return quest.getOwner().getLevel() >= params[0];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
package emu.grasscutter.game.quest.conditions;
|
||||
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.QuestValue;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.handlers.QuestBaseHandler;
|
||||
|
||||
@QuestValue(QuestTriggerType.QUEST_COND_STATE_EQUAL)
|
||||
@QuestValue(QuestTrigger.QUEST_COND_STATE_EQUAL)
|
||||
public class ConditionStateEqual extends QuestBaseHandler {
|
||||
|
||||
@Override
|
||||
public boolean execute(GameQuest quest, QuestCondition condition, int... params) {
|
||||
GameQuest checkQuest = quest.getOwner().getQuestManager().getQuestById(condition.getParam()[0]);
|
||||
GameQuest checkQuest = quest.getOwner().getQuestManager().getQuestById(params[0]);
|
||||
|
||||
if (checkQuest != null) {
|
||||
return checkQuest.getState().getValue() == condition.getParam()[1];
|
||||
return checkQuest.getState().getValue() == params[1];
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package emu.grasscutter.game.quest.content;
|
||||
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.QuestValue;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.handlers.QuestBaseHandler;
|
||||
|
||||
@QuestValue(QuestTriggerType.QUEST_CONTENT_NONE)
|
||||
@QuestValue(QuestTrigger.QUEST_CONTENT_NONE)
|
||||
public class BaseContent extends QuestBaseHandler {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package emu.grasscutter.game.quest.content;
|
||||
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.QuestValue;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.enums.QuestTriggerType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.handlers.QuestBaseHandler;
|
||||
|
||||
@QuestValue(QuestTriggerType.QUEST_CONTENT_COMPLETE_TALK)
|
||||
@QuestValue(QuestTrigger.QUEST_CONTENT_COMPLETE_TALK)
|
||||
public class ContentCompleteTalk extends QuestBaseHandler {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package emu.grasscutter.game.quest.enums;
|
||||
|
||||
public enum QuestTriggerType {
|
||||
public enum QuestTrigger {
|
||||
QUEST_COND_NONE (0),
|
||||
QUEST_COND_STATE_EQUAL (1),
|
||||
QUEST_COND_STATE_NOT_EQUAL (2),
|
||||
@@ -225,7 +225,7 @@ public enum QuestTriggerType {
|
||||
|
||||
private final int value;
|
||||
|
||||
QuestTriggerType(int id) {
|
||||
QuestTrigger(int id) {
|
||||
this.value = id;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package emu.grasscutter.game.quest.handlers;
|
||||
|
||||
import emu.grasscutter.data.custom.QuestConfigData.QuestCondition;
|
||||
import emu.grasscutter.data.def.QuestData.QuestCondition;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
|
||||
public abstract class QuestBaseHandler {
|
||||
|
||||
Reference in New Issue
Block a user