Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

6 уроков о pawno

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

zindo

Компетентный
Урок 1
Начинаем первый урок. Скриптинг Samp происходит в Pawno. Pawno это программа компилирующая pwn (изменяемый файл будущего скрипта) в amx (сам скрипт) и для изменения первого. Открыв какой-нибудь скрипт мы видим множество надписей и цифр. Разберем что же они значат. Откроем new.pwn. Начнём разбирать самое простое.


Это установка название нашего режима.

PHP:
public OnGameModeInit() 
{ 
print("GameModeInit()"); 
SetGameModeText("Blank Script"); 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; 
}
это скобочки открытия/закрытия.

PHP:
{ и }
Это сообщение на сам сервер.
PHP:
printf("GameModeInit()"); 
SetGameModeText("Blank Script");
Это добавление спавна(скина). Первый 0 это ID скина, следующие 4 числа это координаты, остальные 6 нулей это оружие и их патроны.
PHP:
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
Это конец
PHP:
return 1;
Это паблик в котором содержится все вышеперечисленное, их мы пока трогать не будем.
Каждый паблик выполняет свою задачу, можно создавать свои паблики и засунуть туда определенные действия и сделать чтобы они выполнялись в нужный момент. Это сложновато, поэтому не будем пока об этом. Можно задавать определенные действия например при подключении, спавне.

PHP:
public OnGameModeInit()
найдём
PHP:
public OnPlayerDeath(playerid, killerid, reason) 
{ 
printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); 
return 1; 
}
и переделаем на
PHP:
public OnPlayerDeath(playerid, killerid, reason) 
{ 
SendClientMessage(playerid, 0xFFFF00AA, "Вы погибли"); 
printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); 
return 1; 
} 
SendClientMessage(playerid, 0xFFFF00AA, "Вы погибли");
Сработает как сообщение в чат
PHP:
"Вы погибли" (без кавычек) 0xFFFF00AA
Далее ищем вверху синий треугольник и жмем на него. Должна произойти компиляция и появится текст:
Pawn compiler 3.0.3367 Copyright © 1997-2005, ITB CompuPhase
Если надпись отличается то есть какие-то ошибки, в этой надписи будет указано в каких именно строчках есть таковые. Ну про это тоже позже. Дальше, заходим в папку с сервером и открываем server.CFG и меняем там строчку(и) gamemode0(или другие числа) на gamemode0(если другие числа то строчку можно удалить она нам не понадобится) new 1 и включаем samp-server.exe.
Дальше идём в папку San Andreas,открываем samp_debug.exe и там жмем connect lokalhost,мы заходим на сервер и проверяем скрипт. Если все сделано верно то после смерти (можно написать /kill) мы увдим надпись в чате "Вы умерли" (без скобок) жёлтого цвета,то все сделано верно, если нет то внимательно проверьте скрипт.

Урок 2

Делаем телепорт, вообщем простенько но может кому пригодится.

PHP:
// Command: /Teleport 
if(strcmp(cmdtext, "/Teleport", true)==0) 
{ 
new vehicleid = GetPlayerVehicl eID(playerid); 
new State = GetPlayerState(playerid); 
if(IsPlayerInAnyVe hicle(playerid) && State == PLAYER_STATE_DR IVER) 
{ 
return SetVehiclePos(vehicleid,Координаты X,Y.Z ), 
GameTextForPlay er(playerid, "~w~Ваше Сообщение после телепорта", 5000, 5); 
} 
SetPlayerPos(playerid,Координаты X,Y.Z); 
GameTextForPlay er(playerid, "~w~Ваше Сообщение после телепорта!", 5000, 5); 
return 1; 
}
И всё это вставляем в в паблик:
PHP:
public OnPlayerCommand Text(playerid, cmdtext[])
Урок 3

Расставим транспорт и респауны.

Сейчас начнем осваивать координаты, где достать куда ставить. В папке San-Andreas'а ищем файл samp_debug.exe (желательно сделать ярлык и поставить его в папку сервера) и нажать кнопку Launch Debug. Начнет загружатся игра и вы окажетесь в Los Santos. В этом режиме вы сможете находить нужные вам координаты. Используйте команды /vsel для выбора транспорта. /save <примечание> сохранение координат. Встаньте там где нужно сохранить координаты и используйте команду; F11 и F12 прокрутка скинов вперед и назад соответственно. Далее находим файл savedpositions. txt в папке San Andreas'а (тоже желательно сделать ярлык в папку с сервером) и смотрим там:

