i use acis but here is the code
### Eclipse Workspace Patch 1.0
#P aCis_gameserver
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 361)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -325,6 +325,24 @@
/** The active_boxes_characters. */
public List active_boxes_characters = new ArrayList<>();
+ private Map> _autoPotTasks = new HashMap<>();
+
+ public boolean isAutoPot(int id)
+ {
+ return _autoPotTasks.keySet().contains(id);
+ }
+
+ public void setAutoPot(int id, Futuretask, boolean add)
+ {
+ if (add)
+ _autoPotTasks.put(id, task);
+ else
+ {
+ _autoPotTasks.get(id).cancel(true);
+ _autoPotTasks.remove(id);
+ }
+ }
+
public class AIAccessor extends L2Character.AIAccessor
{
protected AIAccessor()
@@ -11089,6 +11107,22 @@
if (isInBoat())
activeChar.sendPacket(new GetOnVehicle(getObjectId(), getBoat().getObjectId(), getInVehiclePosition()));
+ if (isAutoPot(728))
+ {
+ sendPacket(new ExAutoSoulShot(728, 0));
+ setAutoPot(728, null, false);
+ }
+ if (isAutoPot(1539))
+ {
+ sendPacket(new ExAutoSoulShot(1539, 0));
+ setAutoPot(1539, null, false);
+ }
+ if (isAutoPot(5592))
+ {
+ sendPacket(new ExAutoSoulShot(5592, 0));
+ setAutoPot(5592, null, false);
+ }
+
// No reason to try to broadcast shop message if player isn't in store mode
if (isInStoreMode())
{
Index: java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java (revision 358)
+++ java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java (working copy)
@@ -15,6 +15,7 @@
package net.sf.l2j.gameserver.handler.itemhandlers;
import net.sf.l2j.commons.random.Rnd;
+import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.ShotType;
import net.sf.l2j.gameserver.model.actor.L2Playable;
@@ -23,11 +24,18 @@
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.model.item.kind.Weapon;
import net.sf.l2j.gameserver.network.SystemMessageId;
+import net.sf.l2j.gameserver.network.serverpackets.ExAutoSoulShot;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
import net.sf.l2j.gameserver.util.Broadcast;
public class SoulShots implements IItemHandler
{
+
+ private static final int
+ MANA_POT_CD = 2,
+ HEALING_POT_CD = 11, // DO NOT PUT LESS THAN 10
+ CP_POT_CD = 2;
+
@Override
public void useItem(L2Playable playable, ItemInstance item, boolean forceUse)
{
@@ -39,6 +47,108 @@
final Weapon weaponItem = activeChar.getActiveWeaponItem();
final int itemId = item.getItemId();
+ if (itemId == 728 || itemId == 1539 || itemId == 5592)
+ {
+ switch (itemId)
+ {
+ case 728: // mana potion
+ {
+ if (activeChar.isAutoPot(728))
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(728, 0));
+ activeChar.sendMessage("Deactivated auto mana potions.");
+ activeChar.setAutoPot(728, null, false);
+ }
+ else
+ {
+ if (activeChar.getInventory().getItemByItemId(728) != null)
+ {
+ if (activeChar.getInventory().getItemByItemId(728).getCount() > 1)
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(728, 1));
+ activeChar.sendMessage("Activated auto mana potions.");
+ activeChar.setAutoPot(728, ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoPot(728, activeChar), 1000, MANA_POT_CD*1000), true);
+ }
+ else
+ {
+ MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2279, 2, 0, 100);
+ activeChar.broadcastPacket(msu);
+
+ ItemSkills is = new ItemSkills();
+ is.useItem(activeChar, activeChar.getInventory().getItemByItemId(728), true);
+ }
+ }
+ }
+
+ break;
+ }
+ case 1539: // greater healing potion
+ {
+ if (activeChar.isAutoPot(1539))
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(1539, 0));
+ activeChar.sendMessage("Deactivated auto healing potions.");
+ activeChar.setAutoPot(1539, null, false);
+ }
+ else
+ {
+ if (activeChar.getInventory().getItemByItemId(1539) != null)
+ {
+ if (activeChar.getInventory().getItemByItemId(1539).getCount() > 1)
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(1539, 1));
+ activeChar.sendMessage("Activated auto healing potions.");
+ activeChar.setAutoPot(1539, ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoPot(1539, activeChar), 1000, HEALING_POT_CD*1000), true);
+ }
+ else
+ {
+ MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2037, 1, 0, 100);
+ activeChar.broadcastPacket(msu);
+
+ ItemSkills is = new ItemSkills();
+ is.useItem(activeChar, activeChar.getInventory().getItemByItemId(1539), true);
+ }
+ }
+ }
+
+ break;
+ }
+ case 5592: // greater cp potion
+ {
+ if (activeChar.isAutoPot(5592))
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(5592, 0));
+ activeChar.sendMessage("Deactivated auto cp potions.");
+ activeChar.setAutoPot(5592, null, false);
+ }
+ else
+ {
+ if (activeChar.getInventory().getItemByItemId(5592) != null)
+ {
+ if (activeChar.getInventory().getItemByItemId(5592).getCount() > 1)
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(5592, 1));
+ activeChar.sendMessage("Activated auto cp potions.");
+ activeChar.setAutoPot(5592, ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoPot(5592, activeChar), 1000, CP_POT_CD*1000), true);
+ }
+ else
+ {
+ MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2166, 2, 0, 100);
+ activeChar.broadcastPacket(msu);
+
+ ItemSkills is = new ItemSkills();
+ is.useItem(activeChar, activeChar.getInventory().getItemByItemId(5592), true);
+ }
+ }
+ }
+
+ break;
+ }
+ }
+
+ return;
+ }
+
// Check if soulshot can be used
if (weaponInst == null || weaponItem.getSoulShotCount() == 0)
{
@@ -78,4 +188,76 @@
activeChar.sendPacket(SystemMessageId.ENABLED_SOULSHOT);
Broadcast.toSelfAndKnownPlayersInRadiusSq(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getId(), 1, 0, 0), 360000);
}
+
+ private class AutoPot implements Runnable
+ {
+ private int id;
+ private L2PcInstance activeChar;
+
+ public AutoPot(int id, L2PcInstance activeChar)
+ {
+ this.id = id;
+ this.activeChar = activeChar;
+ }
+
+ @Override
+ public void run()
+ {
+ if (activeChar.getInventory().getItemByItemId(id) == null)
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(id, 0));
+ activeChar.setAutoPot(id, null, false);
+ return;
+ }
+
+ switch (id)
+ {
+ case 728:
+ {
+ if (activeChar.getCurrentMp() < 0.70*activeChar.getMaxMp())
+ {
+ MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2279, 2, 0, 100);
+ activeChar.broadcastPacket(msu);
+
+ ItemSkills is = new ItemSkills();
+ is.useItem(activeChar, activeChar.getInventory().getItemByItemId(728), true);
+ }
+
+ break;
+ }
+ case 1539:
+ {
+ if (activeChar.getCurrentHp() < 0.70*activeChar.getMaxHp())
+ {
+ MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2037, 1, 0, 100);
+ activeChar.broadcastPacket(msu);
+
+ ItemSkills is = new ItemSkills();
+ is.useItem(activeChar, activeChar.getInventory().getItemByItemId(1539), true);
+ }
+
+ break;
+ }
+ case 5592:
+ {
+ if (activeChar.getCurrentCp() < 0.70*activeChar.getMaxCp())
+ {
+ MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2166, 2, 0, 100);
+ activeChar.broadcastPacket(msu);
+
+ ItemSkills is = new ItemSkills();
+ is.useItem(activeChar, activeChar.getInventory().getItemByItemId(5592), true);
+ }
+
+ break;
+ }
+ }
+
+ if (activeChar.getInventory().getItemByItemId(id) == null)
+ {
+ activeChar.sendPacket(new ExAutoSoulShot(id, 0));
+ activeChar.setAutoPot(id, null, false);
+ }
+ }
+ }
}
\ No newline at end of file