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

Помогите Требуется помощь знающих людей

Serrrgio

Старожил
Пользователь
Баллы
173
Имя в Minecraft
None
Это будет моя тема, где я буду задавать всякие глупые вопросы.

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

Подскажите, как проверить строку чата на наличае в ней ника игрока, который онлайн?
Спс.
 
Подскажите, как проверить строку чата на наличае в ней ника игрока, который онлайн?
Идея и вправду интересная, и полезная! Жаль, что ты это уже собрался делать.
Ловишь евент отправки сообщения игроком в чат. Берёшь сообщение, и пишешь:
Java:
for(Player p : Bukkit.getOnlinePlayers())
{
    if(message.toLowerCase().contains(p.getName().toLowerCase()))
     //Проигрываешь звук.
}
Писал без IDE, могут быть ошибки, но смысл понятен.
 
ну вот так получилось
Java:
@EventHandler() public void onPayerChat(AsyncPlayerChatEvent e) {
if (e.isCancelled() || e.getPlayer() == null) {
return;
}
String message=e.getMessage();
for(Player p : Bukkit.getOnlinePlayers()) {
if(message.toLowerCase().contains(p.getName().toLowerCase())) {
p.playSound(p.getLocation(), Sound.NOTE_PLING, 3.0F, 0.5F);
}
}
}

кто может прояснить по volume, pitch, какие значения могут принимать, и что такое pitch?

может какой-то другой звук поставить? посоветуйте.
 
#OFFTOP
173 бальный старожил и глупые вопросы. А такое бывает?
 
Еще вопрос.

Есть небольшой паркур на сервере, хотелось бы сделать так, чтобы игроки, которые упали, автоматом телепортировались на старт.
Я вижу 2 варианта:
1. тупо, в onPlayerMove проверять координаты игрока на соответствие координатам полигона (к примеру облась 20х40х1);
2. использовать ивент onRegionEnter WG (всеравно плагин установлен)
и при положительной проверке, телепортировать игрока на старт.

Первый вариант больше кода (всякие проверки, на мир, координаты, игрока и т.д.), во втором меньше кода.
Может есть еще какие варианты?
Из предложенных мной, какой будет менее нагружать сервер?
 
Еще вопрос.

Есть небольшой паркур на сервере, хотелось бы сделать так, чтобы игроки, которые упали, автоматом телепортировались на старт.
Я вижу 2 варианта:
1. тупо, в onPlayerMove проверять координаты игрока на соответствие координатам полигона (к примеру облась 20х40х1);
2. использовать ивент onRegionEnter WG (всеравно плагин установлен)
и при положительной проверке, телепортировать игрока на старт.

Первый вариант больше кода (всякие проверки, на мир, координаты, игрока и т.д.), во втором меньше кода.
Может есть еще какие варианты?
Из предложенных мной, какой будет менее нагружать сервер?
Если в WG шедулер отключен, то 1 и 2 пункты по сути равнозначны, нагрузка будет зависеть от реализации.
 
Еще вопрос.

Есть небольшой паркур на сервере, хотелось бы сделать так, чтобы игроки, которые упали, автоматом телепортировались на старт.

Бери сразу EnityDamageEvent и проверяй у него DamageCause
Если игрок упал в пустоту - он будет VOID
Если просто больно стукнулся об пол - FALL
А уже после этого проверяй, находится ли игрок на территории паркур-арены. Если да - телепортируй на ближайший нужный чекпойнт.

Этот вариант будет иметь минимальную нагрузку на сервер.
Хотя в обоих твоих вариантах нагрузка небольшая и допустима.

UPD:
Забыл сказать, что первым делом нужно проверить - вообще игрок ли это.
Но это мелочи, догадаться не сложно.
 
Может я не правильно думаю, но ивент в WG все равно вызывается, при этом мне нужно будет проверить лишь имя региона, этого будет достаточно, не нужно делать проверку игрок это или нет, проверку на координаты (игрок уже попал в регион по нужным координатам проверку тот это мир или нет и т.д.), к тому же этот ивент будет вызываться намного реже чем onPlayerMove, следовательно мой код (который скорей всего будет кривоват) будет работать реже и меньше грузить сервер.

С EnityDamageEvent не совсем понял, ивент будет вызываться если игрок падает в любом случае? например игрок упал с высоты 1 блок, вызов EnityDamageEvent произойдет?
вот такой паркур
2015-06-26_21.18.20.png
 
Последнее редактирование:
С EnityDamageEvent не совсем понял, ивент будет вызываться если игрок падает в любом случае? например игрок упал с высоты 1 блок, вызов EnityDamageEvent произойдет?
Нет. Это событие произойдет, только если игрок получает урон (или должен получить). Высота должна быть больше трех блоков. Вариант с водой в этом случае тоже не подойдет, т.к. игрок не получает урон. Для такой карты действительно подойдут события WG (хотя они сами основаны на PlayerMoveEvent)
 
Идея и вправду интересная, и полезная! Жаль, что ты это уже собрался делать.

Ну и бери и делай ;) Правда идея не новая, я таких плагинов несколько штук видел.

@Serrrgio
Лучше создавай под каждый вопрос несколько тем - и называй правильно, чтобы было понятно о чем речь. Через месяц придёт товарищ с такими же вопросами по поиску ничего не найдёт и будет делать ещё одну тему для собственного обучения ;)
 
Можете посмотреть на то, как это сделано у меня, и немного скопипастить, при необходимости.
MovingPlayersCatcher
RegionUpdateObserver
BukkitRegionProviders
Может быть, и не лучшей решение из возможных, но работает, и сервер не нагружает.
 
@fromgate, ок, приму к сведению

@Reality_SC, спасибо, посмотрю

вдогонку еще простой вопрос, как в конфиге задать координаты блока, и потом получить в плагине?
на ум приходит только одно, задать строкой и потом спилить по пробелу, типа
Код:
parkour_start_pos: 500 65 2350
какие еще есть варианты?
 

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

Назад
Верх