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

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

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

  1. Astrogen

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

    Баллы:
    76
    Имя в Minecraft:
    Astrogen
    Что такое commsnd? И с кириллическим названием - не знаю как пройдёт.
     
  2. snr93

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

    Баллы:
    88
    Хотелось бы узнать, можно ли считать, какой игрок нанес максимальное кол-во урона мобу?
    Допустим у меня есть босс, и тому, кто нанес больше всего урона хочу выдавать дополнительную плюшку.
    Нашел только %damage%, но он запоминает только какой урон нанесен был сейчас, а не общий. Немогу представить к это реализовать
     
    Последнее редактирование: 12 янв 2016
  3. Astrogen

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

    Баллы:
    76
    Имя в Minecraft:
    Astrogen
    ООО! Плюсуй дэмеджи для каждого игрока в персональных переменных, и я не уверен, что получится.
     
  4. snr93

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

    Баллы:
    88
    а можно пример на коленке хотя-бы?
     
  5. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    На коленке: при ударе игроком моба ( MOB_DAMAGE ) добавляйте к персональной переменной игрока ( Переменные ) значение, равное плейсхолдеру %damage%. Когда моб умрёт ( MOB_KILL ), Вы должны сравнить итоговый урон всех игроков. Как, если все персональные переменные закреплены за никами, но ников Вы не знаете?

    Это сложный вопрос, ведь мы имеем массив из имён и чисел, а к действиям с массивами ReActions не приучен.
    Если бы в имени переменной при сравнении можно было указывать регулярку, то всё сводилось бы к проверке значений в глобальных переменных каждого из игроков. Немножко псевдокода:
    Код:
    if (%var:MobDamage-%player%% >= %var:MobDamage-(?!%player%)\S+%)
    {
        // Если урон у игрока наивысший, выполняем то-то.
    }
    То есть, мы сравниваем урон конкретного игрока со всеми остальными с помощью глобальной переменной. Такое можно сделать и на ReActions, но вся проблема в отсутствии возможности указать имя переменной как регулярное выражение. @fromgate?

    Другой способ заключается в том, что мы уже знаем имена глобальных переменных. То есть, глобальным переменным присваиваются такие имена, чтобы их можно было прокрутить в цикле проверок у каждого игрока, для кого был запущен EXEC. Вот как я себе представляю алгоритм:

    Если игрок ударил моба, то ему в персональную переменную "Mob-Damage-Personal" будет занесено число. В глобальную переменную "Mob-1" будет занесено значение, равное имени игрока, если такая переменная уже не объявлена, и если она не содержит ожидаемого имени игрока. Если содержит (то есть, операция создания переменной "Mob-1" прошла, значение в ней Masha), то мы просто добавляем нанесённый урон в персональную переменную, а глобальную "Mob-1" не трогаем и ничего нового не создаём.

    Если моба ударил новый игрок, то мы проверяем, существует ли переменная "Mob-1" и равно ли значение в ней имени игрока. Если нет, то создаём переменную "Mob-2", в значении которой будет имя нового игрока. Самому же новому игроку Petya в личную переменную будет занесено значение нанесённого урона. (это ещё нужно в какой-нибудь цикл засунуть, чтобы имя переменной Mob-N увеличивалось правильно :p)

    Потом, когда моб умирает и мы запускаем EXEC для всех игроков в радиусе его смерти, этот EXEC должен запустить цикл, количество итераций которого будет равно количеству созданных переменных "Mob-N" . В цикле будет по очереди сравниваться урон, нанесённый игроком, для которого был выполнен активатор, с уроном других игроков в такой форме:
    Код:
        - VAR_PLAYER_GREATER=id:Mob-Damage-Personal value:%varp:%var:Mob-N%.Mob-Damage-Personal%
    Вот. Это, по-моему, реализовать возможно. Осталось подумать над циклами :)
     
    Последнее редактирование: 12 янв 2016
  6. snr93

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

    Баллы:
    88
    Я, пожалуй, подожду :D
    Может создатель плагина как-то это сделает в функционале, чтобы можно было считать урон)
     
  7. Danil007524

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

    Баллы:
    76
    @fromgate, Можно добавить к действию CALC(или сделать какое-либо другое) режим, который будет расставлять числа, которые мы напишем через запятую(или переменные), в порядке возрастания или убывания? А то пост от Lyosha12 немного пугает.
     
  8. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Лучше бы сделать реализацию массивов. А так же оператор foreach не помешал бы :)
    Прочитайте 10 раз и поймёте о чём речь. Важно знать, что активатор EXEC запускается для каждого игрока. Для КАЖДОГО. И у каждого игрока должен он вызывать цикл сравнения его переменной с другими. Как - я уже показал - обращением к личной переменной через точку.
    Ещё идея: можно создать метод, который принимает строку, в которой будут написаны ники игроков, которые являются глобальными переменными, значения в которых будут соответствовать величине нанесённого урона. Не в даваясь в детали сравнения, на выходе должна быть строка, которая содержит одно-единственное слово - ник-переменную с наибольшим значением. Вот тогда будет шик да блеск.
    А ведь действительно, @fromgate, если Вы не хотите реализовывать язык программирования на языке программирования, то почему бы не сделать больше методов, которые будут аналогами сложных систем? Например таких, как я описывал выше. Для сравнения одной переменной со списком других, да ещё и с навешанными никами, у Вас нет ни единого метода :(

    Кстати говоря, именно из-за наших самодельных систем может страдать производительность. Например, мы запускаем EXEC для всех игроков, но он начинает работать только с группой, которая соответствует установленным флагам. Если такое делать каждый тик - лаги обеспечены. Да что там лаги: я делал систему, которая работает сугубо с одним человеком, открывая перед его носом меню каждые 2 тика. И что Вы представляете? При онлайне в 400 сервер начинает подвисать, по словам заказчика. Так что, повторюсь, если Вы будете позволять реализовывать сложные системы и методы с помощью ReActions, а не Java, то плагин быстро заимеет ярлык второго редстоуна.
     
  9. Danil007524

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

    Баллы:
    76
    У себя в голове я имел в виду почти тоже самое. Тогда действительно будет
     
  10. Astrogen

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

    Баллы:
    76
    Имя в Minecraft:
    Astrogen
    Народ, аналогичных плагинов - нет, плагинов, которые по объему действий делают столько - единицы. Что там грешить-то - это уже шик-блеск. Конечно, можно придумать еще много всякого - в зависимости от того, у кого и как настроена голова и творческое начало (вес итемов, ограничение по переносимому весу, энергоемкость различного вида дров и чертову тучу приятных моментов), но вопрос - не загрузит ли оно сервак наглухо?
    И таки-да, уважаемый @fromgate, кроме пэйпэла придумайте какой-нибудь вариант благодарности, пожалуйста, а то у меня принципиально не переводятся рубли туда с карточки.
     
    Последнее редактирование: 12 янв 2016
  11. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Если мы будем реализовывать сложные системы, которые как остаточное явление косвенно работают и для тех, кто не участвует в конкретном событии, то чем больше таких систем будет - тем больше будет виснуть сервер.
     
  12. Astrogen

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

    Баллы:
    76
    Имя в Minecraft:
    Astrogen
    согласен. Поэтому учим Java :nerd:
     
  13. Korvinius

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

    Баллы:
    88
    А почему нет доступа к сайту? http://reactions.fromgate.ru
    @Lyosha12 не нужно забрасывать @fromgate тоннами идей, лучше просить реализовать API, тогда каждый сможет писать к плагину свои "дошлепки", соответственно своим личным извращениям :lol:
    прикольно) можно к этому еще добавить легкое, краткосрочное отравление, типа "несварение" желудка :)
     
  14. Astrogen

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

    Баллы:
    76
    Имя в Minecraft:
    Astrogen
    причем рандомно - процентов 10 от общего количества случаев. Я, кстати, наглухо запретил жрать мертвечину - это уж совсем рвотная тема.
    оффтоп.
    А вот плагин Thirst (жажда) - прекрасный по своей сути, почему-то у меня правильно работать не хочет. У тебя, кстати, ITEM_CLICK заработал?
     
  15. Korvinius

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

    Баллы:
    88
    пока забросил это безнадежное дело(
     
  16. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Korvinius
    В процессе переезда на другой хостинг. Ещё не всё перетащил. Сегодня запущу, надеюсь.
    reactions.fromgate.ru и reactions.fromgate.me заработали
     
  17. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Разве не проще выложить сюда код, а вся аудитория ReActions его бы проверила? Fromgate далеко не Цезарь - иначе бы ReActions уже заменил все плагины.
     
  18. ZombiE_EGIK

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

    Баллы:
    66
    Имя в Minecraft:
    ZombiE_EGIK
    Скиньте код. У меня активатор item_click работает нормально и стабильно с измененным у предмета именем и добавленным описанием. Внимательнее с регистрами.
    Вот как у меня в activators.yml
    Код:
    ITEM_CLICK:
      fly_berd:
        item: type:feather amount:1 name:{&6Перо птицы} lore:{&5Оно поможет вам летать!}
        flags:
        - ...
        - ...
        actions:
        - ...
     
    Последнее редактирование: 16 янв 2016
  19. Korvinius

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

    Баллы:
    88
    @Lyosha12, @ZombiE_EGIK спасибо за попытку помочь, не знаю каким образом, но свершилось чудо, то, что не работало вчера, само, заработало сегодня, УРРАААА!!! Теперь я могу обновить у себя ReActions :)

    Только еще один вопросик, как правильно написать активатор, тот же item_click, чтобы "ловил", например яблоки, не зависимо от названия, описания, зачарований и прочего?
     
  20. snr93

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

    Баллы:
    88
    А можно ли сделать так, чтобы щелкнуть по лампе пустой рукой, и она включится или выключится?
     

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