mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 09:25:06 +01:00
Merge pull request Grasscutter-Quests#53
'Updated with how talks are handle' by `mjolsic`
This commit is contained in:
52
src/main/java/emu/grasscutter/game/talk/TalkManager.java
Normal file
52
src/main/java/emu/grasscutter/game/talk/TalkManager.java
Normal file
@@ -0,0 +1,52 @@
|
||||
package emu.grasscutter.game.talk;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.binout.MainQuestData.TalkData;
|
||||
import emu.grasscutter.game.player.BasePlayerManager;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
|
||||
import lombok.NonNull;
|
||||
|
||||
import static emu.grasscutter.game.quest.enums.QuestContent.QUEST_CONTENT_COMPLETE_ANY_TALK;
|
||||
import static emu.grasscutter.game.quest.enums.QuestContent.QUEST_CONTENT_COMPLETE_TALK;
|
||||
import static emu.grasscutter.game.quest.enums.QuestCond.QUEST_COND_COMPLETE_TALK;
|
||||
|
||||
public final class TalkManager extends BasePlayerManager {
|
||||
public TalkManager(@NonNull Player player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoked when a talk is triggered.
|
||||
*
|
||||
* @param talkId The ID of the talk.
|
||||
*/
|
||||
public void triggerTalkAction(int talkId) {
|
||||
var talkData = GameData.getTalkConfigDataMap().get(talkId);
|
||||
if (talkData == null || talkData.getFinishExec().isEmpty()) return;
|
||||
|
||||
var player = this.getPlayer();
|
||||
// Execute the talk action on associated handlers.
|
||||
talkData.getFinishExec().forEach(e -> this.getPlayer().getServer()
|
||||
.getTalkSystem().triggerExec(getPlayer(), talkData, e));
|
||||
|
||||
// Invoke the talking events for quests.
|
||||
var questManager = player.getQuestManager();
|
||||
questManager.queueEvent(QUEST_CONTENT_COMPLETE_ANY_TALK, talkId);
|
||||
questManager.queueEvent(QUEST_CONTENT_COMPLETE_TALK, talkId);
|
||||
questManager.queueEvent(QUEST_COND_COMPLETE_TALK, talkId);
|
||||
|
||||
// Save the talk value to the quest's data.
|
||||
this.saveTalkToQuest(talkId, talkData.getQuestId());
|
||||
}
|
||||
|
||||
public void saveTalkToQuest(int talkId, int mainQuestId) {
|
||||
// TODO, problem with this is that some talks for activity also have
|
||||
// quest id, which isn't present in QuestExcels
|
||||
var mainQuest = this.getPlayer().getQuestManager()
|
||||
.getMainQuestById(mainQuestId);
|
||||
if (mainQuest == null) return;
|
||||
|
||||
mainQuest.getTalks().put(talkId, new TalkData(talkId, ""));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user