Учебник скриптинга PAWN

Описание: Основы скриптинга
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 15 мая 2013, 18:23

Учебник скриптинга PAWN

1. Инклуды.

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

Код: Выделить всё

#include <a_samp>  
 Обычно это добавляют в начало мода.


2. Коменты (comments).

Синтаксис:

Код: Выделить всё

//комент    


Коментарии служат для записи текста, который будет пропускаться компилятором (т.е. он не будет на них обращать внимания).
Можно создать многострочный комментарий, например:

Код: Выделить всё

/*
 комент1
 комент2
 комент3
 */


Всё, что находится между /* и */, будет комментарием.

3.Паблики (publics).

Зона действия паблика: в скобках. Например:

Код: Выделить всё

public OnPlayerConnect(playerid) 
{ 
//сюда пишем всё, что должен выполнять паблик 
}


Каждый паблик имеет определённые параметры. Например: паблик onplayerconnect имеет параметр playerid. Playerid - id player's - ид игрока.

Описание наиболее распространённых пабликов:
public OnPlayerConnect(playerid) //выполняет функции, когда игрок коннектиться к серверу.
public OnPlayerCommandText(playerid,cmdtext[]) // ...когда игрок запускает некоторую команду, например: /help

public OnPlayerSpawn(playerid) //...когда игрок спавниться (отправляется на спавн).

public OnPlayerDeath(playerid,killerid,reason)//...когда игрок погибает.Параметры: playerid - тот, кто сдох, killerid - тот, кто убил, reason - причина убийства.

public OnGameModeInit() //сюда пишем обьекты, которые добавляются в gm/fs (авто, обьекты,классы игроков). Так же сюда записываются параметры мода. Например, UsePlayerPedAnims();

public OnFilterScriptInit()//то же, что и пред. паблик, только его обычно записываются в fs.

public OnPlayerText(playerid,text[]) // ...когда игрок пишет текст (советую не юзать =\ ).Параметры

public OnPlayerDisconnect(playerid,reason)//когда игрок выходит из игры.Параметр reason - причина.

public SetupPlayerForClassSelection(playerid)//cюда записывается всё, что касается выбора игрока ,когда он коннектиться (положение камеры, игрока и т.д.).

4. Функции (native functions).

Вот мы и перешли к нативным функциям! Каждая функция выполняет определённое действие и имеет определённые параметры. Например:

Код: Выделить всё

GivePlayerWeapon(playerid,24,100); 


Функция даёт игроку оружие.
Параметры:
playerid - ид игрока
24 - ид оружия
100 - количество патронов.
Т.к. 24 - ид дигла, то эта функция даёт игроку, вызвавшему эту функцию, дигл с 100 патронами.
Примечание: функция должна выполняться ТОЛЬКО в паблике, имеющем параметр playerid.

Описание наиболее известных функций:
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. Переменной можно присваивать определённое значение. Например:

Код: Выделить всё

new money=10


Переменные можно использовать при проверках, в параметрах функций. Пример такой функции:

Код: Выделить всё

GivePlayerMoney(playerid,money-11);//т.к. Money - 10, то игроку будут даваться деньги 10-11 т.е. будет забираться -1$   


Существуют переменные для игроков. Пример:

Код: Выделить всё

new abank[MAX_PLAYERS]=0


Т.е. у каждого игрока значением данной переменной является 0. НО: КАЖДОМУ игроку можно присвоить свою переменную! Пример:

Код: Выделить всё

abank[7]=5


Иду 6 присвоена значение 5.
Можно добавлять/отнимать некоторое значение к переменной. Пример:

Код: Выделить всё

abank[playerid]+=1;//добавлено к уже существующему значению 1 
abank[playerid]-=1;// минус 1 =) 
Можно пользоваться другой функцией. 
abank
[playerid]--;//-1 
abank[playerid]++;//+1   


6.Проверкa (if).

Проверка выполняется при помощи

Код: Выделить всё

f()
{
//в скобках}   


Если проверка выполнена успешно, то всё, что стоит в скобках, будет выполняться. Пример:

Код: Выделить всё

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


Допустимые знаки в функции if:

Код: Выделить всё

 >= больше или равно
 
<= меньше или равно
 
= = равно
 
> больше
 
< меньше


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

Код: Выделить всё

public OnPlayerConnect(playerid)//када игрок коннектиться 

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

else 
//иначе 

//ничего не происходит 



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

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

Код: Выделить всё

if(strcmp(cmdtext,"/command",true)= =0

GameTextForPlayer(playerid,"command successfully!",1000,1);//мессага "command successfully!" 
return 1;//конец команды 


8.Создание новых пабликов.

Паблики создаются с помощью функции forward. Пример:

Код: Выделить всё

forward TPublic();//записывается паблик с нулевой переменной 


Вообще же паблики с нулевой переменной создаются с создержимым ввиде функции for.

9.Функция for(..) .

Функция for обычно используется для перебора одного параметра. Пример:

Код: Выделить всё

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. Пример:

Код: Выделить всё

public OnGameModeInit() 

SetTimer("TPublic",1000,1);//TPublic - название паблик, 1000 - время в миллисекундах, через которое будет выполняться функция tpublic 
//если 3-ий параметр - 1, то функция будет повторяться, если 0 - то функция будет выполняться только 1 раз 
[center]i love you [s]mxIni[/s] Mysql[/center]


Вернуться в «Основы скриптинга»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей