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

Помогите Хэшмэп

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

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

    J_Derp Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    J_Derp
    Всем привет, сегодня опять же отвлекаю вас нубским вопросом, но это же раздел для новичков, ведь так?
    Мне нужен код для определения времени между сообщениями, и узнать: повторяются ли они? Думаю, что как-то нужно использовать ХэшМэп, т.е. массив, но идей пока нету. Может кто помочь?
     
  2. Хостинг MineCraft
    <
  3. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Вам нужно проверять, не идет ли за сообщением такое же раньше определенного промежутка?
     
  4. Автор темы
    J_Derp

    J_Derp Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    J_Derp
    Тут 2 действия, скорее всего.
    1-ое, зависит от времени, к примеру: написал сообщение и уже в течении определённого времени я не могу написать что-либо. (Что-то вроде анти-флуд)
    2-ое, проверять повторяется ли сообщение, если повторяется - отменить отправку.
     
  5. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Ну тут надо хранить и последнее сообщение пользователя, и время до окончания кулдауна.
     
  6. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Предугадывая задумки автора я бы посоветовал использовать не Map (а HashMap это только одна из её реализаций), а простой односвязный список. Элементом будет класс с хешем сообщения и переменной времени.
    Использование хеша вместо самого сообщения чуть-чуть увеличит нагрузку, но чуть-чуть уменьшит используемую память. Регулярно пробегать по списку и отсекать голову с истёкшим временем. Соответсвенно поиск искать по нему, просто пробегая по всему списку в поисках аналогичного хеша сообщения (найдено - значит повтор).
    Да, можно в хранимое значение ещё внести поле Player...

    Ночь, голова не варит, возможно я не вижу какого-то ещё более очевидного и простого решения.
     
    Последнее редактирование: 12 авг 2014
  7. Автор темы
    J_Derp

    J_Derp Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    J_Derp
    Никогда не использовал Мэп, можете помочь?
    Upd. Что-то я не врубаюсь в смысл текста, лол.
    Вы посоветовали Мэп или ХэшМэп, который я и задумывал?
     
  8. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Могу помочь объяснить как он работает, но по возможности не сегодня, у меня уже час ночи =)[DOUBLEPOST=1407866432,1407866318][/DOUBLEPOST]
    Нет, я посоветовал LinkedList, если я сам себя правильно понял :)
     
  9. Автор темы
    J_Derp

    J_Derp Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    J_Derp
    Если что, я завтра с вами свяжусь, если кто-нибудь еще не подгонит какие-нибудь варианты.
    Заранее спасибо!
     
  10. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    И на кой?
    Нужно же проверять есть ли элемент, а хэшпама делает это быстрее всего.
     
  11. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Короче довольно много реализаций на самом деле.
    И любая их них не настолько медленная, чтобы быть заметной до тех пор, пока на сервере не будет пробегать в чате том Войны и мира за 1 час.
     
  12. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Вот только если таких плагинов которым пофиг станет много, то станет совсем не весело. Ибо как раз война и мир каждый тик и получится.
     
  13. Автор темы
    J_Derp

    J_Derp Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    J_Derp
    Ну так может кто помочь?
     
  14. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Так всё способы написали уже.
     
  15. BeLkA

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

    Баллы:
    153
    Skype:
    FayStaff
    Код:
    private final Map<String, String> msg = new HashMap<>();
    
    @EventHandler
    public void onChat(AsyncPlayerChatEvent e) {
    
    if(msg.containsKey(e.getPlayer().getName()) && msg.containsValue(e.getMessage()) {
    e.setCancelled(true);
    p.sendMessage("Please, do not repeat messages!");
    }
    
    msg.put(e.getPlayer().getName(), e.getMessage());
    }
     
  16. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    А удалять из мапы кто будет? И ему кд сообщений нужно.
     
  17. promc

    promc Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    pro_mc
    По идее тебе понадобится HashMap<Player,HashMap<String,long>>
     
  18. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Нет. Pair как значение.
     
  19. promc

    promc Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    pro_mc
    тогда вместо Player => Player.getName()[DOUBLEPOST=1407951290,1407951259][/DOUBLEPOST]но это не так важно, так как там все равно указатели
     
  20. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Важно. Новый объект Player создается каждый респавн и во многих других случаях.
     
  21. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Что? :confused:
     

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