Support for auto actions in AutoUseTaskManager.

This commit is contained in:
MobiusDevelopment 2020-11-06 22:19:51 +00:00
parent 0a527c3be6
commit 0ad957eec5
12 changed files with 332 additions and 0 deletions

View File

@ -27,6 +27,7 @@ public class AutoUseSettingsHolder
private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoActions = ConcurrentHashMap.newKeySet();
public AutoUseSettingsHolder() public AutoUseSettingsHolder()
{ {
@ -46,4 +47,9 @@ public class AutoUseSettingsHolder
{ {
return _autoSkills; return _autoSkills;
} }
public Collection<Integer> getAutoActions()
{
return _autoActions;
}
} }

View File

@ -18,6 +18,10 @@ package org.l2jmobius.gameserver.network.clientpackets.autoplay;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@ -88,6 +92,10 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId());
} }
else // action
{
AutoUseTaskManager.getInstance().removeAutoAction(player, shortcut.getId());
}
return; return;
} }
@ -115,6 +123,17 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
if (Config.ENABLE_AUTO_BUFF && (skill != null)) if (Config.ENABLE_AUTO_BUFF && (skill != null))
{ {
AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId());
return;
}
// action
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(shortcut.getId());
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
AutoUseTaskManager.getInstance().addAutoAction(player, shortcut.getId());
}
} }
} }
} }

View File

