mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-23 10:44:36 +01:00
fix some events (most events are available)
This commit is contained in:
@@ -58,6 +58,10 @@ public class GameData {
|
||||
@Getter private static Int2ObjectMap<DialogueEventExcel> rogueDialogueEventList = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueBuffExcel> rogueBuffTagExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueBuffGroupExcel> rogueBuffGroupExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
@Getter private static Int2ObjectMap<RogueNousMainStoryExcel> rogueNousMainStoryExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueNousSubStoryExcel> rogueNousSubStoryExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<RogueNousDiceBranchExcel> rogueNousDiceBranchExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
private static Int2ObjectMap<RogueBuffExcel> rogueBuffExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
private static Int2ObjectMap<AvatarPromotionExcel> avatarPromotionExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package emu.lunarcore.data.excel;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.data.GameResource;
|
||||
import emu.lunarcore.data.ResourceType;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = {"RogueNousDiceBranch.json"})
|
||||
public class RogueNousDiceBranchExcel extends GameResource {
|
||||
private int BranchId;
|
||||
private int DefaultUltraSurface;
|
||||
private Set<Integer> DefaultCommonSurfaceList;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return BranchId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
GameData.getRogueNousDiceBranchExcelMap().put(BranchId, this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package emu.lunarcore.data.excel;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.data.GameResource;
|
||||
import emu.lunarcore.data.ResourceType;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = {"RogueNousMainStory.json"})
|
||||
public class RogueNousMainStoryExcel extends GameResource {
|
||||
private int StoryID;
|
||||
private int Layer;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return this.StoryID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
GameData.getRogueNousMainStoryExcelMap().put(this.StoryID, this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package emu.lunarcore.data.excel;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.data.GameResource;
|
||||
import emu.lunarcore.data.ResourceType;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = {"RogueNousSubStory.json"})
|
||||
public class RogueNousSubStoryExcel extends GameResource {
|
||||
private int StoryID;
|
||||
private int Layer;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return this.StoryID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
GameData.getRogueNousSubStoryExcelMap().put(this.StoryID, this);
|
||||
}
|
||||
}
|
||||
@@ -166,6 +166,7 @@ public class BattleService extends BaseGameService {
|
||||
public void startBattle(Player player, int stageId) {
|
||||
// Sanity check to make sure player isnt in a battle
|
||||
if (player.isInBattle()) {
|
||||
player.sendPacket(new PacketSceneEnterStageScRsp(player.getBattle()));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ import emu.lunarcore.game.player.lineup.PlayerLineup;
|
||||
import emu.lunarcore.game.rogue.RogueInstance;
|
||||
import emu.lunarcore.game.rogue.RogueManager;
|
||||
import emu.lunarcore.game.rogue.RogueTalentData;
|
||||
import emu.lunarcore.game.rogue.chess.ChessRogueManager;
|
||||
import emu.lunarcore.game.scene.Scene;
|
||||
import emu.lunarcore.game.scene.SceneBuff;
|
||||
import emu.lunarcore.game.scene.entity.EntityProp;
|
||||
@@ -115,6 +116,7 @@ public class Player implements Tickable {
|
||||
private transient final Mailbox mailbox;
|
||||
private transient final ChallengeManager challengeManager;
|
||||
private transient final RogueManager rogueManager;
|
||||
private transient final ChessRogueManager chessRogueManager;
|
||||
|
||||
// Database persistent data
|
||||
private LineupManager lineupManager;
|
||||
@@ -147,6 +149,7 @@ public class Player implements Tickable {
|
||||
this.mailbox = new Mailbox(this);
|
||||
this.challengeManager = new ChallengeManager(this);
|
||||
this.rogueManager = new RogueManager(this);
|
||||
this.chessRogueManager = new ChessRogueManager(this);
|
||||
}
|
||||
|
||||
// Called when player is created
|
||||
|
||||
@@ -141,6 +141,8 @@ public class RogueEntityLoader extends SceneEntityLoader {
|
||||
instance = scene.getPlayer().getRogueInstance();
|
||||
} while (instance.setDialogueParams(npcId) == null);
|
||||
|
||||
instance.getEventManager().setNowPercentage(0);
|
||||
instance.getEventManager().setBuffType(0);
|
||||
npc.setRogueNpcId(npcId);
|
||||
npc.setEventId(++instance.eventId);
|
||||
scene.getPlayer().sendPacket(new PacketSyncRogueDialogueEventDataScNotify(npcId, instance.curDialogueParams.get(npcId),
|
||||
|
||||
@@ -3,14 +3,11 @@ package emu.lunarcore.game.rogue;
|
||||
import emu.lunarcore.LunarCore;
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import emu.lunarcore.game.scene.entity.EntityNpc;
|
||||
import emu.lunarcore.proto.FinishRogueDialogueGroupCsReqOuterClass;
|
||||
import emu.lunarcore.server.packet.BasePacket;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
import emu.lunarcore.server.packet.recv.HandlerFinishRogueDialogueGroupCsReq;
|
||||
import emu.lunarcore.server.packet.send.PacketSyncRogueCommonPendingActionScNotify;
|
||||
import emu.lunarcore.proto.RogueDialogueEventParamOuterClass.RogueDialogueEventParam;
|
||||
import emu.lunarcore.util.Utils;
|
||||
import emu.lunarcore.util.WeightedList;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -18,20 +15,22 @@ import java.util.List;
|
||||
public class RogueEventManager {
|
||||
private RogueInstance rogueInstance;
|
||||
private Player player;
|
||||
@Setter private int nowPercentage = 0;
|
||||
@Setter private int buffType = 0;
|
||||
|
||||
public RogueEventManager(RogueInstance rogueInstance) {
|
||||
this.rogueInstance = rogueInstance;
|
||||
this.player = rogueInstance.getPlayer();
|
||||
}
|
||||
|
||||
public int handleEvent(int eventId) {
|
||||
public int handleEvent(int eventId, int npcId) {
|
||||
var event = GameData.getRogueDialogueEventList().get(eventId);
|
||||
if (event == null || event.getRogueEffectType() == null) return 0;
|
||||
List<Integer> param = event.getRogueEffectParamList();
|
||||
switch (event.getRogueEffectType()) {
|
||||
case GetItem -> rogueInstance.addDialogueMoney(param.get(1));
|
||||
case TriggerBattle -> {
|
||||
//this.getPlayer().getServer().getBattleService().startBattle(player, param.get(0));
|
||||
this.getPlayer().getServer().getBattleService().startBattle(player, param.get(0)); // handle in SceneEnterStageCsReq
|
||||
}
|
||||
case TriggerRogueMiracleSelect -> this.getRogueInstance().createMiracleSelect(1);
|
||||
case TriggerRogueBuffSelect -> {
|
||||
@@ -61,19 +60,85 @@ public class RogueEventManager {
|
||||
}
|
||||
case TriggerDialogueEventList -> {
|
||||
for (var id : param) {
|
||||
this.handleEvent(id);
|
||||
this.handleEvent(id, npcId);
|
||||
this.getRogueInstance().getCurDialogueParams().get(npcId).add(RogueDialogueEventParam.newInstance()
|
||||
.setDialogueEventId(id)
|
||||
.setIsValid(true));
|
||||
}
|
||||
}
|
||||
case TriggerRandomEventList -> {
|
||||
this.handleEvent(11604); // temp
|
||||
var weightList = new WeightedList<Integer>();
|
||||
var nextEventId = 0;
|
||||
for (var id : param) {
|
||||
if (nextEventId == 0) {
|
||||
nextEventId = id;
|
||||
continue;
|
||||
}
|
||||
weightList.add(id, nextEventId);
|
||||
nextEventId = 0;
|
||||
}
|
||||
int randomEventId = weightList.next();
|
||||
handleCost(eventId);
|
||||
return 0;
|
||||
this.handleEvent(randomEventId, npcId);
|
||||
return randomEventId;
|
||||
}
|
||||
case GetAllRogueBuffInGroupAndGetItem -> {
|
||||
var rogueBuff = GameData.getRogueBuffGroupExcelMap().get(param.get(0));
|
||||
this.getRogueInstance().addBuff(rogueBuff.getRogueBuffList());
|
||||
this.getRogueInstance().addDialogueMoney(param.get(2));
|
||||
}
|
||||
case RepeatableGamble -> {
|
||||
var failEventId = param.get(0);
|
||||
var initialPercent = param.get(1);
|
||||
var increasePercent = param.get(2);
|
||||
if (this.nowPercentage != 0)
|
||||
this.nowPercentage = initialPercent;
|
||||
else
|
||||
this.nowPercentage += increasePercent;
|
||||
var weightList = new WeightedList<Integer>();
|
||||
for (int i = 4; i < param.size(); i += 2) {
|
||||
weightList.add(param.get(i + 1), param.get(i));
|
||||
}
|
||||
int randomNum = Utils.randomRange(0, 100);
|
||||
if (randomNum <= this.nowPercentage) {
|
||||
handleCost(eventId);
|
||||
this.handleEvent(failEventId, npcId);
|
||||
this.getRogueInstance().getCurDialogueParams().get(npcId).add(RogueDialogueEventParam.newInstance()
|
||||
.setDialogueEventId(failEventId)
|
||||
.setIsValid(true));
|
||||
return 0;
|
||||
} else {
|
||||
handleCost(eventId);
|
||||
int nextEventId = weightList.next();
|
||||
this.handleEvent(nextEventId, npcId);
|
||||
this.getRogueInstance().getCurDialogueParams().get(npcId).add(RogueDialogueEventParam.newInstance()
|
||||
.setDialogueEventId(nextEventId)
|
||||
.setIsValid(true)
|
||||
.setRatio(this.nowPercentage / 100f));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
case EnhanceRogueBuff -> {
|
||||
var rogueBuff = GameData.getRogueBuffGroupExcelMap().get(param.get(0));
|
||||
if (rogueBuff != null) {
|
||||
var weightList = new WeightedList<RogueBuffData>();
|
||||
for (var buff : rogueBuff.getRogueBuffList()) {
|
||||
weightList.add(1.0f, buff);
|
||||
}
|
||||
// random param.get(1) times
|
||||
while (true) {
|
||||
var buff = weightList.next();
|
||||
if (buff == null || buff.getExcel() == null) break;
|
||||
if (!this.getRogueInstance().getBuffs().containsValue(buff)) continue;
|
||||
if (this.getRogueInstance().getBuffs().get(buff.getId()).getLevel() >= 2) continue;
|
||||
this.getRogueInstance().addBuff(new RogueBuffData(buff.getId(), buff.getLevel() + 1));
|
||||
param.set(1, param.get(1) - 1);
|
||||
if (param.get(1) <= 0) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case NONE -> {} // do nothing
|
||||
default -> {
|
||||
LunarCore.getLogger().info("RogueEventManager: unhandled event type: " + event.getRogueEffectType()); // DEBUG
|
||||
}
|
||||
|
||||
@@ -416,7 +416,7 @@ public class RogueInstance {
|
||||
data.setTimes(this.id - 2);
|
||||
this.getPlayer().sendPacket(new PacketHandleRogueCommonPendingActionScRsp(data));
|
||||
try {
|
||||
this.onSelectDialogue(bonus.getEventId());
|
||||
this.onSelectDialogue(bonus.getEventId(), 0);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
return bonus;
|
||||
@@ -489,6 +489,7 @@ public class RogueInstance {
|
||||
|
||||
if (argMap.containsKey(v) && argMap.get(v).equals("RelateToBuff")) {
|
||||
param.setArgId(this.getAeonId());
|
||||
this.getEventManager().setBuffType(this.getAeonBuffType());
|
||||
}
|
||||
|
||||
params.add(param);
|
||||
@@ -560,8 +561,8 @@ public class RogueInstance {
|
||||
|
||||
// Dialogue stuff
|
||||
|
||||
public int onSelectDialogue(int dialogueEventId) {
|
||||
return this.eventManager.handleEvent(dialogueEventId);
|
||||
public int onSelectDialogue(int dialogueEventId, int npcId) {
|
||||
return this.eventManager.handleEvent(dialogueEventId, npcId);
|
||||
}
|
||||
|
||||
// Battle
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package emu.lunarcore.game.rogue.chess;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.game.player.BasePlayerManager;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class ChessRogueManager extends BasePlayerManager {
|
||||
public ChessRogueManager(Player player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
public Int2ObjectMap<Set<Integer>> getRogueDefaultDice() {
|
||||
var map = new Int2ObjectOpenHashMap<Set<Integer>>();
|
||||
for (var entry: GameData.getRogueNousDiceBranchExcelMap().values()) {
|
||||
var set = new HashSet<Integer>();
|
||||
set.add(entry.getDefaultUltraSurface());
|
||||
set.addAll(entry.getDefaultCommonSurfaceList());
|
||||
map.put(entry.getBranchId(), set);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package emu.lunarcore.server.packet.recv;
|
||||
|
||||
import emu.lunarcore.server.game.GameSession;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
import emu.lunarcore.server.packet.Opcodes;
|
||||
import emu.lunarcore.server.packet.PacketHandler;
|
||||
import emu.lunarcore.server.packet.send.PacketChessRogueQueryScRsp;
|
||||
|
||||
@Opcodes(CmdId.ChessRogueQueryCsReq)
|
||||
public class HandlerChessRogueQueryCsReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] data) throws Exception {
|
||||
session.send(new PacketChessRogueQueryScRsp(session.getPlayer()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package emu.lunarcore.server.packet.recv;
|
||||
|
||||
import emu.lunarcore.server.game.GameSession;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
import emu.lunarcore.server.packet.Opcodes;
|
||||
import emu.lunarcore.server.packet.PacketHandler;
|
||||
import emu.lunarcore.server.packet.send.PacketGetChessRogueNousStoryInfoScRsp;
|
||||
|
||||
@Opcodes(CmdId.GetChessRogueNousStoryInfoCsReq)
|
||||
public class HandlerGetChessRogueNousStoryInfoCsReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] data) throws Exception {
|
||||
session.send(new PacketGetChessRogueNousStoryInfoScRsp());
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ public class HandlerSelectRogueDialogueEventCsReq extends PacketHandler {
|
||||
|
||||
int callback = 0;
|
||||
if (session.getPlayer().getRogueInstance() != null) {
|
||||
callback = session.getPlayer().getRogueInstance().onSelectDialogue(req.getDialogueEventId());
|
||||
callback = session.getPlayer().getRogueInstance().onSelectDialogue(req.getDialogueEventId(), npc.getRogueNpcId());
|
||||
}
|
||||
|
||||
session.send(new PacketSelectRogueDialogueEventScRsp(req.getDialogueEventId(), npc, callback));
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package emu.lunarcore.server.packet.send;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import emu.lunarcore.proto.ChessRogueNousDiceInfoOuterClass.ChessRogueNousDiceInfo;
|
||||
import emu.lunarcore.proto.ChessRogueNousDiceSurfaceInfoOuterClass.ChessRogueNousDiceSurfaceInfo;
|
||||
import emu.lunarcore.proto.ChessRogueNousQueryInfoOuterClass.ChessRogueNousQueryInfo;
|
||||
import emu.lunarcore.proto.ChessRogueQueryOuterClass.ChessRogueQuery;
|
||||
import emu.lunarcore.proto.ChessRogueQueryScRspOuterClass.ChessRogueQueryScRsp;
|
||||
import emu.lunarcore.server.packet.BasePacket;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
|
||||
public class PacketChessRogueQueryScRsp extends BasePacket {
|
||||
public PacketChessRogueQueryScRsp(Player player) {
|
||||
super(CmdId.ChessRogueQueryScRsp);
|
||||
|
||||
var data = ChessRogueQuery.newInstance();
|
||||
|
||||
for (var entry: GameData.getRogueNousMainStoryExcelMap().keySet()) {
|
||||
data.addMainStoryId(entry);
|
||||
}
|
||||
player.getChessRogueManager().getRogueDefaultDice().forEach((k, v) -> {
|
||||
var dice = ChessRogueNousDiceInfo.newInstance()
|
||||
.setDiceBranchId(k);
|
||||
var index = 0;
|
||||
for (Integer d : v) {
|
||||
dice.addDiceSurface(ChessRogueNousDiceSurfaceInfo.newInstance()
|
||||
.setIndex(++index)
|
||||
.setDiceId(d));
|
||||
}
|
||||
data.addDiceInfo(dice);
|
||||
});
|
||||
var proto = ChessRogueQueryScRsp.newInstance()
|
||||
.setRogueNous(ChessRogueNousQueryInfo.newInstance()
|
||||
.setQueryInfo(data));
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package emu.lunarcore.server.packet.send;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.proto.ChessRogueNousMainStoryInfoOuterClass.ChessRogueNousMainStoryInfo;
|
||||
import emu.lunarcore.proto.ChessRogueNousSubStoryInfoOuterClass.ChessRogueNousSubStoryInfo;
|
||||
import emu.lunarcore.proto.GetChessRogueNousStoryInfoScRspOuterClass.GetChessRogueNousStoryInfoScRsp;
|
||||
import emu.lunarcore.server.packet.BasePacket;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
|
||||
public class PacketGetChessRogueNousStoryInfoScRsp extends BasePacket {
|
||||
public PacketGetChessRogueNousStoryInfoScRsp() {
|
||||
super(CmdId.GetChessRogueNousStoryInfoScRsp);
|
||||
|
||||
var proto = GetChessRogueNousStoryInfoScRsp.newInstance();
|
||||
|
||||
for (var entry : GameData.getRogueNousMainStoryExcelMap().keySet()) {
|
||||
proto.addMainStoryInfo(ChessRogueNousMainStoryInfo.newInstance()
|
||||
.setStoryId(entry)
|
||||
.setStatus(2));
|
||||
}
|
||||
|
||||
for (var entry : GameData.getRogueNousSubStoryExcelMap().keySet()) {
|
||||
proto.addSubStoryInfo(ChessRogueNousSubStoryInfo.newInstance()
|
||||
.setSubStoryId(entry));
|
||||
}
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user