Войти или зарегистрироваться

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

Предложение: Добавить действие для вывода сообщений в title и subtitle бары.
 
Предложение:
• Добавить действие очистки указаных entity в загруженых чанках, исключая области WG регионов.
• Добавить флаг, проверяющий кол-во entity в загруженых чанках.
 
мне постоянно не хватало дополнительных активаторов и действий
Тогда загляни на dev.bukkit, в тикеты. Я там сотню как создал предложений, так она там и лежит бесхозная :D
 
Надо придумать какие-то активаторы и действия, которые можна подключать к почтовым SMTP и сервисам для рассылки СмС сообщений. Вот круто будет...
Кто-то пересёк твой регион, и сразу СМСка на телефон: ATTENTION! У ВАС ВТОРЖЕНИЕ!
 
Я не проверял, но по логике должно работать.
"Никогда не думай, что твой код работает, не проверив" (с) Lyosha12.

Так как мне нужно подставить не развёрнутое выражение при создании активатора, то с обычной переменной, которая и так может не существовать, я поступаю просто:
Код:
- VAR_SET=id:temp_var value:%var:var%
- VAR_CLEAR=id:var
# ...
-VAR_SET=id:var value:temp_var
- VAR_CLEAR=id:temp_var

А если я хочу подставить существующую переменную, которую просто так не удалишь? Конечно, у меня не получится:
Код:
- VAR_SET=id:temp_player value:%var:player%
- VAR_CLEAR=id:player
# ...
-VAR_SET=id:var value:temp_player
- VAR_CLEAR=id:temp_player

В переменной player будет находится %player%, что логично. При подстановке получим имя текущего игрока:
Код:
 %var:player% => %player% => Lyosha12
А я хотел именно текст "%player%". Нужно добавить хоть что-нибудь, что позволит запретить разворачивание плейсхолдера.
 
Кто-то пересёк твой регион, и сразу СМСка на телефон: ATTENTION! У ВАС ВТОРЖЕНИЕ!
А за рассылку платишь ты)
Добавил ещё один активатор FLIGHT
О, сколько же я алиасов позапрещал без этого активатора :D
Как насчёт элитры? Она же как бы "почти" режим полёта? :D
Этот активатор срабатывает, когда игрок меняет режим полёта.
"... на указанный в аргументе" добавить бы.
Интересно: добавив запрет на разворачивание плейсхолдера, мы сможем сделать ReActions чуточку более рефлексивным: https://ru.wikipedia.org/wiki/Рефлексия_(программирование)
 
Как вариант, элитру можно запретить вставлять в слот ARMOR с помощью INVENTORY_CLICK.
Допустим, строю я триатлон. Бег, полёт, плаванье. Или что-то в этом роде. Игрок просто положит элитру один раз и забудет про неё. В зоне полёта она пригодится, а в других её нужно отрубать. Но не перемещать же её из слота в слот? Костыли же :D
 
А за рассылку платишь ты)
Ну не знаю как на счет СмС, но SendMailTransferProtocol вполне бесплатный! Достаточно просто зарегать ящик, даже на G-mail, затем активировать там какую-то функцию и всё. Пользуйся!
такая же штука в AuthMe есть, для восстановления пароля
@fromgate
Добавил ещё один активатор FLIGHT
Описание
А можна ли добавить флаг, проверяющий эти же состояние??

Что бы запустить активатор, имеющий флаг проверки активности флая, и зациклить его. И в каждом цикле, пока флай активен, снимать плату или что-то вроде...
 
вполне бесплатный
Это я про SMS. Если, конечно, у тебя позволяют ресурсы рассылать SMS'ки, то, будь я ярым задротом с крутым регионом в полмиллиона блоков, на котором куча всего понастроено без привата, я был бы очень рад таким оповещениям :D
 
Это я про SMS. Если, конечно, у тебя позволяют ресурсы рассылать SMS'ки, то, будь я ярым задротом с крутым регионом в полмиллиона блоков, на котором куча всего понастроено без привата, я был бы очень рад таким оповещениям :D
Ну это же просто пример! Возможности бесграничны... Можна понадобавлять флагов, реагирующих на падение ОЗУ, нагрузки на CPU, ДДосы.... Можна добавить флаг, срабатывающий в последний момент при выключении сервера и соединить это действие в рассылкой, что бы всегда сразу же быть вкурсе когда твой сервер упал... Что угодно.
Или платная команда для донатеров: /ПРИЗЫВ АДМИНА ПО СМС! ^^
 
acolytes_farm_gold.png
На сколько безопасно создавать отложенные активаторы, термином на 3-4 месяца ?? С ними ничего не случится? А если их будет много, 400+... ??
Из за этого скорее всего притупится скорость чтения файла с отложенными активаторами, в следствии чего, установленная задержка на 0.5 секунд может превратится в задержку 0.7-0.8 секунд, правильно ??
 
А можна ли добавить флаг, проверяющий эти же состояние??

Что бы запустить активатор, имеющий флаг проверки активности флая, и зациклить его. И в каждом цикле, пока флай активен, снимать плату или что-то вроде...
Флаг не получиться сделать. Нет такого состояния игрока. Но это и не нужно. Ведь, с помощью этого активатора вы уже будете знать, когда игрок летает, а когда нет. Как только игрок взлетает, то сохраняйте это состояние в переменную и уже её сравнивайте с тем, что вам необходимо, да хоть зацикливайте.
А я хотел именно текст "%player%". Нужно добавить хоть что-нибудь, что позволит запретить разворачивание плейсхолдера.
Есть выход из положения:
Код:
EXEC
  test_var:
  actions:
  - cmd_op=react add exec testa
  - cmd_op=react group testa test2
  - cmd_op=react add testa a REGEX input:{%_player%} regex:{(^\%)_(.*)(\%)}
  - cmd_op=react add testa a message %%group02%%
результат будет следующим:
Код:
EXEC:
  testa:
    actions:
    - REGEX=input:{%_player%} regex:{(^\%)_(.*)(\%)}
    - message=%%group02%%
Единственное, что быстро не поборол, так это то, что при создании активатора (cmd_op=react add exec testa) вылазит в логе ошибка (возможно, что это только у меня), но запись нового активатора выполняется.
------
Решил. Чтобы не было ошибки, необходимо установить задержку перед созданием активатора:
Код:
- WAIT=time:100ms

Добавить действие очистки указаных entity в загруженых чанках, исключая области WG регионов.
Это много мелких действий, поэтому необходимо добавлять их по отдельности, чтобы выполнить это. Вот список действий, которые необходимо добавить в плагин:
1. CHUNK: По координатам определяем чанк и список всех его сущностей
2. CHUNK_REGION: Определяем, находится ли чанк в каком-либо регионе. Получаем временную переменную, например true/false и ID чанка. Если получаем false, то переходим к активатору с действием ниже.
3. CHUNK_REMOVE: Сравниваем список сущностей со списком, которых необходимо удалить и удаляем.
А затем, уже своими силами создаём активатор по этим трём действиям и пускаем его по циклу, пока не переберём все загруженые чанки.
Это приблизительно, что нужно сделать.
Добавить флаг, проверяющий кол-во entity в загруженых чанках..
Можно сделать флаг, проверяющий кол-во entity в чанке, где расположен игрок.
 
Последнее редактирование:
Флаг не получиться сделать. Нет такого состояния игрока. Но это и не нужно. Ведь, с помощью этого активатора вы уже будете знать, когда игрок летает, а когда нет. Как только игрок взлетает, то сохраняйте это состояние в переменную и уже её сравнивайте с тем, что вам необходимо, да хоть зацикливайте.

Я не совсем прослеживаю логику...

Должно быть примерно так ??

Код:
FLIGHT
  qwerty1
    flight: TRUE
    actions:
    - VAR_PLAYER_SET=id:123  value:%flight%
    - EXECUTE=qwerty2

  qwerty2
    flight: FALSE
    actions:
    - VAR_PLAYER_SET=id:123  value:%flight%

EXEC
  qwerty3
    flags
    - VAR_COMPARE=id:123  value:true
    actions:
    - MONEY_PAY
    - WAIT=60s
    - EXECUTE=qwerty3
 
Последнее редактирование:
Есть выход из положения:
Как раз придумал этот вариант через час после того, как лёг спать. Действительно же: если активатор ни для кого не выполняется, то и временной переменной %player% не будет!
Костылиииии :mad:
Костылииии. Там что-то с параллельностью:
Код:
Could not pass event CommandEvent to ReActions v0.9.11
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at me.fromgate.reactions.event.EventManager.raiseCommandEvent(EventManager.java:216) [ReActions.jar:?]
    at me.fromgate.reactions.RAListener.onPlayerCommand(RAListener.java:321) [ReActions.jar:?]
    at sun.reflect.GeneratedMethodAccessor55.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1346) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1189) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
    at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(Unknown Source) ~[?:1.8.0_131]
    at java.util.ArrayList$Itr.next(Unknown Source) ~[?:1.8.0_131]
    at me.fromgate.reactions.activators.Activators.activate(Activators.java:285) ~[?:?]
    at me.fromgate.reactions.RAListener.onCommandActivator(RAListener.java:421) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
    ... 25 more
 
Костылииии. Там что-то с параллельностью:
Задержка не помогает?
Я не совсем прослеживаю логику.
Так немного лучше будет:
Код:
FLIGHT:
  qwerty:
    flight: ANY
    actions:
    - VAR_PLAYER_SET=id:123  value:%flight%
EXEC:
  qwerty3:
    flags:
    - VAR_COMPARE=id:123  value:true
    actions:
    - MONEY_PAY
    - WAIT=60s
    - EXECUTE=qwerty3
Здесь лучше не делать задержку, а вынести в отдельный таймер.
 
Последнее редактирование:
Назад
Верх