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

#175
  • Теперь активатор DOOR поддерживает все типы дверей (включая железные)

Если у кого-то есть возможность проверить - буду благодарен :)

Да, все работает. Спасибо~

upd: После одного из обновлений плагина появился странный глюк - в регионе спавна а также при использовании любой команды происходит некая имитация удара, будто бы игрок бьет (предположительно) сам себя. Это определенно ReActions - после удаления плагина такого не происходит, но увы, сейчас мне без него никуда.
Если для "лечения" требуются активаторы и конфиги - предоставлю в ЛС.
 
Последнее редактирование:
Здравствуйте, у меня такой вопрос. Есть команда /info <player>, как использовать данные из плейсхолдеров для игрока, который указан вместо <player>, а не для игрока, который прописал команду?
 
@imDaniX
Пришлите мне. Не обещаю, что быстро смогу глянуть, но попробую.
 
Здравствуйте, у меня такой вопрос. Есть команда /info <player>, как использовать данные из плейсхолдеров для игрока, который указан вместо <player>, а не для игрока, который прописал команду?
Если нужно получить персональную переменную, то %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%
 
#181
  • Теперь плагин использует метрики bStats.org (вместо mcstats.org — эти очень часто лежат и глючат)
  • Куча всяких оптимизаций и мелких правок кода. Если раньше (вдруг) плагин работал на Java 7, то сейчас 100% только Java 8.
  • Немного модифицировал сборку. На первый взгляд, всё ок. Но если что-то не заработает - срочно сообщайте.
 
Последнее редактирование:
Здравствуйте.
Хотел бы я сделать нормальную лотерею, чтобы учитывалось количество билетов.
Результат лотереи был бы 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 билетов.
Не подскажите как реализовать?
 
Последнее редактирование:
Здравствуйте.
Хотел бы я сделать нормальную лотерею, чтобы учитывалось количество билетов.
Результат лотереи был бы 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 билетов.
Не подскажите как реализовать?


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

Код:
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
 
#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
 
Я кажется понял, что вам нужны не визуальные эффекты, а эффекты зелья, накладываемые на цель при уроне.
Я попробую добавить такую возможность.
Извините, а можно поинтересоваться, когда будет добавлена такая возможность? Просто очень нужна, т.к. альтернатив не нашёл, да и лишних плагинов не хочется ставить.
 
#191
  • Переработан режим работы активатора определения режима GOD. Из-за возможных конфликтов с другими плагинами, в конфиг вынесена опция для его отключения.
 
@Lalki Спасибо. Исправил, через несколько минут обновится на сайте.
 
Здравствуйте, не подскажите, можно ли сделать так, чтобы действия не принимали такой вид?
Код:
    - '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%'
 
Последнее редактирование:
Проблема с активатором 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Маленький мешочек монет}
 
Последнее редактирование:
Проблема с активатором ITEM_CLICK. Дело в том, что он отрабатывает действие два раза.
Я устранил одну проблему добавив задержку, но есть и вторая проблема - когда кликаю правой кнопкой с нужным предметом смотря на блок - всё работает как надо, но стоит кликнуть по воздуху, предмет из руки не удаляется, хотя действие прописано и работает, когда смотрю на какой-либо блок.
Видео-пример:
Активатор:
Код:
ITEM_CLICK:
  Money:
    item: type:INK_SACK name:{&2Маленький мешочек монет}
    flags:
    - DELAY_PLAYER=id:blockclick 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Маленький мешочек монет}
Не знаю как исправить эту ошибку, но вроде можно ITEM_REMOVE заменить на ванильную команду clear
 
Проблема с активатором 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Маленький мешочек монет}
Может быть для удаления нужно прописать предмет также, как и в активаторе ITEM_CLICK?
У вас так:
Код:
    - ITEM_REMOVE=INK_SACK name:{&2Маленький мешочек монет}

А необходимо:
Код:
    - ITEM_REMOVE=type:INK_SACK name:{&2Маленький мешочек монет}
 
Проблема с активатором ITEM_CLICK. Дело в том, что он отрабатывает действие два раза.

Насколько я знаю, это происходит из-за того, что в новых версиях Spigot при клике посылаются одновременно два PlayerInteractEvent: для основной и левой руки.
 
Здравствуйте, не подскажите как можно узнать префикс игрока из плагина 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.
 
Назад
Верх