Sign in to follow this  
Followers 0
Donaldo_Farekelka

Начало работы с Pawn

14 posts in this topic

Начнем наш урок. Что такое павно?

Павно язык программирования используемый в SAMP для создание мода и файл скриптов(ФильтрСкриптов)!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Далее! есть в павно при скачке любого мода Include что это такое? Это файлы в котором содержатся функции, например подключения функции к моду(Павно) #include <streamer> #include <mail>. Без их подключение мод работать не будет!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Если сервер при компл павно не тянет попробуйте в начале/ в конце мода встать main(В инете)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Есть простые функции павно : print- отправляет строку в консоль сервера!

Пример: 

main()
{
	print("Hello, World!");
}

Функция - printf отправляет форматированную строку  в консоль сервера!

Для форматирования используются следующие заполнители:
%b — двоичная система счисления
%c — один символ
%d — целое число
%f — дробное число
%i — целое число
%s — строка
%x — шестнадцатеричная система счисления
%% — знак %

Пример:

Main()
{
	new x = 1;
	printf("x = %d",x);
}

                                                                                                  Авторские права функций: ziggi — blog

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Цикл- позволяет бесконечно кол-во раз выполнять одно и тоже действие!(Смотря какой while или к примеру do. while).

Например код без цикла:
 

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

Код с циклом:

new 8;

while(a++) < 10)

{

       SendClientMessage(playerid, 0xFFFFFFFFFFFFFF,"");

}

2 явно проще, бывают несколько циклов:

while - в общих чертах будет вести цикл до бесконечности 

for -  Упрощенный вид while, действует с интервалом 

do...while -  Выполняются сначала основное потом остальное, while же идет все по порядку!

swith...case -  Какую значительную переменную поставите то и будет.

Для окончания цикла используется оператор Break

for(new a; a < 50; a++)
{
if(a == 10 && GetPlayerMoney(a) == 100) //Если у игрока под ID 10 имеется ровно 100 долларов
{
break; //Завершаем действие цикла
      }
}

Бесконечный цикл указывается через for и если не указать условие!

                                                                                              Авторские права циклов: Dymov1203

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Share this post


Link to post
Share on other sites
В 09.01.2022 в 13:45, Donaldo_Farekelka сказал:

Начнем наш урок. Что такое павно?

Павно язык программирования используемый в SAMP

Прошу, в следующий раз перед созданием уроков посети гугл...

Павно - это программа для редактирования кода.

А вот уже PAWN - сам язык программирования.

+ инклуды создают из себя набор функций (нативов) только в связке с плагинами (streamer.inc + stramer.dll / .so)

А все оставшиеся инклуды - дополнения 

Share this post


Link to post
Share on other sites
0xFFFFFFFFFFFFFF, what?

Share this post


Link to post
Share on other sites

@glvde. Только увидел))

@Donaldo_Farekelka на будущее:

0xFF0000AA - красный цвеТ, теперь разбор:

0x - обозначение цвета вне кавычек и т.д.

FF0000 - HTML-код цвета

AA - прозрачность

ВСЁ, после икса только 8 символов

Share this post


Link to post
Share on other sites

Смешно, на самом деле, смотреть на то, как новички пытаются делать какие-либо уроки, не видя элементарных ошибок в коде и в тексте.
Не знаю, какую цель вы тем самым преследуете, но мой вам совет - прекращайте 

"(Смотря какой while или к примеру do. while).". Этот отрывок вообще убил:

 

Спойлер

new 8// - что это?

while(a++) < 10// - вторая скобка, откуда она и зачем? использование цикла неверное.
{
       SendClientMessage(playerid, 0xFFFFFFFFFFFFFF,""); // - 0xFFFFFFFFFFFFFF, что?
}

//

//нормальный, адекватный пример:
new a;

while(a++ < 10) {
    SendClientMessage(playerid, 0xffffffff" ");
}

 


Убедительная просьба к автору: Вы если копируете, то копируйте хотя-бы правильно.

 

Share this post


Link to post
Share on other sites
2 минуты назад, glvde. сказал:

