Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Auto Pociones (Devlin)

Iniciado por Swarlog, Jul 27, 2025, 12:05 AM

Tema anterior - Siguiente tema

Swarlog



Index: data/xml/items/0700-0799.xml
===================================================================
--- data/xml/items/0700-0799.xml	(revision 112)
+++ data/xml/items/0700-0799.xml	(working copy)
@@ -329,7 +329,7 @@
 		<set name="price" val="2000" />
 		<set name="is_stackable" val="true" />
 		<set name="is_oly_restricted" val="true" />
-		<set name="handler" val="ItemSkills" />
+		<set name="handler" val="SoulShots" />
 		<set name="item_skill" val="2279-2" />
 		<set name="use_condition" val="{{uc_transmode_exclude;{tt_flying}}}" />
 	</item>
Index: data/xml/items/1500-1599.xml
===================================================================
--- data/xml/items/1500-1599.xml	(revision 112)
+++ data/xml/items/1500-1599.xml	(working copy)
@@ -265,7 +265,7 @@
 		<set name="reuse_delay" val="10000" />
 		<set name="is_stackable" val="true" />
 		<set name="is_oly_restricted" val="true" />
-		<set name="handler" val="ItemSkills" />
+		<set name="handler" val="SoulShots" />
 		<set name="item_skill" val="2037-1" />
 		<set name="use_condition" val="{{uc_transmode_exclude;{tt_flying}}}" />
 		<set name="shared_reuse_group" val="10" />
Index: data/xml/items/5500-5599.xml
===================================================================
--- data/xml/items/5500-5599.xml	(revision 112)
+++ data/xml/items/5500-5599.xml	(working copy)
@@ -673,7 +673,7 @@
 		<set name="reuse_delay" val="500" />
 		<set name="is_stackable" val="true" />
 		<set name="is_oly_restricted" val="true" />
-		<set name="handler" val="ItemSkills" />
+		<set name="handler" val="SoulShots" />
 		<set name="item_skill" val="2166-2" />
 	</item>
 	<item id="5593" type="EtcItem" name="SP Scroll: Low Grade">
Index: java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java	(revision 112)
+++ java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java	(working copy)
@@ -14,18 +14,24 @@
  */
 package net.sf.l2j.gameserver.handler.itemhandlers;
 
+import net.sf.l2j.gameserver.ThreadPoolManager;
 import net.sf.l2j.gameserver.handler.IItemHandler;
 import net.sf.l2j.gameserver.model.L2ItemInstance;
 import net.sf.l2j.gameserver.model.ShotType;
 import net.sf.l2j.gameserver.model.actor.L2Playable;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 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.templates.item.L2Weapon;
 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;
+	
 	private static final int[] SKILL_IDS =
 	{
 		2039,
@@ -47,6 +53,108 @@
 		final L2Weapon 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)
 		{
@@ -87,4 +195,76 @@
 		activeChar.sendPacket(SystemMessageId.ENABLED_SOULSHOT);
 		Broadcast.toSelfAndKnownPlayersInRadiusSq(activeChar, new MagicSkillUse(activeChar, activeChar, SKILL_IDS[grade], 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.95*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.95*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
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 112)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -251,6 +251,24 @@
  */
 public final class L2PcInstance extends L2Playable
 {
+	private Map<Integer, Future<?>> _autoPotTasks = new HashMap<>();
+	
+	public boolean isAutoPot(int id)
+	{
+		return _autoPotTasks.keySet().contains(id);
+	}
+	
+	public void setAutoPot(int id, Future<?> task, boolean add)
+	{
+		if (add)
+			_autoPotTasks.put(id, task);
+		else
+		{
+			_autoPotTasks.get(id).cancel(true);
+			_autoPotTasks.remove(id);
+		}
+	}
+	
 	private BuffShop buffShop = null;
 	
 	public void setBuffShop(BuffShop val)
@@ -4321,6 +4339,22 @@
 			teleToLocation(184351, 20318, -3174, 0);
 		}
 		
+		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);
+		}
+		
 		return true;
 	}
 

By Devlin