Skip to content

Instantly share code, notes, and snippets.

@Williams0ff
Last active February 20, 2023 12:11
Show Gist options
  • Save Williams0ff/beb773165dbc29cd2e402e8b061771cf to your computer and use it in GitHub Desktop.
Save Williams0ff/beb773165dbc29cd2e402e8b061771cf to your computer and use it in GitHub Desktop.
Restore Effects toggle by LordPanic
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