diff --git a/src/main/java/emu/grasscutter/game/quest/QuestManager.java b/src/main/java/emu/grasscutter/game/quest/QuestManager.java index 4132aee05..572731edb 100644 --- a/src/main/java/emu/grasscutter/game/quest/QuestManager.java +++ b/src/main/java/emu/grasscutter/game/quest/QuestManager.java @@ -111,7 +111,9 @@ public class QuestManager extends BasePlayerManager { 30700, // Quest which is responsible for unlocking Crash Course. 30800, // Quest which is responsible for unlocking Sparks Amongst the Pages. - 47001, 47002, 47003, 47004 + 47001, 47002, 47003, 47004, + + 2010103, 2010144 // Prologue Act 2: Chasing Shadows )); } } diff --git a/src/main/java/emu/grasscutter/game/quest/exec/ExecNotifyGroupLua.java b/src/main/java/emu/grasscutter/game/quest/exec/ExecNotifyGroupLua.java index 6d4155bc4..09c7e2897 100644 --- a/src/main/java/emu/grasscutter/game/quest/exec/ExecNotifyGroupLua.java +++ b/src/main/java/emu/grasscutter/game/quest/exec/ExecNotifyGroupLua.java @@ -53,7 +53,8 @@ public class ExecNotifyGroupLua extends QuestExecHandler { ? EventType.EVENT_QUEST_FINISH : EventType.EVENT_QUEST_START; scriptManager.callEvent( - new ScriptArgs(groupId, eventType, quest.getSubQuestId()) + new ScriptArgs(groupId, eventType, quest.getSubQuestId(), + quest.getState() == QuestState.QUEST_STATE_FINISHED ? 1 : 0) .setEventSource(quest.getSubQuestId())); }); diff --git a/src/main/java/emu/grasscutter/game/world/Scene.java b/src/main/java/emu/grasscutter/game/world/Scene.java index 08f5d61e0..2e50c1b4a 100644 --- a/src/main/java/emu/grasscutter/game/world/Scene.java +++ b/src/main/java/emu/grasscutter/game/world/Scene.java @@ -1,54 +1,44 @@ package emu.grasscutter.game.world; import emu.grasscutter.Grasscutter; -import emu.grasscutter.data.GameData; -import emu.grasscutter.data.GameDepot; +import emu.grasscutter.data.*; import emu.grasscutter.data.binout.SceneNpcBornEntry; import emu.grasscutter.data.binout.routes.Route; -import emu.grasscutter.data.excels.ItemData; -import emu.grasscutter.data.excels.SceneData; +import emu.grasscutter.data.excels.*; import emu.grasscutter.data.excels.codex.CodexAnimalData; import emu.grasscutter.data.excels.monster.MonsterData; import emu.grasscutter.data.excels.world.WorldLevelData; import emu.grasscutter.data.server.Grid; import emu.grasscutter.game.avatar.Avatar; -import emu.grasscutter.game.dungeons.DungeonManager; -import emu.grasscutter.game.dungeons.DungeonSettleListener; +import emu.grasscutter.game.dungeons.*; import emu.grasscutter.game.dungeons.challenge.WorldChallenge; import emu.grasscutter.game.dungeons.enums.DungeonPassConditionType; import emu.grasscutter.game.entity.*; import emu.grasscutter.game.entity.gadget.GadgetWorktop; import emu.grasscutter.game.inventory.GameItem; import emu.grasscutter.game.managers.blossom.BlossomManager; -import emu.grasscutter.game.player.Player; -import emu.grasscutter.game.player.TeamInfo; +import emu.grasscutter.game.player.*; import emu.grasscutter.game.props.*; import emu.grasscutter.game.quest.QuestGroupSuite; import emu.grasscutter.game.world.data.TeleportProperties; import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.proto.AttackResultOuterClass.AttackResult; -import emu.grasscutter.net.proto.EnterTypeOuterClass; -import emu.grasscutter.net.proto.SelectWorktopOptionReqOuterClass; +import emu.grasscutter.net.proto.*; import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType; -import emu.grasscutter.scripts.SceneIndexManager; -import emu.grasscutter.scripts.SceneScriptManager; +import emu.grasscutter.scripts.*; import emu.grasscutter.scripts.constants.EventType; -import emu.grasscutter.scripts.data.SceneBlock; -import emu.grasscutter.scripts.data.SceneGroup; -import emu.grasscutter.scripts.data.ScriptArgs; +import emu.grasscutter.scripts.data.*; import emu.grasscutter.server.event.entity.EntityCreationEvent; import emu.grasscutter.server.event.player.PlayerTeleportEvent; import emu.grasscutter.server.packet.send.*; import emu.grasscutter.utils.objects.KahnsSort; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.stream.Collectors; +import lombok.*; + import javax.annotation.Nullable; -import lombok.Getter; -import lombok.Setter; -import lombok.val; +import java.util.*; +import java.util.concurrent.*; +import java.util.stream.Collectors; public final class Scene { @Getter private final World world; diff --git a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java index bd492d76f..747e0fb0f 100644 --- a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java +++ b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java @@ -1,7 +1,5 @@ package emu.grasscutter.scripts; -import static emu.grasscutter.scripts.constants.EventType.EVENT_TIMER_EVENT; - import com.github.davidmoten.rtreemulti.RTree; import com.github.davidmoten.rtreemulti.geometry.Geometry; import emu.grasscutter.Grasscutter; @@ -21,17 +19,20 @@ import emu.grasscutter.server.packet.send.PacketGroupSuiteNotify; import emu.grasscutter.utils.*; import io.netty.util.concurrent.FastThreadLocalThread; import it.unimi.dsi.fastutil.ints.*; +import kotlin.Pair; +import lombok.val; +import org.luaj.vm2.*; +import org.luaj.vm2.lib.jse.CoerceJavaToLua; + +import javax.annotation.*; import java.io.*; import java.nio.file.Files; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import javax.annotation.*; -import kotlin.Pair; -import lombok.val; -import org.luaj.vm2.*; -import org.luaj.vm2.lib.jse.CoerceJavaToLua; + +import static emu.grasscutter.scripts.constants.EventType.EVENT_TIMER_EVENT; public class SceneScriptManager { private final Scene scene; @@ -801,26 +802,26 @@ public class SceneScriptManager { private void realCallEvent(@Nonnull ScriptArgs params) { try { ScriptLoader.getScriptLib().setSceneScriptManager(this); - int eventType = params.type; - Set relevantTriggers = new HashSet<>(); - if (eventType == EventType.EVENT_ENTER_REGION || eventType == EventType.EVENT_LEAVE_REGION) { - relevantTriggers = - this.getTriggersByEvent(eventType).stream() - .filter( - t -> - t.getCondition().contains(String.valueOf(params.param1)) - && (t.getSource().isEmpty() - || t.getSource().equals(params.getEventSource()))) - .collect(Collectors.toSet()); - } else { - relevantTriggers = - this.getTriggersByEvent(eventType).stream() - .filter( - t -> params.getGroupId() == 0 || t.getCurrentGroup().id == params.getGroupId()) - .filter( - t -> (t.getSource().isEmpty() || t.getSource().equals(params.getEventSource()))) - .collect(Collectors.toSet()); - } + + var eventType = params.type; + var relevantTriggers = switch (eventType) { + case EventType.EVENT_ENTER_REGION, EventType.EVENT_LEAVE_REGION -> + this.getTriggersByEvent(eventType).stream() + .filter( + t -> + t.getCondition().contains(String.valueOf(params.param1)) + && (t.getSource().isEmpty() + || t.getSource().equals(params.getEventSource()))) + .collect(Collectors.toSet()); + default -> + this.getTriggersByEvent(eventType).stream() + .filter( + t -> params.getGroupId() == 0 || t.getCurrentGroup().id == params.getGroupId()) + .filter( + t -> (t.getSource().isEmpty() || t.getSource().equals(params.getEventSource()))) + .collect(Collectors.toSet()); + }; + for (SceneTrigger trigger : relevantTriggers) { handleEventForTrigger(params, trigger); } diff --git a/src/main/java/emu/grasscutter/scripts/ScriptLib.java b/src/main/java/emu/grasscutter/scripts/ScriptLib.java index cb9db38d0..3322eecca 100644 --- a/src/main/java/emu/grasscutter/scripts/ScriptLib.java +++ b/src/main/java/emu/grasscutter/scripts/ScriptLib.java @@ -129,7 +129,7 @@ public class ScriptLib { public int SetWorktopOptionsByGroupId(int groupId, int configId, int[] options) { logger.debug("[LUA] Call SetWorktopOptionsByGroupId with {},{},{}", - groupId,configId,options); + groupId, configId, options); val entity = getSceneScriptManager().getScene().getEntityByConfigId(configId, groupId);