Fix target order in battles

This commit is contained in:
Melledy
2023-10-27 12:11:22 -07:00
parent e26ced7169
commit e5ea2c9820
2 changed files with 11 additions and 13 deletions

View File

@@ -2,6 +2,7 @@ package emu.lunarcore.game.battle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import emu.lunarcore.data.GameData; import emu.lunarcore.data.GameData;
import emu.lunarcore.data.excel.CocoonExcel; import emu.lunarcore.data.excel.CocoonExcel;
@@ -22,15 +23,13 @@ import emu.lunarcore.server.packet.send.PacketSceneCastSkillScRsp;
import emu.lunarcore.server.packet.send.PacketStartCocoonStageScRsp; import emu.lunarcore.server.packet.send.PacketStartCocoonStageScRsp;
import emu.lunarcore.server.packet.send.PacketSyncLineupNotify; import emu.lunarcore.server.packet.send.PacketSyncLineupNotify;
import it.unimi.dsi.fastutil.ints.IntSet;
public class BattleService extends BaseGameService { public class BattleService extends BaseGameService {
public BattleService(GameServer server) { public BattleService(GameServer server) {
super(server); super(server);
} }
public void startBattle(Player player, int casterId, int attackedGroupId, boolean castedSkill, IntSet targetList) { public void startBattle(Player player, int casterId, int attackedGroupId, boolean castedSkill, Set<Integer> targets) {
// Sanity check to make sure player isnt in a battle // Sanity check to make sure player isnt in a battle
if (player.isInBattle()) { if (player.isInBattle()) {
player.sendPacket(new PacketSceneCastSkillScRsp()); player.sendPacket(new PacketSceneCastSkillScRsp());
@@ -44,7 +43,7 @@ public class BattleService extends BaseGameService {
// Check if attacker is the player or not // Check if attacker is the player or not
if (player.getScene().getAvatarEntityIds().contains(casterId)) { if (player.getScene().getAvatarEntityIds().contains(casterId)) {
// Player is the attacker // Player is the attacker
for (int entityId : targetList) { for (int entityId : targets) {
GameEntity entity = player.getScene().getEntities().get(entityId); GameEntity entity = player.getScene().getEntities().get(entityId);
if (entity != null) { if (entity != null) {
@@ -62,7 +61,7 @@ public class BattleService extends BaseGameService {
} }
// Add any assisting monsters from target list // Add any assisting monsters from target list
for (int entityId : targetList) { for (int entityId : targets) {
entity = player.getScene().getEntities().get(entityId); entity = player.getScene().getEntities().get(entityId);
if (entity != null) { if (entity != null) {

View File

@@ -1,5 +1,8 @@
package emu.lunarcore.server.packet.recv; package emu.lunarcore.server.packet.recv;
import java.util.LinkedHashSet;
import java.util.Set;
import emu.lunarcore.game.avatar.GameAvatar; import emu.lunarcore.game.avatar.GameAvatar;
import emu.lunarcore.game.battle.skills.MazeSkill; import emu.lunarcore.game.battle.skills.MazeSkill;
import emu.lunarcore.proto.SceneCastSkillCsReqOuterClass.SceneCastSkillCsReq; import emu.lunarcore.proto.SceneCastSkillCsReqOuterClass.SceneCastSkillCsReq;
@@ -10,13 +13,9 @@ import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketSceneCastSkillMpUpdateScNotify; import emu.lunarcore.server.packet.send.PacketSceneCastSkillMpUpdateScNotify;
import emu.lunarcore.server.packet.send.PacketSceneCastSkillScRsp; import emu.lunarcore.server.packet.send.PacketSceneCastSkillScRsp;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
@Opcodes(CmdId.SceneCastSkillCsReq) @Opcodes(CmdId.SceneCastSkillCsReq)
public class HandlerSceneCastSkillCsReq extends PacketHandler { public class HandlerSceneCastSkillCsReq extends PacketHandler {
@SuppressWarnings("deprecation")
@Override @Override
public void handle(GameSession session, byte[] header, byte[] data) throws Exception { public void handle(GameSession session, byte[] header, byte[] data) throws Exception {
var req = SceneCastSkillCsReq.parseFrom(data); var req = SceneCastSkillCsReq.parseFrom(data);
@@ -40,12 +39,12 @@ public class HandlerSceneCastSkillCsReq extends PacketHandler {
if (req.hasHitTargetIdList()) { if (req.hasHitTargetIdList()) {
// Create target list // Create target list
IntSet targetList = new IntOpenHashSet(); Set<Integer> targets = new LinkedHashSet<>();
req.getHitTargetIdList().forEach(targetList::add); req.getHitTargetIdList().forEach(targets::add);
req.getAssistMonsterIdList().forEach(targetList::add); req.getAssistMonsterIdList().forEach(targets::add);
// Start battle // Start battle
session.getServer().getBattleService().startBattle(session.getPlayer(), req.getCasterId(), req.getAttackedGroupId(), castedSkill, targetList); session.getServer().getBattleService().startBattle(session.getPlayer(), req.getCasterId(), req.getAttackedGroupId(), castedSkill, targets);
} else { } else {
session.send(new PacketSceneCastSkillScRsp(req.getAttackedGroupId())); session.send(new PacketSceneCastSkillScRsp(req.getAttackedGroupId()));
} }