From cab91dfa54bdd154604f3a30ff6a36bb97e318ba Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sun, 19 Sep 2021 18:29:08 +0000 Subject: [PATCH] Store auto use settings. --- .../model/actor/instance/PlayerInstance.java | 49 +++++++++++++++++++ .../model/variables/PlayerVariables.java | 1 + .../network/clientpackets/EnterWorld.java | 1 + .../autoplay/ExAutoPlaySetting.java | 22 +++++++++ .../model/actor/instance/PlayerInstance.java | 49 +++++++++++++++++++ .../model/variables/PlayerVariables.java | 1 + .../network/clientpackets/EnterWorld.java | 1 + .../autoplay/ExAutoPlaySetting.java | 22 +++++++++ .../model/actor/instance/PlayerInstance.java | 49 +++++++++++++++++++ .../model/variables/PlayerVariables.java | 1 + .../network/clientpackets/EnterWorld.java | 1 + .../autoplay/ExAutoPlaySetting.java | 22 +++++++++ .../model/actor/instance/PlayerInstance.java | 49 +++++++++++++++++++ .../model/variables/PlayerVariables.java | 1 + .../network/clientpackets/EnterWorld.java | 1 + .../autoplay/ExAutoPlaySetting.java | 22 +++++++++ .../model/actor/instance/PlayerInstance.java | 49 +++++++++++++++++++ .../model/variables/PlayerVariables.java | 1 + .../network/clientpackets/EnterWorld.java | 1 + .../autoplay/ExAutoPlaySetting.java | 22 +++++++++ .../model/actor/instance/PlayerInstance.java | 49 +++++++++++++++++++ .../model/variables/PlayerVariables.java | 1 + .../network/clientpackets/EnterWorld.java | 1 + .../autoplay/ExAutoPlaySetting.java | 22 +++++++++ 24 files changed, 438 insertions(+) diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 78c4188eeb..0039ea5105 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -890,6 +890,7 @@ public class PlayerInstance extends Playable private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder(); private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder(); + private boolean _resumedAutoPlay = false; private ScheduledFuture _timedHuntingZoneTask = null; @@ -14298,6 +14299,54 @@ public class PlayerInstance extends Playable return _autoUseSettings; } + public void setResumedAutoPlay(boolean value) + { + _resumedAutoPlay = value; + } + + public boolean hasResumedAutoPlay() + { + return _resumedAutoPlay; + } + + public void restoreAutoSettings() + { + if (!Config.ENABLE_AUTO_PLAY || !getVariables().contains(PlayerVariables.AUTO_USE_SETTINGS)) + { + return; + } + + final List settings = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SETTINGS); + if (settings.isEmpty()) + { + return; + } + + final int options = settings.get(0); + final boolean active = settings.get(1) == 1; + final boolean pickUp = settings.get(2) == 1; + final int nextTargetMode = settings.get(3); + final boolean longRange = settings.get(4) == 1; + final int potionPercent = settings.get(5); + final boolean respectfulHunting = settings.get(6) == 1; + + getAutoPlaySettings().setAutoPotionPercent(potionPercent); + getAutoPlaySettings().setOptions(options); + getAutoPlaySettings().setPickup(pickUp); + getAutoPlaySettings().setNextTargetMode(nextTargetMode); + getAutoPlaySettings().setLongRange(!longRange); + getAutoPlaySettings().setRespectfulHunting(respectfulHunting); + + sendPacket(new ExAutoPlaySettingSend(options, active, pickUp, nextTargetMode, longRange, potionPercent, respectfulHunting)); + + if (active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(this); + } + + _resumedAutoPlay = true; + } + public void restoreAutoShortcutVisual() { if (_autoUseSettings.isEmpty()) diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 7d4ccfba60..c7187030f5 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -62,6 +62,7 @@ public class PlayerVariables extends AbstractVariables public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String DELUSION_RETURN = "DELUSION_RETURN"; + public static final String AUTO_USE_SETTINGS = "AUTO_USE_SETTINGS"; public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 6b4a7922a9..16dafd9bb5 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -646,6 +646,7 @@ public class EnterWorld implements IClientIncomingPacket // Auto use restore. player.restoreAutoShortcuts(); + player.restoreAutoSettings(); // Fix for equipped item skills if (!player.getEffectList().getCurrentAbnormalVisualEffects().isEmpty()) diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java index 189704b040..ca16baaf30 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java @@ -16,9 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.autoplay; +import java.util.ArrayList; +import java.util.List; + import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; @@ -59,6 +63,14 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + // Skip first run. Fixes restored settings been overwritten. + // Client sends a disabled ExAutoPlaySetting upon player login. + if (player.hasResumedAutoPlay()) + { + player.setResumedAutoPlay(false); + return; + } + player.sendPacket(new ExAutoPlaySettingSend(_options, _active, _pickUp, _nextTargetMode, _longRange, _potionPercent, _respectfulHunting)); player.getAutoPlaySettings().setAutoPotionPercent(_potionPercent); @@ -67,6 +79,16 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + final List settings = new ArrayList<>(7); + settings.add(0, _options); + settings.add(1, _active ? 1 : 0); + settings.add(2, _pickUp ? 1 : 0); + settings.add(3, _nextTargetMode); + settings.add(4, _longRange ? 1 : 0); + settings.add(5, _potionPercent); + settings.add(6, _respectfulHunting ? 1 : 0); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SETTINGS, settings); + player.getAutoPlaySettings().setOptions(_options); player.getAutoPlaySettings().setPickup(_pickUp); player.getAutoPlaySettings().setNextTargetMode(_nextTargetMode); diff --git a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index e0fb196dc3..9e4e2b0074 100644 --- a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -890,6 +890,7 @@ public class PlayerInstance extends Playable private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder(); private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder(); + private boolean _resumedAutoPlay = false; private ScheduledFuture _timedHuntingZoneTask = null; @@ -14368,6 +14369,54 @@ public class PlayerInstance extends Playable return _autoUseSettings; } + public void setResumedAutoPlay(boolean value) + { + _resumedAutoPlay = value; + } + + public boolean hasResumedAutoPlay() + { + return _resumedAutoPlay; + } + + public void restoreAutoSettings() + { + if (!Config.ENABLE_AUTO_PLAY || !getVariables().contains(PlayerVariables.AUTO_USE_SETTINGS)) + { + return; + } + + final List settings = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SETTINGS); + if (settings.isEmpty()) + { + return; + } + + final int options = settings.get(0); + final boolean active = settings.get(1) == 1; + final boolean pickUp = settings.get(2) == 1; + final int nextTargetMode = settings.get(3); + final boolean longRange = settings.get(4) == 1; + final int potionPercent = settings.get(5); + final boolean respectfulHunting = settings.get(6) == 1; + + getAutoPlaySettings().setAutoPotionPercent(potionPercent); + getAutoPlaySettings().setOptions(options); + getAutoPlaySettings().setPickup(pickUp); + getAutoPlaySettings().setNextTargetMode(nextTargetMode); + getAutoPlaySettings().setLongRange(!longRange); + getAutoPlaySettings().setRespectfulHunting(respectfulHunting); + + sendPacket(new ExAutoPlaySettingSend(options, active, pickUp, nextTargetMode, longRange, potionPercent, respectfulHunting)); + + if (active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(this); + } + + _resumedAutoPlay = true; + } + public void restoreAutoShortcutVisual() { if (_autoUseSettings.isEmpty()) diff --git a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index bcc96a6b73..137accbf86 100644 --- a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -62,6 +62,7 @@ public class PlayerVariables extends AbstractVariables public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String DELUSION_RETURN = "DELUSION_RETURN"; + public static final String AUTO_USE_SETTINGS = "AUTO_USE_SETTINGS"; public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; diff --git a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 6b5433a1a2..dc6f7807f2 100644 --- a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -656,6 +656,7 @@ public class EnterWorld implements IClientIncomingPacket // Auto use restore. player.restoreAutoShortcuts(); + player.restoreAutoSettings(); // Fix for equipped item skills if (!player.getEffectList().getCurrentAbnormalVisualEffects().isEmpty()) diff --git a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java index 5121d5082c..4783276e18 100644 --- a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java +++ b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java @@ -16,9 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.autoplay; +import java.util.ArrayList; +import java.util.List; + import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; @@ -60,6 +64,14 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + // Skip first run. Fixes restored settings been overwritten. + // Client sends a disabled ExAutoPlaySetting upon player login. + if (player.hasResumedAutoPlay()) + { + player.setResumedAutoPlay(false); + return; + } + player.sendPacket(new ExAutoPlaySettingSend(_options, _active, _pickUp, _nextTargetMode, _longRange, _potionPercent, _respectfulHunting)); player.getAutoPlaySettings().setAutoPotionPercent(_potionPercent); @@ -68,6 +80,16 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + final List settings = new ArrayList<>(7); + settings.add(0, _options); + settings.add(1, _active ? 1 : 0); + settings.add(2, _pickUp ? 1 : 0); + settings.add(3, _nextTargetMode); + settings.add(4, _longRange ? 1 : 0); + settings.add(5, _potionPercent); + settings.add(6, _respectfulHunting ? 1 : 0); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SETTINGS, settings); + player.getAutoPlaySettings().setOptions(_options); player.getAutoPlaySettings().setPickup(_pickUp); player.getAutoPlaySettings().setNextTargetMode(_nextTargetMode); diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index ae999d5d35..d2ff06632e 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -903,6 +903,7 @@ public class PlayerInstance extends Playable private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder(); private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder(); + private boolean _resumedAutoPlay = false; private ScheduledFuture _timedHuntingZoneTask = null; @@ -14405,6 +14406,54 @@ public class PlayerInstance extends Playable return _autoUseSettings; } + public void setResumedAutoPlay(boolean value) + { + _resumedAutoPlay = value; + } + + public boolean hasResumedAutoPlay() + { + return _resumedAutoPlay; + } + + public void restoreAutoSettings() + { + if (!Config.ENABLE_AUTO_PLAY || !getVariables().contains(PlayerVariables.AUTO_USE_SETTINGS)) + { + return; + } + + final List settings = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SETTINGS); + if (settings.isEmpty()) + { + return; + } + + final int options = settings.get(0); + final boolean active = settings.get(1) == 1; + final boolean pickUp = settings.get(2) == 1; + final int nextTargetMode = settings.get(3); + final boolean longRange = settings.get(4) == 1; + final int potionPercent = settings.get(5); + final boolean respectfulHunting = settings.get(6) == 1; + + getAutoPlaySettings().setAutoPotionPercent(potionPercent); + getAutoPlaySettings().setOptions(options); + getAutoPlaySettings().setPickup(pickUp); + getAutoPlaySettings().setNextTargetMode(nextTargetMode); + getAutoPlaySettings().setLongRange(!longRange); + getAutoPlaySettings().setRespectfulHunting(respectfulHunting); + + sendPacket(new ExAutoPlaySettingSend(options, active, pickUp, nextTargetMode, longRange, potionPercent, respectfulHunting)); + + if (active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(this); + } + + _resumedAutoPlay = true; + } + public void restoreAutoShortcutVisual() { if (_autoUseSettings.isEmpty()) diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index bcc96a6b73..137accbf86 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -62,6 +62,7 @@ public class PlayerVariables extends AbstractVariables public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String DELUSION_RETURN = "DELUSION_RETURN"; + public static final String AUTO_USE_SETTINGS = "AUTO_USE_SETTINGS"; public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 1315424e35..66e60fe9f1 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -661,6 +661,7 @@ public class EnterWorld implements IClientIncomingPacket // Auto use restore. player.restoreAutoShortcuts(); + player.restoreAutoSettings(); // Fix for equipped item skills if (!player.getEffectList().getCurrentAbnormalVisualEffects().isEmpty()) diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java index 5121d5082c..4783276e18 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java @@ -16,9 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.autoplay; +import java.util.ArrayList; +import java.util.List; + import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; @@ -60,6 +64,14 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + // Skip first run. Fixes restored settings been overwritten. + // Client sends a disabled ExAutoPlaySetting upon player login. + if (player.hasResumedAutoPlay()) + { + player.setResumedAutoPlay(false); + return; + } + player.sendPacket(new ExAutoPlaySettingSend(_options, _active, _pickUp, _nextTargetMode, _longRange, _potionPercent, _respectfulHunting)); player.getAutoPlaySettings().setAutoPotionPercent(_potionPercent); @@ -68,6 +80,16 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + final List settings = new ArrayList<>(7); + settings.add(0, _options); + settings.add(1, _active ? 1 : 0); + settings.add(2, _pickUp ? 1 : 0); + settings.add(3, _nextTargetMode); + settings.add(4, _longRange ? 1 : 0); + settings.add(5, _potionPercent); + settings.add(6, _respectfulHunting ? 1 : 0); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SETTINGS, settings); + player.getAutoPlaySettings().setOptions(_options); player.getAutoPlaySettings().setPickup(_pickUp); player.getAutoPlaySettings().setNextTargetMode(_nextTargetMode); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 5ebf35c627..8dfa210fc5 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -879,6 +879,7 @@ public class PlayerInstance extends Playable private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder(); private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder(); + private boolean _resumedAutoPlay = false; private ScheduledFuture _timedHuntingZoneTask = null; @@ -14278,6 +14279,54 @@ public class PlayerInstance extends Playable return _autoUseSettings; } + public void setResumedAutoPlay(boolean value) + { + _resumedAutoPlay = value; + } + + public boolean hasResumedAutoPlay() + { + return _resumedAutoPlay; + } + + public void restoreAutoSettings() + { + if (!Config.ENABLE_AUTO_PLAY || !getVariables().contains(PlayerVariables.AUTO_USE_SETTINGS)) + { + return; + } + + final List settings = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SETTINGS); + if (settings.isEmpty()) + { + return; + } + + final int options = settings.get(0); + final boolean active = settings.get(1) == 1; + final boolean pickUp = settings.get(2) == 1; + final int nextTargetMode = settings.get(3); + final boolean longRange = settings.get(4) == 1; + final int potionPercent = settings.get(5); + final boolean respectfulHunting = settings.get(6) == 1; + + getAutoPlaySettings().setAutoPotionPercent(potionPercent); + getAutoPlaySettings().setOptions(options); + getAutoPlaySettings().setPickup(pickUp); + getAutoPlaySettings().setNextTargetMode(nextTargetMode); + getAutoPlaySettings().setLongRange(!longRange); + getAutoPlaySettings().setRespectfulHunting(respectfulHunting); + + sendPacket(new ExAutoPlaySettingSend(options, active, pickUp, nextTargetMode, longRange, potionPercent, respectfulHunting)); + + if (active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(this); + } + + _resumedAutoPlay = true; + } + public void restoreAutoShortcutVisual() { if (_autoUseSettings.isEmpty()) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 687ad69e9c..7c72d92598 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -63,6 +63,7 @@ public class PlayerVariables extends AbstractVariables public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String DELUSION_RETURN = "DELUSION_RETURN"; + public static final String AUTO_USE_SETTINGS = "AUTO_USE_SETTINGS"; public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 6fcdbb44ac..2b254879f4 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -635,6 +635,7 @@ public class EnterWorld implements IClientIncomingPacket // Auto use restore. player.restoreAutoShortcuts(); + player.restoreAutoSettings(); // Fix for equipped item skills if (!player.getEffectList().getCurrentAbnormalVisualEffects().isEmpty()) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java index 189704b040..ca16baaf30 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java @@ -16,9 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.autoplay; +import java.util.ArrayList; +import java.util.List; + import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; @@ -59,6 +63,14 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + // Skip first run. Fixes restored settings been overwritten. + // Client sends a disabled ExAutoPlaySetting upon player login. + if (player.hasResumedAutoPlay()) + { + player.setResumedAutoPlay(false); + return; + } + player.sendPacket(new ExAutoPlaySettingSend(_options, _active, _pickUp, _nextTargetMode, _longRange, _potionPercent, _respectfulHunting)); player.getAutoPlaySettings().setAutoPotionPercent(_potionPercent); @@ -67,6 +79,16 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + final List settings = new ArrayList<>(7); + settings.add(0, _options); + settings.add(1, _active ? 1 : 0); + settings.add(2, _pickUp ? 1 : 0); + settings.add(3, _nextTargetMode); + settings.add(4, _longRange ? 1 : 0); + settings.add(5, _potionPercent); + settings.add(6, _respectfulHunting ? 1 : 0); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SETTINGS, settings); + player.getAutoPlaySettings().setOptions(_options); player.getAutoPlaySettings().setPickup(_pickUp); player.getAutoPlaySettings().setNextTargetMode(_nextTargetMode); diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 0c977bb2fc..3910b2d655 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -905,6 +905,7 @@ public class PlayerInstance extends Playable private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder(); private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder(); + private boolean _resumedAutoPlay = false; private ScheduledFuture _timedHuntingZoneTask = null; @@ -14538,6 +14539,54 @@ public class PlayerInstance extends Playable return _autoUseSettings; } + public void setResumedAutoPlay(boolean value) + { + _resumedAutoPlay = value; + } + + public boolean hasResumedAutoPlay() + { + return _resumedAutoPlay; + } + + public void restoreAutoSettings() + { + if (!Config.ENABLE_AUTO_PLAY || !getVariables().contains(PlayerVariables.AUTO_USE_SETTINGS)) + { + return; + } + + final List settings = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SETTINGS); + if (settings.isEmpty()) + { + return; + } + + final int options = settings.get(0); + final boolean active = settings.get(1) == 1; + final boolean pickUp = settings.get(2) == 1; + final int nextTargetMode = settings.get(3); + final boolean longRange = settings.get(4) == 1; + final int potionPercent = settings.get(5); + final boolean respectfulHunting = settings.get(6) == 1; + + getAutoPlaySettings().setAutoPotionPercent(potionPercent); + getAutoPlaySettings().setOptions(options); + getAutoPlaySettings().setPickup(pickUp); + getAutoPlaySettings().setNextTargetMode(nextTargetMode); + getAutoPlaySettings().setLongRange(!longRange); + getAutoPlaySettings().setRespectfulHunting(respectfulHunting); + + sendPacket(new ExAutoPlaySettingSend(options, active, pickUp, nextTargetMode, longRange, potionPercent, respectfulHunting)); + + if (active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(this); + } + + _resumedAutoPlay = true; + } + public void restoreAutoShortcutVisual() { if (_autoUseSettings.isEmpty()) diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 306af9b04c..117891fbd3 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -63,6 +63,7 @@ public class PlayerVariables extends AbstractVariables public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String DELUSION_RETURN = "DELUSION_RETURN"; + public static final String AUTO_USE_SETTINGS = "AUTO_USE_SETTINGS"; public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index b82a4328cc..654e8db701 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -638,6 +638,7 @@ public class EnterWorld implements IClientIncomingPacket // Auto use restore. player.restoreAutoShortcuts(); + player.restoreAutoSettings(); // Fix for equipped item skills if (!player.getEffectList().getCurrentAbnormalVisualEffects().isEmpty()) diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java index 5121d5082c..4783276e18 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java @@ -16,9 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.autoplay; +import java.util.ArrayList; +import java.util.List; + import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; @@ -60,6 +64,14 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + // Skip first run. Fixes restored settings been overwritten. + // Client sends a disabled ExAutoPlaySetting upon player login. + if (player.hasResumedAutoPlay()) + { + player.setResumedAutoPlay(false); + return; + } + player.sendPacket(new ExAutoPlaySettingSend(_options, _active, _pickUp, _nextTargetMode, _longRange, _potionPercent, _respectfulHunting)); player.getAutoPlaySettings().setAutoPotionPercent(_potionPercent); @@ -68,6 +80,16 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + final List settings = new ArrayList<>(7); + settings.add(0, _options); + settings.add(1, _active ? 1 : 0); + settings.add(2, _pickUp ? 1 : 0); + settings.add(3, _nextTargetMode); + settings.add(4, _longRange ? 1 : 0); + settings.add(5, _potionPercent); + settings.add(6, _respectfulHunting ? 1 : 0); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SETTINGS, settings); + player.getAutoPlaySettings().setOptions(_options); player.getAutoPlaySettings().setPickup(_pickUp); player.getAutoPlaySettings().setNextTargetMode(_nextTargetMode); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 328cae6aca..d2c8a3765f 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -929,6 +929,7 @@ public class PlayerInstance extends Playable private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder(); private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder(); + private boolean _resumedAutoPlay = false; private ScheduledFuture _timedHuntingZoneTask = null; @@ -14615,6 +14616,54 @@ public class PlayerInstance extends Playable return _autoUseSettings; } + public void setResumedAutoPlay(boolean value) + { + _resumedAutoPlay = value; + } + + public boolean hasResumedAutoPlay() + { + return _resumedAutoPlay; + } + + public void restoreAutoSettings() + { + if (!Config.ENABLE_AUTO_PLAY || !getVariables().contains(PlayerVariables.AUTO_USE_SETTINGS)) + { + return; + } + + final List settings = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SETTINGS); + if (settings.isEmpty()) + { + return; + } + + final int options = settings.get(0); + final boolean active = settings.get(1) == 1; + final boolean pickUp = settings.get(2) == 1; + final int nextTargetMode = settings.get(3); + final boolean longRange = settings.get(4) == 1; + final int potionPercent = settings.get(5); + final boolean respectfulHunting = settings.get(6) == 1; + + getAutoPlaySettings().setAutoPotionPercent(potionPercent); + getAutoPlaySettings().setOptions(options); + getAutoPlaySettings().setPickup(pickUp); + getAutoPlaySettings().setNextTargetMode(nextTargetMode); + getAutoPlaySettings().setLongRange(!longRange); + getAutoPlaySettings().setRespectfulHunting(respectfulHunting); + + sendPacket(new ExAutoPlaySettingSend(options, active, pickUp, nextTargetMode, longRange, potionPercent, respectfulHunting)); + + if (active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(this); + } + + _resumedAutoPlay = true; + } + public void restoreAutoShortcutVisual() { if (_autoUseSettings.isEmpty()) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 7f963d81f4..0e3d0e76bc 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -63,6 +63,7 @@ public class PlayerVariables extends AbstractVariables public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String DELUSION_RETURN = "DELUSION_RETURN"; + public static final String AUTO_USE_SETTINGS = "AUTO_USE_SETTINGS"; public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 28fc79139f..97fe3d8341 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -645,6 +645,7 @@ public class EnterWorld implements IClientIncomingPacket // Auto use restore. player.restoreAutoShortcuts(); + player.restoreAutoSettings(); // Fix for equipped item skills if (!player.getEffectList().getCurrentAbnormalVisualEffects().isEmpty()) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java index 5121d5082c..4783276e18 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java @@ -16,9 +16,13 @@ */ package org.l2jmobius.gameserver.network.clientpackets.autoplay; +import java.util.ArrayList; +import java.util.List; + import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; @@ -60,6 +64,14 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + // Skip first run. Fixes restored settings been overwritten. + // Client sends a disabled ExAutoPlaySetting upon player login. + if (player.hasResumedAutoPlay()) + { + player.setResumedAutoPlay(false); + return; + } + player.sendPacket(new ExAutoPlaySettingSend(_options, _active, _pickUp, _nextTargetMode, _longRange, _potionPercent, _respectfulHunting)); player.getAutoPlaySettings().setAutoPotionPercent(_potionPercent); @@ -68,6 +80,16 @@ public class ExAutoPlaySetting implements IClientIncomingPacket return; } + final List settings = new ArrayList<>(7); + settings.add(0, _options); + settings.add(1, _active ? 1 : 0); + settings.add(2, _pickUp ? 1 : 0); + settings.add(3, _nextTargetMode); + settings.add(4, _longRange ? 1 : 0); + settings.add(5, _potionPercent); + settings.add(6, _respectfulHunting ? 1 : 0); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SETTINGS, settings); + player.getAutoPlaySettings().setOptions(_options); player.getAutoPlaySettings().setPickup(_pickUp); player.getAutoPlaySettings().setNextTargetMode(_nextTargetMode);