Добрый день, дорогие пользователи портала CSControl.Ru. Когда-то давно, когда я только начинал заниматься серверами CS 1.6, устанавливая какой-нибудь новый плагин на очередной свой пробный сервер, мне постоянно было интересно как он сделан, но, открывая исходники, я не очень понимал что и как в нем сделано, а информации на просторах интернета тогда было очень мало. Так как я на тот момент знал несколько простейших языков программирования, я понемногу сидел и разбирал исходники плагинов, переводил описания функций в инклюдах, пытался писать свои плагины. И с течением времени, я набирал бесценный опыт в этом деле и сегодня я хочу поделиться им с Вами.
Итак, я хочу открыть свою серию уроков по скриптингу в AMXX для CS 1.6. В этой серии я научу вас основным функциям и особенностям данного вида программирования. Вы научитесь делать какие-то простейшие плагины, затем переделывать уже готовые плагины под свои вкусы и нужды (ведь зачем изобретать велосипед, правильно?) и наконец писать уже свои полноценные плагины или даже моды с нуля. Данный цикл статей рассчитан на новичков и если Вы уже разбираетесь в этом, то увы - статья будет для Вас не интересна.
В первом уроке мы рассмотрим основную конструкцию кода в плагине AMXX и попробуем сделать свой первый плагин, который в чате будет писать "Hello, Word!", как это принято у программистов.
Вообще плагины пишут в двух редакторах - это всем известный блокнот и AMX Mod X Studio. Обычно я пишу в блокноте, не знаю почему, просто мне удобней, но я буду показывать все примеры и скриншоты именно с AMX Mod X Studio - работать новичкам в ней проще и удобней. Скачать её можно здесь - тык
Так, давайте рассмотрим AMXX Studio.

 В неё входят:
1) Основное меню. Оно содержит такие функции, как открыть, закрыть, сохранить, копировать, вставить, скомпилировать код и т.д.
2) Пункты вставки "быстрых кодов". Кликая на название функции, в наш код будет автоматически вставляться шаблон кода этой функции. Кликните - увидите.
3) И, конечно же, наше рабочее пространство, котором, собственно, мы и будем писать код плагина.
Со всеми этими настройками мы познакомимся по ходу уроков.
А теперь настало время познакомиться с основной конструкцией скрипта. Выглядит она примерно вот так:

#include <amxmodx>  
#include <amxmisc>  

#define PLUGIN "New Plug-In"  
#define VERSION "1.0"  
#define AUTHOR "UrShade"  

public plugin_init()
{  
register_plugin(PLUGIN, VERSION, AUTHOR)  

// Add your code here...  
}  


Давайте разберем его по порядку:
#include  - это оператор, который подключает файл библиотеки, где храниться описание функций. В данном случае это amxmodx.inc и amxmisc.inc. Заметьте, что в аргументе не стоит расширение в названии библиотеки.
#define - это обозначение констант. Из курса математики вы должны знать, что константа - это постоянная, не изменяющаяся величина. #define PLUGIN "New Plug-In" - в данном случае мы присваиваем константе под названием PLUGIN значение New Plug-In. Остальные константы VERSION и AUTHOR по тому же принципу.
public plugin_init() { - В этой строке использовано зарезервированное слово public. Оно говорит транслятору, что мы собираемся описать новый процедуру. В данном случае у нас plugin_init. Это означает, что код, который ниже, будет выполняться только при загрузки плагина сервером. При запуске сервера, при смене карты, к примеру. Все, что идет ниже называется телом, в нашем случае, процедуры.
register_plugin(PLUGIN, VERSION, AUTHOR) - функция register_plugin регистрирует наш плагин на сервере. Она имеет следующий синтаксис register_plugin("Название плагина", "Версия плагина", "Автор плагина"). Все, что в скобках называется аргументами функции. Они имеют вид типа "функция(1арг, 2арг, 3арг...)". Также можно заметить, что в ней мы использовались наши константы, которые описывали в самом начале. Кстати, все переменные, в отличие от обычных значений, пишутся без ковычек.
// Add your code here... - Это комментарий автора. Вообще, перед любым комментарием пишется двойной слэш (//).
Ну и в конце мы поставили скобку, закрыв тело процедуры.
А теперь давайте напишем наш плагин, который будет выводить в чат слово "Hello, World!".
Так как у нас уже есть чистый проэкт с "клише" плагина, то приступим. Первым делом зарегистрируем новую клиентскую команду, чтобы когда мы пишем в чат "/hello" у нас запускалась процедура, которая и будет писать нам в чат заветное словосочетание. Добавим в процедуру plugin_init строчку

register_clcmd("say /hello", "hello")

Как вы уже заметили, первый аргумент - это наша клиентская команда. Попробуйте написать в консоль своей игры "say hello" и вы напишите в чат на сервере слово "hello". Второй аргумент будет обращаться к процедуре с названием "hello", когда отлавливается консольная команда "say /hello".
Что ж, с этим разобрались, теперь добавим саму процедуру 'hello". После процедуру инициализации плагина, добавим новую процедуру. Для этого вставим следующий код:

public hello()  
  {  

  }  

Тут нам уже все знакомо. Теперь напишем сообщения. В теле нашей процедуры добавим следующую строчку:

client_print(0,print_chat,"Hello, World!")

client_print - Функция выводит сообщение игроку или всем игрокам одновременно.
Обычно именно с этой функции начинается познание в скриптинге, когда кто то хочет добавить в уже существующий плагин какое то сообщение.
Теперь разберем аргументы этой функции. Её синтаксис имеет приблизительно следующий вид: client_print(индекс игрока, тип сообщения, "само сообщение").
Индекс игрока - id игрока от 1 до 32, если указать 0, то сообщение будет выведено всем игрокам.
Тип сообщения - бывает нескольких видов:
print_chat - Обычный чат
print_console - Сообщение выводится вконсоль игрока
print_notify - Сообщение выводится в консоль, при включенном режиме разработчика ( на клиенте)
print_center - Сообщение по центру экрана


В итоге, у нас должно получиться следующее :
 #include <amxmodx>  
#include <amxmisc>  

#define PLUGIN "New Plug-In"  
#define VERSION "1.0"  
#define AUTHOR "UrShade"  

public plugin_init() {  
register_plugin(PLUGIN, VERSION, AUTHOR)  
register_clcmd("say /hello","hello")  
  }  

 public hello(id)  
  {  
client_print(id,print_chat,"Hello, World!")  
  }  

Затем копируем наш код, создаем новый текстовый файл, копируем его туда, компилируем и устанавливаем на сервер.



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