<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x41F;&#x435;&#x441;&#x43E;&#x447;&#x43D;&#x438;&#x446;&#x430; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</title><link>https://pawno-rus.com/forum/77-pesochnica/</link><description>&#x41F;&#x435;&#x441;&#x43E;&#x447;&#x43D;&#x438;&#x446;&#x430; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</description><language>ru</language><item><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; /ac &#x434;&#x43B;&#x44F; &#x430;&#x434;&#x43C;&#x438;&#x43D;&#x438;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x438; [Pawno]</title><link>https://pawno-rus.com/topic/8674-sistema-ac-dlya-administracii-pawno/</link><description><![CDATA[
<p>
	Сделал для вас систему /ac что она делает: 
</p>

<p>
	Когда админ общяется с игроком через /ac то в чате будет Nick_Name: (([АДМИН]  Привет!)) это сообщение отображается красным цветом 
</p>

<p><a class="ipsAttachLink" href="//pawno-rus.ru/applications/core/interface/file/attachment.php?id=24449">ac.pwn</a></p>]]></description><guid isPermaLink="false">8674</guid><pubDate>Tue, 27 Jan 2026 22:02:55 +0000</pubDate></item><item><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x434;&#x43B;&#x44F; &#x430;&#x434;&#x43C;&#x438;&#x43D;&#x43E;&#x432; /onadm &#x438; /offadm</title><link>https://pawno-rus.com/topic/8675-sistema-dlya-adminov-onadm-i-offadm/</link><description><![CDATA[
<p>
	Данная команда делает ник администратора красным и в карте тоже будет виден красным цветом.
</p>

<p>
	 
</p>

<p>
	Сделал ещё в этой команде рядом с ником админа [ADM] выглядеть будет как то так: [ADM]Nick_Name все это будет выглядеть красным цветом.
</p>

<p><a class="ipsAttachLink" href="//pawno-rus.ru/applications/core/interface/file/attachment.php?id=24450">onadm.pwn</a></p>]]></description><guid isPermaLink="false">8675</guid><pubDate>Wed, 28 Jan 2026 08:16:03 +0000</pubDate></item><item><title>&#x41A;&#x430;&#x43A; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440; &#x438;&#x437; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x430;, &#x438; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x43D;&#x430; &#x43D;&#x435;&#x43C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440; &#x441;&#x430;&#x43C;&#x43F;/&#x43A;&#x440;&#x43C;&#x43F;</title><link>https://pawno-rus.com/topic/7480-kak-sdelat-server-iz-nashego-kompyutera-i-zapustit-na-nem-server-sampkrmp/</link><description><![CDATA[
<p>
	системные требование для компьютера
</p>

<p>
	<span style="color:#333333;">Компьютер с CPU 4x3.2 ГГц, ОЗУ 8 Гб, 15 Гб ПЗУ, и скоростью соединения 100 Мбит/с - обеспечит нормальную работоспособность для сервера.</span>
</p>

<p>
	Приступим...
</p>

<p>
	Для начала необходимо скачать готовый сервер, подойдет абсолютно любой.
</p>

<p>
	Сервер должен быть обязательно быть на mxini, вся база данных в scriptfiles 
</p>

<p>
	Нам нужна операционная система (windows) я рекомендую 7,10 нам необходимо отредактировать server.cfg
</p>

<p>
	Он выглядет примерно так:
</p>

<p>
	lanmode 0<br />
	announce 1 <br />
	query 1 <br />
	hostname <br />
	gamemode <br />
	weburl <br />
	rcon_password <br />
	filterscripts <br />
	plugins <br />
	maxnpc <br />
	rcon 0 <br />
	port 7777<br />
	maxplayers 1000 <br />
	mapname  <br />
	language  <br />
	onfoot_rate 40<br />
	incar_rate 40<br />
	weapon_rate 40<br />
	stream_distance 300.0<br />
	stream_rate 1000<br />
	1)В поле hostname вводим название нашего сервера, в поле port вводим наш открытый порт(ниже расскажу как его открыть) в поле mapname вводим название нашей карты, в пле language вводим язык на котором написан сервер(это может быть russian english и тд)
</p>

<p>
	 
</p>

<p>
	2)Далее чтоб игроки могли зайти на наш сервер необходимо открыть порт, входим в приложение utorrent именно в него не в другие, нажимаем ctrl+g и внизу ищем порт(0-случайно) и рядом в строчке пишем стандартный порт 7777.Далее нажимаем тестировать и у нас должно быть написано порт открыт.
</p>

<p>
	 
</p>

<p>
	3)Теперь открываем файл server.exe (также может быть server-samp.exe server-cr.exe и т.д) и ждем пока внизу не будет строчки Number of vehicle models: *тут должно быть не меньше 1*
</p>

<p>
	Все, готово теперь любой игрок может войти на сервер, но файл exe должен быть всегда запущен при его закрытии сервер выключается.
</p>

<p>
	в следующем уроке я расскажу как сделать сервер на debian с использование MySql
</p>

<p>
	 
</p>
<p>
	если есть вопросы задавайте, отвечу на все
</p>]]></description><guid isPermaLink="false">7480</guid><pubDate>Sun, 01 Oct 2023 09:09:03 +0000</pubDate></item><item><title>&#x423;&#x440;&#x43E;&#x43A; &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43A; MySQL | R41-4</title><link>https://pawno-rus.com/topic/7015-urok-podklyuchenie-k-mysql-r41-4/</link><description><![CDATA[
<p>
	В данном уроке я Вам расскажу как правильно подключать Базу данных MySQL R41-4 к Вашему серверу SAMP или CRMP.
</p>

<p>
	Для начала нам понадобится плагин и инклуд mysql. Это вы можете найти в открытом доступе на других форумах или на гит хабе.
</p>

<p>
	И Denver или т.п. не лишнее, а одно из важных(если на локалке).
</p>

<p>
	1. Создаём Дефайны с данными о БД.
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="#include &lt;a_samp&gt;
#include &lt;a_mysql&gt;

#define     SQL_HOST    &quot;&quot; // ip хоста, если на локалке, то 127.0.0.1 или localhost
#define     SQL_DB      &quot;&quot; // Название вашей базы данных
#define     SQL_USER    &quot;&quot; // Пользователь, если на локалке, то root
#define     SQL_PASS    &quot;&quot; // Пароль к БД. Если на локалке, то оставляем скобочки пустыми.">
<span><span>#include</span><span> </span><span>&lt;</span><span>a_samp</span><span>&gt;</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>a_mysql</span><span>&gt;</span></span>

<span><span>#define</span><span>     SQL_HOST    </span><span>""</span><span> </span><span>// ip хоста, если на локалке, то 127.0.0.1 или </span><span>localhost</span></span>
<span><span>#define</span><span>     SQL_DB      </span><span>""</span><span> </span><span>// Название вашей базы данных</span></span>
<span><span>#define</span><span>     SQL_USER    </span><span>""</span><span> </span><span>// Пользователь, если на локалке, то root</span></span>
<span><span>#define</span><span>     SQL_PASS    </span><span>""</span><span> </span><span>// Пароль к БД. Если на локалке, то оставляем </span><span>скобочки пустыми.</span></span>
</pre>

<p>
	Далее кидаем во все new, т.е. создаём новую переменную
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="new MySQL:dbHandle;">
<span><span>new</span><span> MySQL:dbHandle;</span></span>
</pre>

<p>
	Далее нам понадобится паблик OnGameModeInit. Туда вставляем следующее:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeInit()
{
    dbHandle = mysql_connect(SQL_HOST,SQL_USER,SQL_PASS,SQL_DB);
    return 1;
}">
<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>    dbHandle = mysql_connect(SQL_HOST,SQL_USER,SQL</span><span>_PASS,SQL_DB);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Ну вот и всё. Сервер подключён к базе данных. Если вам нужны проверки на правильное подключение, то продолжим...
</p>

<p>
	 
</p>

<p>
	Продолжение:
</p>

<p>
	Далее нам понадобится снова паблик. Будем делать проверку.
</p>

