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

1. Столкнулся с проблемой вывода персонального времени окончания задержки в реакцию через message. Это вообще возможно?
Пока нет, хотя это хорошая идея для плейсхолдера. Думаю сделаю.

Возможно ли в lore поместить личные часики окончания задержки?
Динамический Lore - это конечно идея неплохая. Мне нравится. Но есть несколько нюансов. Мне кажется это скорее идея для дополнительного плагина-спутника. Я подумаю об этом.

Если во время action_delayed игрок перезайдёт в игру, то действие по отношению к нему не будет выполнено.
По идее (я уже могу путать), но если действие происходит в момент отсутствия игрока - оно выполняется. Просто если он привязано к игроку, а его нет онлайн то оно не отрабатывает. Если действие отложено на 10 мин, а игрок зашёл перед его выполнением - он его получит.

4. Конструкция
Код:
ITEM_WEAR:
  Satana:
    item: '&2Нагрудник_&4Сатаны$311'
    flags: []
    actions:
    - message=player:%player% &4Мухахахахахаха
    reactions: []
Выполняется циклично. Можно ли добавить аналогичный вариант для разового выполнения?[
(И не работает вообще, если надевать через ПКМ)
Про однократное выполнение при одевании - добавлю. Это будет дополнительный параметр для настройки активатора.
А вот про ПКМ - надо подумать. По идее, странно что не отрабатывает.

5. Неплохо было бы добавить в указание на предмет такие параметры, как "прочность больше, чем: n" и "прочность меньше, чем: n" :)
Да, пожалуй стоит.

6. Можно ли отследить взрыв зелья (с опциями предмета) и далее выполнить действия (может даже в радиусе)?
Это уже пахнет отдельным активатором. Пока не в приоритете, потом напишу почему.

7. На одной из страниц предлагали использовать регион из самого плагина. Т.е. задания кубоида (в виде флага\активатора).
Вообще я мечтаю ввести альтернативный указатель на территории и заменить им регионы, города, фракции и т.п. В т.ч. и прямое указание координат. Пока говорить о нем ранова-то.

8. Счётчик. Он добавлен или... (не прочитал ещё всю тему)? Если нет, то можно реализовать по логике delay или тем же Scoreboard:
1) Создавать переменную dummy
2) Добавлять в неё значения (из плагина напрямую или через cmd_console=scoreboard players set %player% переменная число). Но тут проблема: нельзя добавить переменную для всех игроков вообще. Так что, лучше реализовать счётчик в самом плагине.
3) Проверять соответствие переменной в флагах (больше\меньше\равно).
4) Действие\противодействие.
Переменные же есть.

Кстати, не видел логики "больше\меньше\равно". Она вообще используется где-то на данный момент?
Хм... Вообще странно. Помню точно писал подробное описание как работать с переменными, а что-то найти не могу. Постараюсь сегодня-завтра добавить описание.

9. Некоторая неудобность... Если создавать активатор двери\кнопки\рычага при смотрении на них, то есть небольшой казус. Например:
Есть стена. На стене висит кнопка на уровне ног игрока. Выше кнопки (на уровне головы игрока) висит табличка. Активатор создать не получится, если смотреть на кнопку вплотную. То есть табличка считается полным блоком и посмотреть "в пустую облать, не занятую текстурой таблички" не выйдет. Расценивается так, как будто я смотрю на табличку. Помогает "смотреть на кнопку так, чтобы не смотреть на фантомный блок-табличку". Может, табличка и считается полным блоком, только текстура создаёт из неё "микроблок"?
Ну... Так работает майнкрафт. Я уже привык просто обращать внимание на то "подсвечена" ли кнопка или нет.

10. Если долго юзать
Код:
  Topor:
    item: '275'
    flags: []
    actions:
    - VELOCITY=vector:1,1,1 kick:true
    reactions: []
То кикает за флай сам серв, не NCP. Правда, отключается в конфиге, но всё же.
Ну так отключается же в конфиге :)


11. Как насчёт добавить проверку на нахождение блока над игроком... Перед игроком... За игроком... В радиусе от игрока... В радиусе сзади от игрока... Ну, в общем, понятно :D
Я подумаю :)

12. Документацию на русиче не обновляли со времён 0.6 :(
Есть такое. Текущую документацию делал не я и этот процесс прервался, когда у документора исчез интерес к плагину. Он использовал simple html для форматирования, а я не хочу делать это "вручную", а вот WYSIWYG редактора для получения simpl html, я найти не смог.

13. А можно ли сэмулировать отправку сообщения в чат от игрока? Команды, как таковой, на отправку простого текста в чат, вроде, нет. Только /me. Вопрос бы не возник, если бы в message можно было указывать радиус получения сообщения относительно игрока :)
Только через MESSAGE. С радиусом потребность я понял.

15. Можно ли уменьшать прочность предмета активатором? (Забирать предмет и выдавать его же с прочкой на 1 меньше не найс, ибо... более 1000 активаторов... :creeper:
Пока нет. Но думаю такое действие (по крайней мере для предмета в руке/слоте брони можно будет сделать).

16. Надо разрешить выполнение команды от имени оператора, т.к. перм не рабочий...
Собственно, делаю я так:
Код:
  Firework:
    command: firework
    flags: []
    actions:
    - cmd_op=firework   //иии... Как выполнять команду с любыми аргументами от имени оператора? Не создавать же для каждого аргумента активатор...
    reactions: []
Можно попробовать так:
Код:
  Firework:
    command: cmd:yahoo arg1:*
    flags: []
    actions:
    - cmd_op=firework %arg1%
    reactions: []

Хочу обратить внимание - если вызывать в CMD_OP туже команду, что и в COMMAND: cmd:<команда> - то мы можем получить цикл закрученный на самом себе.

17. Есть операции с деньгами, а операции с опытом? Да, cmd_console и все дела, но ради эстетики добавьте хоть :)
Ага, точно. Просто мне не нужно было, а просить никто - не просил ;)

