Last active
February 20, 2023 12:11
-
-
Save Williams0ff/beb773165dbc29cd2e402e8b061771cf to your computer and use it in GitHub Desktop.
Restore Effects toggle by LordPanic
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Playable.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Playable.java | |
index d49e367..ebabbaa 100644 | |
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Playable.java | |
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Playable.java | |
@@ -31,7 +31,7 @@ | |
import net.sf.l2j.gameserver.model.item.instance.ItemInstance; | |
import net.sf.l2j.gameserver.model.item.kind.EtcItem; | |
import net.sf.l2j.gameserver.model.pledge.Clan; | |
-import net.sf.l2j.gameserver.model.zone.type.MultiZone; | |
+import net.sf.l2j.gameserver.model.zone.type.RandomZone; | |
import net.sf.l2j.gameserver.network.SystemMessageId; | |
import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage; | |
import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage.SMPOS; | |
@@ -42,6 +42,7 @@ | |
import net.sf.l2j.gameserver.scripting.Quest; | |
import net.sf.l2j.gameserver.skills.AbstractEffect; | |
import net.sf.l2j.gameserver.skills.L2Skill; | |
+import net.sf.l2j.gameserver.skills.RestoreEffectsManager; | |
/** | |
* This class represents all {@link Playable} actors in the world : {@link Player}s and their different {@link Summon} types. | |
@@ -49,7 +50,7 @@ | |
public abstract class Playable extends Creature | |
{ | |
private final Map<Integer, Long> _disabledItems = new ConcurrentHashMap<>(); | |
- | |
+ | |
protected Playable(int objectId, CreatureTemplate template) | |
{ | |
super(objectId, template); | |
@@ -102,6 +103,9 @@ | |
setIsDead(true); | |
} | |
+ | |
+ // To save player effects toggle | |
+ RestoreEffectsManager.getInstance().savePlayerEffects(this); | |
// Stop movement, cast and attack. Reset the target. | |
abortAll(true); | |
@@ -162,7 +166,10 @@ | |
setIsDead(false); | |
+ // To restore player effects toggle | |
+ RestoreEffectsManager.getInstance().restorePlayerEffects(this); | |
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/skills/RestoreEffects.java b/aCis_gameserver/java/net/sf/l2j/gameserver/skills/RestoreEffects.java | |
new file mode 100644 | |
index 0000000..cc3e508 | |
--- /dev/null | |
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/skills/RestoreEffects.java | |
@@ -0,0 +1,46 @@ | |
+package net.sf.l2j.gameserver.skills; | |
+ | |
+import java.util.Collection; | |
+import java.util.Map; | |
+import java.util.concurrent.ConcurrentHashMap; | |
+import java.util.concurrent.atomic.AtomicInteger; | |
+ | |
+import net.sf.l2j.gameserver.model.actor.Creature; | |
+ | |
+public class RestoreEffects | |
+{ | |
+ private final Map<Integer, AbstractEffect> _effects = new ConcurrentHashMap<>(); | |
+ private Creature _player; | |
+ private final AtomicInteger _intcounter = new AtomicInteger(); | |
+ | |
+ public RestoreEffects(Creature player) | |
+ { | |
+ _player = player; | |
+ } | |
+ | |
+ public void startSavingEffects() | |
+ { | |
+ for (AbstractEffect effect : _player.getAllEffects()) | |
+ { | |
+ final int counter = _intcounter.incrementAndGet(); | |
+ if (effect.getSkill().isToggle()) | |
+ _effects.put(counter, effect); | |
+ } | |
+ } | |
+ | |
+ public void restoreEffects() | |
+ { | |
+ for (AbstractEffect effect : _effects.values()) | |
+ _player.getCast().doToggleCast(effect.getSkill(), _player); | |
+ } | |
+ | |
+ public int effectsSize() | |
+ { | |
+ return _effects.size(); | |
+ } | |
+ | |
+ public Collection<AbstractEffect> getModEffects() | |
+ { | |
+ return _effects.values(); | |
+ } | |
+} | |
\ No newline at end of file | |
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/skills/RestoreEffectsManager.java b/aCis_gameserver/java/net/sf/l2j/gameserver/skills/RestoreEffectsManager.java | |
new file mode 100644 | |
index 0000000..0a3425b | |
--- /dev/null | |
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/skills/RestoreEffectsManager.java | |
@@ -0,0 +1,45 @@ | |
+package net.sf.l2j.gameserver.skills; | |
+ | |
+import java.util.Map; | |
+import java.util.concurrent.ConcurrentHashMap; | |
+ | |
+import net.sf.l2j.gameserver.model.actor.Playable; | |
+ | |
+public class RestoreEffectsManager | |
+{ | |
+ private final Map<Integer, RestoreEffects> _effects = new ConcurrentHashMap<>(); | |
+ | |
+ public void savePlayerEffects(Playable player) | |
+ { | |
+ if (player.getAllEffects() == null) | |
+ return; | |
+ | |
+ final RestoreEffects modEffects = new RestoreEffects(player); | |
+ modEffects.startSavingEffects(); | |
+ _effects.put(player.getObjectId(), modEffects); | |
+ } | |
+ | |
+ public void restorePlayerEffects(Playable player) | |
+ { | |
+ final RestoreEffects rEffects = getPlayerEffects(player.getObjectId()); | |
+ if (rEffects == null) | |
+ return; | |
+ | |
+ rEffects.restoreEffects(); | |
+ } | |
+ | |
+ public RestoreEffects getPlayerEffects(int plrObjId) | |
+ { | |
+ return _effects.get(plrObjId); | |
+ } | |
+ | |
+ public static final RestoreEffectsManager getInstance() | |
+ { | |
+ return SingletonHolder.INSTANCE; | |
+ } | |
+ | |
+ private static class SingletonHolder | |
+ { | |
+ protected static final RestoreEffectsManager INSTANCE = new RestoreEffectsManager(); | |
+ } | |
+} | |
\ No newline at end of file |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment