Code improvements.

This commit is contained in:
MobiusDev
2016-04-24 16:30:15 +00:00
parent 8bd51aba1c
commit 2dd14bef9b
860 changed files with 8865 additions and 17041 deletions

View File

@ -203,14 +203,7 @@ public abstract class L2ZoneType extends ListenersContainer
*/
private boolean isAffected(L2Character character)
{
// Check lvl
if ((character.getLevel() < _minLvl) || (character.getLevel() > _maxLvl))
{
return false;
}
// check obj class
if (!character.isInstanceTypes(_target))
if ((character.getLevel() < _minLvl) || (character.getLevel() > _maxLvl) || !character.isInstanceTypes(_target))
{
return false;
}
@ -388,12 +381,7 @@ public abstract class L2ZoneType extends ListenersContainer
{
// It will check if coords are within the zone if the given instanceId or
// the zone's _instanceId are in the multiverse or they match
if ((_instanceId == -1) || (instanceId == -1) || (_instanceId == instanceId))
{
return _zone.isInsideZone(x, y, z);
}
return false;
return ((_instanceId == -1) || (instanceId == -1) || (_instanceId == instanceId)) && _zone.isInsideZone(x, y, z);
}
/**
@ -419,12 +407,9 @@ public abstract class L2ZoneType extends ListenersContainer
public void revalidateInZone(L2Character character)
{
// If the character can't be affected by this zone return
if (_checkAffected)
if (_checkAffected && !isAffected(character))
{
if (!isAffected(character))
{
return;
}
return;
}
// If the object is inside the zone...

View File

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

View File

@ -64,9 +64,9 @@ public class ZoneCuboid extends L2ZoneForm
final int _x2 = _r.x + _r.width;
final int _y1 = _r.y;
final int _y2 = _r.y + _r.height;
double test, shortestDist = Math.pow(_x1 - x, 2) + Math.pow(_y1 - y, 2);
double test = Math.pow(_x1 - x, 2) + Math.pow(_y2 - y, 2);
double shortestDist = Math.pow(_x1 - x, 2) + Math.pow(_y1 - y, 2);
test = Math.pow(_x1 - x, 2) + Math.pow(_y2 - y, 2);
if (test < shortestDist)
{
shortestDist = test;

View File

@ -42,65 +42,19 @@ public class ZoneCylinder extends L2ZoneForm
@Override
public boolean isInsideZone(int x, int y, int z)
{
if (((Math.pow(_x - x, 2) + Math.pow(_y - y, 2)) > _radS) || (z < _z1) || (z > _z2))
{
return false;
}
return true;
return ((Math.pow(_x - x, 2) + Math.pow(_y - y, 2)) <= _radS) && (z >= _z1) && (z <= _z2);
}
@Override
public boolean intersectsRectangle(int ax1, int ax2, int ay1, int ay2)
{
// Circles point inside the rectangle?
if ((_x > ax1) && (_x < ax2) && (_y > ay1) && (_y < ay2))
{
return true;
}
// Any point of the rectangle intersecting the Circle?
if ((Math.pow(ax1 - _x, 2) + Math.pow(ay1 - _y, 2)) < _radS)
{
return true;
}
if ((Math.pow(ax1 - _x, 2) + Math.pow(ay2 - _y, 2)) < _radS)
{
return true;
}
if ((Math.pow(ax2 - _x, 2) + Math.pow(ay1 - _y, 2)) < _radS)
{
return true;
}
if ((Math.pow(ax2 - _x, 2) + Math.pow(ay2 - _y, 2)) < _radS)
{
return true;
}
// Collision on any side of the rectangle?
if ((_x > ax1) && (_x < ax2))
{
if (Math.abs(_y - ay2) < _rad)
{
return true;
}
if (Math.abs(_y - ay1) < _rad)
{
return true;
}
}
if ((_y > ay1) && (_y < ay2))
{
if (Math.abs(_x - ax2) < _rad)
{
return true;
}
if (Math.abs(_x - ax1) < _rad)
{
return true;
}
}
return false;
return ((_x > ax1) && (_x < ax2) && (_y > ay1) && (_y < ay2)) || //
((Math.pow(ax1 - _x, 2) + Math.pow(ay1 - _y, 2)) < _radS) || //
((Math.pow(ax1 - _x, 2) + Math.pow(ay2 - _y, 2)) < _radS) || //
((Math.pow(ax2 - _x, 2) + Math.pow(ay1 - _y, 2)) < _radS) || //
((Math.pow(ax2 - _x, 2) + Math.pow(ay2 - _y, 2)) < _radS) || //
((_x > ax1) && (_x < ax2) && ((Math.abs(_y - ay2) < _rad) || (Math.abs(_y - ay1) < _rad))) || //
((_y > ay1) && (_y < ay2) && ((Math.abs(_x - ax2) < _rad) || (Math.abs(_x - ax1) < _rad)));
}
@Override
@ -129,19 +83,17 @@ public class ZoneCylinder extends L2ZoneForm
final double angle = (2 * Math.PI) / count;
for (int i = 0; i < count; i++)
{
final int x = (int) (Math.cos(angle * i) * _rad);
final int y = (int) (Math.sin(angle * i) * _rad);
dropDebugItem(Inventory.ADENA_ID, 1, _x + x, _y + y, z);
dropDebugItem(Inventory.ADENA_ID, 1, _x + (int) (Math.cos(angle * i) * _rad), _y + (int) (Math.sin(angle * i) * _rad), z);
}
}
@Override
public int[] getRandomPoint()
{
double x, y, q, r;
double x, y;
final double q = Rnd.get() * 2 * Math.PI;
final double r = Math.sqrt(Rnd.get());
q = Rnd.get() * 2 * Math.PI;
r = Math.sqrt(Rnd.get());
x = (_rad * r * Math.cos(q)) + _x;
y = (_rad * r * Math.sin(q)) + _y;

View File

@ -94,25 +94,15 @@ public class ZoneNPoly extends L2ZoneForm
@Override
public void visualizeZone(int z)
{
final int[] _x = _p.xpoints;
final int[] _y = _p.ypoints;
for (int i = 0; i < _p.npoints; i++)
{
int nextIndex = i + 1;
// ending point to first one
if (nextIndex == _x.length)
{
nextIndex = 0;
}
final int vx = _x[nextIndex] - _x[i];
final int vy = _y[nextIndex] - _y[i];
float lenght = (float) Math.sqrt((vx * vx) + (vy * vy));
lenght /= STEP;
final int nextIndex = (i + 1) == _p.xpoints.length ? 0 : i + 1;
final int vx = _p.xpoints[nextIndex] - _p.xpoints[i];
final int vy = _p.ypoints[nextIndex] - _p.ypoints[i];
final float lenght = (float) Math.sqrt((vx * vx) + (vy * vy)) / STEP;
for (int o = 1; o <= lenght; o++)
{
final float k = o / lenght;
dropDebugItem(Inventory.ADENA_ID, 1, (int) (_x[i] + (k * vx)), (int) (_y[i] + (k * vy)), z);
dropDebugItem(Inventory.ADENA_ID, 1, (int) (_p.xpoints[i] + ((o / lenght) * vx)), (int) (_p.ypoints[i] + ((o / lenght) * vy)), z);
}
}
}

View File

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

View File

@ -94,11 +94,7 @@ public class L2BossZone extends L2ZoneType
{
super(id);
_oustLoc = new int[3];
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
if (settings == null)
{
settings = new Settings();
}
final AbstractZoneSettings settings = ZoneManager.getSettings(getName()) == null ? new Settings() : ZoneManager.getSettings(getName());
setSettings(settings);
GrandBossManager.getInstance().addZone(this);
}
@ -166,8 +162,7 @@ public class L2BossZone extends L2ZoneType
// with legal entries, do nothing.
if (expirationTime == null) // legal null expirationTime entries
{
final long serverStartTime = GameServer.dateTimeServerStarted.getTimeInMillis();
if ((serverStartTime > (System.currentTimeMillis() - _timeInvade)))
if ((GameServer.dateTimeServerStarted.getTimeInMillis() > (System.currentTimeMillis() - _timeInvade)))
{
return;
}
@ -250,41 +245,38 @@ public class L2BossZone extends L2ZoneType
getSettings().getPlayerAllowedReEntryTimes().remove(player.getObjectId());
}
}
if (character.isPlayable())
if (character.isPlayable() && (getCharactersInside() != null) && !getCharactersInside().isEmpty())
{
if ((getCharactersInside() != null) && !getCharactersInside().isEmpty())
getSettings().getRaidList().clear();
int count = 0;
for (L2Character obj : getCharactersInside())
{
getSettings().getRaidList().clear();
int count = 0;
for (L2Character obj : getCharactersInside())
if (obj == null)
{
if (obj == null)
continue;
}
if (obj.isPlayable())
{
count++;
}
else if (obj.isAttackable() && obj.isRaid())
{
getSettings().getRaidList().add(obj);
}
}
// if inside zone isnt any player, force all boss instance return to its spawn points
if ((count == 0) && !getSettings().getRaidList().isEmpty())
{
for (int i = 0; i < getSettings().getRaidList().size(); i++)
{
final L2Attackable raid = (L2Attackable) getSettings().getRaidList().get(i);
if ((raid == null) || (raid.getSpawn() == null) || raid.isDead())
{
continue;
}
if (obj.isPlayable())
if (!raid.isInsideRadius(raid.getSpawn(), 150, false, false))
{
count++;
}
else if (obj.isAttackable() && obj.isRaid())
{
getSettings().getRaidList().add(obj);
}
}
// if inside zone isnt any player, force all boss instance return to its spawn points
if ((count == 0) && !getSettings().getRaidList().isEmpty())
{
for (int i = 0; i < getSettings().getRaidList().size(); i++)
{
final L2Attackable raid = (L2Attackable) getSettings().getRaidList().get(i);
if ((raid == null) || (raid.getSpawn() == null) || raid.isDead())
{
continue;
}
if (!raid.isInsideRadius(raid.getSpawn(), 150, false, false))
{
raid.returnHome();
}
raid.returnHome();
}
}
}
@ -327,26 +319,19 @@ public class L2BossZone extends L2ZoneType
public boolean isPlayerAllowed(L2PcInstance player)
{
if (player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS))
if (player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS) || getSettings().getPlayersAllowed().contains(player.getObjectId()))
{
return true;
}
else if (getSettings().getPlayersAllowed().contains(player.getObjectId()))
if ((_oustLoc[0] != 0) && (_oustLoc[1] != 0) && (_oustLoc[2] != 0))
{
return true;
player.teleToLocation(_oustLoc[0], _oustLoc[1], _oustLoc[2]);
}
else
{
if ((_oustLoc[0] != 0) && (_oustLoc[1] != 0) && (_oustLoc[2] != 0))
{
player.teleToLocation(_oustLoc[0], _oustLoc[1], _oustLoc[2]);
}
else
{
player.teleToLocation(TeleportWhereType.TOWN);
}
return false;
player.teleToLocation(TeleportWhereType.TOWN);
}
return false;
}
/**
@ -413,23 +398,25 @@ public class L2BossZone extends L2ZoneType
*/
public void allowPlayerEntry(L2PcInstance player, int durationInSec)
{
if (!player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS))
if (player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS))
{
if (!getSettings().getPlayersAllowed().contains(player.getObjectId()))
{
getSettings().getPlayersAllowed().add(player.getObjectId());
}
getSettings().getPlayerAllowedReEntryTimes().put(player.getObjectId(), System.currentTimeMillis() + (durationInSec * 1000));
return;
}
if (!getSettings().getPlayersAllowed().contains(player.getObjectId()))
{
getSettings().getPlayersAllowed().add(player.getObjectId());
}
getSettings().getPlayerAllowedReEntryTimes().put(player.getObjectId(), System.currentTimeMillis() + (durationInSec * 1000));
}
public void removePlayer(L2PcInstance player)
{
if (!player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS))
if (player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS))
{
getSettings().getPlayersAllowed().remove(Integer.valueOf(player.getObjectId()));
getSettings().getPlayerAllowedReEntryTimes().remove(player.getObjectId());
return;
}
getSettings().getPlayersAllowed().remove(Integer.valueOf(player.getObjectId()));
getSettings().getPlayerAllowedReEntryTimes().remove(player.getObjectId());
}
public void updateKnownList(L2Npc npc)

