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

Привет!
Вообщем, решил создать систему HP на ReActions, принцип прост, при получении урона это действие отменяется, а у переменной Health отнимается значение Damage. Работает как часы, но есть проблема. Отталкивание. А точнее - его отсутствие. Из-за отмены действия Bukkit не идёт урон, а следовательно - отталкивание. Это не удобно, кажется, будто ты завис...

Как мне лучше реализовать систему, что бы остался эффект отталкивания? P.S. Не предлагайте вернуться к системе майна + хил, ибо некоторые виды урона будут наносить Игроку и по 10К дамаги, что его просто шотнет, не успев отхилить..

UPD: Не могу понять, как работает активатор ACTION_DELAYED
Вот, для теста создал ACTION_DELAYED=time:3 action:{BROADCAST=321}, и ничего не выходит...
 
Последнее редактирование:
Как вариант - при выходе создать персональную переменную, а при входе - проверять на её наличие: если есть, то чистить инвентарь и удалять переменную
Можно просто при выходе отчищать инвентарь. Замечательно работает!
 
Как мне лучше реализовать систему, что бы остался эффект отталкивания? P.S. Не предлагайте вернуться к системе майна + хил, ибо некоторые виды урона будут наносить Игроку и по 10К дамаги, что его просто шотнет, не успев отхилить..

Эдак летом выкладывал тут вариант "искусственного" отталкивания для действия shoot(до введения официального). Может пригодится вам..? Делал это утром после бессонной ночи, но вроде работало.
Работает лишь на игроках. Вместо VelocityCheck подставить свой активатор. Настраивать силу отталкивания можно в действии REGEX - там, где *1, вместо единицы подставить нужно число; советую ставить где-нибудь на *0.5
Код:
EXEC:
  VelocityCheck:
    actions:
    - REGEX=input:{%player_loc%} regex:{[^,]+}
    - REGEX=input:{%calc:sin(toRadians(%group40%+90))*1%} regex:{[-]?.{1,5}} prefix:sin_
    - REGEX=input:{%calc:cos(toRadians(%group40%+90))*1%} regex:{[-]?.{1,5}} prefix:cos_
    - if_else=if:{(%sin_group00%>1)||(%sin_group00%<-1)} then:{0.0} else:{%sin_group00%} suffix:_sin
    - if_else=if:{(%cos_group00%>1)||(%cos_group00%<-1)} then:{0.0} else:{%cos_group00%} suffix:_cos
    - var_set=id:shoot value:{%ifelseresult_cos%,0.2,%ifelseresult_sin%}
    - shoot=distance:100 damage:0 run:{activator:VC2 playeronly:true}
  VC2:
    actions:
    - velocity=vector:%var:shoot% kick:false
______________________________

UPD: Не могу понять, как работает активатор ACTION_DELAYED
Вот, для теста создал ACTION_DELAYED=time:3 action:{BROADCAST=321}, и ничего не выходит...

В action:{} знак равно не требуется, т.е. action:{BROADCAST 321}
 
Эдак летом выкладывал тут вариант "искусственного" отталкивания для действия shoot(до введения официального). Может пригодится вам..? Делал это утром после бессонной ночи, но вроде работало.

______________________________



В action:{} знак равно не требуется, т.е. action:{BROADCAST 321}
Скрипт замечательно работает, но что делать с мобами?
С мобами не работает отталкивание
 
Скрипт замечательно работает, но что делать с мобами?
С мобами не работает отталкивание

Тут подумать надо.
Как вариант - при ударе спавнить какую-нибудь невидимую сущность с особым именем на точной локации моба, и от лица консоли писать
/minecraft:execute @e[type=ваниальный_тип,name=имя] ~ ~ ~ entitydata @e[r=0.1] {Motion:[%var:shoot%]}
а после удалять/убивать её.
Не уверен, что r поддерживает вещественные числа. Переменная shoot из того скрипта, наверняка вы уже заменили её чем-то другим.

Но я бы посоветовал уже переходить на Java-код. Скрипты для таких дел как куча маленьких костылей.
 
ребят подскажите как сделать активатор (когда предмет в руке (определенный) в количестве i>1)
 
