Fix some event(at least it wont get stuck in anybody)

This commit is contained in:
Somebody
2024-02-01 12:21:38 +08:00
committed by Melledy
parent 55a1a636ec
commit 0975ddf234
12 changed files with 661 additions and 156 deletions

View File

@@ -166,7 +166,7 @@ public class BattleService extends BaseGameService {
player.sendPacket(new PacketSceneCastSkillScRsp(attackedGroupId));
}
public void startBattle(Player player, int stageId) {
public void startBattle(Player player, int stageId) { // TODO: should send SceneEnterStageScRsp instead of SceneCastSkillScRsp
// Sanity check to make sure player isnt in a battle
if (player.isInBattle()) {
return;

View File

@@ -1,6 +1,5 @@
package emu.lunarcore.game.rogue;
import emu.lunarcore.LunarCore;
import emu.lunarcore.data.GameData;
import emu.lunarcore.data.GameDepot;
import emu.lunarcore.data.config.GroupInfo;
@@ -23,7 +22,6 @@ import emu.lunarcore.server.packet.send.PacketSyncRogueDialogueEventDataScNotify
import emu.lunarcore.util.Utils;
import java.util.ArrayList;
import java.util.List;
public class RogueEntityLoader extends SceneEntityLoader {

View File

@@ -555,7 +555,7 @@ public class RogueInstance {
public RogueAeon toAeonProto() {
var proto = RogueAeon.newInstance()
.setOFBCBEIEAEC(this.getAeonId());
.setAeonId(this.getAeonId());
return proto;
}

View File

@@ -22,7 +22,8 @@ public class EntityNpc implements GameEntity {
private final Position pos;
private final Position rot;
@Setter private int rogueNpcId;
@Setter private int rogueNpcId;
@Setter private boolean isDialogueFinished = false;
public EntityNpc(Scene scene, GroupInfo group, NpcInfo npcInfo) {
this.scene = scene;
@@ -43,7 +44,7 @@ public class EntityNpc implements GameEntity {
if (this.rogueNpcId > 0) {
var rogue = NpcRogueInfo.newInstance()
.setRogueNpcId(this.rogueNpcId)
.setBHPGGEOBJHM(false);
.setFinishDialogue(isDialogueFinished);
npc.getMutableExtraInfo().setRogueInfo(rogue);
}

View File

@@ -0,0 +1,24 @@
package emu.lunarcore.server.packet.recv;
import emu.lunarcore.game.scene.entity.GameEntity;
import emu.lunarcore.proto.RogueNpcDisappearCsReqOuterClass.RogueNpcDisappearCsReq;
import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketSceneGroupRefreshScNotify;
@Opcodes(CmdId.RogueNpcDisappearCsReq)
public class HandleRogueNpcDisappearCsReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] data) throws Exception {
var req = RogueNpcDisappearCsReq.parseFrom(data);
GameEntity entity = session.getPlayer().getScene().getEntityById(req.getEntityId());
if (entity != null) {
session.send(CmdId.RogueNpcDisappearScRsp);
session.send(new PacketSceneGroupRefreshScNotify(null, entity));
}
}
}

View File

@@ -1,14 +1,24 @@
package emu.lunarcore.server.packet.recv;
import emu.lunarcore.game.scene.entity.EntityNpc;
import emu.lunarcore.proto.FinishRogueDialogueGroupCsReqOuterClass.FinishRogueDialogueGroupCsReq;
import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketSceneGroupRefreshScNotify;
@Opcodes(CmdId.FinishRogueDialogueGroupCsReq)
public class HandlerFinishRogueDialogueGroupCsReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] data) throws Exception {
var req = FinishRogueDialogueGroupCsReq.parseFrom(data);
EntityNpc npc = (EntityNpc)session.getPlayer().getScene().getEntityById(req.getEntityId());
if (npc == null) return;
npc.setDialogueFinished(true);
session.send(new PacketSceneGroupRefreshScNotify(npc, null));
session.send(CmdId.FinishRogueDialogueGroupScRsp);
}
}

View File

@@ -1,5 +1,7 @@
package emu.lunarcore.server.packet.recv;
import emu.lunarcore.game.scene.entity.EntityNpc;
import emu.lunarcore.proto.FinishRogueDialogueGroupCsReqOuterClass.FinishRogueDialogueGroupCsReq;
import emu.lunarcore.proto.SelectRogueDialogueEventCsReqOuterClass.SelectRogueDialogueEventCsReq;
import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId;
@@ -17,9 +19,13 @@ public class HandlerSelectRogueDialogueEventCsReq extends PacketHandler {
if (session.getPlayer().getRogueInstance() != null) {
session.getPlayer().getRogueInstance().onSelectDialogue(req.getDialogueEventId());
}
EntityNpc npc = (EntityNpc)session.getPlayer().getScene().getEntityById(req.getEntityId());
session.send(new PacketSelectRogueDialogueEventScRsp(req.getDialogueEventId(), req.getEntityId(), session.getPlayer()));
session.send(CmdId.FinishRogueDialogueGroupScRsp);
session.send(new PacketSelectRogueDialogueEventScRsp(req.getDialogueEventId(), npc));
new HandlerFinishRogueDialogueGroupCsReq().handle(session, FinishRogueDialogueGroupCsReq.newInstance() // using it before the event is implemented
.setEntityId(req.getEntityId())
.toByteArray());
}
}

View File

@@ -16,7 +16,7 @@ import java.util.ArrayList;
public class PacketSelectRogueDialogueEventScRsp extends BasePacket {
public PacketSelectRogueDialogueEventScRsp(int dialogueEventId, int entityId, Player player) {
public PacketSelectRogueDialogueEventScRsp(int dialogueEventId, EntityNpc npc) {
super(CmdId.SelectRogueDialogueEventScRsp);
var data = SelectRogueDialogueEventScRsp.newInstance()
@@ -25,6 +25,7 @@ public class PacketSelectRogueDialogueEventScRsp extends BasePacket {
RogueNPCExcel rogueNpcExcel = Utils.randomElement(GameDepot.getRogueRandomNpcList());
var params = new ArrayList<RogueDialogueEventParam>();
var start = rogueNpcExcel.getId();
while (true) {
var event = GameData.getRogueDialogueEventList().get(start);
if (event == null) break;
@@ -33,8 +34,9 @@ public class PacketSelectRogueDialogueEventScRsp extends BasePacket {
.setIsValid(true));
start++;
}
var event = RogueDialogueEvent.newInstance()
.setNpcId(((EntityNpc)player.getScene().getEntityById(entityId)).getRogueNpcId())
.setNpcId(npc.getRogueNpcId())
.setGameModeType(5)
.addAllNNOHLEAOJPP(dialogueEventId)
.addAllRogueDialogueEventParam(params.toArray(RogueDialogueEventParam[]::new));