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

View File

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

View File

@@ -49,7 +49,7 @@ public abstract class ZoneType extends ListenersContainer
protected Map<Integer, Creature> _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)

View File

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