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

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

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

  1. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Сейчас немного переделал принцип выдачи временной опки. По идее будет безопаснее. Единственное где я вижу проблему — если после выдачи полномочий сервер намертво упадёт.
     
  2. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Ничего не выйдет, мы вместо имени получим его тип: PLAYER
    Всё из-за того, что мы пытаемся получить имя игрока, используя функцию getCustomName(), но для игрока эта функция игнорируется. А раз мы ничего не получаем от этой функции, то устанавливаем тип моба, т.е. PLAYER.
    Аналогично происходило и с %targetname% в действии SHOOT, но я там поправил, указав явное получение имени игрока. Думаю, в этих активаторах (MOB_DAMAGE, MOB_KILL) необходимо также подкорректировать код. Это могу сделать и я :)
     
  3. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
  4. Korvinius

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

    Баллы:
    88
    и MOB_CLICK
     
  5. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    готово: build #75
     
  6. Korvinius

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

    Баллы:
    88
    Не планируете добавлять возможность проверки флагов WorldGuard?
     
  7. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Вродебы это не тяжело сделать. Флаг назвать REGION_STATE, а проверка будет выполняться следующим образом:
    [world.]<region.flag>
    пример:
    REGION_STATE=world.spawn.use
     
  8. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    build #76

    При выполнении действия EXEC временные переменные, действующие в рамках вызывающего активатора, запоминаются и передаются в активатор EXEC.
     
    Последнее редактирование: 9 май 2017
  9. OneDisik

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

    Баллы:
    66
    Вот бы сделать параметры к флагу GROUP, чтобы он показывал в какой группе находится сейчас игрок, для которого был выполнен активатор
     
  10. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Я тут рекламку когда-то обещал запилить. Буду выставлять время от времени. Группа малость закинутая, но всё же... https://vk.com/club.omgcreeper?w=wall-47073014_1952690/all

    + Постер набросал на скорую руку. Может быть кто-то найдет ему применение на какой-то викиСтранице или ещё где...
    EN -- http://prnt.sc/f62a75
    RU -- http://prnt.sc/f62b11
     
  11. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Есть простой способ, как это узнать, используя FLAG_SET:
    Код:
    EXEC:
      test_flags:
        flags:
        - FLAG_SET=GROUP:default GROUP:fly GROUP:vip GROUP:vipp GROUP:god GROUP:mvp GROUP:mvpp GROUP:creative GROUP:admin GROUP:owner
        actions:
        - CMD_CONSOLE=say &eИгрок &a%player% &eпринадлежит группе &6&l%GROUP_FLAG%
     
  12. OneDisik

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

    Баллы:
    66
    Спасибо, в принципе, я примерно так и думал. Столкнулся с проблемой, получить префикс игрока, который в данный момент установлен, чтобы если изменить на другой, ты как. То смог вернуть который был
    Пример: /prefix set - это я знаю
    /prefix off - вернуть тот который был до изменения.
    Можно как-то наверно сначала получить группу, а после сохранить префикс в переменную
     
  13. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Есть плейсхолдер %PLAYER_DISPLAY%, который показывает ник игрока с его префиксом. Нужно просто извлеч префикс из этой переменной, используя действие REGEX. Как пример:
    Код:
    COMMAND:
      pref:
        override: true
        regex: true
        command: cmd:prefix arg1:set
        actions:
        - CANCEL_EVENT=true
        - REGEX=input:{%PLAYER_DISPLAY%} regex:{(.*)(%player%)(.*)}
        - VAR_PLAYER_SET=id:prefix value:{%group01%}
        - 'MESSAGE=&aМой префикс: &r%varp:prefix%'
    
    Если у вас префикс с пробелами, то в переменную необходимо записывать результат в фигурных скобках:
    - VAR_PLAYER_SET=id: prefix value:{%group01%}
     
    Последнее редактирование: 10 май 2017
  14. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Что же получается? Принудительно запретить разворачивание плейсхолдера нельзя, а теперь ещё и костыль в виде EXEC'a вызвать будет нельзя? Или это только первый этап внедрения инструмента для экранирования?
    Но тогда придётся переписывать всё то, что опиралось на исчезновение в EXEC временных плейсхолдеров...

    P.S. После WAIT тогда уж исчезновение локальных плейсхолдеров тоже нужно пофиксить.
     
  15. OneDisik

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

    Баллы:
    66
    Как вообще понять регулярные выражения. Что нужно выучить
     
  16. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Lyosha12
    Ну создание активаторов на лету, я могу рассматривать исключительно как недокументированная функция ;)

    А наследование параметров EXEC'ом у меня планировалось очень давно.
    WAIT - посмотрю, можно ли будет там это сделать в принципе.
    Для начало надо про них немного прочитать. Погуглите что-нибудь.
    В процессе сочинения выражений я часто пользуюсь сервисом: https://regex101.com/
    Ну и можно распечатать себе подсказку: https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
     
  17. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Нет, да как же так? Если в EXEC будет хоть что-то разворачиваться, как и в WAIT, но экранирования плейсхолдеров Вы так и не добавите, то мне придётся присматривать альтернативы ReActions, в том числе придётся присмотреться к Spigot API и самому начать писать плагины... Ваш плагин сейчас для меня - единственный удобно инкапсулирующий внутреннее API игры.

    Или Вы считаете, что такие решения не очень красивы и эффективны, что действительно следует искать альтернативы для создания подобного поведения?

    Код:
    EXEC:
      RemoveParkourVariables:
        actions:
        - VAR_PLAYER_CLEAR=id:isInParkour
        - VAR_PLAYER_CLEAR=id:Cur_CheckPoint
        - VAR_PLAYER_CLEAR=id:Lives
        - VAR_PLAYER_CLEAR=id:Parkour-FullWay
      ToCheckPoint:
        flags:
        - VAR_PLAYER_GREATER=id:Lives value:1
        actions:
        - VAR_PLAYER_DEC=id:Lives
        - 'MESSAGE=%var:prefix% &c-1 жизнь. Осталось жизней: &3%varp:Lives%&c.'
        - TP=loc:%varp:Cur_CheckPoint%
        reactions:
        - EXECUTE=activator:RemoveParkourVariables player:%player%
        - MESSAGE=%var:prefix% &cВсе жизни потрачены, увы.
        - TP=loc:Parkour_Start
    
       
    REGION_ENTER:
      Illegal_Enter:
        region: General.parkour
        flags:
        - '!VAR_PLAYER_EXIST=id:isInParkour'
        actions:
        - MESSAGE=%var:prefix% &cНа паркур нужно заходить только через &6/warp parkour&c!
        - CMD_CONSOLE=spawn %player%
      Parkour-jump1:
        region: General.Parkour-Jump1
        actions:
        - VELOCITY=vector:0,0.8,0.5
      Parkour-Jump2:
        region: General.parkour-jump2
        actions:
        - VELOCITY=vector:0.4,1,0
      Parkour-Loser:
        region: General.parkour-lose
        actions:
        - EXECUTE=activator:ToCheckPoint player:%player%
    REGION_LEAVE:
      Legal_leave-RGLeave:
        region: General.parkour
        actions:
        - EXECUTE=activator:RemoveParkourVariables player:%player%
        - MESSAGE=%var:prefix% &2Вы покинули паркур.
    QUIT:
      Legal_leave-Quit:
        actions:
        - EXECUTE=activator:RemoveParkourVariables player:%player%
    REGION:
      Anti-Fly:
        region: General.parkour
        flags:
        - STATE=FLY
        - VAR_PLAYER_GREATER=id:Lives value:1
        - '!GROUP=Authors'
        actions:
        - EXECUTE=activator:ToCheckPoint player:%player%
        - 'MESSAGE=%var:prefix% &cНе-не-не! Никаких полётов, шулер!'
        - CMD_CONSOLE=fly %player% off
      Anti-Effects:
        region: General.parkour
        flags:
        - VAR_PLAYER_GREATER=id:Lives value:1
        actions:
        - POTION_REMOVE=all
      Anti-Glide:
        region: General.parkour
        flags:
        - STATE=GLIDE
        - VAR_PLAYER_GREATER=id:Lives value:1
        actions:
        - GLIDE=glide:false
        - EXECUTE=activator:ToCheckPoint player:%player%
        - 'MESSAGE=%var:prefix% &cПоимей же совесть! Чтобы так мухлевать, я не даже знаю кем нужно быть...'
    BUTTON:
      Parkour-End:
        world: General
        x: -192
        y: 101
        z: 148
        actions:
        - CMD_CONSOLE=eco give %player% 3000
        - CMD_CONSOLE=warp parkour %player%
        - BROADCAST=%var:prefix% &3%player% &2прошё паркур! - &a/warp parkour
       
        - VAR_SET=id:Parkour-TOP-8 value:%var:Parkour-TOP-7%
        - VAR_SET=id:Parkour-TOP-7 value:%var:Parkour-TOP-6%
        - VAR_SET=id:Parkour-TOP-6 value:%var:Parkour-TOP-5%
        - VAR_SET=id:Parkour-TOP-5 value:%var:Parkour-TOP-7%
        - VAR_SET=id:Parkour-TOP-4 value:%var:Parkour-TOP-3%
        - VAR_SET=id:Parkour-TOP-3 value:%var:Parkour-TOP-2%
        - VAR_SET=id:Parkour-TOP-2 value:%var:Parkour-TOP-1%
        - VAR_SET=id:Parkour-TOP-1 value:%player%
        - SIGN_SET_LINE=loc:General,-197,88,137 line1:{%var:Parkour-TOP-1%} line2:{%var:Parkour-TOP-2%} line3:{%var:Parkour-TOP-3%} line4:{%var:Parkour-TOP-4%}
        - SIGN_SET_LINE=loc:General,-193,88,137 line1:{%var:Parkour-TOP-5%} line2:{%var:Parkour-TOP-6%} line3:{%var:Parkour-TOP-7%} line4:{%var:Parkour-TOP-8%}
       
    COMMAND:
      Warp-Parkour:
        regex: false
        override: false
        command: warp parkour
        actions:
        - VAR_PLAYER_SET=id:isInParkour value:true
      SetCheckPoint:
        regex: false
        override: true
        command: addCheckPoint
        flags:
        - GROUP=Authors
        actions:
        - REGEX=input:{%PLAYER_LOC_VIEW%} regex:{(\d+.\d+)|(-\d+.\d+)}
        - VAR_SET=id:X value:%calc:%group00%-0.5%
        - VAR_SET=id:Y value:%calc:%group10%-0.5%
        - VAR_SET=id:Z value:%calc:%group20%-0.5%
        - MESSAGE=%var:prefix% &2Чек-поинт по координатам (&3%var:X%&2, &3%var:Y%&2, &3%var:Z%&2) успешно создан.
        - 'CMD=ra add PLATE CheckPoint_%var:X%_%var:Y%_%var:Z%'
        - 'CMD_CONSOLE=ra add CheckPoint_%var:X%_%var:Y%_%var:Z% a MESSAGE %var:prefix% &2Чек-поинт! У Вас &b7&2 жизней!'
        - 'CMD_CONSOLE=ra add CheckPoint_%var:X%_%var:Y%_%var:Z% a VAR_PLAYER_SET id:Lives value:7'
        - 'CMD_CONSOLE=ra add CheckPoint_%var:X%_%var:Y%_%var:Z% a VAR_PLAYER_SET id:Cur_CheckPoint value:General,%var:X%,%var:Y%,%var:Z%'
        - 'CMD_CONSOLE=ra add CheckPoint_%var:X%_%var:Y%_%var:Z% a SOUND type:ENTITY_PLAYER_LEVELUP pitch:1 volume:2'
        - 'CMD_CONSOLE=ra add CheckPoint_%var:X%_%var:Y%_%var:Z% f !VAR_PLAYER_COMPARE id:Cur_CheckPoint value:General,%var:X%,%var:Y%,%var:Z%'
        - CMD_CONSOLE=ra group CheckPoint_%var:X%_%var:Y%_%var:Z% Core_Parkour_CheckPoints
        - VAR_CLEAR=id:X
        - VAR_CLEAR=id:Y
        - VAR_CLEAR=id:Z
       
        reactions:
        - MESSAGE=%var:prefix% &cНе-а, тебе нельзя использовать эту команду.
    
    MESSAGE:
      Remove_NoPerm:
        source: CHAT_OUTPUT
        type: REGEX
        flags:
        - REGION=General.parkour
        - '!GROUP=Authors'
        mask: .*Ошибка.*
        actions:
        - CANCEL_EVENT=true
      Remove_LogRemoveEffects:
        source: LOG_OUTPUT
        type: REGEX
        mask: .*Couldn't take any effects from \S+ as they do not have any.*
        actions:
        - CANCEL_EVENT=true
       
    
     
  18. OneDisik

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

    Баллы:
    66
    Данный код работает частично. Если заменить на %group02% то мой ник выводится.
    А вот %group01% не работает
    В переменных выводится
    Код:
    Dmitriy1:
      prefix: §4
    general:
      loto_amount: '1.0'
      loto_start: '0'
    
    В игре просто не показывается 2017-05-10_18.51.51.png
    Вот строчки с permissions.yml
    Код:
        options:
          prefix: '&7[&3Хускарл&7] &e'
    
          default: false
    Chat Manager: config.yml
    Код:
    message-format: '&7(&9L&7)&r %prefix %player %suffix &6> &f%message'
    Походу дело в плейсхолдере %PLAYER_DISPLAY% я решил вывести просто его:
    Код:
    - 'MSG=Проверка: %PLAYER_DISPLAY%'
    # Выводится мой ник
     
    Последнее редактирование: 10 май 2017
  19. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Lyosha12
    В принципе с плейсхолдером %raw:...% можно будет что-то придумать.

    Наоборот. Я считаю, что это довольно круто. Но такие вещи менее предсказуемы. И наверняка имеют право на существование. В любом случае, ReActions оказался гораздо гибче, чем мне это казалось изначально. И динамического создания активаторов я точно себе не представлял изначально ;)
     
  20. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Рад слышать :)
    Мне, как оказывается, предстоит ещё долгая работа с заказчиком сервера, а Ваш плагин, как всегда, лучше всех других. Если бы сейчас Вам не помогал @maxdikiy, то я бы и не реализовал и части из того, что мне заказали.
    Можно проверить уровень здоровья игрока? В документации не видно флага.
    Мне тоже немного не понятен смысл. Одно я понял точно: первое число - это номер вхождения заданного REGEX в тексте. Допустим, есть regex:{\d+\s} и input:{12 13 14}, тогда %group00% == "12 ", %group10% == "13 ", %group30% == ???. А что тогда 01? %group01% == 12" " == \s?
     
    Последнее редактирование: 10 май 2017

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