View File

@ -60,21 +60,19 @@ public class L2ClanHallZone extends L2ResidenceZone
@Override
protected void onEnter(L2Character character)
{
if (character.isPlayer())
if (!character.isPlayer())
{
// Set as in clan hall
character.setInsideZone(ZoneId.CLAN_HALL, true);
final AuctionableHall clanHall = ClanHallManager.getInstance().getAuctionableHallById(getResidenceId());
if (clanHall == null)
{
return;
}
// Send decoration packet
final AgitDecoInfo deco = new AgitDecoInfo(clanHall);
character.sendPacket(deco);
return;
}
// Set as in clan hall
character.setInsideZone(ZoneId.CLAN_HALL, true);
final AuctionableHall clanHall = ClanHallManager.getInstance().getAuctionableHallById(getResidenceId());
if (clanHall == null)
{
return;
}
// Send decoration packet
character.sendPacket(new AgitDecoInfo(clanHall));
}
@Override

View File

@ -53,32 +53,34 @@ public class L2ConditionZone extends L2ZoneType
@Override
protected void onEnter(L2Character character)
{
if (character.isPlayer())
if (!character.isPlayer())
{
if (NO_BOOKMARK)
{
character.setInsideZone(ZoneId.NO_BOOKMARK, true);
}
if (NO_ITEM_DROP)
{
character.setInsideZone(ZoneId.NO_ITEM_DROP, true);
}
return;
}
if (NO_BOOKMARK)
{
character.setInsideZone(ZoneId.NO_BOOKMARK, true);
}
if (NO_ITEM_DROP)
{
character.setInsideZone(ZoneId.NO_ITEM_DROP, true);
}
}
@Override
protected void onExit(L2Character character)
{
if (character.isPlayer())
if (!character.isPlayer())
{
if (NO_BOOKMARK)
{
character.setInsideZone(ZoneId.NO_BOOKMARK, false);
}
if (NO_ITEM_DROP)
{
character.setInsideZone(ZoneId.NO_ITEM_DROP, false);
}
return;
}
if (NO_BOOKMARK)
{
character.setInsideZone(ZoneId.NO_BOOKMARK, false);
}
if (NO_ITEM_DROP)
{
character.setInsideZone(ZoneId.NO_ITEM_DROP, false);
}
}
}

