Войти или зарегистрироваться

Плагин [CHAT] RPchat - RolePlay чат v0.6 [1.4.6+]

  • Автор темы Автор темы ufes
  • Дата начала Дата начала
Решил таки обновить под новую версию свой форк... что-то ни как не пойму, Моджонги реально хотят от ID отказаться или это баккиты воду мутят?
Код:
 warning: [deprecation] ItemStack(int,int) in ItemStack has been deprecated
        ItemStack inHandrem = new ItemStack(inHand.getTypeId(), inHand.getAmount() - 1);
5 warnings

.getTypeId() - устарело? Как же теперь в конфигах хранить вещи, если не по ID?
 
Решил таки обновить под новую версию свой форк... что-то ни как не пойму, Моджонги реально хотят от ID отказаться или это баккиты воду мутят?
Код:
 warning: [deprecation] ItemStack(int,int) in ItemStack has been deprecated
        ItemStack inHandrem = new ItemStack(inHand.getTypeId(), inHand.getAmount() - 1);
5 warnings

.getTypeId() - устарело? Как же теперь в конфигах хранить вещи, если не по ID?
MATERIAL_AIR, если не ошибаюсь.
 
Обновил форк: https://dl.dropboxusercontent.com/u/31129431/Minecraft/RPChat.jar

Добавлен эксперементальный режим, нужен для плавного перехода не следующую версию.

Запрещено распространять изменённую версию без согласования с авторами

Моджонг реально хочет отказаться от ID?
 
  • Нравится
Реакции: ufes
Моджонг реально хочет отказаться от ID?

При этом мне нравится объяснение этому:
Отлично! Теперь мне всё ясно. Я даже теперь знаю, какой метод использовать вместо устаревшего!
Почитал оф. форум Bukkit. Вот что нашел(перевод вольный):
Это всё часть плана, для избавления от числовых индефикаторов (ветер дует от Можангов, а не только от Bukkit). Идея заключается в том, что индефикатор материала будет динамически генерироваться на сервере, тем самым упростив создание модов/плагинов, генерирующие новые материалы, чтобы они не конфликтовали друг с другом.
пруф
 
По мне так это весьма абсурдно...
В плане использования местами такой шаблон
Код:
if(p.getItemInHand().getType() == Material.getMaterial(getConfig().getString("Tool")))
 
Так... Мута ещё не будет, но планирую добавить [Broadcast] - канал, так сказать, объявлений и FakeMessage (Ложное сообщение) - сообщение от лица другого игрока или вообще без опознавательных знаков. Это вообще нужно:? или мут нужнее?
 
Так... Мута ещё не будет, но планирую добавить [Broadcast] - канал, так сказать, объявлений и FakeMessage (Ложное сообщение) - сообщение от лица другого игрока или вообще без опознавательных знаков. Это вообще нужно:? или мут нужнее?
броадкаст вроде пилится вообще легко. Давай мут, потом fm, потом броад ^_^
 
Броад и фейк имеют одну сложность, а вот мут... с мутом всё несколько сложнее, если делать мут по принципу наложил/снял вручную - то это не сложно, а если с о снятием по истечению времени, то тут придётся напрячься с форматом хранения этого самого времени.
 
Броад и фейк имеют одну сложность, а вот мут... с мутом всё несколько сложнее, если делать мут по принципу наложил/снял вручную - то это не сложно, а если с о снятием по истечению времени, то тут придётся напрячься с форматом хранения этого самого времени.

Если не против, могу я предложить вариант решения в виде pull request
 
dark32 Fork:rpChat (не является прямым продолжением, параллельная ветвь разработки)
Версия: 0.10b
Разработчики: ufes, @dark32
Отдельное спасибо: DmitriyMX

rpChat2

help%201.PNG

Пока релизил, поправил пару незначительных багов... т.ч. эта картинка несколько устарела

Каналы:
help%202.PNG


Глобальный - слышно во всех мирах, можно настроить плату предметом, есть пермиссионс.
Мировой - слышно только в текущем мире, можно настроить плату предметом, есть премиссонс
Крик - слышно в большом радиусе
Локальный - слышно в среднем радиусе
Шёпот - слышно в малом радиусе
Личный чат - слышно только адресату
Действие с вероятностью - слышно в радиусе локального чата
luck%202.PNG

chat%201.PNG

luck%201.PNG


Режимы:
help%203.PNG


Довольно не удобно писать перед каждым сообщением знак, поэтому можно одной командой переключить канал чата и все последующие сообщения пойдут в него. Если вы всё же хотите отправить сообщение в другой канал - укажите перед сообщение знак канала и оно уйдёт в другой канал.