18. Почему в message (да и вообще в любом тексте после действия) нельзя юзать двоеточие? Не люблю не соблюдать правила грамматики :( Да и вообще, двоеточие необходимо при перечислении, например, характеристик предмета в lore... :( (да, привязка к переменным... Но можно же это поправить?)[/qoute]
В MESSAGE - там есть особенности, связанные с разбором текста. Это у меня в очереди на исправления.
Описание предмета (включая Lore и прочие характеристики) будет меняться. Скорее всего к текущему способу описания предмета добавится ещё два:
1. Альтернативный, что-то вроде item:ID:DATA name:{Name} lore:{lore} color:color enchant:Enchantmen:Level и т.д.
2. Хочу попробовать вытащить стандартный синтаксис из майна. Это будет удобно для тех кто привык к нему используя командные блоки. Тут есть недостаток - в BukkitAPI нет доступа к этим методам, соответственно необходимо будет обращаться на низком уровен - а это гарантированная несовместимость с разными версиями craftbukkit. Если бы это было стнадартом, я бы не заморачивался с п.1

19. В item_click нужно отследить момент, когда ПКМ зажата и когда не нажата. Соответственно, пускать\останавливать личный таймер, который, например, будет ставить delay_player на item_click. Можно это как-то замутить? (Именно нужно фиксировать нажатую кнопку. Фишки с добавлением переменных при активации item_click и последующим отлавливании оных не прокатят, т.к. кликать можно с разной скоростью, а время нужно установить фиксированное)
Увы. На уровне плагина невозможно "поймать" состояние нажатой клавиши на мышке у игрока.

20.
Код:
MESSAGE:
  Pepel_II:
    mask: Выдал набор pepel_ii игроку %player%
Собственно, пытаюсь скрыть сообщение "Выдал набор pepel_ii игроку %player%", которое даёт essentials после cmd_op=kit Pepel_II
Но ник в %player% не подставляет. Работает если точно написать "Выдал набор pepel_ii игроку %player%" :(
Хм... В принципе можно попробовать добавить поддержку этого плейсхолдера.
Пока же можно использовать в качестве маски регулярное выражение: "Выдал набор pepel_ii игроку \w+"
 
21. Как насчёт добавления флага "command"? Например, есть несколько одинаковых сообщений от разных команд. Мне нужно скрывать только сообщения от некоторых команд. Или действие "cancel true" отменяет и сообщение?
Не, не тот пример привёл... Например:
В активаторе есть действие cmd_op, которое выводит ненужное сообщение игроку, которое нужно бы убрать. Но такое же сообщение выводится и игроку с операторкой, который использует команду из чата. И не желательно, чтобы сообщение удалялось. Как можно реализовать?

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


22. Как насчёт активатора... Звука? Можно было бы заменять звуки
Очень специфичная вещь. Даже не знаю...

23. Как насчёт действия по управлению сытостью?
Ответ такой же как про опыт ;)
Вообще, знаете что. Если не сложно, подумайте какие характеристики у игрока можно изменять/выводить. Я сделаю унивесальное действие и плейсхолдер.

24. Было бы отлично, если бы команды из активаторов command были доступны через tab :)
Мечтаю об этом с момента появления активатор COMMAND. Просто руки не доходят ;)

25. Насчёт Scoreboard. Наверно, я слишком абстрактно описал проблему. Начнём сначала.
Командные блоки работают только при подаче сигнала на них. На КБ я сделал множество ивентов, но основная их проблема была в скорости срабатывания и фиксации событий.

Например, нужно было зафиксировать, кто умер в PvP, кто убил в PvP и кто просто умер. Для этого нет специальных переменных. Но ReActions, хвала ему, компенсирует недостаток...

Из-за причин активации КБ, чанк с ними должен быть всегда загружен. Да не только чанк, вся схема. Да, есть плагины для этого, но скорость работы КБ остаётся проблемой. С ReActions я могу вычислять некоторые события быстрее, но передавать их в схему дальше всё так же приходится медленно. (Я на 1.5.2)
Мало того, что медленно, приходится почти всегда преобразовывать сигнал, выводить его на ячейки "и" и "или", что ReActions не может делать с разными активаторами (в смысле сравнивать разные активаторы на предмет срабатывания\не срабатывания. Знаю, что можно сделать кучу костылей, но на это уйдёт куда больше времени, чем простое подключение к схеме.)

Ещё одним казусом в КБ является очерёдность срабатывания. Я научился создавать схемы, которые проводят моментальные операции.

Например: определить двух рандомных игроков, определить трёх рандомных игроков, которые не являются предыдущими двумя, определить всех игроков, которые не являются перечисленными ранее. Выдать первым 5 эффектов, 3 вещи и пару сообщений. Выдать вторым 3 эффекта и 3 сообщения. И последним выдать пару сообщений и переменных.

Можете посчитать, сколько действий требовалось сделать одновременно. А проблема такая: если одновременно запитать все КБ, которые требуются для выполнения тех команд, то сработают они абсолютно рандомно. Мне приходилось вписывать в каждый КБ "/say 1-∞" и определять, что за чем срабатывает. Мало того, если я хочу расширить схему всего лишь одним КБ, то вся последовательность сбивается. Это тратит уйму времени и отбивает желание что-то исправлять :(

Да, ReActions как манна небесная, но большинство операций всё же приходится делать в схемах, которые требуют загруженных чанков. А мои ивенты только растут в масштабах и целях. И держать загруженным чанки со схемой просто нереально.

Прошу я, значит, вот что: добавить весь функционал КБ, выбора игрока и его определения через КБ в ReActions. (В том числе и функции из высших версий. Думаю, сделать алгебраические действия в плагине не проблема). В высших версиях (1.8, вроде) есть возможность выводить значение переменной (не знаю как, не изучал подробно). Можно было бы это добавить в качестве плейсхолдеров.

Например, хотелось бы, чтобы все активаторы умели ловить игрока в радиусе от точки, с переменной Scoreboard. И чтобы к любому событию можно было бы привязать это определение. Это то, что безумно не хватает в ReActions :)

Что, собственно, я хочу получить:
Я хочу свести все действия со Scoreboard и ловлей игроков по координатам\радиусам\наличию переменных (самое главное)\ в плагине, а результат тестировать всего лишь одним КБ, который будет выводить сигнал с помощью компаратора :)

Я почти ничего не понял ;) Кроме того, что нужно расширить функционал по выбору игроков (вокруг координаты/игрока случайных/ближайших и т.п.)

Кстати, поддержка математических выражений есть. Но надо будет нормально описать. Также как и переменные.

