Added basic support for challenges

This commit is contained in:
Melledy
2023-10-02 08:38:39 -07:00
parent ea3a773dbd
commit 1f4b1b4770
6 changed files with 118 additions and 1 deletions

View File

@@ -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<>();

View 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;
}
}

View File

@@ -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));
}
}

View File

@@ -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));

View File

@@ -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());
}
}

View File

@@ -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);
}
}