@ -16,22 +16,32 @@
*/ */
package org.l2jmobius.gameserver.taskmanager; package org.l2jmobius.gameserver.taskmanager;
import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.IItemHandler;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.ItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.EtcItem;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.AbnormalType;
import org.l2jmobius.gameserver.model.skills.BuffInfo;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.AffectScope; import org.l2jmobius.gameserver.model.skills.targets.AffectScope;
import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
/** /**
* @author Mobius * @author Mobius
@ -175,6 +185,42 @@ public class AutoUseTaskManager
} }
} }
} }
ACTIONS: for (Integer actionId : player.getAutoUseSettings().getAutoActions())
{
final BuffInfo info = player.getEffectList().getFirstBuffInfoByAbnormalType(AbnormalType.BOT_PENALTY);
if (info != null)
{
for (AbstractEffect effect : info.getEffects())
{
if (!effect.checkCondition(actionId))
{
player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REPORTED_AS_AN_ILLEGAL_PROGRAM_USER_SO_YOUR_ACTIONS_HAVE_BEEN_RESTRICTED);
break ACTIONS;
}
}
}
// Do not allow to do some action if player is transformed.
if (player.isTransformed())
{
final int[] allowedActions = player.isTransformed() ? ExBasicActionList.ACTIONS_ON_TRANSFORM : ExBasicActionList.DEFAULT_ACTION_LIST;
if (Arrays.binarySearch(allowedActions, actionId) < 0)
{
continue ACTIONS;
}
}
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(actionId);
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
actionHandler.useAction(player, actionHolder, false, false);
}
}
}
} }
} }
@ -231,6 +277,18 @@ public class AutoUseTaskManager
stopAutoUseTask(player); stopAutoUseTask(player);
} }
public void addAutoAction(PlayerInstance player, Integer actionId)
{
player.getAutoUseSettings().getAutoActions().add(actionId);
startAutoUseTask(player);
}
public void removeAutoAction(PlayerInstance player, int actionId)
{
player.getAutoUseSettings().getAutoActions().remove(actionId);
stopAutoUseTask(player);
}
public static AutoUseTaskManager getInstance() public static AutoUseTaskManager getInstance()
{ {
return SingletonHolder.INSTANCE; return SingletonHolder.INSTANCE;

View File

@ -27,6 +27,7 @@ public class AutoUseSettingsHolder
private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoActions = ConcurrentHashMap.newKeySet();
public AutoUseSettingsHolder() public AutoUseSettingsHolder()
{ {
@ -46,4 +47,9 @@ public class AutoUseSettingsHolder
{ {
return _autoSkills; return _autoSkills;
} }
public Collection<Integer> getAutoActions()
{
return _autoActions;
}
} }

View File

@ -18,6 +18,10 @@ package org.l2jmobius.gameserver.network.clientpackets.autoplay;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@ -88,6 +92,10 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId());
} }
else // action
{
AutoUseTaskManager.getInstance().removeAutoAction(player, shortcut.getId());
}
return; return;
} }
@ -115,6 +123,17 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
if (Config.ENABLE_AUTO_BUFF && (skill != null)) if (Config.ENABLE_AUTO_BUFF && (skill != null))
{ {
AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId());
return;
}
// action
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(shortcut.getId());
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
AutoUseTaskManager.getInstance().addAutoAction(player, shortcut.getId());
}
} }
} }
} }

View File

@ -16,22 +16,32 @@
*/ */
package org.l2jmobius.gameserver.taskmanager; package org.l2jmobius.gameserver.taskmanager;
import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.IItemHandler;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.ItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.EtcItem;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.AbnormalType;
import org.l2jmobius.gameserver.model.skills.BuffInfo;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.AffectScope; import org.l2jmobius.gameserver.model.skills.targets.AffectScope;
import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
/** /**
* @author Mobius * @author Mobius
@ -175,6 +185,42 @@ public class AutoUseTaskManager
} }
} }
} }
ACTIONS: for (Integer actionId : player.getAutoUseSettings().getAutoActions())
{
final BuffInfo info = player.getEffectList().getFirstBuffInfoByAbnormalType(AbnormalType.BOT_PENALTY);
if (info != null)
{
for (AbstractEffect effect : info.getEffects())
{
if (!effect.checkCondition(actionId))
{
player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REPORTED_AS_AN_ILLEGAL_PROGRAM_USER_SO_YOUR_ACTIONS_HAVE_BEEN_RESTRICTED);
break ACTIONS;
}
}
}
// Do not allow to do some action if player is transformed.
if (player.isTransformed())
{
final int[] allowedActions = player.isTransformed() ? ExBasicActionList.ACTIONS_ON_TRANSFORM : ExBasicActionList.DEFAULT_ACTION_LIST;
if (Arrays.binarySearch(allowedActions, actionId) < 0)
{
continue ACTIONS;
}
}
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(actionId);
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
actionHandler.useAction(player, actionHolder, false, false);
}
}
}
} }
} }
@ -231,6 +277,18 @@ public class AutoUseTaskManager
stopAutoUseTask(player); stopAutoUseTask(player);
} }
public void addAutoAction(PlayerInstance player, Integer actionId)
{
player.getAutoUseSettings().getAutoActions().add(actionId);
startAutoUseTask(player);
}
public void removeAutoAction(PlayerInstance player, int actionId)
{
player.getAutoUseSettings().getAutoActions().remove(actionId);
stopAutoUseTask(player);
}
public static AutoUseTaskManager getInstance() public static AutoUseTaskManager getInstance()
{ {
return SingletonHolder.INSTANCE; return SingletonHolder.INSTANCE;

View File

@ -27,6 +27,7 @@ public class AutoUseSettingsHolder
private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoActions = ConcurrentHashMap.newKeySet();
public AutoUseSettingsHolder() public AutoUseSettingsHolder()
{ {
@ -46,4 +47,9 @@ public class AutoUseSettingsHolder
{ {
return _autoSkills; return _autoSkills;
} }
public Collection<Integer> getAutoActions()
{
return _autoActions;
}
} }

View File

@ -18,6 +18,10 @@ package org.l2jmobius.gameserver.network.clientpackets.autoplay;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@ -88,6 +92,10 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId());
} }
else // action
{
AutoUseTaskManager.getInstance().removeAutoAction(player, shortcut.getId());
}
return; return;
} }
@ -115,6 +123,17 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
if (Config.ENABLE_AUTO_BUFF && (skill != null)) if (Config.ENABLE_AUTO_BUFF && (skill != null))
{ {
AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId());
return;
}
// action
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(shortcut.getId());
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
AutoUseTaskManager.getInstance().addAutoAction(player, shortcut.getId());
}
} }
} }
} }

View File

@ -16,22 +16,32 @@
*/ */
package org.l2jmobius.gameserver.taskmanager; package org.l2jmobius.gameserver.taskmanager;
import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.IItemHandler;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.ItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.EtcItem;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.AbnormalType;
import org.l2jmobius.gameserver.model.skills.BuffInfo;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.AffectScope; import org.l2jmobius.gameserver.model.skills.targets.AffectScope;
import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
/** /**
* @author Mobius * @author Mobius
@ -175,6 +185,42 @@ public class AutoUseTaskManager
} }
} }
} }
ACTIONS: for (Integer actionId : player.getAutoUseSettings().getAutoActions())
{
final BuffInfo info = player.getEffectList().getFirstBuffInfoByAbnormalType(AbnormalType.BOT_PENALTY);
if (info != null)
{
for (AbstractEffect effect : info.getEffects())
{
if (!effect.checkCondition(actionId))
{
player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REPORTED_AS_AN_ILLEGAL_PROGRAM_USER_SO_YOUR_ACTIONS_HAVE_BEEN_RESTRICTED);
break ACTIONS;
}
}
}
// Do not allow to do some action if player is transformed.
if (player.isTransformed())
{
final int[] allowedActions = player.isTransformed() ? ExBasicActionList.ACTIONS_ON_TRANSFORM : ExBasicActionList.DEFAULT_ACTION_LIST;
if (Arrays.binarySearch(allowedActions, actionId) < 0)
{
continue ACTIONS;
}
}
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(actionId);
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
actionHandler.useAction(player, actionHolder, false, false);
}
}
}
} }
} }
@ -231,6 +277,18 @@ public class AutoUseTaskManager
stopAutoUseTask(player); stopAutoUseTask(player);
} }
public void addAutoAction(PlayerInstance player, Integer actionId)
{
player.getAutoUseSettings().getAutoActions().add(actionId);
startAutoUseTask(player);
}
public void removeAutoAction(PlayerInstance player, int actionId)
{
player.getAutoUseSettings().getAutoActions().remove(actionId);
stopAutoUseTask(player);
}
public static AutoUseTaskManager getInstance() public static AutoUseTaskManager getInstance()
{ {
return SingletonHolder.INSTANCE; return SingletonHolder.INSTANCE;

View File

@ -27,6 +27,7 @@ public class AutoUseSettingsHolder
private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSupplyItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoPotionItems = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet(); private final Collection<Integer> _autoSkills = ConcurrentHashMap.newKeySet();
private final Collection<Integer> _autoActions = ConcurrentHashMap.newKeySet();
public AutoUseSettingsHolder() public AutoUseSettingsHolder()
{ {
@ -46,4 +47,9 @@ public class AutoUseSettingsHolder
{ {
return _autoSkills; return _autoSkills;
} }
public Collection<Integer> getAutoActions()
{
return _autoActions;
}
} }

View File

@ -18,6 +18,10 @@ package org.l2jmobius.gameserver.network.clientpackets.autoplay;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@ -88,6 +92,10 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId());
} }
else // action
{
AutoUseTaskManager.getInstance().removeAutoAction(player, shortcut.getId());
}
return; return;
} }
@ -115,6 +123,17 @@ public class ExRequestActivateAutoShortcut implements IClientIncomingPacket
if (Config.ENABLE_AUTO_BUFF && (skill != null)) if (Config.ENABLE_AUTO_BUFF && (skill != null))
{ {
AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId()); AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId());
return;
}
// action
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(shortcut.getId());
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
AutoUseTaskManager.getInstance().addAutoAction(player, shortcut.getId());
}
} }
} }
} }

View File

@ -16,22 +16,32 @@
*/ */
package org.l2jmobius.gameserver.taskmanager; package org.l2jmobius.gameserver.taskmanager;
import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ActionData;
import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.IItemHandler;
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
import org.l2jmobius.gameserver.handler.ItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler;
import org.l2jmobius.gameserver.handler.PlayerActionHandler;
import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.EtcItem;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.AbnormalType;
import org.l2jmobius.gameserver.model.skills.BuffInfo;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.AffectScope; import org.l2jmobius.gameserver.model.skills.targets.AffectScope;
import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
/** /**
* @author Mobius * @author Mobius
@ -175,6 +185,42 @@ public class AutoUseTaskManager
} }
} }
} }
ACTIONS: for (Integer actionId : player.getAutoUseSettings().getAutoActions())
{
final BuffInfo info = player.getEffectList().getFirstBuffInfoByAbnormalType(AbnormalType.BOT_PENALTY);
if (info != null)
{
for (AbstractEffect effect : info.getEffects())
{
if (!effect.checkCondition(actionId))
{
player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REPORTED_AS_AN_ILLEGAL_PROGRAM_USER_SO_YOUR_ACTIONS_HAVE_BEEN_RESTRICTED);
break ACTIONS;
}
}
}
// Do not allow to do some action if player is transformed.
if (player.isTransformed())
{
final int[] allowedActions = player.isTransformed() ? ExBasicActionList.ACTIONS_ON_TRANSFORM : ExBasicActionList.DEFAULT_ACTION_LIST;
if (Arrays.binarySearch(allowedActions, actionId) < 0)
{
continue ACTIONS;
}
}
final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(actionId);
if (actionHolder != null)
{
final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler());
if (actionHandler != null)
{
actionHandler.useAction(player, actionHolder, false, false);
}
}
}
} }
} }
@ -231,6 +277,18 @@ public class AutoUseTaskManager
stopAutoUseTask(player); stopAutoUseTask(player);
} }
public void addAutoAction(PlayerInstance player, Integer actionId)
{
player.getAutoUseSettings().getAutoActions().add(actionId);
startAutoUseTask(player);
}
public void removeAutoAction(PlayerInstance player, int actionId)
{
player.getAutoUseSettings().getAutoActions().remove(actionId);
stopAutoUseTask(player);
}
public static AutoUseTaskManager getInstance() public static AutoUseTaskManager getInstance()
{ {
return SingletonHolder.INSTANCE; return SingletonHolder.INSTANCE;