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

Туториал Создание своих команд или CommandHelper плагин

  • Автор темы Автор темы Tehnyla
  • Дата начала Дата начала

Продолжать?

  • Да, конечно. Плагин заинтересовал!

    Голосов: 83 90,2%
  • Брось ты это дело...

    Голосов: 9 9,8%

  • Всего проголосовало
    92
Типо можно написать, /infospawn = [текст типо чё находится] так как я понял?
 
Можно ли как-то сделать чтобы одной командой игрок банился по нику и IP?
 
Есть ли такая настройка, что алиас работает с табом? чтоб быстро писать команду
И так же, чтобы ник игрока тоже работал с табом
 
У меня такой вопрос: Я хочу сделать чтобы по команде /ahelp, с определенным пермишеном, игроку который написал команду выдавался текст в чат. Как такое реализовать?
 
В Craftbukkit уже есть аллиасы
, но они имеют меньший приоритет (не только в плане перехвата, но и управления). Что-то удобнее через стандартные аллиасы сделать, но что-то не получится. На счёт переменных - без понятия, но сомневаюсь что там можно скрипты писать...

Типо можно написать, /infospawn = [текст типо чё находится] так как я понял?
Если надо вывести текст в ответ на эту команду:
Код:
/infospawn = die('Твой текст');
(код проверен)

Можно ли как-то сделать чтобы одной командой игрок банился по нику и IP?
Код:
/banall $player [$message='Потому что я так решил'] = >>>   
    run ('/ban '.$player $message);
    run ('/banip '.$player $message);
    die ('Ты попытался забанить '$player);
<<<
Есть ли такая настройка, что алиас работает с табом? чтоб быстро писать команду
И так же, чтобы ник игрока тоже работал с табом
Я до такого не дошёл. Но реализую подобное так:
Код:
/реальнаяКоманда [$p1] [$p2]  = >>>
    if ($p1 == 'user'){
        run(die('мояКоманда1'));
        run(die('мояКоманда2'));
    }
    else{
        run('/реальнаяКоманда '.$p1 $p2 );
    }
<<<
Т.е. по сути я фильтрую реальную команду, если /реальнаяКоманда user имяИгрока, выполняются мои команды. Табом прощёлкиваются все варианты реальной команды.

У меня такой вопрос: Я хочу сделать чтобы по команде /ahelp, с определенным пермишеном, игроку который написал команду выдавался текст в чат. Как такое реализовать?
Просто проверка на наличие права:
Код:
/ahelp [$command=123456789] = >>>
    if (($command == 123456789){
        die('Либо ты знаешь секретный код, либо ты забыл указать команду');
    }
    else{
        if (has_permission('myperm.'.$command)){
            run(die('Да, у тебя есть право'));
        }
        else{
            run(die('Права нет, пичалька'));
        }
    }
<<<
Если игрок введёт: /ahelp youcommand
И у него есть право: myperm.youcommand
Ему скажут 'Да, у тебя есть право')
Это могут быть и стандартные команды/ права плагинов.
Код:
/ahelp [$command=123456789] = >>>
    if (($command == 'gm')||($command == 'gamemode')){
        if (has_permission('essentials.gamemode.creative')){
            run(die('Ты можешь переключиться в креатив'));
        }
        else{
            run(die('Тебе нельзя переключиться в креатив'));
        }
        if (has_permission('essentials.gamemode.ДругойГМ')){
            run(die('Ты можешь переключиться в ДругойГМ'));
        }
        else{
            run(die('Тебе нельзя переключиться в ДругойГМ'));
        }
    }
<<<
Если надо разные сообщения для разных команд советую посмотреть в сторону switch
 
, но они имеют меньший приоритет (не только в плане перехвата, но и управления). Что-то удобнее через стандартные аллиасы сделать, но что-то не получится. На счёт переменных - без понятия, но сомневаюсь что там можно скрипты писать...


Если надо вывести текст в ответ на эту команду:
Код:
/infospawn = die('Твой текст');
(код проверен)


Код:
/banall $player [$message='Потому что я так решил'] = >>> 
    run ('/ban '.$player $message);
    run ('/banip '.$player $message);
    die ('Ты попытался забанить '$player);
<<<

