diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/OlympiadObservation.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/OlympiadObservation.java index 49b96e0582..86c7d34adf 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/OlympiadObservation.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/OlympiadObservation.java @@ -92,8 +92,8 @@ public class OlympiadObservation implements IBypassHandler final OlympiadGameTask nextArena = OlympiadGameManager.getInstance().getOlympiadTask(arenaId); if (nextArena != null) { - player.enterOlympiadObserverMode(nextArena.getZone().getSpectatorSpawns().get(0), arenaId); - player.setInstanceId(OlympiadGameManager.getInstance().getOlympiadTask(arenaId).getZone().getInstanceId()); + final int instanceId = OlympiadGameManager.getInstance().getOlympiadTask(arenaId).getZone().getInstanceId(); + player.enterOlympiadObserverMode(nextArena.getZone().getSpectatorSpawns().get(0), arenaId, instanceId); } } return true; diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 453013add4..6faa5f07b1 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -9595,7 +9595,7 @@ public class PlayerInstance extends Playable _lastLoc.setXYZ(0, 0, 0); } - public void enterOlympiadObserverMode(Location loc, int id) + public void enterOlympiadObserverMode(Location loc, int id, int instanceId) { if (hasSummon()) { @@ -9634,7 +9634,7 @@ public class PlayerInstance extends Playable setTarget(null); setIsInvul(true); setInvisible(true); - teleToLocation(loc, false); + teleToLocation(loc, instanceId, 0); sendPacket(new ExOlympiadMode(3)); broadcastUserInfo(); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneType.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneType.java index 284b95efc5..3c0b0ae5f5 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneType.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneType.java @@ -49,7 +49,7 @@ public abstract class ZoneType extends ListenersContainer protected Map _characterList = new ConcurrentHashMap<>(); /** Parameters to affect specific characters */ - private boolean _checkAffected = false; + protected boolean _checkAffected = false; private String _name = null; private int _minLvl; private int _maxLvl; @@ -196,7 +196,7 @@ public abstract class ZoneType extends ListenersContainer * @param creature the player to verify. * @return {@code true} if the given character is affected by this zone, {@code false} otherwise. */ - private boolean isAffected(Creature creature) + protected boolean isAffected(Creature creature) { // Check instance if (_instanceTemplateId > 0) diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/type/OlympiadStadiumZone.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/type/OlympiadStadiumZone.java index da266e3c17..c96987016a 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/type/OlympiadStadiumZone.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/type/OlympiadStadiumZone.java @@ -57,6 +57,8 @@ public class OlympiadStadiumZone extends ZoneRespawn settings = new Settings(); } setSettings(settings); + + _checkAffected = true; } public class Settings extends AbstractZoneSettings @@ -144,7 +146,7 @@ public class OlympiadStadiumZone extends ZoneRespawn final ExOlympiadUserInfo packet = new ExOlympiadUserInfo(player); for (PlayerInstance target : getPlayersInside()) { - if ((target != null) && (target.inObserverMode() || (target.getOlympiadSide() != player.getOlympiadSide()))) + if ((target != null) && (target.inObserverMode() || (target.getOlympiadSide() != player.getOlympiadSide())) && (target.getInstanceId() == player.getInstanceId())) { target.sendPacket(packet); } @@ -153,15 +155,43 @@ public class OlympiadStadiumZone extends ZoneRespawn public void broadcastPacketToObservers(IClientOutgoingPacket packet) { - for (Creature creature : getCharactersInside()) + for (PlayerInstance creature : getPlayersInside()) { - if ((creature != null) && creature.isPlayer() && creature.getActingPlayer().inObserverMode()) + if ((creature != null) && creature.inObserverMode() && (creature.getInstanceId() == getInstanceId())) { creature.sendPacket(packet); } } } + @Override + public void broadcastPacket(IClientOutgoingPacket packet) + { + for (PlayerInstance creature : getPlayersInside()) + { + if ((creature != null) && (creature.getInstanceId() == getInstanceId())) + { + creature.sendPacket(packet); + } + } + } + + @Override + protected boolean isAffected(Creature creature) + { + if (super.isAffected(creature)) + { + if (creature.getInstanceId() != getInstanceId()) + { + return false; + } + + return true; + } + + return false; + } + @Override protected final void onEnter(Creature creature) { @@ -230,6 +260,10 @@ public class OlympiadStadiumZone extends ZoneRespawn { continue; } + if (creature.getInstanceId() != getInstanceId()) + { + continue; + } if (battleStarted) {