Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

AlexGL

Старожил
Пользователь
Баллы
123
Имя в Minecraft
_ALEVER
Здравствуйте,
есть ли возможность выполнять какие-либо действия(в моем случае с скоарбордом), если один игрок находится рядом с другим?
Спасибо.
 
Есть. Ловите PlayerMoveEvent, смотрите кто рядом и выполняете действия.
 
Спасибо.
А можно как нибудь заставить плагин оставить труп на арене до того времени, когда не закончится игра.
Я вижу это так: при смерти игрока проверяем блоки, где есть два ближайших блока на одном уровне, там создаем копию труппа игрока и нагло врем пакетами, что игрок лежит на кровати. Но есть 2 нюанса: 1)если подойти к игроку, то будет ли выполняться действие(название темы), 2)если игрок выйдет в лобби, а хуже вообще из сервера, то как будет себя вести плагин?
 
Спасибо.
А можно как нибудь заставить плагин оставить труп на арене до того времени, когда не закончится игра.
Я вижу это так: при смерти игрока проверяем блоки, где есть два ближайших блока на одном уровне, там создаем копию труппа игрока и нагло врем пакетами, что игрок лежит на кровати. Но есть 2 нюанса: 1)если подойти к игроку, то будет ли выполняться действие(название темы), 2)если игрок выйдет в лобби, а хуже вообще из сервера, то как будет себя вести плагин?
Предположим, что мы таки нагло врем пакетами. Сам игрок мертв, а ближайшим игрокам сообщаем, что он жив, и мало того - лежит в кровати. При этом у клиента не активна кнопка "респавн".
Тогда а чедулере можно сравнивать Location. Если игрок рядом (хоть и мертвый) - что-то исполнять.
Только загвоздка: нужно сканировать всех getOnlinePlayers(), а не юзать getNearbyEntities();
В лобби игрок не выйдет - просто не может.
Если игрок ливнет - тогда ливнет и его труп. Пакеты о лежачем игроке нужно прекратить отсылать.
 
DPOH-VAR, а если спавнить NPC (я правда никогда не интересовался как это делается) и манипулировать пакетами уже по его поводу?
 
DPOH-VAR, а если спавнить NPC (я правда никогда не интересовался как это делается) и манипулировать пакетами уже по его поводу?
Можно. Но два игрока с одинаковыми именами на одном сервере порождают огромное число глюков.
Да и нужно ли?
Какое тогда решение?
Смотря что тебе нужно.

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

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

ПС: отключить кнопку респавна можно путем изменения жизни на положительное число через несколько тиков после смерти.
ППС: принудительный респавн делается путем отправки в обратную сторону пакета Packet205ClientCommand с параметром a=1.
 
Мне нужно, чтобы игрок не деспаунился, а просто его труп находился на арене до конца миниигры, но при приближении к нему на n блоков должно происходить действие(например, у мертвого игрока в скорборде было указано какое-то число, при приближении живого игрока, это число у мертвого меняется на 0 и прибавляется к числу в скорборде живого.
 
Мне нужно, чтобы игрок не деспаунился, а просто его труп находился на арене до конца миниигры, но при приближении к нему на n блоков должно происходить действие(например, у мертвого игрока в скорборде было указано какое-то число, при приближении живого игрока, это число у мертвого меняется на 0 и прибавляется к числу в скорборде живого.
Что в это время видит мертвый игрок?
- Кнопочки [Respawn] [Title Screen]
- Или же он возрождается и бегает как призрак?
Как сделать первый вариант я сказал. Со вторым - чуть по другому, но не на много сложнее.

ПС: если после смерти через 21 тик поставить игроку >1 hp, он не сможет респавниться.
 
Без ProtocolLib теперь не обойтись. http://dev.bukkit.org/bukkit-plugins/protocollib/pages/tutorial/
Можно попробовать такой вариант:
Для игрока-призрака не принимать пакеты о перемещении. Т.е. он движется по карте, но по факту - лежит на месте.
Будет 2 возможных исхода:
- либо игрок будет периодически возвращаться к своему лежачему телу (это придется фиксить)
- либо он будет спокойно ходить неподалеку. Но не сможет взаимодействовать с блоками/энтитями и др. Выйти в лобби сможет только командой, которую можно перехватить и обработать.
 
Я еще упустил один момент: если в скорборде число у умершего изменится на 0, то игрок уже в лобби станет живым.
 
Без ProtocolLib теперь не обойтись. http://dev.bukkit.org/bukkit-plugins/protocollib/pages/tutorial/
Можно попробовать такой вариант:
Для игрока-призрака не принимать пакеты о перемещении. Т.е. он движется по карте, но по факту - лежит на месте.
Будет 2 возможных исхода:
- либо игрок будет периодически возвращаться к своему лежачему телу (это придется фиксить)
- либо он будет спокойно ходить неподалеку. Но не сможет взаимодействовать с блоками/энтитями и др. Выйти в лобби сможет только командой, которую можно перехватить и обработать.
А не могли бы Вы поподробнее описать это все? Как блокировать пакеты о перемещении?
 

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

Назад
Верх