Если вы сохраняли координаты находясь пешком у вас должно быть:
PHP:
AddPlayerClass(0,1496.7302,1438.9197,10.8281,115.1 985,0,0,0,0,0,0); // spawn 
Если на авто:
PHP:
AddStaticVehicle(494,1505.4323,1450.9718,10.7365,3 57.1130,36,13); // hotring Дальше поставим координаты в наш скрипт:
Ищем
PHP:
public OnGameModeInit() 
{ 
print("GameModeInit()"); 
SetGameModeText("Blank Script"); 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); 
return 1; 
}
и переделываем на
PHP:
public OnGameModeInit() 
{ 
print("GameModeInit()"); 
SetGameModeText("Blank Script"); 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); 
return 1; 
}
Внимание ставьте свои координаты из savedpositions. txt!

Урок 4

как сделать на своем сервере выдачу оружия ниже приведу пример


PHP:
#include <a_samp>

public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/mp5",true) == 0) {  //Условие на ввод команды /mp5
 GivePlayerWeapon(playerid,WEAPON_MP5,100); //Тут указано оружие и количество патронов
 return 1;
}
Можно так же сделать комплект оружия при вводе команды /weapons,ну и или вы по желанию вписываете свою команду.

PHP:
#include <a_samp>
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/weapons",true) == 0) {  //Условие на ввод команды
 GivePlayerWeapon(playerid,WEAPON_PISTOL,100);//100 отвечает за то сколько игроку будет выдано патрон.
 GivePlayerWeapon(playerid,WEAPON_MP5,100);
 GivePlayerWeapon(playerid,WEAPON_SHOTGUN,100);
 GivePlayerWeapon(playerid,WEAPON_AK47,100);
 GivePlayerWeapon(playerid,WEAPON_M4,100);
 GivePlayerWeapon(playerid,WEAPON_SNIPER,100);
 return 1;
}
Урок 5

Цвет банд

