Removal of TaskZoneSettings class.
This commit is contained in:
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
/**
|
||||
* Basic task zone settings implementation.
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class TaskZoneSettings extends AbstractZoneSettings
|
||||
{
|
||||
private Future<?> _task;
|
||||
|
||||
/**
|
||||
* Gets the task.
|
||||
* @return the task
|
||||
*/
|
||||
public Future<?> getTask()
|
||||
{
|
||||
return _task;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the task.
|
||||
* @param task the new task
|
||||
*/
|
||||
public void setTask(Future<?> task)
|
||||
{
|
||||
_task = task;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear()
|
||||
{
|
||||
if (_task != null)
|
||||
{
|
||||
_task.cancel(true);
|
||||
_task = null;
|
||||
}
|
||||
}
|
||||
}
|
@@ -16,16 +16,15 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import org.l2jmobius.commons.concurrent.ThreadPool;
|
||||
import org.l2jmobius.gameserver.enums.InstanceType;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.siege.Castle;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
import org.l2jmobius.gameserver.model.zone.AbstractZoneSettings;
|
||||
import org.l2jmobius.gameserver.model.zone.TaskZoneSettings;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
@@ -42,6 +41,7 @@ public class DamageZone extends ZoneType
|
||||
|
||||
private int _startTask;
|
||||
private int _reuseTask;
|
||||
private volatile Future<?> _task;
|
||||
|
||||
public DamageZone(int id)
|
||||
{
|
||||
@@ -60,18 +60,6 @@ public class DamageZone extends ZoneType
|
||||
_castle = null;
|
||||
|
||||
setTargetType(InstanceType.Playable); // default only playabale
|
||||
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
|
||||
if (settings == null)
|
||||
{
|
||||
settings = new TaskZoneSettings();
|
||||
}
|
||||
setSettings(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskZoneSettings getSettings()
|
||||
{
|
||||
return (TaskZoneSettings) super.getSettings();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -106,12 +94,14 @@ public class DamageZone extends ZoneType
|
||||
@Override
|
||||
protected void onEnter(Creature creature)
|
||||
{
|
||||
if ((getSettings().getTask() == null) && ((_damageHPPerSec != 0) || (_damageMPPerSec != 0)))
|
||||
Future<?> task = _task;
|
||||
if ((task == null) && ((_damageHPPerSec != 0) || (_damageMPPerSec != 0)))
|
||||
{
|
||||
final PlayerInstance player = creature.getActingPlayer();
|
||||
if (getCastle() != null) // Castle zone
|
||||
final Castle castle = getCastle();
|
||||
if (castle != null) // Castle zone
|
||||
{
|
||||
if (!(getCastle().getSiege().isInProgress() && (player != null) && (player.getSiegeState() != 2))) // Siege and no defender
|
||||
if (!(castle.getSiege().isInProgress() && (player != null) && (player.getSiegeState() != 2))) // Siege and no defender
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -119,9 +109,10 @@ public class DamageZone extends ZoneType
|
||||
|
||||
synchronized (this)
|
||||
{
|
||||
if (getSettings().getTask() == null)
|
||||
task = _task;
|
||||
if (task == null)
|
||||
{
|
||||
getSettings().setTask(ThreadPool.scheduleAtFixedRate(new ApplyDamage(this), _startTask, _reuseTask));
|
||||
_task = task = ThreadPool.scheduleAtFixedRate(new ApplyDamage(), _startTask, _reuseTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -130,9 +121,10 @@ public class DamageZone extends ZoneType
|
||||
@Override
|
||||
protected void onExit(Creature creature)
|
||||
{
|
||||
if (getCharactersInside().isEmpty() && (getSettings().getTask() != null))
|
||||
if (getCharactersInside().isEmpty() && (_task != null))
|
||||
{
|
||||
getSettings().clear();
|
||||
_task.cancel(true);
|
||||
_task = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,19 +144,16 @@ public class DamageZone extends ZoneType
|
||||
{
|
||||
_castle = CastleManager.getInstance().getCastleById(_castleId);
|
||||
}
|
||||
|
||||
return _castle;
|
||||
}
|
||||
|
||||
private final class ApplyDamage implements Runnable
|
||||
private class ApplyDamage implements Runnable
|
||||
{
|
||||
private final DamageZone _dmgZone;
|
||||
private final Castle _castle;
|
||||
|
||||
protected ApplyDamage(DamageZone zone)
|
||||
protected ApplyDamage()
|
||||
{
|
||||
_dmgZone = zone;
|
||||
_castle = zone.getCastle();
|
||||
_castle = getCastle();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,6 +164,13 @@ public class DamageZone extends ZoneType
|
||||
return;
|
||||
}
|
||||
|
||||
if (getCharactersInside().isEmpty())
|
||||
{
|
||||
_task.cancel(false);
|
||||
_task = null;
|
||||
return;
|
||||
}
|
||||
|
||||
boolean siege = false;
|
||||
|
||||
if (_castle != null)
|
||||
@@ -183,34 +179,34 @@ public class DamageZone extends ZoneType
|
||||
// castle zones active only during siege
|
||||
if (!siege)
|
||||
{
|
||||
_dmgZone.getSettings().clear();
|
||||
_task.cancel(false);
|
||||
_task = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (Creature temp : _dmgZone.getCharactersInside())
|
||||
for (Creature character : getCharactersInside())
|
||||
{
|
||||
if ((temp != null) && !temp.isDead())
|
||||
if ((character != null) && character.isPlayer() && !character.isDead())
|
||||
{
|
||||
if (siege)
|
||||
{
|
||||
// during siege defenders not affected
|
||||
final PlayerInstance player = temp.getActingPlayer();
|
||||
final PlayerInstance player = character.getActingPlayer();
|
||||
if ((player != null) && player.isInSiege() && (player.getSiegeState() == 2))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
final double multiplier = 1 + (temp.getStat().getValue(Stat.DAMAGE_ZONE_VULN, 0) / 100);
|
||||
|
||||
final double multiplier = 1 + (character.getStat().getValue(Stat.DAMAGE_ZONE_VULN, 0) / 100);
|
||||
if (getHPDamagePerSecond() != 0)
|
||||
{
|
||||
temp.reduceCurrentHp(_dmgZone.getHPDamagePerSecond() * multiplier, temp, null);
|
||||
character.reduceCurrentHp(getHPDamagePerSecond() * multiplier, character, null);
|
||||
}
|
||||
if (getMPDamagePerSecond() != 0)
|
||||
{
|
||||
temp.reduceCurrentMp(_dmgZone.getMPDamagePerSecond() * multiplier);
|
||||
character.reduceCurrentMp(getMPDamagePerSecond() * multiplier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -19,22 +19,20 @@ package org.l2jmobius.gameserver.model.zone.type;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import org.l2jmobius.commons.concurrent.ThreadPool;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.SkillData;
|
||||
import org.l2jmobius.gameserver.enums.InstanceType;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.AbstractZoneSettings;
|
||||
import org.l2jmobius.gameserver.model.zone.TaskZoneSettings;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.EtcStatusUpdate;
|
||||
|
||||
/**
|
||||
* another type of damage zone with skills
|
||||
* Another type of damage zone with skills.
|
||||
* @author kerberos
|
||||
*/
|
||||
public class EffectZone extends ZoneType
|
||||
@@ -45,6 +43,7 @@ public class EffectZone extends ZoneType
|
||||
protected boolean _bypassConditions;
|
||||
private boolean _isShowDangerIcon;
|
||||
protected Map<Integer, Integer> _skills;
|
||||
private volatile Future<?> _task;
|
||||
|
||||
public EffectZone(int id)
|
||||
{
|
||||
@@ -55,18 +54,6 @@ public class EffectZone extends ZoneType
|
||||
setTargetType(InstanceType.Playable); // default only playable
|
||||
_bypassConditions = false;
|
||||
_isShowDangerIcon = true;
|
||||
AbstractZoneSettings settings = ZoneManager.getSettings(getName());
|
||||
if (settings == null)
|
||||
{
|
||||
settings = new TaskZoneSettings();
|
||||
}
|
||||
setSettings(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskZoneSettings getSettings()
|
||||
{
|
||||
return (TaskZoneSettings) super.getSettings();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -144,13 +131,15 @@ public class EffectZone extends ZoneType
|
||||
{
|
||||
if (_skills != null)
|
||||
{
|
||||
if (getSettings().getTask() == null)
|
||||
Future<?> task = _task;
|
||||
if (task == null)
|
||||
{
|
||||
synchronized (this)
|
||||
{
|
||||
if (getSettings().getTask() == null)
|
||||
task = _task;
|
||||
if (task == null)
|
||||
{
|
||||
getSettings().setTask(ThreadPool.scheduleAtFixedRate(new ApplySkill(), _initialDelay, _reuse));
|
||||
_task = task = ThreadPool.scheduleAtFixedRate(new ApplySkill(), _initialDelay, _reuse);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -183,9 +172,10 @@ public class EffectZone extends ZoneType
|
||||
}
|
||||
}
|
||||
|
||||
if (getCharactersInside().isEmpty() && (getSettings().getTask() != null))
|
||||
if (getCharactersInside().isEmpty() && (_task != null))
|
||||
{
|
||||
getSettings().clear();
|
||||
_task.cancel(true);
|
||||
_task = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,7 +230,7 @@ public class EffectZone extends ZoneType
|
||||
return _skills.get(skillId);
|
||||
}
|
||||
|
||||
private final class ApplySkill implements Runnable
|
||||
private class ApplySkill implements Runnable
|
||||
{
|
||||
protected ApplySkill()
|
||||
{
|
||||
@@ -253,25 +243,34 @@ public class EffectZone extends ZoneType
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (isEnabled())
|
||||
if (!isEnabled())
|
||||
{
|
||||
getCharactersInside().forEach(character ->
|
||||
return;
|
||||
}
|
||||
|
||||
if (getCharactersInside().isEmpty())
|
||||
{
|
||||
_task.cancel(false);
|
||||
_task = null;
|
||||
return;
|
||||
}
|
||||
|
||||
for (Creature character : getCharactersInside())
|
||||
{
|
||||
if ((character != null) && character.isPlayer() && !character.isDead() && (Rnd.get(100) < _chance))
|
||||
{
|
||||
if ((character != null) && !character.isDead() && (Rnd.get(100) < _chance))
|
||||
for (Entry<Integer, Integer> e : _skills.entrySet())
|
||||
{
|
||||
for (Entry<Integer, Integer> e : _skills.entrySet())
|
||||
final Skill skill = SkillData.getInstance().getSkill(e.getKey().intValue(), e.getValue().intValue());
|
||||
if ((skill != null) && (_bypassConditions || skill.checkCondition(character, character)))
|
||||
{
|
||||
final Skill skill = SkillData.getInstance().getSkill(e.getKey(), e.getValue());
|
||||
if ((skill != null) && (_bypassConditions || skill.checkCondition(character, character)))
|
||||
if (character.getAffectedSkillLevel(skill.getId()) < skill.getLevel())
|
||||
{
|
||||
if (character.getAffectedSkillLevel(skill.getId()) < skill.getLevel())
|
||||
{
|
||||
skill.activateSkill(character, character);
|
||||
}
|
||||
skill.activateSkill(character, character);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user