fix some events (most events are available)

This commit is contained in:
Somebody
2024-02-03 21:50:03 +08:00
committed by Melledy
parent c079e17070
commit 4f49d996b1
60 changed files with 21255 additions and 15 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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