1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

В разработке [1.5.2] [MCPC+] Изменение геймплея (Получение урона, максимальное ХП)

Тема в разделе "Разработка плагинов для новичков", создана пользователем SuperCraft, 18 авг 2015.

  1. Автор темы
    SuperCraft

    SuperCraft Активный участник Пользователь

    Баллы:
    88
    Здравствуйте. Долго делал мод на изменение геймплея, пока один умный человек не посоветовал сделать это все плагином. Я уже создавал тему в запросах на создание плагинов, с того времени уже изменил должным образом интерфейс.
    [​IMG]
    Теперь осталось сделать замену баганому MoreHealth.
    В чем будет заключаться идея плагина:
    - Максимальное здоровье будет рассчитываться по формуле LHealth+AHealth.
    Где LHealth - максимальное здоровье на данном уровне, Ahealth - здоровье, суммарно добавляемое текущим комплектом брони.
    - Урон будет уменьшаться на величину брони (Полученный урон = Входящий урон - Броня).
    - Дополнительно будет получаться урон от стихий (Вода, воздух, металл, свет, земля).
    - Защита от стихий будет уменьшать урон аналогично работе брони.
    - Регенерация будет зависеть от уровня персонажа (будет повышаться либо скорость регенерации здоровья, либо количество восстановления за раз).
    - Базовый урон будет зависеть от уровня, оружие усиливает базовый урон (а не игнорирует его).
    Это основное, если все пойдет идеально, планирую изменить:
    - Эффекты зелий
    - Работу зачарования
    - Получение урона в лаве/в огне/от огня/от падения/от утопления

    Сейчас все основное реализовано модом, НО установить его на клиент мне не удалось, работал только при запуске в eclipse :confused:. Сейчас думаю приступить к разработке.
    Сделал по гайду пробный плагин, работает. Хочу спросить, будет ли нормально, если я буду каждый тик проверять, какая броня одета на игрока и какой его уровень для установки ему максимального хп, или лучше это сделать иначе? Так же, как посоветуете реализовать изменение работы стандартной брони и добавление доп. урона от стихий и его уменьшение?
     
    Последнее редактирование: 18 авг 2015
  2. leonmark061

    leonmark061 Активный участник Пользователь

    Баллы:
    76
    Незачем делать проверку с каждым тиком. Используйте ивенты.
    А что именно нужно изменить?
     
  3. Автор темы
    SuperCraft

    SuperCraft Активный участник Пользователь

    Баллы:
    88
    "Урон будет уменьшаться на величину брони (Полученный урон = Входящий урон - Броня)."
    Так же броня при каждом ударе, если полученный урон больше нуля должна терять 1 ед. прочности, если показатель брони выше входящего урона или равен ему, прочность брони не отнимается.
    Насколько я знаю, нет ивента одевания брони в 1.5.2.
     
    Последнее редактирование: 19 авг 2015
  4. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Зато есть событие урона, во время которого и можно проверять и изменять броню.
     
  5. Автор темы
    SuperCraft

    SuperCraft Активный участник Пользователь

    Баллы:
    88
    Да, я так и делаю, но ведь броня еще и здоровье добавляет.
     
  6. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ну для добавления здоровья шедулер подойдёт, но делать его на каждый тик вряд ли целесообразно, лучше посекундно. Ну или слушать события клика по слотам брони [​IMG]
     
  7. Автор темы
    SuperCraft

    SuperCraft Активный участник Пользователь

    Баллы:
    88
    Не знаю, как сделать нормальный перебор игроков, сейчас осуществляется вот так, но что-то мне подсказывает, что этот код полный бред.

    Код:
       @Override
                public void run() {
                    List<Player> Playerss = getServer().getWorld("World").getPlayers();
                    while(Playerss.iterator().hasNext())    
                    {
                        getLogger().info(Playerss.iterator().next().getPlayerListName());
                    }
     
    Последнее редактирование: 19 авг 2015
  8. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Bukkit.getOnlinePlayers
     
  9. Автор темы
    SuperCraft

    SuperCraft Активный участник Пользователь

    Баллы:
    88
    Думаю добавить конфиг, для удобства добавления свойств предметов, структуру планирую примерно такую:

    ArmorStats:
    Health:
    4002: 10
    4003: 15
    ProtectWater:
    4002: 5
    4003: 8

    Не могу разобраться, как достать из конфига, например, список пар "id: health" и перебрать их все, сравнивая id с тем, что одето на игроке и прибавляя максимальное здоровье. Вот такой код с ошибками:

    Код:
    newConfig = YamlConfiguration.loadConfiguration(configFile);
    ...
    List<Map<?, ?>> ListHPArmor = getConfig().getMapList("ArmorStats.Health");
                        for (Map<?, ?> elem : ListHPArmor)
                        {
                            int arr[];
                            elem.values().toArray(arr[2]); //Вот тут не знаю, как взять текущий ключ и значение
    
                            if (arr[1]==IdItemInSlot)
                            {
                                player.setMaxHealth(player.getMaxHealth()+arr[2]);
                            }
                                 
                        }
    Пишет The method toArray(T[]) in the type Collection<capture#2-of ?> is not applicable for the arguments (int)
    В то же время, <?, ?> заменить на <int, int> тоже не получается.
    Как мне сделать перебор всех пар и получить ключ и значение для текущей пары в цикле?
     

Поделиться этой страницей