Перейти к содержанию
Авторизация  
4atty

ACP

Рекомендуемые сообщения

Можно ли добавить .acp бесплатно на пв сборку?) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, 4atty сказал:

Можно ли добавить .acp бесплатно на пв сборку?) 

 

3 часа назад, Demoncool сказал:

1000р

Ваш ответ флуд, автором четко было написано "Бесплатно".

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 23.09.2018 в 21:43, 4atty сказал:

Можно ли добавить .acp бесплатно на пв сборку?) 

Тоже интересует UP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 01.04.2017 в 11:00, Kopwnz сказал:

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

 

 

  ОТКРЫТЬ (Скрыть контент)

 

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

game/data/scripts/handlers/voice/

Спойлер



/**
 * Created by L2jGroot team on 25.07.2015.
 */
package handlers.voice;

import ru.catssoftware.gameserver.handler.IItemHandler;
import ru.catssoftware.gameserver.handler.IVoicedCommandHandler;
import ru.catssoftware.gameserver.handler.ItemHandler;
import ru.catssoftware.gameserver.handler.VoicedCommandHandler;
import ru.catssoftware.gameserver.model.L2ItemInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;

import java.util.HashMap;

public class Acp implements IVoicedCommandHandler {

    private static String[] commands = {"acpon", "acpoff"};
    //    *********************** ИД Банок
    private static int ID_HEAL_CP = 5592;
    private static int ID_HEAL_MP = 6036;
    private static int ID_HEAL_HP = 1539;
    //    *********************** USE FULL
//    Включить / Выключить
    private static boolean ACP_ON = true;
    //    Минимальный уровень, с которого можно использовать ACP
    private static int ACP_MIN_LVL = 0;
    //    Указываеться в % уровень, с которого начинаем регенить
    private static int ACP_HP_LVL = 70;
    private static int ACP_CP_LVL = 70;
    private static int ACP_MP_LVL = 70;
    private static int ACP_MILI_SECONDS_FOR_LOOP = 1000;
    //    Только для премиумов?
    private static boolean ACP_PREMIUM = false;
    //    Что именно автоматически регеним
    private static boolean ACP_CP = true;
    private static boolean ACP_MP = true;
    private static boolean ACP_HP = true;
    private static HashMap<String, Thread> userAcpMap = new HashMap<String, Thread>();
//    private volatile boolean acpUserOn = false;

    public static void main(String[] args) {
        VoicedCommandHandler.getInstance().registerVoicedCommandHandler(new Acp());
    }

    public static Acp getInstance() {

        return null;
    }

    @Override
    public String getDescription(String command) {
        if (command.equals("acpon"))
            return "Включить автоматическое восстановление HP/CP/MP";
        else if (command.equals("acpoff"))
            return "Выключить автоматическое восстановление HP/CP/MP";
        return null;
    }

    @Override
    public String[] getVoicedCommandList() {
        return commands;
    }

    @Override
    public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) {
//              Есть ли такой вообще в мире
        if (activeChar == null) {
            return false;
        }

        if (command.equals("acpon")) {
            if (!ACP_ON) {
                activeChar.sendMessage("Функция отключена на сервере!");
                return false;
            } else {
                if (userAcpMap.containsKey(activeChar.toString())) {
                    activeChar.sendMessage("Уже включено!");
                } else {
                    activeChar.sendMessage("Acp включен!");
                    Thread t = new Thread(new AcpHealer(activeChar));
                    userAcpMap.put(activeChar.toString(), t);
                    t.start();
                    return true;
                }
            }
        } else if (command.equals("acpoff")) {
            if (!userAcpMap.containsKey(activeChar.toString())) {
                activeChar.sendMessage("Не было включено");
            } else {
                userAcpMap.remove(activeChar.toString()) //here we get thread and remove it from map
                        .interrupt(); //and interrupt it
                activeChar.sendMessage("Отключено");
            }
        }
        return false;
    }

    private class AcpHealer implements Runnable {

        L2PcInstance activeChar;

        public AcpHealer(L2PcInstance activeChar) {
            this.activeChar = activeChar;
        }

        @Override
        public void run() {
            try {
                while (true) {
//                  Проверяем уровень
                    if (activeChar.getLevel() >= ACP_MIN_LVL) {
//                        Проверяем нужен ли нам премиум
                        if (!(activeChar.getPremiumService() > 1 && ACP_PREMIUM)) {
//                            Проверяем, есть ли у нас хотя бы одна банка чего-то
                            L2ItemInstance cpBottle = activeChar.getInventory().getItemByItemId(ID_HEAL_CP);
                            L2ItemInstance hpBottle = activeChar.getInventory().getItemByItemId(ID_HEAL_HP);
                            L2ItemInstance mpBottle = activeChar.getInventory().getItemByItemId(ID_HEAL_MP);

                            if (hpBottle != null && hpBottle.getCount() > 0) {
//                               Проверяем наш уровень здоровья
                                if ((activeChar.getStatus().getCurrentHp() / activeChar.getMaxHp()) * 100 < ACP_HP_LVL && ACP_HP) {
                                    IItemHandler handlerHP = ItemHandler.getInstance().getItemHandler(hpBottle.getItemId());
                                    if (handlerHP != null) {
                                        handlerHP.useItem(activeChar, hpBottle);
                                        activeChar.sendMessage("ACP: Восстановлено HP");
                                    }
                                }
//                               Проверяем наш уровень CP
                                if (cpBottle != null && cpBottle.getCount() > 0) {
                                    if ((activeChar.getStatus().getCurrentCp() / activeChar.getMaxCp()) * 100 < ACP_CP_LVL && ACP_CP) {
                                        IItemHandler handlerCP = ItemHandler.getInstance().getItemHandler(cpBottle.getItemId());
                                        if (handlerCP != null) {
                                            handlerCP.useItem(activeChar, cpBottle);
                                            activeChar.sendMessage("ACP: Восстановлено CP");
                                        }
                                    }
                                }
//                              Проверяем наш уровень MP
                                if (mpBottle != null && mpBottle.getCount() > 0) {
                                    if ((activeChar.getStatus().getCurrentMp() / activeChar.getMaxMp()) * 100 < ACP_MP_LVL && ACP_MP) {
                                        IItemHandler handlerMP = ItemHandler.getInstance().getItemHandler(mpBottle.getItemId());
                                        if (handlerMP != null) {
                                            handlerMP.useItem(activeChar, mpBottle);
                                            activeChar.sendMessage("ACP: Восстановлено MP");
                                        }
                                    }
                                }
                            } else {
                                activeChar.sendMessage("У Вас нечем регениться");
                                return;
                            }
                        } else {
                            activeChar.sendMessage("Доступно только премиум чарам!");
                            return;
                        }
                    } else {
                        activeChar.sendMessage("Доступно только с " + ACP_MIN_LVL + " уровня!");
                        return;
                    }
                    Thread.sleep(ACP_MILI_SECONDS_FOR_LOOP);
                }
            } catch (InterruptedException e) {
                //nothing
            } catch (Exception e) {
                _log.warn(e.getMessage(), e);
                Thread.currentThread().interrupt();
            } finally {
                userAcpMap.remove(activeChar.toString());
            }
        }
    }

}


 

 

Изменено пользователем htmlslqxml

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, htmlslqxml сказал:

 

незнаю для какой это сборки но для ПВ врятли подойдет, по путям смотрю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...