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

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

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

  1. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Советую подтереть комментарии, потому как не знаю, примет ли ReActions "код" с ними
    Код:
    ВАШ_ТИП_АКТИВАТОРА:
      CheckGroup:
        flags:
        # Проверям, есть ли игрок в group1
        - group=group1
        actions:
        # Если да, запускаем следующий активатор
        - execute=activator:CheckItems
        reactions:
        # Если нет, выдаем сообщение
        - message=&cСначала получите группу &e"Группа1"&c!
    EXEC:
      CheckItems:
        flags:
        # Проверяем наличие седла
        - item_inventory=type:SADDLE amount:1
        # Проверяем наличие обычного угля(263:0) в количестве 32 шт.
        - item_inventory=type:COAL amount:32 data:0
        actions:
        # Если оба условия верны, то...
        # Забираем эти предметы
        - item_remove_inventory=type:SADDLE amount:1
        - item_remove_inventory=type:COAL amount:32 data:0
        # От лица консоли прописываем команду установки группы(в данном случае из PeX)
        - cmd_console=pex user %player_name% group set group1
        # Показываем радостное сообщение
        - message=&aПоздравляем с получением группы &e"Группа2"&a!
        reactions:
        # Если проверка провалилась, тогда огорчаем игрока
        - message=&cУ Вас недостаточно предметов для получения группы &e"Группа2"&c!

    Если я правильно понял, что можно передать временную переменную в следующий активатор, то как-нибудь так:
    Код:
    EXEC:
      MuchPlayers:
        actions:
        - var_temp_set=id:but_not_me value:%player_name%
        - execute=activator:MuchPlayers2 player:all
      MuchPlayers2:
        flags:
        - perm=i.am.super.man
        - '!compare=param:%player_name% value1:%but_not_me%'
        actions:
        - execute=activator:YourActivator
      YourActivator: []
    Не уверен с работой 'perm:{}' в селекторе игроков, поэтому сделал проверку в следующем. Под YourActivator вставлять тот активатор, что вам нужен
     
  2. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Не забывайте, что (цитирую): «Thermos is a fork of KCauldron...». Я вижу ошибку Java, которая говорит, что плагин не видит метода, который есть в обычном Bukkit API.

    Что вас тогда не не устраивает?

    Я не понимаю, где что и когда у вас работает или не работает. Напишите конкретно.
     
  3. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Да неее... Ну а что дальше то? В следующем YourActivator надо будет указать всё тот же селектор локации, который всё так же выберет тех самых игроков, как если бы указать его просто в MuchPlayers.
    Мне вчера теорему Пифагора догнать пришлось, но я придумал как без указания радиуса можна вычислить есть ли в твоей локации игрок, имеющий конкретное право, или нету.
    Потом скину. Надо немного доработать...



    [upd] В обшем, вот как можна вычислить есть ли в тваем радиусе игрок, обладающий конкретным пермишеном, или нету такого.
    P.S. Если кому-то пригодится, надеюсь поможете улучшить этот алгоритм. В нем есть пару недостатков, описаных вконце -- https://pastebin.com/VKp7uuUk

    P.S. Я лично использую его что бы отправлять разные форматы сообщений от игроков к модераторам. У меня модераторы видят весь чат, не зависимо локальный он или глобальный, но когда отправляется формат №2, из ключевого действия, модератор понимает что игрока нет в его локальном радиусе. А когда стандартный формат - значит игрок в радиусе.





    Тут походу напутано с форматами времени https://github.com/Redolith/ReActions/wiki/Time-Format
    Например MM (капсом) это месяца, а не минуты. A SS это милисекунды, а не секунды
    Вопрос: А если ктото зайдет под ником "general", все глобальные переменные начнет считать как его персональные ??
     
    Последнее редактирование: 11 июн 2017
  4. SoSeDiK

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

    Баллы:
    76
    Имя в Minecraft:
    SoSeDiK
    Это ж как заморочиться надо было :good:. Я всегда по этой схеме работал (проигрываем звук для игроков в радиусе):
    Код:
    ITEM_CLICK:
      FStaff:
      item: 'type:STICK data:0 enchantments:FIRE_ASPECT:5 name:{&6Элементальный Посох
      &7- &c&oОгонь} lore:{\n&7Элемент: &c&oОгонь} regex:false'
      flags:
      - DELAY_PLAYER=id:fstaff set-time:12s
      - '!GROUP=dev'
      actions:
      - 'EXECUTE=activator:FStaff3 player:{player:null loc:%PLAYER_LOC% radius:10}'               # <—
      - WAIT=500ms
      - ...[куча визуальных эффектов]
      reactions:
      - CMD_CONSOLE=tm amsg %PLAYER_NAME% &b&lПосох охлаждается!
    EXEC:
      FStaff3:
      actions:
      - CMD_CONSOLE=openaudio play %PLAYER_NAME% https://www.dropbox.com/s/9ghslx2o9gj1foo/light.ogg?dl=1
    
    Особо не вдумывался, но тоже может сработать. Ловим сообщение игрока, отменяем, выполняем exec. Ставим игрокам в радиусе переменную в значение 1, а игроку, который отправил сообщение, в значение 2. Выполняем ещё один exec. Если переменная =2, то отправляем одно сообщение, если не равна, то выполняем ещё один exec, если переменная равна 1, то отправляем нужное сообщение, если нет, то выполняем ещё один exec, если переменная не равна 1 и 2, то отправляем всем остальным игрокам (модераторам и выше) нужное сообщение и чистим переменные или ставим всем игрокам переменную в значение 0. Как-то так... Не уверен, что будет, если отправить несколько сообщений одновременно (думаю, можно реализовать через IF_ELSE, тогда все проверки через exec будут в одном активаторе). Не отрицаю, что это очень костыльно (и это лишь в теории, на практике не проверял).
     
  5. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Тоесть
    Код:
    MESSAGE:
      initiate:
        ...
        actions:
        - cancel_event
        - execute=activator:exe1  player:{loc:%player_loc% radius:30}
        - var_player_set=id:playerMsgSender  value:2
    
    EXEC:
      exe1:
        actions:
        - var_player_set=id:playerInRadius  value:1
    
    А дальше?? С момента "Если переменная =2, то..." не совсем понял. О какой именно переменной идет речь?
     
  6. SoSeDiK

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

    Баллы:
    76
    Имя в Minecraft:
    SoSeDiK
    В этом случае о переменной 'playerInRadius'. Игроку, который запустил активатор, выставляем 2, игрокам в радиусе 1. Потом выводим сообщение в зависимости от значения этой переменной (написавшему одно, игрокам в радиусе другое, модераторам вне радиуса третье). В конце обнуляем эти переменные игрокам.
    Можно не заморачиваться со значением 2, но тогда у игрока, который запустил активатор, будет такое же сообщение, как и у других в радиусе.
     
    Последнее редактирование: 12 июн 2017
  7. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Блин... Но что значит "в зависимости от значения этой переменной" ?? Если мы выставим этой (playerInRadius) переменной 1 (персонально, каждому игроку что находится в радиусе игрока-инициатора), то оно так и будет 1, не зависимо ни от чего )) Толку нам с неё??
    ...Или что я не так понял ??
     
  8. SoSeDiK

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

    Баллы:
    76
    Имя в Minecraft:
    SoSeDiK
    Не совсем понял. Выставляем переменную в значение 1, выполняем exec всем игрокам, который проверяет значение этой переменной флагом. И в зависимости от значения отправляем нужное сообщение. Выглядит примерно так: 'playerInRadius=1' --> [msg1], 'playerInRadius=2' --> [msg2], 'playerInRadius не равно 1 или 2' --> [выводим сообщение модераторам вне радиуса], --> сброс переменных.
     
  9. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Я так и не понял в следствии чего 'playerInRadius' должна сменить свае значение с 1 на 2, ну да ладно... Тут только на практике надо тестить. Полюбому есть несостыковки...

    Мне сейчас больше интересно, возможно ли вывести под одну переменную список игроков, которых выбрал селектор/к которым применился активатор ??
    Например если ты выполняеш - 'EXECUTE=activator:act1 player:{loc:%player_loc% radius:30}'
    который выберет всех онлайн игроков в радиусе 30 от инициатора, то как загнать всех их под одну переменную??

    Если бы придумать как такое сделать, то этот список "игроков, которые услишали" можна было бы выводить ховерЕвентом при каждом меседже. В результате чего при наведению мышкой на меседж, игроки видели бы кто увидел их сообщение. Помоему очень круто!

    Придумал!
    Код:
    MESSAGE:
      initiate:
        source: CHAT_INPUT
        type: CONTAINS
        mask: ''
        actions:
        - 'VAR_PLAYER_SET=id:countPlayers_in-localRadius  value:initiatorName'
        - 'REGEX=input:{%player%}  regex:{.+}'
        - 'EXECUTE=activator:eachPlayerCounter  player:{loc:%player_loc% radius:30}'
    
    
    EXEC:
      eachPlayerCounter:
        actions:
        - 'VAR_SET=player:%group:0:0%  id:countPlayers_in-localRadius  value:{%var:%group:0:0%.countPlayers_in-localRadius%, %player%}'

    Таким образом мы получаем полноценный список игроков, к которым применился наш локальный активатор ))
    Костыль конечно, надеемся кто-то из разработчиков вскором времени добавит плейсхолдер, содержащий такие данный, и всетаки...


    Предложение:
    1. Сделать возможность сохранять временные плейсхолдеры после действия WAIT.
    2. Добавить селектору игроков возможность задавать радиус в диапазоне [от-до], что бы к примеру выбрать всех игроков которые находятся на расстоянии дальше 20-ти блоков, но не больше 30-ти...
    Предложение: добавить параметр liveTime к переменным, по истечению которого переменная самоудалится. У меня сотни переменных, которые актуальны лишь на долю секунды. Тут это бы пригодилось.
    К liveTime также стоит добавить аргумент, что бы он мог восполнятся/уменьшатся/обновлятся когда это надо.
     
    Последнее редактирование: 12 июн 2017
  10. Wolfys

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

    Баллы:
    88
    Имя в Minecraft:
    wolfysge
    @fromgate
    Окей напишу подробнее. Я пытаюсь создать кнопку которая весит на ванильном блоке с помощью команды
    /ra add BUTTON spawnex - к примеру
    Если я использую самую новую версию, то вылетает ошибка из моего первого поста.
    Далее я использовал версию которая когда-то у меня стояла (в декабре) после этого я не делал не обновлений плагина - она работает корректно и кнопка создалась.

    Так же не понятно почему на работает на новой версии /ra add REGION_ENTER test в игровом чате.
    Логично можно предположить что не будет работать и в консоле, а там работает.
    p.s. Могу показать на стриме.
    p.s.s Хотелось бы новую версию.. обновления довольно вкусные......
     
  11. SoSeDiK

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

    Баллы:
    76
    Имя в Minecraft:
    SoSeDiK
    UP! Это возможно? Нужен точный ответ (да/нет), надо что-то решать с мобами.
     
  12. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Врядле. Нужно завлекать ещё разработчиков. И поддерживать их. Тогда будут нововведения
     
  13. boomcss1

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

    Баллы:
    76
    Имя в Minecraft:
    Pup
    Как сделать проверку региона на наличие мобов? Т.е. если опр. мобы есть в регионе, то дверь закрыта, если их убили. дверь открывается.
    Почему при вводе команды /react add MOB_KILL r1 type:zombie name:&2Защитник
    ОН меняет Mob_kill на ob_damage
    Да и даже если просто ввожу /react add MOB_KILL <ИмяАктиватора> type:<ТипСущности> [name:<ИмяМоба>]
    То меняется на MOB_DAMAGE
     
  14. UchihaMadara___

    UchihaMadara___ Ньюби

    Баллы:
    1
    Имя в Minecraft:
    UchihaMadara___
    Привет ребят! Как можно сделать сразу две команды на одну кнопку? Пример: Нажатие > /rg s spleef > //set 80
    Спасибо заранее!
     
  15. Albetron

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

    Баллы:
    66
    используй
    - BLOCK_FILL=block:snow_block region:мир.название_привата
     
  16. UchihaMadara___

    UchihaMadara___ Ньюби

    Баллы:
    1
    Имя в Minecraft:
    UchihaMadara___
    Не, а как именно сделать две команды в одной кнопке ? Это я пример просто назвал
     
  17. Albetron

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

    Баллы:
    66
    - CMD=команда1
    - CMD=команда2
    и т.д.
     
  18. John McCafferty

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

    Баллы:
    76
    Skype:
    VR_SN_5
    Мне надо, что при вводе определённой команды выполнялась другая команда. Как это можно сделать?
     
  19. Albetron

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

    Баллы:
    66
    Активатор COMMAND туда можно придумать все что угодно /lolkek
    И к нему действие CMD
     
  20. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Запустил англоязычную инструкцию - http://reactions.fromgate.me/
    Теперь надо будет заняться русской
     

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