Implement picking aeons in the beginning of SU

This commit is contained in:
Melledy
2023-10-28 00:05:50 -07:00
parent c777d9d198
commit 936ec9c430
8 changed files with 818 additions and 44 deletions

View File

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

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

View File

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

View File

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

View File

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

View File

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