Введение в pawno. - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
Введение в pawno.
[CM]DanteMoretty[CM] Дата: Среда, 02.08.2017, 19:28 | Сообщение # 1
Авторитет
Сообщений: 1104
Статус: Offline
Введение в pawno
.


Что такое pawno?

Pawno – скриптовый язык сервера SA-MP. Кроме того, словом «Pawno» часто называют редактор этого языка, который поставляется вместе с SA-MP сервером. Это очень простой редактор, который можно предложить большинству людей. Такие возможности, как подсветка синтаксиса, базовые опции запуска и панель, показывающая встроенные функции, делает pawno замечательным редактором для людей, которые создают небольшие режимы игры или дополнительные скрипты, и для тех, кто хочет отредактировать несколько мелких мест в существующем режиме игры. Создатель Pawno известен под ником Spookie.

Имея под рукой Pawno можно при желании создать практически любой скрипт для SA-MP. Все зависит лишь от Вашего желания, навыков и наличия свободного времени. Необходимость последнего, в свою очередь, обратно пропорциональна величине навыков. Если вы ни разу не занимались созданием pawn-скрипта, эта статья как раз для вас. Кончено, хорошо бы иметь какие-нибудь познания в программировании.


С чего начать?

Итак, запускаем Pawno, который находится в samp 0.3.7_R2_win32\pawno (зависит от версии сервера), и выбираем пункт File->New. В рабочем окне редактора отобразиться некий код. Это шаблон пустого фильтр-скрипта или гейм-мода. Посмотрим на него.


Код
// This is a comment  
  // uncomment the line below if you want to write a filterscript  
  //#define FILTERSCRIPT  

  #include <a_samp>  

  #if defined FILTERSCRIPT  

  public OnFilterScriptInit()  
  {  
  print("\n--------------------------------------");  
  print(" Blank Filterscript by your name here");  
  print("--------------------------------------\n");  
  return 1;  
  }  

  public OnFilterScriptExit()  
  {  
  return 1;  
  }  

  #else  

  main()  
  {  
  print("\n----------------------------------");  
  print(" Blank Gamemode by your name here");  
  print("----------------------------------\n");  
  }  

  #endif  

  public OnGameModeInit()  
  {  
  // Don't use these lines if it's a filterscript  
  SetGameModeText("Blank Script");  
  AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);  
  return 1;  
  }  

  public OnGameModeExit()  
  {  
  return 1;  
  }  

  public OnPlayerRequestClass(playerid, classid)  
  {  
  SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);  
  SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);  
  SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);  
  return 1;  
  }


И так далее….

Первые две строки являются комментариями. Комментарии начинаются с символов // и служат для подсказки программисту. Они игнорируются компилятором. Кроме того, комментарии используются для того, чтобы временно отключить какую-либо строчку кода (можно ее просто удалить, но тогда, при необходимости, придется писать заново). Так сделано в 3ей строке кода, чуть позднее разберем для чего.
В следующей строке директивой #include выполняется подключение к проекту файла a_samp.inc (из папки samp 0.3.7_R2_win32\pawno\include), содержащего основные функции, используемые в Pawno. Если интересно, можно посмотреть его содержимое, но менять ничего нельзя.

Ниже идет блок кода:


Код
#if defined FILTERSCRIPT  

  public OnFilterScriptInit()  
  {  
  print("\n--------------------------------------");  
  print(" Blank Filterscript by your name here");  
  print("--------------------------------------\n");  
  return 1;  
  }  

  public OnFilterScriptExit()  
  {  
  return 1;  
  }  

  #else  

  main()  
  {  
  print("\n----------------------------------");  
  print(" Blank Gamemode by your name here");  
  print("----------------------------------\n");  
  }  

  #endif