Настройки конфига
Range: -дистанции
main: 250 - локальный чат
whispering: 20 - шёпот
shout: 500 - крик
randrolldef: 6 - если граней у кубика меньше чем minroll, то устанавливается это значение
minroll: 5 - минимальное значение граней кубика
defchanse: 50 - шанс удачи
Prefix: false - не используется
experemental: false - экспереметальный режим, Материал вместо id
Id:
#@Deprecated
worldId: 260 - ID предмета для говорения в мир
worldMa: APPLE - материал для говорения в мир
worldSubId: 0 - метадата для говорения в мир
#@Deprecated
globalId: 264 - ID предмета для говорения всем, глобально
GlobalMa: DIAMOND - материал для этого
globalSubId: 0 - метадата для этого
String:
# не все заменители работают всюду
# %p - имя игрока
# %pf | %sf - зкуаашч/Suffix
# %msg - сообщение
# %r - Кому ЛС
# $1,$2,... - замена в зависимости от контекста
#$1 - Удачо/Неудачно
roll: "&5* %p %msg $1 *"
luck: "&a (удачно) &d"
unluck: "&a (неудачно) &d"
# $1 - сколько выпало, из $2 скольки
rnd: "&d* %p &d* выбрасывает $1 из $2 *"
nei: "&7У вас нет нужного предмета"
# название чата: глобальный или локальный
noPerm: "&7У вас нет прав писать в $1"
globalChat: "глобальный чат"
globalChatFormat: "%pf%p%sf всем:&e %msg "
worldChat: "мировой чат"
worldChatFormat: "%pf%p%sf в мир:&6 %msg "
shoutChatFormat: "%pf%p%sf кричит:&c %msg"
localChatFormat: "%pf%p%sf:&f %msg"
whisperingChatFormat: "&7%p&7 шепчет: %msg"
pmChatFormat: "&7@%p:&5 %msg"
pmChatFormat2: "&7@%p->%r:&5 %msg"
#$1 имя игрока
playeNotFound: "Игрока $1 нет в сети"
mute: "Вам велено заткнутся в этом чате и молчать ещё $1 секунд."

Пермы
Код:
# Permission
# mcnw.global - право писать в глобальный чат
# mcnw.global.no_item - право писать в глобальный чат без платы (бесполезно без mcnw.global )
# mcnw.world - право писать в мировой чат
# mcnw.world.no_item - право писать в мировой чат без платы (бесполезно без mcnw. world )
# mcnw.spy - право на прослушку всего чата
# mcnw.pmspy - запрещёный перм, я не отвечаю за последствия
# mcnw.mute.help - хелп по муту
# mcnw.mute.mute - мутим
# mcnw.mute.unmute - снимаем мут (не реализовано)
ЛС:
С личными переписками пришлось повозится, и до сих пор возможны ошибки, если у двух игроков ник начинается одинаково, а длина разная (Н-р: ben и benten), в таких случаях поведение непредсказуемо.Не принимает ники начинающиеся с цифр.
Для отправки лс наберите в чате @Dark я тебе пишу и сообщение уйдёт игроку, чей ник ближе всего к этому (н-р мой)
Случайные действия
Для написания подобных действий напишите в чате *действие в чати вы увидите, получилось ли выполнить действие или нет (вероятность настраивается в конфиге).
Если вы хотите бросить кубик, то введите *12 или любое число, в чате вы увидите сколько выпало на кубике (примечание: в случае если число меньше minroll, то будет считаться что введено randrolldef )

Молчанка:
help%204.PNG

Что-то я намудрил со сложностью ввода команды мута...
%<nick> <chanel> <time in sec> <reason>
%Имя Канал Время Причина
mute%201.PNG

%see <nick> для просмотра текущих молчанок игрока
mute%202.PNG


TO DO
  • молчанка на отдельные каналы, на всё, ограниченна по времени, без ограничения по времени, отдельные таймеры молчанки на разные каналы.
  • список молчащих, оставшиеся время молчанки
  • формат сообщений
  • графические смайлы не совместимые с русификатором
  • русификатор совместимый со смайлами
  • место для вашей идеи
  • Broadcast
  • FakeMessage
Надеюсь на отчёты тестеровщиков

88x31.png
 
Последнее редактирование:
  • Нравится
Реакции: ufes
Исправил... А так бы и реализовал список этих мочащих.
 
ЛС:
С личными переписками пришлось повозится, и до сих пор возможны ошибки, если у двух игроков ник начинается одинаково, а длина разная (Н-р: ben и benten), в таких случаях поведение непредсказуемо.Не принимает ники начинающиеся с цифр.
Для отправки лс наберите в чате @Dark я тебе пишу и сообщение уйдёт игроку, чей ник ближе всего к этому (н-р мой)
Проще убрать этот "динамический поиск адресата" и никаких проблем не будет. В майнкрафте уже есть функция в чате, которая автоматически дописывает ник при нажатии tab, ее вполне достаточно. ИМХО.
если с о снятием по истечению времени, то тут придётся напрячься с форматом хранения этого самого времени.
А что тут сложного? Хранить метку времени, после которой мут снимается и сравнивать текущее время когда это требуется. При перезагрузке грузить хешмап игрок-время.
 
1. Таб пока не работает для меня, API ещё не смотрел. Это не динамический поиск адресата, а получение адресата по его имени:
Код:
Bukkit.getServer().getPlayer(nickPlayer)
И ошибка как таковая не была подтверждена, а на существует лишь предположительно
Смотрим дальше. Реализация поиска игрока по нику: https://github.com/Bukkit/CraftBukk.../org/bukkit/craftbukkit/CraftServer.java#L322
Код:
 public Player getPlayer(final String name) {
        Validate.notNull(name, "Name cannot be null");

        Player[] players = getOnlinePlayers();

        Player found = null;
        String lowerName = name.toLowerCase();
        int delta = Integer.MAX_VALUE;
        for (Player player : players) {
            if (player.getName().toLowerCase().startsWith(lowerName)) {
                int curDelta = player.getName().length() - lowerName.length();
                if (curDelta < delta) {
                    found = player;
                    delta = curDelta;
                }
                if (curDelta == 0) break;
            }
        }
        return found;
    }
if (player.getName().toLowerCase().startsWith(lowerName)) { - если имя проверяемого игрока начинается со строки запроса.
Дальше проверяется ник наименее отклоняющийся от текущего запроса. Т.е. по запросу dark найдётся dark32, а darklord, но возможно непредвиденное поведение если есть dark33 (т.е. ник начинающийся так же и такой же длины).
Из всего этого можно сказать, что конфликт возможен если у вас на сервере много игроков с никами начинающихся с одного и того же слова и при этом ники одинаковой длины, а отправка ЛС идёт по началу имени (тому самому слову). Был бы рад если эту ошибку проверили на сервере.

В принципе теперь мне не ничто не мешает сделать поиск игрока по нику не обязательно с начала. Т.е. по запросу 32 будет находится dark32, но тогда коллизии точно будут.

Есть конечно точный поиск: getPlayerExact, но тогда по запросу dark будет находится только dark, но не dark32, не darklord находится не будут. Если это востребаванно, могу сделать опционально.
2. ХешМапы зло, и это уже не раз обсуждалось на соответствующих форумах. Проблемы уже нет.
хм.. вроде прикрутил мягкий поиск, спасибо за идею VaNnOrus. Добавил листание по табу для ЛС. Нужно будет протестить. Пока в релиз не лью, нужны тесты. НО всё же можете скачать: http://goo.gl/4nPdq6
 
Последнее редактирование:
хм.. вроде прикрутил мягкий поиск, спасибо за идею VaNnOrus. Добавил листание по табу для ЛС. Нужно будет протестить. Пока в релиз не лью, нужны тесты. НО всё же можете скачать: http://goo.gl/4nPdq6
Эм. Разве это не клиентская фича? Т.е. листание по табу? Если нет, видимо это чат менеджер, не знал. :)
Но в любом случае листание + отправка точно тому адресату, что указан, удачнее, чем поиск по части ника, ИМХО.
 
@dark32 планируется ли конфиг, где можно будет отключать/включать функции, менять символы для каналов и изменение префиксов каналов?
 
Эм. Разве это не клиентская фича? Т.е. листание по табу? Если нет, видимо это чат менеджер, не знал. :)
Но в любом случае листание + отправка точно тому адресату, что указан, удачнее, чем поиск по части ника, ИМХО.
1. Это не клиентская фича... это не чат менеджер, это API.
2. Нет отправки по части нику, есть поиск игрока по нику, его реалзацию уже показывал ссылкой на сам буккит. Точно так же нет отпрвки по полному нику, есть, опять же, поиск игрока по нику. Сообщение отправляется игроку, а не нику. Игрок ищется с наименьшей длиной, содержащий запрос.

@dark32 планируется ли конфиг, где можно будет отключать/включать функции, менять символы для каналов и изменение префиксов каналов?
1. Какие именно функции отключать/включать?
2. На данном этапе смена символа канала не реализована в конфиге, но вынесена в отдельный файл ChatMode.class, теоритически можно без вреда изменить значения через ClassTranslitor или как там програма для редактирования строк. Сама функция смены через конфиг планируется, но имеет не основой приоритет.
3. Изменение префексов (я так понял формата канала) уже реализовано, смотрите конфиг.
 
1. Какие именно функции отключать/включать?
На данный момент mute и spy (под опом не хочется видеть личные сообщения и локальный чат всех)
2. На данном этапе смена символа канала не реализована в конфиге, но вынесена в отдельный файл ChatMode.class, теоритически можно без вреда изменить значения через ClassTranslitor или как там програма для редактирования строк. Сама функция смены через конфиг планируется, но имеет не основой приоритет.
Раньше редактировал через исходники, но через конфиг приятнее и удобнее)
 
1. mute же по перму идёт, или функция выключения чата для себя нужна
2. spy... она же тоже по перму... думал я уже о выключение на время этого для себя. Надо будет занаться этим.
3. конфиг всегда удобней)) будет ,но не сейчас.
 
Назад
Верх