Jump to content

Question

Posted

Hello guys.

 

I have a problem with this code.

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;
 	}


Where should I add this part in L2PcInstance .

		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;
 	}

Thanks!

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...