shape1
shape2
shape3
shape4
shape7
shape8

2. Введение - от !#Bush :)


Michael_Bush

Новичок
Пользователь
11.02.2018
0
8
0
Здравствуйте уважаемые друзья,вот и пришел тот момент когда я выкладываю свой 2-ой урок pawn-скриптинга. Ну что-ж,начнем.

В предыдущем уроке мы рассмотрели что за файлы в папке с сервером,теперь поговорим о самом главном - Для этого нам придется открыть свой мод ( .pwn ) Для этого мы заходим в папку с сервером - ищем папку pawno,далее заходим в программу "Pawno",и тут у нас открывается окошко где ничего нету - не проблема: В левом верхнем углу есть кнопка - File,жмем на нее и после жмем Open,у нас вышло окно - Указываем путь к самому серверу,а именно: Server\gamemodes\server.pwn. После когда мы открыли,у нас появляются много непонятных строк,и что же нам с вами делать? Ответ: Учить. 

Первое что нам бросается в глаза это #include - и #define. 

Что такое #include: 

1. Знак # означает - подключение.
2. После слова #include - У нас идет слово: #include test. Test - это само название инклуда,сам инклуд хранится в папке pawno\includes.
3. В инклуде хранятся часть данных такие как - Маппинг,цвета, и другое.
4. Чтобы подключить инклуд вам стоит всего-лишь поместить инклуд в папку ( pawno\include. ) и вписать в начало мода ( #include Название Инклуда ) и конечно же скомпилировать.

Что такое #define:

1. Знак # - подключение.
2. define упрощает работу скриптерам,а именно - в define можно хранить цвета т.к в pawno цвета формата: 0x00... Пример: #define COLOR_YELLOW 0x0.... ( 0x0.... - сам код цвета. ) Чтобы использовать #define - впишите в текст,пример: "sendclientmessage(playerid,COLOR_YELLOW,"Текст"); Теперь текст будет такого цвета который мы написали ( COLOR_YELLOW ). А так же в #define можно хранить диалоги - пример: #define DIALOG_HELP "1" ( 1 - Текст который будет содержаться в диалоге. ) А как именно #define использовать в диалоге - Ответ: когда мы написали нужный текст на месте "1" мы можем вставить его в код - Пример: ShowPlayerDialo(playerid,DIALOG_HELP ( название диалога с #define ).DIALOG_STYLE_INPUT,"Да","Нет");. В #define можно хранить и еще информацию,пример: #define SITE "Сюда Адресс сайта",чтобы подключить #define вам стоит просто в сообщение написать название #define - "SITE",пример: Наш форум "SITE" - и будет высвечиваться текст который вы написали вместо "Сюда Адресс сайта." ( можно это использовать не только для адресса и для имени главного администратора,ну вообщем используйте с фантазией )

И так,мы разобрали #include & #define - теперь идем ниже,там видим Forward: Форвард используется для создания public'a например: 
Forward test(playerid); // Запоминаем название и значение Форварда - на данный момент у нас test(playerid)
Паблик: 


public test(playerid) //  Пишем название Форварда и значение - public test(playerid)
{
// функция - например SendClientMessage.
return 1; // Переход.
} // Заставить использовать паблик можно так - ищем место где будет использоваться этот паблик,и вписываем test(playerid);



Что я этим хочу сказать - Форварды используются для public'ov но я советую создавать stock т.к для stock'ov не надо создавать Форварды. А так же в моде есть стандартные паблики и самописные.

Теперь о Stock'ax которые хранятся в конце модов:

Чтобы создавать сток нам не надо опять делать Форвард - просто стоит написать код:

 

stock test(playerid); // Сам Stock
{
// Тут пишем свою функцию.
} // Закрывем


вот и готов наш Stock - думаю проблем вам не составит его написать.

Теперь поговорим о самих public'ax.


OnGameModeInit()Загрузится скриптаOnGameModeExit()До того как скрипт завершает свою работуOnPlayerRequestClass(playerid, classid)Выбор класса персонажаOnPlayerConnect(playerid)При подключении к серверуOnPlayerDisconnect(playerid, reason)При отключении от сервераOnPlayerSpawn(playerid)При появлении на спавнеOnPlayerDeath(playerid, killerid, reason)При смерти персонажаOnVehicleSpawn(vehicleid)Когда транспорт спавнитсяOnVehicleDeath(vehicleid, killerid)Когда транспорт взрываетсяOnPlayerText(playerid, text[])При отправке игроком сообщения в чатOnPlayerCommandText(playerid, cmdtext[])При отправке игроком команды в чатOnPlayerEnterVehicle(playerid, vehicleid, ispassenger)При входе в т/сOnPlayerExitVehicle(playerid, vehicleid)При выходе с т/сOnPlayerStateChange(playerid, newstate, oldstate)При изменении своего статусаOnPlayerEnterCheckpoint(playerid)При входе в зону контрольной точкиOnPlayerLeaveCheckpoint(playerid)При покидание зоны контрольной точкиOnPlayerEnterRaceCheckpoint(playerid)При входе на гоночную контрольной точкиOnPlayerLeaveRaceCheckpoint(playerid)При покидание гоночной контрольной точкиOnRconCommand(cmd[])При вводе в консоль RCON командыOnPlayerRequestSpawn(playerid)При смене точки спавнаOnObjectMoved(objectid)При движении объектаOnPlayerObjectMoved(playerid, objectid)При движении объекта созданного для игрокаOnPlayerPickUpPickup(playerid, pickupid)При взятии пикапаOnVehicleMod(playerid, vehicleid, componentid)При модификации т/сOnVehiclePaintjob(playerid, vehicleid, paintjobid)При смене покраски т/с (не только цвета а также и винила)OnVehicleRespray(playerid, vehicleid, color1, color2)При смене цвета т/сOnPlayerSelectedMenuRow(playerid, row)При выборе пункта менюOnPlayerExitedMenu(playerid)При выходе из выбора пункта менюOnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)При смене интерьераOnPlayerKeyStateChange(playerid, newkeys, oldkeys)При нажатии на кнопкуOnRconLoginAttempt(ip[], password[], success)При заходе на сервер под видом RCON админаOnPlayerUpdate(playerid)Функция вызывается постоянно, пока игрок находится на сервереOnPlayerStreamIn(playerid, forplayerid)При входе в радиус видимости другого игрокаOnPlayerStreamOut(playerid, forplayerid)При выходе из радиуса видимости другого игрокаOnVehicleStreamIn(vehicleid, forplayerid)При въезде машины в радиус видимости другого игрокаOnVehicleStreamOut(vehicleid, forplayerid)При выезде машины из радиуса видимости другого игрокаOnDialogResponse(playerid, dialogid, response, listitem,inputtext[])При нажатии кнопка в диалоговом окнеOnPlayerClickPlayer(playerid, clickedplayerid, source)При нажатии на имя игрока в списке игроков

