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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Serrrgio, 2 июн 2015.

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

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

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

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

    Подскажите, как проверить строку чата на наличае в ней ника игрока, который онлайн?
    Спс.
     
  2. Хостинг MineCraft
    <
  3. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Идея и вправду интересная, и полезная! Жаль, что ты это уже собрался делать.
    Ловишь евент отправки сообщения игроком в чат. Берёшь сообщение, и пишешь:
    Код:
    for(Player p : Bukkit.getOnlinePlayers())
    {
        if(message.toLowerCase().contains(p.getName().toLowerCase()))
         //Проигрываешь звук.
    }
    
    Писал без IDE, могут быть ошибки, но смысл понятен.
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Типо звук тому игроку? Норм идея.
     
  5. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    И я об этом
     
  6. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    p.playSound(p.getLocation(), this.plugin.getConfig().getString("sound"), 1.0F, 0.0F);
     
  7. Автор темы
    Serrrgio

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

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    ну вот так получилось
    Код:
    @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?

    может какой-то другой звук поставить? посоветуйте.
     
  8. AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    #OFFTOP
    173 бальный старожил и глупые вопросы. А такое бывает?
     
  9. kirill2011s

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

    Баллы:
    103
    То, что он старожил, не дает ему автоматического знания по разработке плагинов.
     
  10. MrTrojan

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

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    +
     
  11. Автор темы
    Serrrgio

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

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    Еще вопрос.

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

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

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Если в WG шедулер отключен, то 1 и 2 пункты по сути равнозначны, нагрузка будет зависеть от реализации.
     
  13. DPOH-VAR

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

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

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

    UPD:
    Забыл сказать, что первым делом нужно проверить - вообще игрок ли это.
    Но это мелочи, догадаться не сложно.
     
  14. Автор темы
    Serrrgio

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

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    Может я не правильно думаю, но ивент в WG все равно вызывается, при этом мне нужно будет проверить лишь имя региона, этого будет достаточно, не нужно делать проверку игрок это или нет, проверку на координаты (игрок уже попал в регион по нужным координатам проверку тот это мир или нет и т.д.), к тому же этот ивент будет вызываться намного реже чем onPlayerMove, следовательно мой код (который скорей всего будет кривоват) будет работать реже и меньше грузить сервер.

    С EnityDamageEvent не совсем понял, ивент будет вызываться если игрок падает в любом случае? например игрок упал с высоты 1 блок, вызов EnityDamageEvent произойдет?
    вот такой паркур
    2015-06-26_21.18.20.png
     
    Последнее редактирование: 26 июн 2015
  15. DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Нет. Это событие произойдет, только если игрок получает урон (или должен получить). Высота должна быть больше трех блоков. Вариант с водой в этом случае тоже не подойдет, т.к. игрок не получает урон. Для такой карты действительно подойдут события WG (хотя они сами основаны на PlayerMoveEvent)
     
  16. Автор темы
    Serrrgio

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

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    DPOH-VAR, понял, спасибо.
     
  17. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Можете посмотреть на то, как это сделано у меня, и немного скопипастить, при необходимости.
    MovingPlayersCatcher
    RegionUpdateObserver
    BukkitRegionProviders
    Может быть, и не лучшей решение из возможных, но работает, и сервер не нагружает.
     
  18. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    А... Ну раз такие есть, то зачем делать ещё?
     
  19. Автор темы
    Serrrgio

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

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    @fromgate, ок, приму к сведению

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

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

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

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    мир пока опускаем, теоретически, мы знаем какой мир :)
    если задать в виде списка, как в плагине получить значение?
    Код:
    parkour_start_pos: 500,65,350
     
    Последнее редактирование: 27 июн 2015
  21. leonmark061

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

    Баллы:
    76
    @Serrrgio
    Если не жалко байты на диске, то можете данные хранить и в таком виде:
    Код:
    parkour_start_pos:
      world: world
      location:
        ==: Vector
        x: -953.0
        y: 88.0
        z: 1297.0
    И из конфига получать так:
    Код:
    Location loc = getConfig().getVector("parkour_start_pos.location").toLocation(getServer().getWorld(getConfig().getString("parkour_start_pos.world"));
     
    Последнее редактирование: 27 июн 2015

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