Я до такого не дошёл. Но реализую подобное так:
Код:
/реальнаяКоманда [$p1] [$p2]  = >>>
    if ($p1 == 'user'){
        run(die('мояКоманда1'));
        run(die('мояКоманда2'));
    }
    else{
        run('/реальнаяКоманда '.$p1 $p2 );
    }
<<<
Т.е. по сути я фильтрую реальную команду, если /реальнаяКоманда user имяИгрока, выполняются мои команды. Табом прощёлкиваются все варианты реальной команды.

Некропостер, еее!
Просто проверка на наличие права:
Код:
/ahelp [$command=123456789] = >>>
    if (($command == 123456789){
        die('Либо ты знаешь секретный код, либо ты забыл указать команду');
    }
    else{
        if (has_permission('myperm.'.$command)){
            run(die('Да, у тебя есть право'));
        }
        else{
            run(die('Права нет, пичалька'));
        }
    }
<<<
Если игрок введёт: /ahelp youcommand
И у него есть право: myperm.youcommand
Ему скажут 'Да, у тебя есть право')
Это могут быть и стандартные команды/ права плагинов.
Код:
/ahelp [$command=123456789] = >>>
    if (($command == 'gm')||($command == 'gamemode')){
        if (has_permission('essentials.gamemode.creative')){
            run(die('Ты можешь переключиться в креатив'));
        }
        else{
            run(die('Тебе нельзя переключиться в креатив'));
        }
        if (has_permission('essentials.gamemode.ДругойГМ')){
            run(die('Ты можешь переключиться в ДругойГМ'));
        }
        else{
            run(die('Тебе нельзя переключиться в ДругойГМ'));
        }
    }
<<<
Если надо разные сообщения для разных команд советую посмотреть в сторону switch
Некропостер.
 
Возникла необходимость сделать одну фигню, пока рассказать не могу, так что буду импровизировать чтоб можно было понять чего я хочу...
Предположим я захотел, чтоб через каждый час после запуска сервера одному везунчику выдавалась игровая валюта.
Как будет запускаться - не так важно. Можно через встроенные возможности или другой плагин, не суть, хоть сам админ пусть в ручную запускает команду.
Есть команда all_players () - она выдаст массив, из него надо будет выцепить имена, рандомно выбрать одно из них...
И вот собственно сама моя проблема, я не знаю как определить авторизован ли человек. Не онлайн, а именно залогинен. Для авторизации использую AuthMe-5.3.2-SNAPSHOT-spigot#1707 (отсюда качал)
Как импортировать api чтоб использовать isAuthenticated(player()) ?
Да да да, мне нужно чтоб в скриптах commamdhelper можно было использовать api AuthMeReloaded.
Кто знает, подскажите что делать?
 
Ну так ответил бы раньше, пока было актуально для тех кто задавал эти вопросы. Я, например, не нашёл информацию про права в русскоязычной части, а с моим знанием аглицкого и гуглтранслейт было не очень удобно разбираться. Возможно, кому-нибудь это поможет в будующем. Да, я не написал что там и как работает, просто привёл пример, но это иногда полезнее.
 
LoginEvent LogoutEvent RestoreSessionEvent
Как я понял, это на события навешивать свой код? Не разобрался...
Решил проверять по базе данных MySQL.
В общем сделал так:
Код:
    @result = query(array(type: 'mysql', database: 'ИмяБД', username: 'ИмяПользователя', password: 'Пароль'), 'SELECT * FROM `authme` WHERE realname=?', @player);
    if (@result['0']['isLogged']){
        run(msg(@player.' авторизован.'));
    }
    else{
        run(msg(@player.' не авторизован.'));
    }
На файле не проверял, но должно быть что-то вроде:
Код:
    @result = query(array(type: 'sqlite', file: 'ДИСК:/путь/authme.db'), 'SELECT * FROM `authme` WHERE realname=?', @player);
    if (@result['0']['isLogged']){
        run(msg(@player.' авторизован.'));

    }
    else{
        run(msg(@player.' не авторизован.'));
    }
 
Как я понял, это на события навешивать свой код? Не разобрался...
Решил проверять по базе данных MySQL.
В общем сделал так:
Код:
    @result = query(array(type: 'mysql', database: 'ИмяБД', username: 'ИмяПользователя', password: 'Пароль'), 'SELECT * FROM `authme` WHERE realname=?', @player);
    if (@result['0']['isLogged']){
        run(msg(@player.' авторизован.'));
    }
    else{
        run(msg(@player.' не авторизован.'));
    }
