mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-04-02 05:52:26 +02:00
@@ -10,8 +10,8 @@ import emu.grasscutter.data.binout.MainQuestData;
|
||||
import emu.grasscutter.data.binout.MainQuestData.SubQuestData;
|
||||
import emu.grasscutter.data.binout.MainQuestData.TalkData;
|
||||
import emu.grasscutter.data.binout.ScriptSceneData;
|
||||
import emu.grasscutter.data.excels.RewardData;
|
||||
import emu.grasscutter.data.excels.quest.QuestData;
|
||||
import emu.grasscutter.data.excels.RewardData;
|
||||
import emu.grasscutter.database.DatabaseHelper;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.props.ActionReason;
|
||||
@@ -26,6 +26,7 @@ import emu.grasscutter.utils.ConversionUtils;
|
||||
import emu.grasscutter.utils.Position;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.val;
|
||||
import org.bson.types.ObjectId;
|
||||
@@ -138,8 +139,7 @@ public class GameMainQuest {
|
||||
questManager.queueEvent(QuestContent.QUEST_CONTENT_QUEST_VAR_GREATER, index, value);
|
||||
questManager.queueEvent(QuestContent.QUEST_CONTENT_QUEST_VAR_LESS, index, value);
|
||||
|
||||
this.getOwner()
|
||||
.sendPacket(new PacketQuestUpdateQuestVarNotify(this.getParentQuestId(), this.questVars));
|
||||
this.getOwner().sendPacket(new PacketQuestUpdateQuestVarNotify(this.getParentQuestId(), this.questVars));
|
||||
}
|
||||
|
||||
public GameQuest getChildQuestById(int id) {
|
||||
@@ -158,10 +158,7 @@ public class GameMainQuest {
|
||||
// when auto finishing all child quests with QUEST_STATE_UNFINISHED (below)
|
||||
synchronized (this) {
|
||||
if (this.isFinished || this.state == ParentQuestState.PARENT_QUEST_STATE_FINISHED) {
|
||||
Grasscutter.getLogger()
|
||||
.debug(
|
||||
"Skip main quest {} finishing because it's already finished",
|
||||
this.getParentQuestId());
|
||||
Grasscutter.getLogger().debug("Skip main quest {} finishing because it's already finished",this.getParentQuestId());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -181,7 +178,7 @@ public class GameMainQuest {
|
||||
* new MainQuest 355 but if 35312 is not completed after the completion
|
||||
* of the main quest 353 - the character will not be able to leave place
|
||||
* (return again and again)
|
||||
*/
|
||||
*/
|
||||
this.getChildQuests().values().stream()
|
||||
.filter(p -> p.state != QuestState.QUEST_STATE_FINISHED)
|
||||
.forEach(GameQuest::finish);
|
||||
@@ -503,16 +500,9 @@ public class GameMainQuest {
|
||||
subQuestWithCond.getFinishProgressList());
|
||||
|
||||
if (this.getQuestManager().getLoggedQuests().contains(subQuestWithCond.getSubQuestId())) {
|
||||
Grasscutter.getLogger()
|
||||
.debug(
|
||||
">>> Quest {} will be {} as a result of content trigger {} ({}, {}).",
|
||||
subQuestWithCond.getSubQuestId(),
|
||||
shouldFinish ? "finished" : "not finished",
|
||||
condType.name(),
|
||||
paramStr,
|
||||
Arrays.stream(params)
|
||||
.mapToObj(String::valueOf)
|
||||
.collect(Collectors.joining(", ")));
|
||||
Grasscutter.getLogger().debug(">>> Quest {} will be {} as a result of content trigger {} ({}, {}).",
|
||||
subQuestWithCond.getSubQuestId(), shouldFinish ? "finished" : "not finished", condType.name(), paramStr,
|
||||
Arrays.stream(params).mapToObj(String::valueOf).collect(Collectors.joining(", ")));
|
||||
}
|
||||
|
||||
if (shouldFinish) subQuestWithCond.finish();
|
||||
|
||||
@@ -5,8 +5,8 @@ import dev.morphia.annotations.Transient;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.excels.ChapterData;
|
||||
import emu.grasscutter.data.excels.TriggerExcelConfigData;
|
||||
import emu.grasscutter.data.excels.quest.QuestData;
|
||||
import emu.grasscutter.data.excels.TriggerExcelConfigData;
|
||||
import emu.grasscutter.game.dungeons.enums.DungeonPassConditionType;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.props.ActionReason;
|
||||
@@ -76,7 +76,8 @@ public class GameQuest {
|
||||
.toList();
|
||||
if (triggerCond.size() > 0) {
|
||||
for (val cond : triggerCond) {
|
||||
var newTrigger = GameData.getTriggerExcelConfigDataMap().get(cond.getParam()[0]);
|
||||
var newTrigger = GameData.getTriggerExcelConfigDataMap()
|
||||
.get(cond.getParam()[0]);
|
||||
if (newTrigger != null) {
|
||||
if (this.triggerData == null) {
|
||||
this.triggerData = new HashMap<>();
|
||||
@@ -84,7 +85,8 @@ public class GameQuest {
|
||||
|
||||
triggerData.put(newTrigger.getTriggerName(), newTrigger);
|
||||
triggers.put(newTrigger.getTriggerName(), false);
|
||||
var group = SceneGroup.of(newTrigger.getGroupId()).load(newTrigger.getSceneId());
|
||||
var group = SceneGroup.of(newTrigger.getGroupId())
|
||||
.load(newTrigger.getSceneId());
|
||||
this.getOwner()
|
||||
.getWorld()
|
||||
.getSceneById(newTrigger.getSceneId())
|
||||
@@ -109,7 +111,8 @@ public class GameQuest {
|
||||
|
||||
this.getQuestData()
|
||||
.getBeginExec()
|
||||
.forEach(e -> getOwner().getServer().getQuestSystem().triggerExec(this, e, e.getParam()));
|
||||
.forEach(e -> getOwner().getServer().getQuestSystem()
|
||||
.triggerExec(this, e, e.getParam()));
|
||||
this.getOwner().getQuestManager().checkQuestAlreadyFullfilled(this);
|
||||
|
||||
Grasscutter.getLogger().debug("Quest {} is started", subQuestId);
|
||||
@@ -117,8 +120,11 @@ public class GameQuest {
|
||||
}
|
||||
|
||||
/**
|
||||
* Triggers events: 'QUEST_COND_STATE_EQUAL', 'QUEST_COND_STATE_NOT_EQUAL',
|
||||
* 'QUEST_CONTENT_QUEST_STATE_EQUAL', 'QUEST_CONTENT_QUEST_STATE_NOT_EQUAL'
|
||||
* Triggers events:
|
||||
* 'QUEST_COND_STATE_EQUAL',
|
||||
* 'QUEST_COND_STATE_NOT_EQUAL',
|
||||
* 'QUEST_CONTENT_QUEST_STATE_EQUAL',
|
||||
* 'QUEST_CONTENT_QUEST_STATE_NOT_EQUAL'
|
||||
*/
|
||||
public void triggerStateEvents() {
|
||||
var questManager = this.getOwner().getQuestManager();
|
||||
@@ -128,8 +134,7 @@ public class GameQuest {
|
||||
questManager.queueEvent(QuestCond.QUEST_COND_STATE_EQUAL, questId, state, 0, 0, 0);
|
||||
questManager.queueEvent(QuestCond.QUEST_COND_STATE_NOT_EQUAL, questId, state, 0, 0, 0);
|
||||
questManager.queueEvent(QuestContent.QUEST_CONTENT_QUEST_STATE_EQUAL, questId, state, 0, 0, 0);
|
||||
questManager.queueEvent(
|
||||
QuestContent.QUEST_CONTENT_QUEST_STATE_NOT_EQUAL, questId, state, 0, 0, 0);
|
||||
questManager.queueEvent(QuestContent.QUEST_CONTENT_QUEST_STATE_NOT_EQUAL, questId, state, 0, 0, 0);
|
||||
}
|
||||
|
||||
public String getTriggerNameById(int id) {
|
||||
|
||||
@@ -20,6 +20,7 @@ public class ConditionStateNotEqual extends BaseCondition {
|
||||
var questStateValue = condition.getParam()[1];
|
||||
var checkQuest = owner.getQuestManager().getQuestById(questId);
|
||||
|
||||
return checkQuest != null && checkQuest.getState().getValue() != questStateValue;
|
||||
return checkQuest != null &&
|
||||
checkQuest.getState().getValue() != questStateValue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,9 +15,8 @@ public class ContentCompleteAnyTalk extends BaseContent {
|
||||
public boolean execute(
|
||||
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
|
||||
return Stream.of(condition.getParamStr().split(","))
|
||||
.mapToInt(Integer::parseInt)
|
||||
.anyMatch(
|
||||
talkId ->
|
||||
GameData.getTalkConfigDataMap().get(params[0]) != null && talkId == params[0]);
|
||||
.mapToInt(Integer::parseInt)
|
||||
.anyMatch(talkId -> GameData.getTalkConfigDataMap()
|
||||
.get(params[0]) != null && talkId == params[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.excels.quest.QuestData;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.QuestValueContent;
|
||||
import lombok.val;
|
||||
|
||||
@QuestValueContent(QUEST_CONTENT_COMPLETE_TALK)
|
||||
public class ContentCompleteTalk extends BaseContent {
|
||||
@@ -13,7 +14,7 @@ public class ContentCompleteTalk extends BaseContent {
|
||||
@Override
|
||||
public boolean execute(
|
||||
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
|
||||
return condition.getParam()[0] == params[0]
|
||||
&& GameData.getTalkConfigDataMap().get(condition.getParam()[0]) != null;
|
||||
return condition.getParam()[0] == params[0] &&
|
||||
GameData.getTalkConfigDataMap().get(condition.getParam()[0]) != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ public class ContentFinishDungeon extends BaseContent {
|
||||
public boolean execute(
|
||||
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
|
||||
var dungeonId = condition.getParam()[0];
|
||||
return quest.getOwner().getPlayerProgress().getCompletedDungeons().contains(dungeonId);
|
||||
return quest.getOwner().getPlayerProgress()
|
||||
.getCompletedDungeons().contains(dungeonId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,8 @@ public class ContentTriggerFire extends BaseContent {
|
||||
return quest.getTriggers().get(quest.getTriggerNameById(params[0]));
|
||||
} else {
|
||||
Grasscutter.getLogger()
|
||||
.debug("Quest {} doesn't have trigger {} registered.", quest.getSubQuestId(), params[0]);
|
||||
.debug("Quest {} doesn't have trigger {} registered.",
|
||||
quest.getSubQuestId(), params[0]);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,8 +18,7 @@ public class ExecRemoveTrialAvatar extends QuestExecHandler {
|
||||
return true;
|
||||
} catch (IllegalStateException ignored) {
|
||||
// The player does not have any trial avatars equipped.
|
||||
Grasscutter.getLogger()
|
||||
.warn("Attempted to remove trial avatars from player with none equipped.");
|
||||
Grasscutter.getLogger().warn("Attempted to remove trial avatars from player with none equipped.");
|
||||
return true;
|
||||
} catch (RuntimeException exception) {
|
||||
exception.printStackTrace();
|
||||
|
||||
Reference in New Issue
Block a user