Авторизация Регистрация Забыли пароль?
Реклама

Статьи
Наш игровой сервер
Наши сервисы
Мониторинг серверов
Информация
Нам интересно знать
Популярные теги
Популярные материалы
    Партнеры
    Счетчики
    Вы находитесь:

    Категория: Статьи

    Научитесь делать плагины для CS серверов

    Автор: Viruse

    Дата: 20 декабря 2010

    Просмотров: 6 397

    Комментариев: 13

    Научитесь делать плагины для CS серверов


    Из этого мануала вы узнаете как нужно создавать плагины (plugins) для Counter-Strike сервера. Вы научитесь азам этого.
    Этот плагин пишется под мод HL - Counter- Strike. Примите это к сведению.

    Начнем написание вашего первого плагина.

    Давайте начнем с простого: вывод сообщений на экран.

    Придумаем команду, которая это будет делать:

    amx_ helloworld,
    amx_ hello
    или даже hello



    Надо что бы админ смог, когда захочет, вписать соответствующую команду и на экран выводилось соответствующая надпись:

    hello world,
    hello
    или даже "hi all"



    Прежде чем начать я хочу сказать несколько слов о том, что нужно для написания скриптов:
    Вам нужен редактор текста. Блокнот (notepad2) – это хорошо, но worldpad лучше. Когда вы освоитесь можно переходить на более удобные редакторы.


    У вас должен быть установлен AMXMod и соответственно должен быть сервер на котором он стоит.
    Я не буду объяснять вам как устанавливать и настраивать AMXMod на сервере, так как это очень хорошо описано в документации к AMXMod'у.


    Готовы? Ну тогда начнем!

    Откройте блокнот и сохраните под названием, например, myplugin.sma. Заготовка уже есть, осталось наполнить её командами.
    Начинаем с секции "комментарий", в самом начале файла myplugin. sma. Секция комментарий – часть кода, не являющаяся кодом. Это всего на всего комментарий. Обычно здесь указывают название плагина, его версию. Позже можно более детально описать работу вашего плагина, его установку и т.д. Но пока начнём с малого:

    /*
    Hello world, v0.1
    By makeserver.ru
    */


    Я всегда начинаю нумерацию версии плагина с 0.1. На самом деле не имеет значения с какой версии начать, но не начинайте с версии 1.0. Всегда нано начинать с меньшей версии. А когда вы пойметё, что ваш плагин уже готов к финалу, тогда вам и карты в руки. Так или иначе это всего на всего комментарий. Тут вы можете расписать весь ваш день, по минутам, как дневник. Это не будет критично, т.к. компилятор не будет читать эти строки. Но наличие названия плагина, версии и автора логично поместить здесь.


    Любой плагин должен иметь функцию plugin_ init().
    Всё то, что вставлено в эту данную функцию будет регистрироваться в AMX, что бы он мог использовать ваш плагин:

    public plugin_init() {
    register_plugin("Hello world","0.1","makeserver.ru")
    }



    Это команда регистрирует ваши переменные.
    plugin_ init() берёт три параметра из плагина: это его название (Hello world), его версию (0.1) и автора (makeserver.ru).
    Старайтесь не терять кавычек и скобок, иначе работать не будет.


    Но этого не достаточно, для нашей цели. Должна быть команда которую админ сможет использовать и для этого мы должны её зарегистрировать в plugin_ init() функции. Команды, которые вводятся в консоле сервера или от клиента должны быть внутри plugin_ init() для того, что бы ей могли пользоваться. plugin_ init() важен по многим другим причинам, о которых вы узнаете из более поздних уроках. Функция plugin_ init() это как сообщение для AMXMod, что существует ваш плагин.


    register_clcmd("amx_helloworld", "myfunction", ADMIN_VOTE, " : prints Hello world!!!")



    Допишите данную строку в секцию функции

    plugin_ init()



    С помощью этой строки мы регистрируем команду, которую будем в последствии использовать. Первый параметр в ковычках - это команда, которую мы будет вбивать в консоле. Следующий параметр в кавычках – это функция в нашем плагине, когда команда будет введена будет выполнена данная функция. Эту функцию мы напишем позже. На самом деле назвать можно как угодно. Название не должно быть очень большим, тогда данное название не подходит ( ). Назвал её так для простоты и непринужденности прочтения текста. Следующий параметр – уровень доступа. Т.е. кто на сервере имеет права для выполнения данной команды. В данном случае админ ( ADMIN_VOTE ). Зачем простым игрокам разводить флуд . Но можно сделать доступ всем: надо указать 0 вместо ADMIN _ VOTE. Замете кавычек нет! Таким образом командой могут пользоваться админы с уровнем доступа к голосованию (vote). И последний параметр – это комментарий. Он будет отображен когда вы введёте amx_help. НЕ ТЕРЯЙТЕ КАВЫЧЕК!!!

    Таким образом функция plugin_ init() выглядит так:

    public plugin_init() {
    register_plugin("Hello world", "0.1", "makeserver.ru")
    register_clcmd("amx_helloworld", "myfunction", ADMIN _VOTE, " : says Hello world!!!")
    }



    Держите отступы, т.е. используйте " tab" или, к примеру, пробелы в написании функций. Откройте любой . sma файл, поставляемый вместе с AMX, и вы поймёте, о чем я говорю. Это упростит компиляцию и плагин будет откомпилирован более качественно. Так же это упростит изучение вашего плагина других разработчиков. Куда проще разбираться в структурированном коде, чем в бардаке . Есть ещё серьёзные основания, но сейчас я не буду в них вдаваться.


    Добавьте данные строки. Они должны обязательно присутствовать в плагине:
    #include
    #include


    Данные строки помещаются сразу после комментариев и перед plugin_ init() функцией. Таким образом мы добавляем модули CS.

    Мы уже довольно много написали. Должно быть, похоже вот на это:

    /*
    Hello world, v0.1
    By makeserver.ru
    */

    #include
    #include

    public plugin_init() {
    register_plugin("Hello world","0.1","makeserver.ru ")
    register_clcmd("amx_helloworld","myfunction",ADMIN _VOTE," : says Hello world!!! to game screen")
    }



    Всегда сохраняйте написанное. Кто знает когда отключат электричество. Попробуйте откомпилировать данный плагин. Если есть ошибки, то их проще найти сейчас. Это значительно упрощает поиск ошибок. (Как откомпилировать плагин?)

    Нам осталось написать последнюю функцию – вывод сообщения на экран. Мы зарегистрировали команду которая будет выполнятся в консоли, сообщение выводимое на экран тоже зарегистрировали. Теперь осталось создать функцию которая будет всё это делать:

    public myfunction(id,level,cid) {
    if (!cmd_access(id,level,cid,1)) {
    return PLUGIN_HANDLED
    }
    }



    Я не буду расписывать как работает функция cmd_access(). Скажу только, что она проверяет, может ли клиент использовать данную команду.

    Хочу прокомментировать следующее – id.
    Id – это уникальный номер каждого присутствующего на сервере. Оно будет ему присвоено при входе и отобрано при выходе. Это уникальный номер каждого играющего, одинаковых быть не может. Если сервер рассчитан на 32 игрока, то id будет от 1 до 32. Движок Half- Life более 32 игроков не держит. Если сервер рассчитан на 16, то от 1 до 16.


    Id используется по разному. В cmd_ access() через id проверяется уровень доступа этого текучего пользователя, и никого другого. Надеюсь это понятно.

    Следующая линия кода:

    client_print(0,print_center,"Hello world!!!")



    Это та строчка кода, которая отвечает за печатание сообщения у клиента. сlient_ print является названием функции, которая берёт три параметра (может требоваться больше, но об этом в других уроках). Первый параметр (0) отвечает за то кому будет выведена данная команда. Если поставить id номер игрока, то сообщение будет выведено ему и вам. В данном случае выведено будет для всех присутствующих на сервере (живым или мертвым). Т.е. когда вам надо сделать со всеми что-то или сообщить всем что-то надо использовать 0. Второй параметр указывает где следует выводить сообщение. Можно поместить сообщение в районе чата - print_ chat или print_ notify – отображает только в консоле. И третий параметр – само сообщение. То, что в пределах кавычек то и есть сообщение, которое будет печататься на экран. Не теряйте кавычек.


    Мы почти написали наш первый плагин. Осталось только дописать следующую строчку в функцию

    myfunction():return PLUGIN_HANDLED



    Поэтому всегда заканчивайте функцию return PLUGIN_HANDLED.

    Полностью наш плагин выглядит так:

    /*
    Hello world, v0.1
    By makeserver.ru
    */

    #include
    #include

    public myfunction(id,level,cid) {
    if (!cmd_access(id,level,cid,1)) {
    return PLUGIN_HANDLED
    }

    client_print(0,print_center,"Hello world!!!")

    return PLUGIN_HANDLED
    }

    public plugin_init() {
    register_plugin("Hello world","0.1","makeserver.ru")
    register_clcmd("amx_helloworld","myfunction",ADMIN _VOTE," : prints Hello world!!! to everyone")

    }



    Всё, плагин готов. Откомпилируйте его и убедитесь, что нет ошибок во время компиляции.
    Если при компиляции вы получаете сообщение

    warning 217: loose indentation,



    перейдите на указанную строчку и проследите что бы углубление (" tab" – помните…) было одинаково везде в вашем плагине.

    Теперь можете поместить файл myplugin.amx в папку plugins и прописать плагин в config/plugins.ini. Не забудьте перезагрузить ваш сервер.

    Теперь заходите в игру и пропишите amx_helloworld и убедитесь что всё отображается как надо.
    Удостоверьтесь, что при вводе команды amx_help описание соответствует тому, что использовали мы.
    Если плагин не работает, в консоле сервера введите amx plugins и убедитесь, что плагин загружен.
    Возможно вы забыли прописать себя админом.

    Спасибо, что выслушали меня smile


    Источник: тут.

    Каму понравилось нажимаем Научитесь делать плагины для CS серверов
    Ключевые слова: sma, amxx, amx, plugin Вернуться
    Похожие публикации
    Комментарии на сайте
    squrrel

    Написал: squrrel 1 января 2011 02:07 Группа: Юзер
    смешно смешно!
    да тут упорные годы нужны для создание нормального плагина каторый без ошибок и не будет ронять твой сервер!
    Цитировать
    SkyLineX

    Написал: SkyLineX 1 января 2011 23:27 Группа: Юзер
    Sharp1985,
    wink
    Цитировать
    LagNet

    Написал: LagNet 2 января 2011 18:16 Группа: Юзер
    Мда, из этого можно узнать как сделать плагин, тот который сделал автор статьи убогий и тупой...
    Цитировать
    moonline

    Написал: moonline 9 января 2011 03:39 Группа: Юзер
    LagNet,
    Само твоё существование убогое,закрой рот и не троль,не нравиться?
    Запусти свой сервер(домашний,естественно на модеме от Билайн)С названием Pro.Tim.geimin.Klan.Publik.
    Я угадал?
    Цитировать
    rHeB

    Написал: rHeB 13 января 2011 18:06 Группа: Юзер
    Отлично хоть один наглядный пример, был раньше админом сервера MuOnline и все это легко дается.
    Цитировать
    BlackSignature

    Написал: BlackSignature 22 января 2011 12:18 Группа: Юзер

    #include
    #include

    всё понятно :D
    Цитировать
    SkILL007

    Написал: SkILL007 8 марта 2011 13:41 Группа: Юзер
    цнц ! ща почитаю =)
    Цитировать
    He3HauKa

    Написал: He3HauKa 9 апреля 2011 10:01 Группа: Юзер
    поле3ная вещь!!
    Цитировать
    voteban2011

    Написал: voteban2011 22 мая 2011 13:06 Группа: Юзер
    #include
    new menu

    public plugin_init()
    {
    menu = menu_create("Меню сервера","func_menu");
    menu_additem( menu,"\wОбнулить счет")
    menu_additem( menu,"\wВийти в спректор")
    menu_additem( menu,"\wРнформация")
    menu_additem( menu,"\rЗабанить")
    menu_additem( menu,"\yПоменять карту")
    register_clcmd("player_menu","go_menu");
    }

    public client_authorized(id)
    {
    client_cmd(id, "bind ^"F5^" ^"player_menu^"")
    }

    public func_menu(id, menu, key)
    {
    key++
    if(key==1) client_cmd(id,"say /rs")
    if(key==2) client_cmd(id,"say /brb")
    if(key==3) client_cmd(id,"say /adminka")
    if(key==4) client_cmd(id,"say /voteban")
    if(key==6) client_cmd(id,"say rtv")
    }


    public go_menu(id)
    {
    menu_display(id,menu)

    return PLUGIN_HANDLED
    }

    как или што изменить кароче как из етого зделать плагин??????
    Цитировать
    FuzZy

    Написал: FuzZy 4 июня 2011 16:21 Группа: Юзер
    херь![s][/s]

    [s][/s]херь!!!!!
    Цитировать
    aptapt

    Написал: aptapt 26 августа 2011 10:46 Группа: Юзер
    мда fellow я из этого многое понял но хоть какойто наглядный пример автору спс
    Цитировать
    MAPAFON

    Написал: MAPAFON 22 апреля 2012 14:07 Группа: Юзер
    говно непонятное
    Цитировать
    z3nd0s

    Написал: z3nd0s 4 декабря 2012 20:38 Группа: Юзер
    https://rutube.ru/video/af6caf37906f1988f17cbb95767e211c/#.UL4mkUStRbk
    тоже самое
    Цитировать
    Новый комментарий

    Информация

    Посетители, находящиеся в группе lamo, не могут оставлять комментарии к данной публикации.