Учебник скриптинга в pawno
Учебник по скриптингу в Pawno.
1. Инклуды.
Инклуды - это своеобразные файлы, которые содержат в себе (новые) функции. Самый главный инклуд, без которого невозможно создать ни 1 скрипт/мод, это a_samp. Синтаксис добавления в мод/скрипт инклуда:
PHP код:
#include <a_samp> 

Обычно это добавляют в начало мода.
2.Каменты (comments).
Синтаксис:
//камент
Коментарии служат для записи текста, который будет пропускаться компилятором (т.е. он не будет на них обращать внимания).
Можно создать многострочный каменты, например:
*/
камент1
камент2
/*
Всё, что находится между */ и /*, будет каментом.
3.Паблики (publics).
Зона действия паблика: в скобках. Например:
PHP код:
public OnPlayerConnect(playerid)
{
//сюда пишем всё, что должен выполнять паблик

Каждый паблик имеет определённые параметры.
Например: паблик onplayerconnect имеет параметр playerid. Playerid - id player's - ид игрока.
Описание наиболее распространённых пабликов:
PHP код:
public OnPlayerConnect(playerid) //выполняет функции, когда игрок коннектиться к серверу.
public OnPlayerCommandText(playerid,cmdtext[]) // ...когда игрок запускает некоторую команду, например: /help
public OnPlayerSpawn(playerid) //...когда игрок спавниться (отправляется на спавн).
public OnPlayerDeath(playerid,killerid,reason)//...когда игрок погибает.Параметры: playerid - тот, кто сдох, killerid - тот, кто убил, reason - причина убийства.
public OnGameModeInit() //сюда пишем обьекты, которые добавляются в gm/fs (авто, обьекты,классы игроков). Так же сюда записываются параметры мода. Например, UsePlayerPedAnims(); 
//Примечание: о функциях расскажем в след. главе.
PHP код:
public OnFilterScriptInit()//то же, что и пред. паблик, только его обычно записываются в fs.
public OnPlayerText(playerid,text[]) // ...когда игрок пишет текст (советую не юзать =\ ).Параметры
public OnPlayerDisconnect(playerid,reason)//когда игрок выходит из игры.Параметр reason - причина.
public SetupPlayerForClassSelection(playerid)//cюда записывается всё, что касается выбора игрока ,когда он коннектиться (положение камеры, игрока и т.д.). 

4. Функции (native functions).
Вот мы и перешли к нативным функциям! Каждая функция выполняет определённое действие и имеет определённые параметры.
Например:
PHP код:
GivePlayerWeapon(playerid,24,100);

Функция даёт игроку оружие.
Параметры:
playerid - ид игрока
24 - ид оружия
100 - количество патронов.
Т.к. 24 - ид дигла, то эта функция даёт игроку, вызвавшему эту функцию, дигл с 100 патронами.
//Примечание: функция должна выполняться ТОЛЬКО в паблике, имеющем параметр playerid.
Описание наиболее известных функций:
PHP код:
SetPlayerHealth(playerid,health);//устанавливает игроку определённом здоровье. health - количество хп.
SetPlayerArmour(playerid,armour);//устанавливает определённое количество брони. armour - количество брони.
GivePlayerMoney(playerid.money);//даёт игроку деньги. money - количество денег.
ResetPlayerMoney(playerid);//отбирает у игрока все деньги.
ResetPlayerWeapon(playerid);//отбирает у игрока всё оружие
SendClientMessage(playerid,color,"message");//отправляет мессагу игроку. color - цвет, message - текст мессаги. Кавычки оставить!
SendClientMessageToAll(color,"message");//отправяет мессагу всем!  color - цвет, message - текст мессаги.
AddStaticVehicle(vehicleid,x,y,z,angle,color1,color2);//cтавит тачу, которая может респавниться. vehicleid - ид машины, x,y,z - коорды, angle - угол поворота, color1, color2 - цвета.
CreateVehicle(vehicleid,x,y,z,angle,color1,color2,respawndelay); //создаёт тачу. от того параметра respawndelay зависит респавн машины (при 0 создаётся 1 раз).Параметры аналогичны предыдущим.
SetPlayerPos(playerid,x,y,z);//телепортит игрока в опред. место. playerid - ид игрока, x,y,z - коорды.
GetPlayerPos(playerid,Float:x,Float:y,Float:z);//берёт коорды игрока. для функции необходимо создать новые переменные. О них позже.
GetPlayerHealth(playerid,health);
GetPlayerArmour(playerid,armour);
GetPlayerMoney(playerid);//берёт значение денег игрока. Используется при проверке - о ней позже. 
Полное собрание функций:

5.Переменные.
Переменные обычно создаются в начале мода при помощи new. Переменной можно присваивать опред. значение.
Например,
PHP код:
new money=10; 

Переменные можно использовать при проверках (о них позже), в параметрах функций.
Пример такой функции
PHP код:
GivePlayerMoney(playerid,money-11);//т.к. Money - 10, то игроку будут даваться деньги 10-11 т.е. будет забираться -1$ 
Существуют переменные для игроков.
Пример
PHP код:
new abank[MAX_PLAYERS]=0; 
Т.е. у каждого игрока значением данной переменной является 0. НО: КАЖДОМУ игроку можно присвоить СВОЮ переменную!
Пример:
PHP код:
abank[7]=5; 
Иду 6 присвоена значение 5.
Можно добавлять/отнимать некоторое значение к переменной.
Пример:
PHP код:
abank[playerid]+=1;//добавлено к уже существующему значению 1
abank[playerid]-=1;// минус 1 =)
Можно пользоваться другой функцией.
abank[playerid]--;//-1
abank[playerid]++;//+1 
6.Проверкa (if).
Проверка выполняется при помощи if()
{//в скобках}
Если проверка выполнена успешно, то всё, что стоит в скобках, будет выполняться.
Пример:

PHP код:
public OnPlayerConnect(playerid)//када игрок коннектиться
{
if(GetPlayerMoney(playerid)>10000000)//если <деньги_игрока> >10000000
{//то
ResetPlayerMoney(playerid);//отнимаются все деньги
Kick(playerid);//игрока кикает
}
else //иначе
{
//ничего не происходит
}

Допустимые знаки в функции if:
>= больше или равно
<= меньше или равно
= = равно
> больше
< меньше

В функции if мона поставить больше проверок. Для этого следует писать && (и) или || (или).

Пример:
PHP код:
public OnPlayerConnect(playerid)//када игрок коннектиться
{
if(GetPlayerMoney(playerid)>10000000 && !GetPlayerMoney(playerid)= =0)//если <деньги_игрока> >10000000 И если <деньги_игрока>  НЕ (!) равны нулю
{//то
ResetPlayerMoney(playerid);//отнимаются все деньги
Kick(playerid);//игрока кикает
}
else //иначе
{
//ничего не происходит
}

7.Создание команд.

Команды создаются в паблике
PHP код:
OnPlayerCommandText(playerid,cmdtext[]) 
Пример команды:

PHP код:
if(strcmp(cmdtext,"/command",true)= =0)
{
GameTextForPlayer(playerid,"command successfully!",1000,1);//мессага "command successfully!"
return 1;//конец команды

8.Создание новых пабликов.
Паблики создаются с помощью функции forward.
Пример:
PHP код:
forward TPublic();//записывается паблик с нулевой переменной 
Вообще же паблики с нулевой переменной создаются с создержимым ввиде функции for.
Её опишем в следующей главе.

9.Функция for(..) .
Функция for обычно используется для перебора одного параметра.
Пример
PHP код:
for(new i=0;i<MAX_PLAYERS;i++)
{
}

new i=0; - создание переменной i с параметром 0
i<MAX_PLAYERS - функция i может быть только до значения MAX_PLAYERS (256).
i++ - преобразование, перебираются все значения i от его начального до допустимого значения.
Пример:
for(new i=0;i<MAX_PLAYERS;i++)
{
SendClientMessage(i,0xFFFFFF,"message-to-all");//i значения - от 0 до 256 => иды - от 0 до 256 => мессага отправляется ВСЕМ!

10.Таймеры.
Таймеры обычно ставятся в ongamemodeinit. Пример:
PHP код:
public OnGameModeInit()
{
SetTimer("TPublic",1000,1);//TPublic - название паблик, 1000 - время в миллисекундах, через которое будет выполняться функция tpublic
//если 3й параметр - 1, то функция будет повторяться, если 0 - то функция будет выполняться только 1 раз