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

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

Помогите, как сделать чтобы под игроком убирался блок
- BLOCK_SET=block:0 loc:%PLAYER_LOC% add-vector:0,-1,0
-1 - НЕ работает!!
 
Обнаружил уязвимость в плагине ReActions! Точнее в плагине существует уязвимость!

Всё началось с того, что я перешёл с сервера 1.8.9 на 1.10.2, это было после одного из сырого обновления плагина ReActions для сервера 1.10.2 в посте: #3028
Суть проблемы в том, что иногда стали появляться игроки, имеющие статус оператора, хотя на сервере полностью отключена возможность кого-то делать оператором из игры (Оператором может стать только, если выполнить соответствующую команду из консоли). В логах также не было ответа, почему так происходит.
На тот момент, чтобы вычислить, какой плагин имеет дырку, я стал методично отключать по одному в день, т.к. не все игроки становились операторами, а случайные и не понятно, когда и в какой момент это происходило, и в логах ничего не было видно.
Пришло время и до ReActions, после его отключения около недели не появилось ни одного оператора. Затем включил наш плагин и буквально через 4 часа появился новый игрок-оператор.
Самое интересное, игроки не знают, что они операторы, я их вылавливал постоянно, отслеживая файл ops.json, для этого даже скриптик написал.

После того как определил, что дырка в ReActions, я стал искать причину в своих активаторах. Обнаружил вот, что. В одном из моих активаторов, на событие входа в регион, всем игрокам отключается режим бога вот таким образом:
- CMD_OP=god %player% off
Это единственное место, где что-то связанное с OP в этом плагине.

Поэтому, сам попробовал зайти под игроком, при этом активатор всегда выполнялся, но оператором я не становился. Затем начал отслеживать работу этого активатора с другими игроками и выяснил, что в среднем из 10-ти зашедших в регион, где выполняется данный активатор, один игрок становится оператором.
Почему так происходило я недоумевал. Скачал и установил последний релиз плагина ReActions v0.9.10, но это ничего не дало. Первое, что пришло в голову, это заменить выполнение команды не под оператором, а под консолью:
- CMD_CONSOLE=god %player% off

После таких преобразований, в течение последних 10-ти дней ни кто не становился оператором.

Возможно, что с действием CMD_OP, что-то не так! Вот я и решил поделиться этим непонятным явлением.

Спасибо.
 
Возможно, что с действием CMD_OP, что-то не так!
Это давно есть в плагине, я даже думал, что это происходит в тот момент, когда игрок отключается во время выполнения активатора, но в этом я не уверен.
 
Добрый день.
Подскажите, как сделать такую логику:
Игрок делает клик по кнопке, ему выдается полет на 10 минут реального времени и при этом он не может продлить или нажать на кнопку ее раз.
Мне нужно что бы при выходе игрока произошло сохранение количества времени которое осталось у игрока и отчет продолжился после того как игрок зайдет снова, а после истечении времени у игрока отнялась функция полета.

Как я понимаю:
Игроку нужно сделать персональную переменную, например, fly_timer
После нажатия на кнопку в переменную fly_timer записывается значение 600 и происходит зацикливание с проверкой значения fly_timer != 0, от переменной fly_time отнимаем, например, по 5 (5 секунд) раз в 5 секунд. (при условии что fly_timer != 0, если =0, то перестает сбрасываться)
п.с. как я понял активаторы перестают работать когда игрок выходит с сервера?
Когда игрок после выхода входит на сервер с помощью активатора JOIN происходит зацикливание c проверкой fly_timer != 0 и отнятием у переменной fly_timer значение 5
и так по кругу пока значение fly_timer не будет равняться "0", а когда fly_timer = 0 написать сообщение и отнять полет.

Может быть у кого ни будь есть решение попроще?

----
И сразу еще один вопрос: Можно ли производить вычисления с переменными?
Например я хочу выводить сообщение сколько еще осталось времени и выводить не в секундах, а в минутах. И что бы выводилось целое число, с округлением.
Например: У Вас осталось примерно 5 минут полета.
 
Последнее редактирование:
Это давно есть в плагине, я даже думал, что это происходит в тот момент, когда игрок отключается во время выполнения активатора, но в этом я не уверен.
Вы правы, на все 100%. Так происходит, когда игрок отключается в момент срабатывания активатора.
Я сделал небольшой тестовый активатор, при котором выполняются последовательно действия:

- CMD_OP=god %player% off
- CMD_CONSOLE=kick %player%

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

Так, что советую, по возможности, не использовать действие CMD_OP
Спасибо.
 
@maxdikiy
Действие CMD_OP работает следующим образом:
1. Игроку выдаются права ОПа
2. Выполняется команда
3. Права изымаются
Другого алгоритма быть не может.

Ясно, что если после выдачи ОПства игрока кикнуть, то права не будут изъяты.

Но я не мог себе представить, что кто-то убдет совмещать кик игрока с командой выполняющейся с правами ОПа.

В общем, постараюсь это отслеживать. Хотя конечно 100%-й гарантии никто не даст.
 
Но я не мог себе представить, что кто-то убдет совмещать кик игрока с командой выполняющейся с правами ОПа.
никто специально так и не делает, пример выше был сделан для теста, я так думаю, но, опка иногда остается на игроках и без такого совмещения.
Было бы неплохо, чтобы опка снималассь даже если игрок уже офф)))
 
