From a79b81de7b0f20398de15852c0e33b9529161fcf Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 31 Oct 2020 10:30:21 +0000 Subject: [PATCH] Updated raidboss status packets. --- .../gameserver/enums/RaidBossStatus.java | 5 ++- .../RequestRaidBossSpawnInfo.java | 42 +++++++++++++------ .../raidbossinfo/ExRaidBossSpawnInfo.java | 17 ++++---- .../gameserver/enums/RaidBossStatus.java | 5 ++- .../RequestRaidBossSpawnInfo.java | 42 +++++++++++++------ .../raidbossinfo/ExRaidBossSpawnInfo.java | 17 ++++---- 6 files changed, 84 insertions(+), 44 deletions(-) diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java index a4e414bac8..689a0f93c3 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java @@ -21,7 +21,8 @@ package org.l2jmobius.gameserver.enums; */ public enum RaidBossStatus { - ALIVE, DEAD, - UNDEFINED + ALIVE, + COMBAT, + UNDEFINED, } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java index 2f64b979bf..bd5ff153d5 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java @@ -16,13 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.raidbossinfo; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.gameserver.enums.RaidBossStatus; import org.l2jmobius.gameserver.instancemanager.DBSpawnManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.model.actor.instance.GrandBossInstance; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.raidbossinfo.ExRaidBossSpawnInfo; @@ -32,7 +32,7 @@ import org.l2jmobius.gameserver.network.serverpackets.raidbossinfo.ExRaidBossSpa */ public class RequestRaidBossSpawnInfo implements IClientIncomingPacket { - private final List _bossIds = new ArrayList<>(); + private final Map _statuses = new HashMap<>(); @Override public boolean read(GameClient client, PacketReader packet) @@ -41,18 +41,34 @@ public class RequestRaidBossSpawnInfo implements IClientIncomingPacket for (int i = 0; i < count; i++) { final int bossId = packet.readD(); - if (DBSpawnManager.getInstance().getNpcStatusId(bossId) == RaidBossStatus.ALIVE) + final GrandBossInstance boss = GrandBossManager.getInstance().getBoss(bossId); + if (boss == null) { - _bossIds.add(bossId); + final int status = DBSpawnManager.getInstance().getNpcStatusId(bossId).ordinal(); + if (status != 3) + { + _statuses.put(bossId, status); + } + else + { + LOGGER.warning("Could not find spawn info for boss " + bossId + "."); + } } - else if (GrandBossManager.getInstance().getBossStatus(bossId) == 0) + else { - _bossIds.add(bossId); + if (boss.isDead() || !boss.isSpawned()) + { + _statuses.put(bossId, 0); + } + else if (boss.isInCombat()) + { + _statuses.put(bossId, 2); + } + else + { + _statuses.put(bossId, 1); + } } - /* - * else { String message = "Could not find spawn info for boss " + bossId; final NpcTemplate template = NpcData.getInstance().getTemplate(bossId); if (template != null) { message += " - " + template.getName() + "."; } else { message += " - NPC template not found."; } - * System.out.println(message); } - */ } return true; } @@ -60,6 +76,6 @@ public class RequestRaidBossSpawnInfo implements IClientIncomingPacket @Override public void run(GameClient client) { - client.sendPacket(new ExRaidBossSpawnInfo(_bossIds)); + client.sendPacket(new ExRaidBossSpawnInfo(_statuses)); } } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java index b23e9fa8a9..320140ace6 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java @@ -16,7 +16,8 @@ */ package org.l2jmobius.gameserver.network.serverpackets.raidbossinfo; -import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.network.OutgoingPackets; @@ -27,11 +28,11 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; */ public class ExRaidBossSpawnInfo implements IClientOutgoingPacket { - private final List _bossIds; + private final Map _statuses; - public ExRaidBossSpawnInfo(List bossIds) + public ExRaidBossSpawnInfo(Map statuses) { - _bossIds = bossIds; + _statuses = statuses; } @Override @@ -39,10 +40,12 @@ public class ExRaidBossSpawnInfo implements IClientOutgoingPacket { OutgoingPackets.EX_RAID_BOSS_SPAWN_INFO.writeId(packet); - packet.writeD(_bossIds.size()); // alive count - for (int id : _bossIds) // alive ids + packet.writeD(_statuses.size()); // count + for (Entry entry : _statuses.entrySet()) { - packet.writeD(id); + packet.writeD(entry.getKey()); + packet.writeD(entry.getValue()); + packet.writeD(0); } return true; } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java index a4e414bac8..689a0f93c3 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RaidBossStatus.java @@ -21,7 +21,8 @@ package org.l2jmobius.gameserver.enums; */ public enum RaidBossStatus { - ALIVE, DEAD, - UNDEFINED + ALIVE, + COMBAT, + UNDEFINED, } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java index 2f64b979bf..bd5ff153d5 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/raidbossinfo/RequestRaidBossSpawnInfo.java @@ -16,13 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.raidbossinfo; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.gameserver.enums.RaidBossStatus; import org.l2jmobius.gameserver.instancemanager.DBSpawnManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.model.actor.instance.GrandBossInstance; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.raidbossinfo.ExRaidBossSpawnInfo; @@ -32,7 +32,7 @@ import org.l2jmobius.gameserver.network.serverpackets.raidbossinfo.ExRaidBossSpa */ public class RequestRaidBossSpawnInfo implements IClientIncomingPacket { - private final List _bossIds = new ArrayList<>(); + private final Map _statuses = new HashMap<>(); @Override public boolean read(GameClient client, PacketReader packet) @@ -41,18 +41,34 @@ public class RequestRaidBossSpawnInfo implements IClientIncomingPacket for (int i = 0; i < count; i++) { final int bossId = packet.readD(); - if (DBSpawnManager.getInstance().getNpcStatusId(bossId) == RaidBossStatus.ALIVE) + final GrandBossInstance boss = GrandBossManager.getInstance().getBoss(bossId); + if (boss == null) { - _bossIds.add(bossId); + final int status = DBSpawnManager.getInstance().getNpcStatusId(bossId).ordinal(); + if (status != 3) + { + _statuses.put(bossId, status); + } + else + { + LOGGER.warning("Could not find spawn info for boss " + bossId + "."); + } } - else if (GrandBossManager.getInstance().getBossStatus(bossId) == 0) + else { - _bossIds.add(bossId); + if (boss.isDead() || !boss.isSpawned()) + { + _statuses.put(bossId, 0); + } + else if (boss.isInCombat()) + { + _statuses.put(bossId, 2); + } + else + { + _statuses.put(bossId, 1); + } } - /* - * else { String message = "Could not find spawn info for boss " + bossId; final NpcTemplate template = NpcData.getInstance().getTemplate(bossId); if (template != null) { message += " - " + template.getName() + "."; } else { message += " - NPC template not found."; } - * System.out.println(message); } - */ } return true; } @@ -60,6 +76,6 @@ public class RequestRaidBossSpawnInfo implements IClientIncomingPacket @Override public void run(GameClient client) { - client.sendPacket(new ExRaidBossSpawnInfo(_bossIds)); + client.sendPacket(new ExRaidBossSpawnInfo(_statuses)); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java index b23e9fa8a9..320140ace6 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/raidbossinfo/ExRaidBossSpawnInfo.java @@ -16,7 +16,8 @@ */ package org.l2jmobius.gameserver.network.serverpackets.raidbossinfo; -import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.network.OutgoingPackets; @@ -27,11 +28,11 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; */ public class ExRaidBossSpawnInfo implements IClientOutgoingPacket { - private final List _bossIds; + private final Map _statuses; - public ExRaidBossSpawnInfo(List bossIds) + public ExRaidBossSpawnInfo(Map statuses) { - _bossIds = bossIds; + _statuses = statuses; } @Override @@ -39,10 +40,12 @@ public class ExRaidBossSpawnInfo implements IClientOutgoingPacket { OutgoingPackets.EX_RAID_BOSS_SPAWN_INFO.writeId(packet); - packet.writeD(_bossIds.size()); // alive count - for (int id : _bossIds) // alive ids + packet.writeD(_statuses.size()); // count + for (Entry entry : _statuses.entrySet()) { - packet.writeD(id); + packet.writeD(entry.getKey()); + packet.writeD(entry.getValue()); + packet.writeD(0); } return true; }