Сначало ищим:
PHP:
public SetPlayerToTeam Color(playerid)
Там видим строки:
PHP:
if(IsPlayerConnect ed(playerid)) 
{ 
SetPlayerColor

Чтобы сделать цвет банды нам надо просто добавить строки:
SetPlayerColor((PlayerInfo[playerid][pMember]== 4 || PlayerInfo[playerid][pLeader] == 4),0xFFFF00AA);

Что выделено зеленым это - какая фракциия(id) будет таким цветом , а то что выделено синим цветом это цвет.
И так несколько раз( смотря для сколько банд вы поставите)


Урок 6
Телепорт по пикапу


Где все new(переменные) пишем


PHP:
new teleport;
Далее в поиске ищем
PHP:
public OnGameModeInit()
и вставляем там:

PHP:
teleport = CreatePickup(1274,1,x,y,z);
Поясняю 1274 - это ID пикапа, 1 - это тип пикапа, x,y,z - это координаты вашего местоположения пикапа

Ищем
PHP:
OnPlayerPickUpPickup(playerid, pickupid)
и туда вставляем:

PHP:
if(pickupid == teleport)//проверка встал ли игрок на Pickup.
{ 
SetPlayerInteri or(playerid, 0); 
SetPlayerPos(playerid,x,y,z); 
SendClientMessage(playerid, 0xFF0000FF, "Ты телепортировался в нужную точку"); 
}
Поясняю:
PHP:
 SetPlayerInteri or(playerid, 0);
- этим вы задаёте интерьер игроку, 0 это улица, пишите свой интерьер
PHP:
SetPlayerPos(playerid,x,y,z);
- этим вы задаёте местоположение игрока. XYZ это ваши координаты куда он будет телепортироваться
PHP:
SendClientMessage(playerid, 0xFF0000FF, "
Ты телепортировался в нужную точку"); - это сообщение при телепортации. Можно убрать

Всем спасибо за просмотр:),урок сделан для новичков в Pawno.

Автор: Jul

Решил дополнить урок.

7 урок.

Что такое лестница? Она легка в использовании.
В программировании по сути, выполняет те же самые функции.
Наверняка вы заметили, что большинство строк в коде отодвинуты в правую сторону.
Это расстояние (пробелы) между левым краем и строкой и являются частями лестницы.
Чем "глубже" код, тем больше расстояние. Именно это упрощает понимание кода.

лестница показывает к чему относится тот или иной код.
Например, у нас есть проверка if(какие-то параметры), и в ней тоже какой-то там код.
Этот код относится к нашей проверке, и его мы должны отодвинуть вправо.
Чтобы это сделать, необходимо выделить перемещаемый код и нажать на 'TAB'
Выделенный код отодвинулся вправо и теперь мы видим, что он относится к этой проверке.
Это должен понять человек, который совсем не понимает в программировании.

В основном код пабликов (колбэков) состоит из постоянных проверок. Получается, нам придется
отодвигать код каждой проверки, но за то в итоге паблик будет выглядит разборчиво и без Warning.

Если вы уже скачали мод для обучения и уже попробовали скомпилить его, то получили такие предупреждения:


PHP:
C:\...\gamemodes\Education.pwn(137) : warning 217: loose indentation 
C:\...\gamemodes\Education.pwn(146) : warning 217: loose indentation
Именно они связаны с лестницей, вернее, с ее отсутствием. Но не переживайте, прочтите урок и всё исправите.


урок 8.

" Практика "

Рассмотрим использование "лестницы" на конкретном примере в виде команды
PHP:
"/restart"
Самая обычная команда, и если вы найдете ее в нашем моде, то увидите:

PHP:
if(strcmp(cmd, "/restart", true) == 0) 
{ 
if(IsPlayerConnected(playerid)) 
{ 
GameModeExit(); 
} 
return 1; 
}
Код выглядит совсем плохо, да и к тому же с ним будет удобно работать при необходимости.
Как вы знаете, if - это проверка, а в скобках указываются какие-то необходимые параметры.
В них мы сейчас вникать не будем, но в коде четко видно, что все команды располагаются на
расстоянии в 1 таб от левого края. Это связано из-за того, что этот код принадлежит к
PHP:
public OnPlayerCommand Text(playerid, cmdtext[])
и поэтому весь код внутри него табулирован.
В следствии этого мы полностью выделяем нашу команду и пока нажимаем на TAB 1 раз.
Теперь она имеет такое же расстояние, как и другой код(другие команды) этого колбека.

Затем четко видна проверка самой команды:
PHP:
if(strcmp(cmd, "/restart", true) == 0)
После нее открывается фигурная первая скобка
PHP:
"{"
, которая как бы показывает начало области этой проверки.
Раз есть скобка, показывающая начало, то и должна быть скобка, показывающая конец.
Логично предположить: первая скобка с начала показывает начало, а первая скобка с конца - конец.
Эти две скобки остаются на своем законном месте, а код, который находится между ними,
мы выделяем и, угадайте что мы с ним делаем? Выделяем и так же нажимаем на TAB (1 раз).

В итоге у нас получилось:

PHP:
if(strcmp(cmd, "/restart", true) == 0) 
         { 
                if(IsPlayerConnected(playerid)) 
                { 
                GameModeExit(); 
                } 
                return 1; 
         }
Всего в нашей команде 2 проверки.
Первый раз мы протабулировали всю команду, т.к. она лежит в колбэке.
Второй раз - код внутри первой проверки.
У нас осталась еще одна проверка, код в которой мы не табулировали.
Это проверка
PHP:
if(IsPlayerConnected(playerid))
Между скобок этой проверки лежит одна единственная функция, которая занимается рестартом сервера.
Ну ладно, пусть будет функция. Опять же выделяем ее, при этом скобки не трогаем, и нажимаем TAB.
Команда протабулирована полностью. Теперь вам осталось сравнить мои и ваши результаты:

PHP:
if(strcmp(cmd, "/restart", true) == 0) 
         { 
                if(IsPlayerConnected(playerid)) 
                { 
                      GameModeExit(); 
                } 
                return 1; 
         }
Если все сходиться, то вы, должно быть, поняли, что есть "лестница", она же табуляция, в программировании.

Удачи вам с программированием.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу