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

@fromgate, почему количество аргументов 9, хотя их 10?
Ибо счетчик был с нуля ;) Исправил.


@fromgate, а как насчёт отмены сообщения игрока через cancel_event в активаторе MESSAGE?
Это ещё в релизе 0.9.5 исправлено, я этот тикет, кажется закрывал. Сейчас перепроверил - всё ок.

Хм, теперь вообще ни одно сообщение не выводится...
Перестарался немного. Тоже исправил.

@fromgate, а при делении с остатком можно вывести этот самый остаток в переменную?
Я проверю позже. Возможно через CALC можно.

У нас есть 10 переменных с предметами в них. Каким способом их можно выдать трём игрокам без остатка? При чём, располагаться они должны в случайном порядке.
На ум приходит только способ с плейсхолдером рандомного числа. Он генерирует число от одного до десяти десять раз, и номер того предмета, что выпадает, выдаётся трём игрокам "по кругу". Однако, как исключить возможность генерации одного и того же числа дважды и больше?

Сейчас простым способом никак. Я вижу только такое решение - создавать переменную. Если такая уже существует - бросать рэндом снова.
Посмотрю, можно ли это будет как-то реализовать.

@fromgate, мне оставить место в туториале для активатора-смерти (обычной, от моба)? Или он будет добавлен ещё не скоро? Или Вы планируете переделать активаторы PVP_*, используя соответствующие параметры, указывающие на условия их запуска, как в случае с MESSAGE?

Я думаю, это всё-таки будет переделанный PVP-активатор с параметром "причина смерти".
0.9.5/2
https://dl.dropboxusercontent.com/u/64799811/ReActions/ReActions.jar
Хотел создать, настенные часы , сделал все как на туториале, а на этой команде ошибку выдало
/react add timer clock timer-type:server timer:0/1:*,*:*,*:? activator:clock

Почитайте тут:

http://reactions.fromgate.ru/timers.htm

В туториале, скорее всего, было что-то вроде:
/react add timer clock timer-type:server timer:0/1_*_*_*_*_? activator:clock
 
/react add REGION_ENTER dwarf dwarftp1
что я не правильно сделал на этот раз ( регион dwarftp1 находится в главном мире, я там же нахожусь)? Пишет что "ошибка при создании активатора"
Можете дать пример как все в конфиге выглядеть должно
 
0.9.5/3
https://dl.dropboxusercontent.com/u/64799811/ReActions/ReActions.jar
Добавлено:
  • Действие VAR_TEMP_SET id:<ИмяПеременной> value:<Значение> — это действие создает (или перезаписывает) временную переменную, которая действует в пределах активатора. На текущий момент, это реально востребовано только в:
  • Новый активатор MOB_DAMAGE type:<Тип> name:<Имя> — активатор нанесения урона игроком по мобу. Полностью по параметрам и временным плейсхолдерам полностью аналогичен активатора MOB_KILL, добавился плейсхолдер %damage%. Если изменить значение этой временной переменной, то.... моб получит именно такой урон, вместо запланированного. Действие CANCEL_EVENT этим активатором также поддерживается.

/react add REGION_ENTER dwarf dwarftp1
что я не правильно сделал на этот раз ( регион dwarftp1 находится в главном мире, я там же нахожусь)? Пишет что "ошибка при создании активатора"
Можете дать пример как все в конфиге выглядеть должно

Ошибка, думаю, из-за того, что такой активатор уже существует.
Сейчас нашёл недочет. Когда активаторы региона добавлялись командой, не пересчитывался кэш регионов и они были не видны. Если загружались из файла командой /react reload - всё нормально.
Эту ошибку я исправил (качайте файл по ссылке выше).

В файле с активаторами же, REGION_ENTER выглядит так:
Код:
REGION_ENTER:
  rgt2:
    region: test2
    actions:
    - MESSAGE=Вошли в регион test2

