From 72e9a21ce3cc7c113fc60d9514eb30d5fc8bffbf Mon Sep 17 00:00:00 2001 From: Melledy <52122272+Melledy@users.noreply.github.com> Date: Fri, 29 Apr 2022 00:49:05 -0700 Subject: [PATCH] Allow the player to finish dungeons --- .../game/dungeons/DungeonChallenge.java | 11 ++++++++-- .../game/dungeons/DungeonManager.java | 2 ++ .../emu/grasscutter/scripts/ScriptLib.java | 4 ++++ .../send/PacketChallengeDataNotify.java | 21 +++++++++++++++++++ .../PacketDungeonChallengeBeginNotify.java | 1 + .../PacketDungeonChallengeFinishNotify.java | 4 +++- 6 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketChallengeDataNotify.java diff --git a/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java b/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java index 1b595723a..686f6023e 100644 --- a/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java +++ b/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java @@ -12,6 +12,7 @@ import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType; import emu.grasscutter.scripts.constants.EventType; import emu.grasscutter.scripts.data.SceneGroup; import emu.grasscutter.scripts.data.SceneMonster; +import emu.grasscutter.server.packet.send.PacketChallengeDataNotify; import emu.grasscutter.server.packet.send.PacketDungeonChallengeBeginNotify; import emu.grasscutter.server.packet.send.PacketDungeonChallengeFinishNotify; import emu.grasscutter.server.packet.send.PacketSceneEntityAppearNotify; @@ -66,6 +67,10 @@ public class DungeonChallenge { this.isSuccess = isSuccess; } + public int getScore() { + return score; + } + public void start() { getScene().broadcastPacket(new PacketDungeonChallengeBeginNotify(this)); } @@ -81,9 +86,11 @@ public class DungeonChallenge { } public void onMonsterDie(EntityMonster entity) { - score++; + score = getScore() + 1; - if (score >= objective) { + getScene().broadcastPacket(new PacketChallengeDataNotify(this, 1, getScore())); + + if (getScore() >= objective) { this.setSuccess(true); finish(); } diff --git a/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java b/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java index 5662abf4d..6011c1f7c 100644 --- a/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java +++ b/src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java @@ -44,6 +44,8 @@ public class DungeonManager { return; } + Grasscutter.getLogger().info(player.getNickname() + " is trying to enter dungeon " + dungeonId); + int sceneId = data.getSceneId(); player.getScene().setPrevScene(sceneId); diff --git a/src/main/java/emu/grasscutter/scripts/ScriptLib.java b/src/main/java/emu/grasscutter/scripts/ScriptLib.java index 87881db51..05b129f2d 100644 --- a/src/main/java/emu/grasscutter/scripts/ScriptLib.java +++ b/src/main/java/emu/grasscutter/scripts/ScriptLib.java @@ -139,6 +139,10 @@ public class ScriptLib { return 0; } + public int AddExtraGroupSuite(int groupId, int param2) { + return 0; + } + public int ActiveChallenge(int challengeId, int challengeIndex, int param3, int groupId, int param4, int param5) { SceneGroup group = getSceneScriptManager().getGroupById(groupId); diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketChallengeDataNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketChallengeDataNotify.java new file mode 100644 index 000000000..452ca7118 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketChallengeDataNotify.java @@ -0,0 +1,21 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.game.dungeons.DungeonChallenge; +import emu.grasscutter.net.packet.BasePacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.ChallengeDataNotifyOuterClass.ChallengeDataNotify; + +public class PacketChallengeDataNotify extends BasePacket { + + public PacketChallengeDataNotify(DungeonChallenge challenge, int index, int value) { + super(PacketOpcodes.ChallengeDataNotify); + + ChallengeDataNotify proto = ChallengeDataNotify.newBuilder() + .setChallengeIndex(challenge.getChallengeIndex()) + .setParamIndex(index) + .setValue(value) + .build(); + + this.setData(proto); + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeBeginNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeBeginNotify.java index 2dd734cf5..2b8112728 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeBeginNotify.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeBeginNotify.java @@ -13,6 +13,7 @@ public class PacketDungeonChallengeBeginNotify extends BasePacket { DungeonChallengeBeginNotify proto = DungeonChallengeBeginNotify.newBuilder() .setChallengeId(challenge.getChallengeId()) .setChallengeIndex(challenge.getChallengeIndex()) + .setGroupId(challenge.getGroup().id) .build(); this.setData(proto); diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeFinishNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeFinishNotify.java index 323528aae..0fbcd9570 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeFinishNotify.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketDungeonChallengeFinishNotify.java @@ -11,8 +11,10 @@ public class PacketDungeonChallengeFinishNotify extends BasePacket { super(PacketOpcodes.DungeonChallengeFinishNotify); DungeonChallengeFinishNotify proto = DungeonChallengeFinishNotify.newBuilder() - .setChallengeIndex(challenge.getChallengeId()) + .setChallengeIndex(challenge.getChallengeIndex()) .setIsSuccess(challenge.isSuccess()) + .setUnk1(challenge.getChallengeId()) + .setUnk2(30) .build(); this.setData(proto);