View File

@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Castle;
import com.l2jmobius.gameserver.model.stats.Stats;
import com.l2jmobius.gameserver.model.zone.AbstractZoneSettings;
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
import com.l2jmobius.gameserver.model.zone.TaskZoneSettings;
@ -60,12 +59,7 @@ public class L2DamageZone extends L2ZoneType
_castle = null;
setTargetType(InstanceType.L2Playable); // default only playabale
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
if (settings == null)
{
settings = new TaskZoneSettings();
}
setSettings(settings);
setSettings((ZoneManager.getSettings(getName()) == null ? new TaskZoneSettings() : ZoneManager.getSettings(getName())));
}
@Override
@ -106,23 +100,22 @@ public class L2DamageZone extends L2ZoneType
@Override
protected void onEnter(L2Character character)
{
if ((getSettings().getTask() == null) && ((_damageHPPerSec != 0) || (_damageMPPerSec != 0)))
if ((getSettings().getTask() != null) || ((_damageHPPerSec == 0) && (_damageMPPerSec == 0)))
{
final L2PcInstance player = character.getActingPlayer();
if (getCastle() != null) // Castle zone
return;
}
final L2PcInstance player = character.getActingPlayer();
if ((getCastle() != null) && !(getCastle().getSiege().isInProgress() && (player != null) && (player.getSiegeState() != 2)))
{
return;
}
synchronized (this)
{
if (getSettings().getTask() == null)
{
if (!(getCastle().getSiege().isInProgress() && (player != null) && (player.getSiegeState() != 2))) // Siege and no defender
{
return;
}
}
synchronized (this)
{
if (getSettings().getTask() == null)
{
getSettings().setTask(ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ApplyDamage(this), _startTask, _reuseTask));
}
getSettings().setTask(ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ApplyDamage(this), _startTask, _reuseTask));
}
}
}

