Fix event TriggerBattle, now will quit SU when not win battle, fix the room portal's color

This commit is contained in:
Somebody
2024-02-01 14:00:08 +08:00
committed by Melledy
parent 0975ddf234
commit 1a9df9dfb8
12 changed files with 1052 additions and 98 deletions

View File

@@ -21,10 +21,7 @@ import emu.lunarcore.proto.BattleEndStatusOuterClass.BattleEndStatus;
import emu.lunarcore.proto.BattleStatisticsOuterClass.BattleStatistics;
import emu.lunarcore.server.game.BaseGameService;
import emu.lunarcore.server.game.GameServer;
import emu.lunarcore.server.packet.send.PacketReEnterLastElementStageScRsp;
import emu.lunarcore.server.packet.send.PacketSceneCastSkillScRsp;
import emu.lunarcore.server.packet.send.PacketStartCocoonStageScRsp;
import emu.lunarcore.server.packet.send.PacketSyncLineupNotify;
import emu.lunarcore.server.packet.send.*;
import it.unimi.dsi.fastutil.ints.IntSet;
public class BattleService extends BaseGameService {
@@ -166,7 +163,7 @@ public class BattleService extends BaseGameService {
player.sendPacket(new PacketSceneCastSkillScRsp(attackedGroupId));
}
public void startBattle(Player player, int stageId) { // TODO: should send SceneEnterStageScRsp instead of SceneCastSkillScRsp
public void startBattle(Player player, int stageId) {
// Sanity check to make sure player isnt in a battle
if (player.isInBattle()) {
return;
@@ -181,10 +178,21 @@ public class BattleService extends BaseGameService {
// Create new battle for player
Battle battle = new Battle(player, player.getCurrentLineup(), stage);
// Challenge
if (player.getChallengeInstance() != null) {
player.getChallengeInstance().onBattleStart(battle);
}
// Rogue
if (player.getRogueInstance() != null) {
player.getRogueInstance().onBattleStart(battle);
}
player.setBattle(battle);
// Send packet
player.sendPacket(new PacketSceneCastSkillScRsp(battle, 0)); // remain to be tested
player.sendPacket(new PacketSceneEnterStageScRsp(battle));
}
public void startCocoon(Player player, int cocoonId, int worldLevel, int wave) {

View File

@@ -78,7 +78,7 @@ public class RogueEntityLoader extends SceneEntityLoader {
PropRogueData propExtra = null;
// Rogue Door id is 1000
if (propId == 1000 || propId == 1021) {
if (propId == 1000 || propId == 1021 || propId == 1022 || propId == 1023) {
// Site index
int index = 0;
@@ -91,15 +91,20 @@ public class RogueEntityLoader extends SceneEntityLoader {
RogueRoomData room = rogue.getCurrentRoom();
if (room.getNextSiteIds().length > 0) {
int siteId = room.getNextSiteIds()[index];
int roomId = rogue.getRooms().get(siteId).getRoomId();
var nextRoom = rogue.getRooms().get(siteId);
propExtra = new PropRogueData(roomId, siteId);
propId = switch (nextRoom.getRoomExcel().getRogueRoomType()) {
case 3 -> 1022;
case 5 -> 1023;
default -> 1021;
};
propExtra = new PropRogueData(nextRoom.getRoomId(), siteId);
} else {
// Exit portal?
propId = 1000;
}
// Force rogue door to be open
propId = 1021;
state = PropState.Open;
}

View File

@@ -20,7 +20,7 @@ public class RogueEventManager {
var param = event.getRogueEffectParamList();
switch (event.getRogueEffectType()) {
case GetItem -> rogueInstance.setMoney(rogueInstance.getMoney() + param.get(1));
case TriggerBattle -> rogueInstance.createBuffSelect(3); //this.getPlayer().getServer().getBattleService().startBattle(player, param.get(0)); // NOT WORKING
case TriggerBattle -> this.getPlayer().getServer().getBattleService().startBattle(player, param.get(0)); // Client Send Packet SceneEnterStageCsReq so we dont have to handle it here
case TriggerRogueMiracleSelect -> this.getRogueInstance().createMiracleSelect(1);
case TriggerRogueBuffSelect -> this.getRogueInstance().createBuffSelect(1);
}

View File

@@ -469,6 +469,8 @@ public class RogueInstance {
int amount = battle.getNpcMonsters().size();
this.createBuffSelect(amount);
}
} else {
this.getPlayer().getRogueManager().quitRogue();
}
}

View File

@@ -0,0 +1,17 @@
package emu.lunarcore.server.packet.recv;
import emu.lunarcore.proto.SceneEnterStageCsReqOuterClass.SceneEnterStageCsReq;
import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler;
@Opcodes(CmdId.SceneEnterStageCsReq)
public class HandlerSceneEnterStageCsReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] data) throws Exception {
var req = SceneEnterStageCsReq.parseFrom(data);
session.getPlayer().getServer().getBattleService().startBattle(session.getPlayer(), req.getStageId());
}
}

View File

@@ -0,0 +1,17 @@
package emu.lunarcore.server.packet.send;
import emu.lunarcore.game.battle.Battle;
import emu.lunarcore.proto.SceneEnterStageScRspOuterClass.SceneEnterStageScRsp;
import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId;
public class PacketSceneEnterStageScRsp extends BasePacket {
public PacketSceneEnterStageScRsp(Battle battle) {
super(CmdId.SceneEnterStageScRsp);
var proto = SceneEnterStageScRsp.newInstance()
.setBattleInfo(battle.toProto());
this.setData(proto);
}
}