Use a Map to store AbstractConditionalHpEffect character updates.
This commit is contained in:
parent
7d861fe649
commit
51205e38a1
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
@ -33,8 +35,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
||||||
{
|
{
|
||||||
private final int _hpPercent;
|
private final int _hpPercent;
|
||||||
private final AtomicBoolean _active = new AtomicBoolean();
|
private final Map<L2Character, AtomicBoolean> _updates = new ConcurrentHashMap<>();
|
||||||
private final AtomicBoolean _update = new AtomicBoolean();
|
|
||||||
|
|
||||||
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
protected AbstractConditionalHpEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
@ -52,10 +53,9 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register listeners
|
// Register listeners
|
||||||
if ((_hpPercent > 0) && !_active.get())
|
if ((_hpPercent > 0) && !_updates.containsKey(effected))
|
||||||
{
|
{
|
||||||
_active.set(true);
|
_updates.put(effected, new AtomicBoolean(canPump(effector, effected, skill)));
|
||||||
_update.set(canPump(effector, effected, skill));
|
|
||||||
final ListenersContainer container = effected;
|
final ListenersContainer container = effected;
|
||||||
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
container.addListener(new ConsumerEventListener(container, EventType.ON_CREATURE_HP_CHANGE, (OnCreatureHpChange event) -> onHpChange(event), this));
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
}
|
}
|
||||||
|
|
||||||
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
effected.removeListenerIf(listener -> listener.getOwner() == this);
|
||||||
_active.set(false);
|
_updates.remove(effected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,17 +83,18 @@ abstract class AbstractConditionalHpEffect extends AbstractStatEffect
|
|||||||
private void onHpChange(OnCreatureHpChange event)
|
private void onHpChange(OnCreatureHpChange event)
|
||||||
{
|
{
|
||||||
final L2Character activeChar = event.getCreature();
|
final L2Character activeChar = event.getCreature();
|
||||||
|
final AtomicBoolean update = _updates.get(activeChar);
|
||||||
if (canPump(null, activeChar, null))
|
if (canPump(null, activeChar, null))
|
||||||
{
|
{
|
||||||
if (_update.get())
|
if (update.get())
|
||||||
{
|
{
|
||||||
_update.set(false);
|
update.set(false);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!_update.get())
|
else if (!update.get())
|
||||||
{
|
{
|
||||||
_update.set(true);
|
update.set(true);
|
||||||
activeChar.getStat().recalculateStats(true);
|
activeChar.getStat().recalculateStats(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user