View File

@ -41,11 +41,7 @@ public class L2DynamicZone extends L2ZoneType
_region = region;
_owner = owner;
_skill = skill;
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
if (settings == null)
{
settings = new TaskZoneSettings();
}
final AbstractZoneSettings settings = ZoneManager.getSettings(getName()) == null ? new TaskZoneSettings() : ZoneManager.getSettings(getName());
setSettings(settings);
getSettings().setTask(ThreadPoolManager.getInstance().scheduleGeneral(() -> remove(), skill.getAbnormalTime() * 1000));

View File

@ -26,7 +26,6 @@ import com.l2jmobius.gameserver.enums.InstanceType;
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.zone.AbstractZoneSettings;
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
import com.l2jmobius.gameserver.model.zone.TaskZoneSettings;
import com.l2jmobius.gameserver.model.zone.ZoneId;
@ -56,12 +55,7 @@ public class L2EffectZone extends L2ZoneType
setTargetType(InstanceType.L2Playable); // default only playabale
_bypassConditions = false;
_isShowDangerIcon = true;
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
if (settings == null)
{
settings = new TaskZoneSettings();
}
setSettings(settings);
setSettings((ZoneManager.getSettings(getName()) == null ? new TaskZoneSettings() : ZoneManager.getSettings(getName())));
}
@Override
@ -133,28 +127,27 @@ public class L2EffectZone extends L2ZoneType
@Override
protected void onEnter(L2Character character)
{
if (_skills != null)
if ((_skills != null) && (getSettings().getTask() == null))
{
if (getSettings().getTask() == null)
synchronized (this)
{
synchronized (this)
if (getSettings().getTask() == null)
{
if (getSettings().getTask() == null)
{
getSettings().setTask(ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ApplySkill(), _initialDelay, _reuse));
}
getSettings().setTask(ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ApplySkill(), _initialDelay, _reuse));
}
}
}
if (character.isPlayer())
if (!character.isPlayer())
{
character.setInsideZone(ZoneId.ALTERED, true);
if (_isShowDangerIcon)
{
character.setInsideZone(ZoneId.DANGER_AREA, true);
character.sendPacket(new EtcStatusUpdate(character.getActingPlayer()));
}
return;
}
character.setInsideZone(ZoneId.ALTERED, true);
if (!_isShowDangerIcon)
{
return;
}
character.setInsideZone(ZoneId.DANGER_AREA, true);
character.sendPacket(new EtcStatusUpdate(character.getActingPlayer()));
}
@Override
@ -227,11 +220,7 @@ public class L2EffectZone extends L2ZoneType
public int getSkillLevel(int skillId)
{
if ((_skills == null) || !_skills.containsKey(skillId))
{
return 0;
}
return _skills.get(skillId);
return (_skills == null) || !_skills.containsKey(skillId) ? 0 : _skills.get(skillId);
}
private final class ApplySkill implements Runnable
@ -251,20 +240,14 @@ public class L2EffectZone extends L2ZoneType
{
for (L2Character temp : getCharactersInside())
{
if ((temp != null) && !temp.isDead())
if ((temp != null) && !temp.isDead() && (Rnd.get(100) < getChance()))
{
if (Rnd.get(100) < getChance())
for (Entry<Integer, Integer> e : _skills.entrySet())
{
for (Entry<Integer, Integer> e : _skills.entrySet())
final Skill skill = getSkill(e.getKey(), e.getValue());
if ((skill != null) && (_bypassConditions || skill.checkCondition(temp, temp, false)) && !temp.isAffectedBySkill(e.getKey()))
{
final Skill skill = getSkill(e.getKey(), e.getValue());
if ((skill != null) && (_bypassConditions || skill.checkCondition(temp, temp, false)))
{
if (!temp.isAffectedBySkill(e.getKey()))
{
skill.applyEffects(temp, temp);
}
}
skill.applyEffects(temp, temp);
}
}
}

View File

@ -52,13 +52,9 @@ public class L2FishingZone extends L2ZoneType
character.setInsideZone(ZoneId.FISHING, true);
}
if (character.isPlayer())
if (character.isPlayer() && !_task.containsKey(((L2PcInstance) character).getObjectId()))
{
final L2PcInstance plr = (L2PcInstance) character;
if (!_task.containsKey(plr.getObjectId()))
{
_task.put(plr.getObjectId(), ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new fishingAvailable(plr), 500, 2000));
}
_task.put(((L2PcInstance) character).getObjectId(), ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new fishingAvailable((L2PcInstance) character), 500, 2000));
}
}

