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

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

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

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

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Пока нет, хотя это хорошая идея для плейсхолдера. Думаю сделаю.

    Динамический Lore - это конечно идея неплохая. Мне нравится. Но есть несколько нюансов. Мне кажется это скорее идея для дополнительного плагина-спутника. Я подумаю об этом.

    По идее (я уже могу путать), но если действие происходит в момент отсутствия игрока - оно выполняется. Просто если он привязано к игроку, а его нет онлайн то оно не отрабатывает. Если действие отложено на 10 мин, а игрок зашёл перед его выполнением - он его получит.

    Про однократное выполнение при одевании - добавлю. Это будет дополнительный параметр для настройки активатора.
    А вот про ПКМ - надо подумать. По идее, странно что не отрабатывает.

    Да, пожалуй стоит.

    Это уже пахнет отдельным активатором. Пока не в приоритете, потом напишу почему.

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

    Переменные же есть.

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

    Ну... Так работает майнкрафт. Я уже привык просто обращать внимание на то "подсвечена" ли кнопка или нет.

    Ну так отключается же в конфиге :)


    Я подумаю :)

    Есть такое. Текущую документацию делал не я и этот процесс прервался, когда у документора исчез интерес к плагину. Он использовал simple html для форматирования, а я не хочу делать это "вручную", а вот WYSIWYG редактора для получения simpl html, я найти не смог.

    Только через MESSAGE. С радиусом потребность я понял.

    Пока нет. Но думаю такое действие (по крайней мере для предмета в руке/слоте брони можно будет сделать).

    Можно попробовать так:
    Код:
      Firework:
        command: cmd:yahoo arg1:*
        flags: []
        actions:
        - cmd_op=firework %arg1%
        reactions: []
    
    Хочу обратить внимание - если вызывать в CMD_OP туже команду, что и в COMMAND: cmd:<команда> - то мы можем получить цикл закрученный на самом себе.

    Ага, точно. Просто мне не нужно было, а просить никто - не просил ;)

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

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Без серьёзных костылей этот невозможно. Дело в том, что сообщение не содержит в себе признаков того, кто его направил. Т.е. это просто пакет содержащий определенный текст. И если два разных плагина (а уж тем более один плагин, но разными командами) отправляет игроку одинаковое сообщение, то различить их нельзя.


    Очень специфичная вещь. Даже не знаю...

    Ответ такой же как про опыт ;)
    Вообще, знаете что. Если не сложно, подумайте какие характеристики у игрока можно изменять/выводить. Я сделаю унивесальное действие и плейсхолдер.

    Мечтаю об этом с момента появления активатор COMMAND. Просто руки не доходят ;)

    Я почти ничего не понял ;) Кроме того, что нужно расширить функционал по выбору игроков (вокруг координаты/игрока случайных/ближайших и т.п.)

    Кстати, поддержка математических выражений есть. Но надо будет нормально описать. Также как и переменные.

    Мне категорически не нравится то как устроен Scoreboard. Вообще. Я из-за этого перестал обновлять плагин Ok'Glass! В общем, функционал Scoreboard если будет в ReActions, то исключительно для вывода и всё.
    Хотя возможно, мне стоит изучить вопрос ещё раз и сделать наоборот - обновить Ok'Glass и написать для него модуль читающий переменные из ReActions. В общем буду думать.

    Прямо сейчас это можно сделать связкой активаторов с использованием персональных переменных.
    Сделать же ожидание нескольких строк... Теоретически можно. Надо будет подумать.

    Ну здесь nick - это будет %arg1% - дальше -- это работа с переменными.

    Ну да. Исключение - полублоки (с точки зрения "целых" координат - игрок, который топает по полублоку находится в том же блоке, что сам полублок.
    Дайте пример, чего нужно отловить. Подумаю как это лучше будет сделать. Можно будет добавить для WALK_BLOCK пару дополнительных параметров.
     
  3. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    1. Action_delayed. Смотрите:
    Игрок активирует активатор, в котором есть action_delayed с time:30s. Если игрок перезайдёт и подождёт эти 30 секунд, то действие по отношению к нему выполнено не будет. Проверял на message - не даёт сообщение после перезахода.
    2. Активатор-звук. Есть пара звуков, которые воспроизводятся таким образом, что отследить по-другому, кроме как звуком, нельзя. Например: превращение зомби в жителя. При этом проигрывается звук.
    Можно отследить, нажал ли игрок на моба с яблоком в руке. Но как отследить, что моб под эффектом слабости? - Никак.
    3. Из Scoreboard: вывод переменных в плейсхолдеры, ловля переменных Scoreboard как флаги, выбор рандомного\ближайшего\всех игроков при действиях с ними и алгебраические действия с переменными Scoreboard (это уже реализовано на 1.8, но, ядер сервера ни них же нет почти... И плагинов...)
    4. Изменяемые характеристики игрока:
    • Флаг Скорости бега\падения\плаванья.
    • Опыт, сытость.
    • Флаг проверки скорости получения урона (скорость, с которой игрок получает урон. Пример: один раз в секунду, в две, в три...).
    • Флаг проверки мощности полученного урона.
    • Добавление\отнимание времени у эффекта.
    • Флаг проверки скорости использования предметов. И удачного\не удачного использования. Т.е. выпил зелье - засчитано. Начал пить, но оторвался - не засчитано (item_click).
    • Флаг проверки количества пройденных блоков (можно было бы сделать игру "холодно\горячо", но не знаю как сделать сообщение при приближении к какому-то объекту на какое-то количество блоков. Я не говорю за регион, т.к. это кубоид или полинон. Именно количество блоков, на которое приблизился игрок к цели.)
    5. WALK_BLOCK. Нужно отловить нахождение в блоке портала (для портала, который мог бы создать любой).
    6. Как можно прервать action_delayed? Т.е., например, игрок зашёл в регион, ему начало по очереди писать сообщения. Но как только он выйдет из него, сообщения должны бы прекратить писаться, чего не происходит и действия прерывания активатора я не видел.
     
    Последнее редактирование: 28 сен 2014
  4. olegikoligik

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

    Баллы:
    88
    У меня лишь один вопрос. Дело в том что после того как добавляешь активатор, действие или флаг с помощью команды, весь русский текст преобразовывается в следующего типа символы: \u0441.
    Это для меня большая проблема, так-как сейчас появилась необходимость немного отредактировать текст.
     
  5. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    7. FLAG_SET не работает как нужно. Состою в группе игроков, но выполняется противодействие :(
    Код:
      Test:
        command: test
        flags:
        - GROUP=Player
        - GROUP=Moderator
        - FLAG_SET=GROUP=Player GROUP=Moderator
        actions:
        - CANCEL_EVENT=true
        - message=player:%player% Test
        reactions:
        - message=player:%player% :(
    

    8. Мне кажется, или был активатор на присутствие предмета в инвентаре?...
    9. Попытался заменить команду //wand через активатор command, но если писать cmd:/wand, то WE выдаёт своё. А если писать cmd:wand (т.е. набирать надо /wand), то активатор работает. Как можно поправить ситуацию? Даже с cancel_event=true не работает:
    Код:
      Wand:
        command: cmd:/wand
        flags: []
        actions:
        - CANCEL_EVENT=true
        - item_remove_inventory=271*999
        - action_delayed=time:50ms action:{cmd_op kit wand}
        reactions: []
    
    UPD:
    Магическим образом активатор стал ловить команду //wand о_О
    Ещё активатор срабатывает дважды при ///wand о_О
    Вот код:
    Код:
      Wand:
        command: cmd:wand
        flags: []
        actions:
        - CANCEL_EVENT=true
        - item_remove_inventory=271*999
        - action_delayed=time:50ms action:{cmd_op kit wand}
        reactions: []
    

    10. Личный таймер... Я думал над созданием таймера для игрока из действия активатора, а, после отработки таймера, EXEC, вызываемый им, должен был удалять таймер и самого себя, а так же совершать действия по отношению к игроку, который "создал" таймер. Но тут есть несколько вытекающих:
    • Как понять, какому игроку "принадлежит" таймер? Как задать таймеру игрока, который вызвал активатор?
    • Как создавать активаторы с разным именем, чтобы они не конфликтовали? Ведь таймеры и EXEC'и будут создавать несколько игроков одновременно.
    • Как удалить EXEC, если игрок, которому принадлежит EXEC, вышел?
    Можно ли использовать конструкцию в активаторе, вызываемым игроком?
    Код:
    cmd_op=ra add timer TimerExecUser%player% timer-type:Server time:*_10_*_*_*_? activator:ExecUser%player%
    cmd_op=ra add EXEC ExecUser%player%
    cmd_op=ra add EXEC a действия
    cmd_op=ra add EXEC a cmd_op ra remove timer TimerExecUser%player%
    cmd_op=ra add EXEC a cmd_op ra remove activator ExecUser%player%
    И можно ли обойтись без этого костыля, просто добавив нормальную работу action_delayed при перезаходе игрока? :)
    11. Не знаю, проблема или нет, но при выдаче предметов плагин почему-то не обрабатывает большие lor'ы.
    Код:
    2014-09-27 23:13:17 [INFO] [ReActions] Could not parse item material name (id) Топор_привата

    12. Можно ли в качестве действия добавить удаление конкретного текста или блока текста, выводимого в чат без применения активатора message? Т.е. запихнуть активатор в действие :D
    Имею в виду, что можно было бы научить активатор message определять причинно-следственную связь. То есть, чтобы message ловил действие плагина cmd_op, смотрел, выдало ли игроку сообщение после действия cmd_op, например, "0 блоков выделено" (/rg select), и скрывал его через cancel_event.
    13. Можно список регулярных выражений, которые поддерживаются плагином? Первый раз, кстати, вижу их упоминание в ReActions. Может, Вы добавили их, а написать забыли? :D
    А поддерживает ли плагин регулярные выражения, которые есть в notepad++? Или они совсем другие?
    14. Насчёт двадцатого пункта. Я пытался вставить плейсхолдер в message, но текст, который я задавал, производил же не сам игрок? То есть, плейсхолдер просто не работал, т.к. не было игрока, который активировал message (а вообще возможно, чтобы message ловил игрока, который произвёл текст?). Код действия, что вызывало то сообщение:
    Код:
      Pepel2:
        command: cmd:up arg1:Pepel2
        flags: []
        actions:
        - action_delayed=time:100ms action:{cmd_op kit Pepel_II}
        reactions: []
    
    Так вот... Как насчёт того, чтобы %player% можно было использовать в дальнейших действиях? Например:
    Есть сообщение: "Игрок Lyosha12 получил меч"
    Маска ловит "Игрок %player% получил меч"
    И подставляет %player% вместо, например, %PlayerInMessage%
    15. Опять магия с //wand
    При написании //wand должно удалять все топоры и выдавать новый из действия.
    Код:
      Wand:
        command: cmd:wand
        flags: []
        actions:
        - CANCEL_EVENT=true
        - item_remove_inventory=271*999
        - action_delayed=time:5ms action:{cmd_op kit wand}
        reactions: []
    
    Но при повторном написании команды и при нахождении в инвентаре нового топора (с тем же ID271), он не удаляется, а новый топор всё равно выдаётся о_О
     
    Последнее редактирование: 28 сен 2014
  6. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Это скорее всего вопрос настройки консоли и сервера. Рекомендую в строку запуска сервера добавить ключа -Dfile.encoding=UTF8
    Вы дублируете. Если у Вас получается условие: GROUP=Player И GROUP=Moderator И (GROUP=Player ИЛИ GROUP=Moderator)
    Т.е. по факту это условие будет выполнять только когда игрок и в группе Player и в группе Moderator.
    Чтобы или-или, нужно оставить только флаг " - FLAG_SET=GROUP=Player GROUP=Moderator"

    Нет. Но на одном сервере (ещё до появления активатора ITEM_WEAR) использовали флаг наличия предмета в инвентаре и активатор REGION.


    Прикольно. Про команды с двойными слэшами я не задумывался. Попробую.

    Ну с action_delayed - я посмотрю в любом случае. Ну и я бы не рекомендовал сейчас делать такие хитрости с таймерами.
    Дело в том, что я планирую таймеры перевести в категорию активаторов. Т.е. вы не будете добавлять таймер, а просто будете создавать активатор, где в параметрах будут описываться когда он будет выполняться. Механизм таймеров останется, но будет переведён на более "низкий" уровень. Скорее всего, недоступный с помощью команд.[/quote]

    Дайте всю строку, где описывается предмет. Надо выяснить в чем причина.

    "Ловить" действие - это уже активатор. Активатор - по сути это обработчик события, которое вызвано каким-то действием.
    В отдельных случаях это стандартные события bukkit, в иных - эти же события с учетом каких-то условий, в третьих - это какие-то собственные события, возникающие при определенных условий.
    Выполнение команды (CMD_OP) и получение игроком сообщения (активатор MESSAGE) связать не так просто как кажется. Вы можете выполнить несколько команд в одном активаторе и получить несколько сообщений от них. При этом не факт, что Вы будете получать сообщения сразу после выполнения команды.
    В общем это задача для развития активатора MESSAGE. Я подумаю над этим.

    Регулярные выражения поддерживаются только в MESSAGE - в качестве поиска сообщения. Это полный аналог, того что применяется в плагинах (на основе которых и сделан MESSAGE) MessageFilter и MessageCommander. Т.е. в активаторе указываем "type: REGEX" и тогда значение параметра mask - будет восприниматься как регулярное выражение, которое будет использоваться для сопоставления обрабатываемому сообщению.
    Я не знаю, что там поддерживает, notepad++. Но думаю это одно и тоже (или максимально похоже). В любом случае я при написании регулярных выражений использую http://regex101.com/ -- если тут выражение отрабатывает, то оно же отрабатывает и в Java (ну и, соответственно, в ReActions)
     
  7. olegikoligik

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

    Баллы:
    88
    Что не правильного в следующем коде?:
     
  8. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    - ACTION_DELAYED=time:50ms action:{MESSAGE текст}
    2014-09-28 17:22:44 [INFO] [ReActions] Could not parse item material name (id) Топор_выделения
    Код:
      Give:
        item: '294'
        flags: []
        actions:
        - item_give=§fТопор_выделения@§eКак_заприватить_территорию?@§61._§eВам_нужно_выделить_куб.@_§3•§e_Кликните_левой_кнопкой_мыши_по@§e___блоку,_который_находится_снизу_дома.@_§3•§e_Кликните_правой_кнопкой_мыши_по@§e___блоку,_который_находится_вверху_дома.@___§6В_скобках_показаны_координаты_точек@§6___(x,y,z)_и_объём_куба.@§62._§eНаберите_следующую_команду:§2@_§c•_§3/rg_claim_name@§6___Name_§e-_имя_региона.@_§3•§7_Вместе_с_регионом_приватятся@§7___сундуки,_печки_люки_и_т.д.@_§3•_§7Игрокам_доступен_объём_привата@§7___в_250.000_кубов_а_так_же_5_регионов.$271*1
        reactions: []
    
    Кстати, нашёл способ использовать двоеточие в тексте: поставить после него цветовой код.
    UPD:
    Не знаю, что не работало, но сейчас работает. Видимо, совершал ошибку в описании. Вот сейчас выдаёт предмет, но описание идёт не полное...
    [​IMG]
    Ну что не так? Не работает :(
    Код:
    COMMAND:
      Test:
        command: cmd:test
        flags:
        - FLAG_SET=GROUP=Moderator GROUP=Player
        actions:
        - CANCEL_EVENT=true
        - message=player:%player% Test
        reactions:
        - message=player:%player% :(
    

    Вопрос: при указании региона во флагах, как определяется мир? Ведь в разных мирах могут быть регионы с одинаковыми именами. А в конфиге, вроде, нет ссылок на разные миры.
    При спавне моба где указание на продолжительность эффекта?
    potion:<Эффект>[:<Уровень>]
    Спавн моба через EXEC:
    Код:
    [SEVERE] Could not pass event ExecEvent to ReActions v0.9.3
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:478)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:463)
        at me.fromgate.reactions.event.EventManager$1.run(EventManager.java:231)
        at org.bukkit.craftbukkit.v1_5_R3.scheduler.CraftTask.run(CraftTask.java:58)
        at org.bukkit.craftbukkit.v1_5_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:344)
        at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:509)
        at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:227)
        at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:472)
        at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:404)
        at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
    Caused by: java.lang.NullPointerException
        at me.fromgate.reactions.actions.ActionDelay.execute(ActionDelay.java:41)
        at me.fromgate.reactions.actions.Action.executeAction(Action.java:75)
        at me.fromgate.reactions.actions.Actions.performAction(Actions.java:187)
        at me.fromgate.reactions.actions.Actions.executeActivator(Actions.java:179)
        at me.fromgate.reactions.activators.ExecActivator.activate(ExecActivator.java:28)
        at me.fromgate.reactions.activators.Activator.executeActivator(Activator.java:274)
        at me.fromgate.reactions.activators.Activators.activate(Activators.java:357)
        at me.fromgate.reactions.RAListener.onRegionLeave(RAListener.java:379)
        at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        ... 12 more
    
    Код:
    EXEC:
      LavaForest1Mob:
        flags:
        - DELAY=SpawnMobHG2
        actions:
        - DELAY=60s/SpawnMobHG2
        - mob_spawn=type:zombie num:1 loc:LavaForest1 potion:INVISIBILITY drop:§6Меч_правосудия$283*1 health:40 helm:310 weapon:267 dmg:2
        reactions: []
    REGION_ENTER:
      LavaForest1:
        region: lavaforest1
        flags: []
        actions:
        - action_delayed=time:1s action:{velocity vector:0,0,1.5}
        - action_delayed=time:1050ms action:{velocity vector:0,0,1}
        - action_delayed=time:1100ms action:{velocity vector:0,0,1}
        - action_delayed=time:1150ms action:{velocity vector:0,0,1.5}
        - action_delayed=time:1200ms action:{velocity vector:0,1,2}
        - action_delayed=time:1250ms action:{velocity vector:0,1,0}
        - action_delayed=time:1250ms action:{velocity vector:0,0.5,-0.5}
        - action_delayed=time:1300ms action:{velocity vector:0,1,0}
        - action_delayed=time:1550ms action:{velocity vector:0,0.3,-0.1}
        - action_delayed=time:1600ms action:{velocity vector:0,0.3,-0.1}
        - action_delayed=time:1650ms action:{velocity vector:0,0.3,-0.1}
        - action_delayed=time:1700ms action:{velocity vector:0,0.6,-0.6}
        - action_delayed=time:1700ms action:{execute activator:LavaForest1Mob player:null}
        reactions: []
    
    Если вызывать моба напрямую из LavaForest1, то всё норм. Что не так?
    UPD:
    Нельзя юзать player:null, поставил all - заработало.
    Не дропается чаренный меч :(
    - mob_spawn=type:zombie num:1 loc:LavaForest1 potion:SPEED:1,JUMP:2 drop:§6Меч_правосудия$283:15*1,Knockback,DAMAGE_ALL:2 health:50 dmg:0.1 helm:310 weapon:264 name:&4&k|&cСатана&4&k|
    Ась? :D
    [ReActions] Warning! VELOCITY_JUMP action is under construction. In next version of plugin it could be changed, renamed or removed!
    Если в моба попадает снаряд, то это же событие? А если это событие, то почему бы к нему не привязать действия? И первым, наверно, будет изменение моба. Т.е. деспавн того, в которого попали, и спавн нового. Интересно бы вышло.
    А как насчёт интегрирования Jobs? Т.е. считывание, сравнение, изменение переменных опыта\уровней jobs. Можно было бы намного расширить спектр профессий.
    @fromgate
    Вы ещё с нами? :)
    Рывок в локацию нужен как никогда :D
     
    Последнее редактирование: 29 сен 2014
  9. olegikoligik

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

    Баллы:
    88
    А я просто хотел бы напомнить про активаторы ITEM_DROP и ITEM_PICKUP, так как тоже нужны как никогда.
     
  10. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Клик по игроку в виде флага и активатора... Возможно ли?
    Активатор в виде блока, по которому кликнули?
    А, да, я не сказал, в чём соль переменных ReActions? Их нельзя изменять из КБ :)
     
  11. mishkagrishka

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

    Баллы:
    78
    Ребят, есть переменная (пользовательская) test, можно ли ее передать в базу данных на сайте?
    Я видел есть какой-то функционал для работы с БД, но так и не понял.
    Например, сделать Top игроков по PvP на сайте.
    И да, можно ли реализовать топ игроков по PvP в самой игре, это тоже вопрос.
    Допустим, Вася имеет скилл 5, Петя 6, а Олег -10.
    Можно ли вывести топ по команде /pvp?
    @fromgate
     
  12. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Вопрос насчёт таймеров:
    Мне нужно сделать асинхронный таймер. Например:
    Есть два активатора EXEC, которые должны запускаться каждые пять и одну минуту. Будет ли совпадать запуск второго активатора с пятым после четырёх минут? И как этого избежать? (Да, можно разделить на тип SERVER и InGame. Тогда, может быть, будет асинхронность. Но если активаторов больше и нужно, чтобы ни один не совпадал с другим?)
     
  13. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Поддержка MySQL есть. При желании можно и топ-пвп сделать и многое другое. На одном сервере фиксировались всякие достижения игроков, выводилась ситуация о фракциях (мир/война) и т.п.

    Ну можно сделать проще ;) Вам нужно чтобы время выполнения таймера было произвольным и слабопредсказуемым? Добавьте в активатор флаг CHANCE (параметр - вероятность, число).


    P.S. Все предложения по новым активаторам я "записываю". Рано или поздно что-то добавится ;)
     
  14. mishkagrishka

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

    Баллы:
    78
    Я поразбираюсь на досуге с mysql (пока все-равно у меня это не приоритет), но хотелось бы видеть какой-то рабочий пример (например, с видео) :)
     
  15. Korvinius

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

    Баллы:
    88
    Оченеь плохо, что в плагине нельзя указывать различать или не различать регистр букв, это относится именно ко всем Delay-задержкам, которыми игрок с ником, например, Korvinius и KoRviniuS, воспринимаются как разные игроки и используя это, игроки могут обходить задержки (((
     
  16. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    1. Не работает arg1:* в command:
    Код:
      Firework:
        command: cmd:fw arg1:*
        flags: []
        actions:
        - cmd_op=firework %arg1%
        - CANCEL_EVENT=true
        reactions: []
    
    Срабатывает только при /fw arg1:*
    2. Не работает FLAG_SET:
    Код:
      Test:
        command: cmd:test
        flags:
        - FLAG_SET=GROUP=Moderator GROUP=Player
        actions:
        - CANCEL_EVENT=true
        - message=player:%player% Test
        reactions:
        - message=player:%player% :(
    В группе модератора или игрока выполняется противодействие.
    3. Не дропается чаренный меч
    Код:
    - mob_spawn=type:zombie num:1 loc:LavaForest1 potion:SPEED:1,JUMP:2 drop:§6Меч_правосудия$283:15*1,Knockback,DAMAGE_ALL:2 health:50 dmg:0.1 helm:310 weapon:264 name:&4&k|&cСатана&4&k|
    4. Вопрос: при указании региона во флагах, как определяется мир? Ведь, в разных мирах могут быть регионы с одинаковыми именами. А в конфиге, вроде, нет ссылок на разные миры.
    5. Можно ли в активаторе message поставить флаг REGION, чтобы активатор срабатывал только, если игроку послано сообщение в том регионе (и, соответственно, его убирать только в этом регионе)?
    6. Будет ли возможность в качестве активатора использовать аргументы, которые вводит игрок или которые ему выводятся (command, message)? То есть, например, игроку пишет: "В два ночи Lyosha12 телепортировался...". Можно ли будет из этого вытащить ник и использовать его в действиях? Например так: ".* .* .* %getplayer% .*"
    7. Как можно прервать action_delayed? То есть, как можно прервать выполнение действий активатора (то бишь саму работу активатора)? (Не помешало бы и прерывать действия отдельно).
    8. Установить поиск текста по регулярным выражениям можно. А можно ли ссылаться на текст по регулярным выражениям? Например, я придумал небольшую идейку: игрок, выполняя действие, создаёт несколько активаторов с динамическим именем "Activator%player%". (cmd_op=ra add ActivatorType Activator%player% данные)

    А если мне надо удалить этот активатор с динамическим именем? При чём, этот активатор может запускать и другой игрок, который к предыдущему не имеет ни какого отношения. Как насчёт использования регулярных выражений в действиях? Например:
    Код:
    ITEM_CLICK:
      ActivatorDelete:
        item: '339'
        flags: []
        actions:
        - cmd_op=text-type:REGEX action:{ra remove activator Activator.* (или как там ссылаться на любую последовательность букв в середине слова?)}
        reactions: []

    9. Где применяется рандом, кроме как в выдаче предметов и флаге? Как можно реализовать рандомизацию событий? Например, есть несколько десятков кнопок, которые при нажатии на них запускают действие, которое, в свою очередь, активирует один и только один из нескольких десятков активаторов для игрока, который нажал кнопку.

    Как можно такое сделать? Мой план:
    Для каждого вызываемого EXECUTE с флагом CHANCE ставить персональную задержку. И, если хоть один активатор сработает, то задержка установится на весь вагон событий, которые вызывает одна кнопка.

    Тут я вижу несколько проблем. Во-первых, для каждой кнопки придётся создавать перечень исполняемых активаторов. С другой стороны, можно ссылаться на общий EXEC, но как тогда из этого общего EXEC передать %player% другим EXEC? Я пробовал сделать на этом цикл, вызывая первый EXEC из второго и наоборот, но ничего не вышло. Значит, это так не работает?

    Во-вторых, какая задержка нужна? За какое время плагин выполнит, допустим, 50 активаторов? Если установить маленькую, то по истечении этого времени самый последний активатор может запуститься, заставив сработать систему дважды ._.

    С другой стороны, если поставить более большую персональную задержку, то, при быстром нажатии трёх кнопок, одна или две могут не сработать вовсе. Так же я заметил, что действия в активаторах выполняются тоже последовательно, а, значит, на это тоже тратится время.

    Так вот, как сделать оптимальный вариант или же для этого будет придуман отдельный флаг\действие, который запускает рандомно только одно действие из всех в активаторе?

    Нет времени даже на переписку в форумах, @fromgate :) ?
     
    Последнее редактирование: 10 окт 2014
  17. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Lyosha12
    Сейчас действительно нет времени. Форум читаю с телефона во время ужина или завтрака. Постараюсь на выходных осмыслить и ответить
     
  18. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    10. Как насчёт активатора, который срабатывает при присутствии другого игрока\игроков в радиусе от третьего игрока, где всем игрокам заданы флаги\переменные? Например:
    Хочу я сделать мини-игру на подобии гонок с боссом в NFS Carbon. Очки будут начисляться по времени нахождения одного игрока рядом с другим.

    Игрок находится рядом с другим в трёх блоках от него: ему выдаётся переменная, которую увеличивает заранее созданный таймер на три единицы каждую одну секунду. Игрок находится рядом с другим в десяти блоках от другого - ему начисляется по той же схеме уже два очка. И, наконец, если он в пятнадцати блоках от него, то начисляется одно очко каждую секунду.

    Это похоже на активатор "region" и "rgleave". При приближении одного игрока к другому, первый входит в динамическую зону вокруг другого игрока. При этом ему постоянно выдаётся переменная, которая говорит о том, что он в пяти блоках от соперника. Если он выходит из радиуса в пять блоков, то первая переменная снимается и устанавливается другая, которая говорит о том, что он в десяти блоках от него.

    Если же это будет флаг, то, кроме радиуса, нужно ещё попытаться указать любые другие возможные флаги (а-ля флаг в флаге).
    Например:
    Код:
       flags:
       - RadiusPlayer=r:5 flags:{...}
    Примерно то же, что и с FLAG_SET.

    Добавите когда-нибудь такие "динамические" активаторы\флаги?

    P.S. Можно было бы указывать и радиус относительно точки\игрока. Тогда так:
    Код:
       flags:
       - Radius=type-radius:<PLAYER|BLOCK> block:%here%(к примеру) r:<n> flags:{[...]}
    P.P.S
    Можно было бы добавить и точку, на которую должен смотреть игрок. Например: если указана локация, то место, куда должен смотреть игрок, будет в виде трёх блоков с локацей точки отсчёта в центре. С игроком тоже можно поступить аналогично, только уже нужно смотреть чётко на блоки тела другого игрока. Тогда флаг будет выглядеть так:
    Код:
       flags:
       - Radius=type-radius:<PLAYER|BLOCK> block:%here%(к примеру) kick:[true] r:<n> flags:{[...]}

    11. Как насчёт функции сохранения инвентаря, как во многих плагинах? Например:
    Действием "SaveInv=%player%/NameSave" инвентарь будет сохранён в БД.
    А действием "GiveInv=%player%/NameSave" инвентарь будет выдан игроку в те же слоты, где и был.
    Просто, но чертовски экономит время :)
    12. Желательно, чтобы при написании в сообщении %delay% показывалось оставшееся время в таком формате: "MM:SS", чтобы можно было написать "...осталось %delay% мин.". (Муторно возиться с окончаниями :) )
    13. Насчёт WALK_BLOCK. Можно стоять на одном блоке (на его краю), а флаг будет считать, что игрок стоит на воздухе. Можно ли расширить зону проверки?
    14. Насчёт действия уменьшения прочности предметам. Нужно, чтобы можно было уменьшать прочность не только тем, что в руке. То есть, чтобы можно было нацелиться на весь инвентарь (и броню) по имени предмета.
    15. Не получается сослаться на конкретное количество игроков в регионе (1):
    Код:
      TNTRunFinish1Area1:
        region: tntrunfilterwinarea1-1
        flags:
        - '!REGION_PLAYERS=tntrunarea1/2'
        actions:
        - message=player:%player% &6[&cTNT&e-&4Run&6] &3Вы заняли первое место!
        reactions: []
    
    Если указывать только
    - '!REGION_PLAYERS=tntrunarea1/2'
    То работает, а вместе с
    - REGION_PLAYERS=tntrunarea1/2
    - Нет. И вообще, что за дьявольская система? Если я говорю, что хочу проверять количество игроков меньше или равно одному, то почему я должен писать как '!REGION_PLAYERS=tntrunarea1/2'? Логика? Или логика в том, что эта проверка работает как "от n, не включая, n"?

    Если я буду делать так:
    Код:
      TNTRunFinish1Area1:
        region: tntrunfilterwinarea1-1
        flags:
        - '!REGION_PLAYERS=tntrunarea1/2'
        - REGION_PLAYERS=tntrunarea1/1
        actions:
        - message=player:%player% &6[&cTNT&e-&4Run&6] &3Вы заняли первое место!
        reactions: []
    
    То после исправления ошибки(?) будет считаться, как "от одного игрока до двух включительно"?
    @fromgate ну отвечайте хоть по кусочкам. Иногда реально проблемы и приходится делать костыли :(
    16. Можно ли сделать флаг, который проверяет, стоит ли игрок на месте (одном блоке) заданное количество времени?
    17. Есть вариант разделить action_delayed на 2 типа: первый будет сбрасываться при выходе игрока из игры, а второй будет работать не зависимо от выхода игрока, к которому привязан action_delayed, из игры.
    18. Плагин ScLoad не работает, если указать в качестве отправной точки не загруженный (не прогруженный чанк). Воспроизводится только один блок из всей схемы. Можно ли обновить плагин и загружать\прогружать чанки вместе со schematick'ом? Ну нет возможности держать игроков рядом с постройкой, которая должна регениться :(
    19. Что такое "join-state: ANY"? Об этом вообще ни где не написано о_О
    Код:
    JOIN:
      TNTRunConnectInArea1:
        join-state: ANY
        flags: []
        actions: []
        reactions: []
    

    20. Проблема. При включённом ReActions TPS падает с 19 до 15. Может, из-за большого количества активаторов типа REGION?
    Проблема была в двух действиях:
    - region_clear=region:tnt2 type:all
    - region_clear=region:tnt1 type:all
    Перевёл в таймер - TPS 18
    21. Добавьте локальный дебаг-режим: /ra ldebug activator true\false\off [a|b]
    a - переключить debug-режим
    b - одноразовый debug-режим (активировал и off автоматом ставится)
    22. Как определить "первого игрока" и "последнего игрока" (центрального? третьего? предпоследнего?) из n-го количества игроков (в регионе), которые по очереди запускают активатор "финиша"? Получается, надо добавлять к личной переменной значение глобальной переменной при каждом исполнении активатора "финиша" и сравнивать личную переменную с количеством игроков в регионе... Но, я так понимаю, что такое не возможно провернуть?
     
    Последнее редактирование: 14 окт 2014
  19. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    По поводу активаторов и новых функций. Сейчас вряд ли я буду добавлять или модифицировать какие-то активаторы. Дело в том, что назрела необходимость во внутренней переделке классов, касающихся активаторов и обработки событий. Не знаю приведет ли это ко внешним изменениям (команды, файлы сохранения)... Наверное приведет. Возможно будет промежуточная версия с мелкими правками, но не обещаю.


    Странно. Сейчас попробовал:
    Код:
      tcmd:
      command: cmd:tcmd arg1:*
      flags: []
      actions:
      - message=tcmd %arg1%
      reactions: []
    
    Работает как надо.


    Знак равно ставится в первом случае. Дальше разделитель - двоеточие. Уж извините ;)
    Код:
      flags:
      - FLAG_SET=item_inventory:368 item_inventory:381
    
    Перед энчантами надо поставить "@". По моему так.

    Код:
    - mob_spawn=type:zombie num:1 loc:LavaForest1 potion:SPEED:1,JUMP:2 drop:§6Меч_правосудия$283:15*1@Knockback,DAMAGE_ALL:2 health:50 dmg:0.1 helm:310 weapon:264 name:&4&k|&cСатана&4&k|

    Это моя природная лень. Использует только имя. Мир - значение не имеет. Соответственно, первый найденный регион с этим именем ;) Если у Вас несколько миров, то чтобы все работало нормально, придётся не использовать одинаковые имена для регионов. Возможно в будущем, я это как-то учту.

    Можно. Активатор может сработать для всех игроков, но флаг REGION - соответственно определит игроков находящихся в определенном регионе.

    В command - это %arg1% ... %argN% в message - это %word1%.. %wordN%

    Действия/Реакции выполняются последовательно.
    Если говорить приментельно к активатору, то ACTION_DELAYED - это законченное действие, которое заключается в создании отложенной задачи. После него сразу же выполняется следующее действие, а вот отложенное действие - ждёт своего часа. Отключить его нельзя. Я подумаю что можно сделать, но пока в голову приходит только ещё одно действие, которое просто будет "отключать" все отложенные задачи для конкретного игрока.

    Слушайте, тут что-то всё так накручено. Я ничего не понял ;) Создание активаторов на лету - это... мне даже в голову не приходило ;) Мне кажется проще будет "включать/выключать" их создавая/удаляя переменную, наличие которой проверять флагом.

    Насчет случайного действия, я кстати давно думал. Были идеи насчет своеобразного мультиплексора (когда в зависимости от значения переменной может выполнять то или иное действие из набора). Честно говоря упёрся в синтаксис - это не должно усложнять существующую структуру.

    По поводу времени выполнения - всё будет выполняться за один тик. Отдельные действия - выполняются через тик. Насчет нагрузки, то если действия сами по себе не превышают пределы возможности сервера (к примеру не заливают весь сервер лавой), то нагрузка будет незаметна.
     
  20. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    @fromgate
    Спасибо за разъяснение флага "и". А то я уже насоздавал около ста активаторов xD
    Ждём-с продолжения беседы :)
     

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