[Урок] Изучаем язык Pawn Часть 1

Статус
В этой теме нельзя размещать новые ответы.

Pr0C

Известный
Автор темы
40
11
Недавно решил сделать что-нибудь полезное для портала и увидел, что уроков по Pawn практически нет, а так как я долгое время занимался им, то начинаю свою серию уроков по этому не очень популярному, но легкому в изучении языку программирования. Приступим.
В первом уроке я расскажу о синтаксисе языка, константах, переменных, выводе данных, конструкции if-else а так же о парочке мелких но полезных функциях.
Начнем с синтаксиса. Тем, кто знает язык C++ практически не придется изучать синтаксис языка Pawn, так как он мало чем отличается от C++. Это было реализовано разработчиками Павн за счет того, что они делали его облегченной копией Си. Покажу синтаксис языка на примере создания переменной, использовании ее в конструкции if-else и выводе текста в чат.
Хочу сказать наперед, что в данной части я не буду использовать паблики (кто знает что это, тот поймет), а буду просто показывать как правильно пишется код.
PHP:
new a = 5;
if(a == 5)
{
    SendClientMessage(playerid, 0xFFFFFF, "Переменная a равна 5");
}
else
{
    SendClientMessage(playerid, 0xFFFFFF, "Переменная a не равна 5");
}
Как видите, текст должен заключаться в двойные кавычки " и в конце выполнения функции должна стоять точка с запятой ;
Теперь объясню этот код.
new a = 5; - здесь мы создаем переменную a и присваиваем ей значение 5. Как видите, в Pawn для объявления переменной, следует написать: new имя переменной; Если мы сразу хотим присвоить значение переменной, то после имени переменной пишем = и значение. Как и в большинстве других языков, в Pawn есть несколько типов переменных. Это: string (строка), integer (целое число), boolean (не знаю как правильно объяснить... переменным типа boolean можно присваивать true либо false, тоисть "истинно" либо "ложно") и float (число с точкой). Ниже покажу как создавать переменные этих типов:
PHP:
new stroka[128]; //Переменная типа string с размером в 128 символов
new chislo; //Переменная типа integer
new peremennaya:bool; //Переменная типа boolean
new pos_x:float; //Переменная типа float
Думаю здесь все понятно. Что-бы потом присвоить значение переменной, достаточно написать имя переменной = значение. Так же, имена переменных должны начинаться с маленькой буквы (строчной). Пойдем дальше.
if(a == 5) - если переменная a равна 5, то... (думаю вы уже поняли, что в скобках возле if, пишется условие)
SendClientMessage(playerid, 0xFFFFFF, "Переменная a равна 5");SendClientMessage - это функция, которая отправляет игроку текст в чат. playerid - это id игрока, в большинстве пабликов (потом объясню что это) скрипта, она принимает id игрока от имени которого вызывается функция. 0xFFFFFF - это цвет текста, который мы выводим в чат (в данном случае белый). "Переменная a равна 5" - это думаю и так понятно, текст который мы выводим в чат.
Ну а дальше в коде стоит else (тоисть, если условие введенное в конструкции if ложно) то выводится другой текст.
Ну что же, синтаксис, переменные и вывод данных мы разобрали. Теперь разберем константы, массивы и подключение инклудов.
Константы - это такие переменные, которые не меняют свое значение на протяжении работы скрипта (как поменять значение константы я все таки нашел :) покажу в конце урока). Объявляются они достаточно просто (желательно объявлять в начале скрипта/мода)
PHP:
#define ИМЯ_КОНСТАНТЫ Значение
Имя константы я не зря написал именно большими буквами, так как оно должно писаться только заглавными буквами. Значение может иметь любой формат, только если оно текстовое (типа string), то должно заключаться в двойные кавычки. И еще константы не поддерживают тип boolean.
Потом константы можно использовать например в выводе данных в чат:
PHP:
#define HOT_DOG_CENA 150
#define COLOR_WHITE 0xFFFFFF
 
SendClientMessage(playerid, COLOR_WHITE, HOT_DOG_CENA);
Так мы вывели в чат число 150 белым цветом. Только что чуть не написал текст по формату PHP и вспомнил об функции format. (Просто в PHP переменные и константы вместе с текстом можно соединять просто точкой, а в Pawn такое не пройдет). Функция format используется для записи в переменную отформатированного текста (текст со значениями переменных).
Перед использованием данной функции обязательно нужно создать переменную, в которую запишется текст.
PHP:
#define HOTDOG_CENA 150
#define COLOR_WHITE 0xFFFFFF
new playername[5] = "Pr0C";
new string[128];
format(string, sizeof(string), "%s, цена хот-дога равна %d", playername, HOTDOG_CENA);
SendClientMessage(playerid, COLOR_WHITE, string);
Как видите, мы сделали 2 константы, первая это HOTDOG_CENA со значением 150, а вторая это COLOR_WHITE со значением 0xFFFFFF (белый цвет). Дальше мы сделали переменную с именем игрока и переменную string с размером в 128 символов (больше делать нету смысла, так как в одной строке чата вмешается максимум 128 символов, только сервер нагрузите излишним употреблением памяти). Потом в функции format мы написали имя переменной, в которую запишется отформатированный текст. Дальше sizeof(string) - здесь мы узнали размер переменной string (в format обязательно нужно указывать размер переменной), потом мы написали текст который будет форматироваться. А здесь расскажу поподробнее. При форматировании текста с помощью format, можно указывать место, где будет выводится значение из переменной/константы (может и не совсем правильно объяснил, но думаю понятно :) ). При форматировании текста в Pawn существуют специальные вставки ( :) ).
%s - это вставка переменной типа string
%d - типа integer
%f - типа float
Потом после текста, пишутся переменные и константы в таком порядке, в каком они были объявлены в форматируемом тексте. Ну и потом можно свободно использовать нашу переменную. У многих новичков я часто замечал одну и ту же ошибку - создание нескольких переменных для записи в них форматируемого текста. Если вы уже воспользовались переменной с отформатированным текстом и она вам уже больше не нужна, то не нужно создавать еще одну. Запишите новый текст в нее заново. Функция format автоматически очищает переменную и записывает в нее ваш текст.

На этом первая часть урока заканчивается. Я собирался рассказать в ней еще и об массивах, но честно говоря лень пока писать дальше :) Встретимся уже в следующей части, в ней я расскажу о массивах, пабликах (public), пользовательских функциях (stock) и возможно еще о циклах (for и while).

Еще я обещал, что покажу как можно перезаписать значение константы. Раз уж обещал, надо сделать.
PHP:
#define CONSTANTA 1 //Создаем в начале скрипта константу со значением 1
 
#undef CONSTANTA //Удаляем константу
new const CONSTANTA = 5; //создаем ту же константу со значением 5
Это много кому покажется бесполезным, но когда я писал систему загрузки фракций из базы данных, мне это очень пригодилось :) Правда я не советую вам пользоваться перезаписью константы где-то в середине мода, особенно в функциях. Иначе она может просто пропасть :) Но это уже ваше дело. Практикуйтесь, спрашивайте. Всем помогу и отвечу.

P.S. В некоторых местах я объяснял не совсем правильно, вы уж извините, просто большую часть языка я изучал на зарубежных порталах и не знаю как правильно объяснить по русски. Но я старался объяснить как можно понятнее. Думаю вы простите меня :)
 
Статус
В этой теме нельзя размещать новые ответы.