Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Auto pociones

Iniciado por Swarlog, Ago 19, 2022, 01:20 AM

Tema anterior - Siguiente tema

Swarlog

Encontre el codigo, no lo he testeado.

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