1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Релизы плагинов", создана пользователем fromgate, 16 июл 2013.

  1. mechwd

    mechwd Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    mechwd
    Спасибо)
     
  2. OneDisik

    OneDisik Активный участник Пользователь

    Баллы:
    66
    Помогите, как сделать чтобы под игроком убирался блок
    - BLOCK_SET=block:0 loc:%PLAYER_LOC% add-vector:0,-1,0
    -1 - НЕ работает!!
     
  3. Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    может вместо 0 написать type:AIR?
     
  4. maxdikiy

    maxdikiy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Обнаружил уязвимость в плагине 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, что-то не так! Вот я и решил поделиться этим непонятным явлением.

    Спасибо.
     
  5. Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Это давно есть в плагине, я даже думал, что это происходит в тот момент, когда игрок отключается во время выполнения активатора, но в этом я не уверен.
     
  6. ZombiE_EGIK

    ZombiE_EGIK Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    ZombiE_EGIK
    Добрый день.
    Подскажите, как сделать такую логику:
    Игрок делает клик по кнопке, ему выдается полет на 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 минут полета.
     
    Последнее редактирование: 10 окт 2016
  7. maxdikiy

    maxdikiy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Вы правы, на все 100%. Так происходит, когда игрок отключается в момент срабатывания активатора.
    Я сделал небольшой тестовый активатор, при котором выполняются последовательно действия:

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

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

    Так, что советую, по возможности, не использовать действие CMD_OP
    Спасибо.
     
  8. Автор темы
    fromgate

    fromgate Старожил Пользователь

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

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

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

    В общем, постараюсь это отслеживать. Хотя конечно 100%-й гарантии никто не даст.
     
  9. Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    никто специально так и не делает, пример выше был сделан для теста, я так думаю, но, опка иногда остается на игроках и без такого совмещения.
    Было бы неплохо, чтобы опка снималассь даже если игрок уже офф)))
     
  10. maxdikiy

    maxdikiy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Такое очень часто бывает, когда игрок активно пользуется читами. Например, в регионе запрещено летать, но игрок с этим не согласен, то серверный античит его за это кикает (и как раз это происходит, когда с помощью ReActions отбирается режим бога или что-то другое).

    Спасибо.
     
  11. ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    спегот 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'
     
    Последнее редактирование: 13 окт 2016
  12. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @maxdikiy
    Спасибо за пояснение. Постараюсь добавить дополнительные проверки (хотя не факт что потом ещё где-то не вылезет).

    @BukkitProfi
    Возможно, block:AIR поймёт ;)
     
  13. ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    Да не важно, у плагина иногда без спец. параметров (eff:, block: и т.п.) срабатывает основная функция
     
  14. Milki_way

    Milki_way Активный участник Пользователь

    Баллы:
    76
    Как сделать что бы игрок заходил в регион и если у него был определенный предмет то ему писало сообщение 1, а если нету предмета то писало сообщение 2.?
     
  15. SoSeDiK

    SoSeDiK Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    SoSeDiK
    Протестировал у тебя, действительно работает. Спасибо, смог прикрыть дыру до её нахождения игроками =)
    Жду фикса, а пока выставил параметр "deop-everyone-on-join" в значение "true" (WorldGuard).
     
  16. Jeff_Michael

    Jeff_Michael Активный участник Пользователь

    Баллы:
    88
    Skype:
    Jeff_Michael14
    Имя в Minecraft:
    Jeff_Michael
    Уважаемый @fromgate . Время в плагине ReActions, как я считаю, работает неправильно. А именно сдвинуто на 2000 тиков вперёд, то есть если по стандарту в МайнКрафте: 0 тиков = 6 часов утра, то в Reactions 0 тиков = 8 часов утра.
     
  17. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Возможно, надо перепроверить. Это у меня одна из самых старых процедурок ещё до ReActions. Там 0 (насколько я помню ) соответствует 8 часам. Я тогда гонял, пытаясь поймать моменты когда луна/солнце находятся в зените.
     
  18. Jeff_Michael

    Jeff_Michael Активный участник Пользователь

    Баллы:
    88
    Skype:
    Jeff_Michael14
    Имя в Minecraft:
    Jeff_Michael
    Вот очень удобная штука:
     
  19. Автор темы
    fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Прикольно, спасибо :)
     
  20. Jeff_Michael

    Jeff_Michael Активный участник Пользователь

    Баллы:
    88
    Skype:
    Jeff_Michael14
    Имя в Minecraft:
    Jeff_Michael
    Товарищ @fromgate . Будет ли возможность создавать для каждого пользователя отдельный файл содержащий персональные переменные?
     

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