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

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

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

  1. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Да, все работает. Спасибо~

    upd: После одного из обновлений плагина появился странный глюк - в регионе спавна а также при использовании любой команды происходит некая имитация удара, будто бы игрок бьет (предположительно) сам себя. Это определенно ReActions - после удаления плагина такого не происходит, но увы, сейчас мне без него никуда.
    Если для "лечения" требуются активаторы и конфиги - предоставлю в ЛС.
     
    Последнее редактирование: 3 дек 2017
  2. Neosha

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

    Баллы:
    66
    Здравствуйте, у меня такой вопрос. Есть команда /info <player>, как использовать данные из плейсхолдеров для игрока, который указан вместо <player>, а не для игрока, который прописал команду?
     
  3. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @imDaniX
    Пришлите мне. Не обещаю, что быстро смогу глянуть, но попробую.
     
  4. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Если нужно получить персональную переменную, то %var:%arg1%.info%. Вместо info подставить нужную перс.переменную
    Если же нужно получить плейсхолдеры игрока, то без дополнительных активаторов не обойтись, но появляется требование наличия игрока в сети. Например
    Код:
    COMMAND:
      info1:
        override: false
        regex: false
        command: cmd:info arg1:*
        actions:
        - var_temp_set=id:sender value:%player_name%
        - execute=activator:info2 player:%arg1%
    EXEC:
      info2:
        actions:
        - var_temp_set=id:arg1 value:%player_name%
        - var_temp_set=id:i_money value:%money%
        - var_temp_set=id:i_health value:%health%
        - var_temp_set=id:i_loc value:%player_loc%
        - var_temp_set=id:i_item value:%player_item_hand%
        - execute=activator:info3 player:%sender%
      info3:
        actions:
        - message=&7Информация об игроке&f&l %arg1%
        - message=&fДеньги &a%i_money%
        - message=&fЗдоровье &c%i_health%
        - message=&fПоложение &e%i_loc%
        - message=&fПредмет в руке &6%i_item%
     
  5. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    #181
    • Теперь плагин использует метрики bStats.org (вместо mcstats.org — эти очень часто лежат и глючат)
    • Куча всяких оптимизаций и мелких правок кода. Если раньше (вдруг) плагин работал на Java 7, то сейчас 100% только Java 8.
    • Немного модифицировал сборку. На первый взгляд, всё ок. Но если что-то не заработает - срочно сообщайте.
     
    Последнее редактирование: 5 дек 2017
  6. SOHIGH

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

    Баллы:
    76
    Здравствуйте.
    Хотел бы я сделать нормальную лотерею, чтобы учитывалось количество билетов.
    Результат лотереи был бы 90% суммы всех билетов, что я и сделал, но вот как выдать человеку шанс на победу я не знаю.
    Понимаю, что здесь нужно использовать плейсхолдер %RANDOM%, но как реализовать - не знаю.
    Да и вообще, слишком тяжелый второй активатор.
    Шанс на победу ввиде цифры сделать смогу, но как подставить этот шанс в плейсхолдер %RANDOM% не понимаю.
    Код:
    COMMAND:
      LotBuy:
        override: true
        regex: false
        command: cmd:Lottery arg1:buy arg2:*
        flags: []
        actions:
        - VAR_TEMP_SET=id:NumberMember value:%CALC:%var:LotMembers%+1%%
        - VAR_TEMP_SET=id:price value:%CALC:100*%arg2%%
        - VAR_TEMP_SET=id:nothaveprice value:%CALC:%price%-%vault_eco_balance_fixed%%
        - VAR_TEMP_SET=id:tickets value:%CALC:%varp:LotTickets%+%arg2%%
        - 'IF_ELSE=if:{''%vault_eco_balance_fixed%''>=''%price%''}
                    then:run:actions:{
                        action1:{VAR_PLAYER_SET=id:LotMember value:1}
                        action2:{MONEY_PAY=%price%}
                        action3:{VAR_PLAYER_INC=id:LotTickets value:%arg2%}
                        action4:{VAR_INC=id:LotCount value:%arg2%}
                        action5:{MESSAGE=&b%arg2% &7билетов купленно. Кол-во ваших билетов: &b%tickets%}
                        action6:{IF_ELSE=if:{%varp:LotMember%==1}
                                        then:run:actions:{}
                                        else:run:actions:{
                                            action1:{VAR_INC=id:LotMembers value:1}
                                            action2:{VAR_SET=id:LotMember_%CALC:%var:LotMembers%+1% value:%PLAYER_NAME%}
                                        }} }
                        else:run:actions:{
                            action1:{MESSAGE=&7Тебе не хватает &b%nothaveprice%&c$ &7для покупки &b%arg2% &7билетов.}
                                }'
        reactions: []
    EXEC:
      EXEC_Lot:
        actions:
        - 'BROADCAST=&7До объявления результатов лотереи осталось: &b3 &7минуты.'
        - WAIT=time:1s
        - 'BROADCAST=&7До объявления результатов лотереи осталось: &b2 &7минуты.'
        - WAIT=time:1s
        - 'BROADCAST=&7До объявления результатов лотереи осталось: &b1 &7минута.'
        - WAIT=time:1s
        - IF_ELSE=if:{%var:LotMembers%==5} then:run:actions:{action1:{VAR_TEMP_SET=id:winner value:%RANDOM:%var:LotMember_1%,%var:LotMember_2%,%var:LotMember_3%,%var:LotMember_4%,%var:LotMember_5%}}
        - IF_ELSE=if:{%var:LotMembers%==6} then:run:actions:{action1:{VAR_TEMP_SET=id:winner value:%RANDOM:%var:LotMember_1%,%var:LotMember_2%,%var:LotMember_3%,%var:LotMember_4%,%var:LotMember_5%,%var:LotMember_6%}}
        - IF_ELSE=if:{%var:LotMembers%==7} then:run:actions:{action1:{VAR_TEMP_SET=id:winner value:%RANDOM:%var:LotMember_1%,%var:LotMember_2%,%var:LotMember_3%,%var:LotMember_4%,%var:LotMember_5%,%var:LotMember_6%,%var:LotMember_7%}}
        - IF_ELSE=if:{%var:LotMembers%==8} then:run:actions:{action1:{VAR_TEMP_SET=id:winner value:%RANDOM:%var:LotMember_1%,%var:LotMember_2%,%var:LotMember_3%,%var:LotMember_4%,%var:LotMember_5%,%var:LotMember_6%,%var:LotMember_7%,%var:LotMember_8%}}
        - IF_ELSE=if:{%var:LotMembers%==9} then:run:actions:{action1:{VAR_TEMP_SET=id:winner value:%RANDOM:%var:LotMember_1%,%var:LotMember_2%,%var:LotMember_3%,%var:LotMember_4%,%var:LotMember_5%,%var:LotMember_6%,%var:LotMember_7%,%var:LotMember_8%,%var:LotMember_9%}}
        - IF_ELSE=if:{%var:LotMembers%==10} then:run:actions:{action1:{VAR_TEMP_SET=id:winner value:%RANDOM:%var:LotMember_1%,%var:LotMember_2%,%var:LotMember_3%,%var:LotMember_4%,%var:LotMember_5%,%var:LotMember_6%,%var:LotMember_7%,%var:LotMember_8%,%var:LotMember_9%,%var:LotMember_10%}}
        - VAR_TEMP_SET=id:Win value:%CALC:(100*%var:LotCount%)-100*%var:LotCount%÷100×10%
        - BROADCAST=&7Игрок &a%winner% &7выиграл &b&n%win%&c$ &7в лотерее с учетом коммисии.
    
    Пока что активатор EXEC_Lot запускаю самостоятельно.
    У человека есть хотя бы 1 билет, то у него такие-же шансы на победу, как и у игрока, имеющего 100 билетов.
    Не подскажите как реализовать?
     
    Последнее редактирование: 5 дек 2017
  7. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX

    Возможно, вам требуется что-то типа этого. В работоспособности не уверен - требуются тесты.

    Код:
    COMMAND:
      LotBuy:
        override: true
        regex: false
        command: cmd:Lottery arg1:buy arg2:*
        flags:
        - greater=param:%arg2% value:0
        - money=%calc:100*%arg2%%
        actions:
        #цикл для регистрации билетов
        - var_temp_set=id:loopTickets value:1
        - var_temp_set=id:loopLimit value:%calc:%arg2%+1%
        - execute=activator:LotLoop1
        #other
        - var_player_inc=id:LotTickets value:%arg2%
        - MESSAGE=&b%arg2% &7билетов купленно. Кол-во ваших билетов: &b%varp:LotTickets%
        - money_pay=%calc:100*%arg2%%
        reactions:
        - message=&7Вам не хватает &b%calc:100*%arg2%-%vault_eco_balance_fixed%%&c$ &7для покупки &b%arg2% &7билетов.
    EXEC:
      #цикл для регистрации билетов
      LotLoop1:
        flags:
        - lower=param:%loopTickets% value:%loopLimit%
        actions:
        - var_inc=id:LotCount
        - var_set=id:LotPlayer_%var:LotCount% value:%player_name%
        - var_temp_set=id:loopTickets value:%calc:%loopTickets%+1%
        - execute=activator:LotLoop1
      #цикл для очистки старых билетов
      LotLoop2:
        flags:
        - var_greater=id:LotCount value:0
        actions:
        - var_dec=id:LotCount
        - var_player_clear=id:LotTickets player:LotPlayer_%var:LotCount%
        - var_clear=id:LotPlayer_%var:LotCount%
        - execute=activator:LotLoop2
      #выявление победителя
      LotWinning:
        flags:
        - 'BROADCAST=&7До объявления результатов лотереи осталось:&b 3 &7минуты.'
        - WAIT=time:1s
        - 'BROADCAST=&7До объявления результатов лотереи осталось:&b 2 &7минуты.'
        - WAIT=time:1s
        - 'BROADCAST=&7До объявления результатов лотереи осталось:&b 1 &7минута.'
        - WAIT=time:1s
        - var_temp_set=id:winner value:%var:LotPlayer_%random:1-%var:LotCount%%%
        - var_temp_set=id:prize value:%calc:%var:LotCount%*90%
        - BROADCAST=&7Игрок &a%winner% &7выиграл &b&n%prize%&c$ &7в лотерее с учетом коммисии.
        - money_give=amount:%prize% target:%winner%
        #цикл для очистки билетов
        - execute=activator:LotLoop2
     
  8. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    #188
    • Добавлена альтернативный способ проверки движения игрока (в отдельной задаче). Это может снизить нагрузку на загруженных серверах.

    Эта функция включается в конфиге. Если установить general.palyer-move.use-task: true, то вместо обработчика события PlayerMoveEvent будет использоваться отдельная задача, выполняемая периодически. Период (в тиках) указывается в general.palyer-move.task-tick. Чем больше это значение - тем реже проверяется, по идее ниже нагрузка, но больше вероятность ошибки в расчётах координат игрока (влияет на активаторы REGION, REGION_ENTER, REGION_LEAVE и действие BACK)

    Код:
    general:
      player-move-event:
        use-task: true
        task-tick: 5
     
  9. Neosha

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

    Баллы:
    66
    Извините, а можно поинтересоваться, когда будет добавлена такая возможность? Просто очень нужна, т.к. альтернатив не нашёл, да и лишних плагинов не хочется ставить.
     
  10. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    #191
    • Переработан режим работы активатора определения режима GOD. Из-за возможных конфликтов с другими плагинами, в конфиг вынесена опция для его отключения.
     
  11. Lalki

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

    Баллы:
    66
  12. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Lalki Спасибо. Исправил, через несколько минут обновится на сайте.
     
  13. SOHIGH

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

    Баллы:
    76
    Здравствуйте, не подскажите, можно ли сделать так, чтобы действия не принимали такой вид?
    Код:
        - 'IF_ELSE=if:{''%raidtime%''==''%CALC:10-0%''} then:run:actions:{ action1:{MESSAGE=&7До
          конца рейда с игроком &c%owner% &7осталось: &b10&7 минут.} action2:{MESSAGE=player:%owner%
          &7До конца рейда с игроком &c%player% &7осталось: &b10&7 минут.} } else:run:actions:{
          action1:{MESSAGE=&7До конца рейда с игроком &c%owner% &7осталось: &b%raidtime%&7
          минут.} action2:{MESSAGE=player:%owner% &7До конца рейда с игроком &c%player%
          &7осталось: &b%raidtime%&7 минут.} }'
    Достаточно сложно для понимания, да и глаза устают от такого
    Оригинал действия:
    Код:
        - 'IF_ELSE=if:{''%raidtime%''==''%CALC:10-0%''}
                    then:run:actions:{
                        action1:{MESSAGE=&7До конца рейда с игроком &c%owner% &7осталось: &b10&7 минут.}
                        action2:{MESSAGE=player:%owner% &7До конца рейда с игроком &c%player% &7осталось: &b10&7 минут.}
                        }
                    else:run:actions:{
                        action1:{MESSAGE=&7До конца рейда с игроком &c%owner% &7осталось: &b%raidtime%&7 минут.}
                        action2:{MESSAGE=player:%owner% &7До конца рейда с игроком &c%player%&7осталось: &b%raidtime%&7 минут.}
                        }'


    UPD: Скажите, что делаю не так? Куда тольк не впихивал кавычки, работать не хочет : /
    Код:
    COMMAND:
      var_set:
        override: true
        regex: false
        command: cmd:var arg1:set arg2:1 arg3:* arg4:* arg5:*
        actions:
        - VAR_SET=id:1 value:%arg3% %arg4% %arg5%
    
    Ввожу команду /var set 1 x y z
    Результат:
    general:
    '1': 'x'
    Пытался так:
    Код:
        - 'VAR_SET=id:1 value:%arg3% %arg4% %arg5%'
        - VAR_SET=id:1 value:'%arg3% %arg4% %arg5%'
     
    Последнее редактирование: 9 дек 2017
  14. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @SOHIGH
    Используйте
    value:{%arg3% %arg4% %arg5%}
     
  15. SOHIGH

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

    Баллы:
    76
    @fromgate
    О, спасибо большое, сидел, тупил)
     
  16. Twirton

    Twirton Новичок

    Баллы:
    6
    Имя в Minecraft:
    Twirton
    Проблема с активатором ITEM_CLICK. Дело в том, что он отрабатывает действие два раза.
    Я устранил одну проблему добавив задержку, но есть и вторая проблема - когда кликаю правой кнопкой с нужным предметом смотря на блок - всё работает как надо, но стоит кликнуть по воздуху, предмет из руки не удаляется, хотя действие прописано и работает, когда смотрю на какой-либо блок.
    Видео-пример:
    Активатор:
    Код:
    ITEM_CLICK:
      Money:
        item: type:INK_SACK name:{&2Маленький мешочек монет}
        flags:
        - DELAY_PLAYER=id:m player:%player% set-time:500ms
        actions:
        - MONEY_GIVE=20-50
        - SOUND=type:ITEM_ARMOR_EQUIP_CHAIN pitch:0.8
        - ITEM_REMOVE=INK_SACK name:{&2Маленький мешочек монет}
     
    Последнее редактирование: 10 дек 2017
  17. Lalki

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

    Баллы:
    66
    Не знаю как исправить эту ошибку, но вроде можно ITEM_REMOVE заменить на ванильную команду clear
     
  18. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Может быть для удаления нужно прописать предмет также, как и в активаторе ITEM_CLICK?
    У вас так:
    Код:
        - ITEM_REMOVE=INK_SACK name:{&2Маленький мешочек монет}
    А необходимо:
    Код:
        - ITEM_REMOVE=type:INK_SACK name:{&2Маленький мешочек монет}
     
  19. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Насколько я знаю, это происходит из-за того, что в новых версиях Spigot при клике посылаются одновременно два PlayerInteractEvent: для основной и левой руки.
     
  20. SOHIGH

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

    Баллы:
    76
    Здравствуйте, не подскажите как можно узнать префикс игрока из плагина PermissionsEx, чтобы использовать его в активаторах?
    Мне он нужен для того, чтобы добавить выбор сообщений о входе игрока.
    Через меню выбираю сообщение, а при входе на сервер выполняется активатор JOIN, который отправляет сообщение о моем входе на сервер.
    Да, можно использовать несколько активаторов с разными флагами, например:
    Код:
      JOIN_VIP_1:
        flags:
        - PERM=vip.join.1
        actions:
        - BROADCAST=&e[Vip] &e%player% &7зашел на сервер
      JOIN_VIP_2:
        flags:
        - PERM=vip.join.2
        actions:
        - BROADCAST=&e[Vip] &e%player% &7залетел на сервер
      JOIN_PREM_1:
        flags:
        - PERM=prem.join.1
        actions:
        - BROADCAST=&b[Prem] &b%player% &7зашел на сервер
      JOIN_PREM_2:
        flags:
        - PERM=prem.join.2
        actions:
        - BROADCAST=&b[Prem] &b%player% &7залетел на сервер
    
    Но количество активаторов JOIN будет большим, а именно:
    8 групп * 10 вариантов сообщений = 80 активаторов JOIN.
     

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