mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-13 05:44:36 +01:00
Added basic support for challenges
This commit is contained in:
@@ -27,6 +27,7 @@ public class GameData {
|
||||
@Getter private static Int2ObjectMap<MazePlaneExcel> mazePlaneExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<MapEntranceExcel> mapEntranceExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<HeroExcel> heroExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<ChallengeExcel> challengeExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
private static Int2ObjectMap<AvatarPromotionExcel> avatarPromotionExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
private static Int2ObjectMap<AvatarSkillTreeExcel> avatarSkillTreeExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
29
src/main/java/emu/lunarcore/data/excel/ChallengeExcel.java
Normal file
29
src/main/java/emu/lunarcore/data/excel/ChallengeExcel.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package emu.lunarcore.data.excel;
|
||||
|
||||
import emu.lunarcore.data.GameResource;
|
||||
import emu.lunarcore.data.ResourceType;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = {"ChallengeMazeConfig.json"})
|
||||
public class ChallengeExcel extends GameResource {
|
||||
private int ID;
|
||||
private int MapEntranceID;
|
||||
private int StageNum;
|
||||
private int MazeBuffID;
|
||||
|
||||
private int MazeGroupID1;
|
||||
private int[] ConfigList1;
|
||||
private int[] NpcMonsterIDList1;
|
||||
private int[] EventIDList1;
|
||||
private int MazeGroupID2;
|
||||
private int[] ConfigList2;
|
||||
private int[] NpcMonsterIDList2;
|
||||
private int[] EventIDList2;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package emu.lunarcore.game.challenge;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.data.excel.ChallengeExcel;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import emu.lunarcore.server.game.BaseGameService;
|
||||
import emu.lunarcore.server.game.GameServer;
|
||||
import emu.lunarcore.server.packet.send.PacketStartChallengeScRsp;
|
||||
|
||||
public class ChallengeService extends BaseGameService {
|
||||
|
||||
public ChallengeService(GameServer server) {
|
||||
super(server);
|
||||
}
|
||||
|
||||
public void startChallenge(Player player, int challengeId) {
|
||||
ChallengeExcel excel = GameData.getChallengeExcelMap().get(challengeId);
|
||||
if (excel == null) {
|
||||
player.sendPacket(new PacketStartChallengeScRsp());
|
||||
return;
|
||||
}
|
||||
|
||||
player.enterScene(excel.getMapEntranceID(), 0, false);
|
||||
|
||||
// Send packet
|
||||
player.sendPacket(new PacketStartChallengeScRsp(player, challengeId));
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import java.util.List;
|
||||
import emu.lunarcore.Config.GameServerConfig;
|
||||
import emu.lunarcore.LunarRail;
|
||||
import emu.lunarcore.game.battle.BattleService;
|
||||
import emu.lunarcore.game.challenge.ChallengeService;
|
||||
import emu.lunarcore.game.gacha.GachaService;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import emu.lunarcore.game.service.ChatService;
|
||||
@@ -31,7 +32,8 @@ public class GameServer extends KcpServer {
|
||||
@Getter private final InventoryService inventoryService;
|
||||
@Getter private final GachaService gachaService;
|
||||
@Getter private final ChatService chatService;
|
||||
|
||||
@Getter private final ChallengeService challengeService;
|
||||
|
||||
public GameServer(GameServerConfig serverConfig) {
|
||||
// Game Server base
|
||||
this.serverConfig = serverConfig;
|
||||
@@ -46,6 +48,7 @@ public class GameServer extends KcpServer {
|
||||
this.inventoryService = new InventoryService(this);
|
||||
this.gachaService = new GachaService(this);
|
||||
this.chatService = new ChatService(this);
|
||||
this.challengeService = new ChallengeService(this);
|
||||
|
||||
// Hook into shutdown event.
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(this::onShutdown));
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package emu.lunarcore.server.packet.recv;
|
||||
|
||||
import emu.lunarcore.proto.StartChallengeCsReqOuterClass.StartChallengeCsReq;
|
||||
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.StartChallengeCsReq)
|
||||
public class HandlerStartChallengeCsReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] data) throws Exception {
|
||||
var req = StartChallengeCsReq.parseFrom(data);
|
||||
|
||||
session.getServer().getChallengeService().startChallenge(session.getPlayer(), req.getChallengeId());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package emu.lunarcore.server.packet.send;
|
||||
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import emu.lunarcore.proto.ChallengeInfoOuterClass.ChallengeInfo;
|
||||
import emu.lunarcore.proto.ChallengeStatusOuterClass.ChallengeStatus;
|
||||
import emu.lunarcore.proto.ExtraLineupTypeOuterClass.ExtraLineupType;
|
||||
import emu.lunarcore.proto.StartChallengeScRspOuterClass.StartChallengeScRsp;
|
||||
import emu.lunarcore.server.packet.BasePacket;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
|
||||
public class PacketStartChallengeScRsp extends BasePacket {
|
||||
|
||||
public PacketStartChallengeScRsp() {
|
||||
super(CmdId.StartChallengeScRsp);
|
||||
|
||||
var data = StartChallengeScRsp.newInstance()
|
||||
.setRetcode(1);
|
||||
|
||||
this.setData(data);
|
||||
}
|
||||
|
||||
public PacketStartChallengeScRsp(Player player, int challengeId) {
|
||||
super(CmdId.StartChallengeScRsp);
|
||||
|
||||
var challengeInfo = ChallengeInfo.newInstance()
|
||||
.setChallengeId(challengeId)
|
||||
.setStatus(ChallengeStatus.CHALLENGE_DOING)
|
||||
.setExtraLineupType(ExtraLineupType.LINEUP_CHALLENGE);
|
||||
|
||||
var data = StartChallengeScRsp.newInstance()
|
||||
.setLineup(player.getCurrentLineup().toProto().setExtraLineupType(ExtraLineupType.LINEUP_CHALLENGE)) // TODO temporary
|
||||
.setScene(player.getScene().toProto())
|
||||
.setChallengeInfo(challengeInfo);
|
||||
|
||||
this.setData(data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user