Убедительная просьба к автору: Вы если копируете, то копируйте хотя-бы правильно.

 

Наверное, лучше попросить автора вообще воздержаться копирований, а попробовать сделать все самостоятельно: возможно, и сам что-нибудь новое для себя откроет.

Share this post


Link to post
Share on other sites

Кхм, нашнем нашу беседу значит по полочкам: 

@Cawfee Согласен( не совсем )

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

А так-же были оставлены ссылки на темы(авторские права)

придраться не к чему, но люди же найдут к чему хоть и не к чему (Слово удалено системой)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

@glvde. Убедительная просьба: купить мозги, если не понял перейди по ссылке основной где я взял тему, ПОЧЕМУ ИМЕННО НАДО ЕСЛИ НЕ ПОНЯЛ ИДТИ И ОБСИРАТЬ ТЕМЫ?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

@Sleash`en Спасибо.

 

Edited by Donaldo_Farekelka

Share this post


Link to post
Share on other sites
В 09.01.2022 в 13:45, Donaldo_Farekelka сказал:

main() { print("Hello, World!"); }


Идеально. На этом пожалуй и закончим. ;)
 

В 09.01.2022 в 13:45, Donaldo_Farekelka сказал:

Для форматирования используются следующие заполнители: %b — двоичная система счисления %c — один символ %d — целое число %f — дробное число %i — целое число %s — строка %x — шестнадцатеричная система счисления %% — знак %


Не все перечислили. 

 

В 09.01.2022 в 13:45, Donaldo_Farekelka сказал:

Пример:


Main()
{
	new x = 1;
	printf("x = %d",x);
}


Идеальный пример. :bravo:

 

35 минут назад, Donaldo_Farekelka сказал:

Убедительная просьба: купить мозги, если не понял перейди по ссылке основной где я взял тему, ПОЧЕМУ ИМЕННО НАДО ЕСЛИ НЕ ПОНЯЛ ИДТИ И ОБСИРАТЬ ТЕМЫ?


Вы хотя-бы понимаете часть кода которую вы написали, прежде чем кого обвинять ? 

Лучше-бы вы хоть чуть чуть прочитали основы, прежде создавать такой хлам. 2022 год на дворе, в интернете полным полно информации, даже больше чем надо, так почему-бы не воспользоваться ? Так нет, мы будем дальше создавать свои МеГаКрУтЫeМоДы которые поломаются за считанные секунды.

Edited by LoX_1337

Share this post


Link to post
Share on other sites

На самом деле выскажу своё мнение, на счет некоторых очень крутых комментаторов, которые умеют только комментировать, человек в какой то мере все-ровно постарался, да возможно у него недостаточно навыков, и он взял код с интернета, он только учиться, но все-же, да есть адекватные комментаторы, которые указывают на ошибки, ну есть такие которым лишь бы показать своё я, какой я тру кодер, и всезнающий, за счет недостаточно опытных поднять своё самооценку, очень сильно, прям молодцы! Нет, чтобы поддержать, помочь человека, мы лучше его будет засирать, не буду говорить о ком этот весь текст, я думаю они сами поймут) 

Edited by danya_white

Share this post


Link to post
Share on other sites
24 минуты назад, danya_white сказал:

да возможно у него недостаточно навыков, и он взял код с интернета, он только учиться, но все-же


Нету слов. Откуда берутся ваши мысли - неизвестно. 

 

24 минуты назад, danya_white сказал:

ну есть такие которым лишь бы показать своё я, какой я тру кодер, и всезнающий


Можете аргументировать свои слова ? (желательно с доказательствами)

 

24 минуты назад, danya_white сказал:

Нет, чтобы поддержать, помочь человека, мы лучше его будет засирать, не буду говорить о ком этот весь текст, я думаю они сами поймут) 


Так может люди не будут принимать заказы ? Сядем и будем отвечать как попугаи одно и тоже, чтобы мир полностью отупел. Вместо того чтобы хотя-бы чуть-чуть пошевелить мозгами и зайти в интернет. Действительно, хорошая идея danya_white, без вас мы бы не додумались.

Edited by LoX_1337

Share this post


Link to post
Share on other sites
9 минут назад, LoX_1337 сказал:


Нету слов. Откуда берутся ваши мысли - неизвестно. 

 


Можете аргументировать свои слова ? (желательно с доказательствами)

 


Так может люди не будут принимать заказы ? Сядем и будем отвечать как попугаи одно и тоже, чтобы мир полностью отупел. Вместо того чтобы хотя-бы чуть-чуть пошевелить мозгами и зайти в интернет. Действительно, хорошая идея danya_white, без вас мы бы не додумались.

Не видел не одной вашей работы на этом форуме, и я же не сказал что речь идет именно о вас, просто относиться нужно с понимаем к человеку, я думаю критиковать человека, который мало в этом понимает, как говориться предложите свои варианты, а не просто напишите "Идеальный пример" как вы сделали, низко очень, я просто высказал свою позицию, согласны вы, нет, мне все-ровно честно, свои навыки нужно делом показывать, а не словами)

Edited by danya_white

Share this post


Link to post
Share on other sites
12 минут назад, danya_white сказал:

Не видел не одной вашей работы на этом форуме


Это имеет смысл ? Все простые работы уже есть в интернете, делать миллионную копию нет желание. Масштабные работы для публичного доступа бессмысленны. Вы действительно ничего не понимаете ? 

 

12 минут назад, danya_white сказал:

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


А они и не пытаются понимать. Такие личности всё время хотят на халяву. Им ваши слова, как листик на деревне, висел висел и упал. Такие элементарные вещи уже в интернете миллион лет, они проста не хотят прикладывать усилия или вы это не понимаете ? 

 

12 минут назад, danya_white сказал:

а не просто напишите "Идеальный пример" как вы сделали, низко очень


Я его как-то оскорбил или унизил этими словами ?

 

12 минут назад, danya_white сказал:

свои навыки нужно делом показывать, а не словами)


А кто говорил, что я хочу демонстрировать свои навыки ?

Edited by LoX_1337

Share this post


Link to post
Share on other sites
6 минут назад, LoX_1337 сказал:


Это имеет смысл ? Все простые работы уже есть в интернете, делать миллионную копию нет желание. Масштабные работы для публичного доступа бессмысленны. Вы действительно ничего не понимаете ? 

 


А они и не пытаются понимать. Такие личности всё время хотят на халяву. Им ваши слова, как листик на деревне, висел висел и упал. Такие элементарные вещи уже в интернете миллион лет, они проста не хотят прикладывать усилия или вы это не понимаете ? 

 


Я его как-то оскорбил или унизил этими словами ?

 


А кто говорил, что я хочу демонстрировать свои навыки ?

А смысл тогда от всего этого, я думаю если вы его критикуете, то должны своё что-то предложить, а так просто ну незнаю, бредятина какая то получается)

Edited by danya_white

Share this post


Link to post
Share on other sites

@danya_white Перечитайте внимательно мои сообщения и поймёте весь смысл. :(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • DEST
      By DEST
      Командный процессор: zcmd / dc_cmd + sscanf.
       
    • Daniil Korochansky
      By Daniil Korochansky
      Здравствуйте. Я заметил что нет нормальных полноценных IDE для Pawn, большинство IDE какие-то багованнные, выскакивают разнообразные ошибки, в "Extreme Studio" к примеру. А в Pawno работать не удобно и в нём довольно скудный функционал. Ну вот.
       
      Вот, сейчас я разрабатываю IDE которое называется "Spawn"(Samp pawn), которое потом будет много раз тестироваться, чтобы минимизировать самые разные ошибки если они будут. Когда будет закончена основа IDE, программа будет разрабатывать по предпочтениям пользователей/скриптеров, чтобы они хотели увидеть в программе, а там я уже буду решать реально ли требуется это программе или нет.
      Главная цель программы по максимуму упростить разработку серверов SAMP.
      Также программа будет как для Windows так и для Linux.
      Распространяться будет по лицензии GPL с закрытым исходным кодом. 
       
      Я немного опишу что можно будет делать в в программе, что уже реализовано и что хочу сделать:
       - Уже закончена работа над графической частью с которой взаимодействует пользователь(Меню, панель инструментов, диалог настроек, редактор и т. д.)
      - Реализована подсветка синтаксиса Pawn
      - Файлы будут открываться в вкладках редактора
      - Реализована "Карта документа (Document map)" в правой стороне редактора с которой можно взаимодействовать(прямо как Sublime Text)(В настройках можно будет скрыть)
      - Автоматическое закрытие скобок -> {}() ""
      - Подсветка скобок которые взаимосвязаны между собой, на которые указал пользователь курсором.(Настраивается)
      - Будет реализованы подсказки вызова(Call Tips) и авто-дополнение кода.
      - Реализована настройка подсветки языка и настройка шрифта
      - Live templates(Живые шаблоны)
      - Поддержка компиляторов от SAMP Team, Zeex и модификацией Zeex(которая на удивление очень быстро компилирует исходники) и конечно же переключение между ними
      И многое другое. 
       
      Есть сообщество Spawn, там можно найти так называемую статью "Roadmap"(или Карта разработки) которая регулярно обновляется, там так же отмечается что уже закончено.
      Сообщество: https://vk.com/spawnsoftware
    • Antoxa39
      By Antoxa39
      Привет! Кто не знает, я разрабатываю мод Guard RP. Вот ссылочка,жмякайте!
      Кто нибудь может написать какие работы добавить, оригинальные идеи возьму) На данный момент планируется обновление: Автосалон, автошкола,работы.
      Первых два пункта есть, да и есть 2 работы, это на Лесопилки ( без анимаций ), и почтальон.  Но все же хотелось бы больше. Жду предложений)
    • Antoxa39
      By Antoxa39
      Дратути,я научился делать регистрацию, и хочу поделится со всеми как это сделать им самим.
      1.Нам потребуется: Denwer или Open Server. ( Урок про подключение я делал ранее, так что обьяснять сейчас что и как делать для подключения не буду, но урок можно посмотреть тут)
      2.MySQL R39-6.
      3. Прямые руки.
      4. Переходим к процессу.
      //P.S БД - База Данных
      Делаем подключение к БД.
      main(){} #include <a_samp> #include <a_mysql> #include <Pawn.CMD> #include <sscanf2> #include <streamer> #include <time> //--------------   SQL     ---------------------- new dbHandle; #define MYSQL_HOST "127.0.0.1" #define MYSQL_USER "mysql" #define MYSQL_BD "urok" #define MYSQL_PASSWORD "mysql" //------------------------ public OnGameModeInit() {     dbHandle = mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_BD,MYSQL_PASSWORD);     CheckConnectSQL();     return 1; } public OnGameModeExit() {     return 1; } stock CheckConnectSQL() {     if(mysql_errno()) printf("Подключение к БД %s прервалось. Код ошибки: %d",MYSQL_BD,mysql_errno())     else printf("Подключение к БД %s успешно!",MYSQL_BD)     return 1; }
      Подключение сделано.
      Далее мы должны сделать такое: Когда игрок заходит на сервер, нужно проверить есть ли игрок с таким Никнеймом в БД.
      Делаем массив,который будет хранить в себе пароль,имя игрока. ( сделаем еще и уровень ).
      // перед --------------   SQL     ---------------------- создаем enum //Enum - это вещь, позволяющая создавать большее количество адресов одной переменной enum pInfo{     pID,     pNick[24],     pPassword[32],     pLevel } new Player[MAX_PLAYERS][pInfo];//Мы обьявили переменную,которая будет хранить в себе наш Enum. Идем создавать БД.
      1.
      2.
      3.
      4.
      5. Идем обратно к скриптингу
      И вот тут, мы сделаем проверку есть ли в БД аккаунт с таким никнеймом.
      public OnPlayerConnect(playerid) {     GetPlayerName(playerid,Player[playerid][pNick],MAX_PLAYER_NAME);//Мы записали ник игрока в массив pNick.     new query[100];//создаем переменную с запросом.     format(query,sizeof(query),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);//Форматируем запрос, SELECT * FROM, то есть      //загружаем всю информацию о игроке с ником, записаным в pNick.     mysql_function_query(dbHandle,query,true,"CheckPlayerBD","i",playerid);//Посылаем запрос в БД, указываем ИД подключение - dbHandle. true - потому что мы хотим получить информацию. И вызываем следующим паблик "CheckPlayerBD"     return 1; } //в конец мода forward CheckPlayerBD(playerid); public  CheckPlayerBD(playerid) {     new rows,fields;     cache_get_data(rows,fields);//Проверили есть ли строка с таким именем.     if(!rows)//если нет такого игрока то показываем регистрацию     {         ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Приветствуем Вас! Вы еще не зарегистрированы,введите свой пароль ниже.", "Далее", "");     }     else     {         ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Рады видеть Вас снова на Urok. Авторизуйтесь.", "Далее", "");         cache_get_field_content(0,"pPassword",Player[playerid][pPassword],dbHandle);//Загружаем пароль игрока из БД.     }     return 1; } Я мог сделать ИД диалогов через енум, но для примера можно и так.
      Далее идем в OnDialogResponse
      public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {     switch(dialogid)     {         //case 1 это регистрация         case 1:         {             if(!response) return Kick(playerid); // если игрок отказывается от регистрации кикаем его.             if(strlen(inputtext) < 4 || strlen(inputtext) > 32 || strlen(inputtext) == 0) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Длина пароля от 4 до 32 символов.\n Вы также не можете продолжить не указав пароль", "Далее", "");             //это была проверка на длину пароля             for(new i; i < strlen(inputtext); i++)             {                 switch(inputtext[i])                 {                     case 'A'..'Z','a'..'z','0'..'9':continue;                     default: return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Пароль может быть только: a-z, A-Z,0-9", "Далее", "");                 }             }             //это проверка на символы,если игрок будет писать пароль на русском, или какие нибудь другие символы             //например \*? то ему будет возвращатся этот же диалог,а если все отлично то регистрация продолжится.             new query[120 + MAX_PLAYER_NAME];//также создали запрос             format(query,sizeof(query),"INSERT INTO `account` (`pNick`,`pPassword`,`pLevel`) VALUES ('%s','%s','1')"),Player[playerid][pNick],inputtext);             /*Мы отформатировали строку,сделав в ней запрос: Добавить строку в таблице account, со столбцами pNick = '%s', %s значит строка             в данном случае эта строка, это массив который хранит в себе никнейм игрока,inputtext это введеный текст игроком, pLevel это уровень игрока,изначально в бд он будет 1.*/             mysql_query(dbHandle,query);             //теперь делаем запрос на загрузку акканута.             new query1[100];             format(query1,sizeof(query1),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);//отфарматироваали новый запрос             mysql_function_query(dbHandle,query1,true,,"LoadAcc","i",playerid);         }     }     case 2:     {         if(!response) return Kick(playerid); // если игрок отказывается от авторизации также кикаем его.         if(strlen(inputtext) < 4 || strlen(inputtext) > 32 || strlen(inputtext) == 0) return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Неверный пароль", "Далее", "");//Делаем проверку на длину пароля, т.к при регистрации у нас пароль был от 4 до 32, тут тоже самое должно быть         for(new i; i < strlen(inputtext); i++)         {             switch(inputtext[i])             {                 case 'A'..'Z','a'..'z','0'..'9': continue;//если он также вводит правильные символы продолжаем выполнение кода для игрока.                 default: return  ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Не верный пароль!", "Далее", "");// при вводе спец.символов ему будет возвращать диалог авторизации             }         }         new query[120];         format(query,sizeof(query),"SELECT * FROM `account` WHERE `pNick` = '%s' AND `pPassword` = '%s'",Player[playerid][pNick],inputtext)//Загрузить информацию о игроке,и проверить совпадает введеный пароль игроком,с тем который в БД.         mysql_function_query(dbHandle,query,true,"CheckPass","i",playerid);     }     return 1; } //создаем паблик LoadAcc forward LoadAcc(playerid); public LoadAcc(playerid) {     Player[playerid][pID] = cache_get_field_content_int(0,"pID",dbHandle);// 0 потому что в БД может быть только одна строка с таким именем или ИД     Player[playerid][pLevel] = cache_get_field_content_int(0,"pLevel",dbHandle);// приравнение, то есть записываем Левел и ИД игрока в наши массивы.     //Пароль и никнейм загружать не надо } forward CheckPass(playerid); public CheckPass(playerid) {     new rows,fields;     cache_get_data(rows,fields);//сверяем пароль     if(rows)     {         //если веденный пароль совпадает с паролем в БД то авторизуем игрока         SpawnPlayer(playerid);         SendClientMessage(playerid,-1,"Вы успешно авторизовались!");     }     else     {         //если нет то считаем попытки ввода пароля         SetPVarInt(playerid,"wrong_password",GetPVarInt(playerid,"wrong_password") + 1)         ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Авторизация","Не верный пароль!","Далее","");         new str[64];         format(str,sizeof(str),"У вас осталось: %d попыток",GetPVarInt(playerid,"wrong_password"));         SendClientMessage(playerid,-1,str);//форматируем строку, где говорим игроку сколько у него осталось попыток         if(GetPVarInt(playerid,"wrong_password") >= 5) return Kick(playerid);//если игрок использовал больше 5 попыток, то кикаем его     } } и в OnGameModeExit()
      public OnGameModeExit() {     mysql_close(dbHandle);//отключаемся от БД     return 1; }  
    • Antoxa39
      By Antoxa39
      Здарова бандиты. ОПГ Павновское.
      Вообщем, в этом уроке я расскажу и покажу как подключить Базу Данных к MySQL.
      Не регистрацию,и не в готовом моде где просто пользователя пароль хост и т.д меняете.
      А подключение с нуля.
       
      1.Нам понадобится MySQL.  Я использую R39-6. Скачать 
      2.Приступаем к подготовительному этапу.
      Заходим в Pawn и подключаем MySQL чуть ниже инклюда a_samp. #include <a_mysql>
      Должно быть так.
      После этого отчищаем мод от хлама. Должно получится вот так: жмЫкс
      3.Подключение
      Дальше нам требуется создать переменную,эта переменная будет хранить ИД подключения. в MySQL R39 создаем простую переменную.
      new dbHandle;  В MySQL R41 создаем так:
       new MySQL:dbHandle;  
      теперь создаем Константы
      #define Host "127.0.0.1" #define User "root" // это если вы используете Denwer. Если хостинг указываете другого пользователя. #define DataBase "urok" #define Password_SQL ""//Если вы на хостинге ставите пароль,для Denwer пароль не требуется, чуть позже скажу как его установить Все, теперь переходим в public OnGameModeInit()
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,DataBase,Password_SQL); // приравниваем нашу переменную с ИД подключением к коннекту к базе данных. Извиняюсь если коряво обьяснил. Это для R39     return 1; } Для R41
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,Password_SQL,DataBase);// В R41 поменялись местами Пароль и База     return 1; } Если сделаем чтобы при подключении к базе выводилось сообщение о том,подключилось или нет. Я сделаю это без switch. Чтобы сильно не загружать смотрящих этот урок.
      Делаем все там же в public OnGameModeInit()
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,DataBase,Password_SQL);     if(mysql_errno())     {         printf("Подключение к базе данных %s не удалось.",DataBase); // %s означает строку. То есть будет выводить название базы данных которое указано в #define DataBase     }     else     {         printf("Подключение к базе данных %s успешно",DataBase);     }     return 1; } Все, с этим закончили. Остался последний этап, это отключение базы данных когда мод выключается.
      Идем в паблик OnGameModeExit()
      public OnGameModeExit() {     mysql_close(dbHandle);     return 1; } Все. База данных подключена.
      Чтобы скачать Denwer жмите сюды: плямп
      Для установки можете перейти по этой ссылке: УСТАНОВКА