Текущий девбилд зафиксирован в качестве новой версии.

v0.11.0
  • Добавлен активатор ITEM_HELD.
  • Добавлен активатор GOD.
  • Добавлен активатор GAME_MODE.
  • Добавлен активатор PICKUP_ITEM.
  • Добавлен активатор WE_CHANGE.
  • Добавлен активатор WE_SELECTION_REGION.
  • Добавлено действие SQL_SET.
  • Добавлено действие FLY.
  • Добавлено действие CHAT_MESSAGE.
  • Добавлено действие RADIUS_CLEAR.
  • Добавлено действие WE_SUPERPICKAXE.
  • Добавлено действие WE_TOOLCONTROL.
  • Добавлены новые флаги: WE_SUPERPICKAXE, WE_TOOLCONTROL, REGION_IN_RADIUS, SEL_BLOCKS, GREATER, LOWER.
  • Добавлен альтерантивный метод проверки координат при движении игрока (в отдельной задаче). По умолчанию - отключен. Подключить можно в config.yml; влияет на активаторы REGION_ENTER, REGION, REGION_LEAVE и действие BACK.
  • Изменение активатора INVENTORY_CLICK. Добавлена проверка номера слота. Добавлен плейсхолдер "item_amount" в инвентаре игрока.
  • Изменение активатора DOOR. Теперь он поддерживает все типы дверей (включая железные).
  • Изменение активатора PICKUP_ITEM
  • Изменение активатора DROP
  • Изменение активатора BLOCK_BREAK
  • Изменение действия MENU_ITEM. Добавлены временные переменные.
  • Изменение действия SHOOT. Добавлено отталкивание цели.
  • Изменение действия MOB_SPAWN. Поддержка нескольких пассажиров.
  • Изменение действия MOB_DAMAGE. Добавлен новый тип урона PotionSplash.
  • Изменился сервис статистки с McStats на bStats.
  • Исправлена ошибка из-за которой клики правой кнопкой мыши учитывались дважды в версиях 1.9 и новее.
  • Исправлена ошибка из-за которой, если в переменной были символы $ или \ они заменялись на \$ и \\.
  • Много мелких правок и отпимизаций.

Скачать можно тут
Кстати, возможно пора добавить в ваш плагин, действия связанные с рыбалкой, чтобы было проще создавать квесты с рыбалкой, или какие-нибудь фичи. Отслеживание количества выловленной рыбы и т.д.
 
ребят подскажите как сделать активатор (когда предмет в руке (определенный) в количестве i>1)
Не уверен, что вам нужно, но вот пример разных активаторов с проверкой на наличие в руке двух и более костей
Код:
EXEC:
  Item1:
    flags:
    - item=type:bone amount:2
    actions:
    - message=Ого, у вас более одной кости в руке!
    reactions:
    - message=Увы, вам требуется больше одной кости
ITEM_CLICK:
  Item2:
    item: type:bone amount:2
    actions:
    - message=Вы кликнули костями!
ITEM_HOLD:
  Item3:
    item: type:bone amount:2
    actions:
    - message=Вы держите две или более костей!
 
Не уверен, что вам нужно, но вот пример разных активаторов с проверкой на наличие в руке двух и более костей
Код:
EXEC:
  Item1:
    flags:
    - item=type:bone amount:2
    actions:
    - message=Ого, у вас более одной кости в руке!
    reactions:
    - message=Увы, вам требуется больше одной кости
ITEM_CLICK:
  Item2:
    item: type:bone amount:2
    actions:
    - message=Вы кликнули костями!
ITEM_HOLD:
  Item3:
    item: type:bone amount:2
    actions:
    - message=Вы держите две или более костей!
более мение то что нужно , у меня мод баганый , скажем так кейсы , и они стакуются когда выдаешь их черех essentials kit , они лежат стопкой в инвенторе , и если открыть кейс пака они в стопке то они все станут не валидными ...... ,хочу сделать предупреждение игроков если у них больше 1 кейса в руке
 
UPD: добавить вариацию активаторта с количеством предмета и логическими операторами<=>
 