View File

@ -43,47 +43,47 @@ public class L2JailZone extends L2ZoneType
@Override
protected void onEnter(L2Character character)
{
if (character.isPlayer())
if (!character.isPlayer())
{
character.setInsideZone(ZoneId.JAIL, true);
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
if (Config.JAIL_IS_PVP)
{
character.setInsideZone(ZoneId.PVP, true);
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
}
if (Config.JAIL_DISABLE_TRANSACTION)
{
character.setInsideZone(ZoneId.NO_STORE, true);
}
return;
}
character.setInsideZone(ZoneId.JAIL, true);
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
if (Config.JAIL_IS_PVP)
{
character.setInsideZone(ZoneId.PVP, true);
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
}
if (Config.JAIL_DISABLE_TRANSACTION)
{
character.setInsideZone(ZoneId.NO_STORE, true);
}
}
@Override
protected void onExit(L2Character character)
{
if (character.isPlayer())
if (!character.isPlayer())
{
final L2PcInstance player = character.getActingPlayer();
player.setInsideZone(ZoneId.JAIL, false);
player.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
if (Config.JAIL_IS_PVP)
{
character.setInsideZone(ZoneId.PVP, false);
character.sendPacket(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
}
if (player.isJailed())
{
// when a player wants to exit jail even if he is still jailed, teleport him back to jail
ThreadPoolManager.getInstance().scheduleGeneral(new TeleportTask(player, JAIL_IN_LOC), 2000);
character.sendMessage("You cannot cheat your way out of here. You must wait until your jail time is over.");
}
if (Config.JAIL_DISABLE_TRANSACTION)
{
character.setInsideZone(ZoneId.NO_STORE, false);
}
return;
}
final L2PcInstance player = character.getActingPlayer();
player.setInsideZone(ZoneId.JAIL, false);
player.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
if (Config.JAIL_IS_PVP)
{
character.setInsideZone(ZoneId.PVP, false);
character.sendPacket(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
}
if (player.isJailed())
{
// when a player wants to exit jail even if he is still jailed, teleport him back to jail
ThreadPoolManager.getInstance().scheduleGeneral(new TeleportTask(player, JAIL_IN_LOC), 2000);
character.sendMessage("You cannot cheat your way out of here. You must wait until your jail time is over.");
}
if (Config.JAIL_DISABLE_TRANSACTION)
{
character.setInsideZone(ZoneId.NO_STORE, false);
}
}

View File

@ -66,28 +66,30 @@ public class L2MotherTreeZone extends L2ZoneType
@Override
protected void onEnter(L2Character character)
{
if (character.isPlayer())
if (!character.isPlayer())
{
final L2PcInstance player = character.getActingPlayer();
character.setInsideZone(ZoneId.MOTHER_TREE, true);
if (_enterMsg != 0)
{
player.sendPacket(SystemMessage.getSystemMessage(_enterMsg));
}
return;
}
final L2PcInstance player = character.getActingPlayer();
character.setInsideZone(ZoneId.MOTHER_TREE, true);
if (_enterMsg != 0)
{
player.sendPacket(SystemMessage.getSystemMessage(_enterMsg));
}
}
@Override
protected void onExit(L2Character character)
{
if (character.isPlayer())
if (!character.isPlayer())
{
final L2PcInstance player = character.getActingPlayer();
player.setInsideZone(ZoneId.MOTHER_TREE, false);
if (_leaveMsg != 0)
{
player.sendPacket(SystemMessage.getSystemMessage(_leaveMsg));
}
return;
}
final L2PcInstance player = character.getActingPlayer();
player.setInsideZone(ZoneId.MOTHER_TREE, false);
if (_leaveMsg != 0)
{
player.sendPacket(SystemMessage.getSystemMessage(_leaveMsg));
}
}

View File

@ -52,12 +52,7 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
public L2OlympiadStadiumZone(int id)
{
super(id);
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
if (settings == null)
{
settings = new Settings();
}
setSettings(settings);
setSettings((ZoneManager.getSettings(getName()) == null ? new Settings() : ZoneManager.getSettings(getName())));
}
public final class Settings extends AbstractZoneSettings
@ -166,37 +161,35 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
@Override
protected final void onEnter(L2Character character)
{
if (getSettings().getOlympiadTask() != null)
if ((getSettings().getOlympiadTask() != null) && getSettings().getOlympiadTask().isBattleStarted())
{
if (getSettings().getOlympiadTask().isBattleStarted())
character.setInsideZone(ZoneId.PVP, true);
if (character.isPlayer())
{
character.setInsideZone(ZoneId.PVP, true);
if (character.isPlayer())
{
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
getSettings().getOlympiadTask().getGame().sendOlympiadInfo(character);
}
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
getSettings().getOlympiadTask().getGame().sendOlympiadInfo(character);
}
}
if (character.isPlayable())
if (!character.isPlayable())
{
final L2PcInstance player = character.getActingPlayer();
if (player != null)
return;
}
final L2PcInstance player = character.getActingPlayer();
if (player != null)
{
// only participants, observers and GMs allowed
if (!player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS) && !player.isInOlympiadMode() && !player.inObserverMode())
{
// only participants, observers and GMs allowed
if (!player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS) && !player.isInOlympiadMode() && !player.inObserverMode())
ThreadPoolManager.getInstance().executeGeneral(new KickPlayer(player));
}
else
{
// check for pet
final L2Summon pet = player.getPet();
if (pet != null)
{
ThreadPoolManager.getInstance().executeGeneral(new KickPlayer(player));
}
else
{
// check for pet
final L2Summon pet = player.getPet();
if (pet != null)
{
pet.unSummon(player);
}
pet.unSummon(player);
}
}
}
@ -227,16 +220,7 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
}
final boolean battleStarted = getSettings().getOlympiadTask().isBattleStarted();
final SystemMessage sm;
if (battleStarted)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
}
final SystemMessage sm = battleStarted ? SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE) : SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
for (L2Character character : getCharactersInside())
{
if (character == null)
@ -276,17 +260,19 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
@Override
public void run()
{
if (_player != null)
if (_player == null)
{
_player.getServitors().values().forEach(s ->
{
s.unSummon(_player);
});
_player.teleToLocation(TeleportWhereType.TOWN);
_player.setInstanceId(0);
_player = null;
return;
}
_player.getServitors().values().forEach(s ->
{
s.unSummon(_player);
});
_player.teleToLocation(TeleportWhereType.TOWN);
_player.setInstanceId(0);
_player = null;
}
}

