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

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

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

  1. mr.max_maxim

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

    Баллы:
    66
    Имя в Minecraft:
    MAXIMDELAET
    Хочу сказать такую вещь, ушёл я из маина год назад, зашёл на рубакит просто посмотреть что тут такое, и как был первым в реализе ReAction так он и остался. Авто по истине молодец!
     
    Последнее редактирование: 18 фев 2017
  2. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    А если событием допустим будет "Вход игрока в регион", то как это действие отменит данное событие ??

    Ясно. Только события баккита: команды, нажатия кнопок, открывания сундуков, дверей...


    На сколько прожорлив процесс слушания местоположения игрока в регионе ?? (А если надо слушать 40+ игроков ??)
    Может быть лучше отключить слушание таких активаторов, как REGION, ITEM_HOLD и ITEM_WEAR, если они не используются ?? Установить огромную задержку в конфиге... Или сильной роли это не сыграет ??

    Блин, не знаю даже что сказать...
    Я ещё всех функций не перетестировал, но если реально всё работает так как описано, то это пожалуй один из лучший Баккит плагинов в мире. (Ну в топ-5 так это 100%)!

    Авторам надо бы какую-то премию выдать, что-ли...
    Интересно насколько он сложный с точки зрения реализации ?
    На сколько сложно было писать код...

    Ещё одна неясность осталась - http://rubukkit.org/threads/nubjatn...-prostym-voprosam.116580/page-83#post-1418265
    И ещё одна - http://rubukkit.org/threads/nubjatn...-prostym-voprosam.116580/page-84#post-1418275
     
    Последнее редактирование: 14 янв 2017
  3. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Событие входа в регион ты не отменишь, но можно попробовать использовать действие BACK

    Код:
    REGION_ENTER:
      BackRegion:
        region: MyRegion
        actions:
        - message=&cВЖУХ, и тебя оттолкнуло на пару блоков назад
        - back=2

    Насчет отключения сказать ничего не могу - наоборот уменьшал задержку, но на лаги сильно не повлияло(или вообще не повлияло).

    Честно говоря, вот вообще не понял, что ты имеешь ввиду под глобальным событием :/

    Override по идеи должен блокировать команду сервера, подставляя свою(т.е. команду из активатора), но с Regex оно вроде не работает(либо я криворук).
    Regex - включение регулярных выражений(в народе - регулярок). Простейший пример можешь глянуть в этом сообщение ниже. Но просто так это дело не объяснишь, лучше изучать самому, либо искать готовые варианты.

    0.
    Код:
    COMMAND:
      TimeSynt:
        override: false
        regex: true
        command: time .*
        actions:
        - message=Я среагировал, ня! >:з
    1.
    Код:
    COMMAND:
      TimeSynt:
        override: false
        regex: true
        command: time .*
        actions:
        - cancel_event=true
    2.
    Код:
    COMMAND:
      TimeSynt:
        override: false
        regex: true
        command: time(\s+\S+){4,}
        actions:
        - cancel_event=true
        - message=&cНаписано 4 и более аргументов!
    3.
    Код:
    COMMAND:
      TimeSynt:
        override: false
        regex: true
        command: ^time(?!.*похабщина).*
        actions:
        - cancel_event=true
        - message=&cНикакого времени похабщины!
     
  4. UThero566

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

    Баллы:
    61
    Не работает инвертирование флага WORLD.

    ITEM_CLICK:
    skillitem1:
    flags:
    - !WORLD=Lobby
    item: type:STICK name:{&7Ханбо} lore:{.*}
    actions:
    - cmd_op=skillitem1
    Километр ошибок.

    Есть альтернатива флагу !WORLD или я что-то не так делаю и это можно исправить?
     
  5. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Помести флаг в одинарные кавычки(?)

    Код:
    ITEM_CLICK:
      skillitem1:
        flags:
        - '!WORLD=Lobby'
        item: type:STICK name:{&7Ханбо} lore:{.*} regex:true
        actions:
        - cmd_op=skillitem1
     
  6. UThero566

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

    Баллы:
    61
    Где-то же видел, но потом забыл это. Спасибо.
     
  7. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Конкретно вот эти активаторы не сильно прожорливые.

    А вот REGION_ENTER / REGION_LEAVE — страшнее будут. И чем больше регионов в участвует — тем страшнее. Т.е. если отслеживается 0 регионов, то и нагрузки нет (это к вопросу об отключении ;)).

    Насчёт отмены входа в регион - вместо CANCEL в этом случае надо использовать PUSH. CANCEL кстати может тоже сработать (не проверял ;)), но с давних пор я понял, что нет ничего хуже чем отменять событие движения игрока — лучше его телепортировать в заранее сохранённую точку.

    :) Меня же всегда удивляло, что пользователи плагина иногда с ним делают. Очень часто получается, такое что я не мог себе и представить в самых "волшебных" мечтах.

    Я уже получал однажды — мне задонатили 100 рублей, до сих пор болтаются в яндекс-кошельке (за вычетом комисси) в качестве медали :)

    С точки зрения программирования сложного там ничего нет. Я правда постарался и сам себе запутал код — сейчас бы я сделал по другому (надеюсь ещё переделаю ;)).

    Вообще можно попробовать сделать активатор CMD по регулярному выражению и использовать в качестве маски ".*".
    По идее должно работать.

    Ну с регуляркой-то не всегда можно угадать команду.
    Допустим команда: abcde, а регулярное выражение abc.* — в этом случае команда не регистрируется, а просто слушается событие.
     
  8. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Жесть конечно. Труд должен быть оплачен, а написания такого плагина это труд ещё тот... Мб вам стоит подать какую-то заявку куда-то? Среди баккит контента нет никаких конкурсов по написанию плагинов ??


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

    И тут важный момент: если присутствует паралельный активатор на другую команду, для которой должна быть другая задержка, то как сделать что бы он перенимал на себя инициативу по установке кулдавна и что бы небыло никаких багов (что бы кд не суммировалось, что бы сообщения о кд не выводились дважды подряд и т.д...)

    И ещё один важный момент: что бы повторное использование команды с актуальным счетчиком кулдавна не обновляло этот кулдавн (только после успешного использования).


    Какой код использовать, что бы скинуть меседж на следующий ряд?? (обычно используют \n, но тут не работает)
    [upd] нашел решение, можна просто ещё раз использовать действие сообщения с пустой строкою.
    Кто-то пробывал с помощью этого плагина сделать систему команд модераторам, для блокировки чата игрокам на определенное время? И что бы таймер мута приостанавливался когда игрок выходит с сервера и вновь возобновлялся когда игрок заходит
    Я думаю такое должно быть реализуемо ??!
    Ещё бы очень очень пригодился пример как между командами устанавливать такие связи, как например общий кулдав команды_1 команды_2 и команжы_3 (как телепорты в ессентиалс).
    Юзаеш одну команду и автоматически кд накладывается на все команды с этой связки
    Ещё один момент: если я указываю задержку в секундах, то таймер идет не зависимо от сервера (в зависимости от системы отсчета времени компютера, на котором этот сервер будет запущен), а если в тактах, то таймер идет только если сервер запущен ??
    [upd] блин, для команд почему-то не актуальна установка задержки в тактах...

    Ещё одно: как сделать рандомное действие для активатора? (что б либо действие А, либо Б)
     
    Последнее редактирование: 15 янв 2017
  9. UThero566

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

    Баллы:
    61
    nodamage:
    flags:
    - VAR_PLAYER_MATCH=id:nulldmg value:1 player:%player%
    mob-type: ZOMBIE
    actions:
    - VAR_TEMP_SET=id:damage value:0

    Активатор MOB_DAMAGE действует только при первом ударе моба. Нужно как-то менять var 'damage', чтобы размер последующего урона тоже был 0?

    Странно то, что игрокам всегда наносится 0 урона, а мобам только при первом ударе.
     
    Последнее редактирование: 15 янв 2017
  10. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    БАГ: Похоже, что для команд WorldEdit не актуальны действия выполнения команды от имени консоли/оператора. В любом случае хочет пермишен!

    Пробывал даже сделать действие через выполнение команды /sudo (заставляет игрока выполнить команду (команда плагина Essentials)) от имени оператора (- 'CMD_CONSOLE=sudo %player% paste') и всёравно без пермишена никак!
    БАГ: указание формата времени в серверных тактах не работает (с секундами проблем нет)

    ReActions: v0.9.10
    Spigot: b986
     
    Последнее редактирование: 16 янв 2017
  11. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Команды WE ориентируются на положение игрока, направление его взгляда и на выделенную игроком территорию. Как это может работать с консолью не понятно.

    Надо понимать, что есть команды консоли - вы их можете взять и написать в консоли сервера и всё будет работать.
    А есть команды для игрока и они не обязательно будут работать в консоли.

    Масло масляное. Вы просто запускает двойной запуск. Это выглядит так:
    В консоли сервера пишется команда:
    sudo игрок paste (кстати, там же //paste? т.е. нужно указывать один слэш - /paste).
    После этого от имени игрока (т.е. это тоже самое что игрок просто пишет команду) выполняется команда
    /paste.

    Решение либо выполнять эту команду от имени оператора — но быть готовым, что в определённых условиях у игрока останутся права оператора.
    Либо выдать игроку нужные права, а на команду //paste навесить дополнительных условий и отменять её исполнение в каких-то ситуациях.

    Пример когда это проявляется?
    Время технически можно указывать и в миллисекундах, только 1 мс в масштабе баккита не имеет смысл. А в некоторых ситуациях может терять смысл и 1 такт.
    Т.е. если выполнять команду с задержкой в 1 мс., всё равно будет задержка в один такт.
     
  12. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Наверное вы меня немного не так поняли.

    Вот пример: игрок выделяет локу, и запускает активатор который выполняет действие

    1. - 'CMD_OP=/set 1'
    либо 2. - 'CMD_CONSOLE=sudo %player% /set 1'

    И это действие не дает результата, т.к. WE сообщает нам что у этого игрока нет пермишена. Но как только я даю - ему - worldedit.region.set, сразу же оба действия становятся актуальными
    Вывод: Баг.
    это как понимать ?)
    Вот например хотел установить задержку между действиями
    - 'DELAY_PLAYER=id:custom1 time:80t', но не сработало. Только если 4s ставлю всё норм. Мне желательно в тактах, т.к. я хочу задать некие алгоритмы которые могут нарушить свой порядок во время лагов на сервере. В тактах задавать задержку более надежно, т.к. если будет лагать сервер то автоматически будет замедлятся и алгоритм относительно цикла такта
    Как сделать что бы с включенным regEx не учитывался регистр букв в команде??

    По идее должно быть так command: ^cmd$/i

    но почему то не работает
     
  13. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    "2. - 'CMD_CONSOLE=sudo %player% /set 1'" не имеет смысла. Это приводит к запуску команды от имени самого игрока, а у нет пермишена.

    CMD_OP у меня работает. Сейчас только что проверил.

    К сожалению, как выяснилось выше в определённых ситуациях (вроде вылета игрока с сервера) "опство" с него не снимается. Я естественно добавлю дополнительных костылей. Но пока, к сожалению — риск остаётся.

    Можно её выдавать игроку пермишен (или группу), а потом убирать. Но тут ещё важно чтобы сам плагин на пермишены работал как надо.

    Значит так. Такты актуальны только при указании задержки выполнения команд т.е. ACTION_DELAY или WAIT.
    Флаг же производит банальное сравнивание по времени. Т.е. если указать 20t они будут пребразованы в 1000 миллисекунд, а при сравнении флага будет сравниваться время, а не число прошедших тиков.
    Я конечно проверю почему "t" игнорируется, но пока смело указывайте время.
    По идее так: (?i)^cmd$
     
  14. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    CMD_OP у меня тоже работает, но не с ВорлдЕдитом. В общем не важно, сделаю как вы советуите. Дам пермишен и заблокирую эту команду

    Пробывал и с WAIT и с ACTION_DELAY: если указана задержка в тиках то строка просто игнорируется

    Да, вроде то что надо.
    Так а как на счет общего кулдауна на несколько команд? Такое возможно ??
     
  15. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Возможно у вас путаница из-за двойной "палки":

    Код:
    BUTTON:
      testset:
        world: world
        x: 309
        y: 66
        z: 27
        actions:
        - cmd_op=/set 1
    
    Время, пока указывайте временем. Проверю. Всё равно там идёт пересчёт в тики. Путаницы не будет.

    Насчёт общего кулдауна - можно.
    Выбираете идентификатор и используете его везде где нужно.
     
  16. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    АААА так вот зачем этот идентификатор надо указывать )) Ок. Спасибо. Попробую
    [upd] Супер! Работает.
    [upd2] Я правильно понимаю, если к флагу "DELAY_PLAYER" задать параметр [set-time:<Time>], то действие "DELAY_PLAYER" впринципе будет и ненужно вовсе?? [set-time:<Time>] в этом флаге имеет точно такую же функцию ??

    Ещё такая штука интересует:

    Допустим есть у меня активатор, который запускает цепочку команд. Но для исполнения некоторых команд должны быть соблюдены условия (соответствующих этим условиям флагов не нашел в реАкшнс). Если условия не соблюдены, то команда не исполнится и последующие действия потеряют смысл.


    actions:
    команда 1
    команда 2
    команда 3 (если не исполнилась, значит дальше действия должны прекратится)
    команда 4
    команда 5


    Но как определить исполнилась она или нет ??
    Разве если только отловить от этой команды сообщение о том что "невозможно исполнить команду. Не хватает денег там..." и с помощью него остановить последующую цепочку? Но как ??
    Но кд идет даже если я останавливаю сервер. Значит при указании в секундах привязка идет к системе ПК, а не к тактам сервера
    @fromgate, у вас есть кошелек WebMoney? Если да, то напишите номер, хочу скинуть вам свою маленькую благодарность за крутой плагин! :good:
    p.s. у вас есть платные плагины на Спигод.орґ?

    Хмм... А возможно ли сделать команду на внутрирегиональный флай таким образом ??

    1. Игрок выполняет активатор
    2. Проверка: находится ли игрок внутри своего региона
    -------- Если нет: выводится какой-то меседж...
    -------- Eсли да: взимается плата
    -------------- Если нет платы: выводится какой-то меседж...
    -------------- Если платы достаточно:
    -------------------- Игроку дается флай на 15 минут (по истечению которых должна быть деактивация).
    -------------------- Выполняется пункт 3.)

    3. Начинается процесс слушания местоположения игрока (при выходе с региона: флай ОФФ, при обратном входе (если ещё не истекло 15 минут): флай ON)
    # По истечению 15-ти минут после покупки флая флай деактивируется и процесс слушания местоположения игрока прекращается.

    P.S. И что будет если в рамках этих 15-ти минут случится перезагрузка сервера ?? РеАкт сохранит алгоритм исполнения?? (Если такое вобше реализуемо...)
     
    Последнее редактирование: 16 янв 2017
  17. Korvinius

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

    Баллы:
    88
    Использовать вложенные EXEC-активаторы

    конфиг WorldEdit - no-op-permissions:
     
  18. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    не получается как то :[
     
  19. Korvinius

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

    Баллы:
    88
    все элементарно просто, если простыми словами, то примерно так:

    1. Активатор
    вызов exec-1
    2. exec-1
    условие: ***
    действие:
    ***
    вызов exec-2
    3. exec-2
    условие: ***
    действие:
    ***
    вызов exec-3
    3. exec-3
    **** и так далее до победного конца...

    суть такова, что в каждом exec-е проверяется нужное условие, если оно истинно, проводится какое то действие и вызывается следующий exec, если ложное, тогда процесс прерывается или можно выполнить какое то противодействие, например месседж...
     
  20. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Да, спасибо, это вроде уже дошло! Но остается непонятным как и где записывать этот активатор. Попробывал
    COMMAND:
    --- cmd1:
    ----- override: false
    ----- regex: true
    ----- command: (?i)^qwerty$
    ----- flags:
    ----- - 'MONEY=25000'
    ----- actions:
    ----- - 'EXECUTE=activator:exe1'
    ----- reactions:
    ----- - 'MESSAGE=no money'

    EXEC:
    --- exe1:
    ----- flags:
    ----- - 'DELAY_PLAYER=id:delay1 set-time:10s'
    ----- actions:
    ----- - 'MONEY_PAY=25000'
    ----- - 'MESSAGE=action positive'
    ----- reactions:
    ----- - 'MESSAGE=cooldown [ %delay-left-hms% ]'

    Но не сработало. Это "exe1" должно использоватся после того, как флаг в первом активаторе выдаст true после проверки сколько денег у игрока, но даже при true "exe1" не реагирует. Мб я записал его в неправильном синтаксисе ??

    [upd] нашел ошибку


    [Aктуально]
    @fromgate, Как отключить меседж?? Обычные методы, на кшталт закоментировать строку, не работают. Если беру в 'скобки', отсылает пустую строку.
    Ни удалить, ни разукрасить...

    - 'COMPARE=param:<Параметр> value1:<Значение1> vaule2:<Значение2>'
    -- Сравнивает параметр со списком предоставленных значений. Если есть хоть одно совпадение - флаг отрабатывает успешно.

    Не понимаю откуду брать эти параметры и значения для сравнения !?
    Можна хотя бы один пример, как это использовать ??
     
    Последнее редактирование: 17 янв 2017

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