Реализация acp как соски

Тема в разделе "Manuals / Мануалы", создана пользователем vasilachyk, 20 ноя 2017.

  1. vasilachyk

    vasilachyk Капля-Доверия
    Админы не рекомендуют.

    Регистрация:
    17 ноя 2017
    Сообщения:
    156
    Симпатии:
    11
    Skype:
    l2meganet.org.ua
    Index: data/xml/items/0700-0799.xml
    ===================================================================
    --- data/xml/items/0700-0799.xml
    +++ 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
    +++ 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
    +++ 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
    +++ 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;
    }
     

Партнеры