Fixed olympiad zone broadcast.

Contributed by Sahar.
This commit is contained in:
MobiusDevelopment
2019-09-30 00:36:18 +00:00
parent 091897f64b
commit 2ffca1188e
4 changed files with 43 additions and 9 deletions

View File

@@ -92,8 +92,8 @@ public class OlympiadObservation implements IBypassHandler
final OlympiadGameTask nextArena = OlympiadGameManager.getInstance().getOlympiadTask(arenaId); final OlympiadGameTask nextArena = OlympiadGameManager.getInstance().getOlympiadTask(arenaId);
if (nextArena != null) if (nextArena != null)
{ {
player.enterOlympiadObserverMode(nextArena.getZone().getSpectatorSpawns().get(0), arenaId); final int instanceId = OlympiadGameManager.getInstance().getOlympiadTask(arenaId).getZone().getInstanceId();
player.setInstanceId(OlympiadGameManager.getInstance().getOlympiadTask(arenaId).getZone().getInstanceId()); player.enterOlympiadObserverMode(nextArena.getZone().getSpectatorSpawns().get(0), arenaId, instanceId);
} }
} }
return true; return true;

View File

@@ -9595,7 +9595,7 @@ public class PlayerInstance extends Playable
_lastLoc.setXYZ(0, 0, 0); _lastLoc.setXYZ(0, 0, 0);
} }
public void enterOlympiadObserverMode(Location loc, int id) public void enterOlympiadObserverMode(Location loc, int id, int instanceId)
{ {
if (hasSummon()) if (hasSummon())
{ {
@@ -9634,7 +9634,7 @@ public class PlayerInstance extends Playable
setTarget(null); setTarget(null);
setIsInvul(true); setIsInvul(true);
setInvisible(true); setInvisible(true);
teleToLocation(loc, false); teleToLocation(loc, instanceId, 0);
sendPacket(new ExOlympiadMode(3)); sendPacket(new ExOlympiadMode(3));
broadcastUserInfo(); broadcastUserInfo();

View File

@@ -49,7 +49,7 @@ public abstract class ZoneType extends ListenersContainer
protected Map<Integer, Creature> _characterList = new ConcurrentHashMap<>(); protected Map<Integer, Creature> _characterList = new ConcurrentHashMap<>();
/** Parameters to affect specific characters */ /** Parameters to affect specific characters */
private boolean _checkAffected = false; protected boolean _checkAffected = false;
private String _name = null; private String _name = null;
private int _minLvl; private int _minLvl;
private int _maxLvl; private int _maxLvl;
@@ -196,7 +196,7 @@ public abstract class ZoneType extends ListenersContainer
* @param creature the player to verify. * @param creature the player to verify.
* @return {@code true} if the given character is affected by this zone, {@code false} otherwise. * @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 // Check instance
if (_instanceTemplateId > 0) if (_instanceTemplateId > 0)

View File

@@ -57,6 +57,8 @@ public class OlympiadStadiumZone extends ZoneRespawn
settings = new Settings(); settings = new Settings();
} }
setSettings(settings); setSettings(settings);
_checkAffected = true;
} }
public class Settings extends AbstractZoneSettings public class Settings extends AbstractZoneSettings
@@ -144,7 +146,7 @@ public class OlympiadStadiumZone extends ZoneRespawn
final ExOlympiadUserInfo packet = new ExOlympiadUserInfo(player); final ExOlympiadUserInfo packet = new ExOlympiadUserInfo(player);
for (PlayerInstance target : getPlayersInside()) 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); target.sendPacket(packet);
} }
@@ -153,15 +155,43 @@ public class OlympiadStadiumZone extends ZoneRespawn
public void broadcastPacketToObservers(IClientOutgoingPacket packet) 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); 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 @Override
protected final void onEnter(Creature creature) protected final void onEnter(Creature creature)
{ {
@@ -230,6 +260,10 @@ public class OlympiadStadiumZone extends ZoneRespawn
{ {
continue; continue;
} }
if (creature.getInstanceId() != getInstanceId())
{
continue;
}
if (battleStarted) if (battleStarted)
{ {