mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-18 12:00:25 +08:00
64 lines
2.7 KiB
Java
64 lines
2.7 KiB
Java
package emu.grasscutter.game.quest.exec;
|
|
|
|
import emu.grasscutter.Grasscutter;
|
|
import emu.grasscutter.data.excels.quest.QuestData;
|
|
import emu.grasscutter.game.quest.GameQuest;
|
|
import emu.grasscutter.game.quest.QuestValueExec;
|
|
import emu.grasscutter.game.quest.enums.QuestExec;
|
|
import emu.grasscutter.game.quest.enums.QuestState;
|
|
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
|
|
import emu.grasscutter.scripts.constants.EventType;
|
|
import emu.grasscutter.scripts.data.ScriptArgs;
|
|
import lombok.val;
|
|
|
|
@QuestValueExec(QuestExec.QUEST_EXEC_NOTIFY_GROUP_LUA)
|
|
public class ExecNotifyGroupLua extends QuestExecHandler {
|
|
|
|
@Override
|
|
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
|
|
val sceneId = Integer.parseInt(paramStr[0]);
|
|
val groupId = Integer.parseInt(paramStr[1]);
|
|
|
|
val scene = quest.getOwner().getScene();
|
|
val scriptManager = scene.getScriptManager();
|
|
|
|
if (scene.getId() != sceneId) {
|
|
return false;
|
|
}
|
|
scene.runWhenFinished(
|
|
() -> {
|
|
val groupInstance = scriptManager.getGroupInstanceById(groupId);
|
|
|
|
if (groupInstance != null) {
|
|
// workaround to make sure the triggers are still there todo find better way of trigger
|
|
// handling
|
|
scriptManager.refreshGroup(groupInstance);
|
|
Grasscutter.getLogger()
|
|
.trace(
|
|
"group: {} \ncondition: {} \nparamStr {}",
|
|
groupInstance.getLuaGroup(),
|
|
condition,
|
|
paramStr);
|
|
} else {
|
|
Grasscutter.getLogger()
|
|
.debug(
|
|
"notify, no group instance for:\n group: {} \ncondition: {} \nparamStr {}",
|
|
groupId,
|
|
condition,
|
|
paramStr);
|
|
}
|
|
|
|
val eventType =
|
|
quest.getState() == QuestState.QUEST_STATE_FINISHED
|
|
? EventType.EVENT_QUEST_FINISH
|
|
: EventType.EVENT_QUEST_START;
|
|
scriptManager.callEvent(
|
|
new ScriptArgs(groupId, eventType, quest.getSubQuestId(),
|
|
quest.getState() == QuestState.QUEST_STATE_FINISHED ? 1 : 0)
|
|
.setEventSource(quest.getSubQuestId()));
|
|
});
|
|
|
|
return true;
|
|
}
|
|
}
|