Баг1: В действии "if_else" условие "if" переносит регулярное выражение в нижний регистр, из-за чего невозможно использовать, например, "\S"(можно заменить на "[^\s]", но как-то это грустно).
Баг2: В действии "power_set" не работает "power:toggle", к тому же действие полностью не работает с новыми дверьми.
 
Призываются БОГИ условий, есть команда и на нее два флага, проверка группы и проверка денег. Как сделать это через if_else? Если человек не входит в группу, то он может не платить за команду, если он в группе и у него есть н-ая сумма то команда выполняется. Как я понимаю if_else с флагами не работает?
 
Призываются БОГИ условий, есть команда и на нее два флага, проверка группы и проверка денег. Как сделать это через if_else? Если человек не входит в группу, то он может не платить за команду, если он в группе и у него есть н-ая сумма то команда выполняется. Как я понимаю if_else с флагами не работает?
Вроде как - работает, но там надо в flags флаг указывать.
Вообщем - не знаю.
Попробуй использовать сторонний активатор EXEC с заданными флагами.
- EXECUTE=activator:FLAG_MONEY
 
@fromgate Конфликт с Креатив Контролем:
Код:
Could not pass event EntityDamageByEntityEvent to CreativeControlByKubqoA v2.2.3
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[survival.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[survival.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) ~[survival.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) ~[survival.jar:git-Spigot-21fe707-e1ebe52]
        at me.fromgate.reactions.util.GodMode.setEventGod(GodMode.java:88) ~[?:?]
        at java.lang.Iterable.forEach(Iterable.java:75) [?:1.8.0_151]
        at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080) [?:1.8.0_151]
        at me.fromgate.reactions.util.GodMode$1.run(GodMode.java:29) [ReActions.jar:?]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) [survival.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [survival.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:723) [survival.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [survival.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [survival.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [survival.jar:git-Spigot-21fe707-e1ebe52]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
Caused by: java.lang.NullPointerException
 
Призываются БОГИ условий, есть команда и на нее два флага, проверка группы и проверка денег. Как сделать это через if_else? Если человек не входит в группу, то он может не платить за команду, если он в группе и у него есть н-ая сумма то команда выполняется. Как я понимаю if_else с флагами не работает?
Примерно так, наверно? Подробнее о IF_ELSE
Код:
COMMAND:
  ICanPayMoney:
    override: false
    regex: false
    command: paymoney
    flags:
    - group=dontpay
    actions:
    - message=&aДля вас эта комманда &f&nабсолютно&a бесплатна!
    reactions:
    - if_else=if:{%money%>500} then:run:actions:{action1:{money_pay=500} action2:{message=&aВы успешно заплатили &f&n$500&a за целое ничего!}} else:run:actions:{action1:{message=&cУ вас недостаточно валюты!}}
Иначе, как и советовали выше, использовать дополнительный активатор и плейсхолдер %group_flag%, но на мой взгляд, это лишнее.
 
@fromgate добавьте в плагин, пожалуйста, следующее:
1) Постоянный плейсхолдер %PLAYER_REGION% - название региона и мира (мир.регион), в котором находится игрок. Необходимо для проверки различных флагов (worldguard) текущего региона во флаге REGION_STATE или для выхода в глобальный регион (из любого региона worldguard). Например:
/ra add 123 f region_state %PLAYER_REGION%.pvp.allow
или
/ra add 123 f flag_set region_state:%PLAYER_REGION%.pvp.allow region_state:%PLAYER_REGION%.pvp.none
Можно было бы добавить отдельно %player_region% и %player_world%, но практически везде используется "мир.регион", так что не вижу в этом смысла.
2) Активатор WORLD_SWITCH [ActivatorId] [мир] . Будет очень полезная функция. Например для запрета телепортации к игроку в определенном мире:
/ra add WORLD_SWITCH 234 world2
/ra add 234 WORLD_SWITCH f !group player
/ra add 234 a cmd_console spawn %player%
3) Действия TITLE и ACTIONBAR для вывода текста на полный экран и в панель быстрого доступа (если это возможно)
 
Назад
Верх