View File

@ -18,7 +18,6 @@ package com.l2jmobius.gameserver.model.zone.type;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
import com.l2jmobius.gameserver.model.zone.ZoneId;
@ -36,15 +35,11 @@ public class L2PeaceZone extends L2ZoneType
@Override
protected void onEnter(L2Character character)
{
if (character.isPlayer())
// PVP possible during siege, now for siege participants only
// Could also check if this town is in siege, or if any siege is going on
if (character.isPlayer() && (character.getActingPlayer().getSiegeState() != 0) && (Config.PEACE_ZONE_MODE == 1))
{
final L2PcInstance player = character.getActingPlayer();
// PVP possible during siege, now for siege participants only
// Could also check if this town is in siege, or if any siege is going on
if ((player.getSiegeState() != 0) && (Config.PEACE_ZONE_MODE == 1))
{
return;
}
return;
}
if (Config.PEACE_ZONE_MODE != 2)

View File

@ -71,12 +71,7 @@ public class L2ResidenceHallTeleportZone extends L2ResidenceTeleportZone
@Override
public void run()
{
int index = 0;
if (getSpawns().size() > 1)
{
index = Rnd.get(getSpawns().size());
}
final int index = getSpawns().size() > 1 ? Rnd.get(getSpawns().size()) : 0;
final Location loc = getSpawns().get(index);
if (loc == null)
{

View File

@ -48,12 +48,7 @@ public class L2SiegeZone extends L2ZoneType
public L2SiegeZone(int id)
{
super(id);
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
if (settings == null)
{
settings = new Settings();
}
setSettings(settings);
setSettings((ZoneManager.getSettings(getName()) == null ? new Settings() : ZoneManager.getSettings(getName())));
}
public final class Settings extends AbstractZoneSettings
@ -156,42 +151,46 @@ public class L2SiegeZone extends L2ZoneType
@Override
protected void onEnter(L2Character character)
{
if (getSettings().isActiveSiege())
if (!getSettings().isActiveSiege())
{
character.setInsideZone(ZoneId.PVP, true);
character.setInsideZone(ZoneId.SIEGE, true);
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true); // FIXME: Custom ?
if (character.isPlayer())
return;
}
character.setInsideZone(ZoneId.PVP, true);
character.setInsideZone(ZoneId.SIEGE, true);
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true); // FIXME: Custom ?
if (!character.isPlayer())
{
return;
}
final L2PcInstance plyer = character.getActingPlayer();
if (plyer.isRegisteredOnThisSiegeField(getSettings().getSiegeableId()))
{
plyer.setIsInSiege(true); // in siege
if (getSettings().getSiege().giveFame() && (getSettings().getSiege().getFameFrequency() > 0))
{
final L2PcInstance plyer = character.getActingPlayer();
if (plyer.isRegisteredOnThisSiegeField(getSettings().getSiegeableId()))
{
plyer.setIsInSiege(true); // in siege
if (getSettings().getSiege().giveFame() && (getSettings().getSiege().getFameFrequency() > 0))
{
plyer.startFameTask(getSettings().getSiege().getFameFrequency() * 1000, getSettings().getSiege().getFameAmount());
}
}
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
if (!Config.ALLOW_WYVERN_DURING_SIEGE && (plyer.getMountType() == MountType.WYVERN))
{
plyer.sendPacket(SystemMessageId.THIS_AREA_CANNOT_BE_ENTERED_WHILE_MOUNTED_ATOP_OF_A_WYVERN_YOU_WILL_BE_DISMOUNTED_FROM_YOUR_WYVERN_IF_YOU_DO_NOT_LEAVE);
plyer.enteredNoLanding(DISMOUNT_DELAY);
}
if (!Config.ALLOW_MOUNTS_DURING_SIEGE && (plyer.isMounted()))
{
plyer.dismount();
}
if (!Config.ALLOW_MOUNTS_DURING_SIEGE && plyer.isTransformed() && plyer.getTransformation().isRiding())
{
plyer.untransform();
}
plyer.startFameTask(getSettings().getSiege().getFameFrequency() * 1000, getSettings().getSiege().getFameAmount());
}
}
character.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE);
if (!Config.ALLOW_WYVERN_DURING_SIEGE && (plyer.getMountType() == MountType.WYVERN))
{
plyer.sendPacket(SystemMessageId.THIS_AREA_CANNOT_BE_ENTERED_WHILE_MOUNTED_ATOP_OF_A_WYVERN_YOU_WILL_BE_DISMOUNTED_FROM_YOUR_WYVERN_IF_YOU_DO_NOT_LEAVE);
plyer.enteredNoLanding(DISMOUNT_DELAY);
}
if (!Config.ALLOW_MOUNTS_DURING_SIEGE && (plyer.isMounted()))
{
plyer.dismount();
}
if (!Config.ALLOW_MOUNTS_DURING_SIEGE && plyer.isTransformed() && plyer.getTransformation().isRiding())
{
plyer.untransform();
}
}
@Override
@ -200,68 +199,66 @@ public class L2SiegeZone extends L2ZoneType
character.setInsideZone(ZoneId.PVP, false);
character.setInsideZone(ZoneId.SIEGE, false);
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false); // FIXME: Custom ?
if (getSettings().isActiveSiege())
if (getSettings().isActiveSiege() && character.isPlayer())
{
if (character.isPlayer())
final L2PcInstance player = character.getActingPlayer();
character.sendPacket(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
if (player.getMountType() == MountType.WYVERN)
{
final L2PcInstance player = character.getActingPlayer();
character.sendPacket(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE);
if (player.getMountType() == MountType.WYVERN)
{
player.exitedNoLanding();
}
// Set pvp flag
if (player.getPvpFlag() == 0)
{
player.startPvPFlag();
}
player.exitedNoLanding();
}
// Set pvp flag
if (player.getPvpFlag() == 0)
{
player.startPvPFlag();
}
}
if (character.isPlayer())
if (!character.isPlayer())
{
final L2PcInstance activeChar = character.getActingPlayer();
activeChar.stopFameTask();
activeChar.setIsInSiege(false);
if ((getSettings().getSiege() instanceof FortSiege) && (activeChar.getInventory().getItemByItemId(9819) != null))
{
// drop combat flag
final Fort fort = FortManager.getInstance().getFortById(getSettings().getSiegeableId());
if (fort != null)
{
FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getResidenceId());
}
else
{
final int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
activeChar.getInventory().unEquipItemInBodySlot(slot);
activeChar.destroyItem("CombatFlag", activeChar.getInventory().getItemByItemId(9819), null, true);
}
}
return;
}
final L2PcInstance activeChar = character.getActingPlayer();
activeChar.stopFameTask();
activeChar.setIsInSiege(false);
if (!(getSettings().getSiege() instanceof FortSiege) || (activeChar.getInventory().getItemByItemId(9819) == null))
{
return;
}
final Fort fort = FortManager.getInstance().getFortById(getSettings().getSiegeableId());
if (fort != null)
{
FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getResidenceId());
}
else
{
final int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
activeChar.getInventory().unEquipItemInBodySlot(slot);
activeChar.destroyItem("CombatFlag", activeChar.getInventory().getItemByItemId(9819), null, true);
}
}
@Override
public void onDieInside(L2Character character)
{
if (getSettings().isActiveSiege())
if (!getSettings().isActiveSiege() || !character.isPlayer() || !character.getActingPlayer().isRegisteredOnThisSiegeField(getSettings().getSiegeableId()))
{
// debuff participants only if they die inside siege zone
if (character.isPlayer() && character.getActingPlayer().isRegisteredOnThisSiegeField(getSettings().getSiegeableId()))
{
int lvl = 1;
final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(5660);
if (info != null)
{
lvl = Math.min(lvl + info.getSkill().getLevel(), 5);
}
final Skill skill = SkillData.getInstance().getSkill(5660, lvl);
if (skill != null)
{
skill.applyEffects(character, character);
}
}
return;
}
int lvl = 1;
final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(5660);
if (info != null)
{
lvl = Math.min(lvl + info.getSkill().getLevel(), 5);
}
final Skill skill = SkillData.getInstance().getSkill(5660, lvl);
if (skill != null)
{
skill.applyEffects(character, character);
}
}
@ -346,15 +343,13 @@ public class L2SiegeZone extends L2ZoneType
*/
public void banishForeigners(int owningClanId)
{
final TeleportWhereType type = TeleportWhereType.TOWN;
for (L2PcInstance temp : getPlayersInside())
{
if (temp.getClanId() == owningClanId)
{
continue;
}
temp.teleToLocation(type);
temp.teleToLocation(TeleportWhereType.TOWN);
}
}
}

View File

@ -16,8 +16,6 @@
*/
package com.l2jmobius.gameserver.model.zone.type;
import java.util.Collection;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
@ -53,9 +51,7 @@ public class L2WaterZone extends L2ZoneType
}
else if (character.isNpc())
{
final Collection<L2PcInstance> plrs = character.getKnownList().getKnownPlayers().values();
for (L2PcInstance player : plrs)
for (L2PcInstance player : character.getKnownList().getKnownPlayers().values())
{
if (character.getRunSpeed() == 0)
{
@ -81,8 +77,7 @@ public class L2WaterZone extends L2ZoneType
}
else if (character.isNpc())
{
final Collection<L2PcInstance> plrs = character.getKnownList().getKnownPlayers().values();
for (L2PcInstance player : plrs)
for (L2PcInstance player : character.getKnownList().getKnownPlayers().values())
{
if (character.getRunSpeed() == 0)
{