<p>
	Под нашим подключением ставим следующее
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeInit()
{
    dbHandle = mysql_connect(Host,User,DataBase,Password_SQL); // это у вас уже было
    if(mysql_errno())
    {
        printf(&quot;Не успешное подключение к базе %s.&quot;,SQL_DB);
    }
    else
    {
        printf(&quot;Подключение к базе %s успешно&quot;,SQL_DB);
    }
    return 1;
}">
<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>    dbHandle = </span><span>mysql_connect(Host,User,DataBase,Password_SQL); </span><span>// это у вас уже было</span></span>
<span><span>    </span><span>if</span><span>(mysql_errno())</span></span>
<span><span>    {</span></span>
<span><span>        printf(</span><span>"Не успешное подключение к базе %s."</span><span>,SQL_DB);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>        printf(</span><span>"Подключение к базе %s успешно"</span><span>,SQL_DB);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Вот и всё, наша база данных подключена.
</p>

<p>
	Если собираетесь брать, то указывайте автора!
</p>
]]></description><guid isPermaLink="false">7015</guid><pubDate>Sun, 29 Jan 2023 15:08:01 +0000</pubDate></item><item><title>&#x421;&#x442;&#x430;&#x432;&#x438;&#x43C; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x443; &#x43D;&#x430; &#x430;&#x434;&#x43C;&#x438;&#x43D;&#x430;.</title><link>https://pawno-rus.com/topic/7014-stavim-proverku-na-admina/</link><description><![CDATA[
<p>
	На Role Play серверах или проектах обязательно должны быть администраторы, которым доступно множество привилегий. Что бы не выдавать игрокам доступ к командам, которые доступны администрации, существует проверка, является ли человеком админом, или нет.
</p>

<p style="color:rgb(203,199,192);">
	Как делать проверку на админа. Рассказываю.
</p>

<p style="color:rgb(203,199,192);">
	В начало кода пишем:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="if(Player[playerid][pAdmin] &gt;= 1)// если админка = 1, то выполняется код...
{
    //код
}
else // если админка = 0, то пишем игроку следующее пообщение
{
    SendClientMessage(playerid, 0xFF000000, &quot;[Ошибка] Вы не являетесь администратором!&quot;)
}">
<span><span>if</span><span>(Player[playerid][pAdmin] &gt;= </span><span>1</span><span>)</span><span>// если админка = 1, то выполняется код...</span></span>
<span><span>{</span></span>
<span><span>    </span><span>//код</span></span>
<span><span>}</span></span>
<span><span>else</span><span> </span><span>// если админка = 0, то пишем игроку следующее пообщение</span></span>
<span><span>{</span></span>
<span><span>    SendClientMessage(playerid, </span><span>0xFF000000</span><span>, </span><span>"[Ошибка] Вы не являетесь администратором!"</span><span>)</span></span>
<span><span>}</span></span>
</pre>

<p style="color:rgb(203,199,192);">
	 
</p>

