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

Плагин [MECH/FUN] ReActions - Что? Тогда? Иначе! [BukkitDev]

Тема в разделе "Релизы плагинов", создана пользователем fromgate, 16 июл 2013.

  1. SoSeDiK

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

    Баллы:
    76
    Имя в Minecraft:
    SoSeDiK
    Попробуй использовать MessageFilter. Он убирает сообщение, а не отсылает пустое.
    Флаг сравнивает указанные параметры (может быть и плейсхолдер, и переменная) со списком значений. Если хоть одно значение совпало - флаг сработает успешно.
    У меня нет доступа к компьютеру, не могу привести точный работающий пример. Надеюсь, ты поймёшь, как это работает. Примерно так, если не ошибаюсь (пример):
    Есть 3 команды. Первую можно использовать только если параметр com равен 2 или 3, а при использовании ставит его в com=1. Вторую можно использовать только при com=1 или 3, а при выполнении команды ставит com в значение 2. Аналогично и с третьей командой.
    При помощи этого флага можно проверить значение переменной com, при этом может быть несколько вариантов.
    Т.е. для первой команды: - 'COMPARE=param:com value1:2 vaule2:3' .
     
  2. Slorikworld

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

    Баллы:
    66
    Имя в Minecraft:
    Hexerpowers
    Здравствуй, @fromgate нужна твоя помощь. Вообще не получается настроить флаг region_players. Подробного описания ввода флагов с несколькими параметрами я так и не нашёл. Нужно настроить флаг на 2 игроков - то есть когда в рг 2 игрока, 3 будет телепортировать обратно. Очень нужно, помогите пожалуйста!
     
  3. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Предложение: добавить флаг на проверку кол-ва блоков в выделенной области. Очень бы пригодилась!
    отвечаю внатуре

    Назовем этот флаг RG_SELECTOR.
    Если RG_SELECTOR=1000, то для того что бы флаг вернул true, игрок должен иметь минимум 1000 выделенных блоков на момент срабатывания активатора.
    '!RG_SELECTOR=1000' - максимум 1000 выделенных блоков.

    Так же в связке с этим флагом отлично пойдет аргумент
    [distance:<дистанция к выделенной области>]

    Если
    - 'RG_SELECTOR=count:1000 distance:50' - флаг возвращает true когда у игрока будет выделено 1к блоков и он будет находится не дальше 50-ти блоков от границы этого выделения (или от её центра...)
    Ещё один чудотворный аргумент, который отлично сочитался бы в паре с этим замечательным флагом, это filter
    Если RG_SELECTOR=filter:46,52,54,169,... - флаг возвращает false (именно false!) если в области, которую выделил игрок, имеются блоки с указаными ID (указывать можна сколько угодно блоков... (в идеале также и Entity)).

    В общем уже имеем 3 аргумента:
    count, distance и filter. И каждый аргумент опциональный. Главной задачей флага является проверка условий в выделенной области...

    Или можна сделать это как 3 отдельных флага:
    SELECTED_COUNT
    SELECTED_DISTANCE
    SELECTED_FILTER
    Разницы вроде нет...
     
    Последнее редактирование: 21 янв 2017
  4. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Добавил для ReActions автосборку на CircleCI. Теперь там будут последние сборки, а я сэкономлю время на копирование ссылок с дропбокса ;)

    https://circleci.com/gh/fromgate/ReActions
     
  5. boomcss1

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

    Баллы:
    76
    Имя в Minecraft:
    Pup
    Помогите о всемогущие шарящие в этом плагине:D
    Задумка:

    Игрок доходит скажем до опр. точки, там он автоматом сохраняется и теперь при смерти, он попадает на эту точку. От этой точки игрок доходит до другой, и при смерти он уже телепортируется на новую точку и так далее.
    Но при прописке команды /home или /spawn, то все его точки обнуляются, т.е. при смерте он уже не телепортируется на последнею точку.
     
  6. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Код:
    #примеры активаторов сохранения
    #плита
    PLATE:
      checkp1:
        x: x
        y: y
        z: z
        actions:
        - var_player_set=id:CheckP value:%player_loc%
    #вход в Рг
    REGION_ENTER:
      checkp2:
        region: ThisRg
        actions:
        - var_player_set=id:CheckP value:%player_loc%
    #нахождение в Рг(может не сработать вовремя)
    REGION:
      checkp3:
        region: ThisRg
        actions:
        - var_player_set=id:CheckP value:%player_loc%
    
    #респавн на чекпоинт. В любом случае сначала телепортирует к стандартному спавну игрока
    PLAYER_RESPAWN:
      AfterCheck:
        cause: ANY
        flags:
        - var_player_exist=id:CheckP
        actions:
        tp=%var:checkp%
    #снос чекпоинта
    COMMAND:
      UnCheck1:
        override: false
        regex: false
        command: home
        flags:
        - var_player_exist=id:CheckP
        actions:
        - var_player_clear=id:CheckP
      UnCheck2:
        override: false
        regex: false
        command: spawn
        flags:
        - var_player_exist=id:CheckP
        actions:
        - var_player_clear=id:CheckP
     
  7. mechwd

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

    Баллы:
    66
    Имя в Minecraft:
    mechwd
    Ребят..
    Хочу боссов сделать
    Должен быть дроп 1 золотое яблоко и 1 алмаз
    Падает только яблоко
    Код:
    BUTTON:
      lite:
        world: world
        x: -1083
        y: 2
        z: 2771
        actions:
        - mob_spawn=type:zombie loc:world,-1085.492,1.0,2777.382,-114.117,19.199 health:300 dmg:2 weapon:{type:iron_sword enchantments:damage_all:1} helm:298 chest:299 leg:301 boot:302 name:LiteBoss num:3 drop:set1:{item1:{type:322 name:{&6Яблоко Эдема} lore:{&7Говорят, что из-за того, что\n&7давно-давно в далекой стране\n&7кто-то сорвал это яблоко\n&7появилась жизнь на Земле}}} set2:{item1:{type:264 name:{&bЗаряженный кристал} lore:{&7Каждый хочет получить эти кристалы\n&7из-за них были воины\n&7ходят слухи, что их энергии хватит для того\n&7чтоб создать самую мощную и крепкую броню}}}
    
     
  8. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Похоже, что не хватает шанса в наборе предметов.
    Я бы сделал так:

    ... set1:{item1:{...} chance:50} set2:{item1:{...} chance:50}

    Есть даже лучше способ:
    ... set1:{item1:{...} item2:{...}}
    И без шанса (chance) будет работать
     
    Последнее редактирование: 12 фев 2017
  9. lero90

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

    Баллы:
    63
    fromgate, версию для sponge можно ждать?
     
  10. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Ждать-то можно. Просто из спортивного интереса просто делать версию для sponge не буду. Жалко времени.
    У меня есть планы по "универсиализации" (а может даже мультиплатформенности) ReActions. Вот тогда можно добавить поддержку Sponge. Наравне со всеми прочими.
     
    Последнее редактирование: 13 фев 2017
  11. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Вопрос к автору.

    Не очень корректно работает действие ITEM_SLOT. Если слот пустой, то поместить в него ничего нельзя, вылетает ошибка.
    С Java только начал знакомится, но с Вашего разрешения, я взглянул на код в файле ActionItems.java, там есть вот такая строчка (101):
    ItemStack oldItem = p.getInventory().getItem(slotNum).clone();

    Здесь, если getItem(slotNum) возвратит null, то метод clone() будет генерировать исключение, что собственно и происходит, если указанный слот пустой.

    Нельзя ли как-нибудь это исправить?

    Спасибо.
     
  12. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
  13. ВukkitPrоfi

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

    Баллы:
    76
    Сделал активатор ITEM_CLICK:
    Код:
    ITEM_CLICK:
      vip:
        item: type:chest
        item-str: 'name:{&8[&6&lVIP&8]} lore:{&7Активатор привилегии}'
        flags:
        - PERM=essentials.kits.vip
        actions:
        - MESSAGE=&c [Ошибка] &fУ вас уже есть эта привилегия
        reactions:
        - ITEM_REMOVE_INVENTORY=type:chest name:{&8[&6&lVIP&8]} lore:{&7Активатор привилегии}
        - CMD_CONSOLE=pex user %player% group add vip
        - MESSAGE=&a [Информация] &fПривилегия &LVIP &fуспешно активирована!
    
    В консоли выводится при нажатии на любой предмет в руке:

    [ReActions] Failed to parse item: type:chest

    Раньше все делал точно также - все работало, а сейчас пишет ошибку..
     
  14. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Попробуй так что-ль

    Код:
    ITEM_CLICK:
      vip:
        item: type:chest name:{&8[&6&lVIP&8]} lore:{&7Активатор привилегии}
        flags:
        - PERM=essentials.kits.vip
        actions:
        - MESSAGE=&c [Ошибка] &fУ вас уже есть эта привилегия
        reactions:
        - ITEM_REMOVE_INVENTORY=type:chest name:{&8[&6&lVIP&8]} lore:{&7Активатор привилегии}
        - CMD_CONSOLE=pex user %player% group add vip
        - MESSAGE=&a [Информация] &fПривилегия &LVIP &fуспешно активирована!
    У меня это пишет на каждый активатор с предметами, но по странному стечению обстоятельств - все работает.
     
  15. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @BukkitProfi @imDaniX
    Это не баг. Сообщение делал для себя (просто проверка предмета производилась разными алгоритмами). Руки не дойдут убрать...
    Выключил сообщение, скачать можно тут:
    https://circleci.com/gh/fromgate/ReActions
     
  16. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Замечательно! Теперь ни каких проблем со слотами больше нет.

    Огромное спасибо!
     
  17. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Замечание автору.

    Нашёл одну неточность в действии HEAL.
    В файле ActionHeal.java есть такой кусок кода:

    double health = BukkitCompatibilityFix.getEntityHealth(player);
    double healthMax = BukkitCompatibilityFix.getEntityMaxHealth(player);
    if ((hp > 0) && (health < healthMax))
    BukkitCompatibilityFix.setEntityHealth(player, Math.max(hp + health, healthMax));


    Если hp = 0, то игрок не исцелится, т.к. условие не будет выполнено, хотя в описании этого действия сказано, что если параметр hp не указывать, то будет полное выздоровление (по умолчанию hp = 0).
    Это первая ситуация, но есть и не очень хорошая ситуация, когда, например, health=19, а hp =2. В этом случае функция Math.max(hp + health, healthMax) возвратит максимум hp + health=21, т.к. healthMax=20.
    Но в функцию setEntityHealth нельзя устанавливать значение превышающее healthMax, иначе выскакивает предупреждение типа:
    Caused by: java.lang.IllegalArgumentException: Health must be between 0 and 20.0

    Есть ещё и 3-я ситуация, когда, например, health=5, а hp =2. В этом случае функция Math.max(hp + health, healthMax) возвратит опять же максимум, который равен healthMax=20. Т.е. нельзя поднять хп на одно сердечко, вам сразу установиться полное здоровье.

    Поэтому предлагаю изменить код на следующий:

    double health = BukkitCompatibilityFix.getEntityHealth(player);
    double healthMax = BukkitCompatibilityFix.getEntityMaxHealth(player);
    if ((hp >= 0) && (health < healthMax))
    {
    double hp_new = hp + health;
    if (hp_new > healthMax || hp == 0) hp_new = healthMax;
    BukkitCompatibilityFix.setEntityHealth(player, hp_new);
    }

    При этом значение устанавливаемого ХП не будет превышать healthMax, можно будет поднимать здоровье на необходимое значение, а также в действии не нужно будет указывать параметр hp, чтобы полностью исцелиться.

    Может быть, предлагаемый мной код не ахти, но, думаю, заслуживает внимания.

    Спасибо.
     
  18. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
  19. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
  20. ВukkitPrоfi

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

    Баллы:
    76
    Сделал команду /me:
    Код:
    
      me1:
        override: true
        regex: false
        command: cmd:me
        actions:
        - 'message=&7 Использование: /me <текст>'
      me2:
        override: true
        regex: false
        command: me *.
        actions:
        - 'message=player:{loc:%PLAYER_LOC% radius:8} &7 * &f%player% &f%arg1%'
    
    Что мне нужно еще дописать, чтобы команда была полностью поверх стандартной команды bukkit /me?
    Проблема в том, что при вводе /me в чат распознаются сразу две команды: /me из баккита и /me из reactions, в итоге выводятся две одинаковые строки в чат.
     

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