Накопал я какие-то %var%, понятного для меня описания к которым не нашёл :(
Думаю, что эти %var% и являются чем-то на подобии переменных в Scoreboard?
Если да, то почему бы не убрать их и не сделать более простую и уже встроенную работу со Scoreboard?
Мне категорически не нравится то как устроен Scoreboard. Вообще. Я из-за этого перестал обновлять плагин Ok'Glass! В общем, функционал Scoreboard если будет в ReActions, то исключительно для вывода и всё.
Хотя возможно, мне стоит изучить вопрос ещё раз и сделать наоборот - обновить Ok'Glass и написать для него модуль читающий переменные из ReActions. В общем буду думать.

26. Можно ли в качестве маски message использовать несколько строк текста? Если да, то как это можно сделать?
Прямо сейчас это можно сделать связкой активаторов с использованием персональных переменных.
Сделать же ожидание нескольких строк... Теоретически можно. Надо будет подумать.

27. Можно ли ссылаться на игрока, который находится в мире/с правом/в группе/и та далее? Можно ли применять флаги к плейсхолдерами? :D
Например:
Игрок пишет команду /whois nick. Если nick в мире/с правом/в группе/.../, то команда выполнена не будет. (И можно ли создать плейсхолдер к аргументу? То есть есть cmd:whois и arg1:*. Можно ли превратить arg1:nick в %arg1:*%?)

Ну здесь nick - это будет %arg1% - дальше -- это работа с переменными.

28. WALK_BLOCK не проверяет нахождение внутри блока. Только стоя на блоке :(
Ну да. Исключение - полублоки (с точки зрения "целых" координат - игрок, который топает по полублоку находится в том же блоке, что сам полублок.
Дайте пример, чего нужно отловить. Подумаю как это лучше будет сделать. Можно будет добавить для WALK_BLOCK пару дополнительных параметров.
 
1. Action_delayed. Смотрите:
Игрок активирует активатор, в котором есть action_delayed с time:30s. Если игрок перезайдёт и подождёт эти 30 секунд, то действие по отношению к нему выполнено не будет. Проверял на message - не даёт сообщение после перезахода.
2. Активатор-звук. Есть пара звуков, которые воспроизводятся таким образом, что отследить по-другому, кроме как звуком, нельзя. Например: превращение зомби в жителя. При этом проигрывается звук.
Можно отследить, нажал ли игрок на моба с яблоком в руке. Но как отследить, что моб под эффектом слабости? - Никак.
3. Из Scoreboard: вывод переменных в плейсхолдеры, ловля переменных Scoreboard как флаги, выбор рандомного\ближайшего\всех игроков при действиях с ними и алгебраические действия с переменными Scoreboard (это уже реализовано на 1.8, но, ядер сервера ни них же нет почти... И плагинов...)
4. Изменяемые характеристики игрока:
• Флаг Скорости бега\падения\плаванья.
• Опыт, сытость.
• Флаг проверки скорости получения урона (скорость, с которой игрок получает урон. Пример: один раз в секунду, в две, в три...).
• Флаг проверки мощности полученного урона.
• Добавление\отнимание времени у эффекта.
• Флаг проверки скорости использования предметов. И удачного\не удачного использования. Т.е. выпил зелье - засчитано. Начал пить, но оторвался - не засчитано (item_click).
• Флаг проверки количества пройденных блоков (можно было бы сделать игру "холодно\горячо", но не знаю как сделать сообщение при приближении к какому-то объекту на какое-то количество блоков. Я не говорю за регион, т.к. это кубоид или полинон. Именно количество блоков, на которое приблизился игрок к цели.)
5. WALK_BLOCK. Нужно отловить нахождение в блоке портала (для портала, который мог бы создать любой).
6. Как можно прервать action_delayed? Т.е., например, игрок зашёл в регион, ему начало по очереди писать сообщения. Но как только он выйдет из него, сообщения должны бы прекратить писаться, чего не происходит и действия прерывания активатора я не видел.
 
Последнее редактирование:
У меня лишь один вопрос. Дело в том что после того как добавляешь активатор, действие или флаг с помощью команды, весь русский текст преобразовывается в следующего типа символы: \u0441.
Это для меня большая проблема, так-как сейчас появилась необходимость немного отредактировать текст.
 
7. FLAG_SET не работает как нужно. Состою в группе игроков, но выполняется противодействие :(
Код:
  Test:
    command: test
    flags:
    - GROUP=Player
    - GROUP=Moderator
    - FLAG_SET=GROUP=Player GROUP=Moderator
    actions:
    - CANCEL_EVENT=true
    - message=player:%player% Test
    reactions:
    - message=player:%player% :(

8. Мне кажется, или был активатор на присутствие предмета в инвентаре?...
9. Попытался заменить команду //wand через активатор command, но если писать cmd:/wand, то WE выдаёт своё. А если писать cmd:wand (т.е. набирать надо /wand), то активатор работает. Как можно поправить ситуацию? Даже с cancel_event=true не работает:
Код:
  Wand:
    command: cmd:/wand
    flags: []
    actions:
    - CANCEL_EVENT=true
    - item_remove_inventory=271*999
    - action_delayed=time:50ms action:{cmd_op kit wand}
    reactions: []
UPD:
Магическим образом активатор стал ловить команду //wand о_О
Ещё активатор срабатывает дважды при ///wand о_О
Вот код:
Код:
  Wand:
    command: cmd:wand
    flags: []
    actions:
    - CANCEL_EVENT=true
    - item_remove_inventory=271*999
    - action_delayed=time:50ms action:{cmd_op kit wand}
    reactions: []

10. Личный таймер... Я думал над созданием таймера для игрока из действия активатора, а, после отработки таймера, EXEC, вызываемый им, должен был удалять таймер и самого себя, а так же совершать действия по отношению к игроку, который "создал" таймер. Но тут есть несколько вытекающих:
• Как понять, какому игроку "принадлежит" таймер? Как задать таймеру игрока, который вызвал активатор?
• Как создавать активаторы с разным именем, чтобы они не конфликтовали? Ведь таймеры и EXEC'и будут создавать несколько игроков одновременно.
• Как удалить EXEC, если игрок, которому принадлежит EXEC, вышел?
Можно ли использовать конструкцию в активаторе, вызываемым игроком?
Код:
cmd_op=ra add timer TimerExecUser%player% timer-type:Server time:*_10_*_*_*_? activator:ExecUser%player%
cmd_op=ra add EXEC ExecUser%player%
cmd_op=ra add EXEC a действия
cmd_op=ra add EXEC a cmd_op ra remove timer TimerExecUser%player%
cmd_op=ra add EXEC a cmd_op ra remove activator ExecUser%player%
И можно ли обойтись без этого костыля, просто добавив нормальную работу action_delayed при перезаходе игрока? :)
11. Не знаю, проблема или нет, но при выдаче предметов плагин почему-то не обрабатывает большие lor'ы.
Код:
2014-09-27 23:13:17 [INFO] [ReActions] Could not parse item material name (id) Топор_привата

12. Можно ли в качестве действия добавить удаление конкретного текста или блока текста, выводимого в чат без применения активатора message? Т.е. запихнуть активатор в действие :D
Имею в виду, что можно было бы научить активатор message определять причинно-следственную связь. То есть, чтобы message ловил действие плагина cmd_op, смотрел, выдало ли игроку сообщение после действия cmd_op, например, "0 блоков выделено" (/rg select), и скрывал его через cancel_event.
13. Можно список регулярных выражений, которые поддерживаются плагином? Первый раз, кстати, вижу их упоминание в ReActions. Может, Вы добавили их, а написать забыли? :D
А поддерживает ли плагин регулярные выражения, которые есть в notepad++? Или они совсем другие?
14. Насчёт двадцатого пункта. Я пытался вставить плейсхолдер в message, но текст, который я задавал, производил же не сам игрок? То есть, плейсхолдер просто не работал, т.к. не было игрока, который активировал message (а вообще возможно, чтобы message ловил игрока, который произвёл текст?). Код действия, что вызывало то сообщение:
Код:
  Pepel2:
    command: cmd:up arg1:Pepel2
    flags: []
    actions:
    - action_delayed=time:100ms action:{cmd_op kit Pepel_II}
    reactions: []
Так вот... Как насчёт того, чтобы %player% можно было использовать в дальнейших действиях? Например:
Есть сообщение: "Игрок Lyosha12 получил меч"
Маска ловит "Игрок %player% получил меч"
И подставляет %player% вместо, например, %PlayerInMessage%
15. Опять магия с //wand
При написании //wand должно удалять все топоры и выдавать новый из действия.
Код:
  Wand:
    command: cmd:wand
    flags: []
    actions:
    - CANCEL_EVENT=true
    - item_remove_inventory=271*999
    - action_delayed=time:5ms action:{cmd_op kit wand}
    reactions: []
Но при повторном написании команды и при нахождении в инвентаре нового топора (с тем же ID271), он не удаляется, а новый топор всё равно выдаётся о_О
 
Последнее редактирование:
У меня лишь один вопрос. Дело в том что после того как добавляешь активатор, действие или флаг с помощью команды, весь русский текст преобразовывается в следующего типа символы: \u0441.
Это для меня большая проблема, так-как сейчас появилась необходимость немного отредактировать текст.

Это скорее всего вопрос настройки консоли и сервера. Рекомендую в строку запуска сервера добавить ключа -Dfile.encoding=UTF8
7. FLAG_SET не работает как нужно. Состою в группе игроков, но выполняется противодействие :(
Код:
  Test:
    command: test
    flags:
    - GROUP=Player
    - GROUP=Moderator
    - FLAG_SET=GROUP=Player GROUP=Moderator
    actions:
    - CANCEL_EVENT=true
    - message=player:%player% Test
    reactions:
    - message=player:%player% :(
Вы дублируете. Если у Вас получается условие: GROUP=Player И GROUP=Moderator И (GROUP=Player ИЛИ GROUP=Moderator)
Т.е. по факту это условие будет выполнять только когда игрок и в группе Player и в группе Moderator.
Чтобы или-или, нужно оставить только флаг " - FLAG_SET=GROUP=Player GROUP=Moderator"

8. Мне кажется, или был активатор на присутствие предмета в инвентаре?...
Нет. Но на одном сервере (ещё до появления активатора ITEM_WEAR) использовали флаг наличия предмета в инвентаре и активатор REGION.


9. Попытался заменить команду //wand через активатор command, но если писать cmd:/wand, то WE выдаёт своё. А если писать cmd:wand (т.е. набирать надо /wand), то активатор работает. Как можно поправить ситуацию? Даже с cancel_event=true не работает:
Код:
  Wand:
    command: cmd:/wand
    flags: []
    actions:
    - CANCEL_EVENT=true
    - item_remove_inventory=271*999
    - action_delayed=time:50ms action:{cmd_op kit wand}
    reactions: []
UPD:
Магическим образом активатор стал ловить команду //wand о_О
Ещё активатор срабатывает дважды при ///wand о_О
Вот код:
Код:
  Wand:
    command: cmd:wand
    flags: []
    actions:
    - CANCEL_EVENT=true
    - item_remove_inventory=271*999
    - action_delayed=time:50ms action:{cmd_op kit wand}
    reactions: []
Прикольно. Про команды с двойными слэшами я не задумывался. Попробую.

10. Личный таймер... Я думал над созданием таймера для игрока из действия активатора, а, после отработки таймера, EXEC, вызываемый им, должен был удалять таймер и самого себя, а так же совершать действия по отношению к игроку, который "создал" таймер. Но тут есть несколько вытекающих:
• Как понять, какому игроку "принадлежит" таймер? Как задать таймеру игрока, который вызвал активатор?
• Как создавать активаторы с разным именем, чтобы они не конфликтовали? Ведь таймеры и EXEC'и будут создавать несколько игроков одновременно.
• Как удалить EXEC, если игрок, которому принадлежит EXEC, вышел?
Можно ли использовать конструкцию в активаторе, вызываемым игроком?
Код:
cmd_op=ra add timer TimerExecUser%player% timer-type:Server time:*_10_*_*_*_? activator:ExecUser%player%
cmd_op=ra add EXEC ExecUser%player%
cmd_op=ra add EXEC a действия
cmd_op=ra add EXEC a cmd_op ra remove timer TimerExecUser%player%
cmd_op=ra add EXEC a cmd_op ra remove activator ExecUser%player%
И можно ли обойтись без этого костыля, просто добавив нормальную работу action_delayed при перезаходе игрока? :)
Ну с action_delayed - я посмотрю в любом случае. Ну и я бы не рекомендовал сейчас делать такие хитрости с таймерами.
Дело в том, что я планирую таймеры перевести в категорию активаторов. Т.е. вы не будете добавлять таймер, а просто будете создавать активатор, где в параметрах будут описываться когда он будет выполняться. Механизм таймеров останется, но будет переведён на более "низкий" уровень. Скорее всего, недоступный с помощью команд.[/quote]

11. Не знаю, проблема или нет, но при выдаче предметов плагин почему-то не обрабатывает большие lor'ы.
Код:
2014-09-27 23:13:17 [INFO] [ReActions] Could not parse item material name (id) Топор_привата
Дайте всю строку, где описывается предмет. Надо выяснить в чем причина.

12. Можно ли в качестве действия добавить удаление конкретного текста или блока текста, выводимого в чат без применения активатора message? Т.е. запихнуть активатор в действие :D
Имею в виду, что можно было бы научить активатор message определять причинно-следственную связь. То есть, чтобы message ловил действие плагина cmd_op, смотрел, выдало ли игроку сообщение после действия cmd_op, например, "0 блоков выделено" (/rg select), и скрывал его через cancel_event.
"Ловить" действие - это уже активатор. Активатор - по сути это обработчик события, которое вызвано каким-то действием.
В отдельных случаях это стандартные события bukkit, в иных - эти же события с учетом каких-то условий, в третьих - это какие-то собственные события, возникающие при определенных условий.
Выполнение команды (CMD_OP) и получение игроком сообщения (активатор MESSAGE) связать не так просто как кажется. Вы можете выполнить несколько команд в одном активаторе и получить несколько сообщений от них. При этом не факт, что Вы будете получать сообщения сразу после выполнения команды.
В общем это задача для развития активатора MESSAGE. Я подумаю над этим.

13. Можно список регулярных выражений, которые поддерживаются плагином? Первый раз, кстати, вижу их упоминание в ReActions. Может, Вы добавили их, а написать забыли? :D
А поддерживает ли плагин регулярные выражения, которые есть в notepad++? Или они совсем другие?
Регулярные выражения поддерживаются только в MESSAGE - в качестве поиска сообщения. Это полный аналог, того что применяется в плагинах (на основе которых и сделан MESSAGE) MessageFilter и MessageCommander. Т.е. в активаторе указываем "type: REGEX" и тогда значение параметра mask - будет восприниматься как регулярное выражение, которое будет использоваться для сопоставления обрабатываемому сообщению.
Я не знаю, что там поддерживает, notepad++. Но думаю это одно и тоже (или максимально похоже). В любом случае я при написании регулярных выражений использую http://regex101.com/ -- если тут выражение отрабатывает, то оно же отрабатывает и в Java (ну и, соответственно, в ReActions)
 
Что не правильного в следующем коде?:
- ACTION_DELAYED=time:50ms action:{MESSAGE текст}
2014-09-28 17:22:44 [INFO] [ReActions] Could not parse item material name (id) Топор_выделения
Код:
  Give:
    item: '294'
    flags: []
    actions:
    - item_give=§fТопор_выделения@§eКак_заприватить_территорию?@§61._§eВам_нужно_выделить_куб.@_§3•§e_Кликните_левой_кнопкой_мыши_по@§e___блоку,_который_находится_снизу_дома.@_§3•§e_Кликните_правой_кнопкой_мыши_по@§e___блоку,_который_находится_вверху_дома.@___§6В_скобках_показаны_координаты_точек@§6___(x,y,z)_и_объём_куба.@§62._§eНаберите_следующую_команду:§2@_§c•_§3/rg_claim_name@§6___Name_§e-_имя_региона.@_§3•§7_Вместе_с_регионом_приватятся@§7___сундуки,_печки_люки_и_т.д.@_§3•_§7Игрокам_доступен_объём_привата@§7___в_250.000_кубов_а_так_же_5_регионов.$271*1
    reactions: []
Кстати, нашёл способ использовать двоеточие в тексте: поставить после него цветовой код.
UPD:
Не знаю, что не работало, но сейчас работает. Видимо, совершал ошибку в описании. Вот сейчас выдаёт предмет, но описание идёт не полное...
4b333f45a0e6098b5571c8267c8442bf.png

Ну что не так? Не работает :(
Код:
COMMAND:
  Test:
    command: cmd:test
    flags:
    - FLAG_SET=GROUP=Moderator GROUP=Player
    actions:
    - CANCEL_EVENT=true
    - message=player:%player% Test
    reactions:
    - message=player:%player% :(

Вопрос: при указании региона во флагах, как определяется мир? Ведь в разных мирах могут быть регионы с одинаковыми именами. А в конфиге, вроде, нет ссылок на разные миры.
При спавне моба где указание на продолжительность эффекта?
potion:<Эффект>[:<Уровень>]
Спавн моба через EXEC:
Код:
[SEVERE] Could not pass event ExecEvent to ReActions v0.9.3
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:478)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:463)
    at me.fromgate.reactions.event.EventManager$1.run(EventManager.java:231)
    at org.bukkit.craftbukkit.v1_5_R3.scheduler.CraftTask.run(CraftTask.java:58)
    at org.bukkit.craftbukkit.v1_5_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:344)
    at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:509)
    at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:227)
    at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:472)
    at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:404)
    at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