<p style="color:rgb(203,199,192);">
	Пример с командой /setmearmour:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="CMD:setmearmour(playerid, params[])
{
    if(Player[playerid][pAdmin] &gt;= 1)
    {
        SendClientMessage(playerid, -1, &quot;Вы пополнили себе броню на 100 AP&quot;);
        SetPlayerArmour(targetid, armour);
    }
    else
    {
        SendClientMessage(playerid,0xFF000000,&quot;[Ошибка] Вы не являетеь администратором!&quot;);
    }
}">
<span><span>CMD:setmearmour(playerid, params[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(Player[playerid][pAdmin] &gt;= </span><span>1</span><span>)</span></span>
<span><span>    {</span></span>
<span><span>        SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Вы пополнили себе броню на 100 AP"</span><span>);</span></span>
<span><span>        SetPlayerArmour(targetid, armour);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>        SendClientMessage(playerid,</span><span>0xFF000000</span><span>,</span><span>"[Ошибка] Вы не являетеь администратором!"</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7014</guid><pubDate>Sun, 29 Jan 2023 08:09:22 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43A; &#x431;&#x430;&#x437;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;</title><link>https://pawno-rus.com/topic/6123-podklyuchenie-k-baze-dannyh/</link><description><![CDATA[
<p>
	Здарова бандиты. 
</p>

<p>
	Вообщем, в этом уроке я расскажу и покажу как подключить Базу Данных к MySQL.
</p>

<p>
	Не регистрацию,и не в готовом моде где просто пользователя пароль хост и т.д меняете.
</p>

<p>
	А подключение с нуля.
</p>

<p>
	 
</p>

<p>
	1.<strong>Нам понадобится MySQL.  Я использую R39-6</strong>.<span style="color:#d35400;"> </span><strong><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9naXRodWIuY29tL3BCbHVlRy9TQS1NUC1NeVNRTC9yZWxlYXNlcw==" rel="external nofollow"><span style="color:#d35400;">Скачать</span></a></strong><span style="color:#d35400;"> </span>
</p>

<p>
	2.<strong>Приступаем к подготовительному этапу.</strong>
</p>

<p>
	Заходим в Pawn и подключаем MySQL чуть ниже инклюда a_samp. <span style="color:#2980b9;">#include &lt;a_mysql&gt;</span>
</p>

<p>
	Должно быть <strong><a href="https://imgur.com/a/kBkw68V" rel="external nofollow">так</a>.</strong>
</p>

<p>
	После этого отчищаем мод от хлама. Должно получится вот так: <strong><a href="https://imgur.com/a/8wc6vXn" rel="external nofollow">жмЫкс</a></strong>
</p>

<p>
	<strong>3.Подключение</strong>
</p>

<p>
	Дальше нам требуется создать переменную,эта переменная будет хранить ИД подключения. в <span style="color:#d35400;"><strong><em>MySQL R39 </em></strong></span><strong><em>создаем</em></strong> простую переменную.<span style="color:#2980b9;"> </span>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="new dbHandle; ">
<span><span>new</span><span> dbHandle; </span></span>
</pre>

<p>
	В <span style="color:#f1c40f;">MySQL R41 создаем так:</span>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode=" new MySQL:dbHandle;">
<span><span> </span><span>new</span><span> MySQL:dbHandle;</span></span>
</pre>

<p>
	 
</p>

<p>
	теперь создаем<span style="color:#2980b9;"> Константы</span>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="#define Host &quot;127.0.0.1&quot;
#define User &quot;root&quot; // это если вы используете Denwer. Если хостинг указываете другого пользователя.
#define DataBase &quot;urok&quot;
#define Password_SQL &quot;&quot;//Если вы на хостинге ставите пароль,для Denwer пароль не требуется, чуть позже скажу как его установить">
<span><span>#define</span><span> Host </span><span>"127.0.0.1"</span></span>
<span><span>#define</span><span> User </span><span>"root"</span><span> </span><span>// это если вы используете Denwer. Если хостинг </span><span>указываете другого пользователя.</span></span>
<span><span>#define</span><span> DataBase </span><span>"urok"</span></span>
<span><span>#define</span><span> Password_SQL </span><span>""</span><span>//Если вы на хостинге ставите пароль,для Denwer </span><span>пароль не требуется, чуть позже скажу как его </span><span>установить</span></span>
</pre>

<p>
	Все, теперь переходим в <span style="color:#2980b9;">public</span> OnGameModeInit()
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeInit()
{
    dbHandle = mysql_connect(Host,User,DataBase,Password_SQL); // приравниваем нашу переменную с ИД подключением к коннекту к базе данных. Извиняюсь если коряво обьяснил. Это для R39
    return 1;
}">
<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>    dbHandle = </span><span>mysql_connect(Host,User,DataBase,Password_SQL); </span><span>// приравниваем нашу переменную с ИД подключением </span><span>к коннекту к базе данных. Извиняюсь если коряво </span><span>обьяснил. Это для R39</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Для R41
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeInit()
{
    dbHandle = mysql_connect(Host,User,Password_SQL,DataBase);// В R41 поменялись местами Пароль и База
    return 1;
}">
<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>    dbHandle = </span><span>mysql_connect(Host,User,Password_SQL,DataBase);</span><span>// В R41 поменялись местами Пароль и База</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Если сделаем чтобы при подключении к базе выводилось сообщение о том,подключилось или нет. Я сделаю это без <span style="color:#3498db;">switch. </span>Чтобы сильно не загружать смотрящих этот урок.
</p>

<p>
	Делаем все там же в <span style="color:#3498db;">public</span> OnGameModeInit()
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeInit()
{
    dbHandle = mysql_connect(Host,User,DataBase,Password_SQL);
    if(mysql_errno())
    {
        printf(&quot;Подключение к базе данных %s не удалось.&quot;,DataBase); // %s означает строку. То есть будет выводить название базы данных которое указано в #define DataBase
    }
    else
    {
        printf(&quot;Подключение к базе данных %s успешно&quot;,DataBase);
    }
    return 1;
}">
<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>    dbHandle = mysql_connect(Host,User,DataBase,Pa</span><span>ssword_SQL);</span></span>
<span><span>    </span><span>if</span><span>(mysql_errno())</span></span>
<span><span>    {</span></span>
<span><span>        printf(</span><span>"Подключение к базе данных %s не удалось."</span><span>,DataBase); </span><span>// %s означает строку. То есть будет выводить </span><span>название базы данных которое указано в #define </span><span>DataBase</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>        printf(</span><span>"Подключение к базе данных %s успешно"</span><span>,DataBase);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Все, с этим закончили. Остался последний этап, это отключение базы данных когда мод выключается.
</p>

<p>
	Идем в паблик OnGameModeExit()
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeExit()
{
    mysql_close(dbHandle);
	return 1;
}">
<span><span>public</span><span> OnGameModeExit()</span></span>
<span><span>{</span></span>
<span><span>    mysql_close(dbHandle);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Все. База данных подключена.
</p>

<p>
	Чтобы скачать <strong>Denwer жмите сюды: <span style="color:#f39c12;"><a href="https://pawno-rus.com/go/?url=aHR0cDovL3d3dy5kZW53ZXIucnUv" rel="external nofollow">плямп</a></span></strong>
</p>

<p>
	<font color="#f39c12"><b>Для установки можете перейти по этой ссылке: </b></font><span style="color:#27ae60;"><b><u><em><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly95b3V0dS5iZS96cUVWUmJtbHlxUQ==" rel="external nofollow">УСТАНОВКА</a></em></u></b></span>
</p>
]]></description><guid isPermaLink="false">6123</guid><pubDate>Sun, 13 Feb 2022 09:47:41 +0000</pubDate></item><item><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; Vip &#x430;&#x43A;&#x43A;&#x430;&#x443;&#x43D;&#x442;&#x430; &#x43F;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x43D;&#x430; MySql</title><link>https://pawno-rus.com/topic/6902-sistema-vip-akkaunta-po-vremeni-na-mysql/</link><description><![CDATA[
<p>
	Всем привет на связи MartinJoys | Cherlock<br>
	Cегодня мы научимся делать вип аккаунты по времени, с автоматическим удалением по истечению времени.<br>
	Перейдем в самый вверх вашего мода и впишем туда этот код:
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='#include &lt;a_samp&gt;// стандартный инклуд&#13;
#include &lt;YSI\y_commands&gt; //для работы с командами&#13;
#include &lt;mxdate&gt;&#13;
#include &lt;a_mysql&gt; //для работы с бд&#13;
#include &lt;sscanf&gt; //&#13;
#define MYSQL_HOST     "localhost" // IP адресс БД.&#13;
#define MYSQL_USER     "root" // Login БД.&#13;
#define MYSQL_DB       "Samp" // Название БД.&#13;
#define MYSQL_PASS     "root" // Пароль БД.'>

<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">a_samp</span><span class="mtk6">&gt;</span><span class="mtk8">// стандартный инклуд</span></span>
<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">YSI\y_commands</span><span class="mtk6">&gt;</span><span class="mtk1"> </span><span class="mtk8">//для работы с командами</span></span>
<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">mxdate</span><span class="mtk6">&gt;</span></span>
<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">a_mysql</span><span class="mtk6">&gt;</span><span class="mtk1"> </span><span class="mtk8">//для работы с бд</span></span>
<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">sscanf</span><span class="mtk6">&gt;</span><span class="mtk1"> </span><span class="mtk8">//</span></span>
<span><span class="mtk6">#define</span><span class="mtk1"> MYSQL_HOST     </span><span class="mtk20">"localhost"</span><span class="mtk1"> </span><span class="mtk8">// IP адресс БД.</span></span>
<span><span class="mtk6">#define</span><span class="mtk1"> MYSQL_USER     </span><span class="mtk20">"root"</span><span class="mtk1"> </span><span class="mtk8">// Login БД.</span></span>
<span><span class="mtk6">#define</span><span class="mtk1"> MYSQL_DB       </span><span class="mtk20">"Samp"</span><span class="mtk1"> </span><span class="mtk8">// Название БД.</span></span>
<span><span class="mtk6">#define</span><span class="mtk1"> MYSQL_PASS     </span><span class="mtk20">"root"</span><span class="mtk1"> </span><span class="mtk8">// Пароль БД.</span></span>
</pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	Теперь необходимо установить подключение к базе при включении мода, перейдем в OnGameModeInit и впишем туда этот код:
</p>

<p>
	 
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS); //устанавливаем подключение&#13;
switch(mysql_ping())&#13;
{&#13;
    case 1: print("Соединение установлено"); // Если подключена БД.&#13;
    case -1: print("Нет соединения с БД"); // Если не подключена БД.&#13;
}  '>
<span><span class="mtk1">mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, </span><span class="mtk1">MYSQL_PASS); </span><span class="mtk8">//устанавливаем подключение</span></span>
<span><span class="mtk6">switch</span><span class="mtk1">(mysql_ping())</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">case</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">: print(</span><span class="mtk20">"Соединение установлено"</span><span class="mtk1">); </span><span class="mtk8">// Если подключена БД.</span></span>
<span><span class="mtk1">    </span><span class="mtk6">case</span><span class="mtk1"> -</span><span class="mtk7">1</span><span class="mtk1">: print(</span><span class="mtk20">"Нет соединения с БД"</span><span class="mtk1">); </span><span class="mtk8">// Если не подключена БД.</span></span>
<span><span class="mtk1">}  </span></span>
</pre>

<p>
	 
</p>

<p>
	Теперь если все будет нормально то в консоли появится инфа о том что соединение установлено.<br style="color:rgb(206,202,195);">
	Сейчас сделаем отключение от базы при выключении/перезагрузке мода, перейдем в OnGameModeExit и впишем:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="mysql_close();">
<span><span class="mtk1">mysql_close();</span></span>
</pre>

<p>
	Теперь нужно сделать проверку, переходим в OnPlayerConnect и вписываем:
</p>

<p>
	 
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="new query[100],name[24],string[240]sqlname[24],days;//&#13;
    GetPlayerName(playerid,name,sizeof(name));//узнаем имя&#13;
    mysql_real_escape_string(name,sqlname);&#13;
    format(query,sizeof(query),&quot;SELECT * FROM `Donate` WHERE `Name` = '%s'&quot;,sqlname);&#13;
    mysql_query(query);//отправляем запрос&#13;
    mysql_store_result();//получаем ответ&#13;
    if(mysql_fetch_row(query) &amp;&amp; mysql_num_rows() == 1)//если есть поле с именем игрока&#13;
    {&#13;
        mysql_get_field(&quot;Days&quot;, string);&#13;
        days=strval(string);//получаем время на которое выдан аккаунт&#13;
        if(gettime() &gt;= days) //если срок закончился&#13;
        {&#13;
            SendClientMessage(playerid,0xFFFFFFFF,&quot;Действие вашего аккаунта закончилось&quot;);&#13;
            format(string,sizeof(string),&quot;DELETE FROM `Donate` WHERE `Name`='%s'&quot;,name);&#13;
            mysql_query(string);//удаляем его из бд&#13;
            //PlayerInfo[playerid][pDonate]=0; сюда впишите вашу випку&#13;
        }&#13;
        else//если действие аккаунта еще не закончилось&#13;
        {&#13;
            //PlayerInfo[playerid][pDonate]=1; ваша випка&#13;
            format(string,sizeof(string),&quot;Действие вашего аккаунта закончится  %s &quot;,date(&quot;%dd.%mm.%yyyy в %hh:%ii:%ss&quot;,days));&#13;
            SendClientMessage(playerid,0xFFFFFFFF,string);//выведем информацию о том когда закончится действие аккаунта&#13;
        }&#13;
    }&#13;
    mysql_free_result();//очищаем  ">

<span><span class="mtk6">new</span><span class="mtk1"> query[</span><span class="mtk7">100</span><span class="mtk1">],name[</span><span class="mtk7">24</span><span class="mtk1">],string[</span><span class="mtk7">240</span><span class="mtk1">]sqlname[</span><span class="mtk7">24</span><span class="mtk1">],days;</span><span class="mtk8">//</span></span>
<span><span class="mtk1">    GetPlayerName(playerid,name,</span><span class="mtk6">sizeof</span><span class="mtk1">(name));</span><span class="mtk8">//узнаем имя</span></span>
<span><span class="mtk1">    mysql_real_escape_string(name,sqlname);</span></span>
<span><span class="mtk1">    format(query,</span><span class="mtk6">sizeof</span><span class="mtk1">(query),</span><span class="mtk20">"SELECT * FROM `Donate` WHERE `Name` = '%s'"</span><span class="mtk1">,sqlname);</span></span>
<span><span class="mtk1">    mysql_query(query);</span><span class="mtk8">//отправляем запрос</span></span>
<span><span class="mtk1">    mysql_store_result();</span><span class="mtk8">//получаем ответ</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(mysql_fetch_row(query) &amp;&amp; mysql_num_rows() == </span><span class="mtk7">1</span><span class="mtk1">)</span><span class="mtk8">//если есть поле с именем игрока</span></span>
<span><span class="mtk1">    {</span></span>
<span><span class="mtk1">        mysql_get_field(</span><span class="mtk20">"Days"</span><span class="mtk1">, string);</span></span>
<span><span class="mtk1">        days=strval(string);</span><span class="mtk8">//получаем время на которое выдан аккаунт</span></span>
<span><span class="mtk1">        </span><span class="mtk6">if</span><span class="mtk1">(gettime() &gt;= days) </span><span class="mtk8">//если срок закончился</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            SendClientMessage(playerid,</span><span class="mtk16">0xFFFFFFFF</span><span class="mtk1">,</span><span class="mtk20">"Действие вашего аккаунта закончилось"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            format(string,</span><span class="mtk6">sizeof</span><span class="mtk1">(string),</span><span class="mtk20">"DELETE FROM `Donate` WHERE `Name`='%s'"</span><span class="mtk1">,name);</span></span>
<span><span class="mtk1">            mysql_query(string);</span><span class="mtk8">//удаляем его из бд</span></span>
<span><span class="mtk1">            </span><span class="mtk8">//PlayerInfo[playerid][pDonate]=0; сюда впишите </span><span class="mtk8">вашу випку</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span><span class="mtk6">else</span><span class="mtk8">//если действие аккаунта еще не закончилось</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            </span><span class="mtk8">//PlayerInfo[playerid][pDonate]=1; ваша випка</span></span>
<span><span class="mtk1">            format(string,</span><span class="mtk6">sizeof</span><span class="mtk1">(string),</span><span class="mtk20">"Действие вашего аккаунта закончится  %s "</span><span class="mtk1">,date(</span><span class="mtk20">"%dd.%mm.%yyyy в %hh:%ii:%ss"</span><span class="mtk1">,days));</span></span>
<span><span class="mtk1">            SendClientMessage(playerid,</span><span class="mtk16">0xFFFFFFFF</span><span class="mtk1">,string);</span><span class="mtk8">//выведем информацию о том когда закончится </span><span class="mtk8">действие аккаунта</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">    }</span></span>
<span><span class="mtk1">    mysql_free_result();</span><span class="mtk8">//очищаем  </span></span>
</pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	Теперь построим команду для выдачи випки. Внимание команда построена на YCM
</p>

<p>
	 
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='YCMD:donate(playerid, params[ ] ,help)//donate это название команды&#13;
{&#13;
     if(!IsPlayerAdmin(playerid)return SendClientMessage(playerid,-1,"Вы не администратор.");//проверка на администратора&#13;
    new string[144];&#13;
    if(!strlen(params[0])|| !strlen(params[1])) return SendClientMessage(playerid,0xFFFFFFFF,"{0099FF}Используйте:     {FFFFFF}/donate {99D938}[playerid] [Day] ");//если параметры не указанны&#13;
    DonatePlayer(params[0],params[1]);//если указанны то дадим випку и занесем в бд&#13;
    format(string,sizeof(string),"Вам выдан Вип аккаунт на %d дней",params[1]);&#13;
    SendClientMessage(params[0],0xFFFFFFFF,string);//покажем сообщение игроку которому выдали&#13;
    //ваша випка PlayerInfo[params[0]][pDonate]=1;&#13;
    return true;&#13;
}'>

<span><span class="mtk1">YCMD:donate(playerid, params[ ] ,help)</span><span class="mtk8">//donate это название команды</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">     </span><span class="mtk6">if</span><span class="mtk1">(!IsPlayerAdmin(playerid)</span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid,-</span><span class="mtk7">1</span><span class="mtk1">,</span><span class="mtk20">"Вы не администратор."</span><span class="mtk1">);</span><span class="mtk8">//проверка на администратора</span></span>
<span><span class="mtk1">    </span><span class="mtk6">new</span><span class="mtk1"> string[</span><span class="mtk7">144</span><span class="mtk1">];</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(!strlen(params[</span><span class="mtk7">0</span><span class="mtk1">])|| !strlen(params[</span><span class="mtk7">1</span><span class="mtk1">])) </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid,</span><span class="mtk16">0xFFFFFFFF</span><span class="mtk1">,</span><span class="mtk20">"{0099FF}Используйте:     {FFFFFF}/donate </span><span class="mtk20">{99D938}[playerid] [Day] "</span><span class="mtk1">);</span><span class="mtk8">//если параметры не указанны</span></span>
<span><span class="mtk1">    DonatePlayer(params[</span><span class="mtk7">0</span><span class="mtk1">],params[</span><span class="mtk7">1</span><span class="mtk1">]);</span><span class="mtk8">//если указанны то дадим випку и занесем в бд</span></span>
<span><span class="mtk1">    format(string,</span><span class="mtk6">sizeof</span><span class="mtk1">(string),</span><span class="mtk20">"Вам выдан Вип аккаунт на %d дней"</span><span class="mtk1">,params[</span><span class="mtk7">1</span><span class="mtk1">]);</span></span>
<span><span class="mtk1">    SendClientMessage(params[</span><span class="mtk7">0</span><span class="mtk1">],</span><span class="mtk16">0xFFFFFFFF</span><span class="mtk1">,string);</span><span class="mtk8">//покажем сообщение игроку которому выдали</span></span>
<span><span class="mtk1">    </span><span class="mtk8">//ваша випка PlayerInfo[params[0]][pDonate]=1;</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk6">true</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>
</pre>

		<p>
			 
		</p>
	</div>
</div>

<pre style="color:rgb(206,202,195);">
<span style="color:rgb(232,230,227);"> </span><span style="color:#000000;">Теперь сделаем функцию выдачи випки, перейдем в низ вашего мода и напишем следующий код:</span></pre>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="stock DonatePlayer(playerid,days)&#13;
{&#13;
    new query[256],name[24];&#13;
    GetPlayerName(playerid,name,sizeof(name));//узнаем имя&#13;
    format(query, sizeof(query), &quot;INSERT INTO `Donate` (`Name`, `Days`) VALUE ('%s','%d')&quot;,name,gettime()+86400*days);//gettime()вернет время в секундах, 86400 секунд в одних сутках, days количество дней на которое будет установлен вип аккаунт&#13;
    mysql_query(query);//отправим запрос&#13;
    return true;&#13;
}  ">

<span><span class="mtk1">stock DonatePlayer(playerid,days)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">new</span><span class="mtk1"> query[</span><span class="mtk7">256</span><span class="mtk1">],name[</span><span class="mtk7">24</span><span class="mtk1">];</span></span>
<span><span class="mtk1">    GetPlayerName(playerid,name,</span><span class="mtk6">sizeof</span><span class="mtk1">(name));</span><span class="mtk8">//узнаем имя</span></span>
<span><span class="mtk1">    format(query, </span><span class="mtk6">sizeof</span><span class="mtk1">(query), </span><span class="mtk20">"INSERT INTO `Donate` (`Name`, `Days`) VALUE </span><span class="mtk20">('%s','%d')"</span><span class="mtk1">,name,gettime()+</span><span class="mtk7">86400</span><span class="mtk1">*days);</span><span class="mtk8">//gettime()вернет время в секундах, 86400 секунд в </span><span class="mtk8">одних сутках, days количество дней на которое </span><span class="mtk8">будет установлен вип аккаунт</span></span>
<span><span class="mtk1">    mysql_query(query);</span><span class="mtk8">//отправим запрос</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk6">true</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}  </span></span>
</pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	<strong style="color:rgb(206,202,195);"><span><em><span><span style="color:rgb(255,0,0);">Теперь нужно создать таблицу в нашей бд:<br>
	Создаем таблицу с именем Donate, делаем 2 столбца Name и Days.<br>
	В первом укажем значение string(24), а во втором int(11).</span></span></em></span></strong><br style="color:rgb(206,202,195);">
	 
</p>

<p>
	<span style="color:rgb(206,202,195);">Необходимые для работы инклуды а так же плагины можете скачать по этой ссылкам:</span><br style="color:rgb(206,202,195);"><a href="https://pawno-rus.com/go/?url=aHR0cDovL3JnaG9zdC5ydS80MDM4MjIwMQ==" rel="external nofollow" style="color:inherit;" title="Ссылка">http://rghost.ru/40382201</a><br style="color:rgb(206,202,195);"><a href="https://pawno-rus.com/go/?url=aHR0cDovL3JnaG9zdC5ydS80MDM4MjIyMQ==" rel="external nofollow" style="color:inherit;" title="Ссылка">http://rghost.ru/40382221</a><br style="color:rgb(206,202,195);"><a href="https://pawno-rus.com/go/?url=aHR0cDovL3JnaG9zdC5ydS80MDM4MjIzNA==" rel="external nofollow" style="color:inherit;" title="Ссылка">http://rghost.ru/40382234</a><br style="color:rgb(206,202,195);"><a href="https://pawno-rus.com/go/?url=aHR0cDovL3JnaG9zdC5ydS80MDM4MjU2OQ==" rel="external nofollow" style="color:inherit;" title="Ссылка">http://rghost.ru/40382569</a>
</p>

<p>
	<br>
	Автор: Я MartinJoys | Cherlock
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">6902</guid><pubDate>Mon, 28 Nov 2022 09:51:57 +0000</pubDate></item><item><title>[&#x423;&#x420;&#x41E;&#x41A;] - [&#x420;&#x415;&#x428;&#x415;&#x41D;&#x418;&#x415;] &#x420;&#x435;&#x433;&#x438;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x44F;.</title><link>https://pawno-rus.com/topic/6165-urok-reshenie-registraciya/</link><description><![CDATA[
<p>
	Дратути,я научился делать регистрацию, и хочу поделится со всеми как это сделать им самим.
</p>

<p>
	<strong>1.Нам потребуется: Denwer или Open Server. ( Урок про подключение я делал ранее, так что обьяснять сейчас что и как делать для подключения не буду, но урок можно посмотреть</strong><span style="color:#c0392b;"> </span><a href="https://pawno-rus.com/topic/6123https://pawno-rus.ru/topic/6123-podklyuchenie-k-baze-dannyh/?do=getNewComment-podklyuchenie-k-baze-dannyh/?do=getNewComment" rel=""><span style="color:#c0392b;">тут</span></a><span style="color:#c0392b;">)</span>
</p>

<p>
	<span style="color:#c0392b;">2.</span><strong>MySQL R39-6.</strong>
</p>

<p>
	<strong>3. Прямые руки.</strong>
</p>

<p>
	<b>4. Переходим к процессу.</b>
</p>

<p>
	<b>//P.S БД - База Данных</b>
</p>

<p>
	<b><span style="color:#f1c40f;">Делаем подключение к </span><span style="color:#3498db;">БД.</span></b>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="main(){}
#include &lt;a_samp&gt;


#include &lt;a_mysql&gt;
#include &lt;Pawn.CMD&gt;
#include &lt;sscanf2&gt;
#include &lt;streamer&gt;
#include &lt;time&gt;

//--------------   SQL     ----------------------
new dbHandle;
#define MYSQL_HOST &quot;127.0.0.1&quot;
#define MYSQL_USER &quot;mysql&quot;
#define MYSQL_BD &quot;urok&quot;
#define MYSQL_PASSWORD &quot;mysql&quot;
//------------------------

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(&quot;Подключение к БД %s прервалось. Код ошибки: %d&quot;,MYSQL_BD,mysql_errno())
    else printf(&quot;Подключение к БД %s успешно!&quot;,MYSQL_BD)
    return 1;
}">
<span><span>main(){}</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>a_samp</span><span>&gt;</span></span>


<span><span>#include</span><span> </span><span>&lt;</span><span>a_mysql</span><span>&gt;</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>Pawn.CMD</span><span>&gt;</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>sscanf2</span><span>&gt;</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>streamer</span><span>&gt;</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>time</span><span>&gt;</span></span>

<span><span>//--------------   SQL     ----------------------</span></span>
<span><span>new</span><span> dbHandle;</span></span>
<span><span>#define</span><span> MYSQL_HOST </span><span>"127.0.0.1"</span></span>
<span><span>#define</span><span> MYSQL_USER </span><span>"mysql"</span></span>
<span><span>#define</span><span> MYSQL_BD </span><span>"urok"</span></span>
<span><span>#define</span><span> MYSQL_PASSWORD </span><span>"mysql"</span></span>
<span><span>//------------------------</span></span>

<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>    dbHandle = mysql_connect(MYSQL_HOST,MYSQL_USER</span><span>,MYSQL_BD,MYSQL_PASSWORD);</span></span>
<span><span>    CheckConnectSQL();</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>

<span><span>public</span><span> OnGameModeExit()</span></span>
<span><span>{</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
<span><span>stock CheckConnectSQL()</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(mysql_errno()) printf(</span><span>"Подключение к БД %s прервалось. Код ошибки: %d"</span><span>,MYSQL_BD,mysql_errno())</span></span>
<span><span>    </span><span>else</span><span> printf(</span><span>"Подключение к БД %s успешно!"</span><span>,MYSQL_BD)</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	<br /><strong>Подключение сделано.</strong>
</p>

<p>
	Далее мы должны сделать такое: Когда игрок заходит на сервер, нужно проверить есть ли игрок с таким Никнеймом в БД.
</p>

<p>
	Делаем массив,который будет хранить в себе пароль,имя игрока. ( сделаем еще и уровень ).
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="// перед --------------   SQL     ---------------------- создаем enum
//Enum - это вещь, позволяющая создавать большее количество адресов одной переменной
enum pInfo{
    pID,
    pNick[24],
    pPassword[32],
    pLevel
}
new Player[MAX_PLAYERS][pInfo];//Мы обьявили переменную,которая будет хранить в себе наш Enum.">
<span><span>// перед --------------   SQL     </span><span>---------------------- создаем enum</span></span>
<span><span>//Enum - это вещь, позволяющая создавать большее </span><span>количество адресов одной переменной</span></span>
<span><span>enum</span><span> pInfo{</span></span>
<span><span>    pID,</span></span>
<span><span>    pNick[</span><span>24</span><span>],</span></span>
<span><span>    pPassword[</span><span>32</span><span>],</span></span>
<span><span>    pLevel</span></span>
<span><span>}</span></span>
<span><span>new</span><span> Player[MAX_PLAYERS][pInfo];</span><span>//Мы обьявили переменную,которая будет хранить в </span><span>себе наш Enum.</span></span>

</pre>

<p>
	Идем создавать БД.
</p>

<p>
	<strong>1.</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<a href="https://imgur.com/a/119N1I3" rel="external nofollow">https://imgur.com/a/119N1I3</a>
		</p>
	</div>
</div>

<p>
	<strong>2.</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<a href="https://imgur.com/a/IC3WDaZ" rel="external nofollow">https://imgur.com/a/IC3WDaZ</a>
		</p>
	</div>
</div>

<p>
	3.
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<a href="https://imgur.com/a/Fj13ZX2" rel="external nofollow">https://imgur.com/a/Fj13ZX2</a>
		</p>
	</div>
</div>

<p>
	4.
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<a href="https://imgur.com/a/B4yNYZ0" rel="external nofollow">https://imgur.com/a/B4yNYZ0</a>
		</p>

		<p>
			<a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9tZXRhbml0LmNvbS9zcWwvbXlzcWwvMi4zLnBocA==" rel="external nofollow">https://metanit.com/sql/mysql/2.3.php</a>
		</p>
	</div>
</div>

<p>
	5. Идем обратно к скриптингу
</p>

<p>
	И вот тут, мы сделаем проверку есть ли в БД аккаунт с таким никнеймом.
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid,Player[playerid][pNick],MAX_PLAYER_NAME);//Мы записали ник игрока в массив pNick.
    new query[100];//создаем переменную с запросом.
    format(query,sizeof(query),&quot;SELECT * FROM `account` WHERE `pNick` = '%s'&quot;,Player[playerid][pNick]);//Форматируем запрос, SELECT * FROM, то есть 
    //загружаем всю информацию о игроке с ником, записаным в pNick.
    mysql_function_query(dbHandle,query,true,&quot;CheckPlayerBD&quot;,&quot;i&quot;,playerid);//Посылаем запрос в БД, указываем ИД подключение - dbHandle. true - потому что мы хотим получить информацию. И вызываем следующим паблик &quot;CheckPlayerBD&quot;
	return 1;
}
//в конец мода
forward CheckPlayerBD(playerid);
public  CheckPlayerBD(playerid)
{
    new rows,fields;
    cache_get_data(rows,fields);//Проверили есть ли строка с таким именем.
    if(!rows)//если нет такого игрока то показываем регистрацию
    {
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, &quot;Регистрация&quot;, &quot;Приветствуем Вас! Вы еще не зарегистрированы,введите свой пароль ниже.&quot;, &quot;Далее&quot;, &quot;&quot;);
    }
    else
    {
        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, &quot;Авторизация&quot;, &quot;Рады видеть Вас снова на Urok. Авторизуйтесь.&quot;, &quot;Далее&quot;, &quot;&quot;);
        cache_get_field_content(0,&quot;pPassword&quot;,Player[playerid][pPassword],dbHandle);//Загружаем пароль игрока из БД.
    }
    return 1;
}">
<span><span>public</span><span> OnPlayerConnect(playerid)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>GetPlayerName(playerid,Player[playerid][pNick],MAX_PLAYER_NAME);</span><span>//Мы записали ник игрока в массив pNick.</span></span>
<span><span>    </span><span>new</span><span> query[</span><span>100</span><span>];</span><span>//создаем переменную с запросом.</span></span>
<span><span>    format(query,</span><span>sizeof</span><span>(query),</span><span>"SELECT * FROM `account` WHERE `pNick` = '%s'"</span><span>,Player[playerid][pNick]);</span><span>//Форматируем запрос, SELECT * FROM, то есть </span></span>
<span><span>    </span><span>//загружаем всю информацию о игроке с ником, </span><span>записаным в pNick.</span></span>
<span><span>    mysql_function_query(dbHandle,query,</span><span>true</span><span>,</span><span>"CheckPlayerBD"</span><span>,</span><span>"i"</span><span>,playerid);</span><span>//Посылаем запрос в БД, указываем ИД подключение - </span><span>dbHandle. true - потому что мы хотим получить </span><span>информацию. И вызываем следующим паблик </span><span>"CheckPlayerBD"</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
<span><span>//в конец мода</span></span>
<span><span>forward CheckPlayerBD(playerid);</span></span>
<span><span>public</span><span>  CheckPlayerBD(playerid)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>new</span><span> rows,fields;</span></span>
<span><span>    cache_get_data(rows,fields);</span><span>//Проверили есть ли строка с таким именем.</span></span>
<span><span>    </span><span>if</span><span>(!rows)</span><span>//если нет такого игрока то показываем регистрацию</span></span>
<span><span>    {</span></span>
<span><span>        ShowPlayerDialog(playerid, </span><span>1</span><span>, DIALOG_STYLE_INPUT, </span><span>"Регистрация"</span><span>, </span><span>"Приветствуем Вас! Вы еще не </span><span>зарегистрированы,введите свой пароль ниже."</span><span>, </span><span>"Далее"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>        ShowPlayerDialog(playerid, </span><span>2</span><span>, DIALOG_STYLE_INPUT, </span><span>"Авторизация"</span><span>, </span><span>"Рады видеть Вас снова на Urok. Авторизуйтесь."</span><span>, </span><span>"Далее"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>        cache_get_field_content(</span><span>0</span><span>,</span><span>"pPassword"</span><span>,Player[playerid][pPassword],dbHandle);</span><span>//Загружаем пароль игрока из БД.</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Я мог сделать ИД диалогов через енум, но для примера можно и так.
</p>

<p>
	Далее идем в OnDialogResponse
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        //case 1 это регистрация
        case 1:
        {
            if(!response) return Kick(playerid); // если игрок отказывается от регистрации кикаем его.
            if(strlen(inputtext) &lt; 4 || strlen(inputtext) &gt; 32 || strlen(inputtext) == 0) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, &quot;Регистрация&quot;, &quot;Длина пароля от 4 до 32 символов.\n Вы также не можете продолжить не указав пароль&quot;, &quot;Далее&quot;, &quot;&quot;);
            //это была проверка на длину пароля
            for(new i; i &lt; strlen(inputtext); i++)
            {
                switch(inputtext[i])
                {
                    case 'A'..'Z','a'..'z','0'..'9':continue;
                    default: return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, &quot;Регистрация&quot;, &quot;Пароль может быть только: a-z, A-Z,0-9&quot;, &quot;Далее&quot;, &quot;&quot;);
                }
            }
            //это проверка на символы,если игрок будет писать пароль на русском, или какие нибудь другие символы
            //например \*? то ему будет возвращатся этот же диалог,а если все отлично то регистрация продолжится.
            new query[120 + MAX_PLAYER_NAME];//также создали запрос
            format(query,sizeof(query),&quot;INSERT INTO `account` (`pNick`,`pPassword`,`pLevel`) VALUES ('%s','%s','1')&quot;),Player[playerid][pNick],inputtext);
            /*Мы отформатировали строку,сделав в ней запрос: Добавить строку в таблице account, со столбцами pNick = '%s', %s значит строка
            в данном случае эта строка, это массив который хранит в себе никнейм игрока,inputtext это введеный текст игроком, pLevel это уровень игрока,изначально в бд он будет 1.*/
            mysql_query(dbHandle,query);
            //теперь делаем запрос на загрузку акканута.
            new query1[100];
            format(query1,sizeof(query1),&quot;SELECT * FROM `account` WHERE `pNick` = '%s'&quot;,Player[playerid][pNick]);//отфарматироваали новый запрос
            mysql_function_query(dbHandle,query1,true,,&quot;LoadAcc&quot;,&quot;i&quot;,playerid);
        }
    }
    case 2:
    {
        if(!response) return Kick(playerid); // если игрок отказывается от авторизации также кикаем его.
        if(strlen(inputtext) &lt; 4 || strlen(inputtext) &gt; 32 || strlen(inputtext) == 0) return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, &quot;Авторизация&quot;, &quot;Неверный пароль&quot;, &quot;Далее&quot;, &quot;&quot;);//Делаем проверку на длину пароля, т.к при регистрации у нас пароль был от 4 до 32, тут тоже самое должно быть
        for(new i; i &lt; strlen(inputtext); i++)
        {
            switch(inputtext[i])
            {
                case 'A'..'Z','a'..'z','0'..'9': continue;//если он также вводит правильные символы продолжаем выполнение кода для игрока.
                default: return  ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, &quot;Авторизация&quot;, &quot;Не верный пароль!&quot;, &quot;Далее&quot;, &quot;&quot;);// при вводе спец.символов ему будет возвращать диалог авторизации
            }
        }
        new query[120];
        format(query,sizeof(query),&quot;SELECT * FROM `account` WHERE `pNick` = '%s' AND `pPassword` = '%s'&quot;,Player[playerid][pNick],inputtext)//Загрузить информацию о игроке,и проверить совпадает введеный пароль игроком,с тем который в БД.
        mysql_function_query(dbHandle,query,true,&quot;CheckPass&quot;,&quot;i&quot;,playerid);
    }
	return 1;
}
//создаем паблик LoadAcc
forward LoadAcc(playerid);
public LoadAcc(playerid)
{
    Player[playerid][pID] = cache_get_field_content_int(0,&quot;pID&quot;,dbHandle);// 0 потому что в БД может быть только одна строка с таким именем или ИД
    Player[playerid][pLevel] = cache_get_field_content_int(0,&quot;pLevel&quot;,dbHandle);// приравнение, то есть записываем Левел и ИД игрока в наши массивы.
    //Пароль и никнейм загружать не надо
}
forward CheckPass(playerid);
public CheckPass(playerid)
{
    new rows,fields;
    cache_get_data(rows,fields);//сверяем пароль
    if(rows)
    {
        //если веденный пароль совпадает с паролем в БД то авторизуем игрока
        SpawnPlayer(playerid);
        SendClientMessage(playerid,-1,&quot;Вы успешно авторизовались!&quot;);
    }
    else
    {
        //если нет то считаем попытки ввода пароля
        SetPVarInt(playerid,&quot;wrong_password&quot;,GetPVarInt(playerid,&quot;wrong_password&quot;) + 1)
        ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,&quot;Авторизация&quot;,&quot;Не верный пароль!&quot;,&quot;Далее&quot;,&quot;&quot;);
        new str[64];
        format(str,sizeof(str),&quot;У вас осталось: %d попыток&quot;,GetPVarInt(playerid,&quot;wrong_password&quot;));
        SendClientMessage(playerid,-1,str);//форматируем строку, где говорим игроку сколько у него осталось попыток
        if(GetPVarInt(playerid,&quot;wrong_password&quot;) &gt;= 5) return Kick(playerid);//если игрок использовал больше 5 попыток, то кикаем его
    }

}">
<span><span>public</span><span> OnDialogResponse(playerid, dialogid, response, li</span><span>stitem, inputtext[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>switch</span><span>(dialogid)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>//case 1 это регистрация</span></span>
<span><span>        </span><span>case</span><span> </span><span>1</span><span>:</span></span>
<span><span>        {</span></span>
<span><span>            </span><span>if</span><span>(!response) </span><span>return</span><span> Kick(playerid); </span><span>// если игрок отказывается от регистрации кикаем </span><span>его.</span></span>
<span><span>            </span><span>if</span><span>(strlen(inputtext) &lt; </span><span>4</span><span> || strlen(inputtext) &gt; </span><span>32</span><span> || strlen(inputtext) == </span><span>0</span><span>) </span><span>return</span><span> ShowPlayerDialog(playerid, </span><span>1</span><span>, DIALOG_STYLE_INPUT, </span><span>"Регистрация"</span><span>, </span><span>"Длина пароля от 4 до 32 символов.\n Вы также не </span><span>можете продолжить не указав пароль"</span><span>, </span><span>"Далее"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>            </span><span>//это была проверка на длину пароля</span></span>
<span><span>            </span><span>for</span><span>(</span><span>new</span><span> i; i &lt; strlen(inputtext); i++)</span></span>
<span><span>            {</span></span>
<span><span>                </span><span>switch</span><span>(inputtext[i])</span></span>
<span><span>                {</span></span>
<span><span>                    </span><span>case</span><span> </span><span>'A'</span><span>..</span><span>'Z'</span><span>,</span><span>'a'</span><span>..</span><span>'z'</span><span>,</span><span>'0'</span><span>..</span><span>'9'</span><span>:</span><span>continue</span><span>;</span></span>
<span><span>                    </span><span>default</span><span>: </span><span>return</span><span> ShowPlayerDialog(playerid, </span><span>1</span><span>, DIALOG_STYLE_INPUT, </span><span>"Регистрация"</span><span>, </span><span>"Пароль может быть только: a-z, A-Z,0-9"</span><span>, </span><span>"Далее"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>                }</span></span>
<span><span>            }</span></span>
<span><span>            </span><span>//это проверка на символы,если игрок будет писать </span><span>пароль на русском, или какие нибудь другие символы</span></span>
<span><span>            </span><span>//например \*? то ему будет возвращатся этот же </span><span>диалог,а если все отлично то регистрация </span><span>продолжится.</span></span>
<span><span>            </span><span>new</span><span> query[</span><span>120</span><span> + MAX_PLAYER_NAME];</span><span>//также создали запрос</span></span>
<span><span>            format(query,</span><span>sizeof</span><span>(query),</span><span>"INSERT INTO `account` (`pNick`,`pPassword`,`pLeve</span><span>l`) VALUES ('%s','%s','1')"</span><span>),Player[playerid][pNick],inputtext);</span></span>
<span><span>            </span><span>/*Мы отформатировали строку,сделав в ней запрос: </span><span>Добавить строку в таблице account, со столбцами </span><span>pNick = '%s', %s значит строка</span></span>
<span><span>            в данном случае эта строка, это массив </span><span>который хранит в себе никнейм игрока,inputtext это </span><span>введеный текст игроком, pLevel это уровень </span><span>игрока,изначально в бд он будет 1.*/</span></span>
<span><span>            mysql_query(dbHandle,query);</span></span>
<span><span>            </span><span>//теперь делаем запрос на загрузку акканута.</span></span>
<span><span>            </span><span>new</span><span> query1[</span><span>100</span><span>];</span></span>
<span><span>            format(query1,</span><span>sizeof</span><span>(query1),</span><span>"SELECT * FROM `account` WHERE `pNick` = '%s'"</span><span>,Player[playerid][pNick]);</span><span>//отфарматироваали новый запрос</span></span>
<span><span>            mysql_function_query(dbHandle,query1,</span><span>true</span><span>,,</span><span>"LoadAcc"</span><span>,</span><span>"i"</span><span>,playerid);</span></span>
<span><span>        }</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>case</span><span> </span><span>2</span><span>:</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>if</span><span>(!response) </span><span>return</span><span> Kick(playerid); </span><span>// если игрок отказывается от авторизации также </span><span>кикаем его.</span></span>
<span><span>        </span><span>if</span><span>(strlen(inputtext) &lt; </span><span>4</span><span> || strlen(inputtext) &gt; </span><span>32</span><span> || strlen(inputtext) == </span><span>0</span><span>) </span><span>return</span><span> ShowPlayerDialog(playerid, </span><span>2</span><span>, DIALOG_STYLE_INPUT, </span><span>"Авторизация"</span><span>, </span><span>"Неверный пароль"</span><span>, </span><span>"Далее"</span><span>, </span><span>""</span><span>);</span><span>//Делаем проверку на длину пароля, т.к при </span><span>регистрации у нас пароль был от 4 до 32, тут тоже </span><span>самое должно быть</span></span>
<span><span>        </span><span>for</span><span>(</span><span>new</span><span> i; i &lt; strlen(inputtext); i++)</span></span>
<span><span>        {</span></span>
<span><span>            </span><span>switch</span><span>(inputtext[i])</span></span>
<span><span>            {</span></span>
<span><span>                </span><span>case</span><span> </span><span>'A'</span><span>..</span><span>'Z'</span><span>,</span><span>'a'</span><span>..</span><span>'z'</span><span>,</span><span>'0'</span><span>..</span><span>'9'</span><span>: </span><span>continue</span><span>;</span><span>//если он также вводит правильные символы </span><span>продолжаем выполнение кода для игрока.</span></span>
<span><span>                </span><span>default</span><span>: </span><span>return</span><span>  ShowPlayerDialog(playerid, </span><span>2</span><span>, DIALOG_STYLE_INPUT, </span><span>"Авторизация"</span><span>, </span><span>"Не верный пароль!"</span><span>, </span><span>"Далее"</span><span>, </span><span>""</span><span>);</span><span>// при вводе спец.символов ему будет возвращать </span><span>диалог авторизации</span></span>
<span><span>            }</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>new</span><span> query[</span><span>120</span><span>];</span></span>
<span><span>        format(query,</span><span>sizeof</span><span>(query),</span><span>"SELECT * FROM `account` WHERE `pNick` = '%s' AND </span><span>`pPassword` = '%s'"</span><span>,Player[playerid][pNick],inputtext)</span><span>//Загрузить информацию о игроке,и проверить </span><span>совпадает введеный пароль игроком,с тем который в </span><span>БД.</span></span>
<span><span>        mysql_function_query(dbHandle,query,</span><span>true</span><span>,</span><span>"CheckPass"</span><span>,</span><span>"i"</span><span>,playerid);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
<span><span>//создаем паблик LoadAcc</span></span>
<span><span>forward LoadAcc(playerid);</span></span>
<span><span>public</span><span> LoadAcc(playerid)</span></span>
<span><span>{</span></span>
<span><span>    Player[playerid][pID] = </span><span>cache_get_field_content_int(</span><span>0</span><span>,</span><span>"pID"</span><span>,dbHandle);</span><span>// 0 потому что в БД может быть только одна строка </span><span>с таким именем или ИД</span></span>
<span><span>    Player[playerid][pLevel] = </span><span>cache_get_field_content_int(</span><span>0</span><span>,</span><span>"pLevel"</span><span>,dbHandle);</span><span>// приравнение, то есть записываем Левел и ИД </span><span>игрока в наши массивы.</span></span>
<span><span>    </span><span>//Пароль и никнейм загружать не надо</span></span>
<span><span>}</span></span>
<span><span>forward CheckPass(playerid);</span></span>
<span><span>public</span><span> CheckPass(playerid)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>new</span><span> rows,fields;</span></span>
<span><span>    cache_get_data(rows,fields);</span><span>//сверяем пароль</span></span>
<span><span>    </span><span>if</span><span>(rows)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>//если веденный пароль совпадает с паролем в БД то </span><span>авторизуем игрока</span></span>
<span><span>        SpawnPlayer(playerid);</span></span>
<span><span>        SendClientMessage(playerid,-</span><span>1</span><span>,</span><span>"Вы успешно авторизовались!"</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>//если нет то считаем попытки ввода пароля</span></span>
<span><span>        SetPVarInt(playerid,</span><span>"wrong_password"</span><span>,GetPVarInt(playerid,</span><span>"wrong_password"</span><span>) + </span><span>1</span><span>)</span></span>
<span><span>        ShowPlayerDialog(playerid,</span><span>2</span><span>,DIALOG_STYLE_INPUT,</span><span>"Авторизация"</span><span>,</span><span>"Не верный пароль!"</span><span>,</span><span>"Далее"</span><span>,</span><span>""</span><span>);</span></span>
<span><span>        </span><span>new</span><span> str[</span><span>64</span><span>];</span></span>
<span><span>        format(str,</span><span>sizeof</span><span>(str),</span><span>"У вас осталось: %d попыток"</span><span>,GetPVarInt(playerid,</span><span>"wrong_password"</span><span>));</span></span>
<span><span>        SendClientMessage(playerid,-</span><span>1</span><span>,str);</span><span>//форматируем строку, где говорим игроку сколько у </span><span>него осталось попыток</span></span>
<span><span>        </span><span>if</span><span>(GetPVarInt(playerid,</span><span>"wrong_password"</span><span>) &gt;= </span><span>5</span><span>) </span><span>return</span><span> Kick(playerid);</span><span>//если игрок использовал больше 5 попыток, то </span><span>кикаем его</span></span>
<span><span>    }</span></span>

<span><span>}</span></span>
</pre>

<p>
	и в OnGameModeExit()
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeExit()
{
    mysql_close(dbHandle);//отключаемся от БД
    return 1;
}">
<span><span>public</span><span> OnGameModeExit()</span></span>
<span><span>{</span></span>
<span><span>    mysql_close(dbHandle);</span><span>//отключаемся от БД</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">6165</guid><pubDate>Sun, 06 Mar 2022 16:12:33 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448; &#x43D;&#x430; &#x43A;&#x430;&#x43A;&#x438;&#x435;-&#x43B;&#x438;&#x431;&#x43E; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x44F;</title><link>https://pawno-rus.com/topic/6088-naznachenie-klavish-na-kakie-libo-deystviya/</link><description><![CDATA[
<p>
	Здрасти, сегодня мы разберем паблик public OnPlayerKeyStateChange. // он п<b style="color:#333333;">редназначается для того,чтобы на какую либо клавишу сделать действие.</b>
</p>

<p>
	Начнем!)
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)

{

    if(newkeys == ID)// если написать newkeys &amp;&amp; ID то тогда если у вас зажаты другие клавишы код сработает,а если стоит == то код сработает когда все клавиши будут отжаты.
    {

        //действие
    }

    //допустим,мы хотим чтобы когда игрок нажимал клавишу N,у него выводилось сообщение в чате.
    if(newkeys &amp;&amp; 131072)// 131072 = KEY_NO
    {
        SendClientMessage(playerid,-1,&quot;Вы нажали клавишу &quot;N&quot; &quot;);
    }
    //создадим создание машины при нажатии кнопки LALT
    
        if(newkeys &amp; 1024)
        {
            new Float:pos[3]; // создаем перемуную, в которой храним координаты игрока
            GetPlayerPos(playerid,pos[0],pos[1],pos[2]);// узнаем и записываем эти координаты в перемуню &quot;pos&quot;
            CreateVehicle(Modelid,pos[0],pos[1]+2.1,pos[2]+2.9,color1,color2,-1);//создаем машину по координатам игрока

        }
        // Вот и все)
    return 1;

}">
<span><span>public</span><span> OnPlayerKeyStateChange(playerid, newkeys, oldkeys</span><span>)</span></span>

<span><span>{</span></span>

<span><span>    </span><span>if</span><span>(newkeys == ID)</span><span>// если написать newkeys &amp;&amp; ID то тогда если у вас </span><span>зажаты другие клавишы код сработает,а если стоит </span><span>== то код сработает когда все клавиши будут </span><span>отжаты.</span></span>
<span><span>    {</span></span>

<span><span>        </span><span>//действие</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>//допустим,мы хотим чтобы когда игрок нажимал </span><span>клавишу N,у него выводилось сообщение в чате.</span></span>
<span><span>    </span><span>if</span><span>(newkeys &amp;&amp; </span><span>131072</span><span>)</span><span>// 131072 = KEY_NO</span></span>
<span><span>    {</span></span>
<span><span>        SendClientMessage(playerid,-</span><span>1</span><span>,</span><span>"Вы нажали клавишу "</span><span>N</span><span>" "</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>//создадим создание машины при нажатии кнопки LALT</span></span>
<span><span>    </span></span>
<span><span>        </span><span>if</span><span>(newkeys &amp; </span><span>1024</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>            </span><span>new</span><span> Float:pos[</span><span>3</span><span>]; </span><span>// создаем перемуную, в которой храним координаты </span><span>игрока</span></span>
<span><span>            GetPlayerPos(playerid,pos[</span><span>0</span><span>],pos[</span><span>1</span><span>],pos[</span><span>2</span><span>]);</span><span>// узнаем и записываем эти координаты в перемуню </span><span>"pos"</span></span>
<span><span>            CreateVehicle(Modelid,pos[</span><span>0</span><span>],pos[</span><span>1</span><span>]+</span><span>2.1</span><span>,pos[</span><span>2</span><span>]+</span><span>2.9</span><span>,color1,color2,-</span><span>1</span><span>);</span><span>//создаем машину по координатам игрока</span></span>

<span><span>        }</span></span>
<span><span>        </span><span>// Вот и все)</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>

<span><span>}</span></span>
</pre>

<p>
	Жду поправок)
</p>
]]></description><guid isPermaLink="false">6088</guid><pubDate>Mon, 31 Jan 2022 13:17:36 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x447;&#x430;&#x43B;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; Pawn</title><link>https://pawno-rus.com/topic/6044-nachalo-raboty-s-pawn/</link><description><![CDATA[
<p>
	Начнем наш урок. Что такое павно?
</p>

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

<p>
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</p>

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

<p>
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</p>

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

<p>
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</p>

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

<p>
	Пример: 
</p>

<pre style="color:#444444;">
main<span style="color:#008000;">(</span><span style="color:#008000;">)</span>
<span style="color:#008000;">{</span>
	print<span style="color:#008000;">(</span><span style="color:#ff0000;">"Hello, World!"</span><span style="color:#008000;">)</span><span style="color:#008080;">;</span>
<span style="color:#008000;">}</span></pre>

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

<pre style="color:#444444;">
<span style="color:#222222;">Для форматирования используются следующие заполнители:</span>
<strong style="color:#222222;">%b</strong><span style="color:#222222;"><span> </span>— двоичная система счисления</span>
<strong style="color:#222222;">%c</strong><span style="color:#222222;"><span> </span>— один символ</span>
<strong style="color:#222222;">%d</strong><span style="color:#222222;"><span> </span>— целое число</span>
<strong style="color:#222222;">%f</strong><span style="color:#222222;"><span> </span>— дробное число</span>
<strong style="color:#222222;">%i</strong><span style="color:#222222;"><span> </span>— целое число</span>
<strong style="color:#222222;">%s</strong><span style="color:#222222;"><span> </span>— строка</span>
<strong style="color:#222222;">%x</strong><span style="color:#222222;"><span> </span>— шестнадцатеричная система счисления</span>
<strong style="color:#222222;">%%</strong><span style="color:#222222;"><span> </span>— знак %</span>
</pre>

<p>
	<font color="#222222">Пример:</font>
</p>

<pre style="color:#444444;">
Main<span style="color:#008000;">(</span><span style="color:#008000;">)</span>
<span style="color:#008000;">{</span>
	<span style="color:#0000dd;">new</span> x <span style="color:#000080;">=</span> <span style="color:#0000dd;">1</span><span style="color:#008080;">;</span>
	<span style="color:#0000dd;">printf</span><span style="color:#008000;">(</span><span style="color:#ff0000;">"x = %d"</span>,x<span style="color:#008000;">)</span><span style="color:#008080;">;</span>
<span style="color:#008000;">}</span></pre>

<p>
	<span style="color:#008000;">                                                                                                  Авторские права функций: </span><em><strong><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly96aWdnaS5vcmcv" style="color:#515151;" rel="external nofollow">ziggi — blog</a></strong></em>
</p>

<p>
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</p>

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

<p>
	Например код без цикла:<br />
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");

SendClientMessage(Playerid,0xFFFFFFFFFF,"");</span></pre>

<p>
	Код с циклом:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">new 8;

while(a++) &lt; 10)

{

       SendClientMessage(playerid, 0xFFFFFFFFFFFFFF,"");

}</span></pre>

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

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

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

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

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">for(new a; a &lt; 50; a++)
{
if(a == 10 &amp;&amp; GetPlayerMoney(a) == 100) //Если у игрока под ID 10 имеется ровно 100 долларов
{
break; //Завершаем действие цикла
      }
}</span></pre>

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

<p>
	                                                                                              Авторские права циклов: <strong><em>Dymov1203</em></strong>
</p>

<p>
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">6044</guid><pubDate>Sun, 09 Jan 2022 10:45:52 +0000</pubDate></item></channel></rss>
