mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-23 10:44:36 +01:00
Fix event TriggerBattle, now will quit SU when not win battle, fix the room portal's color
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -469,6 +469,8 @@ public class RogueInstance {
|
||||
int amount = battle.getNpcMonsters().size();
|
||||
this.createBuffSelect(amount);
|
||||
}
|
||||
} else {
|
||||
this.getPlayer().getRogueManager().quitRogue();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user