From a49e287044c2f49b31f686fd77aba799957fc073 Mon Sep 17 00:00:00 2001 From: longfruit Date: Fri, 6 Oct 2023 00:56:58 -0700 Subject: [PATCH 1/2] Abyss: Fix monster tide trigger; fix dungeon handoff --- .../grasscutter/game/dungeons/DungeonSystem.java | 4 +++- .../emu/grasscutter/scripts/SceneScriptManager.java | 4 ++-- .../java/emu/grasscutter/scripts/ScriptLib.java | 8 ++++---- .../scripts/service/ScriptMonsterTideService.java | 13 ++++++++----- .../emu/grasscutter/server/game/GameSession.java | 2 +- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/dungeons/DungeonSystem.java b/src/main/java/emu/grasscutter/game/dungeons/DungeonSystem.java index 228534f19bf..c254e2cd264 100644 --- a/src/main/java/emu/grasscutter/game/dungeons/DungeonSystem.java +++ b/src/main/java/emu/grasscutter/game/dungeons/DungeonSystem.java @@ -131,7 +131,9 @@ public boolean handoffDungeon( dungeonId); if (player.getWorld().transferPlayerToScene(player, data.getSceneId(), data)) { - dungeonSettleListeners.forEach(player.getScene()::addDungeonSettleObserver); + var scene = player.getScene(); + scene.setDungeonManager(new DungeonManager(scene, data)); + dungeonSettleListeners.forEach(scene::addDungeonSettleObserver); } return true; } diff --git a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java index 5ca90345d97..868208c2d97 100644 --- a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java +++ b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java @@ -774,9 +774,9 @@ public void killGroupSuite(SceneGroup group, SceneSuite suite) { } public void startMonsterTideInGroup( - SceneGroup group, Integer[] ordersConfigId, int tideCount, int sceneLimit) { + String source, SceneGroup group, Integer[] ordersConfigId, int tideCount, int sceneLimit) { this.scriptMonsterTideService = - new ScriptMonsterTideService(this, group, tideCount, sceneLimit, ordersConfigId); + new ScriptMonsterTideService(this, source, group, tideCount, sceneLimit, ordersConfigId); } public void unloadCurrentMonsterTide() { diff --git a/src/main/java/emu/grasscutter/scripts/ScriptLib.java b/src/main/java/emu/grasscutter/scripts/ScriptLib.java index 48313204b99..b85c0709949 100644 --- a/src/main/java/emu/grasscutter/scripts/ScriptLib.java +++ b/src/main/java/emu/grasscutter/scripts/ScriptLib.java @@ -31,7 +31,7 @@ @SuppressWarnings("unused") public class ScriptLib { - public static final Logger logger = LoggerFactory.getLogger(ScriptLib.class); + public static final Logger logger = Grasscutter.getLogger(); private final FastThreadLocal sceneScriptManager; private final FastThreadLocal currentGroup; private final FastThreadLocal callParams; @@ -215,9 +215,9 @@ public int DelWorktopOption(int var1){ } // Some fields are guessed - public int AutoMonsterTide(int challengeIndex, int groupId, Integer[] ordersConfigId, int tideCount, int sceneLimit, int param6) { + public int AutoMonsterTide(int sourceId, int groupId, Integer[] ordersConfigId, int tideCount, int sceneLimit, int param6) { logger.debug("[LUA] Call AutoMonsterTide with {},{},{},{},{},{}", - challengeIndex,groupId,ordersConfigId,tideCount,sceneLimit,param6); + sourceId,groupId,ordersConfigId,tideCount,sceneLimit,param6); SceneGroup group = getSceneScriptManager().getGroupById(groupId); @@ -225,7 +225,7 @@ public int AutoMonsterTide(int challengeIndex, int groupId, Integer[] ordersConf return 1; } - this.getSceneScriptManager().startMonsterTideInGroup(group, ordersConfigId, tideCount, sceneLimit); + this.getSceneScriptManager().startMonsterTideInGroup(Integer.toString(sourceId), group, ordersConfigId, tideCount, sceneLimit); return 0; } diff --git a/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java b/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java index ad784c4a1bb..e35c846689d 100644 --- a/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java +++ b/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java @@ -1,5 +1,6 @@ package emu.grasscutter.scripts.service; +import emu.grasscutter.Grasscutter; import emu.grasscutter.game.entity.EntityMonster; import emu.grasscutter.scripts.SceneScriptManager; import emu.grasscutter.scripts.constants.EventType; @@ -20,9 +21,11 @@ public final class ScriptMonsterTideService { private final List monsterConfigIds; private final OnMonsterCreated onMonsterCreated = new OnMonsterCreated(); private final OnMonsterDead onMonsterDead = new OnMonsterDead(); + private final String source; public ScriptMonsterTideService( SceneScriptManager sceneScriptManager, + String source, SceneGroup group, int tideCount, int monsterSceneLimit, @@ -35,6 +38,7 @@ public ScriptMonsterTideService( this.monsterAlive = new AtomicInteger(0); this.monsterConfigOrders = new ConcurrentLinkedQueue<>(List.of(ordersConfigId)); this.monsterConfigIds = List.of(ordersConfigId); + this.source = source; this.sceneScriptManager .getScriptMonsterSpawnService() @@ -83,11 +87,10 @@ public void onNotify(EntityMonster sceneMonster) { sceneScriptManager.createMonster( currentGroup.id, currentGroup.block_id, getNextMonster())); } - // spawn the last turn of monsters - // fix the 5-2 - sceneScriptManager.callEvent( - new ScriptArgs( - currentGroup.id, EventType.EVENT_MONSTER_TIDE_DIE, monsterKillCount.get())); + // call registered events that may spawn in more monsters + var scriptArgs = new ScriptArgs(currentGroup.id, EventType.EVENT_MONSTER_TIDE_DIE, monsterKillCount.get()); + scriptArgs.setEventSource(source); + sceneScriptManager.callEvent(scriptArgs); } } diff --git a/src/main/java/emu/grasscutter/server/game/GameSession.java b/src/main/java/emu/grasscutter/server/game/GameSession.java index fa0d1a35799..747869ed5c0 100644 --- a/src/main/java/emu/grasscutter/server/game/GameSession.java +++ b/src/main/java/emu/grasscutter/server/game/GameSession.java @@ -100,7 +100,7 @@ public void replayPacket(int opcode, String name) { public void logPacket(String sendOrRecv, int opcode, byte[] payload) { Grasscutter.getLogger() .info(sendOrRecv + ": " + PacketOpcodesUtils.getOpcodeName(opcode) + " (" + opcode + ")"); - if (GAME_INFO.isShowPacketPayload) System.out.println(Utils.bytesToHex(payload)); + if (GAME_INFO.isShowPacketPayload) Grasscutter.getLogger().trace(Utils.bytesToHex(payload)); } public void send(BasePacket packet) { From 0cb252ac4cea706dded392850c26688c38585cef Mon Sep 17 00:00:00 2001 From: longfruit Date: Fri, 6 Oct 2023 01:11:09 -0700 Subject: [PATCH 2/2] back out unrelated changes --- src/main/java/emu/grasscutter/scripts/ScriptLib.java | 2 +- .../grasscutter/scripts/service/ScriptMonsterTideService.java | 1 - src/main/java/emu/grasscutter/server/game/GameSession.java | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/emu/grasscutter/scripts/ScriptLib.java b/src/main/java/emu/grasscutter/scripts/ScriptLib.java index b85c0709949..209cbcdd55d 100644 --- a/src/main/java/emu/grasscutter/scripts/ScriptLib.java +++ b/src/main/java/emu/grasscutter/scripts/ScriptLib.java @@ -31,7 +31,7 @@ @SuppressWarnings("unused") public class ScriptLib { - public static final Logger logger = Grasscutter.getLogger(); + public static final Logger logger = LoggerFactory.getLogger(ScriptLib.class); private final FastThreadLocal sceneScriptManager; private final FastThreadLocal currentGroup; private final FastThreadLocal callParams; diff --git a/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java b/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java index e35c846689d..44e2b986299 100644 --- a/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java +++ b/src/main/java/emu/grasscutter/scripts/service/ScriptMonsterTideService.java @@ -1,6 +1,5 @@ package emu.grasscutter.scripts.service; -import emu.grasscutter.Grasscutter; import emu.grasscutter.game.entity.EntityMonster; import emu.grasscutter.scripts.SceneScriptManager; import emu.grasscutter.scripts.constants.EventType; diff --git a/src/main/java/emu/grasscutter/server/game/GameSession.java b/src/main/java/emu/grasscutter/server/game/GameSession.java index 747869ed5c0..fa0d1a35799 100644 --- a/src/main/java/emu/grasscutter/server/game/GameSession.java +++ b/src/main/java/emu/grasscutter/server/game/GameSession.java @@ -100,7 +100,7 @@ public void replayPacket(int opcode, String name) { public void logPacket(String sendOrRecv, int opcode, byte[] payload) { Grasscutter.getLogger() .info(sendOrRecv + ": " + PacketOpcodesUtils.getOpcodeName(opcode) + " (" + opcode + ")"); - if (GAME_INFO.isShowPacketPayload) Grasscutter.getLogger().trace(Utils.bytesToHex(payload)); + if (GAME_INFO.isShowPacketPayload) System.out.println(Utils.bytesToHex(payload)); } public void send(BasePacket packet) {