Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Хочу сказать такую вещь, ушёл я из маина год назад, зашёл на рубакит просто посмотреть что тут такое, и как был первым в реализе ReAction так он и остался. Авто по истине молодец!
 
Последнее редактирование:
Действие - cancel_event=true отменяет событие, т.е. игрок как-бы не вводит команду
А если событием допустим будет "Вход игрока в регион", то как это действие отменит данное событие ??

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


На сколько прожорлив процесс слушания местоположения игрока в регионе ?? (А если надо слушать 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
 
Последнее редактирование:
А если событием допустим будет "Вход игрока в регион", то как это действие отменит данное событие ??

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


На сколько прожорлив процесс слушания местоположения игрока в регионе ?? (А если надо слушать 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

Событие входа в регион ты не отменишь, но можно попробовать использовать действие BACK

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

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

@imDaniX, спасибо, ты мне неплохо помог!

У меня есть ещё такой вопрос:
Можна ли в РеАкшнс добавить глобальное событие? Например, если игрок использовал команду: любую

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

Как в активаторе ReActions определить сразу весь синтаксис команды (со всеми возможными переменными)

например хочу определить команду /time
в неё могут быть такие переменные: /time set day [world]

1. Как можна заблокировать весь синтаксис команды
Да, конечно же можна сделать так: cmd:time arg1:set arg2:day arg3:world, но оно будет заблокировано только в случае, если ввести синтаксис строго с такими аргументами и в таком порядке. Но если порядок нарушен, или хотя бы 1 аргумент отсутствует или присутствует новый, активатор не сработает
2. Как можна заблокировать весь синтаксис после третего (любого, или указанного) аргумента
3. Как запретить конкретный аргумент в синтаксисе

P.S. Что делают override и regex в активаторе команды??

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Никакого времени похабщины!
 
Не работает инвертирование флага WORLD.

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

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

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

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

Помести флаг в одинарные кавычки(?)

Код:
ITEM_CLICK:
  skillitem1:
    flags:
    - '!WORLD=Lobby'
    item: type:STICK name:{&7Ханбо} lore:{.*} regex:true
    actions:
    - cmd_op=skillitem1
 
На сколько прожорлив процесс слушания местоположения игрока в регионе ?? (А если надо слушать 40+ игроков ??)
Может быть лучше отключить слушание таких активаторов, как REGION, ITEM_HOLD и ITEM_WEAR, если они не используются ?? Установить огромную задержку в конфиге... Или сильной роли это не сыграет ??

Конкретно вот эти активаторы не сильно прожорливые.

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

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

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

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

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

Интересно насколько он сложный с точки зрения реализации ?
На сколько сложно было писать код...

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

Можна ли в РеАкшнс добавить глобальное событие? Например, если игрок использовал команду: любую
Вообще можно попробовать сделать активатор CMD по регулярному выражению и использовать в качестве маски ".*".
По идее должно работать.

Override по идеи должен блокировать команду сервера, подставляя свою(т.е. команду из активатора), но с Regex оно вроде не работает(либо я криворук).
Ну с регуляркой-то не всегда можно угадать команду.
Допустим команда: abcde, а регулярное выражение abc.* — в этом случае команда не регистрируется, а просто слушается событие.
 
Я уже получал однажды — мне задонатили 100 рублей, до сих пор болтаются в яндекс-кошельке (за вычетом комисси) в качестве медали :)
Жесть конечно. Труд должен быть оплачен, а написания такого плагина это труд ещё тот... Мб вам стоит подать какую-то заявку куда-то? Среди баккит контента нет никаких конкурсов по написанию плагинов ??


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

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

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

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


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

Ещё одно: как сделать рандомное действие для активатора? (что б либо действие А, либо Б)
 
Последнее редактирование:
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 урона, а мобам только при первом ударе.
 
Последнее редактирование:
БАГ: Похоже, что для команд WorldEdit не актуальны действия выполнения команды от имени консоли/оператора. В любом случае хочет пермишен!

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

ReActions: v0.9.10
Spigot: b986
 
Последнее редактирование:
БАГ: Похоже, что для команд WorldEdit не актуальны действия выполнения команды от имени консоли/оператора. В любом случае хочет пермишен!

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

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

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

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

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

БАГ: указание формата времени в серверных тактах не работает (с секундами проблем нет)
Пример когда это проявляется?
Время технически можно указывать и в миллисекундах, только 1 мс в масштабе баккита не имеет смысл. А в некоторых ситуациях может терять смысл и 1 такт.
Т.е. если выполнять команду с задержкой в 1 мс., всё равно будет задержка в один такт.
 
Команды WE ориентируются на положение игрока, направление его взгляда и на выделенную игроком территорию. Как это может работать с консолью не понятно.

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

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

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

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

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

но почему то не работает
 
1. - 'CMD_OP=/set 1'
либо 2. - 'CMD_CONSOLE=sudo %player% /set 1'

И это действие не дает результата, т.к. WE сообщает нам что у этого игрока нет пермишена. Но как только я даю - ему - worldedit.region.set, сразу же оба действия становятся актуальными
Вывод: Баг.

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

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

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

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

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

По идее так: (?i)^cmd$
 
CMD_OP у меня работает. Сейчас только что проверил.

CMD_OP у меня тоже работает, но не с ВорлдЕдитом. В общем не важно, сделаю как вы советуите. Дам пермишен и заблокирую эту команду

Значит так. Такты актуальны только при указании задержки выполнения команд т.е. ACTION_DELAY или WAIT.
Флаг же производит банальное сравнивание по времени. Т.е. если указать 20t они будут пребразованы в 1000 миллисекунд, а при сравнении флага будет сравниваться время, а не число прошедших тиков.
Я конечно проверю почему "t" игнорируется, но пока смело указывайте время.

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

По идее так: (?i)^cmd$
Да, вроде то что надо.
Так а как на счет общего кулдауна на несколько команд? Такое возможно ??
 
Возможно у вас путаница из-за двойной "палки":

Код:
BUTTON:
  testset:
    world: world
    x: 309
    y: 66
    z: 27
    actions:
    - cmd_op=/set 1

Время, пока указывайте временем. Проверю. Всё равно там идёт пересчёт в тики. Путаницы не будет.

Насчёт общего кулдауна - можно.
Выбираете идентификатор и используете его везде где нужно.
 
Выбираете идентификатор и используете его везде где нужно.
АААА так вот зачем этот идентификатор надо указывать )) Ок. Спасибо. Попробую
[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-ти минут случится перезагрузка сервера ?? РеАкт сохранит алгоритм исполнения?? (Если такое вобше реализуемо...)
 
Последнее редактирование:
actions:
команда 1
команда 2
команда 3 (если не исполнилась, значит дальше действия должны прекратится)
команда 4
команда 5


Но как определить исполнилась она или нет ??
Использовать вложенные EXEC-активаторы

CMD_OP у меня тоже работает, но не с ВорлдЕдитом.
конфиг WorldEdit - no-op-permissions:
 
не получается как то :[
все элементарно просто, если простыми словами, то примерно так:

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

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

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

суть такова, что в каждом exec-е проверяется нужное условие, если оно истинно, проводится какое то действие и вызывается следующий exec, если ложное, тогда процесс прерывается или можно выполнить какое то противодействие, например месседж...
Да, спасибо, это вроде уже дошло! Но остается непонятным как и где записывать этот активатор. Попробывал
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>'
-- Сравнивает параметр со списком предоставленных значений. Если есть хоть одно совпадение - флаг отрабатывает успешно.

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

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

Назад
Верх