Updated zone check method.

This commit is contained in:
MobiusDev 2018-04-11 08:56:04 +00:00
parent 332b5b2e23
commit db9a123081
4 changed files with 23 additions and 24 deletions

View File

@ -152,7 +152,7 @@ public abstract class L2ZoneRespawn extends L2ZoneType
return getSpawnLoc();
}
public final Location getBanishSpawnLoc()
public Location getBanishSpawnLoc()
{
if (_banishSpawnLocs != null)
{

View File

@ -46,7 +46,7 @@ public abstract class L2ZoneType extends ListenersContainer
private final int _id;
protected L2ZoneForm _zone;
protected Map<Integer, L2Character> _characterList;
protected Map<Integer, L2Character> _characterList = new ConcurrentHashMap<>();
/** Parameters to affect specific characters */
private boolean _checkAffected = false;
@ -66,7 +66,6 @@ public abstract class L2ZoneType extends ListenersContainer
protected L2ZoneType(int id)
{
_id = id;
_characterList = new ConcurrentHashMap<>();
_minLvl = 0;
_maxLvl = 0xFF;
@ -359,7 +358,7 @@ public abstract class L2ZoneType extends ListenersContainer
*/
public boolean isInsideZone(int x, int y)
{
return _zone.isInsideZone(x, y, _zone.getHighZ());
return isInsideZone(x, y, _zone.getHighZ());
}
/**
@ -369,7 +368,7 @@ public abstract class L2ZoneType extends ListenersContainer
*/
public boolean isInsideZone(ILocational loc)
{
return _zone.isInsideZone(loc.getX(), loc.getY(), loc.getZ());
return isInsideZone(loc.getX(), loc.getY(), loc.getZ());
}
/**
@ -396,24 +395,19 @@ public abstract class L2ZoneType extends ListenersContainer
public void revalidateInZone(L2Character character)
{
// If the character can't be affected by this zone return
if (_checkAffected && !isAffected(character))
{
return;
}
// If the object is inside the zone...
if (isInsideZone(character))
{
// Was the character not yet inside this zone?
if (!_characterList.containsKey(character.getObjectId()))
// If the character can't be affected by this zone return
if (_checkAffected && !isAffected(character))
{
return;
}
if (_characterList.putIfAbsent(character.getObjectId(), character) == null)
{
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneEnter(character, this), this);
// Register player.
_characterList.put(character.getObjectId(), character);
// Notify Zone implementation.
onEnter(character);
}

View File

@ -47,11 +47,10 @@ public class TaskZoneSettings extends AbstractZoneSettings
@Override
public void clear()
{
if (_task == null)
if (_task != null)
{
return;
_task.cancel(true);
_task = null;
}
_task.cancel(true);
_task = null;
}
}

View File

@ -38,7 +38,10 @@ public class L2ArenaZone extends L2ZoneType
{
if (character instanceof L2PcInstance)
{
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
if (!character.isInsideZone(ZoneId.PVP))
{
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
}
}
character.setInsideZone(ZoneId.PVP, true);
@ -47,9 +50,12 @@ public class L2ArenaZone extends L2ZoneType
@Override
protected void onExit(L2Character character)
{
if ((character instanceof L2PcInstance) && !character.isInsideZone(ZoneId.PVP))
if (character instanceof L2PcInstance)
{
character.sendPacket(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
if (!character.isInsideZone(ZoneId.PVP))
{
character.sendPacket(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
}
}
character.setInsideZone(ZoneId.PVP, false);