Он реализует условное добавление в проект некого кода. Первая его строка означает, что если определена переменная FILTERSCRIPT, то в скрипт будут добавлены строки ниже до строки #else, а в противном случае – строки ниже #else и выше #endif. Переменная FILTERSCRIPT определяется строкой #define FILTERSCRIPT, которая была взята в комментарий (то есть по умолчанию она не определена, так как скрыта от компилятора символами //). Теперь о том, для чего это все делается. Если вы пишете гейм-мод, то вам нужны только строки от #else до #endif, переменную FILTERSCRIPT вы не определяете и эти строки добавляются в проект. Если же вы пишите фильтр-скрипт, то Вам нужны строки ниже #if и до #else, то есть необходимо объявить переменную FILTERSCRIPT, убрав знаки //. Можно поступить проще, просто убрав всю эту #if #esle #endif конструкцию и вручную вставив нужные строки, а можно и вовсе их не вставлять, если они вам не нужны. Теперь разберем, что именно мы вставляем. Функции public OnFilterScriptInit() и main() делают почти одно и то же, но первая выполняется при загрузке скрипта, а вторая – при загрузке мода. Команда
print("мой текст");

Печатает текст в кавычках в консоль сервера ("\n” означает перевод курсора на следующую строку консоли).

Функция OnFilterScriptExit() выполняется при выгрузке скрипта из памяти.

Ниже идут все обработчики событий Pawno, называемые также пабликами (public). Когда в игре что-то происходит, например, игрок пишет сообщение в чат, вызывается соответствующий обработчик, в который через параметры передается нужная информация, например, ид игрока, написавшего в чат. При написании скрипта, даже большого, обычно не используются все обработчики, а лишь некоторые из них. В принципе, все написания скрипта сводится к написанию кода нужных обработчиков, ну и некоторых вспомогательных функций.


Первый скрипт

Чтобы не быть голословными, разберем пример. Напишем скрипт, который при вводе команды «!03 текст» печатает «ник: текст» красным цветом. Для этого определим код обработчика public OnPlayerText(playerid, text[]). Кроме того, определим функцию работы со строками strtok(const string[], &index), которая широко используется в pawno и ее код можно найти в сети, поэтому разбирать ее не будем. Отметим только, что она возвращает кусок строки string, который находится после символа с номером index и до ближайшего после index пробела. В нашем случае index равен 0, то есть функция вернет часть строки до первого пробела.

Полный код скрипта приведен ниже:


Код
#include <a_samp>  
  #define COLOR_RED 0xFF0000FF  

  public OnPlayerText(playerid, text[])  
  {  
  new txt[256];  
  new idx;  
  txt = strtok(text, idx);  
  if(!strcmp("!03", txt, true))  
  {  
  new mess[256];  
  new name[MAX_PLAYER_NAME];  
  GetPlayerName(playerid, name, MAX_PLAYER_NAME);  
  strmid(txt,text,4,strlen(text));  
  strcat(mess, name);  
  strcat(mess, ": ");  
  strcat(mess, txt);  
  SendClientMessageToAll(COLOR_RED,mess);  
  return 0;  
  }  
  return 1;  
  }  

  //=========================[Strtok]======================  
  strtok(const string[], &index)  
  {  
  new length = strlen(string);  
  while ((index < length) && (string[index] <= ' '))  
  {  
  index++;  
  }  
  new offset = index;  
  new result[20];  
  while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))  
  {  
  result[index - offset] = string[index];  
  index++;  
  }  
  result[index - offset] = EOS;  
  return result;  
  }


В строке #define COLOR_RED 0xFF0000FF мы определяем константу COLOR_RED, равную коду красного цвета.

Итак, разберем функцию public OnPlayerText(playerid, text[]). Она вызывается, когда игрок пишет что-либо в чат. При этом число playerid содержит id игрока, написавшего в чат, а строка text – текст его сообщения.
В самом начале строками new txt[256]; и new idx; объявляем переменные txt (строка длиной 256 символов) и число idx. В Pawno значение числа по умолчанию равно 0. Затем, строкой txt = strtok(text, idx); получаем часть строки text до первого пробела.
Функция strcmp("!03", txt, true) вернет значение 0, если строка "!03" равна строке txt. Третий параметр означает, что сравнение производится без учета регистра, хотя в нашем случае можно воспользоваться и значением false по умолчанию (в строке нет букв – только цифры и восклицательный знак). Далее условным оператором if проверяем равенство этой функции 0. (Оператор «!» означает отрицание, т.е. если strcmp("!03", txt, true) = 0, то ! strcmp("!03", txt, true) = 1 и выполняется код в {} под условным оператором). Тогда объявляем 2 строки: mess длиной 256 и name длиной MAX_PLAYER_NAME (макс. длина имени игрока).
Функцией GetPlayerName(playerid, name, MAX_PLAYER_NAME); записываем в переменную name ник игрока, id которого равен первому параметру (playerid). Функцией strmid(txt,text,4,strlen(text)-1); записываем в строку txt часть строки text начиная с символа 4 и до символа strlen(text), где strlen(text) возвращает длину строки text.
Функция strcat(mess, name); дописывает в конец строки (изначально пустую) строку name (ник игрока). Аналогично дописываем в к строке mess двоеточие и пробел, а также текст сообщения пользователя.
Функцией SendClientMessageToAll(COLOR_RED,mess); отправляем красным цветом строку mess в чат игрокам.
Командой return 0; выходим из обработчика OnPlayerText с возвратом кода 0, что означает, что этот обработчик в других фильтр-скриптах не будет вызываться.
Если strcmp("!03", txt, true) не равно 0, то код в {} под условным оператором не выполняется, и мы выходим из обработчик OnPlayerText с возвратом кода 1, командой return 1; Единица означает, что мы будем вызвать аналогичные обработчики в других фильтр скриптах. На этом обработчик OnPlayerText заканчивается. Далее идет описание функции strtok, описание которой можно найти в сети.