Но я не мог себе представить, что кто-то убдет совмещать кик игрока с командой выполняющейся с правами ОПа.
Такое очень часто бывает, когда игрок активно пользуется читами. Например, в регионе запрещено летать, но игрок с этим не согласен, то серверный античит его за это кикает (и как раз это происходит, когда с помощью ReActions отбирается режим бога или что-то другое).

Спасибо.
 
спегот 1.10.2
Активатор БУТТОН
Действие БЛОК_ФИЛЛ

- BLOCK_FILL=block:0 ...

При "пустом" блоке выдает вот такую ошибку:
Код:
[19:10:34 ERROR]: Could not pass event ButtonEvent to ReActions v0.9.10
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:310) ~[craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62) ~[craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:502) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:487) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at me.fromgate.reactions.event.EventManager.raiseButtonEvent(EventManage
r.java:196) [ReActions.jar:?]
        at me.fromgate.reactions.RAListener.onPlayerInteract(RAListener.java:342
) [ReActions.jar:?]
        at sun.reflect.GeneratedMethodAccessor127.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
.8.0_101]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_101]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:306) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:502) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:487) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at org.bukkit.craftbukkit.v1_10_R1.event.CraftEventFactory.callPlayerInt
eractEvent(CraftEventFactory.java:231) [craftbukkit.jar:git-Spigot-078e2f8-7f9fb
e5]
        at net.minecraft.server.v1_10_R1.PlayerInteractManager.a(PlayerInteractM
anager.java:492) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.jav
a:890) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.PacketPlayInUseItem.a(SourceFile:55) [c
raftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.PacketPlayInUseItem.a(SourceFile:11) [c
raftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.PlayerConnectionUtils$1.run(SourceFile:
13) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [
?:1.8.0_101]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_101]
        at net.minecraft.server.v1_10_R1.SystemUtils.a(SourceFile:45) [craftbukk
it.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:
732) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:
400) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:
668) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.jav
a:567) [craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
Caused by: java.lang.NullPointerException
        at me.fromgate.reactions.util.item.VirtualItem.setLore(VirtualItem.java:
706) ~[?:?]
        at me.fromgate.reactions.util.item.VirtualItem18.fromMap(VirtualItem18.j
ava:157) ~[?:?]
        at me.fromgate.reactions.util.item.ItemUtil.itemFromMap(ItemUtil.java:21
5) ~[?:?]
        at me.fromgate.reactions.actions.ActionBlockSet.execute(ActionBlockSet.j
ava:45) ~[?:?]
        at me.fromgate.reactions.actions.Action.executeAction(Action.java:73) ~[
?:?]
        at me.fromgate.reactions.actions.Actions.performAction(Actions.java:185)
~[?:?]
        at me.fromgate.reactions.actions.Actions.executeActions(Actions.java:177
) ~[?:?]
        at me.fromgate.reactions.actions.Actions.executeActivator(Actions.java:1
48) ~[?:?]
        at me.fromgate.reactions.activators.ButtonActivator.activate(ButtonActiv
ator.java:63) ~[?:?]
        at me.fromgate.reactions.activators.Activator.executeActivator(Activator
.java:231) ~[?:?]
        at me.fromgate.reactions.activators.Activators.activate(Activators.java:
287) ~[?:?]
        at me.fromgate.reactions.RAListener.onButton(RAListener.java:383) ~[?:?]

        at sun.reflect.GeneratedMethodAccessor337.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
.8.0_101]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_101]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:306) ~[craftbukkit.jar:git-Spigot-078e2f8-7f9fbe5]
        ... 26 more
С остальными все нормально. Есть ли какие-то альтернативы пустого блока для реактионс?

UPD:
Решил:
'block:' стираем, оставляем только '0'
 
Последнее редактирование:
@maxdikiy
Спасибо за пояснение. Постараюсь добавить дополнительные проверки (хотя не факт что потом ещё где-то не вылезет).

@BukkitProfi
Возможно, block:AIR поймёт ;)
 
Как сделать что бы игрок заходил в регион и если у него был определенный предмет то ему писало сообщение 1, а если нету предмета то писало сообщение 2.?
 
Вы правы, на все 100%. Так происходит, когда игрок отключается в момент срабатывания активатора.
Протестировал у тебя, действительно работает. Спасибо, смог прикрыть дыру до её нахождения игроками =)
Жду фикса, а пока выставил параметр "deop-everyone-on-join" в значение "true" (WorldGuard).
 
Уважаемый @fromgate . Время в плагине ReActions, как я считаю, работает неправильно. А именно сдвинуто на 2000 тиков вперёд, то есть если по стандарту в МайнКрафте: 0 тиков = 6 часов утра, то в Reactions 0 тиков = 8 часов утра.
 
Возможно, надо перепроверить. Это у меня одна из самых старых процедурок ещё до ReActions. Там 0 (насколько я помню ) соответствует 8 часам. Я тогда гонял, пытаясь поймать моменты когда луна/солнце находятся в зените.
 
Возможно, надо перепроверить. Это у меня одна из самых старых процедурок ещё до ReActions. Там 0 (насколько я помню ) соответствует 8 часам. Я тогда гонял, пытаясь поймать моменты когда луна/солнце находятся в зените.
Вот очень удобная штука:
 
Товарищ @fromgate . Будет ли возможность создавать для каждого пользователя отдельный файл содержащий персональные переменные?
 

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

Назад
Верх