Code improvements.
This commit is contained in:
@ -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...
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user