Помнится, в Java есть 2 способа выводить текст на экран: System.out.print() и System.out.println(). Второй тип ставит в начале строки символ её переноса и всё, что далее, пишется на новой строке. И, я так понимаю, в Minecraft перенос строк реализован вторым методом. Можно ли его подправить силами ReActions хотя бы в его собственных сообщениях?

В майнкрафте это вообще непонятно делается. К примеру, там есть специальный механизм для формирования страциц. Им сейчас выводится help к ReActions. У меня выглядит всё более-менее. Шрифт маленький, длина строки установлена в 60 символов.
А на твоих скриншотах, я вижу, что влезло от силы символов 55 (шрифт большой).
Хотя по логике количество символов должно быть одинаковым.

Так что буду снижать длину строки - и тогда можно будет переписать функцию отправки сообщения, чтобы она отправляла через аналогичный механизм с длиной строки в 55 символов.
@Lyosha12
Сейчас проверил. Если включен режим unicode в строку влазит около ~ 80 символов. Если выключен ~ 55. Идиотизм.
Могли бы легко сделать одинаковую длину.

Даже не знаю, что делать. Наверное придётся обрезать по 55 символам.
В общем, пожаловался моджангам: https://bugs.mojang.com/browse/MC-81876
У кого есть возможность, проголосуйте пожалуйста (и напишите, что Вас это жутко раздражает).
Может когда-то исправят...
 
Последнее редактирование:
Привет! Снова я) Помогите мне пожалуйста. Я решил сделать авто-шахту через РА, но я столкнулся с проблемой, а именно незнание активатора TP
Подскажите ка мне, как сделать так, что бы когда игрок находится в регионе mine1 его телепортировало туда, куда я хочу.
Вот как я сделал:
mine1:
flags: []
actions:
- BLOCK_FILL=block:stone chance:100 region:mine1
- BLOCK_FILL=block:coal_ore chance:10 region:mine1
- BLOCK_FILL=block:iron_ore chance:7 region:mine1
- BLOCK_FILL=block:gold_ore chance:5 region:mine1
- BLOCK_FILL=block:diamod_ore chance:3 region:mine1
- TP=loc:World,4102.5,71.0,4069.5,-129.899,39.6 region=world:mine1
reactions: []
Но не помогло :( А точнее не телепортирует.
Конечно, если вы могли бы написать за меня и рассказать как это все реализовано, был бы премного благодарен.
Вот что нужно мне:
1) В регионе mine1 рандомно спавнятся руды:
Добавляем в activators в exec вот это:
mine1:
flags: []
actions:
- BLOCK_FILL=block:stone chance:100 region:mine1
- BLOCK_FILL=block:coal_ore chance:10 region:mine1
- BLOCK_FILL=block:iron_ore chance:7 region:mine1
- BLOCK_FILL=block:gold_ore chance:5 region:mine1
- BLOCK_FILL=block:diamod_ore chance:3 region:mine1
reactions: []
После добавляем в timers вот это:
mine1:
time: 0/ * * * * ?
paused: 'false'
activator: mine1
2) Во время регена всех игроков находящихся в регионе mine1 телепортирует на указанные координаты
Добавляем в mine1 активатор TP
3) Предупреждение за 5 минут и за 1 минут до регена
Добавляем в activators в exec вот это:
mine2:
flags: []
actions:
- message=world:world &8[&9Авто-шахта&8] > &6Через &c&l5 минут &6&l обновиться шахта
reactions: []
И вот это:
mine3:
flags: []
actions:
- message=world:world &8[&9Авто-шахта&8] > &6Через &c&l1 минуту &6&l обновиться шахта
reactions: []

После добавляем в timers вот это:
mine2:
time: 0/600 * * * * ?
paused: 'false'
activator: mine2
mine3:
time: 0/840 * * * * ?
paused: 'false'
activator: mine3
4) Сообщение что шахта обновлена
Добавляем в activators в exec вот это:
mine4:
flags: []
actions:
- message=world:world &8[&9Авто-шахта&8] > &6Успешно обновлена
reactions: []
И в timers:
mine4:
time: 0/900 * * * * ?
paused: 'false'
activator: mine4
 
  • Действие VAR_TEMP_SET id:<ИмяПеременной> value:<Значение> — это действие создает (или перезаписывает) временную переменную, которая действует в пределах активатора. На текущий момент, это реально востребовано только в:
  • Новый активатор MOB_DAMAGE type:<Тип> name:<Имя> — активатор нанесения урона игроком по мобу. Полностью по параметрам и временным плейсхолдерам полностью аналогичен активатора MOB_KILL, добавился плейсхолдер %damage%. Если изменить значение этой временной переменной, то.... моб получит именно такой урон, вместо запланированного. Действие CANCEL_EVENT этим активатором также поддерживается.
То есть, сначала происходит расчёт получаемого урона мобу, потом производится запись этого урона во временную переменную %damage%, а потом урон присваивается? Но после того, как урон будет присвоен переменной, мы можем изменить его на свой, и только после этого он присвоится мобу? А сейчас можно только устанавливать новое значение? dec и inc ещё не реализованы?
world.mine1
"0/1 * * * * ?", возможно Вы хотели написать. Это будет запуск активатора EXEC каждую секунду. Это через каждый час: "0 0 0/1 * * ?"
 
То есть, сначала происходит расчёт получаемого урона мобу, потом производится запись этого урона во временную переменную %damage%, а потом урон присваивается? Но после того, как урон будет присвоен переменной, мы можем изменить его на свой, и только после этого он присвоится мобу? А сейчас можно только устанавливать новое значение? dec и inc ещё не реализованы?

Да, обрабатывается событие баккита - нанесение урона мобу.
Значение урона сразу же записывается во временную переменную damage.
После выполнения всех действий, эта переменная перечитывается её значение записывается в значение урона в событии.

Код:
MOB_DAMAGE:
  cowkick:
    mob-type: COW
    mob-name: ''
    actions:
    - MESSAGE=&6Не бей коров! Они дают молоко!
    - VAR_TEMP_SET=id:damage value:10000
    - MESSAGE=&4%damage% - корову разрывает в клочья!


INC/DEC ещё не делал. Надо?
 
Новый активатор MOB_DAMAGE type:<Тип> name:<Имя> — активатор нанесения урона игроком по мобу. Полностью по параметрам и временным плейсхолдерам полностью аналогичен активатора MOB_KILL, добавился плейсхолдер %damage%. Если изменить значение этой временной переменной, то.... моб получит именно такой урон, вместо запланированного. Действие CANCEL_EVENT этим активатором также поддерживается.
:good: круто, спасибо большое!!! теперь действительно есть смысл начинать обновляться,хотя ради всех этих нововвений придется нуоочень многое изменять! :)

@fromgate у вас реально творческий подъем в полном разгаре, обновления по несколько раз на день!!! :good:
 
Конечно! Это же будет основой для многих вариаций оружия и сможет разнообразить эффекты с зачарованиями!

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

Зелье - пройдёт нормально. В том плане, что в руках будет не меч, а фигня какая-то.

А вот если действие SHOOT влупить или (моим плагином Laser) или каким-то плагином (который грамотно работает с событиями) мы получим урон, а в руках у игрока не факт, что будет источник урона.

Предположим мы увеличиваем урон от определенного меча.

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

Но вообще это довольно специфично, так что наверное, можно не заморачиваться
:good: круто, спасибо большое!!! теперь действительно есть смысл начинать обновляться,хотя ради всех этих нововвений придется нуоочень многое изменять! :)

@fromgate у вас реально творческий подъем в полном разгаре, обновления по несколько раз на день!!! :good:

Спасибо ;)
На самом деле я и до этого много ковырял. Больше /30 подверсий у меня ни разу по моему не было (это я про процесс сотворения плагина).

