Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Выполнение действия при нахождении рядом с игроком

Тема в разделе "Разработка плагинов для новичков", создана пользователем AlexGL, 13 ноя 2013.

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

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Здравствуйте,
    есть ли возможность выполнять какие-либо действия(в моем случае с скоарбордом), если один игрок находится рядом с другим?
    Спасибо.
     
  2. Хостинг MineCraft
    <
  3. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    PlayerMoveEvent грузный эвент, лучше шедулером.
     
    skynetxxx и DPOH-VAR нравится это.
  4. Автор темы
    AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Спасибо.
    А можно как нибудь заставить плагин оставить труп на арене до того времени, когда не закончится игра.
    Я вижу это так: при смерти игрока проверяем блоки, где есть два ближайших блока на одном уровне, там создаем копию труппа игрока и нагло врем пакетами, что игрок лежит на кровати. Но есть 2 нюанса: 1)если подойти к игроку, то будет ли выполняться действие(название темы), 2)если игрок выйдет в лобби, а хуже вообще из сервера, то как будет себя вести плагин?
     
    slavik123123123 нравится это.
  5. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Предположим, что мы таки нагло врем пакетами. Сам игрок мертв, а ближайшим игрокам сообщаем, что он жив, и мало того - лежит в кровати. При этом у клиента не активна кнопка "респавн".
    Тогда а чедулере можно сравнивать Location. Если игрок рядом (хоть и мертвый) - что-то исполнять.
    Только загвоздка: нужно сканировать всех getOnlinePlayers(), а не юзать getNearbyEntities();
    В лобби игрок не выйдет - просто не может.
    Если игрок ливнет - тогда ливнет и его труп. Пакеты о лежачем игроке нужно прекратить отсылать.
     
  6. Автор темы
    AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Какое тогда решение?
     
  7. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Можно. Но два игрока с одинаковыми именами на одном сервере порождают огромное число глюков.
    Да и нужно ли?
    Смотря что тебе нужно.

    Предположим, что игрок после смерти должет лежать на земле X секунд. А после этого респавниться. При этом будет модель, лежащая в кровати. И постоянно для ближайших игроков будет происходить некоторое действие.

    При смерти игрока создавай некий НекроХандлер с таймером, который будет раз в N тиков отправлять ложные пакеты игрокам. При этом этот же хандлер будет делать то, что тебе нужно с ближайшими игроками.
    И естественно, у мертвого игрока не должно быть возможности респавниться (отключай кнопку).
    И еще в этом хандлере зарегистрируй событие отключения игрока.
    Как только игрок отключился - завершай работу хандлера.
    Как только работа хандлера завершилась (по любой причине) - снимай регистрацию с события дисконнекта игрока, останавливай таймер ( который срет пакетами) и если нужно - делай респавн игрока.

    ПС: отключить кнопку респавна можно путем изменения жизни на положительное число через несколько тиков после смерти.
    ППС: принудительный респавн делается путем отправки в обратную сторону пакета Packet205ClientCommand с параметром a=1.
     
  8. Автор темы
    AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Мне нужно, чтобы игрок не деспаунился, а просто его труп находился на арене до конца миниигры, но при приближении к нему на n блоков должно происходить действие(например, у мертвого игрока в скорборде было указано какое-то число, при приближении живого игрока, это число у мертвого меняется на 0 и прибавляется к числу в скорборде живого.
     
  9. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Что в это время видит мертвый игрок?
    - Кнопочки [Respawn] [Title Screen]
    - Или же он возрождается и бегает как призрак?
    Как сделать первый вариант я сказал. Со вторым - чуть по другому, но не на много сложнее.

    ПС: если после смерти через 21 тик поставить игроку >1 hp, он не сможет респавниться.
     
  10. Автор темы
    AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Возможность бегать как призрак, хотел сразу написать, но пока писал, вылетело из головы.
     
  11. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Тогда чуточку изменится алгоритм, но суть та же. Позже отпишу.
     
  12. Автор темы
    AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Спасибо.
     
  13. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Без ProtocolLib теперь не обойтись. http://dev.bukkit.org/bukkit-plugins/protocollib/pages/tutorial/
    Можно попробовать такой вариант:
    Для игрока-призрака не принимать пакеты о перемещении. Т.е. он движется по карте, но по факту - лежит на месте.
    Будет 2 возможных исхода:
    - либо игрок будет периодически возвращаться к своему лежачему телу (это придется фиксить)
    - либо он будет спокойно ходить неподалеку. Но не сможет взаимодействовать с блоками/энтитями и др. Выйти в лобби сможет только командой, которую можно перехватить и обработать.
     
  14. Автор темы
    AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Я еще упустил один момент: если в скорборде число у умершего изменится на 0, то игрок уже в лобби станет живым.
     
  15. DigitalMisha

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

    Баллы:
    58
    А не могли бы Вы поподробнее описать это все? Как блокировать пакеты о перемещении?
     
    DavidShabaev нравится это.

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