Если я что-то забыл, вы меня дополните. Жду ваши мнения и пожелания
smile


Помогаю новичкам!
По всем вопросам пишите в лс.

Способ:Как подставить агента ФБР на Самп рп.
http://cheat-master.ru/forum/73-691038-1
Трек про El_Capone!
http://cheat-master.ru/forum/163-704803-1
Как поднять онлайн сервера и как его удержать.
http://cheat-master.ru/forum/165-705613-1
Введение в pawno.
http://cheat-master.ru/forum/117-705767-1
Как пользоваться Map Construction
http://cheat-master.ru/forum/117-705826-1
Как зарабатывать на перепродажах бизнесов!
http://cheat-master.ru/forum/192-705828-1
Как подставить военного в армии!
http://cheat-master.ru/forum/73-706840-1
Что такое двухфакторная аутентификация?
http://cheat-master.ru/forum/21-707015-1


Сообщение отредактировал [CM]DanteMoretty[CM] - Среда, 02.08.2017, 19:30
nathan_animeshnik Дата: Среда, 02.08.2017, 20:49 | Сообщение # 2
Боец
Сообщений: 92
Статус: Offline
Ну зачет.
Все понятно описано, что поймет даже шарик.
Как раз для начинающих тема.
[CM]DanteMoretty[CM] Дата: Вторник, 15.08.2017, 09:20 | Сообщение # 3
Авторитет
Сообщений: 1104
Статус: Offline
Подниму!

Помогаю новичкам!
По всем вопросам пишите в лс.

Способ:Как подставить агента ФБР на Самп рп.
http://cheat-master.ru/forum/73-691038-1
Трек про El_Capone!
http://cheat-master.ru/forum/163-704803-1
Как поднять онлайн сервера и как его удержать.
http://cheat-master.ru/forum/165-705613-1
Введение в pawno.
http://cheat-master.ru/forum/117-705767-1
Как пользоваться Map Construction
http://cheat-master.ru/forum/117-705826-1
Как зарабатывать на перепродажах бизнесов!
http://cheat-master.ru/forum/192-705828-1
Как подставить военного в армии!
http://cheat-master.ru/forum/73-706840-1
Что такое двухфакторная аутентификация?
http://cheat-master.ru/forum/21-707015-1


Сообщение отредактировал [CM]DanteMoretty[CM] - Вторник, 15.08.2017, 09:20
INHUМAN Дата: Вторник, 15.08.2017, 13:13 | Сообщение # 4
Боец
Сообщений: 186
Статус: Offline
Урок неплохо разжеван для начинающих, но к сожалению в 2017 году таких гайдов слишком много

[CM]DanteMoretty[CM] Дата: Среда, 06.09.2017, 04:36 | Сообщение # 5
Авторитет
Сообщений: 1104
Статус: Offline
Подниму!

Помогаю новичкам!
По всем вопросам пишите в лс.