На файле не проверял, но должно быть что-то вроде:
Код:
    @result = query(array(type: 'sqlite', file: 'ДИСК:/путь/authme.db'), 'SELECT * FROM `authme` WHERE realname=?', @player);
    if (@result['0']['isLogged']){
        run(msg(@player.' авторизован.'));

    }
    else{
        run(msg(@player.' не авторизован.'));
    }
Писец ты дурак. Тебе же дал ивенты аутчме.
 
Писец ты дурак. Тебе же дал ивенты аутчме.
И что мне с этими ивентами делать? Регистрировать переменные и держать в памяти для каждого пользователя? Если команда будет вызываться раз в час не вижу в этом смысла. Или что-то ещё? Может я не так понял? Как их в command helper использовать? Не свой плагин, а именно в скрипте. Можно пример?
Если б разобрался с api воспользовался бы isAuthenticated(), она по идее должна сразу выдать авторизован игрок или нет, но я не смог. Что, куда, как импортировать?

У одной и той же задачи может быть не одно решение.
Да, возможно мой код неэффективен, но он работает, а другого я не вижу, даже примерного.
 
Туториал от Tehnyla по плагину CommandHelper
В этом туториале я научу вас пользоваться плагином CommandHelper на данный момент версии 3.3.0.
Оглавление​
Глава 1 - ("Псевдонимы" и Permission к нему).
Глава 2 - (Переменные и встроенные команды).
Глава 3 - (Создание своих переменных)

Что делает этот Плагин?
Он позволяет сокращать команды (/spawn = /s), а так же создавать свои команды, без знания языка Java.
Начинаем работу.
Установка.
Для этого плагина требуется CraftBukkit или Spigot.​
  1. Скачать CommandHelper и извлечь commandhelper.jar в папку plugins вашего сервера.
  2. Запустите сервер один раз для создания файлов конфигурации.
  3. Читайте мой туториал, чтобы узнать, как использовать CommandHelper.
Глава 1.
"Псевдонимы команд" или сокращения команд.

Чтобы создать "Псевдоним" команды надо зайти в конфиг под названием config.txt.​
Можно заходить в конфиг через обычный "Блокнот" или же советую "Notepad++". Что мы видим? Это показаны примеры написания команд, их все можно стереть, но там есть хорошие варианты, вообщем не чего пока не трогайте.
Чтобы создать первый "Псевдоним" пролистываем в самый низ кинфига, отступаем одну строку от последней записи. Вот что надо написать:
/[псевдоним команды] = /[команда с которой делаем псевдоним]
Например:
/s = /spawn
Вот так выглядит в конфиге:




Первый наш псевдоним готов, так можно сокращать любую команду.
Дополнение:
Так же можно в один "Псевдоним" вмещать несколько команд. Так:
/s = /spawn \ /clear \ /.....
Теперь при написании команды "/s", у игрока очищается инвентарь и его телепортирует на спавн. Таким образом к одному "Псевдониму" можно приписать хоть 100 команд!


У команд из этого плагина наивысший приоритет, например команда /home из CommandHelper`a будет перебивать эту команду из других плагинов и тд.​
Создание Permissions для "Псевдонимов".​

Для того чтобы создать Permissions, нужно перед нашей строкой:
/s = /spawn
Прописать значение разрешения.
Вот так:
[Значение]:/s = /spawn

Например:
spawn:/s = /spawn
(с маленькой буквы).
Вот как это теперь выглядит в конфиге CommandHelper:




Вот это основа Permission:
commandhelper.alias.[Значение]

Добавляем свое значение и вот что получается, например:
commandhelper.alias.spawn
Permissions для "Псевдонима" готов.


Заключение 1 Главы​
1. Узнали как создавать "Псевдонимы" или как сокращать команды.
2. Узнали как создавать Permission для "Псевдонима".


5 Лайков и я начну работать над второй главой.
я не могу,игрки не могут писать команду
 
Кто-нибудь подскажет как заставить алиас работать с табом? К примеру, есть команда /ah view <Имя игрока>, я сделал алиас /view, но при нажатии на Tab этой команды нету, нужно писать ее в ручную, плюс при том же нажатии на таб, не вставляются имена игроков. Надеюсь, я более-менее понятно выразил свои мысли.

Заранее спасибо тем кто откликнется.
 
Назад
Верх