Выше указаны названия и функционал пабликов.

Каждые знают что в pawn-скриптинге используются основы математических операторов - а именно:



"*" - Умножение.
"+" - Сложение.
"/" -  Деление.
"-" - Вычитание.
"%" - Оператор модуля.

Но это еще не все,есть такие знаки которые вам пригодятся для написания кода - а именно:


== Левое равно правому.
!= Левое не равно правому.
> Левое больше право.
>= Левое больше или равно правому.
< Левое меньше правому.
&& И
|| Или
! Не.

На этом урок закончен. Строго не судите,писал на быструю руку т.к на работе.

Автор: !#Bush :) (Я).
 
Последнее редактирование модератором:

lEva-1

Новичок
Пользователь
02.04.2018
1
0
0
а если нету файла server а есть SRP

 

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
Не думаю, что автор заинтересуется этой темой в будущем, но для тех, кто хочет из нее что-то извлечь для себя, оставлю такой вот комментарий.

1. Знак # означает - подключение.
Прежде всего это директивы. А подключением занимаются лишь две директивы:

#include
#tryinclude

И #define вообще ничего не подключает. Он лишь выполняет замену одного на другое.

сам инклуд хранится в папке pawno\includes.
С путем ошиблись. Не includes, а include. Также может храниться и по пути:

корневая папка (папка с сервером)\include

но я советую создавать stock т.к для stock'ov не надо создавать Форварды
Вы не создаете stock, а лишь указываете маркер для данной функции. И stock рекомендуется использовать потому, что препроцессором функция с маркером stock исключается из процесса компиляции, если сама функция нигде не используется. Прежде всего это экономия памяти (ведь не нужно выделять память под данную функцию, поскольку ее просто не будет в AMX сервера).

"%" - Оператор модуля.
В pawn % - это деление с остатком. Для модуля pawn не предусматривает своих операторов. А потому существует макрос:

#define ABS(%0) (%0 < 0) ? (-(%0)) : (%0)

Насчет деления, вот пример работы с данным оператором:

SomeFunc()
{
new var = random(100);
if(var % 2 == 0)
printf("var делится на два без остатка");
if(var % 3 == 0)
printf("var делится на три без остатка");
else
printf("var без остатка не делится ни на два, ни на три");
}

есть такие знаки
Операторами это зовется. Операторы сравнения и логические операторы, если быть точнее.

@lEva-1, ну, открывайте значит SRP.

 
Последнее редактирование модератором: