mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-23 10:44:36 +01:00
Implement picking aeons in the beginning of SU
This commit is contained in:
@@ -36,6 +36,7 @@ public class GameData {
|
||||
|
||||
@Getter private static Int2ObjectMap<RogueManagerExcel> rogueManagerExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueTalentExcel> rogueTalentExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueAeonExcel> rogueAeonExcelMap = new Int2ObjectLinkedOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueAreaExcel> rogueAreaExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueRoomExcel> rogueRoomExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueMonsterExcel> rogueMonsterExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
18
src/main/java/emu/lunarcore/data/excel/RogueAeonExcel.java
Normal file
18
src/main/java/emu/lunarcore/data/excel/RogueAeonExcel.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package emu.lunarcore.data.excel;
|
||||
|
||||
import emu.lunarcore.data.GameResource;
|
||||
import emu.lunarcore.data.ResourceType;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = {"RogueAeon.json"})
|
||||
public class RogueAeonExcel extends GameResource {
|
||||
private int AeonID;
|
||||
private int RogueBuffType;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return AeonID;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -41,7 +41,14 @@ public class RogueBuffSelectMenu {
|
||||
continue;
|
||||
}
|
||||
|
||||
this.randomBuffs.add(10.0 / excel.getRogueBuffRarity(), excel);
|
||||
// Calculate buff weights
|
||||
double weight = 10.0 / excel.getRogueBuffRarity();
|
||||
|
||||
if (this.getRogue().getAeonBuffType() == excel.getRogueBuffType()) {
|
||||
weight *= 2;
|
||||
}
|
||||
|
||||
this.randomBuffs.add(weight, excel);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.util.*;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.data.config.AnchorInfo;
|
||||
import emu.lunarcore.data.excel.RogueAeonExcel;
|
||||
import emu.lunarcore.data.excel.RogueAreaExcel;
|
||||
import emu.lunarcore.game.battle.Battle;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
@@ -42,10 +43,13 @@ public class RogueInstance {
|
||||
private int pendingMiracleSelects;
|
||||
private RogueMiracleSelectMenu miracleSelect;
|
||||
|
||||
private int aeonId;
|
||||
private int aeonBuffType;
|
||||
|
||||
@Deprecated // Morphia only!
|
||||
public RogueInstance() {}
|
||||
|
||||
public RogueInstance(Player player, RogueAreaExcel excel) {
|
||||
public RogueInstance(Player player, RogueAreaExcel excel, RogueAeonExcel aeonExcel) {
|
||||
this.player = player;
|
||||
this.excel = excel;
|
||||
this.areaId = excel.getRogueAreaID();
|
||||
@@ -54,6 +58,11 @@ public class RogueInstance {
|
||||
this.buffs = new HashMap<>();
|
||||
this.miracles = new HashMap<>();
|
||||
|
||||
if (aeonExcel != null) {
|
||||
this.aeonId = aeonExcel.getAeonID();
|
||||
this.aeonBuffType = aeonExcel.getRogueBuffType();
|
||||
}
|
||||
|
||||
this.initRooms();
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import emu.lunarcore.game.player.BasePlayerManager;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import emu.lunarcore.game.player.PlayerLineup;
|
||||
import emu.lunarcore.proto.ExtraLineupTypeOuterClass.ExtraLineupType;
|
||||
import emu.lunarcore.proto.RogueAeonInfoOuterClass.RogueAeonInfo;
|
||||
import emu.lunarcore.proto.RogueAreaOuterClass.RogueArea;
|
||||
import emu.lunarcore.proto.RogueAreaStatusOuterClass.RogueAreaStatus;
|
||||
import emu.lunarcore.proto.RogueInfoDataOuterClass.RogueInfoData;
|
||||
@@ -27,7 +28,7 @@ public class RogueManager extends BasePlayerManager {
|
||||
super(player);
|
||||
}
|
||||
|
||||
public void startRogue(int areaId, RepeatedInt avatarIdList) {
|
||||
public void startRogue(int areaId, int aeonId, RepeatedInt avatarIdList) {
|
||||
// Make sure player already isnt in a rogue instance
|
||||
if (getPlayer().getRogueInstance() != null) {
|
||||
getPlayer().sendPacket(new PacketStartRogueScRsp());
|
||||
@@ -35,12 +36,14 @@ public class RogueManager extends BasePlayerManager {
|
||||
}
|
||||
|
||||
// Get excel
|
||||
var excel = GameData.getRogueAreaExcelMap().get(areaId);
|
||||
if (excel == null || !excel.isValid()) {
|
||||
var rogueAreaExcel = GameData.getRogueAreaExcelMap().get(areaId);
|
||||
if (rogueAreaExcel == null || !rogueAreaExcel.isValid()) {
|
||||
getPlayer().sendPacket(new PacketStartRogueScRsp());
|
||||
return;
|
||||
}
|
||||
|
||||
var aeonExcel = GameData.getRogueAeonExcelMap().get(aeonId);
|
||||
|
||||
// Replace lineup
|
||||
getPlayer().getLineupManager().replaceLineup(0, ExtraLineupType.LINEUP_ROGUE_VALUE, Arrays.stream(avatarIdList.array()).boxed().toList());
|
||||
// Get lineup
|
||||
@@ -50,8 +53,9 @@ public class RogueManager extends BasePlayerManager {
|
||||
getPlayer().sendPacket(new PacketStartRogueScRsp());
|
||||
return;
|
||||
}
|
||||
// Get entrance id
|
||||
RogueInstance data = new RogueInstance(getPlayer(), excel);
|
||||
|
||||
// Get entrance id
|
||||
RogueInstance data = new RogueInstance(getPlayer(), rogueAreaExcel, aeonExcel);
|
||||
getPlayer().setRogueInstance(data);
|
||||
|
||||
// Reset hp/sp
|
||||
@@ -117,9 +121,17 @@ public class RogueManager extends BasePlayerManager {
|
||||
var data = RogueInfoData.newInstance()
|
||||
.setRogueScoreInfo(score)
|
||||
.setRogueSeasonInfo(season);
|
||||
|
||||
var aeonInfo = RogueAeonInfo.newInstance()
|
||||
.setUnlockedAeonNum(GameData.getRogueAeonExcelMap().size());
|
||||
|
||||
for (var aeonExcel : GameData.getRogueAeonExcelMap().values()) {
|
||||
aeonInfo.addAeonIdList(aeonExcel.getAeonID());
|
||||
}
|
||||
|
||||
var proto = RogueInfo.newInstance()
|
||||
.setRogueScoreInfo(score)
|
||||
.setRogueAeonInfo(aeonInfo)
|
||||
.setRogueData(data)
|
||||
.setTalentPoints(getPlayer().getTalentPoints())
|
||||
.setSeasonId(seasonId)
|
||||
@@ -139,6 +151,8 @@ public class RogueManager extends BasePlayerManager {
|
||||
for (int id : curRogue.getBaseAvatarIds()) {
|
||||
proto.addBaseAvatarIdList(id);
|
||||
}
|
||||
|
||||
aeonInfo.setSelectedAeonId(curRogue.getAeonId());
|
||||
}
|
||||
|
||||
// Add areas
|
||||
|
||||
@@ -13,7 +13,7 @@ public class HandlerStartRogueCsReq extends PacketHandler {
|
||||
public void handle(GameSession session, byte[] header, byte[] data) throws Exception {
|
||||
var req = StartRogueCsReq.parseFrom(data);
|
||||
|
||||
session.getPlayer().getRogueManager().startRogue(req.getAreaId(), req.getBaseAvatarIdList());
|
||||
session.getPlayer().getRogueManager().startRogue(req.getAreaId(), req.getBuffAeonId(), req.getBaseAvatarIdList());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user