==-- | 1.10 PREMIUM | --==
Это обновление - большой шаг вперед для Heroes и будущего плагина! В этом обновлении присутствует значительное количество переработок, оптимизаций и новых функций, так как мы наконец-то перешли на новую версию 1.10. Как всегда, пожалуйста, сообщите нам, если у вас возникнут какие-либо проблемы с этим обновлением.
Вы ДОЛЖНЫ обновить все свои навыки до последней версии, иначе навыки не загрузятся!
Также рекомендуется сделать резервную копию старого damages.yml, а затем сгенерировать новый! Так как появились новые опции конфигурации!.
Поддерживаемые версии Minecraft
1.13.X, 1.14.X, 1.15.X, 1.16.X, 1.17.X, 1.18.X, 1.19.X, 1.20.X.
Новые возможности
- - damages.yml теперь содержит опцию
use-pvx-damage-multipliers
. Ранее это всегда было верно, так как при расчете урона учитывались пвп и пве модификаторы класса. Если вы не используете эту функцию, то просто установите значение false, что может незначительно улучшить производительность. - - damages.yml теперь содержит параметр
item-damage-priority
. Она имеет 5 режимов и определяет, что влияет на наносимый Героем урон. Ранее выбиралось наибольшее значение из всех классов (основного, дополнительного и расы). Рекомендуется выбрать вариант, который лучше всего подходит для ваших нужд, например, если вы используете только основной класс для нанесения урона, то выбирайте его, так как это значительно сокращает количество необходимых вычислений, что повышает производительность.
Доступны следующие варианты;
- - highest (проверяет, какое значение является самым высоким из трех классов)
- - primary (использует только первичный класс, если значение не существует, используйте глобальный урон, если глобальный урон не существует, используйте ваниль)
- - вторичный (используется только вторичный класс, если нет значения, используйте глобальный урон, если нет глобального урона, используйте ваниль)
- - race (используется только класс race, если нет значения, используйте глобальный урон, если нет значения, используйте ваниль)
- - none (не использовать масштабирование классов, вместо этого использовать глобальный урон, если он существует - а если не существует, то использовать ванильные значения).
- Атрибуты героя теперь доступны как переменные через MythicMobs! Это означает, что используя скриптовые навыки, вы можете использовать увеличение атрибутов для различных переменных навыков. Вы можете получить доступ к атрибуту героя, используя такой формат, как
<caster.var.hero_strength>
или <caster.var.hero_charisma>
. - Расширение для Placeholder API теперь реализовано непосредственно в Героях! Теперь нет необходимости использовать отдельный файл расширения!
- Добавлен новый скриптовый тип умения для пассивок! Это умение по сути будет вызывать умение MythicMob, когда пассивка применяется и когда она снимается. Поскольку существует более двух типов, в конфигурации была добавлена новая опция. Пожалуйста, перегенерируйте ваш script-skills.yml, чтобы увидеть новый формат и обновить навыки соответствующим образом.
Пример пассивного навыка;
- name: FieryPresence
on-apply-mythic-skill-id: FieryPresence-Apply
on-remove-mythic-skill-id: FieryPresence-Remove
type: PASSIVE
skill-types: BUFFING,ABILITY_PROPERTY_FIRE
Рекомендуется, чтобы эти мифические умения Apply и Remove по сути применяли и снимали ауру с мифических мобов. Это позволит вам еще больше настроить умения onTick, onApply и onRemove.
Функция
requires-target
теперь использует опцию 'type'. Если значение параметра "requires-target" было истинным, то используется новый тип умения
TARGETED
, а если ложным, то
ACTIVE
.
Изменения и оптимизация
- Смягчение больше не может быть настроено для каждого класса, просто из-за экспоненциального увеличения вычислений, которые требовались для этого.
- Теперь учитываются ТОЛЬКО значения смягчения от зачарований в файле damages.yml.
- Вызванные мобы теперь должны иметь улучшенное поведение ИИ
- Повышение опыта больше не применяется к игрокам, которые "оппонируют". Это означает, что даже если игрока притесняют и у него есть разрешение на прибавку к опыту, он не будет получать персональную прибавку к опыту независимо от этого.
Переработка обработчика урона
Обработка урона в Героях была полностью переписана! Это была основная проблема Героев, так как предыдущий обработчик повреждений DamageEvent превратился в кучу спагетти-кода с 11-летней историей. Это вызывало множество проблем, таких как ошибки и огромные потери производительности.
Поэтому старый код был полностью отброшен, а новый код и API написаны для обработки множества сложных аспектов повреждений в Героях. Например, определенные проверки, такие как, скажем, пользовательское смягчение, теперь выполняются при запуске, а не при каждом вызове события повреждения - поскольку не все пользователи используют пользовательское смягчение.
Для справки: в версии 1.9.30 прогон профилировщика в течение 15 минут (с двумя игроками) дал вклад более 100 мс процессорного времени. В аналогичном тесте в версии 1.10 это число снизилось до менее чем 5 мс, а в некоторых случаях затраченное время было настолько мало, что даже не отображалось в профилировщике. Это значительное улучшение и огромная работа по всестороннему сканированию и пониманию беспорядка, который представлял собой старый спагетти-код, и созданию чего-то нового, оптимизированного и эффективного.
Кроме того, кажется, что повреждения обрабатываются более последовательно и точно с этой переработкой. Но это все, пожалуйста, дайте нам знать, если вы встретите какие-либо ошибки!
Перезапись SkillConfigManager
SkillConfigManager был переписан, чтобы теперь кэшировать значения, считанные из конфигурации умений. В дополнение к другим изменениям, упомянутым в разделе API этого обновления,
теперь вы можете указать ЛЮБОЕ увеличение на атрибут или на уровень для ЛЮБОГО числового параметра навыка для ЛЮБОГО навыка. Например, вы можете указать
урон за ловкость
или
увеличение продолжительности за интеллект
для любого навыка. Для примера рассмотрим удар. Раньше вы могли увеличивать урон только на силу, как показано на рисунке;
Kick:
damage: 5
damage-increase-per-strength: 1
duration: 2500
Но теперь вы можете настроить что-то вроде этого, где вы можете использовать любой атрибут и даже
per-level
, чтобы навыки динамически масштабировались с атрибутами героя.
Kick:
damage: 5
damage-per-intellect: 0.5
duration: 2500
duration-increase-per-charisma: 500
Это изменение позволяет не только больше настраивать, но и повышает эффективность, уменьшая задержку плагина.
С помощью этого изменения вы теперь можете изменить приоритет SkillSetting в зависимости от класса и предпочтений. В config.yml вы можете найти этот раздел.
classes:
# При получении настройки для навыка, здесь вы можете указать тип приоритета. Возможные типы: "по умолчанию", "наивысший" или "основной".
skill-setting-priority: HIGHEST
Доступные настройки
DEFAULT -> Возвращает первый доступный набор навыков в порядке Primary, Secondary, Race, Global, Skills.yml. Например, если и вторичный класс, и расовый класс героя имеют настройки навыка для урона. Независимо от того, какой из них выше. Всегда будет возвращено значение из вторичного класса.
HIGHEST -> Возвращает наибольшее значение для параметра навыка, основанного на каждом из классов героя. Например, если у героя параметр "урон" равен 8 для его основного класса и 12 для его расы. Тогда используется значение 12. Это значение 12 будет использоваться, даже если в файле skills.yml указано более высокое значение, скажем, 24. В этом режиме только если ни первичный, ни вторичный, ни расовый класс, ни глобальный набор навыков не имеют указанных настроек, используется значение skills.yml.
PRIMARY -> Проверяет только первичный, глобальный и Skills.yml наборы навыков игрока. Аналогично стандартному в том, что предпочтение отдается первичному, а не глобальному. Если ни в первичном, ни в глобальном файле не задана настройка, то будет использоваться значение из файла skills.yml.
Переработка работы с монстрами
Объекты монстров теперь инициализируются сразу после появления монстра, а не по мере необходимости. Это снижает необходимую нагрузку на выполнение, запрашивающее объект монстра, поскольку они почти всегда загружаются в любом случае.
Удалено устаревшее использование хранения пользовательских атрибутов в сущности монстра. Это приводило к значительным задержкам сервера и больше не служило реальной цели, поэтому оно было удалено.
Устранение ошибок
- - Исправлена серьезная оплошность, связанная с тем, как обрабатывается смягчение брони и других характеристик. Ранее было сделано предположение, что ванильное смягчение не применяется после всех наших действий; однако я ошибался. Это означало, что при ношении брони, особенно с зачарованиями. Применяемое Героями смягчение будет применяться В ДОПОЛНЕНИЕ к ванильному смягчению. Вот почему защитные зачарования всегда были так сильны при использовании Героев. Теперь же Heroes автоматически корректирует пользовательское смягчение, обеспечивая правильное нанесение урона.
- - Побочным эффектом вышесказанного является то, что смягчение от пользовательских энчантов теперь применяется ТОЛЬКО при включенном пользовательском смягчении! Кроме того, значения, считанные в damages.yml для защиты, читаются как десятичные числа, например, 0.04 означает 4% на уровень энчанта || если пользовательское смягчение отключено, то применяются ванильные значения смягчения энчанта.
- - Исправлена проблема, из-за которой умения не исцеляли в бою
- - Эффекты, накладывающие дебафф "не спринтовать", теперь должны работать корректно. В частности, эффект SlowEffect и кастование теперь не позволят игроку ни спринтовать, ни джупить.
- - Исправлена проблема с SkillBaseSphere, которая приводила к исключению.
- - Исправлена проблема с SkillBaseMarkedTeleport, из-за которой частицы отображались некорректно.
- - Исправлена ошибка, из-за которой некоторые умения не передавали свое сообщение, а вместо этого выдавали предупреждение в консоли.
- - Прочность брони теперь учитывается правильно.
- - Исправлена ошибка, из-за которой броня могла быть экипирована при обстоятельствах, когда этого не должно быть.
- - Удален старый код, из-за которого здоровье по умолчанию устанавливалось неверно.
- - Исправлено значительное количество других различных ошибок и проблем.
Изменения API
- - Мифические мобы теперь имеют свой собственный подкласс CharacterTemplate под названием MythicMonster. Таким образом, герои НЕ БУДУТ переопределять статы мифического моба, независимо от любых настроенных значений. Кроме того, если мифический моб использует умение кастовать, прерывание героя теперь действительно применяется и к мифическому мобу.
- - SkillSetting теперь является абстрактным классом, который хранит статические объекты. Новый интерфейс
Setting<T>
теперь представляет SkillSetting, который возвращает определенную переменную параметра типа. - - Все методы, связанные с
SkillConfigManager.getUseSetting()
, были устаревшими, в пользу метода SkillConfigManager.getCachedUseSetting()
, который учитывает параметр типа SkillSetting. - - Ряд методов в CharacterDamageManager был обновлен, удален или устарел. Если вы хотите получить количество урона, наносимого героем, рекомендуется использовать
getMeleeDamage(Hero, Material)
или getProjectileDamage(Hero, ProjectileType)
. Помните, что эти значения не учитывают множители PvX и не включают бонусный урон от зачарований. - - HDamageListener теперь полностью устарел и больше не используется, вместо него основным обработчиком повреждений является класс DamageHandler.
Репозиторий nexus был обновлен. Обратите внимание, что URL репозитория был обновлен, но, как обычно, вы можете использовать Heroes API со следующим артефактом;
<repository>
<id>heroes-repo</id>
<url>https://nexus.hc.to/content/repositories/pub_snapshots/</url>
</repository>
<dependency>
<groupId>com.herocraftonline.heroes</groupId>
<artifactId>Heroes</artifactId>
<version>1.10-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
Заметки разработчика
В связи с многочисленными масштабными переделками, если используются какие-либо пользовательские навыки, они
необходимо должны быть перекомпилированы в
1.10-SNAPSHOT
, иначе они не будут загружаться. Это происходит потому, что мы изменили класс перечисления SkillSetting на интерфейс. Это изменение было сделано для оптимизации, более чистого кода и возможности кэширования значений.
Теперь существует несколько предустановленных реализаций SkillSetting, таких как SkillSettingInt, SkillSettingString, SkillSettingDouble и так далее. Вы даже можете создать свой собственный SkillSetting, который может, например, считывать конфигурацию, а затем возвращать пользовательский объект для использования в навыке.
Такие параметры SkillSetting, как
damage-increase-per-dexterity
,
duration-per-level
и т.д., теперь устарели. Это связано с тем, что SkillSettingInt и SkillSettingDouble автоматически учитывают все увеличения атрибутов и увеличения за уровень в каждой настройке навыка, как уже упоминалось. Поэтому эти устаревшие SkillSettings всегда будут возвращать 0. Следовательно, больше нет необходимости включать их в код.
Например, больше нет необходимости использовать такой код, как;
double damage = SkillConfigManager.getUseSetting(hero, this, SkillSetting.DAMAGE, 50, false);
final double damageIncrease = SkillConfigManager.getUseSetting(hero, this, SkillSetting.DAMAGE_INCREASE_PER_STRENGTH, 1.0, false);
damage += damageIncrease * hero.getAttributeValue(AttributeType.STRENGTH);
Теперь, это единственный код, необходимый для достижения того же эффекта;
double damage = SkillConfigManager.getCachedUseSetting(hero, this, SkillSetting.DAMAGE, 50.0)
Пожалуйста, не стесняйтесь сообщить нам, если у вас возникли какие-либо проблемы с новыми изменениями или вам требуется помощь с API.
*Это обновление было тщательно протестировано, но в связи с тем, что оно было полностью переписано, возможно, есть некоторые вещи, которые мы упустили.
Спасибо за поддержку Heroes на протяжении всех этих лет!