Fixed olympiad zone broadcast.
Contributed by Sahar.
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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();
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user