Но я думаю, 0.9.6 сделаю (собственно если ничего нового не вылезет в части ошибок, то это будет или сегодня или завтра) - у меня будет новый плагин, который возможно будет потом работать в связке с ReActions.
 
Помогите мне, пожалуйста. Ничего не изменилось! Я изменил regionwolrd:mine1
получилось:
mine1:
flags: []
actions:
- BLOCK_FILL=block:stone chance:100 region:mine1
- BLOCK_FILL=block:coal_ore chance:10 region:mine1
- BLOCK_FILL=block:iron_ore chance:7 region:mine1
- BLOCK_FILL=block:gold_ore chance:5 region:mine1
- BLOCK_FILL=block:diamod_ore chance:3 region:mine1
- TP=loc:World,4102.5,71.0,4069.5,-129.899,39.6 region=World.mine1
reactions: []
Но все ровно не телепортирует!
 
@Lyosha12
Кстати, результат /react add <активатор> теперь выглядит посимпатичнее
@BrainRTP
Попробуйте вот так:
- TP=loc:World,4102.5,71.0,4069.5,-129.899,39.6

и поставьте действие TP первым - чтобы сначала телепортировало, а потом заливало.
 
@formagate
Эм... Мне нужно что бы телепортировало игроков находящихся в регионе mine1
Ой, в нике ошибся.
Кстати, а у вас есть это: http://reactions.fromgate.me/index.html
На русском языке?
 
@BrainRTP
http://reactions.fromgate.ru/index.html

Эм... Мне нужно что бы телепортировало игроков находящихся в регионе mine1

Хм... TP не поддерживает селектора игроков. Хотя, пожалуй, в будущем добавить можно будет добавить.
Т.е. так игроков выбрать нельзя.

Нужно сделать активатор типа EXEC с одним действием TP.
А уже этот активатор вызвать с параметром player:{region:World.mine1}
 
Надо всё-таки его как-нить установить и помучать, что за зверь, но все вот эти ваши команды/параметры и прочее в постах выше с ума сводят :D
 
@fromgate
Извините, но я не понял как это реализовать. А точнее как вызвать с этим параметром... :(
Не могли бы вы по подробнее рассказать как сделать?
 
@fromgate
Извините, но я не понял как это реализовать. А точнее как вызвать с этим параметром... :(
Не могли бы вы по подробнее рассказать как сделать?
Действием вызываешь активатор EXEC:
execute=activator:EXEC region:World.mine1
А в этом EXEC пишешь команду на телепортацию в нужную локацию, не указывая регион, так как EXEC выполнится для всех игроков, которые были на тот момент в регионе World.mine1
Зелье - пройдёт нормально. В том плане, что в руках будет не меч, а фигня какая-то.

А вот если действие SHOOT влупить или (моим плагином Laser) или каким-то плагином (который грамотно работает с событиями) мы получим урон, а в руках у игрока не факт, что будет источник урона.

Предположим мы увеличиваем урон от определенного меча.

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

Но вообще это довольно специфично, так что наверное, можно не заморачиваться
Вообще, активатор MOB_DAMAGE и увеличение урона с помощью действия и плейсхолдера будет происходить тогда, когда все флаги вернут true. То есть, если у игрока не будет меча, то и урон не будет увеличиваться.

Или Вы имеете в виду, что урон может наносится не мечом, но приписывается ему в как событие? И тогда мы будем увеличивать урон именно от меча, а не другой, навязанный сторонним плагином. В итоге, эффекта от действия увеличения временной переменной не будет. Я правильно понял?
---
Хотя, какая вообще разница, чем был нанесён урон? На что это влияет? Нам же нужно только модифицировать конечный результат для моба. А случаи, когда этого делать не надо, можно описать флагами.
А вот это странно:
Код:
  Activator-COMMAND-5:
    override: false
    regex: true
    command: О плейсхолдерах(\s+\S+){3,}
    flags: []
    actions:
    - MESSAGE=&r
    - MESSAGE=&c[&e▼&c]&3------------------------------------------------&c[&e▼&c]
    - MESSAGE=Итак, чтобы узнать, какой аргумент ввёл игрок в команде,
    - MESSAGE=нужно в действиях указать &aплейсхолдер&r -
    - MESSAGE=&d%&darg&c<&3НомерНужногоАргумента&c>&d%
    - MESSAGE=Например, второй аргумент в данной команде был "&d%arg2%&r".
    - MESSAGE=А вот пятый, если он был:&r "&d%arg5%&r".
    - MESSAGE=&r
    - MESSAGE=Можно вывести все аргументы после конкретного:&d
    - MESSAGE=&d%&dargs&c<&3НомерНужногоАргумента&c>&d%&r.
    - MESSAGE=Пример. Это все аргументы, которые были после третьего,
    - MESSAGE=не включая третий аргумент:&r "&d%args3%&r"
    - MESSAGE=&r
    - MESSAGE=Можно вывести все аргументы, кроме команды - &d%&dargs%&r:&e
    - MESSAGE="&d%args%&r"
    - MESSAGE=&r
    - MESSAGE=Завершая тему плейсхолдеров в командах, можно узнать
    - MESSAGE=количество аргументов - &d%&dArgsCount%&r:&a %ArgsCount%
    - MESSAGE=&r
    - MESSAGE=Рассмотрим второй вариант создания активатора &bCOMMAND&r.
    - MESSAGE=Наберите &e/продолжение 2 &2ЛюбойАргумент
    reactions: []
upload_2015-6-29_20-28-9.png

@fromgate, есть одна интересная диллема с активатором REGION. Когда я просто стою в регионе, его запуск проходит по секундному плану. Однако он запускается всегда, если я переступаю с блока на блок, игнорируя секундный интервал. Это, конечно, хорошо для быстрого запуска EXEC'a на ивенте для проверки, участвуют ли ещё нужные игроки, но столь быстрая проверка так же может вызывать падения TPS.

Так вот, может можно было бы дополнить активатор выбором типа проверки: поблочно или по времени, что указано в конфиге? Кстати о времени. Можно было бы ещё сделать возможность выбирать его в самом активаторе.
Добавлю. Вроде уже решил проблем с двоеточием.
Нет:
Код:
    - MESSAGE=&r
    - MESSAGE=&c          [&e▼&c]&3-----------------------------------&c[&e▼&c]
    - MESSAGE=Этот активатор реагирует на текст. Разный текст. В разных вариациях. Например, если Вы видите сообщение "Привет, это я", то Вам можно дать слиток золота.
    - MESSAGE=&r
    - MESSAGE=Рассмотрим сам активатор и его аргументы. Создание:
    - MESSAGE=
upload_2015-6-29_23-27-6.png

Ещё трабл с переносом строки:
Код:
    - MESSAGE=&r
    - MESSAGE=&c          [&e▼&c]&3-----------------------------------&c[&e▼&c]
    - MESSAGE=Этот активатор реагирует на текст. Разный текст. В разных вариациях. Например, если Вы написали сообщение "&aПривет, это я&r", то Вам можно дать слиток золота. Кстати, можете это сделать :)
    - MESSAGE=&r
    - MESSAGE=Рассмотрим сам активатор и его аргументы. Создание:&r
    - MESSAGE=&e/ra add &bMESSAGE &2Activator-Name &6[&dsource:&3ТипИсточника&6] &6[&dtype:&3СпособСравнения&6] &6[&dmask:&3ШаблонСообщения&6]
    - MESSAGE=&r
    - MESSAGE=Рассмотрим отдельно все аргументы. Напишите соответствующие команды:&r
    - MESSAGE=&e/О типах источника
    - MESSAGE=&e/О способах сравнения
    - MESSAGE=&e/О допустимом шаблоне сообщения
    - MESSAGE=&r
    - MESSAGE=На закуску предлагаю почитать о производимых активатором плейсхолдерах:&r &e/О плейсхолдерах в &bMESSAGE
    - MESSAGE=&r
    - MESSAGE=Ваше задание после изучения активатора &bMESSAGE&r:&r
    - MESSAGE=&e/О задании для &bMESSAGE
upload_2015-6-30_0-0-45.png

@fromgate, а при использовании типа маски REGEX в активаторе MESSAGE, по какому принципу дополнительно идёт сравнение? По EQUAL или по CONTAINS?
А здесь должно быть EQUALS, а не EQUAL? http://reactions.fromgate.ru/message.htm
@fromgate, а как насчёт плейсхолдера, который бы содержал число регионов, в которых игрок числится владельцем, жителем и... Ну, сумму можно через CALC сделать. Можно было бы организовать "аренду" регионов у кого-то... :D
А тут что?
upload_2015-6-30_2-47-12.png

Новые плейсхолдеры в активаторе MESSAGE не распознают числа корректно (или я не понимаю что такое "целые" и "дробные" числа?):
Код:
  Activator-MESSAGE-10:
    mask: За $50 купил 9 слив по $5.4. Осталось $1,4, то есть ещё $1 40 центов.
    type: EQUAL
    source: CHAT_INPUT
    flags:
    - DELAY_PLAYER=Activator-MESSAGE-10
    actions:
    - MESSAGE=&r
    - MESSAGE=&c          [&e▼&c]&3-----------------------------------&c[&e▼&c]
    - DELAY_PLAYER=150ms/Activator-MESSAGE-10
    - MESSAGE=Рассмотрим составляющие фразы "&eЗа $50 купил 9 слив по $5.4. Осталось $1,4, то есть ещё $1 40 центов.&r":&r
    - MESSAGE=&r
    - MESSAGE=Пятое слово:&r "&a%word5%&r";
    - MESSAGE=Третье целое число:&r "&a%int3%&r";
    - MESSAGE=Третье число:&r "&a%num3%&r";
    - MESSAGE=Количество слов:&r &a%word-count%&r;
    - MESSAGE=Количество целых чисел:&r &a%int-count%&r;
    - MESSAGE=Количество чисел:&r &a%num-count%&r.
    reactions: []
upload_2015-6-30_6-1-30.png
 
Последнее редактирование:
@fromgate, есть одна интересная диллема с активатором REGION. Когда я просто стою в регионе, его запуск проходит по секундному плану. Однако он запускается всегда, если я переступаю с блока на блок, игнорируя секундный интервал. Это, конечно, хорошо для быстрого запуска EXEC'a на ивенте для проверки, участвуют ли ещё нужные игроки, но столь быстрая проверка так же может вызывать падения TPS.

Так вот, может можно было бы дополнить активатор выбором типа проверки: поблочно или по времени, что указано в конфиге? Кстати о времени. Можно было бы ещё сделать возможность выбирать его в самом активаторе.

0.9.5
http://adf.ly/1K0nlW
Пробую adf.ly - интересно там хоть что-то капает? ;)

Ситуацию с активатором REGION исправил. Теперь всё как надо - всегда время указанное в конфиге.
Задавать время в качестве параметра активатора - неплохая идея. Попробую добавить.
 
Добрый день.
Есть ли возможность организовать ограничение инвентаря, но при этом возможность его расширить?
Что я имею ввиду:
Допустим половина инвентаря заполнена паутиной которую нельзя убрать или заменить на другой предмет. Но если я в свободный слот положу, например, алмаз с названием "Расширение инвентаря", то от паутинки освободится, например, 3 слота. Если положу в инвентарь еще один алмаз "Расширение инвентаря", то освободится еще 3 слота. Если же положу алмаз "Расширение инвентаря 2", то освободится 6 слотов.
Так же инвентарь должен быть ограничен только в одном мире, в других все должно быть как обычно.
Разделением инвентаря занимается плагин - ApatiteControler (можно ли сделать с помощью ReActions? :rolleyes: )
Создание нескольких миров - MultiWorld
 
Назад
Верх