Caused by: java.lang.NullPointerException
    at me.fromgate.reactions.actions.ActionDelay.execute(ActionDelay.java:41)
    at me.fromgate.reactions.actions.Action.executeAction(Action.java:75)
    at me.fromgate.reactions.actions.Actions.performAction(Actions.java:187)
    at me.fromgate.reactions.actions.Actions.executeActivator(Actions.java:179)
    at me.fromgate.reactions.activators.ExecActivator.activate(ExecActivator.java:28)
    at me.fromgate.reactions.activators.Activator.executeActivator(Activator.java:274)
    at me.fromgate.reactions.activators.Activators.activate(Activators.java:357)
    at me.fromgate.reactions.RAListener.onRegionLeave(RAListener.java:379)
    at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
    ... 12 more
Код:
EXEC:
  LavaForest1Mob:
    flags:
    - DELAY=SpawnMobHG2
    actions:
    - DELAY=60s/SpawnMobHG2
    - mob_spawn=type:zombie num:1 loc:LavaForest1 potion:INVISIBILITY drop:§6Меч_правосудия$283*1 health:40 helm:310 weapon:267 dmg:2
    reactions: []
REGION_ENTER:
  LavaForest1:
    region: lavaforest1
    flags: []
    actions:
    - action_delayed=time:1s action:{velocity vector:0,0,1.5}
    - action_delayed=time:1050ms action:{velocity vector:0,0,1}
    - action_delayed=time:1100ms action:{velocity vector:0,0,1}
    - action_delayed=time:1150ms action:{velocity vector:0,0,1.5}
    - action_delayed=time:1200ms action:{velocity vector:0,1,2}
    - action_delayed=time:1250ms action:{velocity vector:0,1,0}
    - action_delayed=time:1250ms action:{velocity vector:0,0.5,-0.5}
    - action_delayed=time:1300ms action:{velocity vector:0,1,0}
    - action_delayed=time:1550ms action:{velocity vector:0,0.3,-0.1}
    - action_delayed=time:1600ms action:{velocity vector:0,0.3,-0.1}
    - action_delayed=time:1650ms action:{velocity vector:0,0.3,-0.1}
    - action_delayed=time:1700ms action:{velocity vector:0,0.6,-0.6}
    - action_delayed=time:1700ms action:{execute activator:LavaForest1Mob player:null}
    reactions: []
Если вызывать моба напрямую из LavaForest1, то всё норм. Что не так?
UPD:
Нельзя юзать player:null, поставил all - заработало.
Не дропается чаренный меч :(
- mob_spawn=type:zombie num:1 loc:LavaForest1 potion:SPEED:1,JUMP:2 drop:§6Меч_правосудия$283:15*1,Knockback,DAMAGE_ALL:2 health:50 dmg:0.1 helm:310 weapon:264 name:&4&k|&cСатана&4&k|
Ась? :D
[ReActions] Warning! VELOCITY_JUMP action is under construction. In next version of plugin it could be changed, renamed or removed!
Если в моба попадает снаряд, то это же событие? А если это событие, то почему бы к нему не привязать действия? И первым, наверно, будет изменение моба. Т.е. деспавн того, в которого попали, и спавн нового. Интересно бы вышло.
А как насчёт интегрирования Jobs? Т.е. считывание, сравнение, изменение переменных опыта\уровней jobs. Можно было бы намного расширить спектр профессий.
@fromgate
Вы ещё с нами? :)
Рывок в локацию нужен как никогда :D
 
Последнее редактирование:
А я просто хотел бы напомнить про активаторы ITEM_DROP и ITEM_PICKUP, так как тоже нужны как никогда.
 
Клик по игроку в виде флага и активатора... Возможно ли?
Активатор в виде блока, по которому кликнули?
А, да, я не сказал, в чём соль переменных ReActions? Их нельзя изменять из КБ :)
 
Ребят, есть переменная (пользовательская) test, можно ли ее передать в базу данных на сайте?
Я видел есть какой-то функционал для работы с БД, но так и не понял.
Например, сделать Top игроков по PvP на сайте.
И да, можно ли реализовать топ игроков по PvP в самой игре, это тоже вопрос.
Допустим, Вася имеет скилл 5, Петя 6, а Олег -10.
Можно ли вывести топ по команде /pvp?
@fromgate
 
Вопрос насчёт таймеров:
Мне нужно сделать асинхронный таймер. Например:
Есть два активатора EXEC, которые должны запускаться каждые пять и одну минуту. Будет ли совпадать запуск второго активатора с пятым после четырёх минут? И как этого избежать? (Да, можно разделить на тип SERVER и InGame. Тогда, может быть, будет асинхронность. Но если активаторов больше и нужно, чтобы ни один не совпадал с другим?)
 
Ребят, есть переменная (пользовательская) test, можно ли ее передать в базу данных на сайте?
Я видел есть какой-то функционал для работы с БД, но так и не понял.
Например, сделать Top игроков по PvP на сайте.
И да, можно ли реализовать топ игроков по PvP в самой игре, это тоже вопрос.
Допустим, Вася имеет скилл 5, Петя 6, а Олег -10.
Можно ли вывести топ по команде /pvp?
@fromgate

Поддержка MySQL есть. При желании можно и топ-пвп сделать и многое другое. На одном сервере фиксировались всякие достижения игроков, выводилась ситуация о фракциях (мир/война) и т.п.

Вопрос насчёт таймеров:
Мне нужно сделать асинхронный таймер. Например:
Есть два активатора EXEC, которые должны запускаться каждые пять и одну минуту. Будет ли совпадать запуск второго активатора с пятым после четырёх минут? И как этого избежать? (Да, можно разделить на тип SERVER и InGame. Тогда, может быть, будет асинхронность. Но если активаторов больше и нужно, чтобы ни один не совпадал с другим?)

Ну можно сделать проще ;) Вам нужно чтобы время выполнения таймера было произвольным и слабопредсказуемым? Добавьте в активатор флаг CHANCE (параметр - вероятность, число).


P.S. Все предложения по новым активаторам я "записываю". Рано или поздно что-то добавится ;)
 
Поддержка MySQL есть. При желании можно и топ-пвп сделать и многое другое. На одном сервере фиксировались всякие достижения игроков, выводилась ситуация о фракциях (мир/война) и т.п.



Ну можно сделать проще ;) Вам нужно чтобы время выполнения таймера было произвольным и слабопредсказуемым? Добавьте в активатор флаг CHANCE (параметр - вероятность, число).


P.S. Все предложения по новым активаторам я "записываю". Рано или поздно что-то добавится ;)
Я поразбираюсь на досуге с mysql (пока все-равно у меня это не приоритет), но хотелось бы видеть какой-то рабочий пример (например, с видео) :)
 
Оченеь плохо, что в плагине нельзя указывать различать или не различать регистр букв, это относится именно ко всем Delay-задержкам, которыми игрок с ником, например, Korvinius и KoRviniuS, воспринимаются как разные игроки и используя это, игроки могут обходить задержки (((
 
1. Не работает arg1:* в command:
Код:
  Firework:
    command: cmd:fw arg1:*
    flags: []
    actions:
    - cmd_op=firework %arg1%
    - CANCEL_EVENT=true
    reactions: []
Срабатывает только при /fw arg1:*
2. Не работает FLAG_SET:
Код:
  Test:
    command: cmd:test
    flags:
    - FLAG_SET=GROUP=Moderator GROUP=Player
    actions:
    - CANCEL_EVENT=true
    - message=player:%player% Test
    reactions:
    - message=player:%player% :(
В группе модератора или игрока выполняется противодействие.
3. Не дропается чаренный меч
Код:
- mob_spawn=type:zombie num:1 loc:LavaForest1 potion:SPEED:1,JUMP:2 drop:§6Меч_правосудия$283:15*1,Knockback,DAMAGE_ALL:2 health:50 dmg:0.1 helm:310 weapon:264 name:&4&k|&cСатана&4&k|
4. Вопрос: при указании региона во флагах, как определяется мир? Ведь, в разных мирах могут быть регионы с одинаковыми именами. А в конфиге, вроде, нет ссылок на разные миры.
5. Можно ли в активаторе message поставить флаг REGION, чтобы активатор срабатывал только, если игроку послано сообщение в том регионе (и, соответственно, его убирать только в этом регионе)?
6. Будет ли возможность в качестве активатора использовать аргументы, которые вводит игрок или которые ему выводятся (command, message)? То есть, например, игроку пишет: "В два ночи Lyosha12 телепортировался...". Можно ли будет из этого вытащить ник и использовать его в действиях? Например так: ".* .* .* %getplayer% .*"
7. Как можно прервать action_delayed? То есть, как можно прервать выполнение действий активатора (то бишь саму работу активатора)? (Не помешало бы и прерывать действия отдельно).
8. Установить поиск текста по регулярным выражениям можно. А можно ли ссылаться на текст по регулярным выражениям? Например, я придумал небольшую идейку: игрок, выполняя действие, создаёт несколько активаторов с динамическим именем "Activator%player%". (cmd_op=ra add ActivatorType Activator%player% данные)

А если мне надо удалить этот активатор с динамическим именем? При чём, этот активатор может запускать и другой игрок, который к предыдущему не имеет ни какого отношения. Как насчёт использования регулярных выражений в действиях? Например:
Код:
ITEM_CLICK:
  ActivatorDelete:
    item: '339'
    flags: []
    actions:
    - cmd_op=text-type:REGEX action:{ra remove activator Activator.* (или как там ссылаться на любую последовательность букв в середине слова?)}
    reactions: []

9. Где применяется рандом, кроме как в выдаче предметов и флаге? Как можно реализовать рандомизацию событий? Например, есть несколько десятков кнопок, которые при нажатии на них запускают действие, которое, в свою очередь, активирует один и только один из нескольких десятков активаторов для игрока, который нажал кнопку.

Как можно такое сделать? Мой план:
Для каждого вызываемого EXECUTE с флагом CHANCE ставить персональную задержку. И, если хоть один активатор сработает, то задержка установится на весь вагон событий, которые вызывает одна кнопка.

Тут я вижу несколько проблем. Во-первых, для каждой кнопки придётся создавать перечень исполняемых активаторов. С другой стороны, можно ссылаться на общий EXEC, но как тогда из этого общего EXEC передать %player% другим EXEC? Я пробовал сделать на этом цикл, вызывая первый EXEC из второго и наоборот, но ничего не вышло. Значит, это так не работает?

Во-вторых, какая задержка нужна? За какое время плагин выполнит, допустим, 50 активаторов? Если установить маленькую, то по истечении этого времени самый последний активатор может запуститься, заставив сработать систему дважды ._.

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

Так вот, как сделать оптимальный вариант или же для этого будет придуман отдельный флаг\действие, который запускает рандомно только одно действие из всех в активаторе?

Нет времени даже на переписку в форумах, @fromgate :) ?
 
Последнее редактирование:
@Lyosha12
Сейчас действительно нет времени. Форум читаю с телефона во время ужина или завтрака. Постараюсь на выходных осмыслить и ответить
 
10. Как насчёт активатора, который срабатывает при присутствии другого игрока\игроков в радиусе от третьего игрока, где всем игрокам заданы флаги\переменные? Например:
Хочу я сделать мини-игру на подобии гонок с боссом в NFS Carbon. Очки будут начисляться по времени нахождения одного игрока рядом с другим.

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

Это похоже на активатор "region" и "rgleave". При приближении одного игрока к другому, первый входит в динамическую зону вокруг другого игрока. При этом ему постоянно выдаётся переменная, которая говорит о том, что он в пяти блоках от соперника. Если он выходит из радиуса в пять блоков, то первая переменная снимается и устанавливается другая, которая говорит о том, что он в десяти блоках от него.

Если же это будет флаг, то, кроме радиуса, нужно ещё попытаться указать любые другие возможные флаги (а-ля флаг в флаге).
Например:
Код:
   flags:
   - RadiusPlayer=r:5 flags:{...}
Примерно то же, что и с FLAG_SET.

Добавите когда-нибудь такие "динамические" активаторы\флаги?

P.S. Можно было бы указывать и радиус относительно точки\игрока. Тогда так:
Код:
   flags:
   - Radius=type-radius:<PLAYER|BLOCK> block:%here%(к примеру) r:<n> flags:{[...]}

P.P.S
Можно было бы добавить и точку, на которую должен смотреть игрок. Например: если указана локация, то место, куда должен смотреть игрок, будет в виде трёх блоков с локацей точки отсчёта в центре. С игроком тоже можно поступить аналогично, только уже нужно смотреть чётко на блоки тела другого игрока. Тогда флаг будет выглядеть так:
Код:
   flags:
   - Radius=type-radius:<PLAYER|BLOCK> block:%here%(к примеру) kick:[true] r:<n> flags:{[...]}

11. Как насчёт функции сохранения инвентаря, как во многих плагинах? Например:
Действием "SaveInv=%player%/NameSave" инвентарь будет сохранён в БД.
А действием "GiveInv=%player%/NameSave" инвентарь будет выдан игроку в те же слоты, где и был.
Просто, но чертовски экономит время :)
12. Желательно, чтобы при написании в сообщении %delay% показывалось оставшееся время в таком формате: "MM:SS", чтобы можно было написать "...осталось %delay% мин.". (Муторно возиться с окончаниями :) )
13. Насчёт WALK_BLOCK. Можно стоять на одном блоке (на его краю), а флаг будет считать, что игрок стоит на воздухе. Можно ли расширить зону проверки?
14. Насчёт действия уменьшения прочности предметам. Нужно, чтобы можно было уменьшать прочность не только тем, что в руке. То есть, чтобы можно было нацелиться на весь инвентарь (и броню) по имени предмета.
15. Не получается сослаться на конкретное количество игроков в регионе (1):
Код:
  TNTRunFinish1Area1:
    region: tntrunfilterwinarea1-1
    flags:
    - '!REGION_PLAYERS=tntrunarea1/2'
    actions:
    - message=player:%player% &6[&cTNT&e-&4Run&6] &3Вы заняли первое место!
    reactions: []
Если указывать только
- '!REGION_PLAYERS=tntrunarea1/2'
То работает, а вместе с
- REGION_PLAYERS=tntrunarea1/2
- Нет. И вообще, что за дьявольская система? Если я говорю, что хочу проверять количество игроков меньше или равно одному, то почему я должен писать как '!REGION_PLAYERS=tntrunarea1/2'? Логика? Или логика в том, что эта проверка работает как "от n, не включая, n"?

Если я буду делать так:
Код:
  TNTRunFinish1Area1:
    region: tntrunfilterwinarea1-1
    flags:
    - '!REGION_PLAYERS=tntrunarea1/2'
    - REGION_PLAYERS=tntrunarea1/1
    actions:
    - message=player:%player% &6[&cTNT&e-&4Run&6] &3Вы заняли первое место!
    reactions: []
То после исправления ошибки(?) будет считаться, как "от одного игрока до двух включительно"?
@fromgate ну отвечайте хоть по кусочкам. Иногда реально проблемы и приходится делать костыли :(
16. Можно ли сделать флаг, который проверяет, стоит ли игрок на месте (одном блоке) заданное количество времени?
17. Есть вариант разделить action_delayed на 2 типа: первый будет сбрасываться при выходе игрока из игры, а второй будет работать не зависимо от выхода игрока, к которому привязан action_delayed, из игры.
18. Плагин ScLoad не работает, если указать в качестве отправной точки не загруженный (не прогруженный чанк). Воспроизводится только один блок из всей схемы. Можно ли обновить плагин и загружать\прогружать чанки вместе со schematick'ом? Ну нет возможности держать игроков рядом с постройкой, которая должна регениться :(
19. Что такое "join-state: ANY"? Об этом вообще ни где не написано о_О
Код:
JOIN:
  TNTRunConnectInArea1:
    join-state: ANY
    flags: []
    actions: []
    reactions: []

20. Проблема. При включённом ReActions TPS падает с 19 до 15. Может, из-за большого количества активаторов типа REGION?
Проблема была в двух действиях:
- region_clear=region:tnt2 type:all
- region_clear=region:tnt1 type:all
Перевёл в таймер - TPS 18
21. Добавьте локальный дебаг-режим: /ra ldebug activator true\false\off [a|b]
a - переключить debug-режим
b - одноразовый debug-режим (активировал и off автоматом ставится)
22. Как определить "первого игрока" и "последнего игрока" (центрального? третьего? предпоследнего?) из n-го количества игроков (в регионе), которые по очереди запускают активатор "финиша"? Получается, надо добавлять к личной переменной значение глобальной переменной при каждом исполнении активатора "финиша" и сравнивать личную переменную с количеством игроков в регионе... Но, я так понимаю, что такое не возможно провернуть?
 
Последнее редактирование:
По поводу активаторов и новых функций. Сейчас вряд ли я буду добавлять или модифицировать какие-то активаторы. Дело в том, что назрела необходимость во внутренней переделке классов, касающихся активаторов и обработки событий. Не знаю приведет ли это ко внешним изменениям (команды, файлы сохранения)... Наверное приведет. Возможно будет промежуточная версия с мелкими правками, но не обещаю.


1. Не работает arg1:* в command:
Код:
  Firework:
    command: cmd:fw arg1:*
    flags: []
    actions:
    - cmd_op=firework %arg1%
    - CANCEL_EVENT=true
    reactions: []
Срабатывает только при /fw arg1:*

Странно. Сейчас попробовал:
Код:
  tcmd:
  command: cmd:tcmd arg1:*
  flags: []
  actions:
  - message=tcmd %arg1%
  reactions: []

Работает как надо.


1. Не работает arg1:* в command:
2. Не работает FLAG_SET:
Код:
  Test:
    command: cmd:test
    flags:
    - FLAG_SET=GROUP=Moderator GROUP=Player
    actions:
    - CANCEL_EVENT=true
    - message=player:%player% Test
    reactions:
    - message=player:%player% :(
В группе модератора или игрока выполняется противодействие.

Знак равно ставится в первом случае. Дальше разделитель - двоеточие. Уж извините ;)
Код:
  flags:
  - FLAG_SET=item_inventory:368 item_inventory:381

3. Не дропается чаренный меч
Код:
- mob_spawn=type:zombie num:1 loc:LavaForest1 potion:SPEED:1,JUMP:2 drop:§6Меч_правосудия$283:15*1,Knockback,DAMAGE_ALL:2 health:50 dmg:0.1 helm:310 weapon:264 name:&4&k|&cСатана&4&k|

Перед энчантами надо поставить "@". По моему так.

Код:
- mob_spawn=type:zombie num:1 loc:LavaForest1 potion:SPEED:1,JUMP:2 drop:§6Меч_правосудия$283:15*1@Knockback,DAMAGE_ALL:2 health:50 dmg:0.1 helm:310 weapon:264 name:&4&k|&cСатана&4&k|


1. Не работает arg1:* в command:
4. Вопрос: при указании региона во флагах, как определяется мир? Ведь, в разных мирах могут быть регионы с одинаковыми именами. А в конфиге, вроде, нет ссылок на разные миры.
Это моя природная лень. Использует только имя. Мир - значение не имеет. Соответственно, первый найденный регион с этим именем ;) Если у Вас несколько миров, то чтобы все работало нормально, придётся не использовать одинаковые имена для регионов. Возможно в будущем, я это как-то учту.

5. Можно ли в активаторе message поставить флаг REGION, чтобы активатор срабатывал только, если игроку послано сообщение в том регионе (и, соответственно, его убирать только в этом регионе)?
Можно. Активатор может сработать для всех игроков, но флаг REGION - соответственно определит игроков находящихся в определенном регионе.

6. Будет ли возможность в качестве активатора использовать аргументы, которые вводит игрок или которые ему выводятся (command, message)? То есть, например, игроку пишет: "В два ночи Lyosha12 телепортировался...". Можно ли будет из этого вытащить ник и использовать его в действиях? Например так: ".* .* .* %getplayer% .*"
В command - это %arg1% ... %argN% в message - это %word1%.. %wordN%

7. Как можно прервать action_delayed? То есть, как можно прервать выполнение действий активатора (то бишь саму работу активатора)? (Не помешало бы и прерывать действия отдельно).
Действия/Реакции выполняются последовательно.
Если говорить приментельно к активатору, то ACTION_DELAYED - это законченное действие, которое заключается в создании отложенной задачи. После него сразу же выполняется следующее действие, а вот отложенное действие - ждёт своего часа. Отключить его нельзя. Я подумаю что можно сделать, но пока в голову приходит только ещё одно действие, которое просто будет "отключать" все отложенные задачи для конкретного игрока.

8. Установить поиск текста по регулярным выражениям можно. А можно ли ссылаться на текст по регулярным выражениям? Например, я придумал небольшую идейку: игрок, выполняя действие, создаёт несколько активаторов с динамическим именем "Activator%player%". (cmd_op=ra add ActivatorType Activator%player% данные)

А если мне надо удалить этот активатор с динамическим именем? При чём, этот активатор может запускать и другой игрок, который к предыдущему не имеет ни какого отношения. Как насчёт использования регулярных выражений в действиях? Например:
Код:
ITEM_CLICK:
  ActivatorDelete:
    item: '339'
    flags: []
    actions:
    - cmd_op=text-type:REGEX action:{ra remove activator Activator.* (или как там ссылаться на любую последовательность букв в середине слова?)}
    reactions: []

9. Где применяется рандом, кроме как в выдаче предметов и флаге? Как можно реализовать рандомизацию событий? Например, есть несколько десятков кнопок, которые при нажатии на них запускают действие, которое, в свою очередь, активирует один и только один из нескольких десятков активаторов для игрока, который нажал кнопку.

Как можно такое сделать? Мой план:
Для каждого вызываемого EXECUTE с флагом CHANCE ставить персональную задержку. И, если хоть один активатор сработает, то задержка установится на весь вагон событий, которые вызывает одна кнопка.

Тут я вижу несколько проблем. Во-первых, для каждой кнопки придётся создавать перечень исполняемых активаторов. С другой стороны, можно ссылаться на общий EXEC, но как тогда из этого общего EXEC передать %player% другим EXEC? Я пробовал сделать на этом цикл, вызывая первый EXEC из второго и наоборот, но ничего не вышло. Значит, это так не работает?

Слушайте, тут что-то всё так накручено. Я ничего не понял ;) Создание активаторов на лету - это... мне даже в голову не приходило ;) Мне кажется проще будет "включать/выключать" их создавая/удаляя переменную, наличие которой проверять флагом.

Во-вторых, какая задержка нужна? За какое время плагин выполнит, допустим, 50 активаторов? Если установить маленькую, то по истечении этого времени самый последний активатор может запуститься, заставив сработать систему дважды ._.

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

Так вот, как сделать оптимальный вариант или же для этого будет придуман отдельный флаг\действие, который запускает рандомно только одно действие из всех в активаторе?

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

По поводу времени выполнения - всё будет выполняться за один тик. Отдельные действия - выполняются через тик. Насчет нагрузки, то если действия сами по себе не превышают пределы возможности сервера (к примеру не заливают весь сервер лавой), то нагрузка будет незаметна.
 
@fromgate
Спасибо за разъяснение флага "и". А то я уже насоздавал около ста активаторов xD
Ждём-с продолжения беседы :)
 
Назад
Верх