L2jGroot Реально или фантастика?

Mangol

Путник
Пользователь
Победитель в номинации 2015
Сообщения
796
Розыгрыши
0
Репутация
965
Реакции
59
Баллы
0
Посмотреть вложение 2008
Посмотреть вложение 2009
Код:
/**
* 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());
            }
        }
    }

}
 

Пофапал на код. Надо позвать его в жопакод, нам нужны такие люди.
 
Кстати, там баг :D
Код:
  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;
  }
С финфаном сейчас сидим и ржем:D Если ХП банок нет, то оно вообще не работает)
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
А меня не возьмете? У меня летающий кот(
А ты умеешь кодеть так, чтоб нпе в шаут летело?)))0)

Анциента бери, однозначно нужен будет. Он умеет делать пЕар.
Анциент распиарит нашу тиму тем шо будет пытатся продать соурце
 
Последнее редактирование модератором:
Назад
Сверху Снизу