Способ:Как подставить агента ФБР на Самп рп.
http://cheat-master.ru/forum/73-691038-1
Трек про El_Capone!
http://cheat-master.ru/forum/163-704803-1
Как поднять онлайн сервера и как его удержать.
http://cheat-master.ru/forum/165-705613-1
Введение в pawno.
http://cheat-master.ru/forum/117-705767-1
Как пользоваться Map Construction
http://cheat-master.ru/forum/117-705826-1
Как зарабатывать на перепродажах бизнесов!
http://cheat-master.ru/forum/192-705828-1
Как подставить военного в армии!
http://cheat-master.ru/forum/73-706840-1
Что такое двухфакторная аутентификация?
http://cheat-master.ru/forum/21-707015-1


Сообщение отредактировал [CM]DanteMoretty[CM] - Среда, 06.09.2017, 04:36
RemonT Дата: Понедельник, 11.09.2017, 16:00 | Сообщение # 6
Новичок
Сообщений: 20
Статус: Offline
Хороший,спасибо

LIVE:
Про меня на BPM:https://youtu.be/IebwdgDBgbY?t=517
NEAZZ123 Дата: Понедельник, 11.09.2017, 20:50 | Сообщение # 7
Боец
Сообщений: 258
Статус: Offline
Можно тупо pawnbook (или как его там) прочитать, там вся инфа есть.



[PAWN] Добавление новых скинов и моделей

[Программа] AvatarGenerator
[FPS UP] FPS UP by Neazzy
[Программа] SA-MP CFG EDITOR
BATYAN[CM] Дата: Пятница, 22.12.2017, 14:30 | Сообщение # 8
Боец
Сообщений: 51
Статус: Offline
Ну зачет,надо больше таких темок
Все понятно описано, что поймет даже ребенок
Как раз для начинающих тема.


Мой ВК - vk.com/id436319081
Мочалка Дата: Четверг, 28.12.2017, 01:36 | Сообщение # 9
Любитель
Сообщений: 44
Статус: Offline
Pawno – скриптовый язык сервера SA-MP

После этого перестал читать дальше..

Pawn - скриптовый язык.
Pawno - программа, через которую ты открываешь pwn файлы и редачишь их.


VIPshot Дата: Вторник, 02.01.2018, 13:25 | Сообщение # 10
Продавец WoT
Сообщений: 244
Статус: Offline


[url=https://vk.com/id435924240][img]https://pp.userapi.com/c846016/v846016369/397e2/rJGxG84iOXE.jpg[/img][/url][url=http://cheat-master.ru/shop/user/691909/goods][img]https://pp.userapi.com/c846016/v846016369/397e9/nJuAMvYS8ys.jpg[/img][/url][url=http://cheat-master.ru/forum/137-722186-1][img]https://pp.userapi.com/c846016/v846016369/397f0/7w8IyqOl7rQ.jpg[/img][/url]
[CM]DanteMoretty[CM] Дата: Понедельник, 09.04.2018, 11:47 | Сообщение # 11
Авторитет
Сообщений: 1104
Статус: Offline
Подниму

Помогаю новичкам!
По всем вопросам пишите в лс.

Способ:Как подставить агента ФБР на Самп рп.
http://cheat-master.ru/forum/73-691038-1
Трек про El_Capone!
http://cheat-master.ru/forum/163-704803-1
Как поднять онлайн сервера и как его удержать.
http://cheat-master.ru/forum/165-705613-1
Введение в pawno.
http://cheat-master.ru/forum/117-705767-1
Как пользоваться Map Construction
http://cheat-master.ru/forum/117-705826-1
Как зарабатывать на перепродажах бизнесов!
http://cheat-master.ru/forum/192-705828-1
Как подставить военного в армии!
http://cheat-master.ru/forum/73-706840-1
Что такое двухфакторная аутентификация?
http://cheat-master.ru/forum/21-707015-1
baron- Дата: Понедельник, 25.06.2018, 17:52 | Сообщение # 12
Боец
Сообщений: 89
Статус: Offline
Спасибо

Продавец на высоте.
ZiL-131 Дата: Пятница, 06.12.2019, 13:07 | Сообщение # 13
Боец
Сообщений: 190
Статус: Offline


Топ продавец рандом аккаунтов! С 2019 года! Более 2500+ успешных продаж!

По всем вопросам мои данные:
[В]Контакте: vk.com/man_ford (Остерегайтесь фейков!)
Отсутсвует вк? В данном случае мой Instagram "traveler_716"
Личные сообщения сайта не просматриваю!
  • Страница 1 из 1
  • 1
Поиск: