<?xml version="1.0"?>
<rss version="2.0"><channel><title>PHP / HTML / CSS  &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</title><link>https://pawno-rus.com/forum/52-php-html-css/</link><description>PHP / HTML / CSS  &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</description><language>ru</language><item><title>&#x421;&#x43E;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x438;&#x433;&#x440;&#x43E;&#x432;&#x43E;&#x439; &#x441;&#x430;&#x439;&#x442; &#x43F;&#x43E;&#x434; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;</title><link>https://pawno-rus.com/topic/8657-sovremennyy-igrovoy-sayt-pod-lyuboy-proekt/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">Всем привет! Давно меня не было в разработке. Но я снова вернулся и решил выкатить обнову Game-девам.<br /><br />
	RPoject - это универсальный игровой сайт, который подойдет абсолютно под любой проект. SAMP, CRMP, GTA V и даже CS2. </span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">Но более привлекательно - это возможность его добавить вообщем под свой движок с UE или Unity. Создали вы свою игру, пожалуйста, сайт уже готов.</span>
</p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;"><strong>Что присутствует на сайте:</strong><br />
	1. Главная страница с рассказом и показом о вашем проекте.</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">2. Страница магазина уже с готовыми марками и модалами. Осталось лишь заменить ссылки и картинка с названиями!</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">3. Личный кабинет. Подойдет для онлайн проектов или офлайн гейм с MySQL. Настроить очень легко.<br /><br /><strong>В случае вопросов?</strong></span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">В случае если у вас возникнут вопросы по сайту, пишите в эту тему или в личные сообщения. Расскажу, покажу, помогу настроить!</span>
</p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<span style="color:#e67e22;"><span style="font-family:'Courier New', Courier, monospace;">Если кому станет интересен сайт или он захочет его использовать для коммерческой цели для своего фулл проекта. Напиши мне в лс, я дам полный код php, MySQL и настрою под проект. (p.s: это платно)</span></span>
</p>

<p style="text-align:center;">
	 
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p style="text-align:center;">
			Скачать можно в тг <span><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly90Lm1lL215bGFiNQ==" rel="external nofollow">@mylab5</a></span><br />
			Название: RPoject
		</p>

		<p style="text-align:center;">
			Вес: 182мб
		</p>

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

<p style="text-align:center;">
	 
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24447" href="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-46-55.png.8e4b07ff30f0029d1266a5a8b510729b.png" rel=""><img alt="2026-01-12_21-46-55.thumb.png.ee492c54f80a591eddef22a7ef1951c7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24447" src="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-46-55.thumb.png.ee492c54f80a591eddef22a7ef1951c7.png" /></a>
		</p>

		<p>
			 
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24446" href="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-47-17.png.dd29c221fa4d187386ae78329d390090.png" rel=""><img alt="2026-01-12_21-47-17.thumb.png.5467219a418a1e5e101e148bd1de48d4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24446" src="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-47-17.thumb.png.5467219a418a1e5e101e148bd1de48d4.png" /></a>
		</p>

		<p>
			 
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24445" href="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-47-42.png.4dcb089dad6e0613686032e4ad4de740.png" rel=""><img alt="2026-01-12_21-47-42.thumb.png.abad8df437f37462891652b01e0e6794.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24445" src="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-47-42.thumb.png.abad8df437f37462891652b01e0e6794.png" /></a>
		</p>

		<p>
			 
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24444" href="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-48-22.png.eaf520f43f884d4d60b5d39f6a6684d5.png" rel=""><img alt="2026-01-12_21-48-22.thumb.png.ffe379b84bfe11a6147a7d39e20ffb2f.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24444" src="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-48-22.thumb.png.ffe379b84bfe11a6147a7d39e20ffb2f.png" /></a>
		</p>

		<p>
			 
		</p>

		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24443" href="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-48-45.png.287a7b80de9337d319debc9bf88cf9b7.png" rel=""><img alt="2026-01-12_21-48-45.thumb.png.7874710f43bec6b65c074c4d997b5496.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24443" src="//storage.yandexcloud.net/pawnorus/monthly_2026_01/2026-01-12_21-48-45.thumb.png.7874710f43bec6b65c074c4d997b5496.png" /></a>
		</p>
	</div>
</div>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;"> </span>
</p>
]]></description><guid isPermaLink="false">8657</guid><pubDate>Mon, 12 Jan 2026 13:58:30 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x43C;&#x43E;&#x433;&#x438;&#x442;&#x435; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x441;&#x441;&#x44B;&#x43B;&#x43A;&#x443; &#x43D;&#x430; cef, &#x432; &#x43E;&#x440;&#x438;&#x433;&#x438;&#x43D;&#x430;&#x43B; &#x43C;&#x43E;&#x434;&#x435; &#x43A;&#x443;&#x434;&#x430; &#x442;&#x43E; &#x432;&#x43F;&#x438;&#x441;&#x430;&#x43D; &#x441;&#x442;&#x430;&#x440;&#x44B;&#x439; &#x430;&#x434;&#x440;&#x435;&#x441; &#x432;&#x435;&#x431; &#x445;&#x43E;&#x441;&#x442;&#x438;&#x43D;&#x433;&#x430; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x443;&#x436;&#x435; &#x43D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;</title><link>https://pawno-rus.com/topic/8608-pomogite-zamenit-ssylku-na-cef-v-original-mode-kuda-to-vpisan-staryy-adres-veb-hostinga-kotoryy-uzhe-ne-rabotaet/</link><description><![CDATA[<p>
	Нужно поменять ссылку на цеф и прошу немного помочь с заливом цефа на хостинг, т.к не имею знаний в этой сфере
</p>]]></description><guid isPermaLink="false">8608</guid><pubDate>Sat, 08 Nov 2025 04:10:34 +0000</pubDate></item><item><title>&#x43F;&#x43E;&#x43C;&#x43E;&#x433;&#x438;&#x442;&#x435; &#x441; &#x43F;&#x43B;&#x430;&#x433;&#x438;&#x43D;&#x43E;&#x43C;  First Statistics Pro 1.0.0.2</title><link>https://pawno-rus.com/topic/8453-pomogite-s-plaginom-first-statistics-pro-1002/</link><description><![CDATA[<p>
	не работает плагин First Statistics Pro<span> </span><span style="color:#8c8c8c;">1.0.0.2  заливаю нечего не происходит нечего не полявляется    </span>
</p>]]></description><guid isPermaLink="false">8453</guid><pubDate>Sat, 26 Jul 2025 19:05:33 +0000</pubDate></item><item><title>&#x41E;&#x442;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x431;&#x438;&#x437;&#x43D;&#x435;&#x441;&#x43E;&#x432; &#x43D;&#x430; &#x43A;&#x430;&#x440;&#x442;&#x435; &#x448;&#x442;&#x430;&#x442;&#x430;</title><link>https://pawno-rus.com/topic/8451-otobrazheniya-biznesov-na-karte-shtata/</link><description><![CDATA[
<p>
	<span style="color:#141414;">Бизнесы на карте не отображаются.</span><br style="color:#141414;" /><br style="color:#141414;" /><span style="color:#141414;">дома отображаются но бизнесы нет.</span><br style="color:#141414;" />
	 
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="&lt;?php
class CFG {
    const DB_URL = 'd';
    const DB_USER = 'd';
    const DB_PASSWORD = 'd';
    const DB_NAME = 'd';
}

header('Content-Type: application/json');
$mysqli = @new mysqli(CFG::DB_URL, CFG::DB_USER, CFG::DB_PASSWORD, CFG::DB_NAME);
if ($mysqli-&gt;connect_error) {
    die(json_encode(['error' =&gt; &quot;Ошибка подключения: &quot; . $mysqli-&gt;connect_error]));
}

$mysqli-&gt;set_charset(&quot;utf8&quot;);

$output = [
    'houses' =&gt; ['hasOwner' =&gt; [], 'noOwner' =&gt; []],
    'businesses' =&gt; ['hasOwner' =&gt; [], 'noOwner' =&gt; []]
];

function parseCoords($coordString) {
    $coords = explode(',', $coordString);
    return [
        'x' =&gt; isset($coords[0]) ? (float)$coords[0] : 0,
        'y' =&gt; isset($coords[1]) ? (float)$coords[1] : 0
    ];
}

$houses = $mysqli-&gt;query(&quot;SELECT ID, Enter_X, Enter_Y, Name, Owner FROM houses&quot;);
if ($houses) {
    while ($house = $houses-&gt;fetch_assoc()) {
        $item = [
            'id' =&gt; (int)$house['ID'],
            'lx' =&gt; (float)$house['Enter_X'],
            'ly' =&gt; (float)$house['Enter_Y'],
            'name' =&gt; !empty($house['Name']) ? $house['Name'] : 'Дом №'.$house['ID'],
            'owner' =&gt; $house['Owner'],
            'hasAuction' =&gt; 0,
            'auMinBet' =&gt; 0,
            'auTimeEnd' =&gt; 0,
            'auStartPrice' =&gt; 0
        ];
       
        $category = ($house['Owner'] == &quot;The State&quot; || empty($house['Owner'])) ? 'noOwner' : 'hasOwner';
        $output['houses'][$category][] = $item;
    }
    $houses-&gt;close();
}

$businesses = $mysqli-&gt;query(&quot;SELECT ID, Enter, Exit, Name, Owner, Cost, State FROM businesses ORDER BY ID&quot;);
if ($businesses) {
    while ($biz = $businesses-&gt;fetch_assoc()) {
        $enter = parseCoords($biz['Enter'] ?? '0,0,0');
        $exit = parseCoords($biz['Exit'] ?? '0,0,0');
       
        $item = [
            'id' =&gt; (int)$biz['ID'],
            'lx' =&gt; $enter['x'],
            'ly' =&gt; $exit['y'],
            'name' =&gt; !empty($biz['Name']) ? $biz['Name'] : 'Бизнес №'.$biz['ID'],
            'owner' =&gt; $biz['Owner'],
            'cost' =&gt; (int)$biz['Cost'],
            'state' =&gt; (int)$biz['State'],
            'hasAuction' =&gt; 0,
            'auMinBet' =&gt; 0,
            'auTimeEnd' =&gt; 0,
            'auStartPrice' =&gt; 0
        ];
       
        $category = ($biz['Owner'] == &quot;The State&quot; || empty($biz['Owner'])) ? 'noOwner' : 'hasOwner';
        $output['businesses'][$category][] = $item;
    }
    $businesses-&gt;close();
}

$mysqli-&gt;close();

foreach ($output as &amp;$type) {
    foreach ($type as &amp;$category) {
        if (empty($category)) $category = [];
    }
}

echo json_encode($output, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?&gt;">
<span><span>&lt;?php</span></span>
<span><span>class</span><span> CFG {</span></span>
<span><span>    </span><span>const</span><span> DB_URL = </span><span>'d'</span><span>;</span></span>
<span><span>    </span><span>const</span><span> DB_USER = </span><span>'d'</span><span>;</span></span>
<span><span>    </span><span>const</span><span> DB_PASSWORD = </span><span>'d'</span><span>;</span></span>
<span><span>    </span><span>const</span><span> DB_NAME = </span><span>'d'</span><span>;</span></span>
<span><span>}</span></span>

<span><span>header(</span><span>'</span><span>Content-Type: application/json</span><span>'</span><span>);</span></span>
<span><span>$mysqli = @</span><span>new</span><span> mysqli(CFG::DB_URL, CFG::DB_USER, CFG::DB_PASSWOR</span><span>D, CFG::DB_NAME);</span></span>
<span><span>if</span><span> ($mysqli-&gt;connect_error) {</span></span>
<span><span>    die(json_encode([</span><span>'</span><span>error</span><span>'</span><span> =&gt; </span><span>"Ошибка подключения: "</span><span> . $mysqli-&gt;connect_error]));</span></span>
<span><span>}</span></span>

<span><span>$mysqli-&gt;set_charset(</span><span>"utf8"</span><span>);</span></span>

<span><span>$output = [</span></span>
<span><span>    </span><span>'</span><span>houses</span><span>'</span><span> =&gt; [</span><span>'</span><span>hasOwner</span><span>'</span><span> =&gt; [], </span><span>'</span><span>noOwner</span><span>'</span><span> =&gt; []],</span></span>
<span><span>    </span><span>'</span><span>businesses</span><span>'</span><span> =&gt; [</span><span>'</span><span>hasOwner</span><span>'</span><span> =&gt; [], </span><span>'</span><span>noOwner</span><span>'</span><span> =&gt; []]</span></span>
<span><span>];</span></span>

<span><span>function parseCoords($coordString) {</span></span>
<span><span>    $coords = explode(</span><span>','</span><span>, $coordString);</span></span>
<span><span>    </span><span>return</span><span> [</span></span>
<span><span>        </span><span>'x'</span><span> =&gt; isset($coords[</span><span>0</span><span>]) ? (</span><span>float</span><span>)$coords[</span><span>0</span><span>] : </span><span>0</span><span>,</span></span>
<span><span>        </span><span>'y'</span><span> =&gt; isset($coords[</span><span>1</span><span>]) ? (</span><span>float</span><span>)$coords[</span><span>1</span><span>] : </span><span>0</span></span>
<span><span>    ];</span></span>
<span><span>}</span></span>

<span><span>$houses = $mysqli-&gt;query(</span><span>"SELECT ID, Enter_X, Enter_Y, Name, Owner FROM hou</span><span>ses"</span><span>);</span></span>
<span><span>if</span><span> ($houses) {</span></span>
<span><span>    </span><span>while</span><span> ($house = $houses-&gt;fetch_assoc()) {</span></span>
<span><span>        $item = [</span></span>
<span><span>            </span><span>'</span><span>id</span><span>'</span><span> =&gt; (</span><span>int</span><span>)$house[</span><span>'</span><span>ID</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>lx</span><span>'</span><span> =&gt; (</span><span>float</span><span>)$house[</span><span>'</span><span>Enter_X</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>ly</span><span>'</span><span> =&gt; (</span><span>float</span><span>)$house[</span><span>'</span><span>Enter_Y</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>name</span><span>'</span><span> =&gt; !empty($house[</span><span>'</span><span>Name</span><span>'</span><span>]) ? $house[</span><span>'</span><span>Name</span><span>'</span><span>] : </span><span>'</span><span>Дом №</span><span>'</span><span>.$house[</span><span>'</span><span>ID</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>owner</span><span>'</span><span> =&gt; $house[</span><span>'</span><span>Owner</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>hasAuction</span><span>'</span><span> =&gt; </span><span>0</span><span>,</span></span>
<span><span>            </span><span>'</span><span>auMinBet</span><span>'</span><span> =&gt; </span><span>0</span><span>,</span></span>
<span><span>            </span><span>'</span><span>auTimeEnd</span><span>'</span><span> =&gt; </span><span>0</span><span>,</span></span>
<span><span>            </span><span>'</span><span>auStartPrice</span><span>'</span><span> =&gt; </span><span>0</span></span>
<span><span>        ];</span></span>
<span><span>       </span></span>
<span><span>        $category = ($house[</span><span>'</span><span>Owner</span><span>'</span><span>] == </span><span>"The State"</span><span> || empty($house[</span><span>'</span><span>Owner</span><span>'</span><span>])) ? </span><span>'</span><span>noOwner</span><span>'</span><span> : </span><span>'</span><span>hasOwner</span><span>'</span><span>;</span></span>
<span><span>        $output[</span><span>'</span><span>houses</span><span>'</span><span>][$category][] = $item;</span></span>
<span><span>    }</span></span>
<span><span>    $houses-&gt;close();</span></span>
<span><span>}</span></span>

<span><span>$businesses = $mysqli-&gt;query(</span><span>"SELECT ID, Enter, Exit, Name, Owner, Cost, State </span><span>FROM businesses ORDER BY ID"</span><span>);</span></span>
<span><span>if</span><span> ($businesses) {</span></span>
<span><span>    </span><span>while</span><span> ($biz = $businesses-&gt;fetch_assoc()) {</span></span>
<span><span>        $enter = parseCoords($biz[</span><span>'</span><span>Enter</span><span>'</span><span>] ?? </span><span>'</span><span>0</span><span>,</span><span>0</span><span>,</span><span>0</span><span>'</span><span>);</span></span>
<span><span>        $exit = parseCoords($biz[</span><span>'</span><span>Exit</span><span>'</span><span>] ?? </span><span>'</span><span>0</span><span>,</span><span>0</span><span>,</span><span>0</span><span>'</span><span>);</span></span>
<span><span>       </span></span>
<span><span>        $item = [</span></span>
<span><span>            </span><span>'</span><span>id</span><span>'</span><span> =&gt; (</span><span>int</span><span>)$biz[</span><span>'</span><span>ID</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>lx</span><span>'</span><span> =&gt; $enter[</span><span>'x'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>ly</span><span>'</span><span> =&gt; $exit[</span><span>'y'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>name</span><span>'</span><span> =&gt; !empty($biz[</span><span>'</span><span>Name</span><span>'</span><span>]) ? $biz[</span><span>'</span><span>Name</span><span>'</span><span>] : </span><span>'</span><span>Бизнес №</span><span>'</span><span>.$biz[</span><span>'</span><span>ID</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>owner</span><span>'</span><span> =&gt; $biz[</span><span>'</span><span>Owner</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>cost</span><span>'</span><span> =&gt; (</span><span>int</span><span>)$biz[</span><span>'</span><span>Cost</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>state</span><span>'</span><span> =&gt; (</span><span>int</span><span>)$biz[</span><span>'</span><span>State</span><span>'</span><span>],</span></span>
<span><span>            </span><span>'</span><span>hasAuction</span><span>'</span><span> =&gt; </span><span>0</span><span>,</span></span>
<span><span>            </span><span>'</span><span>auMinBet</span><span>'</span><span> =&gt; </span><span>0</span><span>,</span></span>
<span><span>            </span><span>'</span><span>auTimeEnd</span><span>'</span><span> =&gt; </span><span>0</span><span>,</span></span>
<span><span>            </span><span>'</span><span>auStartPrice</span><span>'</span><span> =&gt; </span><span>0</span></span>
<span><span>        ];</span></span>
<span><span>       </span></span>
<span><span>        $category = ($biz[</span><span>'</span><span>Owner</span><span>'</span><span>] == </span><span>"The State"</span><span> || empty($biz[</span><span>'</span><span>Owner</span><span>'</span><span>])) ? </span><span>'</span><span>noOwner</span><span>'</span><span> : </span><span>'</span><span>hasOwner</span><span>'</span><span>;</span></span>
<span><span>        $output[</span><span>'</span><span>businesses</span><span>'</span><span>][$category][] = $item;</span></span>
<span><span>    }</span></span>
<span><span>    $businesses-&gt;close();</span></span>
<span><span>}</span></span>

<span><span>$mysqli-&gt;close();</span></span>

<span><span>foreach ($output as &amp;$type) {</span></span>
<span><span>    foreach ($type as &amp;$category) {</span></span>
<span><span>        </span><span>if</span><span> (empty($category)) $category = [];</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>

<span><span>echo json_encode($output, JSON_UNESCAPED_UNICODE |</span><span> JSON_PRETTY_PRINT);</span></span>
<span><span>?&gt;</span></span>
</pre>

<p>
	 
</p>

<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2025_07/68834a98b5042_(291).png.4b052ddf153f45aced0c50315610e810.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="24112" src="//storage.yandexcloud.net/pawnorus/monthly_2025_07/68834a9961fd5_(291).thumb.png.1e06e86579aeba8d9169c79843c111f8.png" class="ipsImage ipsImage_thumbnailed" alt="Снимок экрана (291).png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2025_07/68834a9fa91f7_(290).png.d96222ab1f03988841bce915ac7d0dc7.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="24113" src="//storage.yandexcloud.net/pawnorus/monthly_2025_07/68834aa0a1550_(290).thumb.png.8c69193a37efb50a93faafcba454089c.png" class="ipsImage ipsImage_thumbnailed" alt="Снимок экрана (290).png"></a></p>]]></description><guid isPermaLink="false">8451</guid><pubDate>Fri, 25 Jul 2025 09:13:06 +0000</pubDate></item><item><title>&#x41E;&#x448;&#x438;&#x431;&#x43A;&#x430; &#x43F;&#x440;&#x438; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x438; &#x432; &#x431;&#x430;&#x437;&#x443;</title><link>https://pawno-rus.com/topic/8184-oshibka-pri-zapisi-v-bazu/</link><description><![CDATA[
<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="&#13;
#include &lt;a_samp&gt;&#13;
&#13;
#include &lt;fix&gt;&#13;
#include &lt;a_mysql&gt;&#13;
#include &lt;streamer&gt;&#13;
#include &lt;Pawn.CMD&gt;&#13;
#include &lt;sscanf2&gt;&#13;
#include &lt;foreach&gt;&#13;
#include &lt;Pawn.Regex&gt;&#13;
#include &lt;crashdetect&gt;&#13;
&#13;
#define     MYSQL_HOST  &quot;localhost&quot;&#13;
#define     MYSQL_USER  &quot;root&quot;&#13;
#define     MYSQL_PASS  &quot;&quot;&#13;
#define     MYSQL_BASE  &quot;inewrp&quot;&#13;
&#13;
#define SCM     SendClientMessage&#13;
#define SCMTA   SendClientMessageToAll&#13;
#define SPD     ShowPlayerDialog&#13;
&#13;
#define COLOR_WHITE 0xFFFFFFFF&#13;
#define COLOR_RED   0xFF0000FF&#13;
&#13;
&#13;
&#13;
main()&#13;
{&#13;
    print(&quot;\n----------------------------------&quot;);&#13;
    print(&quot;-------NEW PROJECT STARTED--------&quot;);&#13;
    print(&quot;----------------------------------\n&quot;);&#13;
}&#13;
&#13;
new MySQL:dbHandle;&#13;
&#13;
&#13;
enum player&#13;
{&#13;
    ID,&#13;
    NAME[MAX_PLAYER_NAME],&#13;
    PASSWORD[65],&#13;
    SALT[10],&#13;
    EMAIL[65],&#13;
    REF,&#13;
    SEX,&#13;
    RACE,&#13;
    AGE,&#13;
    SKIN,&#13;
    REGDATA[13],&#13;
    REGIP[16],&#13;
}&#13;
new player_info[MAX_PLAYERS][player];&#13;
&#13;
enum dialogs&#13;
{&#13;
    DLG_NONE,&#13;
    DLG_REG,&#13;
    DLG_REGEMAIL,&#13;
    DLG_REGREF,&#13;
    DLG_REGSEX,&#13;
    DLG_REGRACE,&#13;
    DLG_REGAGE,&#13;
    DLG_LOG,&#13;
}&#13;
&#13;
public OnGameModeInit()&#13;
{&#13;
    ConnectMySQL();&#13;
    return 1;&#13;
}&#13;
&#13;
stock ConnectMySQL()&#13;
{&#13;
    dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE);&#13;
    switch(mysql_errno())&#13;
    {&#13;
        case 0: print(&quot;Подключение к MySQL успешно&quot;);&#13;
        default: print(&quot;MySQL не подключён&quot;);&#13;
    }&#13;
    mysql_log(ERROR | WARNING);&#13;
    mysql_set_charset(&quot;cp1251&quot;);&#13;
}&#13;
&#13;
public OnGameModeExit()&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerRequestClass(playerid, classid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerConnect(playerid)&#13;
{&#13;
    GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME);&#13;
    static const fmt_query[] = &quot;SELECT `id` FROM `users` WHERE `name` = '%s'&quot;;&#13;
    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];&#13;
    format(query, sizeof(query), fmt_query, player_info[playerid][NAME]);&#13;
    mysql_tquery(dbHandle, query, &quot;CheckRegistration&quot;, &quot;i&quot;, playerid);&#13;
    return 1;&#13;
}&#13;
&#13;
forward CheckRegistration(playerid);&#13;
public CheckRegistration(playerid)&#13;
{&#13;
    new rows;&#13;
    cache_get_row_count(rows);&#13;
    if(rows) ShowLogin(playerid);&#13;
    else ShowRegistration(playerid);&#13;
    &#13;
}&#13;
&#13;
stock ShowLogin(playerid)&#13;
{&#13;
    SCM(playerid, COLOR_WHITE, &quot;Игрок зарегистрирован&quot;);&#13;
}&#13;
&#13;
stock ShowRegistration(playerid)&#13;
{&#13;
    new dialog[386+(-2+MAX_PLAYER_NAME)];&#13;
    format(dialog, sizeof(dialog),&#13;
        &quot;{FFFFFF}Уважаемый {0f97ff}%s{FFFFFF}, мы рады видеть вас на сервере {ffaa3b}INewRolePlay{FFFFFF}\n\&#13;
        Аккаунт с таким именем не зарегистрирован\n\&#13;
        Для начала игры пройдите регистрацию\n\n\&#13;
        Напишите пароль для вашего акккаунта и нажмите \&quot;Готово\&quot;\n\&#13;
        {ff6a00}\tУсловия:\n\&#13;
        \t•Пароль должен быть от 8 до 32-х символов\n\&#13;
        \t•Пароль должен быть только из цифр и латинских символов любого регистра&quot;,&#13;
    player_info[playerid][NAME]&#13;
    );&#13;
    SPD(playerid, DLG_REG, DIALOG_STYLE_INPUT, &quot;{0f97ff}Регистрация{FFFFFF} • Введите пароль&quot;, dialog, &quot;Готово&quot;, &quot;Назад&quot;);&#13;
}&#13;
&#13;
public OnPlayerDisconnect(playerid, reason)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerSpawn(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerDeath(playerid, killerid, reason)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnVehicleSpawn(vehicleid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnVehicleDeath(vehicleid, killerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerText(playerid, text[])&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerCommandText(playerid, cmdtext[])&#13;
{&#13;
    return 0;&#13;
}&#13;
&#13;
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerExitVehicle(playerid, vehicleid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerStateChange(playerid, newstate, oldstate)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerEnterCheckpoint(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerLeaveCheckpoint(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerEnterRaceCheckpoint(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerLeaveRaceCheckpoint(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnRconCommand(cmd[])&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerRequestSpawn(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnObjectMoved(objectid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerObjectMoved(playerid, objectid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerPickUpPickup(playerid, pickupid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnVehicleMod(playerid, vehicleid, componentid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnVehicleRespray(playerid, vehicleid, color1, color2)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerSelectedMenuRow(playerid, row)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerExitedMenu(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnRconLoginAttempt(ip[], password[], success)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerUpdate(playerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerStreamIn(playerid, forplayerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerStreamOut(playerid, forplayerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnVehicleStreamIn(vehicleid, forplayerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnVehicleStreamOut(vehicleid, forplayerid)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])&#13;
{&#13;
    switch(dialogid)&#13;
    {&#13;
        case DLG_REG:&#13;
        {&#13;
            if(response)&#13;
            {&#13;
                if(!strlen(inputtext))&#13;
                {&#13;
                    ShowRegistration(playerid);&#13;
                    return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Введите в поле ниже пароль&quot;);&#13;
                }&#13;
                if(strlen(inputtext) &lt; 8 || strlen(inputtext) &gt; 32)&#13;
                {&#13;
                    ShowRegistration(playerid);&#13;
                    return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Длина пароля должна быть от 8 до 32-х символов&quot;);&#13;
                }&#13;
                new regex:rg_passwordcheck = regex_new(&quot;^[a-zA-Z0-9]{1,}$&quot;);&#13;
                if(regex_check(inputtext, rg_passwordcheck))&#13;
                {&#13;
                    new salt[11];&#13;
                    for(new i; i &lt; 10; i++)&#13;
                    {&#13;
                        salt[i] = random(79) + 47;&#13;
                    }&#13;
                    salt[10] = 0;&#13;
                    SHA256_PassHash(inputtext, salt, player_info[playerid][PASSWORD], 65);&#13;
                    strmid(player_info[playerid][SALT], salt, 0, 11, 11);&#13;
                    SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Введите EMAIL&quot;,&#13;
                        &quot;{FFFFFF}Введите ваш Email адрес ниже и нажмите \&quot;Готово\&quot;\n\&#13;
                        Если вы потеряете доступ к аккаунту вы можете восстановить его&quot;,&#13;
                    &quot;Готово&quot;,&quot;&quot;);&#13;
                }&#13;
                else&#13;
                {&#13;
                    ShowRegistration(playerid);&#13;
                    return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Пароль может состоять только из латинских сиволов и чисел&quot;);&#13;
                }&#13;
                regex_delete(rg_passwordcheck);&#13;
            }&#13;
            else&#13;
            {&#13;
                SCM(playerid, COLOR_RED, &quot;-Подсказка- {FFFFFF} Используйте \&quot;/q\&quot;, для выхода&quot;);&#13;
                SPD(playerid, -1, 0, &quot; &quot;, &quot; &quot;, &quot; &quot;, &quot;&quot;);&#13;
                return Kick(playerid);&#13;
            }&#13;
        }&#13;
        case DLG_REGEMAIL:&#13;
        {&#13;
            if(!strlen(inputtext))&#13;
            {&#13;
                SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Введите EMAIL&quot;,&#13;
                    &quot;{FFFFFF}Введите ваш Email адрес ниже и нажмите \&quot;Готово\&quot;\n\&#13;
                    Если вы потеряете доступ к аккаунту вы можете восстановить его&quot;,&#13;
                &quot;Готово&quot;,&quot;&quot;);&#13;
                return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Введите в поле ниже ваш Email!&quot;);&#13;
            }&#13;
            new regex:rg_emailcheck = regex_new(&quot;^[a-zA-Z0-9.-_]{1,43}@[a-zA-Z]{1,12}.{1,8}$&quot;);&#13;
            if(regex_check(inputtext, rg_emailcheck))&#13;
            {&#13;
                strmid(player_info[playerid][EMAIL], inputtext, 0, strlen(inputtext), 64);&#13;
                SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Введите реферала&quot;,&#13;
                    &quot;{ff6a00}Если вы зашли на сервер по приглашению{FFFFFF} \n\&#13;
                    укажите ник пригласившего.\n\&#13;
                    Если вы не желаете его вводить нажмите \&quot;Пропустить\&quot;&quot;,&#13;
                &quot;Готово&quot;, &quot;Пропустить&quot;);&#13;
            }&#13;
            else&#13;
            {&#13;
                SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Введите EMAIL&quot;,&#13;
                    &quot;{FFFFFF}Введите ваш Email адрес ниже и нажмите \&quot;Готово\&quot;\n\&#13;
                    Если вы потеряете доступ к аккаунту вы можете восстановить его&quot;,&#13;
                &quot;Готово&quot;,&quot;&quot;);&#13;
                return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Проверьте правильность вашего Email адреса&quot;);&#13;
            }&#13;
            regex_delete(rg_emailcheck);&#13;
        }&#13;
        case DLG_REGREF:&#13;
        {&#13;
            if(response)&#13;
            {&#13;
                new regex:rg_refcheck = regex_new(&quot;^[a-zA-Z_]{4,24}$&quot;);&#13;
                if(regex_check(inputtext, rg_refcheck))&#13;
                {&#13;
                    static const fmt_query[] = &quot;SELECT * FROM `users` WHERE `name` = '%s'&quot;;&#13;
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];&#13;
                    format(query, sizeof(query), fmt_query, inputtext);&#13;
                    mysql_tquery(dbHandle, query, &quot;CheckReferal&quot;, &quot;is&quot;, playerid, inputtext);&#13;
                }&#13;
                else&#13;
                {&#13;
                    SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Введите реферала&quot;,&#13;
                        &quot;{ff6a00}Если вы зашли на сервер по приглашению{FFFFFF} \n\&#13;
                        укажите ник пригласившего.\n\&#13;
                        Если вы не желаете его вводить нажмите \&quot;Пропустить\&quot;&quot;,&#13;
                    &quot;Готово&quot;, &quot;Пропустить&quot;);&#13;
                    return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Проверьте ник пригласившего вас игрока и попробуйте снова&quot;);&#13;
                }&#13;
                regex_delete(rg_refcheck);&#13;
            }&#13;
            else&#13;
            {&#13;
                SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, &quot;{0797FF}Регистрация • {FFFFFF} Выберите пол персонажа&quot;,&#13;
                    &quot;{FFFFFF}Пожалуйста, выберите пол вашего персонажа перед началом игры&quot;,&#13;
                &quot;Мужской&quot;, &quot;Женский&quot;);&#13;
            }&#13;
        }&#13;
        case DLG_REGSEX:&#13;
        {&#13;
            if(response) player_info[playerid][SEX] = 1;&#13;
            else player_info[playerid][SEX] = 2;&#13;
            SPD(playerid, DLG_REGRACE, DIALOG_STYLE_LIST, &quot;{0797FF}Регистрация{FFFFFF} • Выберите расу персонажа&quot;,&#13;
                &quot;Негроидная\n\&#13;
                Европеоидная\n\&#13;
                Многолоидная/Азтатская&quot;,&#13;
            &quot;Готово&quot;, &quot;&quot;);&#13;
        }&#13;
        case DLG_REGRACE:&#13;
        {&#13;
            switch(listitem)&#13;
            {&#13;
                case 0: player_info[playerid][RACE] = 1;&#13;
                case 1: player_info[playerid][RACE] = 2;&#13;
                case 2: player_info[playerid][RACE] = 3;&#13;
            }&#13;
            SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Выберите возраст персонажа&quot;,&#13;
                &quot;{FFFFFF}Выберите возраст вашего персонажа\n\&#13;
                {ff6a00}\t• Возраст должен быть от 18 до 60-и&quot;,&#13;
            &quot;Готово&quot;, &quot;&quot;);&#13;
        }&#13;
        case DLG_REGAGE:&#13;
        {&#13;
            if(!strlen(inputtext))&#13;
            {&#13;
                SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Выберите возраст персонажа&quot;,&#13;
                    &quot;Выберите возраст вашего персонажа:\n\&#13;
                    {ff6a00}\t• Возраст должен быть от 18 до 60-и&quot;,&#13;
                &quot;Готово&quot;, &quot;&quot;);&#13;
                return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Введите ваш возраст в поле ниже&quot;);&#13;
            }&#13;
            if(strval(inputtext) &lt; 18 || strval(inputtext) &gt; 60)&#13;
            {&#13;
                SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Выберите возраст персонажа&quot;,&#13;
                    &quot;{FFFFFF}Выберите возраст вашего персонажа\n\&#13;
                    {ff6a00}\t•Возраст должен быть от 18 до 60-и&quot;,&#13;
                &quot;Готово&quot;, &quot;&quot;);&#13;
                return SCM(playerid, COLOR_RED, &quot;-Ошибка-{FFFFFF} Возраст должен быть от 18 до 60-и лет&quot;);&#13;
            }&#13;
            player_info[playerid][AGE] = strval(inputtext);&#13;
            new reqmaleskins[9][4] =&#13;
            {&#13;
                {19,21,22,28},&#13;
                {24,25,36,67},&#13;
                {14,142,182,184},&#13;
                {29,96,101,26},&#13;
                {2,37,72,202},&#13;
                {1,3,234,290},&#13;
                {23,60,170,180},&#13;
                {20,47,48,206},&#13;
                {44,58,132,229}&#13;
            };&#13;
            new reqfemaleskins[9][2] = &#13;
            {&#13;
                {13,69},&#13;
                {9,190},&#13;
                {10,218},&#13;
                {41,56},&#13;
                {31,151},&#13;
                {39,89},&#13;
                {169,193},&#13;
                {207,225},&#13;
                {54,130}&#13;
            };&#13;
            new newskinindex;&#13;
            switch(player_info[playerid][RACE])&#13;
            {&#13;
                case 1: {}&#13;
                case 2: newskinindex+=3;&#13;
                case 3: newskinindex+=6;&#13;
            }&#13;
            switch(player_info[playerid][AGE])&#13;
            {&#13;
                case 18..29: {}&#13;
                case 30..45: newskinindex++;&#13;
                case 46..60: newskinindex+=2;&#13;
            }&#13;
            if(player_info[playerid][SEX] == 1) player_info[playerid][SKIN] = reqmaleskins[newskinindex][random(4)];&#13;
            else player_info[playerid][SKIN] = reqfemaleskins[newskinindex][random(2)];&#13;
            new Year, Month, Day;&#13;
            getdate(Year, Month, Day);&#13;
            new date[13];&#13;
            format(date, sizeof(date), &quot;%02d.%02d.%d&quot;, Day, Month, Year);&#13;
            new ip[16];&#13;
            GetPlayerIp(playerid, ip, sizeof(ip));&#13;
            static const fmt_query[] = &quot;INSERT INTO `users` (`name`, `password`, `salt`, `email`, `ref`, `sex`, `race`, `age`, `skin`, `regdata`, `regip`) VALUE ('%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%s')&quot;;&#13;
            new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)+(-2+10)+(-2+64)+(-2+8)+(-2+1)+(-2+1)+(-2+2)+(-2+3)+(-2+12)+(-2+15)];&#13;
            format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD], player_info[playerid][SALT], player_info[playerid][EMAIL], player_info[playerid][REF], player_info[playerid][SEX], player_info[playerid][RACE], player_info[playerid][AGE], player_info[playerid][SKIN], date, ip);&#13;
            mysql_query(dbHandle, query);//Пишет что ошибка тут&#13;
        }&#13;
    }&#13;
    return 1;&#13;
}&#13;
&#13;
forward CheckReferal(playerid, referal[]);&#13;
public CheckReferal(playerid, referal[])&#13;
{&#13;
    new rows;&#13;
    cache_get_row_count(rows);&#13;
    if(rows)&#13;
    {&#13;
        new refid;&#13;
        cache_get_value_name_int(0, &quot;id&quot;, refid);&#13;
        player_info[playerid][REF] = refid;&#13;
        SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, &quot;{0797FF}Регистрация • {FFFFFF} Выберите пол персонажа&quot;,&#13;
            &quot;{FFFFFF}Пожалуйста, выберите пол вашего персонажа перед началом игры&quot;,&#13;
        &quot;Мужской&quot;, &quot;Женский&quot;);&#13;
    }&#13;
    else&#13;
    {&#13;
        SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, &quot;{0797FF}Регистрация{FFFFFF} • Введите реферала&quot;,&#13;
            &quot;{ff6a00}Если вы зашли на сервер по приглашению{FFFFFF} \n\&#13;
            укажите ник пригласившего.\n\&#13;
            Если вы не желаете его вводить нажмите \&quot;Пропустить\&quot;&quot;,&#13;
        &quot;Готово&quot;, &quot;Пропустить&quot;);&#13;
        return SCM(playerid, COLOR_RED, &quot;-Ошибка- {FFFFFF} Такого аккаунта не существует&quot;);&#13;
    }&#13;
    return 1;&#13;
}&#13;
&#13;
public OnPlayerClickPlayer(playerid, clickedplayerid, source)&#13;
{&#13;
    return 1;&#13;
}&#13;
&#13;
">

<span><span class="mtk1"></span></span>
<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>

<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">fix</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>
<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">streamer</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">Pawn.CMD</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">sscanf2</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">foreach</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">Pawn.Regex</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">crashdetect</span><span class="mtk6">&gt;</span></span>

<span><span class="mtk6">#define</span><span class="mtk1">     MYSQL_HOST  </span><span class="mtk20">"localhost"</span></span>
<span><span class="mtk6">#define</span><span class="mtk1">     MYSQL_USER  </span><span class="mtk20">"root"</span></span>
<span><span class="mtk6">#define</span><span class="mtk1">     MYSQL_PASS  </span><span class="mtk20">""</span></span>
<span><span class="mtk6">#define</span><span class="mtk1">     MYSQL_BASE  </span><span class="mtk20">"inewrp"</span></span>

<span><span class="mtk6">#define</span><span class="mtk1"> SCM     SendClientMessage</span></span>
<span><span class="mtk6">#define</span><span class="mtk1"> SCMTA   SendClientMessageToAll</span></span>
<span><span class="mtk6">#define</span><span class="mtk1"> SPD     ShowPlayerDialog</span></span>

<span><span class="mtk6">#define</span><span class="mtk1"> COLOR_WHITE </span><span class="mtk16">0xFFFFFFFF</span></span>
<span><span class="mtk6">#define</span><span class="mtk1"> COLOR_RED   </span><span class="mtk16">0xFF0000FF</span></span>



<span><span class="mtk1">main()</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    print(</span><span class="mtk20">"\n----------------------------------"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">    print(</span><span class="mtk20">"-------NEW PROJECT STARTED--------"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">    print(</span><span class="mtk20">"----------------------------------\n"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">new</span><span class="mtk1"> MySQL:dbHandle;</span></span>


<span><span class="mtk6">enum</span><span class="mtk1"> player</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    ID,</span></span>
<span><span class="mtk1">    NAME[MAX_PLAYER_NAME],</span></span>
<span><span class="mtk1">    PASSWORD[</span><span class="mtk7">65</span><span class="mtk1">],</span></span>
<span><span class="mtk1">    SALT[</span><span class="mtk7">10</span><span class="mtk1">],</span></span>
<span><span class="mtk1">    EMAIL[</span><span class="mtk7">65</span><span class="mtk1">],</span></span>
<span><span class="mtk1">    REF,</span></span>
<span><span class="mtk1">    SEX,</span></span>
<span><span class="mtk1">    RACE,</span></span>
<span><span class="mtk1">    AGE,</span></span>
<span><span class="mtk1">    SKIN,</span></span>
<span><span class="mtk1">    REGDATA[</span><span class="mtk7">13</span><span class="mtk1">],</span></span>
<span><span class="mtk1">    REGIP[</span><span class="mtk7">16</span><span class="mtk1">],</span></span>
<span><span class="mtk1">}</span></span>
<span><span class="mtk6">new</span><span class="mtk1"> player_info[MAX_PLAYERS][player];</span></span>

<span><span class="mtk6">enum</span><span class="mtk1"> dialogs</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    DLG_NONE,</span></span>
<span><span class="mtk1">    DLG_REG,</span></span>
<span><span class="mtk1">    DLG_REGEMAIL,</span></span>
<span><span class="mtk1">    DLG_REGREF,</span></span>
<span><span class="mtk1">    DLG_REGSEX,</span></span>
<span><span class="mtk1">    DLG_REGRACE,</span></span>
<span><span class="mtk1">    DLG_REGAGE,</span></span>
<span><span class="mtk1">    DLG_LOG,</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnGameModeInit()</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    ConnectMySQL();</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk1">stock ConnectMySQL()</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE);</span></span>
<span><span class="mtk1">    </span><span class="mtk6">switch</span><span class="mtk1">(mysql_errno())</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">0</span><span class="mtk1">: print(</span><span class="mtk20">"Подключение к MySQL успешно"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">default</span><span class="mtk1">: print(</span><span class="mtk20">"MySQL не подключён"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">    }</span></span>
<span><span class="mtk1">    mysql_log(ERROR | WARNING);</span></span>
<span><span class="mtk1">    mysql_set_charset(</span><span class="mtk20">"cp1251"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnGameModeExit()</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerRequestClass(playerid, classid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerConnect(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME);</span></span>
<span><span class="mtk1">    </span><span class="mtk6">static</span><span class="mtk1"> </span><span class="mtk6">const</span><span class="mtk1"> fmt_query[] = </span><span class="mtk20">"SELECT `id` FROM `users` WHERE `name` = '%s'"</span><span class="mtk1">;</span></span>
<span><span class="mtk1">    </span><span class="mtk6">new</span><span class="mtk1"> query[</span><span class="mtk6">sizeof</span><span class="mtk1">(fmt_query)+(-</span><span class="mtk7">2</span><span class="mtk1">+MAX_PLAYER_NAME)];</span></span>
<span><span class="mtk1">    format(query, </span><span class="mtk6">sizeof</span><span class="mtk1">(query), fmt_query, player_info[playerid][NAME]);</span></span>
<span><span class="mtk1">    mysql_tquery(dbHandle, query, </span><span class="mtk20">"CheckRegistration"</span><span class="mtk1">, </span><span class="mtk20">"i"</span><span class="mtk1">, playerid);</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk1">forward CheckRegistration(playerid);</span></span>
<span><span class="mtk6">public</span><span class="mtk1"> CheckRegistration(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">new</span><span class="mtk1"> rows;</span></span>
<span><span class="mtk1">    cache_get_row_count(rows);</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(rows) ShowLogin(playerid);</span></span>
<span><span class="mtk1">    </span><span class="mtk6">else</span><span class="mtk1"> ShowRegistration(playerid);</span></span>
<span><span class="mtk1">    </span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk1">stock ShowLogin(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    SCM(playerid, COLOR_WHITE, </span><span class="mtk20">"Игрок зарегистрирован"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk1">stock ShowRegistration(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">new</span><span class="mtk1"> dialog[</span><span class="mtk7">386</span><span class="mtk1">+(-</span><span class="mtk7">2</span><span class="mtk1">+MAX_PLAYER_NAME)];</span></span>
<span><span class="mtk1">    format(dialog, </span><span class="mtk6">sizeof</span><span class="mtk1">(dialog),</span></span>
<span><span class="mtk1">        </span><span class="mtk20">"{FFFFFF}Уважаемый {0f97ff}%s{FFFFFF}, мы рады видеть вас на сервере {ffaa3b}INewRolePlay{FFFFFF}\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">        Аккаунт с таким именем не зарегистрирован\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">        Для начала игры пройдите регистрацию\n\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">        Напишите пароль для вашего акккаунта и нажмите \"Готово\"\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">        {ff6a00}\tУсловия:\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">        \t•Пароль должен быть от 8 до 32-х символов\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">        \t•Пароль должен быть только из цифр и латинских символов любого регистра"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">    player_info[playerid][NAME]</span></span>
<span><span class="mtk1">    );</span></span>
<span><span class="mtk1">    SPD(playerid, DLG_REG, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0f97ff}Регистрация{FFFFFF} • Введите пароль"</span><span class="mtk1">, dialog, </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">"Назад"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerDisconnect(playerid, reason)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerSpawn(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerDeath(playerid, killerid, reason)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnVehicleSpawn(vehicleid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnVehicleDeath(vehicleid, killerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerText(playerid, text[])</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerCommandText(playerid, cmdtext[])</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerExitVehicle(playerid, vehicleid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerStateChange(playerid, newstate, oldstate)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerEnterCheckpoint(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerLeaveCheckpoint(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerEnterRaceCheckpoint(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerLeaveRaceCheckpoint(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnRconCommand(cmd[])</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerRequestSpawn(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnObjectMoved(objectid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerObjectMoved(playerid, objectid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerPickUpPickup(playerid, pickupid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnVehicleMod(playerid, vehicleid, componentid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnVehiclePaintjob(playerid, vehicleid, paintjobid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnVehicleRespray(playerid, vehicleid, color1, color2)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerSelectedMenuRow(playerid, row)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerExitedMenu(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerKeyStateChange(playerid, newkeys, oldkeys)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnRconLoginAttempt(ip[], password[], success)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerUpdate(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerStreamIn(playerid, forplayerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerStreamOut(playerid, forplayerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnVehicleStreamIn(vehicleid, forplayerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnVehicleStreamOut(vehicleid, forplayerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">switch</span><span class="mtk1">(dialogid)</span></span>
<span><span class="mtk1">    {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">case</span><span class="mtk1"> DLG_REG:</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(response)</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                </span><span class="mtk6">if</span><span class="mtk1">(!strlen(inputtext))</span></span>
<span><span class="mtk1">                {</span></span>
<span><span class="mtk1">                    ShowRegistration(playerid);</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Введите в поле ниже пароль"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                }</span></span>
<span><span class="mtk1">                </span><span class="mtk6">if</span><span class="mtk1">(strlen(inputtext) &lt; </span><span class="mtk7">8</span><span class="mtk1"> || strlen(inputtext) &gt; </span><span class="mtk7">32</span><span class="mtk1">)</span></span>
<span><span class="mtk1">                {</span></span>
<span><span class="mtk1">                    ShowRegistration(playerid);</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Длина пароля должна быть от 8 до 32-х символов"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                }</span></span>
<span><span class="mtk1">                </span><span class="mtk6">new</span><span class="mtk1"> regex:rg_passwordcheck = regex_new(</span><span class="mtk20">"^[a-zA-Z0-9]{1,}$"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                </span><span class="mtk6">if</span><span class="mtk1">(regex_check(inputtext, rg_passwordcheck))</span></span>
<span><span class="mtk1">                {</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">new</span><span class="mtk1"> salt[</span><span class="mtk7">11</span><span class="mtk1">];</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">for</span><span class="mtk1">(</span><span class="mtk6">new</span><span class="mtk1"> i; i &lt; </span><span class="mtk7">10</span><span class="mtk1">; i++)</span></span>
<span><span class="mtk1">                    {</span></span>
<span><span class="mtk1">                        salt[i] = random(</span><span class="mtk7">79</span><span class="mtk1">) + </span><span class="mtk7">47</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                    }</span></span>
<span><span class="mtk1">                    salt[</span><span class="mtk7">10</span><span class="mtk1">] = </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                    SHA256_PassHash(inputtext, salt, player_info[playerid][PASSWORD], </span><span class="mtk7">65</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                    strmid(player_info[playerid][SALT], salt, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">11</span><span class="mtk1">, </span><span class="mtk7">11</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                    SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Введите EMAIL"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                        </span><span class="mtk20">"{FFFFFF}Введите ваш Email адрес ниже и нажмите \"Готово\"\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                        Если вы потеряете доступ к аккаунту вы можете восстановить его"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"Готово"</span><span class="mtk1">,</span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                }</span></span>
<span><span class="mtk1">                </span><span class="mtk6">else</span></span>
<span><span class="mtk1">                {</span></span>
<span><span class="mtk1">                    ShowRegistration(playerid);</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Пароль может состоять только из латинских сиволов и чисел"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                }</span></span>
<span><span class="mtk1">                regex_delete(rg_passwordcheck);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk6">else</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Подсказка- {FFFFFF} Используйте \"/q\", для выхода"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                SPD(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk20">" "</span><span class="mtk1">, </span><span class="mtk20">" "</span><span class="mtk1">, </span><span class="mtk20">" "</span><span class="mtk1">, </span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                </span><span class="mtk6">return</span><span class="mtk1"> Kick(playerid);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span><span class="mtk6">case</span><span class="mtk1"> DLG_REGEMAIL:</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(!strlen(inputtext))</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Введите EMAIL"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"{FFFFFF}Введите ваш Email адрес ниже и нажмите \"Готово\"\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                    Если вы потеряете доступ к аккаунту вы можете восстановить его"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"Готово"</span><span class="mtk1">,</span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Введите в поле ниже ваш Email!"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> regex:rg_emailcheck = regex_new(</span><span class="mtk20">"^[a-zA-Z0-9.-_]{1,43}@[a-zA-Z]{1,12}.{1,8}$"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(regex_check(inputtext, rg_emailcheck))</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                strmid(player_info[playerid][EMAIL], inputtext, </span><span class="mtk7">0</span><span class="mtk1">, strlen(inputtext), </span><span class="mtk7">64</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Введите реферала"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"{ff6a00}Если вы зашли на сервер по приглашению{FFFFFF} \n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                    укажите ник пригласившего.\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                    Если вы не желаете его вводить нажмите \"Пропустить\""</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">"Пропустить"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk6">else</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Введите EMAIL"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"{FFFFFF}Введите ваш Email адрес ниже и нажмите \"Готово\"\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                    Если вы потеряете доступ к аккаунту вы можете восстановить его"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"Готово"</span><span class="mtk1">,</span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Проверьте правильность вашего Email адреса"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            regex_delete(rg_emailcheck);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span><span class="mtk6">case</span><span class="mtk1"> DLG_REGREF:</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(response)</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                </span><span class="mtk6">new</span><span class="mtk1"> regex:rg_refcheck = regex_new(</span><span class="mtk20">"^[a-zA-Z_]{4,24}$"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                </span><span class="mtk6">if</span><span class="mtk1">(regex_check(inputtext, rg_refcheck))</span></span>
<span><span class="mtk1">                {</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">static</span><span class="mtk1"> </span><span class="mtk6">const</span><span class="mtk1"> fmt_query[] = </span><span class="mtk20">"SELECT * FROM `users` WHERE `name` = '%s'"</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">new</span><span class="mtk1"> query[</span><span class="mtk6">sizeof</span><span class="mtk1">(fmt_query)+(-</span><span class="mtk7">2</span><span class="mtk1">+MAX_PLAYER_NAME)];</span></span>
<span><span class="mtk1">                    format(query, </span><span class="mtk6">sizeof</span><span class="mtk1">(query), fmt_query, inputtext);</span></span>
<span><span class="mtk1">                    mysql_tquery(dbHandle, query, </span><span class="mtk20">"CheckReferal"</span><span class="mtk1">, </span><span class="mtk20">"is"</span><span class="mtk1">, playerid, inputtext);</span></span>
<span><span class="mtk1">                }</span></span>
<span><span class="mtk1">                </span><span class="mtk6">else</span></span>
<span><span class="mtk1">                {</span></span>
<span><span class="mtk1">                    SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Введите реферала"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                        </span><span class="mtk20">"{ff6a00}Если вы зашли на сервер по приглашению{FFFFFF} \n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                        укажите ник пригласившего.\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                        Если вы не желаете его вводить нажмите \"Пропустить\""</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">"Пропустить"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                    </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Проверьте ник пригласившего вас игрока и попробуйте снова"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                }</span></span>
<span><span class="mtk1">                regex_delete(rg_refcheck);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk6">else</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, </span><span class="mtk20">"{0797FF}Регистрация • {FFFFFF} Выберите пол персонажа"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"{FFFFFF}Пожалуйста, выберите пол вашего персонажа перед началом игры"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"Мужской"</span><span class="mtk1">, </span><span class="mtk20">"Женский"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span><span class="mtk6">case</span><span class="mtk1"> DLG_REGSEX:</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(response) player_info[playerid][SEX] = </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            </span><span class="mtk6">else</span><span class="mtk1"> player_info[playerid][SEX] = </span><span class="mtk7">2</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            SPD(playerid, DLG_REGRACE, DIALOG_STYLE_LIST, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Выберите расу персонажа"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"Негроидная\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                Европеоидная\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                Многолоидная/Азтатская"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">            </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span><span class="mtk6">case</span><span class="mtk1"> DLG_REGRACE:</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">switch</span><span class="mtk1">(listitem)</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">0</span><span class="mtk1">: player_info[playerid][RACE] = </span><span class="mtk7">1</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">: player_info[playerid][RACE] = </span><span class="mtk7">2</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                </span><span class="mtk6">case</span><span class="mtk1"> </span><span class="mtk7">2</span><span class="mtk1">: player_info[playerid][RACE] = </span><span class="mtk7">3</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Выберите возраст персонажа"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"{FFFFFF}Выберите возраст вашего персонажа\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                {ff6a00}\t• Возраст должен быть от 18 до 60-и"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">            </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span><span class="mtk6">case</span><span class="mtk1"> DLG_REGAGE:</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(!strlen(inputtext))</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Выберите возраст персонажа"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"Выберите возраст вашего персонажа:\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                    {ff6a00}\t• Возраст должен быть от 18 до 60-и"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Введите ваш возраст в поле ниже"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(strval(inputtext) &lt; </span><span class="mtk7">18</span><span class="mtk1"> || strval(inputtext) &gt; </span><span class="mtk7">60</span><span class="mtk1">)</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Выберите возраст персонажа"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                    </span><span class="mtk20">"{FFFFFF}Выберите возраст вашего персонажа\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">                    {ff6a00}\t•Возраст должен быть от 18 до 60-и"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">                </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">""</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка-{FFFFFF} Возраст должен быть от 18 до 60-и лет"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            player_info[playerid][AGE] = strval(inputtext);</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> reqmaleskins[</span><span class="mtk7">9</span><span class="mtk1">][</span><span class="mtk7">4</span><span class="mtk1">] =</span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">19</span><span class="mtk1">,</span><span class="mtk7">21</span><span class="mtk1">,</span><span class="mtk7">22</span><span class="mtk1">,</span><span class="mtk7">28</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">24</span><span class="mtk1">,</span><span class="mtk7">25</span><span class="mtk1">,</span><span class="mtk7">36</span><span class="mtk1">,</span><span class="mtk7">67</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">14</span><span class="mtk1">,</span><span class="mtk7">142</span><span class="mtk1">,</span><span class="mtk7">182</span><span class="mtk1">,</span><span class="mtk7">184</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">29</span><span class="mtk1">,</span><span class="mtk7">96</span><span class="mtk1">,</span><span class="mtk7">101</span><span class="mtk1">,</span><span class="mtk7">26</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">2</span><span class="mtk1">,</span><span class="mtk7">37</span><span class="mtk1">,</span><span class="mtk7">72</span><span class="mtk1">,</span><span class="mtk7">202</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">1</span><span class="mtk1">,</span><span class="mtk7">3</span><span class="mtk1">,</span><span class="mtk7">234</span><span class="mtk1">,</span><span class="mtk7">290</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">23</span><span class="mtk1">,</span><span class="mtk7">60</span><span class="mtk1">,</span><span class="mtk7">170</span><span class="mtk1">,</span><span class="mtk7">180</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">20</span><span class="mtk1">,</span><span class="mtk7">47</span><span class="mtk1">,</span><span class="mtk7">48</span><span class="mtk1">,</span><span class="mtk7">206</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">44</span><span class="mtk1">,</span><span class="mtk7">58</span><span class="mtk1">,</span><span class="mtk7">132</span><span class="mtk1">,</span><span class="mtk7">229</span><span class="mtk1">}</span></span>
<span><span class="mtk1">            };</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> reqfemaleskins[</span><span class="mtk7">9</span><span class="mtk1">][</span><span class="mtk7">2</span><span class="mtk1">] = </span></span>
<span><span class="mtk1">            {</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">13</span><span class="mtk1">,</span><span class="mtk7">69</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">9</span><span class="mtk1">,</span><span class="mtk7">190</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">10</span><span class="mtk1">,</span><span class="mtk7">218</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">41</span><span class="mtk1">,</span><span class="mtk7">56</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">31</span><span class="mtk1">,</span><span class="mtk7">151</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">39</span><span class="mtk1">,</span><span class="mtk7">89</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">169</span><span class="mtk1">,</span><span class="mtk7">193</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">207</span><span class="mtk1">,</span><span class="mtk7">225</span><span class="mtk1">},</span></span>
<span><span class="mtk1">                {</span><span class="mtk7">54</span><span class="mtk1">,</span><span class="mtk7">130</span><span class="mtk1">}</span></span>
<span><span class="mtk1">            };</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> newskinindex;</span></span>
<span><span class="mtk1">            </span><span class="mtk6">switch</span><span class="mtk1">(player_info[playerid][RACE])</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">: {}</span></span>
<span><span class="mtk1">                </span><span class="mtk6">case</span><span class="mtk1"> </span><span class="mtk7">2</span><span class="mtk1">: newskinindex+=</span><span class="mtk7">3</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                </span><span class="mtk6">case</span><span class="mtk1"> </span><span class="mtk7">3</span><span class="mtk1">: newskinindex+=</span><span class="mtk7">6</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk6">switch</span><span class="mtk1">(player_info[playerid][AGE])</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">18</span><span class="mtk1">.</span><span class="mtk7">.29</span><span class="mtk1">: {}</span></span>
<span><span class="mtk1">                </span><span class="mtk6">case</span><span class="mtk1"> </span><span class="mtk7">30</span><span class="mtk1">.</span><span class="mtk7">.45</span><span class="mtk1">: newskinindex++;</span></span>
<span><span class="mtk1">                </span><span class="mtk6">case</span><span class="mtk1"> </span><span class="mtk7">46</span><span class="mtk1">.</span><span class="mtk7">.60</span><span class="mtk1">: newskinindex+=</span><span class="mtk7">2</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(player_info[playerid][SEX] == </span><span class="mtk7">1</span><span class="mtk1">) player_info[playerid][SKIN] = reqmaleskins[newskinindex][random(</span><span class="mtk7">4</span><span class="mtk1">)];</span></span>
<span><span class="mtk1">            </span><span class="mtk6">else</span><span class="mtk1"> player_info[playerid][SKIN] = reqfemaleskins[newskinindex][random(</span><span class="mtk7">2</span><span class="mtk1">)];</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> Year, Month, Day;</span></span>
<span><span class="mtk1">            getdate(Year, Month, Day);</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> date[</span><span class="mtk7">13</span><span class="mtk1">];</span></span>
<span><span class="mtk1">            format(date, </span><span class="mtk6">sizeof</span><span class="mtk1">(date), </span><span class="mtk20">"%02d.%02d.%d"</span><span class="mtk1">, Day, Month, Year);</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> ip[</span><span class="mtk7">16</span><span class="mtk1">];</span></span>
<span><span class="mtk1">            GetPlayerIp(playerid, ip, </span><span class="mtk6">sizeof</span><span class="mtk1">(ip));</span></span>
<span><span class="mtk1">            </span><span class="mtk6">static</span><span class="mtk1"> </span><span class="mtk6">const</span><span class="mtk1"> fmt_query[] = </span><span class="mtk20">"INSERT INTO `users` (`name`, `password`, `salt`, `email`, `ref`, `sex`, `race`, `age`, `skin`, `regdata`, `regip`) VALUE ('%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%s')"</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            </span><span class="mtk6">new</span><span class="mtk1"> query[</span><span class="mtk6">sizeof</span><span class="mtk1">(fmt_query)+(-</span><span class="mtk7">2</span><span class="mtk1">+MAX_PLAYER_NAME)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">64</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">10</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">64</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">8</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">1</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">1</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">2</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">3</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">12</span><span class="mtk1">)+(-</span><span class="mtk7">2</span><span class="mtk1">+</span><span class="mtk7">15</span><span class="mtk1">)];</span></span>
<span><span class="mtk1">            format(query, </span><span class="mtk6">sizeof</span><span class="mtk1">(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD], player_info[playerid][SALT], player_info[playerid][EMAIL], player_info[playerid][REF], player_info[playerid][SEX], player_info[playerid][RACE], player_info[playerid][AGE], player_info[playerid][SKIN], date, ip);</span></span>
<span><span class="mtk1">            mysql_query(dbHandle, query);</span><span class="mtk8">//Пишет что ошибка тут</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">    }</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk1">forward CheckReferal(playerid, referal[]);</span></span>
<span><span class="mtk6">public</span><span class="mtk1"> CheckReferal(playerid, referal[])</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">new</span><span class="mtk1"> rows;</span></span>
<span><span class="mtk1">    cache_get_row_count(rows);</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(rows)</span></span>
<span><span class="mtk1">    {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">new</span><span class="mtk1"> refid;</span></span>
<span><span class="mtk1">        cache_get_value_name_int(</span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk20">"id"</span><span class="mtk1">, refid);</span></span>
<span><span class="mtk1">        player_info[playerid][REF] = refid;</span></span>
<span><span class="mtk1">        SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, </span><span class="mtk20">"{0797FF}Регистрация • {FFFFFF} Выберите пол персонажа"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">            </span><span class="mtk20">"{FFFFFF}Пожалуйста, выберите пол вашего персонажа перед началом игры"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">        </span><span class="mtk20">"Мужской"</span><span class="mtk1">, </span><span class="mtk20">"Женский"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">    }</span></span>
<span><span class="mtk1">    </span><span class="mtk6">else</span></span>
<span><span class="mtk1">    {</span></span>
<span><span class="mtk1">        SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, </span><span class="mtk20">"{0797FF}Регистрация{FFFFFF} • Введите реферала"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">            </span><span class="mtk20">"{ff6a00}Если вы зашли на сервер по приглашению{FFFFFF} \n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">            укажите ник пригласившего.\n</span><span class="mtk1">\</span></span>
<span><span class="mtk20">            Если вы не желаете его вводить нажмите \"Пропустить\""</span><span class="mtk1">,</span></span>
<span><span class="mtk1">        </span><span class="mtk20">"Готово"</span><span class="mtk1">, </span><span class="mtk20">"Пропустить"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">return</span><span class="mtk1"> SCM(playerid, COLOR_RED, </span><span class="mtk20">"-Ошибка- {FFFFFF} Такого аккаунта не существует"</span><span class="mtk1">);</span></span>
<span><span class="mtk1">    }</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk6">public</span><span class="mtk1"> OnPlayerClickPlayer(playerid, clickedplayerid, source)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk1"></span></span>
</pre>

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

<p>
	Лог:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Цитата
	</div>

	<div class="ipsQuote_contents">
		<p>
			[19:56:45] [ERROR] error #1136 while executing query "INSERT INTO `users` (`name`, `password`, `salt`, `email`, `ref`, `sex`, `race`, `age`, `skin`, `regdata`, `regip`) VALUE ('iiiiiiiiiiiiiiii', '068B01339F1813D72687ED138959D32C4A876C55EFEEAC04683381F51211B686', 'Q]H:}pJXseisah@gsad', 'isah@gsad', '0', '1', '3', '18', 'ґ', '25.10.2024')": Column count doesn't match value count at row 1 (E:\Server\gamemodes\project.pwn:496)
		</p>
	</div>
</blockquote>

<p>
	 
</p>
]]></description><guid isPermaLink="false">8184</guid><pubDate>Fri, 25 Oct 2024 15:06:45 +0000</pubDate></item><item><title>UCP &#x420;&#x435;&#x433;&#x438;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x44F;</title><link>https://pawno-rus.com/topic/8251-ucp-registraciya/</link><description><![CDATA[
<p style="color:#404345;">
	<img alt="ucp.png" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://www.blast.hk/attachments/259537/&amp;key=1f7aadeaa5377404e93df93062fef2f843bb76cb569cc066400298ae5649563c"></p>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	<strong>Описание проекта</strong>
</h3>

<p style="color:#404345;">
	Готовая регистрация UCP. Регистрация и авторизация как в личный кабинет пользователя, так и в административную панель. В административной панели администратор может подтвердить или отменить регистрацию. Также имеется возможность редактировать данные пользователя. Поле «Сообщение» является необязательным, но если необходимо что-то отметить, можно оставить сообщение, которое будет отображено в письме пользователя. Проект включает только регистрацию с авторизацией, без дополнительного функционала, такого как донат или новости. Также присутствует минимальная верстка от Bootstrap. Этот проект является базой для вашего сайта.
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>Требования для запуска</strong>
</h4>

<ul style="color:#404345;">
<li>
		<strong>PHP</strong><span> </span>версии 8.2+
	</li>
	<li>
		<strong><strong>Composer</strong></strong>
	</li>
	<li>
		<strong>Node.js</strong><span> </span>(npm)
	</li>
	<li>
		<strong>MySQL</strong><span> </span>версии 8.0
	</li>
</ul>
<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	<strong>Инструкция по запуску</strong>
</h3>

<h4 style="color:#404345;">
	<strong>1. Скачивание проекта:</strong>
</h4>

<ul style="color:#404345;">
<li>
		Скачайте архив с проектом и распакуйте его.
	</li>
</ul>
<h4 style="color:#404345;">
	<strong>2. Создание базы данных:</strong>
</h4>

<ul style="color:#404345;">
<li>
		Создайте пустую базу данных в MySQL.
	</li>
</ul>
<h4 style="color:#404345;">
	<strong>3. Настройка .env</strong>
</h4>

<ul style="color:#404345;">
<li>
		В корне проекта должен находиться файл <strong>.env</strong>. Если его нет, скопируйте файл <strong>env.example</strong> и переименуйте его в <strong>.env</strong>.
	</li>
</ul>
<h4 style="color:#404345;">
	<strong>4. Генерация ключа приложения:</strong>
</h4>

<ul style="color:#404345;">
<li>
		В терминале выполните команду:
	</li>
</ul>
<pre class="ipsCode ipsCodeSubmitted" codelang="plaintext" plaincode="php artisan key:generate">
<span><span class="mtk1">php artisan key:generate</span></span>
</pre>

<h4 style="color:#404345;">
	<strong>5. Настройка .env файла:</strong>
</h4>

<p style="color:#404345;">
	Откройте файл <strong>.env</strong> и укажите свои настройки:
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Данные проекта:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='SAMP_SERVER_NAME="Samp Role Play"&#13;
SAMP_SERVER_IP=127.0.0.1:7777'>
<span><span class="mtk1">SAMP_SERVER_NAME=</span><span class="mtk20">"Samp Role Play"</span></span>
<span><span class="mtk1">SAMP_SERVER_IP=</span><span class="mtk7">127.0.0.1</span><span class="mtk1">:</span><span class="mtk7">7777</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Подключение к базе данных:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="DB_HOST=localhost&#13;
DB_PORT=3306&#13;
DB_DATABASE=samp-ucp&#13;
DB_USERNAME=root&#13;
DB_PASSWORD=">
<span><span class="mtk1">DB_HOST=localhost</span></span>
<span><span class="mtk1">DB_PORT=</span><span class="mtk7">3306</span></span>
<span><span class="mtk1">DB_DATABASE=samp-ucp</span></span>
<span><span class="mtk1">DB_USERNAME=root</span></span>
<span><span class="mtk1">DB_PASSWORD=</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Суперадмин и контактная почта:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='SUPER_ADMIN_NAME="Super_Admin"&#13;
SUPER_ADMIN_PASSWORD=6Hm2Q74JW3vXnYE4rWEy7JrC&#13;
CONTACT_EMAIL=support@samp-rp.ru'>
<span><span class="mtk1">SUPER_ADMIN_NAME=</span><span class="mtk20">"Super_Admin"</span></span>
<span><span class="mtk1">SUPER_ADMIN_PASSWORD=</span><span class="mtk7">6</span><span class="mtk1">Hm2Q74JW3vXnYE4rWEy7JrC</span></span>
<span><span class="mtk1">CONTACT_EMAIL=support@samp-rp.ru</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Настройка почтового клиента:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='MAIL_MAILER=smtp&#13;
MAIL_HOST=sandbox.smtp.mailtrap.io&#13;
MAIL_PORT=2525&#13;
MAIL_USERNAME=dd754ec54ff399&#13;
MAIL_PASSWORD=1b87f0d6cf1841&#13;
MAIL_ENCRYPTION=tls&#13;
MAIL_FROM_ADDRESS="hello@example.com"'>
<span><span class="mtk1">MAIL_MAILER=smtp</span></span>
<span><span class="mtk1">MAIL_HOST=sandbox.smtp.mailtrap.io</span></span>
<span><span class="mtk1">MAIL_PORT=</span><span class="mtk7">2525</span></span>
<span><span class="mtk1">MAIL_USERNAME=dd754ec54ff399</span></span>
<span><span class="mtk1">MAIL_PASSWORD=</span><span class="mtk7">1</span><span class="mtk1">b87f0d6cf1841</span></span>
<span><span class="mtk1">MAIL_ENCRYPTION=tls</span></span>
<span><span class="mtk1">MAIL_FROM_ADDRESS=</span><span class="mtk20">"hello@example.com"</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>6. Установка зависимостей:</strong>
</h4>

<p style="color:#404345;">
	Установите зависимости с помощью следующих команд:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="plaintext" plaincode="composer install&#13;
npm install">
<span><span class="mtk1">composer install</span></span>
<span><span class="mtk1">npm install</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>7. Очистка кеша:</strong>
</h4>

<p style="color:#404345;">
	Выполните команды для очистки кеша:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="plaintext" plaincode="php artisan cache:clear&#13;
php artisan route:clear&#13;
php artisan config:clear&#13;
php artisan view:clear">
<span><span class="mtk1">php artisan cache:clear</span></span>
<span><span class="mtk1">php artisan route:clear</span></span>
<span><span class="mtk1">php artisan config:clear</span></span>
<span><span class="mtk1">php artisan view:clear</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>8. Сборка проекта:</strong>
</h4>

<p style="color:#404345;">
	Соберите проект с помощью команды:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="plaintext" plaincode="npm run build">
<span><span class="mtk1">npm run build</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>9. Добавление пользовательских полей (опционально):</strong>
</h4>

<p style="color:#404345;">
	Если необходимо добавить новые поля в таблицу пользователей, откройте файл миграции: <strong>database/migrations/0001_01_01_000000_create_users_table.php</strong>.
</p>

<p style="color:#404345;">
	Например, чтобы добавить поле "донат" после email, добавьте строку:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="$table-&gt;integer('donate')-&gt;default(0);">
<span><span class="mtk1">$table-&gt;integer(</span><span class="mtk20">'</span><span class="mtk1">donate</span><span class="mtk20">'</span><span class="mtk1">)-&gt;</span><span class="mtk6">default</span><span class="mtk1">(</span><span class="mtk7">0</span><span class="mtk1">);</span></span>
</pre>

<p style="color:#404345;">
	<strong>Объяснение:</strong><span> </span><strong>integer</strong> — тип данных, <strong>default(0)</strong> — значение по умолчанию.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	Затем откройте файл <strong>app/Models/User.php</strong> и добавьте новое поле в массив <strong>$fillable</strong>:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="protected $fillable = [&#13;
    'name',         // Никнейм пользователя&#13;
    'birth_date',   // Дата рождения&#13;
    'gender',       // Пол&#13;
    'skin',         // ИД скина&#13;
    'email',        // Адрес электронной почты&#13;
    'donate',       // Донат&#13;
    'password',     // Пароль&#13;
    'status',       // Статус пользователя&#13;
];">
<span><span class="mtk6">protected</span><span class="mtk1"> $fillable = [</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">name</span><span class="mtk20">'</span><span class="mtk1">,         </span><span class="mtk8">// Никнейм пользователя</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">birth_date</span><span class="mtk20">'</span><span class="mtk1">,   </span><span class="mtk8">// Дата рождения</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">gender</span><span class="mtk20">'</span><span class="mtk1">,       </span><span class="mtk8">// Пол</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">skin</span><span class="mtk20">'</span><span class="mtk1">,         </span><span class="mtk8">// ИД скина</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">email</span><span class="mtk20">'</span><span class="mtk1">,        </span><span class="mtk8">// Адрес электронной почты</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">donate</span><span class="mtk20">'</span><span class="mtk1">,       </span><span class="mtk8">// Донат</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">password</span><span class="mtk20">'</span><span class="mtk1">,     </span><span class="mtk8">// Пароль</span></span>
<span><span class="mtk1">    </span><span class="mtk20">'</span><span class="mtk1">status</span><span class="mtk20">'</span><span class="mtk1">,       </span><span class="mtk8">// Статус пользователя</span></span>
<span><span class="mtk1">];</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>10. Миграция и сидеры:</strong>
</h4>

<p style="color:#404345;">
	Выполните миграцию и примените сидеры (сидер создаёт суперадмина, без которого вход в админку невозможен):
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="php artisan migrate:fresh --seed">
<span><span class="mtk1">php artisan migrate:fresh --seed</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>11. Запуск проекта:</strong>
</h4>

<p style="color:#404345;">
	Для запуска локального сервера выполните команду:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="php artisan serve">
<span><span class="mtk1">php artisan serve</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	<strong>Дополнительная информация</strong>
</h3>

<p style="color:#404345;">
	Более подробную информацию о структуре проекта и настройке вы можете найти по ссылке: <strong><a href="https://pawno-rus.com/topic/8225-gotovyy-sayt-dlya-samp-proekta/" rel="">&gt; Готовый сайт для SAMP проекта &lt;</a></strong>
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:rgb(64,67,69);text-align:center;">
	<strong>Скачать:</strong><span> </span><a class="ipsAttachLink" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=23884" data-fileid="23884" rel="">samp-ucp.zip</a>
</h4>

<p style="text-align:center;">
	<span style="font-size:16px;"><b>Скриншоты:</b></span>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="23874" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/1.png.87a2eab4651f44785a5b22800698607a.png" rel=""><img alt="1.thumb.png.a642c9004c0a3c30bbf5f1430e4f4565.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23874" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/1.thumb.png.a642c9004c0a3c30bbf5f1430e4f4565.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23875" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/2.png.9e4538cc429855924d903626a973098d.png" rel=""><img alt="2.thumb.png.c0339c3bc949224ed4fbd28191a4adec.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23875" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/2.thumb.png.c0339c3bc949224ed4fbd28191a4adec.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23876" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/3.png.80b250a9ac69bb691d39ffe4fd9c67ba.png" rel=""><img alt="3.thumb.png.33e18610cb1beaf9d9ee1c576eab2138.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23876" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/3.thumb.png.33e18610cb1beaf9d9ee1c576eab2138.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23877" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/4.png.6c52dc778a4aa8f8e39d06218e397716.png" rel=""><img alt="4.thumb.png.b6f26dae05ec14f0a541797ee2274318.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23877" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/4.thumb.png.b6f26dae05ec14f0a541797ee2274318.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23878" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/5.png.3d9758bbd6389e6c7bc510067093079f.png" rel=""><img alt="5.thumb.png.77523375ac5e002316c92423f1899d3d.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23878" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/5.thumb.png.77523375ac5e002316c92423f1899d3d.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23879" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/6.png.06f87c07576a44bbad88fb80f782ad69.png" rel=""><img alt="6.thumb.png.4a292cb32752091a0ad7385ba46ca937.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23879" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/6.thumb.png.4a292cb32752091a0ad7385ba46ca937.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23880" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/7.png.02858bb8aedcf17090dde14b3e9827e7.png" rel=""><img alt="7.thumb.png.6a2151b6393194c418345f8ea4f0a51f.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23880" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/7.thumb.png.6a2151b6393194c418345f8ea4f0a51f.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23881" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/8.PNG.b34adbd759671abab78e61b7972720a0.PNG" rel=""><img alt="8.thumb.PNG.0f278f5903305c9a47134d95d5401966.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="23881" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/8.thumb.PNG.0f278f5903305c9a47134d95d5401966.PNG" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23882" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/9.PNG.61356eab3d971f804fd231ea7515d1fe.PNG" rel=""><img alt="9.thumb.PNG.f4f5164eb0bc1797d06f0d9894891e93.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="23882" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/9.thumb.PNG.f4f5164eb0bc1797d06f0d9894891e93.PNG" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a><a class="ipsAttachLink ipsAttachLink_image" data-fileid="23883" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/10.png.310b7ee3461be673f389bc625cb73101.png" rel=""><img alt="10.thumb.png.41ef123c5c2526c2b7d6bf3d63f5e52a.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23883" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/10.thumb.png.41ef123c5c2526c2b7d6bf3d63f5e52a.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a>
		</p>
	</div>
</div>

<p style="color:rgb(64,67,69);text-align:center;">
	 
</p>
]]></description><guid isPermaLink="false">8251</guid><pubDate>Sun, 15 Dec 2024 13:36:54 +0000</pubDate></item><item><title>&#x421;&#x430;&#x439;&#x442; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440; &#x43F;&#x430;&#x440;&#x43E;&#x43B;&#x435;&#x439; "PassGenie"</title><link>https://pawno-rus.com/topic/8377-sayt-generator-paroley-passgenie/</link><description><![CDATA[
<p style="color:rgb(255,255,255);text-align:center;">
	<span style="color:#7f8c8d;"><strong>PassGenie — ваш надёжный помощник в создании паролей</strong></span>
</p>

<p style="color:rgb(255,255,255);text-align:center;">
	<span style="color:#7f8c8d;"><strong>PassGenie</strong> — это удобный и простой в использовании генератор паролей, который поможет вам создавать сложные и надёжные пароли для любых аккаунтов.</span>
</p>

<p style="color:rgb(255,255,255);text-align:center;">
	<span style="color:#7f8c8d;"><strong>Основные особенности PassGenie:</strong><br><em>Генерация сложных паролей, устойчивых к взлому.</em> </span><br><span style="color:#7f8c8d;"><em>Быстрый и лёгкий процесс создания паролей.</em> </span>
</p>

<p style="text-align:center;">
	<em><font color="#7f8c8d">Каждый сгенерированный пароль - уникальный.</font></em>
</p>

<p style="text-align:center;">
	<em><font color="#7f8c8d">Пароли, которые генерируются, нигде не сохраняются.</font></em>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24030" href="//storage.yandexcloud.net/pawnorus/monthly_2025_03/chrome_iXs8ODlaIB.png.aa107bbf74a1ac1e0b83a775d1d57302.png" rel=""><img alt="chrome_iXs8ODlaIB.thumb.png.507ccb524622f8b122fe6a71a09a3a47.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24030" src="//storage.yandexcloud.net/pawnorus/monthly_2025_03/chrome_iXs8ODlaIB.thumb.png.507ccb524622f8b122fe6a71a09a3a47.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a>
		</p>
	</div>
</div>

<p style="text-align:center;">
	<font color="#7f8c8d"><i>Код сайта интуитивно понятнен, в нём разберётся даже тот, кто ранее вообще не имел дела с HTML.</i></font>
</p>

<p style="text-align:center;">
	<font color="#7f8c8d"><i>Скачать можно тут: </i></font><a class="ipsAttachLink" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=24036" data-fileid="24036" rel="">passgenie.zip</a>
</p>
]]></description><guid isPermaLink="false">8377</guid><pubDate>Mon, 24 Mar 2025 15:50:43 +0000</pubDate></item><item><title>&#x413;&#x43E;&#x442;&#x43E;&#x432;&#x44B;&#x439; &#x441;&#x430;&#x439;&#x442; &#x434;&#x43B;&#x44F; SAMP &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;</title><link>https://pawno-rus.com/topic/8225-gotovyy-sayt-dlya-samp-proekta/</link><description><![CDATA[
<h3 style="color:rgb(64,67,69);text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/674899917c9a8_Group5.png.15b9ceb9c246ea9a825ef8513776adc6.png" data-fileid="23862" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23862" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/674899925eebc_Group5.thumb.png.09a6255f61b630aac5aa539ecf636b33.png" alt="674899925eebc_Group5.thumb.png.09a6255f61b630aac5aa539ecf636b33.png" /></a>
</h3>

<h3 style="color:rgb(64,67,69);text-align:center;">
	<strong>Описание</strong>
</h3>

<p style="color:#404345;">
	Готовый сайт для SAMP-проекта, разработанный на PHP-фреймворке Laravel. Проект полностью готов к запуску и включает следующие функции: раздел новостей, авторизация в личный кабинет, восстановление пароля, система донатов, история платежей, карта сервера, смена пароля. Сложный функционал намеренно не добавлялся, чтобы облегчить процесс изучения структуры проекта и работы с ним. Все реализовано максимально просто, чтобы новички могли быстро разобраться, где что находится. База данных содержит минимальный набор информации, поскольку у каждого SAMP-проекта своя уникальная структура и функционал. Это позволяет вам легко адаптировать сайт под ваш проект. Например, в личном кабинете вы самостоятельно можете подставить необходимые данные для отображения информации об аккаунте пользователя. Сайт также включает административную панель. Для доступа к админке перейдите по адресу /admin. Если вы уже авторизованы как администратор, система перенаправит вас на главную страницу админки. В противном случае откроется страница авторизации. Важно отметить, что авторизация в личном кабинете и в административной панели — это две разные системы, которые между собой не связаны. Проект создан с упором на простоту и функциональность, что делает его отличным стартовым решением для вашего SAMP-проекта.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	Структура страниц
</h3>

<h4 style="color:#404345;">
	<strong>Публичный сайт</strong>
</h4>

<p style="color:#404345;">
	<strong>1. Главная страница (/)</strong>
</p>

<p style="color:#404345;">
	Стандартная страница с базовой информацией о вашем проекте. Здесь размещены инструкции по началу игры, новости и контакты. Если в базе данных отсутствуют новости, блок с ними отображаться не будет — для отображения требуется как минимум одна новость.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>2. Новости (/news)</strong>
</p>

<p style="color:#404345;">
	Раздел, где отображаются все ваши новости. Используется пагинация: на одной странице выводится по 10 записей.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>3. О нас (/company/about)</strong>
</p>

<p style="color:#404345;">
	Раздел с более детальной информацией о вашем проекте.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>4. Пользовательское соглашение (/company/user-agreement)</strong>
</p>

<p style="color:#404345;">
	Раздел с текстом пользовательского соглашения.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>5. Политика обработки персональных данных (/company/privacy-policy)</strong>
</p>

<p style="color:#404345;">
	Страница, где размещена информация о политике обработки персональных данных.
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>Профиль игрока</strong>
</h4>

<p style="color:#404345;">
	<strong>1. Личный кабинет (/profile)</strong>
</p>

<p style="color:#404345;">
	Страница с общей информацией об аккаунте пользователя.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>2. История платежей (/profile/payment-history)</strong>
</p>

<p style="color:#404345;">
	Страница с историей всех платежей пользователя, независимо от их статуса. Используется пагинация: на одной странице отображается 10 записей.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>3. Карта сервера (/profile/map)</strong>
</p>

<p style="color:#404345;">
	Мониторинг карты сервера. На данный момент отображаются только дома и бизнесы, а также информация о них. Функционал можно расширить в зависимости от особенностей вашего SAMP-проекта.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>4. Настройки (/profile/settings)</strong>
</p>

<p style="color:#404345;">
	Страница с формой для смены пароля. При успешной смене пароля пользователю отправляется уведомление на почту. Функционал также может быть доработан в зависимости от ваших требований.
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	<strong>Админка</strong>
</h4>

<p style="color:#404345;">
	<strong>1. Главная страница (/admin)</strong>
</p>

<p style="color:#404345;">
	Основная информация для администратора. Сделано минималистично, функционал можно расширить при необходимости.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>2. Новости (/admin/news)</strong>
</p>

<p style="color:#404345;">
	Страница для управления новостями. Здесь отображаются все новости, независимо от их статуса. Реализованы кнопки для создания, редактирования и удаления новостей. Для редактирования контента используется<span> </span><strong>QuillJS</strong>, что упрощает наполнение текстами. Изображения, добавленные в контент, сохраняются в базу данных в формате<span> </span><strong>base64</strong>. Обложки новостей хранятся в каталоге public/storage/news_images. При редактировании или удалении новости ненужные файлы автоматически удаляются.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>3. Пользователи (/admin/users)</strong>
</p>

<p style="color:#404345;">
	Страница всех игроков вашего SAMP-проекта. Используется пагинация: на одной странице отображается по 10 записей. Неподтвержденные email-адреса выделяются красным цветом (подтвержденными считаются те, у которых в поле<span> </span><strong>email_verified_at </strong>указана дата). На странице редактирования пользователя доступен раздел "Платежи", где выводятся все транзакции игрока, также с пагинацией (по 10 записей на странице).
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>4. Администраторы (/admin/admins)</strong>
</p>

<p style="color:#404345;">
	Раздел для управления администраторами сайта (не игровыми). Используется пагинация: на одной странице выводится по 10 записей. По умолчанию в проекте существует супер-администратор (Super_Admin), который может создавать новых администраторов. Функционал включает создание, редактирование и удаление администраторов. Супер-админа удалить невозможно. Для разграничения прав администраторов рекомендуется использовать пакет<span> </span><strong>spatie/laravel-permission</strong>, позволяющий добавлять роли (например, "модератор", "редактор").
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>5. Личный кабинет администратора (/admin/profile)</strong>
</p>

<p style="color:#404345;">
	Простая страница с основной информацией о текущем администраторе. При необходимости функционал можно доработать.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	Пароль
</h3>

<p style="color:#404345;">
	Насколько мне известно, большинство SAMP-проектов используют формат MD5 для хранения паролей. Однако Laravel и его пакеты для работы с авторизацией не поддерживают MD5 из-за его уязвимости. Поэтому было принято решение написать собственную реализацию авторизации. Функционал авторизации и смены пароля полностью работает с MD5. При этом авторизация в административную панель не использует MD5 и реализована с использованием более безопасных методов. Если в вашем проекте пароли хранятся не в формате MD5, вам потребуется немного изменить логику работы с паролями, чтобы адаптировать проект. Также настоятельно рекомендую добавить<span> </span><strong>двухфакторную аутентификацию</strong>, если вы используете MD5 для хранения паролей, чтобы повысить уровень безопасности.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:rgb(64,67,69);text-align:center;">
	Мои ожидания
</h4>

<p style="color:#404345;">
	Исходя из структуры проекта, я предполагаю, что у вас уже настроена база данных с таблицами: users (пользователи — игроки), businesses (бизнесы), houses (дома).
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Таблица users:</strong>
</p>

<p style="color:#404345;">
	username — игровой ник;
</p>

<p style="color:#404345;">
	password — пароль;
</p>

<p style="color:#404345;">
	email — игровая почта;
</p>

<p style="color:#404345;">
	p_level — уровень;
</p>

<p style="color:#404345;">
	p_skin — ID скина;
</p>

<p style="color:#404345;">
	p_money — игровая валюта;
</p>

<p style="color:#404345;">
	p_donate — донат-счет;
</p>

<p style="color:#404345;">
	email_verified_at — дата подтверждения почты;
</p>

<p style="color:#404345;">
	created_at — дата создания аккаунта;
</p>

<p style="color:#404345;">
	updated_at — дата последнего обновления записи (обновляется автоматически).
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Таблицы houses и businesses:</strong>
</p>

<p style="color:#404345;">
	name — название;
</p>

<p style="color:#404345;">
	description — описание;
</p>

<p style="color:#404345;">
	price — государственная стоимость;
</p>

<p style="color:#404345;">
	entrance_x — координата входа по оси X;
</p>

<p style="color:#404345;">
	entrance_y — координата входа по оси Y;
</p>

<p style="color:#404345;">
	entrance_z — координата входа по оси Z;
</p>

<p style="color:#404345;">
	user_id — ID игрока, которому принадлежит дом или бизнес.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	Для карты в личном кабинете используются координаты<span> </span><strong>X</strong><span> </span>и<strong> Y</strong>. Если в вашей базе данных эти поля называются иначе, не забудьте внести изменения в контроллер<span> </span><strong>MapController.php</strong><span> </span>и файл<span> </span><strong>map.blade.php.</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	Структура проекта
</h3>

<p style="color:#404345;">
	Для работы с проектом рекомендую использовать IDE PhpStorm. Вы можете навести курсор на любой метод, нажать Ctrl, чтобы перейти к его реализации, и таким образом разобраться, где и как вызывается код.
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	Основные файлы и директории
</h4>

<p style="color:#404345;">
	<strong>routes/web.php</strong><span> </span>Здесь находятся роуты для публичной части сайта. Для каждой страницы и её логики создан отдельный роут.
</p>

<p style="color:#404345;">
	<strong>routes/admin.php</strong><span> </span>Этот файл содержит роуты, относящиеся к админке.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	Проект построен по принципу<span> </span><strong>MVC (Model-View-Controller): </strong>
</p>

<p style="color:#404345;">
	<strong>Model —</strong><span> </span>работа с базой данных.
</p>

<p style="color:#404345;">
	<strong>View —</strong><span> </span>представления (HTML-шаблоны).
</p>

<p style="color:#404345;">
	<strong>Controller —</strong><span> </span>логика, например, извлечение данных из базы и передача их в представления.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>app/Models</strong><span> </span>В этой папке находятся модели, которые представляют таблицы базы данных. Например,<span> </span><strong>app/Models/User</strong><span> </span>связана с таблицей<span> </span><strong>users</strong>.
</p>

<p style="color:#404345;">
	<strong>resources/views</strong><span> </span>Здесь хранится вся верстка сайта, включая шаблоны административной панели. В любом шаблоне вам будут доступны две переменные:<span> </span><strong>$serverName</strong><span> </span>и<span> </span><strong>$serverIP.</strong>
</p>

<p style="color:#404345;">
	<strong>app/Http/Controllers</strong><span> </span>Содержит контроллеры. Для каждой части логики создается отдельный контроллер. Также есть папка<span> </span><strong>Admin</strong>, где находятся контроллеры, относящиеся к админке.
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	Middleware
</h4>

<p style="color:#404345;">
	В проекте используются два Middleware:
</p>

<p style="color:#404345;">
	<strong>AuthenticateUser — </strong>проверяет авторизацию пользователя. Например, чтобы открыть страницу личного кабинета, используется этот Middleware. Если пользователь не авторизован, доступ к странице будет закрыт.
</p>

<p style="color:#404345;">
	<strong>AuthenticateAdmin —</strong><span> </span>отвечает за авторизацию в админке. Например, для создания новости или входа в административную панель.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	В роутах они называются<span> </span><strong>auth.user</strong><span> </span>и<span> </span><strong>auth.admin.</strong>
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	Работа с базой данных
</h4>

<p style="color:#404345;">
	<strong>database/seeders —</strong><span> </span>Здесь находятся сидеры, которые используются для заполнения базы данных. Например, для разработки или тестирования можно заполнить таблицы фейковыми данными с помощью пакета fakerphp/faker.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	На данный момент в проекте есть три сидера: для домов, бизнесов и создания супер-администратора. По умолчанию используется DatabaseSeeder.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	Команды для работы с сидерами:
</p>

<p style="color:#404345;">
	Запуск всех сидеров:<span> </span><strong>php artisan db:seed.</strong>
</p>

<p style="color:#404345;">
	Запуск конкретного сидера:<strong> php artisan db:seed --class=UserSeeder.</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>database/migrations —</strong><span> </span>Важная часть проекта. Все манипуляции с базой данных (создание, изменение, удаление таблиц) выполняются через миграции. Миграции можно отслеживать, откатывать и проверять их статус.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Основные команды:</strong>
</p>

<p style="color:#404345;">
	Создание миграции:<span> </span><strong>php artisan make:migration create_users_table.</strong>
</p>

<p style="color:#404345;">
	Применение миграции:<span> </span><strong>php artisan migrate.</strong>
</p>

<p style="color:#404345;">
	Откат миграции:<span> </span><strong>php artisan migrate:rollback</strong><span> </span>(можно указать, сколько миграций откатить).
</p>

<p style="color:#404345;">
	Просмотр всех доступных команд:<span> </span><strong>php artisan.</strong>
</p>

<p style="color:#404345;">
	 
</p>

<h4 style="color:#404345;">
	Фронтенд
</h4>

<p style="color:#404345;">
	<strong>public/assets —</strong><span> </span>В этой директории находятся стили, JavaScript-код и изображения.
</p>

<p style="color:#404345;">
	<strong>resources —</strong><span> </span>Файлы CSS и JS также находятся в этой папке. Если вы изменяете их, обязательно выполните сборку проекта командой:<span> </span><strong>npm run build</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	Донат
</h3>

<p style="color:#404345;">
	Платежных систем достаточно, и каждый может выбрать подходящую по своему усмотрению. Однако в данном проекте не реализован полный функционал оплаты. Есть таблица с оплатами, в админке отображается статистика, а у пользователя — история платежей, но сам процесс оплаты не предусмотрен. Я лишь подготовил основу, и вам нужно выбрать платёжную систему и подключить её самостоятельно. В вашем распоряжении будет контроллер<span> </span><strong>ShopController.php</strong>, в котором есть метод<span> </span><strong>processPayment</strong>. В этом методе вы получаете информацию о пользователе, который совершает донат, сумму и email. Все данные для записи в таблицу о платеже уже есть, и создается запись со статусом<span> </span><strong>waiting.</strong><span> </span>Все возможные статусы можно найти в файле<span> </span><strong>app/Enums/PaymentStatus.</strong><span> </span>После того как платеж будет обработан, вам нужно изменить статус в таблице с waiting на success или error, в зависимости от результата. Если платёж успешен, также необходимо обновить поле<span> </span><strong>p_donate</strong><span> </span>в таблице<span> </span><strong>users.</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Пример кода для изменения статуса и обновления данных пользователя:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="php" plaincode="$payment-&gt;update(['status' =&gt; 'success']);
$user-&gt;increment('p_donate', $validated['amount']);">
<span><span>$payment-&gt;update(['status' =&gt; 'success']);</span></span>
<span><span>$user-&gt;increment('p_donate', $validated['amount'])</span><span>;</span></span>
</pre>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	В интернете есть множество статей о том, как подключить платёжные системы, а также существуют специализированные пакеты для Laravel, которые могут упростить этот процесс.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	Что нужно для запуска проекта
</h3>

<p style="color:#404345;">
	Для пользователей Linux данная инструкция не требуется, так как предполагается, что вы уже знакомы с процессом настройки.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	1. Установите<span> </span><strong>OpenServer </strong>или аналогичный инструмент
</p>

<p style="color:#404345;">
	2. Проверьте версии установленных инструментов, используя команды:
</p>

<p style="color:#404345;">
	2.1.<span> </span><strong>php -v</strong>
</p>

<p style="color:#404345;">
	2.2.<span> </span><strong>composer -V</strong>
</p>

<p style="color:#404345;">
	3. Установите<span> </span><strong>Node.js.</strong><span> </span>После установки убедитесь, что<span> </span><strong>Node.js</strong><span> </span>и<span> </span><strong>npm </strong>работают корректно, выполнив команды:
</p>

<p style="color:#404345;">
	3.1.<span> </span><strong>node -v</strong>
</p>

<p style="color:#404345;">
	3.2.<span> </span><strong>npm -v</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>PHP:</strong><span> </span>версия<span> </span><strong>8.2</strong><span> </span>или выше.<span> </span><strong>MySQL:</strong><span> </span>у меня<span> </span><strong>8.0</strong><span> </span>на момент разработки.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<h3 style="color:rgb(64,67,69);text-align:center;">
	Первые шаги
</h3>

<p style="color:#404345;">
	Скорее всего, вы скачали архив проекта, но инструкция составлена так, будто вы клонировали репозиторий с GitHub.
</p>

<p style="color:#404345;">
	Рекомендую для начала использовать предоставленные данные проекта, чтобы разобраться в его работе, вместо того чтобы сразу адаптировать вашу базу данных.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>1. Создание базы данных.</strong>
</p>

<p style="color:#404345;">
	Создайте пустую базу данных для проекта.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>2. Настройка файла .env. </strong>
</p>

<p style="color:#404345;">
	В корневой директории проекта у вас должен быть файл<span> </span><strong>.env.</strong><span> </span>Если его нет, скопируйте файл<span> </span><strong>env.example</strong><span> </span>и переименуйте его, удалив<span> </span><strong>.example:</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	3. Далее выполните команду:<span> </span><strong>php artisan key:generate</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	4. Откройте файл<span> </span><strong>.env</strong><span> </span>и настройте его под свои параметры:
</p>

<p style="color:#404345;">
	<strong>APP_URL —</strong><span> </span>Укажите адрес сайта (локально - локальный, на хостинге - ссылка сайта).
</p>

<p style="color:#404345;">
	<strong>SAMP_SERVER_NAME —</strong><span> </span>Название вашего SAMP-проекта.
</p>

<p style="color:#404345;">
	<strong>SAMP_SERVER_IP —</strong><span> </span>IP-адрес вашего SAMP-сервера.
</p>

<p style="color:#404345;">
	<strong>DB_HOST —</strong><span> </span>Хост базы данных.
</p>

<p style="color:#404345;">
	<strong>DB_PORT —</strong><span> </span>Порт базы данных.
</p>

<p style="color:#404345;">
	<strong>DB_DATABASE —</strong><span> </span>Имя базы данных.
</p>

<p style="color:#404345;">
	<strong>DB_USERNAME —</strong><span> </span>Имя пользователя базы данных.
</p>

<p style="color:#404345;">
	<strong>DB_PASSWORD —</strong><span> </span>Пароль для базы данных (оставьте пустым, если не требуется).
</p>

<p style="color:#404345;">
	<strong>SUPER_ADMIN_PASSWORD —</strong><span> </span>Задайте сложный пароль для супер-администратора (требуется минимум 8 символов).
</p>

<p style="color:#404345;">
	<strong>CONTACT_EMAIL —</strong><span> </span>Почта проекта.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	Найдите переменную<span> </span><strong>MAIL_MAILER </strong>и укажите настройки для вашего почтового сервиса. Без этого отправка писем на почту не будет работать. Для тестирования локально я использовал mailtrap.
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>5. Установка зависимостей. </strong>
</p>

<p style="color:#404345;">
	Установите зависимости<span> </span><strong>PHP </strong>и<span> </span><strong>Node.js:</strong>
</p>

<p style="color:#404345;">
	5.1.<strong> composer install</strong>
</p>

<p style="color:#404345;">
	5.2.<span> </span><strong>npm install</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>6. Очистка кеша. </strong>
</p>

<p style="color:#404345;">
	На всякий случай очистите все кеши:
</p>

<p style="color:#404345;">
	6.1.<span> </span><strong>php artisan cache:clear</strong>
</p>

<p style="color:#404345;">
	6.2.<span> </span><strong>php artisan route:clear</strong>
</p>

<p style="color:#404345;">
	6.3.<span> </span><strong>php artisan config:clear</strong>
</p>

<p style="color:#404345;">
	6.4.<span> </span><strong>php artisan view:clear</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>7. Сборка фронтенда. </strong>
</p>

<p style="color:#404345;">
	Соберите проект:<span> </span><strong>npm run build</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>8. Файловое хранилище. </strong>
</p>

<p style="color:#404345;">
	Чтобы изображения, которые вы загружаете, были видны в шаблонах, используйте команду:<strong> php artisan storage:link.</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>9. Миграции и сидеры. </strong>
</p>

<p style="color:#404345;">
	Выполните миграцию базы данных и запустите сидеры для начального заполнения:<span> </span><strong>php artisan migrate:fresh --seed</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>10. Запуск проекта. </strong>
</p>

<p style="color:#404345;">
	Для запуска проекта выполните:<span> </span><strong>php artisan serve</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	Не пугайтесь большого количества шагов на первый взгляд — на самом деле все достаточно просто. Основные действия включают настройку файла .env и установку зависимостей. Это всего лишь первоначальная настройка. В дальнейшем для запуска проекта вам понадобится всего одна команда:<span> </span><strong>php artisan serve</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	Если все сделано правильно, сайт будет доступен по адресу:<span> </span><strong>127.0.0.1:8000</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	<strong>Дополнительно:</strong>
</p>

<p style="color:#404345;">
	В архиве предоставлен дамп базы данных, использовавшийся на этапе разработки.
</p>

<p style="color:#404345;">
	Пароли в таблице<span> </span><strong>users: 123123</strong>
</p>

<p style="color:#404345;">
	Пароли в таблице<span> </span><strong>admins: 12345678</strong>
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:#404345;">
	 
</p>

<p style="color:rgb(64,67,69);text-align:center;">
	<strong>Скачать:</strong> <a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9kaXNrLnlhbmRleC5ieS9kL1VOZFFWai1YQVRsdnp3" rel="external nofollow">https://disk.yandex.by/d/UNdQVj-XATlvzw</a>
</p>

<p style="color:rgb(64,67,69);text-align:center;">
	 
</p>

<p style="color:rgb(64,67,69);text-align:center;">
	<strong>Скриншоты:</strong>
</p>

<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/1.png.f6ecf40bc18a5674d3796eb22ae4f961.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23840" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/1.thumb.png.a5912b7e768bcf459dfa3392f0289c7a.png" class="ipsImage ipsImage_thumbnailed" alt="1.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/2.png.67380a59c5877f6e508652df6321d06a.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23841" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/2.thumb.png.ec28f4b50056c2e8431465bfb8bd8189.png" class="ipsImage ipsImage_thumbnailed" alt="2.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/3.png.ab85b790b7c09a23e328f090dac46fdf.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23842" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/3.thumb.png.463d9a0dfa52ed933e5150916d558046.png" class="ipsImage ipsImage_thumbnailed" alt="3.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/4.png.77284b2584c3d811c626c6aad4dadb5c.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23843" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/4.thumb.png.3fdbb39b5960803bea063160ed425ff9.png" class="ipsImage ipsImage_thumbnailed" alt="4.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/5.png.c3d9d0940b2cddc8f1408d491ba3ac79.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23844" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/5.thumb.png.f8bd23d0719265e0251efb11136eea34.png" class="ipsImage ipsImage_thumbnailed" alt="5.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/6.png.0bb0765b36e190b93695009e94bf85a9.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23845" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/6.thumb.png.a6182700b6855b35b9f1fa2619d49d1e.png" class="ipsImage ipsImage_thumbnailed" alt="6.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/7.png.8190f0229b732df66b2ec9d5fbf38d5b.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23846" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/7.thumb.png.45dfda236f31893f2aaa85496012b8de.png" class="ipsImage ipsImage_thumbnailed" alt="7.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/8.png.f0652c7138eef5363831cfaaa5268144.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23847" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/8.thumb.png.e3db2b9a2449a06b48a82045f9b3b1e2.png" class="ipsImage ipsImage_thumbnailed" alt="8.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/9.png.904f94dc44975b35909c415dc861dc3c.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23848" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/9.thumb.png.e35a73b567ab89765ef2c7bfc3befbb5.png" class="ipsImage ipsImage_thumbnailed" alt="9.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/10.png.e96f726b9007a2d95050f2c51e3437e5.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23849" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/10.thumb.png.175c84181b6224af40d7906aeb64f718.png" class="ipsImage ipsImage_thumbnailed" alt="10.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/11.png.d1d85be9f0a2d10033aef9895690d90b.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23850" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/11.thumb.png.4456ef628061a3b5b3ac77b45680221e.png" class="ipsImage ipsImage_thumbnailed" alt="11.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/12.png.a3220dd90cd9e10d1a438b5eb717b311.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23851" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/12.thumb.png.3db0d4d5dd9964c0b84f8e33f5160f37.png" class="ipsImage ipsImage_thumbnailed" alt="12.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/13.png.8ed20a66e9e54079ca3cfe370a26e640.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23852" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/13.thumb.png.a4eddaec2031a9c8dea8121fb2244e6e.png" class="ipsImage ipsImage_thumbnailed" alt="13.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/14.png.560293411a344ef43ff752a0935aeade.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23853" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/14.thumb.png.ecbd8fb65ccead3677052fbd74670c74.png" class="ipsImage ipsImage_thumbnailed" alt="14.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/15.png.8f3fdb3264468e11097fb3dbf3dd4dde.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23854" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/15.thumb.png.9cfa11072199451afd395247c3cfc4d7.png" class="ipsImage ipsImage_thumbnailed" alt="15.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/16.png.6081410f044ffd62887bf6417073cde3.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23855" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/16.thumb.png.972bc4af8d851d1a6ef34bd79ecc7a20.png" class="ipsImage ipsImage_thumbnailed" alt="16.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/17.png.eda7fd6dd348b85e5525bd66153fd341.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23856" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/17.thumb.png.035ad93042fd4dd94298d860c9abf8f0.png" class="ipsImage ipsImage_thumbnailed" alt="17.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/18.png.6595aa9cbe908f6d5af9d081d27b955f.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23857" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/18.thumb.png.8df5fbdeaccaf7af00e60fb78868a1e4.png" class="ipsImage ipsImage_thumbnailed" alt="18.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/19.png.eed8274046999e3f8d0fd7d83fb6b23b.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23858" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/19.thumb.png.b9909bc7e90dd1d1f83a8b2629c58a44.png" class="ipsImage ipsImage_thumbnailed" alt="19.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/20.png.184735d2440ec8f1e5c3cb25205ef915.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23859" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/20.thumb.png.8dd650bca5f55478e2cf0bc9d9feb69e.png" class="ipsImage ipsImage_thumbnailed" alt="20.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/21.png.b3dafff59119f198b7e9e1f5eaedcae3.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23860" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/21.thumb.png.191e56bbe8085beb0e03c83bd35f8965.png" class="ipsImage ipsImage_thumbnailed" alt="21.png"></a></p>
<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_11/22.png.d80d63bfd6730e4a67d5c7638b7cbe07.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="23861" src="//storage.yandexcloud.net/pawnorus/monthly_2024_11/22.thumb.png.112cea54c7c2f05e8333e31c4b94d105.png" class="ipsImage ipsImage_thumbnailed" alt="22.png"></a></p>]]></description><guid isPermaLink="false">8225</guid><pubDate>Thu, 28 Nov 2024 16:29:30 +0000</pubDate></item><item><title>Laravel 12: &#x412;&#x441;&#x435; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x432;&#x44B;&#x435; &#x43D;&#x43E;&#x432;&#x43E;&#x432;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x438; &#x443;&#x43B;&#x443;&#x447;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x432; &#x43D;&#x43E;&#x432;&#x43E;&#x43C; &#x440;&#x435;&#x43B;&#x438;&#x437;&#x435;</title><link>https://pawno-rus.com/topic/8359-laravel-12-vse-klyuchevye-novovvedeniya-i-uluchsheniya-v-novom-relize/</link><description><![CDATA[
<p style="text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24009" href="//storage.yandexcloud.net/pawnorus/monthly_2025_03/laravel-12.png.5a637a5962a5ec127693f32a936e771f.png" rel=""><img alt="laravel-12.thumb.png.f74b815b515aed735cd67d717bfab2fc.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24009" src="//storage.yandexcloud.net/pawnorus/monthly_2025_03/laravel-12.thumb.png.f74b815b515aed735cd67d717bfab2fc.png" /></a>
</p>

<p>
	 
</p>

<p>
	Laravel 12, выпущенный 24 февраля 2025 года, представляет собой значительное обновление популярного PHP-фреймворка, направленное на улучшение разработки веб-приложений. В этой статье мы рассмотрим ключевые изменения и нововведения, представленные в этой версии.<br /><br />
	 
</p>

<p>
	<strong><span style="font-size:16px;">Новые стартовые наборы: современный подход к разработке</span></strong>
</p>

<p>
	Одним из наиболее заметных изменений в Laravel 12 является введение новых стартовых наборов (starter kits) для React, Vue и Livewire, заменяющих устаревшие Breeze и Jetstream. Эти наборы обеспечивают современную и гибкую основу для разработки веб-приложений с использованием популярных фронтенд-технологий.<br /><br /><strong>React Starter Kit:</strong> основан на Inertia, React 19, TypeScript, Tailwind CSS и компонентах shadcn. Он идеально подходит для создания современных одностраничных приложений (SPA) с использованием React.<br /><br /><strong>Vue Starter Kit:</strong> построен с использованием Inertia, Vue 3, TypeScript, Tailwind CSS и компонентов shadcn-vue. Этот набор предоставляет мощную и типобезопасную основу для разработчиков, предпочитающих Vue.<br /><br /><strong>Livewire Starter Kit:</strong> предназначен для тех, кто использует Livewire и Blade, обеспечивая плавную интеграцию с Tailwind CSS и компонентами shadcn. Он упрощает создание интерактивных пользовательских интерфейсов без необходимости в обширном написании JavaScript-кода.<br /><br />
	Эти новые стартовые наборы обеспечивают быструю и эффективную настройку проектов, позволяя разработчикам сосредоточиться на создании функциональности, а не на начальной конфигурации.<br /><br />
	 
</p>

<p>
	<strong><span style="font-size:16px;">Улучшенная работа с API: поддержка GraphQL и версионирование</span></strong>
</p>

<p>
	Laravel 12 значительно улучшает разработку API, вводя нативную поддержку GraphQL и новую систему версионирования API. Эти обновления упрощают управление API и облегчают создание масштабируемых и высокопроизводительных приложений.<br /><br /><strong>Поддержка GraphQL:</strong> позволяет разработчикам запрашивать только необходимые данные, уменьшая размер передаваемых данных и улучшая время отклика. Вместо множества REST-эндпоинтов, один запрос GraphQL может получить точные и структурированные данные, повышая эффективность API-вызовов.<br /><br /><strong>Версионирование API:</strong> переработано для лучшей организации. Ранее версии API указывались вручную в маршрутах, что приводило к загромождению файлов маршрутов. Теперь, с новым подходом, маршруты API структурированы и масштабируемы, что облегчает поддержку нескольких версий API без избыточного дублирования.<br /><br />
	Эти улучшения делают разработку API более эффективной, укрепляя позиции Laravel 12 как предпочтительного фреймворка для создания высокопроизводительных и хорошо организованных API.<br /><br />
	 
</p>

<p>
	<span style="font-size:16px;"><strong>AI-помощник для отладки: интеллектуальный подход к решению проблем</strong></span>
</p>

<p>
	Laravel 12 представляет AI-помощника для отладки, который помогает разработчикам быстрее выявлять и устранять проблемы. Вместо использования традиционных методов отладки, таких как <strong><em>dd()</em></strong> или <strong><em>dump()</em></strong>, новый метод <strong><em>debug()</em></strong> предоставляет информацию в реальном времени и предлагает возможные решения.<br /><br /><strong>Пример использования:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="php" plaincode="debug($variable)-&gt;suggest();">
<span><span>debug($variable)-&gt;suggest();</span></span>
</pre>

<p>
	Этот подход ускоряет процесс отладки и повышает производительность разработки, позволяя быстрее находить и исправлять ошибки.<br /><br />
	 
</p>

<p>
	<strong><span style="font-size:16px;">Прочие улучшения и изменения</span></strong>
</p>

<ul><li>
		<strong>Удаление поддержки Carbon 2:</strong> Laravel 12 теперь требует использования Carbon 3, обеспечивая более современные и эффективные методы работы с датами и временем.
	</li>
	<li>
		<strong>Обновление Laravel Installer:</strong> необходимо обновить Laravel Installer для поддержки Laravel 12 и новых стартовых наборов.
	</li>
	<li>
		<strong>Метод <em>Concurrency::run</em>:</strong> теперь при вызове с ассоциативным массивом возвращает результаты операций вместе с соответствующими ключами, улучшая управление параллельными задачами.
	</li>
	<li>
		<strong>Метод <em>$request-&gt;mergeIfMissing()</em>:</strong> теперь позволяет объединять вложенные массивы данных с использованием нотации «точка», что упрощает работу с вложенными данными в запросах.
	</li>
</ul><p>
	 
</p>

<p>
	<strong><span style="font-size:16px;">Заключение</span></strong>
</p>

<p>
	Laravel 12 представляет собой значительный шаг вперед в развитии фреймворка, предлагая современные инструменты и улучшения для разработчиков. Новые стартовые наборы, улучшенная работа с API и AI-помощник для отладки делают разработку с использованием Laravel еще более эффективной и приятной. Рекомендуется обновить существующие проекты до Laravel 12, чтобы воспользоваться всеми преимуществами этой версии.
</p>
]]></description><guid isPermaLink="false">8359</guid><pubDate>Sun, 02 Mar 2025 07:20:44 +0000</pubDate></item><item><title>&#x41F;&#x430;&#x43D;&#x435;&#x43B;&#x44C; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x43E;&#x43C; SAMP PANEL</title><link>https://pawno-rus.com/topic/8320-panel-upravleniya-serverom-samp-panel/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">Приветствую всем!</span><br /><font face="Courier New, Courier, monospace">Появилась задумка, создать панель управления сервером, сайтов и форумом на одном сайте? Ну действительно удобно же!<br />
	Так вот, была подготовлена лишь малая часть этой системы, сделана оболочка.</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">Для особых людей - берите, подстраивайте под свой проект, запретов нету))</font>
</p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">Но если эта тема станет актуальной, будут набираться лайки, пожелания по этому проекту, я его продолжу, сделаю систему и видео инструкции по настройке и внедрению для ЛЮБОГО СЕРВЕРА. Сделать это не так трудно, вам нужно будет лишь установить к себе и поменять данные.</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">Система полностью чистая - проверяйте. Не знаете? Нейросеть для проверки в помощь.</font>
</p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">Поподробнее о системе... </font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace"><strong>Что в ней присутствует:</strong></font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace"><strong>- Главное меню со статистикой сервера и сайта:</strong></font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">1. Показатели игроков, общее кол-во доната, денег, варнов, банов и прочего)</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">То есть вся нужная информация для руководство и главной администрации.</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace"><strong>- Главные настройки сервера, панели, сайта:</strong></font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">1. Изменение названия сервера, мода, сайта, панели. </font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">2. Настройки пользователя панели. </font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">3. Создание нового аккаунта в панель, например для ГА, без его участия в регистрации.</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">4. Загрузка логотипа, мода прям в панели.</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">5. Включение и выключение донатов, выдачи бонусов и прочего.</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">6. Так же настройки регистрации, доступов к командам и прочего.</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">7. Настройки каждого элемента к сайту и прочему.</font><br /><span style="font-family:'Courier New', Courier, monospace;"><strong>- Показатели сервера, панели, сайта:</strong></span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">1. Информация о донатах. (Каждое пополнение через сай фиксируется в БД и выдается в таблицу в панели).</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">2. Информация о лидерах. (Назначение каждого лидера также фиксируется, показывается статус, срок, орга и его ник).</span>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">3. Также основная информация о игроках. (Его лвл, ник, кол-во денег, дт.рег и статус в игре/не в игре).</font>
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">4 Ну и также для администрации. (Ник, лвл, должность и прочая инфа).</font>
</p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<font face="Courier New, Courier, monospace">Еще раз говорю, если эта система будет актуальна, ставьте +, пишите пожелания и что-то в таком роде. Возможно даже систему выложу платно, рублей так за 250, если цена большая - говорите. Ну и подскажите, платно или бесплатно сделать её.<br />
	Также сделаю возможность докупить сервер и приватные плагины для всей этой системы.</font><br /><br /><span style="font-family:'Courier New', Courier, monospace;"><strong>Если система станет актуально, на след обновлении проекта Вы увидите:</strong><br />
	- Групповой чат для админов панели.</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">- Сохранение логов с мода и сайта каждого пользователя и администратора в панель.</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">Можно будет скачать файл или посмотреть логи прям на сайте.</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">- Также возможность выдачи чего либо прям через панель, например денег и других бонусов.</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">- Возможность выдачи и снятия с админки, лидерки и еще чего либо прям с панели.</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">- Плагины и скрипты для подключения к сайту, моду и хостингу.</span>
</p>

<p style="text-align:center;">
	<span style="font-family:'Courier New', Courier, monospace;">- Панель управления MySQL прям с панели.<br /><br />
	Работа вся эта не сложная, за пару недель вкачу обнову, но для кого и актуально ли будет?? Вот в чем вопрос.<br /><br />
	Благодарю что дочитали. Скриншоты и файл системы SAMP PANEL 1.0.0 оставлю ниже.</span><br /><br />
	 
</p>

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

	<div class="ipsSpoiler_contents">
		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-36.png.db9759153f98f9e873979b5ff8c8375b.png" data-fileid="23957" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23957" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-36.thumb.png.6da5bcb755df3b5f465ed38b7b1cb9dc.png" alt="2025-01-20_03-38-36.thumb.png.6da5bcb755df3b5f465ed38b7b1cb9dc.png" /></a>
		</p>

		<p style="text-align:center;">
			 
		</p>

		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-27.png.27a4345f189a91e83dcc4c7e7551d09d.png" data-fileid="23958" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23958" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-27.thumb.png.c207ed36d983a7c29d54359dcda6c05d.png" alt="2025-01-20_03-38-27.thumb.png.c207ed36d983a7c29d54359dcda6c05d.png" /></a>
		</p>

		<p style="text-align:center;">
			 
		</p>

		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-18.png.c02d9776805d42ce3d3d6447d09e997c.png" data-fileid="23959" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23959" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-18.thumb.png.d2de187340333b8b6ea52fa6757a14e4.png" alt="2025-01-20_03-38-18.thumb.png.d2de187340333b8b6ea52fa6757a14e4.png" /></a>
		</p>

		<p style="text-align:center;">
			 
		</p>

		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-10.png.a82eeb7d7ca68e66955ddebbc9139ec7.png" data-fileid="23960" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23960" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-10.thumb.png.452cbc9085fc25d43d4aaf3c96ade74d.png" alt="2025-01-20_03-38-10.thumb.png.452cbc9085fc25d43d4aaf3c96ade74d.png" /></a>
		</p>

		<p style="text-align:center;">
			 
		</p>

		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-02.png.6f870013c886179221a25a74c3811faf.png" data-fileid="23961" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23961" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-38-02.thumb.png.32e7f22629d669de828ccd0df1cfcf26.png" alt="2025-01-20_03-38-02.thumb.png.32e7f22629d669de828ccd0df1cfcf26.png" /></a>
		</p>

		<p style="text-align:center;">
			 
		</p>

		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-37-52.png.9e67b45b679cd763a24122fb6069e593.png" data-fileid="23962" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23962" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-37-52.thumb.png.0c3e31cd01f6ddae2455f25091db8096.png" alt="2025-01-20_03-37-52.thumb.png.0c3e31cd01f6ddae2455f25091db8096.png" /></a>
		</p>

		<p style="text-align:center;">
			 
		</p>

		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-37-40.png.f62d01883342b54ad93167b45cf3c4cf.png" data-fileid="23963" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23963" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/2025-01-20_03-37-40.thumb.png.96c71bf0c4e79c23732fe52a708f8995.png" alt="2025-01-20_03-37-40.thumb.png.96c71bf0c4e79c23732fe52a708f8995.png" /></a>
		</p>
	</div>
</div>

<p style="text-align:center;">
	<br /><a class="ipsAttachLink" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=23964" data-fileid="23964" rel="">samp-panel.zip</a> скачать тут!
</p>
]]></description><guid isPermaLink="false">8320</guid><pubDate>Sun, 19 Jan 2025 19:40:47 +0000</pubDate></item><item><title>Laravel vs Symfony: &#x41F;&#x43E;&#x43B;&#x43D;&#x43E;&#x435; &#x440;&#x443;&#x43A;&#x43E;&#x432;&#x43E;&#x434;&#x441;&#x442;&#x432;&#x43E; &#x434;&#x43B;&#x44F; &#x43D;&#x43E;&#x432;&#x438;&#x447;&#x43A;&#x43E;&#x432;</title><link>https://pawno-rus.com/topic/8321-laravel-vs-symfony-polnoe-rukovodstvo-dlya-novichkov/</link><description><![CDATA[
<p style="text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/laravel-vs-symfony.png.ded91afeeb67a1460d045d8f6f60f0ee.png" data-fileid="23965" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23965" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/laravel-vs-symfony.thumb.png.f5ce299be402c515b7b2c9603e459410.png" alt="laravel-vs-symfony.thumb.png.f5ce299be402c515b7b2c9603e459410.png" /></a>
</p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<span style="font-size:16px;"><strong>Laravel vs Symfony: Полное руководство для новичков</strong></span>
</p>

<p>
	<br /><strong>Введение</strong><br /><br />
	Если вы начинающий разработчик PHP или опытный программист, желающий выбрать лучший фреймворк для своих проектов, Laravel и Symfony — это два ведущих фреймворка, которые стоит рассмотреть. Оба имеют мощные возможности, но каждый из них подходит для разных случаев и предпочтений. В этой статье мы подробно рассмотрим, чем отличаются Laravel и Symfony, их плюсы, минусы и где они лучше всего применимы.<br /><br /><br /><br /><strong>Что такое Laravel?</strong><br /><br />
	Laravel — это популярный PHP-фреймворк, который делает разработку проще и приятнее благодаря удобным инструментам, доступной документации и современному подходу к программированию.<br />
	 
</p>

<ul><li>
		<strong>Год выпуска:</strong> 2011
	</li>
	<li>
		<strong>Создатель:</strong> Taylor Otwell
	</li>
	<li>
		<strong>Основная цель:</strong> Облегчить процесс разработки веб-приложений с использованием элегантного синтаксиса.
	</li>
</ul><p>
	<br /><u>Основные особенности Laravel:</u><br /><br />
	- <strong>Eloquent ORM:</strong> Удобная работа с базой данных.<br />
	- <strong>Blade шаблонизатор:</strong> Легкий и понятный способ работы с шаблонами.<br />
	- <strong>Artisan CLI:</strong> Командная строка для автоматизации задач.<br />
	- <strong>Laravel Horizon и Scout:</strong> Расширенные инструменты для работы с очередями и поиском.<br />
	- <strong>Встроенная поддержка API:</strong> Удобные возможности для разработки RESTful API.<br /><br /><br /><br /><strong>Что такое Symfony?</strong><br /><br />
	Symfony — это мощный PHP-фреймворк с фокусом на масштабируемость, гибкость и модульность. Он особенно популярен среди крупных компаний и используется для создания сложных и высоконагруженных приложений.<br />
	 
</p>

<ul><li>
		<strong>Год выпуска:</strong> 2005
	</li>
	<li>
		<strong>Создатель:</strong> Fabien Potencier
	</li>
	<li>
		<strong>Основная цель:</strong> Предоставить разработчикам надежную основу для создания масштабируемых приложений.
	</li>
</ul><p>
	<br /><u>Основные особенности Symfony:</u><br /><br />
	- <strong>Bundles и Components:</strong> Модульная архитектура, позволяющая переиспользовать код.<br />
	- <strong>Twig шаблонизатор:</strong> Удобный и мощный инструмент для работы с представлениями.<br />
	- <strong>Doctrine ORM:</strong> Гибкое средство для работы с базой данных.<br />
	- <strong>Поддержка консольных приложений:</strong> Symfony Console для автоматизации задач.<br />
	- <strong>Высокая совместимость:</strong> Интеграция с различными библиотеками и стандартами.<br /><br /><br /><br /><strong>Сравнение Laravel и Symfony</strong><br /><br /><strong>1. Простота использования</strong><br /><br />
	Laravel считается более простым для новичков благодаря лаконичной документации, интуитивно понятным инструментам и готовым решениям "из коробки". Symfony, в свою очередь, требует большего понимания основ программирования и может показаться сложным на начальных этапах.<br /><br /><strong>2. Производительность</strong><br /><br />
	Symfony, как правило, имеет более высокую производительность благодаря своей модульной архитектуре и возможностям оптимизации. Laravel, несмотря на это, предлагает современные инструменты, которые позволяют достигать высокой производительности в большинстве приложений.<br /><br /><strong>3. Гибкость</strong><br /><br />
	Symfony предоставляет разработчикам больше свободы и возможностей для настройки проекта. Laravel больше ориентирован на стандартные решения и удобство использования.<br /><br /><strong>4. Сообщество и поддержка</strong><br /><br />
	Laravel обладает активным сообществом и огромным количеством видеокурсов, туториалов и форумов. Symfony имеет более профессиональное сообщество и часто используется в корпоративной среде.<br /><br /><br /><br /><strong>Когда выбрать Laravel?</strong><br /><br />
	- Для быстрых MVP и стартапов.<br />
	- Если вы новичок в PHP.<br />
	- Когда важна скорость разработки и наличие готовых решений.<br />
	- Для проектов с частыми изменениями.<br /><br /><strong>Когда выбрать Symfony?</strong><br /><br />
	- Для крупных и сложных корпоративных приложений.<br />
	- Если требуется высокая гибкость и масштабируемость.<br />
	- Для проектов, которые должны соответствовать строгим стандартам качества.<br /><br /><br /><br /><strong>Заключение</strong><br /><br />
	Laravel и Symfony — это два отличных PHP-фреймворка, каждый из которых имеет свои сильные стороны. Если вы начинающий разработчик или работаете над небольшим проектом, Laravel может быть лучшим выбором. Если же вам нужно создать масштабируемое и высоконадежное приложение, Symfony станет отличным решением.<br /><br />
	В конечном итоге выбор зависит от ваших целей, уровня знаний и требований к проекту. Надеемся, эта статья поможет вам принять правильное решение!
</p>
]]></description><guid isPermaLink="false">8321</guid><pubDate>Sun, 19 Jan 2025 22:26:07 +0000</pubDate></item><item><title>50 &#x43B;&#x443;&#x447;&#x448;&#x438;&#x445; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x438; &#x440;&#x435;&#x441;&#x443;&#x440;&#x441;&#x43E;&#x432; Laravel (2025)</title><link>https://pawno-rus.com/topic/8317-50-luchshih-instrumentov-i-resursov-laravel-2025/</link><description><![CDATA[
<p style="text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2025_01/laravel-website-development.png.c6f4905373e6c00ae0df7d80b54a291d.png" data-fileid="23943" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="23943" src="//storage.yandexcloud.net/pawnorus/monthly_2025_01/laravel-website-development.thumb.png.8f7bde2186a1c94e44ede0fe8f7a584d.png" alt="laravel-website-development.thumb.png.8f7bde2186a1c94e44ede0fe8f7a584d.png" /></a>
</p>

<p style="text-align:center;">
	<br /><span style="font-size:18px;"><strong>50 лучших инструментов и ресурсов Laravel (2025)</strong></span>
</p>

<p>
	<br />
	Laravel продолжает оставаться одним из самых популярных фреймворков для разработки веб-приложений, предоставляя разработчикам мощные инструменты для создания масштабируемых и элегантных решений. В этой статье мы собрали 50 лучших инструментов и ресурсов Laravel на 2025 год, которые помогут вам ускорить разработку, улучшить качество кода и повысить продуктивность.<br /><br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">Категории инструментов и ресурсов:</span></strong>
</p>

<ol><li>
		IDE и текстовые редакторы
	</li>
	<li>
		Пакеты для Laravel
	</li>
	<li>
		Инструменты для тестирования
	</li>
	<li>
		Развертывание и DevOps
	</li>
	<li>
		Ресурсы для обучения
	</li>
	<li>
		Плагины и утилиты для разработки
	</li>
	<li>
		API-интеграции
	</li>
	<li>
		Инструменты для мониторинга и аналитики
	</li>
	<li>
		Расширения для улучшения производительности
	</li>
	<li>
		Локализация и интернационализация
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">1. IDE и текстовые редакторы</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>PhpStorm</strong><br />
		Платный IDE, который интегрируется с Laravel, поддерживает автодополнение, рефакторинг и встроенные инструменты для работы с базами данных.
	</li>
	<li>
		<strong>Visual Studio</strong><br />
		Code Бесплатный редактор с многочисленными расширениями для Laravel, такими как Laravel Blade Snippets и Laravel Artisan.
	</li>
	<li>
		<strong>Sublime Text</strong><br />
		Легковесный текстовый редактор с расширениями для Blade и PHP.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">2. Пакеты для Laravel</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>Laravel Breeze</strong><br />
		Минималистичная стартовая аутентификация с Blade и Tailwind CSS.
	</li>
	<li>
		<strong>Spatie Laravel Permission</strong><br />
		Простое управление ролями и правами доступа.
	</li>
	<li>
		<strong>Laravel Debugbar</strong><br />
		Инструмент для профилирования и отладки.
	</li>
	<li>
		<strong>Laravel Cashier</strong><br />
		Упрощает интеграцию с системами платежей, такими как Stripe.
	</li>
	<li>
		<strong>Livewire</strong><br />
		Создание динамичных пользовательских интерфейсов с использованием PHP без написания JavaScript.
	</li>
	<li>
		<strong>Inertia.js</strong><br />
		Полноценный SPA на основе Blade и Vue.js или React.
	</li>
	<li>
		<strong>Filament</strong><br />
		Административная панель нового поколения для Laravel.
	</li>
	<li>
		<strong>Spatie Media Library</strong><br />
		Легкое управление загрузкой и хранением файлов.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">3. Инструменты для тестирования</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>PestPHP</strong><br />
		Лаконичный тестовый фреймворк для Laravel.
	</li>
	<li>
		<strong>PHPUnit</strong><br />
		Классический инструмент для модульного тестирования в PHP.
	</li>
	<li>
		<strong>Mockery</strong><br />
		Библиотека для создания заглушек в тестах.
	</li>
	<li>
		<strong>Laravel Dusk</strong><br />
		Браузерное тестирование с использованием Selenium WebDriver.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">4. Развертывание и DevOps</span></strong>
</p>

<p style="text-align:center;">
	 
</p>

<ol><li>
		<strong>Laravel Forge</strong><br />
		Инструмент для автоматизированного развертывания приложений.
	</li>
	<li>
		<strong>Envoyer</strong><br />
		Zero-downtime deployment для проектов Laravel.
	</li>
	<li>
		<strong>Docker</strong><br />
		Контейнеризация приложений для упрощения разработки и развертывания.
	</li>
	<li>
		<strong>Kubernetes</strong><br />
		Оркестрация контейнеров для больших и сложных приложений.
	</li>
	<li>
		<strong>GitHub Actions</strong><br />
		Автоматизация CI/CD-процессов для Laravel.
	</li>
	<li>
		<strong>Deployer</strong><br />
		Бесплатный инструмент для автоматизированного развертывания PHP-приложений.
	</li>
	<li>
		<strong>Horizon</strong><br />
		Мониторинг очередей в Laravel.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">5. Ресурсы для обучения</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>Laravel Documentation</strong><br />
		Официальная документация Laravel.
	</li>
	<li>
		<strong>Laracasts</strong><br />
		Обучающие видеоуроки по Laravel.
	</li>
	<li>
		<strong>YouTube-каналы:</strong><br />
		- Laravel Daily<br />
		- Traversy Media<br />
		- Codecourse
	</li>
	<li>
		<strong>Книги:</strong><br />
		- "Laravel Up &amp; Running" от Matt Stauffer<br />
		- "Mastering Laravel" от Christopher John Pecoraro
	</li>
	<li>
		<strong>Форумы:</strong><br />
		- Laracasts Forum<br />
		- Laravel.io
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">6. Плагины и утилиты для разработки</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>Laravel IDE Helper</strong><br />
		Автогенерация файлов для улучшенного автодополнения в IDE.
	</li>
	<li>
		<strong>Tinkerwell</strong><br />
		Интерактивный консольный инструмент для выполнения кода Laravel.
	</li>
	<li>
		<strong>Laravel Telescope</strong><br />
		Инструмент для мониторинга запросов, исключений и задач.
	</li>
	<li>
		<strong>Clockwork</strong><br />
		Расширение для профилирования и отладки приложений.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">7. API-интеграции</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>Laravel Passport</strong><br />
		Полная реализация OAuth2-сервера для API.
	</li>
	<li>
		<strong>Laravel Sanctum</strong><br />
		Легковесное решение для аутентификации API и SPA.
	</li>
	<li>
		<strong>Swagger UI</strong><br />
		Генерация документации для REST API.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">8. Инструменты для мониторинга и аналитики</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>Sentry</strong><br />
		Мониторинг ошибок и логирование.
	</li>
	<li>
		<strong>New Relic</strong><br />
		Аналитика производительности приложений.
	</li>
	<li>
		<strong>Bugsnag</strong><br />
		Отслеживание и обработка ошибок.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">9. Расширения для улучшения производительности</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>OPcache</strong><br />
		Улучшает производительность путем кэширования байт-кода PHP.
	</li>
	<li>
		<strong>Redis</strong><br />
		Используется для кеширования данных и управления очередями.
	</li>
	<li>
		<strong>Memcached</strong><br />
		Высокопроизводительное кеширование данных.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<span style="font-size:16px;"><strong>10. Локализация и интернационализация</strong></span>
</p>

<p>
	 
</p>

<ol><li>
		<strong>Laravel Lang</strong><br />
		Пакет с переводами для множества языков.
	</li>
	<li>
		<strong>Poedit</strong><br />
		Приложение для управления переводами.
	</li>
	<li>
		<strong>Transifex</strong><br />
		Платформа для совместной работы над переводами.
	</li>
</ol><p>
	<br /><br />
	 
</p>

<p style="text-align:center;">
	<strong><span style="font-size:16px;">Остальные инструменты и ресурсы</span></strong>
</p>

<p>
	 
</p>

<ol><li>
		<strong>FakerPHP</strong><br />
		Генерация фейковых данных для тестов.
	</li>
	<li>
		<strong>Laravel Mix</strong><br />
		Упрощенная сборка ресурсов.
	</li>
	<li>
		<strong>Tailwind CSS</strong><br />
		Утилитарный CSS-фреймворк для создания интерфейсов.
	</li>
	<li>
		<strong>Bootstrap</strong><br />
		Популярный CSS-фреймворк.
	</li>
	<li>
		<strong>Webpack</strong><br />
		Модульный бандлер для фронтенда.
	</li>
	<li>
		<strong>Vite</strong><br />
		Быстрая сборка фронтенда с интеграцией в Laravel.
	</li>
	<li>
		<strong>SaaS Boilerplates</strong><br />
		Готовые шаблоны для старта разработки SaaS-приложений.
	</li>
</ol>]]></description><guid isPermaLink="false">8317</guid><pubDate>Sat, 18 Jan 2025 17:01:55 +0000</pubDate></item><item><title>&#x41F;&#x430;&#x43D;&#x435;&#x43B;&#x44C; NOCODES</title><link>https://pawno-rus.com/topic/8302-panel-nocodes/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="font-size:16px;"><span style="color:#000000;"><strong>Всем доброго дня. Покупал для себя, не пригодилось, возможно где то подобное что то слито.<br style="color:#272a34;" />
	Панель сайта</strong> </span><strong><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9say5uby1jb2Rlcy5ydS8=" rel="external nofollow"><span style="color:#000000;">lk.no-codes.ru</span></a></strong></span>
</p>

<p style="text-align:center;">
	<img alt="CUNjMtQ.png" class="ipsImage" height="510" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/CUNjMtQ.png&amp;key=bd83b6a4669abb5a628d438877bfa4491fbab3e0ec6af27002cefc5684621da9" width="1000" /></p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<img alt="wI9Lr6T.png" class="ipsImage" height="511" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/wI9Lr6T.png&amp;key=4b849acaac82de310143dd12b5e23bccea2c1940bce76f1bbb5b749f0ab800bf" width="1000" /></p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<img alt="c1pIk7E.png" class="ipsImage" height="509" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/c1pIk7E.png&amp;key=bcdd12a37618e2687fb0879546c211c2d1e9e68f8389043759f8eded6a5ceb3e" width="1000" /></p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<img alt="MFN4dJs.png" class="ipsImage" height="507" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/MFN4dJs.png&amp;key=a25a6dc4d1ad87b295b585c84f2a1fb2388f0ab8599bcad87758469a68c1345a" width="1000" /></p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<img alt="ZI87V55.png" class="ipsImage" height="510" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/ZI87V55.png&amp;key=15c3ba0ffe69bcad02d9191a77192792138f4fd95a56033ced3f8c814bf8a42d" width="1000" /></p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<img alt="8MuE32p.png" class="ipsImage" height="510" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/8MuE32p.png&amp;key=bed33a6d5eb9ab4da51d4744864c00ce51f8035423225f9efb901e41f01c909c" width="1000" /></p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<span style="font-size:16px;"><strong>Дизайн немного различается, функционал совпадает.</strong></span>
</p>

<p style="text-align:center;">
	<br /><span style="font-size:18px;"><strong>Что же тут вообще есть:</strong></span><br />
	 
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<span style="color:#000000;"><strong>-Система тикетов<br style="color:#e1e3e6;" />
	-Авто сборка лаунчеров Arizona Games<br style="color:#e1e3e6;" />
	-Удобная система пополнения Баланса<br style="color:#e1e3e6;" />
	-Система уведомлений<br style="color:#e1e3e6;" />
	-Защита от xss аттак<br style="color:#e1e3e6;" />
	-Система отзывов</strong></span>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<strong>-Состояние баланса</strong>
</p>

<p style="text-align:center;">
	<strong>-Полноценная админ-панель</strong>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<strong>-Добавление товара</strong>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<strong>-Покупка товара</strong>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<strong>-Информация товара когда купили:</strong>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<strong>-Описание</strong>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<strong>-Кнопка скачать<br /><br /><span style="color:#d35400;">Данная панель работает на VPS если хотите что бы была автосборка лаунчера, если же просто для себя взять для обычного магазина с товарами, то можно и обычный WEB хостинг использовать.</span><br /><br />
	Подключение БД: engine\config.php<br /><br />
	$host  - <span style="color:#2ecc71;">хост БД</span><br />
	$dbname - <span style="color:#2ecc71;">имя БД</span></strong>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<strong>$username - <span style="color:#2ecc71;">имя пользователя БД</span><br />
	$password -<span style="color:#2ecc71;"> пароль БД</span></strong>
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<br /><strong><span style="font-size:16px;">Скачать: </span></strong><a class="ipsAttachLink" data-fileid="23938" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=23938" rel="">NOCODES-PANEL.zip</a><br /><strong><span style="font-size:16px;">VT: <a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly93d3cudmlydXN0b3RhbC5jb20vZ3VpL2ZpbGUvZjM1OWNkOTRkNmY5NjFjYzk3ODFhMmVjNjk5YTQwYjQ1Y2YxMDMzNWRiOTZlMDk0NWJmNGY4NmU4YTJjOTkwOQ==" rel="external nofollow">тык</a></span></strong><br /><br /><span style="color:#000000;"><strong>Так же возможно скоро солью старые логи аризоны геймс, полностью пофикшенные от багов и бэкдоров, максимально доведённые до ума 1к1, ну и старый UCP сайт родины, полностью так же 1к1<br />
	Глянуть можно тутс: <a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9yb2RpbmEwM2UuY29yZXMuc2JzLw==" rel="external nofollow">https://rodina03e.cores.sbs/</a> (напишу на всякий, не реклама</strong></span><img alt=":)" data-emoticon="" src="//storage.yandexcloud.net/pawnorus/emoticons/ab.gif" title=":)" /><span style="color:#000000;"><strong>)</strong></span>
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">8302</guid><pubDate>Sun, 12 Jan 2025 03:00:15 +0000</pubDate></item><item><title>&#x418;&#x433;&#x440;&#x43E;&#x432;&#x43E;&#x439; &#x441;&#x430;&#x439;&#x442; SLIDERS</title><link>https://pawno-rus.com/topic/7695-igrovoy-sayt-sliders/</link><description><![CDATA[
<p style="text-align:center;">
	Всем доброго дня. Делал сайт для проекта SAMP. Готов поделится с ним.<br>
	Сайт абсолютно чист и не использовался ещё нигде.<br><br><a class="ipsAttachLink ipsAttachLink_image" data-fileid="19450" href="//storage.yandexcloud.net/pawnorus/monthly_2024_01/slider1.png.d5e183ac1b435c89a613456975a68528.png" rel=""><img alt="slider1.thumb.png.28ec654384d86a2453630db00c5e0c76.png" class="ipsImage ipsImage_thumbnailed" data-fileid="19450" onerror="this.src='https://pawno-rus.ru/uploads/onerror.png'" src="//storage.yandexcloud.net/pawnorus/monthly_2024_01/slider1.thumb.png.28ec654384d86a2453630db00c5e0c76.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a>
</p>

<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="19451" href="//storage.yandexcloud.net/pawnorus/monthly_2024_01/slider2.png.ec23e657f3070c97b0662f4880215541.png" rel=""><img alt="slider2.thumb.png.920bf81cc25efa2562c18a42748eeb01.png" class="ipsImage ipsImage_thumbnailed" data-fileid="19451" onerror="this.src='https://pawno-rus.ru/uploads/onerror.png'" src="//storage.yandexcloud.net/pawnorus/monthly_2024_01/slider2.thumb.png.920bf81cc25efa2562c18a42748eeb01.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a>
</p>

<p style="text-align:center;">
	 
</p>

<p>
	<strong>Основной язык сайта: </strong>HTML, CSS, JS
</p>

<p>
	<strong>Донат: Т</strong>ребует подключения вручную
</p>

<p>
	<strong>Адаптация: </strong>Имеется, под все устройства
</p>

<p>
	<strong>Комментарии к коду: </strong>Отсутствуют
</p>

<p>
	<strong>Табуляция кода: </strong>Имеется
</p>

<p>
	 
</p>

<p style="text-align:center;">
	<strong>СКАЧАТЬ &gt;&gt;&gt; </strong><a class="ipsAttachLink" data-fileid="19452" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=19452" rel="">Sliders RolePlay.zip</a>
</p>

<p style="text-align:center;">
	<b>По данным <a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly93d3cudmlydXN0b3RhbC5jb20vZ3VpL2ZpbGUvNTgwN2UyZjY4ODQzYWNhYjhiZTRiMTQyZTAzOGEyOGExMjIxY2RiNjZkZDkxZmZkNTVjNWY2ZTg3OGU2YjY4OT9ub2NhY2hlPTE=" rel="external nofollow">VirusTotal </a>файл безопасен</b>
</p>

<p style="text-align:center;">
	 
</p>

<p>
	<em>По поводу сайтов и игровых модов на заказ, обращайтесь в телеграм <strong><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly90Lm1lL3dlYnNpdGVyYXpyYWI=" rel="external nofollow">ТГ</a> </strong>или <strong><a href="https://vk.com/shastunof" rel="external nofollow">ВКонтакте</a></strong></em>
</p>
]]></description><guid isPermaLink="false">7695</guid><pubDate>Wed, 10 Jan 2024 17:24:36 +0000</pubDate></item><item><title>&#x41A;&#x430;&#x43A; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x430;&#x432;&#x442;&#x43E;&#x440;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E; &#x432; &#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43A;&#x430;&#x431;&#x438;&#x43D;&#x435;&#x442; &#x43D;&#x430; &#x441;&#x430;&#x439;&#x442;&#x435;</title><link>https://pawno-rus.com/topic/8254-kak-sdelat-avtorizaciyu-v-lichnyy-kabinet-na-sayte/</link><description><![CDATA[
<p style="text-align:center;">
	<img alt="logo.png" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://www.blast.hk/attachments/258277/&amp;key=c56d1eb2a37f3ecf7e90784ce5f6055e10f43a578d501d96475452a6fa02b8a8" /></p>

<p>
	 
</p>

<p>
	<strong>Laravel —</strong><span> </span>это современный PHP-фреймворк, который позволяет быстро и эффективно создавать веб-приложения. Его мощные инструменты и простая структура делают его идеальным выбором для разработки личного кабинета для вашего SAMP сервера. В этой статье мы создадим авторизацию для личного кабинета, которая будет работать с существующей базой данных SAMP сервера.
</p>

<p>
	 
</p>

<p>
	Мы настроим три страницы:
</p>

<p>
	<strong>1. Главная:</strong><span> </span>/ — основная страница сайта.
</p>

<p>
	<strong>2. Авторизация:</strong><span> </span>/auth — форма для ввода никнейма и пароля.
</p>

<p>
	<strong>3. Личный кабинет:</strong><span> </span>/profile — страница с информацией об игроке после авторизации.
</p>

<p>
	 
</p>

<p>
	Для начала давайте установим Laravel и подготовим базовое окружение.
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<h3 style="text-align:center;">
	Установка Laravel
</h3>

<p>
	<strong>1. Убедитесь, что ваш компьютер соответствует системным требованиям Laravel: </strong>
</p>

<ul><li>
		PHP версии 8.2 или выше
	</li>
	<li>
		Composer (менеджер зависимостей PHP)
	</li>
</ul><p>
	 
</p>

<p>
	<strong>2. Скачайте Laravel с помощью Composer </strong>
</p>

<p>
	Откройте терминал и выполните следующую команду, чтобы создать новый проект Laravel:<span> </span><strong>composer create-project laravel/laravel samp </strong>
</p>

<p>
	<em>Здесь samp — это название папки для проекта. Вы можете указать свое. </em>
</p>

<p>
	 
</p>

<p>
	<strong>3. Перейдите в папку проекта:</strong><span> </span>cd samp
</p>

<p>
	 
</p>

<p>
	<strong>4. Настройте подключение к базе данных. </strong>
</p>

<p>
	Laravel использует файл <strong>.env</strong> для хранения конфигурации. Найдите строки, отвечающие за подключение к базе данных, и укажите данные вашей SAMP базы:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=название_базы
DB_USERNAME=имя_пользователя
DB_PASSWORD=пароль">
<span><span>DB_CONNECTION=mysql</span></span>
<span><span>DB_HOST=</span><span>127.0.0.1</span></span>
<span><span>DB_PORT=</span><span>3306</span></span>
<span><span>DB_DATABASE=название_базы</span></span>
<span><span>DB_USERNAME=имя_пользователя</span></span>
<span><span>DB_PASSWORD=пароль</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>5. Запустите встроенный сервер разработки Laravel:</strong><span> </span>php artisan serve
</p>

<p>
	После запуска вы увидите сообщение, что сервер работает, например, на<span> </span><strong>127.0.0.1:8000.</strong><span> </span>Перейдите по этой ссылке в браузере.
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<h3 style="text-align:center;">
	Настройка роутов
</h3>

<p>
	Откройте файл<span> </span><strong>routes/web.php</strong>, который отвечает за определение роутов вашего сайта. Добавим туда наши роуты:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="php" plaincode="&lt;?php

use Illuminate\Support\Facades\Route;

// Главная страница
Route::get('/', function () {
    return view('welcome'); // Страница для главной
});

// Страница авторизации
Route::get('/auth', function () {
    return view('auth'); // Отдельный шаблон для авторизации
});

// Личный кабинет
Route::get('/profile', function () {
    return view('profile'); // Страница для личного кабинета
});">
<span><span>&lt;?php</span></span>

<span><span>use</span><span> Illuminate\Support\Facades\Route;</span></span>

<span><span>// Главная страница</span></span>
<span><span>Route::get(</span><span>'/'</span><span>, </span><span>function</span><span> () {</span></span>
<span><span>    </span><span>return</span><span> view(</span><span>'welcome'</span><span>); </span><span>// Страница для главной</span></span>
<span><span>});</span></span>

<span><span>// Страница авторизации</span></span>
<span><span>Route::get(</span><span>'/auth'</span><span>, </span><span>function</span><span> () {</span></span>
<span><span>    </span><span>return</span><span> view(</span><span>'auth'</span><span>); </span><span>// Отдельный шаблон для авторизации</span></span>
<span><span>});</span></span>

<span><span>// Личный кабинет</span></span>
<span><span>Route::get(</span><span>'/profile'</span><span>, </span><span>function</span><span> () {</span></span>
<span><span>    </span><span>return</span><span> view(</span><span>'profile'</span><span>); </span><span>// Страница для личного кабинета</span></span>
<span><span>});</span></span>
</pre>

<p>
	 
</p>

<p>
	Для каждого роута нам понадобятся базовые HTML-шаблоны. Создадим их в папке<span> </span><strong>resources/views:</strong>
</p>

<p>
	<strong>1. Главная страница.</strong><span> </span>Создайте файл<span> </span><strong>resources/views/welcome.blade.php:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="html" plaincode="&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ru&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Главная&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Добро пожаловать на ваш сайт!&lt;/h1&gt;
    &lt;a href=&quot;/auth&quot;&gt;Войти&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;">
<span><span>&lt;!DOCTYPE</span><span> html</span><span>&gt;</span></span>
<span><span>&lt;</span><span>html</span><span> </span><span>lang</span><span>=</span><span>"ru"</span><span>&gt;</span></span>
<span><span>&lt;</span><span>head</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>charset</span><span>=</span><span>"UTF-8"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>name</span><span>=</span><span>"viewport"</span><span> </span><span>content</span><span>=</span><span>"width=device-width, initial-scale=1.0"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>title</span><span>&gt;</span><span>Главная</span><span>&lt;/</span><span>title</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>head</span><span>&gt;</span></span>
<span><span>&lt;</span><span>body</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>h1</span><span>&gt;</span><span>Добро пожаловать на ваш сайт!</span><span>&lt;/</span><span>h1</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"/auth"</span><span>&gt;</span><span>Войти</span><span>&lt;/</span><span>a</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>body</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>html</span><span>&gt;</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>2. Страница авторизации.</strong><span> </span>Создайте файл<span> </span><strong>resources/views/auth.blade.php:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="html" plaincode="&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ru&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Авторизация&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Вход в личный кабинет&lt;/h1&gt;
    &lt;form action=&quot;/auth&quot; method=&quot;POST&quot;&gt;
        @csrf
        &lt;label for=&quot;nickname&quot;&gt;Ник:&lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;nickname&quot;  data-cke-saved-name=&quot;nickname&quot; name=&quot;nickname&quot; required&gt;
        &lt;br&gt;
        &lt;label for=&quot;password&quot;&gt;Пароль:&lt;/label&gt;
        &lt;input type=&quot;password&quot; id=&quot;password&quot;  data-cke-saved-name=&quot;password&quot; name=&quot;password&quot; required&gt;
        &lt;br&gt;
        &lt;button type=&quot;submit&quot;&gt;Войти&lt;/button&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;">
<span><span>&lt;!DOCTYPE</span><span> html</span><span>&gt;</span></span>
<span><span>&lt;</span><span>html</span><span> </span><span>lang</span><span>=</span><span>"ru"</span><span>&gt;</span></span>
<span><span>&lt;</span><span>head</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>charset</span><span>=</span><span>"UTF-8"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>name</span><span>=</span><span>"viewport"</span><span> </span><span>content</span><span>=</span><span>"width=device-width, initial-scale=1.0"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>title</span><span>&gt;</span><span>Авторизация</span><span>&lt;/</span><span>title</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>head</span><span>&gt;</span></span>
<span><span>&lt;</span><span>body</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>h1</span><span>&gt;</span><span>Вход в личный кабинет</span><span>&lt;/</span><span>h1</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>form</span><span> </span><span>action</span><span>=</span><span>"/auth"</span><span> </span><span>method</span><span>=</span><span>"POST"</span><span>&gt;</span></span>
<span><span>        @csrf</span></span>
<span><span>        </span><span>&lt;</span><span>label</span><span> </span><span>for</span><span>=</span><span>"nickname"</span><span>&gt;</span><span>Ник:</span><span>&lt;/</span><span>label</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>input</span><span> </span><span>type</span><span>=</span><span>"text"</span><span> </span><span>id</span><span>=</span><span>"nickname"</span><span>  </span><span>data-cke-saved-name</span><span>=</span><span>"nickname"</span><span> </span><span>name</span><span>=</span><span>"nickname"</span><span> </span><span>required</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>br</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>label</span><span> </span><span>for</span><span>=</span><span>"password"</span><span>&gt;</span><span>Пароль:</span><span>&lt;/</span><span>label</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>input</span><span> </span><span>type</span><span>=</span><span>"password"</span><span> </span><span>id</span><span>=</span><span>"password"</span><span>  </span><span>data-cke-saved-name</span><span>=</span><span>"password"</span><span> </span><span>name</span><span>=</span><span>"password"</span><span> </span><span>required</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>br</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>button</span><span> </span><span>type</span><span>=</span><span>"submit"</span><span>&gt;</span><span>Войти</span><span>&lt;/</span><span>button</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;/</span><span>form</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>body</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>html</span><span>&gt;</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>3. Личный кабинет.</strong><span> </span>Создайте файл<span> </span><strong>resources/views/profile.blade.php:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="html" plaincode="&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ru&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Личный кабинет&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Добро пожаловать в личный кабинет!&lt;/h1&gt;
    &lt;p&gt;Здесь будет отображаться информация о вашем аккаунте.&lt;/p&gt;
    &lt;a href=&quot;/&quot;&gt;Вернуться на главную&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;">
<span><span>&lt;!DOCTYPE</span><span> html</span><span>&gt;</span></span>
<span><span>&lt;</span><span>html</span><span> </span><span>lang</span><span>=</span><span>"ru"</span><span>&gt;</span></span>
<span><span>&lt;</span><span>head</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>charset</span><span>=</span><span>"UTF-8"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>name</span><span>=</span><span>"viewport"</span><span> </span><span>content</span><span>=</span><span>"width=device-width, initial-scale=1.0"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>title</span><span>&gt;</span><span>Личный кабинет</span><span>&lt;/</span><span>title</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>head</span><span>&gt;</span></span>
<span><span>&lt;</span><span>body</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>h1</span><span>&gt;</span><span>Добро пожаловать в личный кабинет!</span><span>&lt;/</span><span>h1</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>p</span><span>&gt;</span><span>Здесь будет отображаться информация о вашем </span><span>аккаунте.</span><span>&lt;/</span><span>p</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"/"</span><span>&gt;</span><span>Вернуться на главную</span><span>&lt;/</span><span>a</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>body</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>html</span><span>&gt;</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>Тестирование роутов.</strong><span> </span>Теперь вы можете проверить роуты в браузере:
</p>

<ul><li>
		Перейдите на<span> </span><strong>127.0.0.1:8000</strong><span> </span>— главная страница.
	</li>
	<li>
		Нажмите "Войти" и перейдите на<span> </span><strong>127.0.0.1:8000/auth</strong><span> </span>— страница авторизации.
	</li>
	<li>
		Для<span> </span><strong>/profile</strong><span> </span>пока просто введите<span> </span><strong>127.0.0.1:8000/profile</strong><span> </span>в адресной строке. Позже мы защитим эту страницу.
	</li>
</ul><p>
	 
</p>

<p>
	 
</p>

<h3 style="text-align:center;">
	Миграции
</h3>

<p>
	Миграции в<span> </span><strong>Laravel </strong>позволяют выполнять определённые действия с базой данных, такие как создание таблиц, добавление, изменение или удаление колонок. Все манипуляции с базой данных происходят через миграции, что делает процесс удобным и структурированным.
</p>

<p>
	 
</p>

<p>
	Вот несколько основных команд для работы с миграциями:
</p>

<p>
	<strong>Создание таблицы:</strong><span> </span>php artisan make:migration create_news_table
</p>

<p>
	<strong>Проверка статуса миграций:</strong><span> </span>php artisan migrate:status
</p>

<p>
	<strong>Откат последней миграции:</strong><span> </span>php artisan migrate:rollback
</p>

<p>
	 
</p>

<p>
	Откройте файл<span> </span><strong>database/migrations/create_users_table.php</strong>. Если такого файла нет, создайте его с помощью команды в терминале:<span> </span><strong>php artisan make:migration create_users_table</strong>
</p>

<p>
	 
</p>

<p>
	Откройте файл и добавьте следующую структуру таблицы в метод<span> </span><strong>up</strong>:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="Schema::create('users', function (Blueprint $table) {
    $table-&gt;id(); // Автоматический ID
    $table-&gt;string('nickname')-&gt;unique(); // Уникальный никнейм пользователя
    $table-&gt;string('email')-&gt;unique(); // Уникальный email
    $table-&gt;timestamp('email_verified_at')-&gt;nullable(); // Подтверждения email
    $table-&gt;unsignedBigInteger('player_money')-&gt;default(0); // Деньги пользователя
    $table-&gt;unsignedBigInteger('player_donate')-&gt;default(0); // Донат пользователя
    $table-&gt;unsignedInteger('player_skin')-&gt;default(0); // ID скина
    $table-&gt;string('password'); // Пароль
    $table-&gt;rememberToken(); // Токен для &quot;запомнить меня&quot;
    $table-&gt;timestamps(); // created_at и updated_at
});">
<span><span>Schema::create(</span><span>'</span><span>users</span><span>'</span><span>, function (Blueprint $table) {</span></span>
<span><span>    $table-&gt;id(); </span><span>// Автоматический ID</span></span>
<span><span>    $table-&gt;string(</span><span>'</span><span>nickname</span><span>'</span><span>)-&gt;unique(); </span><span>// Уникальный никнейм пользователя</span></span>
<span><span>    $table-&gt;string(</span><span>'</span><span>email</span><span>'</span><span>)-&gt;unique(); </span><span>// Уникальный email</span></span>
<span><span>    $table-&gt;timestamp(</span><span>'</span><span>email_verified_at</span><span>'</span><span>)-&gt;nullable(); </span><span>// Подтверждения email</span></span>
<span><span>    $table-&gt;unsignedBigInteger(</span><span>'</span><span>player_money</span><span>'</span><span>)-&gt;</span><span>default</span><span>(</span><span>0</span><span>); </span><span>// Деньги пользователя</span></span>
<span><span>    $table-&gt;unsignedBigInteger(</span><span>'</span><span>player_donate</span><span>'</span><span>)-&gt;</span><span>default</span><span>(</span><span>0</span><span>); </span><span>// Донат пользователя</span></span>
<span><span>    $table-&gt;unsignedInteger(</span><span>'</span><span>player_skin</span><span>'</span><span>)-&gt;</span><span>default</span><span>(</span><span>0</span><span>); </span><span>// ID скина</span></span>
<span><span>    $table-&gt;string(</span><span>'</span><span>password</span><span>'</span><span>); </span><span>// Пароль</span></span>
<span><span>    $table-&gt;rememberToken(); </span><span>// Токен для "запомнить меня"</span></span>
<span><span>    $table-&gt;timestamps(); </span><span>// created_at и updated_at</span></span>
<span><span>});</span></span>
</pre>

<p>
	 
</p>

<p>
	После того как вы добавили необходимые поля в файл миграции, выполните следующую команду:<span> </span><strong>php artisan migrate.</strong>
</p>

<p>
	 
</p>

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

<p>
	 
</p>

<p>
	 
</p>

<h3 style="text-align:center;">
	Настройка модели
</h3>

<p>
	Если у вас таблица называется<span> </span><strong>accounts</strong>, то в Laravel рекомендуется создать модель с именем<span> </span><strong>Account</strong>, чтобы придерживаться стандартов. Laravel автоматически связывает название модели во множественном числе с таблицей, если это возможно. Например:
</p>

<ul><li>
		Модель<span> </span><strong>Account </strong>по умолчанию будет связана с таблицей<span> </span><strong>accounts. </strong>
	</li>
	<li>
		Модель<span> </span><strong>Player</strong><span> </span>будет связана с таблицей<span> </span><strong>players.</strong>
	</li>
</ul><p>
	Если ваше название модели совпадает с названием таблицы (во множественном числе), дополнительных настроек не требуется. Однако, если название отличается, нужно будет явно указать таблицу в модели:<span> </span><strong>protected $table = 'my_users'; </strong>
</p>

<p>
	 
</p>

<p>
	Если ваша таблица называется<span> </span><strong>accounts </strong>— создайте модель Account:<span> </span><strong>php artisan make:model Account </strong>
</p>

<p>
	Если ваша таблица называется<span> </span><strong>users </strong>— откройте файл<span> </span><strong>app/Models/User.php</strong><span> </span>и добавьте все поля в<span> </span><strong>$fillable</strong>, которые будут использоваться на сайте:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="php" plaincode="&lt;?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    // Поля, которые будут использоваться на сайте.
    protected $fillable = [
        'nickname',
        'email',
        'player_money',
        'player_donate',
        'player_skin',
        'password',
    ];

    // Поля, которые скрываются при сериализации модели.
    protected $hidden = [
        'password',
    ];
}">
<span><span>&lt;?php</span></span>

<span><span>namespace</span><span> App\Models;</span></span>

<span><span>use</span><span> Illuminate\Database\Eloquent\Factories\HasFactory</span><span>;</span></span>
<span><span>use</span><span> Illuminate\Foundation\Auth\User </span><span>as</span><span> Authenticatable;</span></span>
<span><span>use</span><span> Illuminate\Notifications\Notifiable;</span></span>

<span><span>class</span><span> User </span><span>extends</span><span> Authenticatable</span></span>
<span><span>{</span></span>
<span><span>    </span><span>use</span><span> HasFactory, Notifiable;</span></span>

<span><span>    </span><span>// Поля, которые будут использоваться на сайте.</span></span>
<span><span>    </span><span>protected</span><span> </span><span>$fillable</span><span> = [</span></span>
<span><span>        </span><span>'nickname'</span><span>,</span></span>
<span><span>        </span><span>'email'</span><span>,</span></span>
<span><span>        </span><span>'player_money'</span><span>,</span></span>
<span><span>        </span><span>'player_donate'</span><span>,</span></span>
<span><span>        </span><span>'player_skin'</span><span>,</span></span>
<span><span>        </span><span>'password'</span><span>,</span></span>
<span><span>    ];</span></span>

<span><span>    </span><span>// Поля, которые скрываются при сериализации </span><span>модели.</span></span>
<span><span>    </span><span>protected</span><span> </span><span>$hidden</span><span> = [</span></span>
<span><span>        </span><span>'password'</span><span>,</span></span>
<span><span>    ];</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<h3 style="text-align:center;">
	Реализация логики авторизации
</h3>

<p>
	<strong>1. Создание контроллера.</strong><span> </span>Создадим контроллер для обработки роутов авторизации и личного кабинета. Назовём его AuthController:<span> </span><strong>php artisan make:controller AuthController </strong>
</p>

<p>
	 
</p>

<p>
	<strong>2. Реализация методов в контроллере.</strong><span> </span>Откройте файл<span> </span><strong>app/Http/Controllers/AuthController.php</strong><span> </span>и реализуйте методы:
</p>

<p>
	 
</p>

<p>
	<strong>Отображение формы авторизации:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public function showLoginForm()
{
    return view('auth');
}">
<span><span>public</span><span> function showLoginForm()</span></span>
<span><span>{</span></span>
<span><span>    </span><span>return</span><span> view(</span><span>'</span><span>auth</span><span>'</span><span>);</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>Обработка авторизации:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public function login(Request $request)
{
    // Валидируем данные
    $request-&gt;validate([
        'nickname' =&gt; 'required|string',
        'password' =&gt; 'required|string',
    ]);

    // Получаем никнейм и пароль
    $nickname = $request-&gt;input('nickname');
    $password = $request-&gt;input('password');

    // Хэшируем пароль в MD5
    $hashedPassword = md5($password);

    // Проверяем пользователя в базе данных
    $user = User::where('nickname', $nickname)
                -&gt;where('password', $hashedPassword)
                -&gt;first();

    if ($user) {
        // Сохраняем пользователя в сессии
        $request-&gt;session()-&gt;put('user', $user);

        // Редирект в личный кабинет
        return redirect()-&gt;route('profile');
    }

    // Возвращаем обратно с ошибкой
    return back()-&gt;withErrors(['message' =&gt; 'Неверный никнейм или пароль']);
}">
<span><span>public</span><span> function login(Request $request)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>// Валидируем данные</span></span>
<span><span>    $request-&gt;validate([</span></span>
<span><span>        </span><span>'</span><span>nickname</span><span>'</span><span> =&gt; </span><span>'</span><span>required|string</span><span>'</span><span>,</span></span>
<span><span>        </span><span>'</span><span>password</span><span>'</span><span> =&gt; </span><span>'</span><span>required|string</span><span>'</span><span>,</span></span>
<span><span>    ]);</span></span>

<span><span>    </span><span>// Получаем никнейм и пароль</span></span>
<span><span>    $nickname = $request-&gt;input(</span><span>'</span><span>nickname</span><span>'</span><span>);</span></span>
<span><span>    $password = $request-&gt;input(</span><span>'</span><span>password</span><span>'</span><span>);</span></span>

<span><span>    </span><span>// Хэшируем пароль в MD5</span></span>
<span><span>    $hashedPassword = md5($password);</span></span>

<span><span>    </span><span>// Проверяем пользователя в базе данных</span></span>
<span><span>    $user = User::</span><span>where</span><span>(</span><span>'</span><span>nickname</span><span>'</span><span>, $nickname)</span></span>
<span><span>                -&gt;</span><span>where</span><span>(</span><span>'</span><span>password</span><span>'</span><span>, $hashedPassword)</span></span>
<span><span>                -&gt;first();</span></span>

<span><span>    </span><span>if</span><span> ($user) {</span></span>
<span><span>        </span><span>// Сохраняем пользователя в сессии</span></span>
<span><span>        $request-&gt;session()-&gt;put(</span><span>'</span><span>user</span><span>'</span><span>, $user);</span></span>

<span><span>        </span><span>// Редирект в личный кабинет</span></span>
<span><span>        </span><span>return</span><span> redirect()-&gt;route(</span><span>'</span><span>profile</span><span>'</span><span>);</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>// Возвращаем обратно с ошибкой</span></span>
<span><span>    </span><span>return</span><span> back()-&gt;withErrors([</span><span>'</span><span>message</span><span>'</span><span> =&gt; </span><span>'</span><span>Неверный никнейм или пароль</span><span>'</span><span>]);</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>Если в вашей базе данных пароли хранятся в формате bcrypt:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public function login(Request $request)
{
    // Валидируем данные
    $request-&gt;validate([
        'nickname' =&gt; 'required|string',
        'password' =&gt; 'required|string',
    ]);

    // Получаем никнейм и пароль
    $nickname = $request-&gt;input('nickname');
    $password = $request-&gt;input('password');

    // Проверяем пользователя в базе данных
    $user = User::where('nickname', $nickname)-&gt;first();

    if ($user &amp;&amp; Hash::check($password, $user-&gt;password)) {
        // Сохраняем пользователя в сессии
        $request-&gt;session()-&gt;put('user', $user);

        // Редирект в личный кабинет
        return redirect()-&gt;route('profile');
    }

    // Возвращаем обратно с ошибкой
    return back()-&gt;withErrors(['message' =&gt; 'Неверный никнейм или пароль']);
}">
<span><span>public</span><span> function login(Request $request)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>// Валидируем данные</span></span>
<span><span>    $request-&gt;validate([</span></span>
<span><span>        </span><span>'</span><span>nickname</span><span>'</span><span> =&gt; </span><span>'</span><span>required|string</span><span>'</span><span>,</span></span>
<span><span>        </span><span>'</span><span>password</span><span>'</span><span> =&gt; </span><span>'</span><span>required|string</span><span>'</span><span>,</span></span>
<span><span>    ]);</span></span>

<span><span>    </span><span>// Получаем никнейм и пароль</span></span>
<span><span>    $nickname = $request-&gt;input(</span><span>'</span><span>nickname</span><span>'</span><span>);</span></span>
<span><span>    $password = $request-&gt;input(</span><span>'</span><span>password</span><span>'</span><span>);</span></span>

<span><span>    </span><span>// Проверяем пользователя в базе данных</span></span>
<span><span>    $user = User::</span><span>where</span><span>(</span><span>'</span><span>nickname</span><span>'</span><span>, $nickname)-&gt;first();</span></span>

<span><span>    </span><span>if</span><span> ($user &amp;&amp; Hash::check($password, </span><span>$user-&gt;password)) {</span></span>
<span><span>        </span><span>// Сохраняем пользователя в сессии</span></span>
<span><span>        $request-&gt;session()-&gt;put(</span><span>'</span><span>user</span><span>'</span><span>, $user);</span></span>

<span><span>        </span><span>// Редирект в личный кабинет</span></span>
<span><span>        </span><span>return</span><span> redirect()-&gt;route(</span><span>'</span><span>profile</span><span>'</span><span>);</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>// Возвращаем обратно с ошибкой</span></span>
<span><span>    </span><span>return</span><span> back()-&gt;withErrors([</span><span>'</span><span>message</span><span>'</span><span> =&gt; </span><span>'</span><span>Неверный никнейм или пароль</span><span>'</span><span>]);</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>Личный кабинет:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public function profile(Request $request)
{
    // Проверяем, авторизован ли пользователь
    $user = $request-&gt;session()-&gt;get('user');

    if (!$user) {
        return redirect()-&gt;route('auth.form')-&gt;withErrors(['message' =&gt; 'Сначала войдите в систему']);
    }

    return view('profile', ['user' =&gt; $user]);
}">
<span><span>public</span><span> function profile(Request $request)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>// Проверяем, авторизован ли пользователь</span></span>
<span><span>    $user = $request-&gt;session()-&gt;get(</span><span>'</span><span>user</span><span>'</span><span>);</span></span>

<span><span>    </span><span>if</span><span> (!$user) {</span></span>
<span><span>        </span><span>return</span><span> redirect()-&gt;route(</span><span>'</span><span>auth.form</span><span>'</span><span>)-&gt;withErrors([</span><span>'</span><span>message</span><span>'</span><span> =&gt; </span><span>'</span><span>Сначала войдите в систему</span><span>'</span><span>]);</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>return</span><span> view(</span><span>'</span><span>profile</span><span>'</span><span>, [</span><span>'</span><span>user</span><span>'</span><span> =&gt; $user]);</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>Выход из аккаунта:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public function logout(Request $request)
{
    // Удаляем данные из сессии
    $request-&gt;session()-&gt;forget('user');
    return redirect('/');
}">
<span><span>public</span><span> function logout(Request $request)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>// Удаляем данные из сессии</span></span>
<span><span>    $request-&gt;session()-&gt;forget(</span><span>'</span><span>user</span><span>'</span><span>);</span></span>
<span><span>    </span><span>return</span><span> redirect(</span><span>'/'</span><span>);</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong><span style="color:#3b596c;">AuthController.php:</span></strong>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="php" plaincode="&lt;?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function showLoginForm()
    {
        return view('auth');
    }

    public function login(Request $request)
    {
        // Валидируем данные
        $request-&gt;validate([
            'nickname' =&gt; 'required|string',
            'password' =&gt; 'required|string',
        ]);

        // Получаем никнейм и пароль
        $nickname = $request-&gt;input('nickname');
        $password = $request-&gt;input('password');

        // Хэшируем пароль в MD5
        $hashedPassword = md5($password);

        // Проверяем пользователя в базе данных
        $user = User::where('nickname', $nickname)
            -&gt;where('password', $hashedPassword)
            -&gt;first();

        if ($user) {
            // Сохраняем пользователя в сессии
            $request-&gt;session()-&gt;put('user', $user);

            // Редирект в личный кабинет
            return redirect()-&gt;route('profile');
        }

        // Возвращаем обратно с ошибкой
        return back()-&gt;withErrors(['message' =&gt; 'Неверный никнейм или пароль']);
    }

    public function profile(Request $request)
    {
        // Проверяем, авторизован ли пользователь
        $user = $request-&gt;session()-&gt;get('user');

        if (!$user) {
            return redirect()-&gt;route('auth.form')-&gt;withErrors(['message' =&gt; 'Сначала войдите в систему']);
        }

        return view('profile', ['user' =&gt; $user]);
    }

    public function logout(Request $request)
    {
        // Удаляем данные из сессии
        $request-&gt;session()-&gt;forget('user');

        return redirect('/');
    }
}">

<span><span>&lt;?php</span></span>

<span><span>namespace</span><span> App\Http\Controllers;</span></span>

<span><span>use</span><span> App\Models\User;</span></span>
<span><span>use</span><span> Illuminate\Http\Request;</span></span>

<span><span>class</span><span> AuthController </span><span>extends</span><span> Controller</span></span>
<span><span>{</span></span>
<span><span>    </span><span>public</span><span> </span><span>function</span><span> showLoginForm()</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>return</span><span> view(</span><span>'auth'</span><span>);</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>public</span><span> </span><span>function</span><span> login(Request </span><span>$request</span><span>)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>// Валидируем данные</span></span>
<span><span>        </span><span>$request</span><span>-&gt;validate([</span></span>
<span><span>            </span><span>'nickname'</span><span> =&gt; </span><span>'required|string'</span><span>,</span></span>
<span><span>            </span><span>'password'</span><span> =&gt; </span><span>'required|string'</span><span>,</span></span>
<span><span>        ]);</span></span>

<span><span>        </span><span>// Получаем никнейм и пароль</span></span>
<span><span>        </span><span>$nickname</span><span> = </span><span>$request</span><span>-&gt;input(</span><span>'nickname'</span><span>);</span></span>
<span><span>        </span><span>$password</span><span> = </span><span>$request</span><span>-&gt;input(</span><span>'password'</span><span>);</span></span>

<span><span>        </span><span>// Хэшируем пароль в MD5</span></span>
<span><span>        </span><span>$hashedPassword</span><span> = md5(</span><span>$password</span><span>);</span></span>

<span><span>        </span><span>// Проверяем пользователя в базе данных</span></span>
<span><span>        </span><span>$user</span><span> = User::where(</span><span>'nickname'</span><span>, </span><span>$nickname</span><span>)</span></span>
<span><span>            -&gt;where(</span><span>'password'</span><span>, </span><span>$hashedPassword</span><span>)</span></span>
<span><span>            -&gt;first();</span></span>

<span><span>        </span><span>if</span><span> (</span><span>$user</span><span>) {</span></span>
<span><span>            </span><span>// Сохраняем пользователя в сессии</span></span>
<span><span>            </span><span>$request</span><span>-&gt;session()-&gt;put(</span><span>'user'</span><span>, </span><span>$user</span><span>);</span></span>

<span><span>            </span><span>// Редирект в личный кабинет</span></span>
<span><span>            </span><span>return</span><span> redirect()-&gt;route(</span><span>'profile'</span><span>);</span></span>
<span><span>        }</span></span>

<span><span>        </span><span>// Возвращаем обратно с ошибкой</span></span>
<span><span>        </span><span>return</span><span> back()-&gt;withErrors([</span><span>'message'</span><span> =&gt; </span><span>'Неверный никнейм или пароль'</span><span>]);</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>public</span><span> </span><span>function</span><span> profile(Request </span><span>$request</span><span>)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>// Проверяем, авторизован ли пользователь</span></span>
<span><span>        </span><span>$user</span><span> = </span><span>$request</span><span>-&gt;session()-&gt;get(</span><span>'user'</span><span>);</span></span>

<span><span>        </span><span>if</span><span> (!</span><span>$user</span><span>) {</span></span>
<span><span>            </span><span>return</span><span> redirect()-&gt;route(</span><span>'auth.form'</span><span>)-&gt;withErrors([</span><span>'message'</span><span> =&gt; </span><span>'Сначала войдите в систему'</span><span>]);</span></span>
<span><span>        }</span></span>

<span><span>        </span><span>return</span><span> view(</span><span>'profile'</span><span>, [</span><span>'user'</span><span> =&gt; </span><span>$user</span><span>]);</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>public</span><span> </span><span>function</span><span> logout(Request </span><span>$request</span><span>)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>// Удаляем данные из сессии</span></span>
<span><span>        </span><span>$request</span><span>-&gt;session()-&gt;forget(</span><span>'user'</span><span>);</span></span>

<span><span>        </span><span>return</span><span> redirect(</span><span>'/'</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	 
</p>

<p>
	<strong>3. Настройка роутов.</strong><span> </span>Обновим<span> </span><strong>routes/web.php</strong>, чтобы все роуты ссылались на методы контроллера:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="php" plaincode="&lt;?php

use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;

// Главная страница
Route::get('/', function () {
    return view('welcome');
});

// Авторизация
Route::get('/auth', [AuthController::class, 'showLoginForm'])-&gt;name('auth.form');
Route::post('/auth', [AuthController::class, 'login'])-&gt;name('auth.login');

// Личный кабинет
Route::get('/profile', [AuthController::class, 'profile'])-&gt;name('profile');

// Выход
Route::get('/logout', [AuthController::class, 'logout'])-&gt;name('auth.logout');">
<span><span>&lt;?php</span></span>

<span><span>use</span><span> App\Http\Controllers\AuthController;</span></span>
<span><span>use</span><span> Illuminate\Support\Facades\Route;</span></span>

<span><span>// Главная страница</span></span>
<span><span>Route::get(</span><span>'/'</span><span>, </span><span>function</span><span> () {</span></span>
<span><span>    </span><span>return</span><span> view(</span><span>'welcome'</span><span>);</span></span>
<span><span>});</span></span>

<span><span>// Авторизация</span></span>
<span><span>Route::get(</span><span>'/auth'</span><span>, [AuthController::</span><span>class</span><span>, </span><span>'showLoginForm'</span><span>])-&gt;name(</span><span>'auth.form'</span><span>);</span></span>
<span><span>Route::post(</span><span>'/auth'</span><span>, [AuthController::</span><span>class</span><span>, </span><span>'login'</span><span>])-&gt;name(</span><span>'auth.login'</span><span>);</span></span>

<span><span>// Личный кабинет</span></span>
<span><span>Route::get(</span><span>'/profile'</span><span>, [AuthController::</span><span>class</span><span>, </span><span>'profile'</span><span>])-&gt;name(</span><span>'profile'</span><span>);</span></span>

<span><span>// Выход</span></span>
<span><span>Route::get(</span><span>'/logout'</span><span>, [AuthController::</span><span>class</span><span>, </span><span>'logout'</span><span>])-&gt;name(</span><span>'auth.logout'</span><span>);</span></span>
</pre>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<h3 style="text-align:center;">
	Обновление шаблонов
</h3>

<p>
	Чтобы пользователи видели сообщения об ошибках, добавим их в шаблон авторизации<span> </span><strong>resources/views/auth.blade.php:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="html" plaincode="&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ru&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Авторизация&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    @if ($errors-&gt;any())
        &lt;div style=&quot;color: red;&quot;&gt;
            @foreach ($errors-&gt;all() as $error)
                &lt;p&gt;{{ $error }}&lt;/p&gt;
            @endforeach
        &lt;/div&gt;
    @endif

    &lt;h1&gt;Вход в личный кабинет&lt;/h1&gt;
    &lt;form action=&quot;/auth&quot; method=&quot;POST&quot;&gt;
        @csrf
        &lt;label for=&quot;nickname&quot;&gt;Ник:&lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;nickname&quot;  data-cke-saved-name=&quot;nickname&quot; name=&quot;nickname&quot; required&gt;
        &lt;br&gt;
        &lt;label for=&quot;password&quot;&gt;Пароль:&lt;/label&gt;
        &lt;input type=&quot;password&quot; id=&quot;password&quot;  data-cke-saved-name=&quot;password&quot; name=&quot;password&quot; required&gt;
        &lt;br&gt;
        &lt;button type=&quot;submit&quot;&gt;Войти&lt;/button&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;">
<span><span>&lt;!DOCTYPE</span><span> html</span><span>&gt;</span></span>
<span><span>&lt;</span><span>html</span><span> </span><span>lang</span><span>=</span><span>"ru"</span><span>&gt;</span></span>
<span><span>&lt;</span><span>head</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>charset</span><span>=</span><span>"UTF-8"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>name</span><span>=</span><span>"viewport"</span><span> </span><span>content</span><span>=</span><span>"width=device-width, initial-scale=1.0"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>title</span><span>&gt;</span><span>Авторизация</span><span>&lt;/</span><span>title</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>head</span><span>&gt;</span></span>
<span><span>&lt;</span><span>body</span><span>&gt;</span></span>
<span><span>    @if ($errors-&gt;any())</span></span>
<span><span>        </span><span>&lt;</span><span>div</span><span> </span><span>style</span><span>=</span><span>"color: red;"</span><span>&gt;</span></span>
<span><span>            @foreach ($errors-&gt;all() as $error)</span></span>
<span><span>                </span><span>&lt;</span><span>p</span><span>&gt;</span><span>{{ $error }}</span><span>&lt;/</span><span>p</span><span>&gt;</span></span>
<span><span>            @endforeach</span></span>
<span><span>        </span><span>&lt;/</span><span>div</span><span>&gt;</span></span>
<span><span>    @endif</span></span>

<span><span>    </span><span>&lt;</span><span>h1</span><span>&gt;</span><span>Вход в личный кабинет</span><span>&lt;/</span><span>h1</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>form</span><span> </span><span>action</span><span>=</span><span>"/auth"</span><span> </span><span>method</span><span>=</span><span>"POST"</span><span>&gt;</span></span>
<span><span>        @csrf</span></span>
<span><span>        </span><span>&lt;</span><span>label</span><span> </span><span>for</span><span>=</span><span>"nickname"</span><span>&gt;</span><span>Ник:</span><span>&lt;/</span><span>label</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>input</span><span> </span><span>type</span><span>=</span><span>"text"</span><span> </span><span>id</span><span>=</span><span>"nickname"</span><span>  </span><span>data-cke-saved-name</span><span>=</span><span>"nickname"</span><span> </span><span>name</span><span>=</span><span>"nickname"</span><span> </span><span>required</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>br</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>label</span><span> </span><span>for</span><span>=</span><span>"password"</span><span>&gt;</span><span>Пароль:</span><span>&lt;/</span><span>label</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>input</span><span> </span><span>type</span><span>=</span><span>"password"</span><span> </span><span>id</span><span>=</span><span>"password"</span><span>  </span><span>data-cke-saved-name</span><span>=</span><span>"password"</span><span> </span><span>name</span><span>=</span><span>"password"</span><span> </span><span>required</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>br</span><span>&gt;</span></span>
<span><span>        </span><span>&lt;</span><span>button</span><span> </span><span>type</span><span>=</span><span>"submit"</span><span>&gt;</span><span>Войти</span><span>&lt;/</span><span>button</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;/</span><span>form</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>body</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>html</span><span>&gt;</span></span>
</pre>

<p>
	 
</p>

<p>
	Отображение данных пользователя в личном кабинете. В файле<span> </span><strong>resources/views/profile.blade.php</strong><span> </span>выведем данные из базы:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="html" plaincode="&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ru&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Личный кабинет&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Добро пожаловать, {{ $user-&gt;nickname }}!&lt;/h1&gt;
    &lt;p&gt;Ваш email: {{ $user-&gt;email }}&lt;/p&gt;
    &lt;p&gt;Игровой баланс: {{ $user-&gt;player_money }}&lt;/p&gt;
    &lt;p&gt;ID скина: {{ $user-&gt;player_skin }}&lt;/p&gt;
    &lt;p&gt;Донат счет: {{ $user-&gt;player_donate }}&lt;/p&gt;
    &lt;a href=&quot;/&quot;&gt;Вернуться на главную&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;">
<span><span>&lt;!DOCTYPE</span><span> html</span><span>&gt;</span></span>
<span><span>&lt;</span><span>html</span><span> </span><span>lang</span><span>=</span><span>"ru"</span><span>&gt;</span></span>
<span><span>&lt;</span><span>head</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>charset</span><span>=</span><span>"UTF-8"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>name</span><span>=</span><span>"viewport"</span><span> </span><span>content</span><span>=</span><span>"width=device-width, initial-scale=1.0"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>title</span><span>&gt;</span><span>Личный кабинет</span><span>&lt;/</span><span>title</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>head</span><span>&gt;</span></span>
<span><span>&lt;</span><span>body</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>h1</span><span>&gt;</span><span>Добро пожаловать, {{ $user-&gt;nickname }}!</span><span>&lt;/</span><span>h1</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>p</span><span>&gt;</span><span>Ваш email: {{ $user-&gt;email }}</span><span>&lt;/</span><span>p</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>p</span><span>&gt;</span><span>Игровой баланс: {{ $user-&gt;player_money }}</span><span>&lt;/</span><span>p</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>p</span><span>&gt;</span><span>ID скина: {{ $user-&gt;player_skin }}</span><span>&lt;/</span><span>p</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>p</span><span>&gt;</span><span>Донат счет: {{ $user-&gt;player_donate }}</span><span>&lt;/</span><span>p</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"/"</span><span>&gt;</span><span>Вернуться на главную</span><span>&lt;/</span><span>a</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>body</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>html</span><span>&gt;</span></span>
</pre>

<p>
	 
</p>

<p>
	<strong>Скриншот:</strong>
</p>

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

	<div class="ipsSpoiler_contents">
		<p style="text-align:center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="23887" href="//storage.yandexcloud.net/pawnorus/monthly_2024_12/676169649f0e9_Group12.png.9bda525df13b7d84cffb5c5e0fd14e23.png" rel=""><img alt="6761696524985_Group12.thumb.png.2cd78b5ef607c4204c5e7438d1943bbc.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23887" src="//storage.yandexcloud.net/pawnorus/monthly_2024_12/6761696524985_Group12.thumb.png.2cd78b5ef607c4204c5e7438d1943bbc.png" /></a>
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<strong>Дополнительно про Blade:</strong>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			В<span> </span><strong>Blade</strong><span> </span>мы можем создать основной (родительский) шаблон<span> </span><strong>resources/views/layouts/app.blade.php</strong>
		</p>

		<pre class="ipsCode ipsCodeSubmitted" codelang="html" plaincode="&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ru&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Мой сайт&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;header&gt;header&lt;/header&gt;

    &lt;div id=&quot;content&quot;&gt;
        @yield('content')
    &lt;/div&gt;

    &lt;footer&gt;footer&lt;/footer&gt;
&lt;/body&gt;
&lt;/html&gt;">

<span><span>&lt;!DOCTYPE</span><span> html</span><span>&gt;</span></span>
<span><span>&lt;</span><span>html</span><span> </span><span>lang</span><span>=</span><span>"ru"</span><span>&gt;</span></span>
<span><span>&lt;</span><span>head</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>charset</span><span>=</span><span>"UTF-8"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>meta</span><span> </span><span>name</span><span>=</span><span>"viewport"</span><span> </span><span>content</span><span>=</span><span>"width=device-width, initial-scale=1.0"</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>title</span><span>&gt;</span><span>Мой сайт</span><span>&lt;/</span><span>title</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>head</span><span>&gt;</span></span>
<span><span>&lt;</span><span>body</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>header</span><span>&gt;</span><span>header</span><span>&lt;/</span><span>header</span><span>&gt;</span></span>

<span><span>    </span><span>&lt;</span><span>div</span><span> </span><span>id</span><span>=</span><span>"content"</span><span>&gt;</span></span>
<span><span>        @yield('content')</span></span>
<span><span>    </span><span>&lt;/</span><span>div</span><span>&gt;</span></span>

<span><span>    </span><span>&lt;</span><span>footer</span><span>&gt;</span><span>footer</span><span>&lt;/</span><span>footer</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>body</span><span>&gt;</span></span>
<span><span>&lt;/</span><span>html</span><span>&gt;</span></span>
</pre>

		<p>
			Создание дочернего шаблона<span> </span><strong>resources/views/home.blade.php:</strong>
		</p>

		<pre class="ipsCode ipsCodeSubmitted" codelang="html" plaincode="@extends('layouts.app')

@section('content')
    &lt;h1&gt;Добро пожаловать на ваш сайт!&lt;/h1&gt;
    &lt;a href=&quot;/auth&quot;&gt;Войти&lt;/a&gt;
@endsection">

<span><span>@extends('layouts.app')</span></span>

<span><span>@section('content')</span></span>
<span><span>    </span><span>&lt;</span><span>h1</span><span>&gt;</span><span>Добро пожаловать на ваш сайт!</span><span>&lt;/</span><span>h1</span><span>&gt;</span></span>
<span><span>    </span><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"/auth"</span><span>&gt;</span><span>Войти</span><span>&lt;/</span><span>a</span><span>&gt;</span></span>
<span><span>@endsection</span></span>
</pre>

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

<p>
	 
</p>

<p>
	В принципе, это базовая и максимально простая настройка авторизации. Вам остается только добавить собственную вёрстку. Также рекомендую использовать Middleware для защиты роутов, например, роута личного кабинета. Надеюсь, у вас всё получилось! Желаю успешной и продуктивной разработки ваших проектов!
</p>

<p>
	 
</p>

<p>
	<strong>Готовый сайт для SAMP проекта: </strong><a href="https://pawno-rus.com/topic/8225-gotovyy-sayt-dlya-samp-proekta/" rel="">https://pawno-rus.ru/topic/8225-gotovyy-sayt-dlya-samp-proekta/</a>
</p>

<p>
	 
</p>

<p>
	 
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Цитата
	</div>

	<div class="ipsQuote_contents">
		<p>
			 
		</p>

		<p>
			Я намеренно выбрал подход с базовыми примерами, чтобы максимально упростить вход в<span> </span><strong>Laravel </strong>для новичков, которые до сих пор работают с чистым<span> </span><strong>PHP</strong>. Когда человек впервые сталкивается с<span> </span><strong>Laravel</strong>, ему может быть сложно сразу разобраться в таких концепциях, как<span> </span><strong>MVC</strong>,<span> </span><strong>Dependency Injection</strong><span> </span>или<span> </span><strong>Service Container</strong>. Поэтому моя цель - дать базу, которая покажет простоту и мощь<span> </span><strong>Laravel</strong>, без избыточных сложностей на старте.
		</p>

		<p>
			 
		</p>

		<p>
			Паттерны и принципы, безусловно, важны, но новичку важно сначала увидеть результат. Когда он увидит, как легко можно реализовать авторизацию с<span> </span><strong>Laravel</strong>, он захочет углубиться в изучение фреймворка, а уже затем освоит лучшие практики. Я также считаю, что аналогии с ванильным<span> </span><strong>PHP </strong>- хороший инструмент, но их нужно вводить постепенно, чтобы не перегрузить материал.
		</p>

		<p>
			 
		</p>

		<p>
			На данном этапе статья с базовыми примерами рассчитана на тех, кто только делает первые шаги, и для них слишком сложные темы могут быть пугающими. Главная цель - мотивировать их изучать Laravel дальше.
		</p>

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

<p>
	 
</p>
]]></description><guid isPermaLink="false">8254</guid><pubDate>Tue, 17 Dec 2024 12:02:57 +0000</pubDate></item><item><title>MYSQL &#x417;&#x410;&#x41F;&#x420;&#x41E;&#x421; UPDATE</title><link>https://pawno-rus.com/topic/8117-mysql-zapros-update/</link><description><![CDATA[
<p>
	Всем добра, подскажите что не так делаю? Хочу изменить запрос в php скрипте
</p>

<p>
	С - $query = sprintf("INSERT INTO `prefix_users` (`account`, `sum`) VALUES ('%s', '%d')",
</p>

<p>
	На - $query = sprintf("UPDATE `prefix_users` SET `money` = `money` + '%s' WHERE `login` = '%d'", 
</p>

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

<p>
	 
</p>

<p>
	Заранее спасибо, с меня как обычно лайкосик!)
</p>
]]></description><guid isPermaLink="false">8117</guid><pubDate>Mon, 14 Oct 2024 23:02:14 +0000</pubDate></item><item><title>PHP MAIL</title><link>https://pawno-rus.com/topic/8113-php-mail/</link><description><![CDATA[
<p>
	Всем добра, не работает восстановление пароля, при попытке восстановить пароль через почту, не отправляется письмо, но пароль при этом в mysql изменяется с md5
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			case 'lost':<br />
			    <br />
			    if (isset($_SESSION['user_id'])) <br />
			    {<br />
			      echo 'Пароль смените в профиле';<br />
			      break;<br />
			    }       <br />
			        <br />
			    $obEngine-&gt;addTitleHtml('Восстановление пароля');  <br />
			    <br />
			    if (isset($_POST['login']))<br />
			    {<br />
			      if (isset($_POST['captcha'])) <br />
			      {        <br />
			        if ($_POST['captcha'] != $_SESSION['image_captcha'])<br />
			        {<br />
			          echo 'Неверно выбрана картинка';<br />
			          unset($_SESSION['image_captcha']);<br />
			          break;<br />
			        }           <br />
			      }<br />
			      else<br />
			      {<br />
			        echo 'Неверно выбрана картинка';<br />
			        unset($_SESSION['image_captcha']);<br />
			        break;<br />
			      }<br />
			      <br />
			      $login = filter_var($_POST['login'], FILTER_SANITIZE_STRING); <br />
			    <br />
			      $email = filter_var($_POST['email'], FILTER_SANITIZE_STRING); <br />
			      <br />
			      $query = $mysqli-&gt;query("SELECT `id`, `login`, `email`, `password` FROM `".PREFIX."_users` WHERE `login` = '".$login."' || `email` = '".$email."' LIMIT 1");    <br />
			  <br />
			      if (!$query-&gt;num_rows)<br />
			      {<br />
			        echo 'Пользователь с такими данными не существует';<br />
			        break;<br />
			      }<br />
			      else<br />
			      {<br />
			        $res = $query-&gt;fetch_assoc();<br />
			        <br />
			        $password = genPassword(8);<br />
			        <br />
			        $md5_password = md5(md5($password.HASH_MD5));<br />
			        <br />
			        $mysqli-&gt;query("UPDATE `".PREFIX."_users` SET `password` = '".$md5_password."' WHERE `id` = '".$res['id']."'");      <br />
			        <br />
			        $headers = "From: ".$obEngine-&gt;getConfig('site_name')." &lt;".$obEngine-&gt;getConfig('site_name')."&gt;\n";<br />
			        $headers = $headers."Content-type: text/html; charset=\"utf-8\"\n";<br />
			        $headers = $headers."Return-path: &lt;".$obEngine-&gt;getConfig('site_email')."&gt;\n";<br />
			        $message = 'Здравствуйте, &lt;b&gt;'.$res['login'].'&lt;/b&gt;!&lt;br&gt;<br />
			          Вы сделали запрос на восстановление пароля в сервисе интернет-рекламы '.$obEngine-&gt;getConfig('site_name').'.&lt;br&gt;&lt;br&gt;<br />
			          Данные для входа на сайт: &lt;br&gt;<br />
			          Логин: &lt;b&gt;'.$res['login'].'&lt;/b&gt;&lt;br&gt;<br />
			          Пароль: &lt;b&gt;'.$password.'&lt;/b&gt;&lt;br&gt;<br />
			          &lt;br&gt;&lt;br&gt;<br />
			          --&lt;br&gt;<br />
			          С наилучшими пожеланиями,&lt;br&gt; Администрация '.$obEngine-&gt;getConfig('site_name').''."\n";<br />
			        $subject = 'Восстановление пароля от '.$obEngine-&gt;getConfig('site_name').'';<br />
			        mail($res['email'], $subject, $message, $headers);<br />
			        <br />
			        unset($_SESSION['image_captcha']);<br />
			        <br />
			        echo '&lt;h1&gt;Пароль выслан&lt;/h1&gt;';<br />
			        <br />
			        break;<br />
			      }<br />
			  <br />
			      unset($_SESSION['image_captcha']);<br />
			    }    <br />
			    ?&gt;<br />
			    &lt;script src="js/jquery.captcha.js" type="text/javascript"&gt;&lt;/script&gt; <br />
			    &lt;div class="main"&gt;<br />
			     &lt;div class="m_left"&gt;<br />
			      &lt;div class="m_title"&gt;Восстановление пароля&lt;/div&gt;<br />
			      &lt;form name="form3" action="?mode=lost" method="post" onsubmit="return validate3();"&gt;<br />
			       &lt;div class="m_l"&gt;<br />
			    &lt;div class="m_name"&gt;Логин:&lt;/div&gt;<br />
			    &lt;div class="m_pole"&gt;&lt;input type="text" name="login" maxlength="25" class="tt"&gt;&lt;/div&gt;<br />
			       &lt;/div&gt;<br />
			       &lt;div class="m_l"&gt;<br />
			    &lt;div class="m_name"&gt;&lt;span style="font-weight: normal;"&gt;или&lt;/span&gt; Email:&lt;/div&gt;<br />
			    &lt;div class="m_pole"&gt;&lt;input type="text" maxlength="40" value="" name="email" class="tt"&gt;&lt;/div&gt;<br />
			       &lt;/div&gt;<br />
			       &lt;div class="m_l" style="line-height: 30px;"&gt;&lt;div id="capcha"&gt;&lt;?php include('captcha.php'); ?&gt;&lt;/div&gt;&lt;/div&gt;     <br />
			       &lt;div class="m_l"&gt;&lt;button style="float:right;"&gt;Восстановить&lt;/button&gt;&lt;/div&gt;<br />
			      &lt;/form&gt;<br />
			     &lt;/div&gt;<br />
			     &lt;?php include 'module/user_menu.php'; ?&gt;  <br />
			    &lt;/div&gt;<br />
			    &lt;?php<br />
			        <br />
			    break;    
		</p>

		<p>
			    default:<br />
			    <br />
			    header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true);  <br />
			    echo '&lt;h1&gt;Страница не найдена&lt;/h1&gt;';    <br />
			        <br />
			    break;<br />
			  }<br />
			}<br />
			?&gt;<br />
			&lt;/div&gt;
		</p>
	</div>
</div>

<p>
	Подскажите куда копать?
</p>
]]></description><guid isPermaLink="false">8113</guid><pubDate>Sun, 13 Oct 2024 22:05:26 +0000</pubDate></item><item><title>&#x421;&#x430;&#x439;&#x442; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430; Active Role Play</title><link>https://pawno-rus.com/topic/2759-sayt-proekta-active-role-play/</link><description><![CDATA[
<p style="text-align:center;">
	Доброго времени суток друзья. Сегодня хочу слить сайт данного проекта.<br />
	Автор: Неизвестно<br /><span style="color:#272a34;">Автор: Nord</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			Ссылка: <span style="color:#000000;"><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly95YWRpLnNrL2QvLWJwODB4NXYzWXo1YTY=" rel="external nofollow">https://yadi.sk/d/-bp80x5v3Yz5a6</a></span>
		</p>
	</div>
</div>

<p style="text-align:center;">
	 
</p>

<div class="ipsSpoiler" data-ipsspoiler="" data-ipsspoiler-option="СКРИНЫ">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<span style="color:#000000;">Скрины:<a href="https://imgur.com/a/ZIIW24Y" rel="external nofollow">https://imgur.com/a/ZIIW24Y</a></span>
		</p>
	</div>
</div>

<p style="text-align:center;">
	 
</p>
]]></description><guid isPermaLink="false">2759</guid><pubDate>Tue, 10 Jul 2018 00:41:21 +0000</pubDate></item><item><title>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D; Zona DM 2024</title><link>https://pawno-rus.com/topic/8052-shablon-zona-dm-2024/</link><description><![CDATA[
<p>
	сливаю шаблон сайта зоны дм 2024 
</p>

<p>
	 
</p>

<p><a class="ipsAttachLink" href="//pawno-rus.ru/applications/core/interface/file/attachment.php?id=23767">шаблон зоны дм.zip</a></p>]]></description><guid isPermaLink="false">8052</guid><pubDate>Tue, 30 Jul 2024 19:51:23 +0000</pubDate></item><item><title>Php &#x411;&#x43E;&#x442; &#x434;&#x43B;&#x44F; &#x412;&#x43A;&#x43E;&#x43D;&#x442;&#x430;&#x43A;&#x442;&#x435;</title><link>https://pawno-rus.com/topic/7921-php-bot-dlya-vkontakte/</link><description><![CDATA[
<p>
	Ищу php бота (либо кто-то напишет), который будет функционировать для привязки аккаунта в самп к вк сообществу (как на обычных проектах). В моде всё есть, сам бот нужен.<br /><br />
	Строчки в коде (для помощи по написанию бота):<br />
	 
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnPlayerDisconnect(playerid, reason) {
	if(PI[playerid][data_VKID] != 0) {
		if(PI[playerid][data_SENDVK] != 0) {
			new vk_to[250];
			format(vk_to, sizeof(vk_to), &quot;Ваш персонаж %s покинул сервер&lt;br&gt;IP-адрес: %s&lt;br&gt;&lt;br&gt;Деньги: %d руб.&lt;br&gt;Донат: %d дп.&quot;,PI[playerid][data_NAME],PI[playerid][LAST_IP],PI[playerid][data_MONEY],PI[playerid][data_DONATE]);
			SendVKServer(playerid, vk_to, 1, PI[playerid][data_VKID]);
		}
	}

SendServer(text[],type) {
	new str_vk[250];
	for(new i, str = strlen(text); i &lt; str; i++) if(text[i] == ' ') text[i] = '+';
	format(str_vk, sizeof str_vk, &quot;Ссылка?message=%s&amp;t=%d&quot;,text,type);
	return HTTP(0, HTTP_POST, str_vk, &quot;&quot;, &quot;SendMessageResponse&quot;);
}
stock SendVKServer(playerid, text[],type,vkid) {
    new hour,minuite,year, mouth, day,second;
    gettime(hour,minuite,second);
    getdate(year, mouth, day);
    new str_vk[250];
    format(str_vk, sizeof(str_vk), &quot;%s&lt;br&gt;&lt;br&gt; — Сервер: Черниковка RP | One&quot;,text);
    return SendVKMessage(playerid, str_vk, type, vkid);
}
SendVKMessage(playerid,text[],type,vkid) {
    if(type == 1) {
		new str_vk[250];
		for(new i, str = strlen(text); i &lt; str; i++) if(text[i] == ' ') text[i] = '+';
		format(str_vk, sizeof str_vk, &quot;Ссылка?message=%s&amp;t=%d&quot;,text,type,vkid);
		return HTTP(playerid, HTTP_POST, str_vk, &quot;&quot;, &quot;SendVKMessageResponse&quot;);
	}
	else {
		new str_vk[250];
		for(new i, str = strlen(text); i &lt; str; i++) if(text[i] == ' ') text[i] = '+';
		format(str_vk, sizeof str_vk, &quot;Ссылка?message=%s&amp;t=%d&quot;,text,type);
		return HTTP(playerid, HTTP_POST, str_vk, &quot;&quot;, &quot;SendMessageResponse&quot;);
	}
}
stock SendVKTest(playerid, text[], type) {
	if(type == 1) {
		new str_vk[250];
		format(str_vk, sizeof(str_vk), &quot;%s&lt;br&gt;&lt;br&gt; — Сервер: Черниковка RP | One&quot;,text);
		return SendVKMessage(playerid, str_vk, type,0);
	}
	else {
		new hour,minuite,year, mouth, day,second;
		gettime(hour,minuite,second);
		getdate(year, mouth, day);
		new str_vk[250];
		format(str_vk, sizeof(str_vk), &quot;%s&lt;br&gt;&lt;br&gt; — Сервер: Черниковка | One&lt;br&gt; — Время: %d.%d.%d %d:%d:%d&quot;,text,day,mouth,year,hour,minuite,second);
		return SendVKMessage(playerid, str_vk, type,0);
	}
}



CMD:vkguard(playerid) {
	if(antiflood[playerid] &gt; 0) return SendClientMessage(playerid, COLOR_BLACK,&quot;Пожалуйста, подождите пару секунд...&quot;);
    antiflood[playerid]++;
    if(PI[playerid][data_LOGGED] == false) return 1;
	new str_3[512];
	format(str_3, sizeof(str_3), &quot;\
	Перейдите в нашу группу {4086ff}ВКонтакте{252525} затем напишите: Чер привязать %s\n\
	Затем в течении 10 секунд в игре Вам в чат напишет код, который Вы должны ввести в нашей группе {4086ff}ВКонтакте{252525}, {4086ff}Чер код (и код с игры)\n\
	{696969}Пример: Чер код 565678\n\n\
	Группа {4086ff}ВКонтакте{252525} и другие контакты: {4086ff}/info{252525}&quot;,PI[playerid][data_NAME]);
    return CEF__Dialog(playerid,dialog_OK, DIALOG_STYLE_MSGBOX, &quot;{f00e5d}Привязка ВКонтакте&quot;, str_3, &quot;Закрыть&quot;, &quot;&quot;);
}">
<span><span>public</span><span> OnPlayerDisconnect(playerid, reason) {</span></span>
<span><span>    </span><span>if</span><span>(PI[playerid][data_VKID] != </span><span>0</span><span>) {</span></span>
<span><span>        </span><span>if</span><span>(PI[playerid][data_SENDVK] != </span><span>0</span><span>) {</span></span>
<span><span>            </span><span>new</span><span> vk_to[</span><span>250</span><span>];</span></span>
<span><span>            format(vk_to, </span><span>sizeof</span><span>(vk_to), </span><span>"Ваш персонаж %s покинул сервер&lt;br&gt;IP-адрес: </span><span>%s&lt;br&gt;&lt;br&gt;Деньги: %d руб.&lt;br&gt;Донат: %d дп."</span><span>,PI[playerid][data_NAME],PI[playerid][LAST_IP],PI[playerid][data_MONEY],PI[playerid][data_DONATE]);</span></span>
<span><span>            SendVKServer(playerid, vk_to, </span><span>1</span><span>, PI[playerid][data_VKID]);</span></span>
<span><span>        }</span></span>
<span><span>    }</span></span>

<span><span>SendServer(text[],type) {</span></span>
<span><span>    </span><span>new</span><span> str_vk[</span><span>250</span><span>];</span></span>
<span><span>    </span><span>for</span><span>(</span><span>new</span><span> i, str = strlen(text); i &lt; str; i++) </span><span>if</span><span>(text[i] == </span><span>' '</span><span>) text[i] = </span><span>'+'</span><span>;</span></span>
<span><span>    format(str_vk, </span><span>sizeof</span><span> str_vk, </span><span>"Ссылка?message=%s&amp;t=%d"</span><span>,text,type);</span></span>
<span><span>    </span><span>return</span><span> HTTP(</span><span>0</span><span>, HTTP_POST, str_vk, </span><span>""</span><span>, </span><span>"SendMessageResponse"</span><span>);</span></span>
<span><span>}</span></span>
<span><span>stock SendVKServer(playerid, text[],type,vkid) {</span></span>
<span><span>    </span><span>new</span><span> hour,minuite,year, mouth, day,second;</span></span>
<span><span>    gettime(hour,minuite,second);</span></span>
<span><span>    getdate(year, mouth, day);</span></span>
<span><span>    </span><span>new</span><span> str_vk[</span><span>250</span><span>];</span></span>
<span><span>    format(str_vk, </span><span>sizeof</span><span>(str_vk), </span><span>"%s&lt;br&gt;&lt;br&gt; — Сервер: Черниковка RP | One"</span><span>,text);</span></span>
<span><span>    </span><span>return</span><span> SendVKMessage(playerid, str_vk, type, vkid);</span></span>
<span><span>}</span></span>
<span><span>SendVKMessage(playerid,text[],type,vkid) {</span></span>
<span><span>    </span><span>if</span><span>(type == </span><span>1</span><span>) {</span></span>
<span><span>        </span><span>new</span><span> str_vk[</span><span>250</span><span>];</span></span>
<span><span>        </span><span>for</span><span>(</span><span>new</span><span> i, str = strlen(text); i &lt; str; i++) </span><span>if</span><span>(text[i] == </span><span>' '</span><span>) text[i] = </span><span>'+'</span><span>;</span></span>
<span><span>        format(str_vk, </span><span>sizeof</span><span> str_vk, </span><span>"Ссылка?message=%s&amp;t=%d"</span><span>,text,type,vkid);</span></span>
<span><span>        </span><span>return</span><span> HTTP(playerid, HTTP_POST, str_vk, </span><span>""</span><span>, </span><span>"SendVKMessageResponse"</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span><span> {</span></span>
<span><span>        </span><span>new</span><span> str_vk[</span><span>250</span><span>];</span></span>
<span><span>        </span><span>for</span><span>(</span><span>new</span><span> i, str = strlen(text); i &lt; str; i++) </span><span>if</span><span>(text[i] == </span><span>' '</span><span>) text[i] = </span><span>'+'</span><span>;</span></span>
<span><span>        format(str_vk, </span><span>sizeof</span><span> str_vk, </span><span>"Ссылка?message=%s&amp;t=%d"</span><span>,text,type);</span></span>
<span><span>        </span><span>return</span><span> HTTP(playerid, HTTP_POST, str_vk, </span><span>""</span><span>, </span><span>"SendMessageResponse"</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>
<span><span>stock SendVKTest(playerid, text[], type) {</span></span>
<span><span>    </span><span>if</span><span>(type == </span><span>1</span><span>) {</span></span>
<span><span>        </span><span>new</span><span> str_vk[</span><span>250</span><span>];</span></span>
<span><span>        format(str_vk, </span><span>sizeof</span><span>(str_vk), </span><span>"%s&lt;br&gt;&lt;br&gt; — Сервер: Черниковка RP | One"</span><span>,text);</span></span>
<span><span>        </span><span>return</span><span> SendVKMessage(playerid, str_vk, type,</span><span>0</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span><span> {</span></span>
<span><span>        </span><span>new</span><span> hour,minuite,year, mouth, day,second;</span></span>
<span><span>        gettime(hour,minuite,second);</span></span>
<span><span>        getdate(year, mouth, day);</span></span>
<span><span>        </span><span>new</span><span> str_vk[</span><span>250</span><span>];</span></span>
<span><span>        format(str_vk, </span><span>sizeof</span><span>(str_vk), </span><span>"%s&lt;br&gt;&lt;br&gt; — Сервер: Черниковка | One&lt;br&gt; — </span><span>Время: %d.%d.%d %d:%d:%d"</span><span>,text,day,mouth,year,hour,minuite,second);</span></span>
<span><span>        </span><span>return</span><span> SendVKMessage(playerid, str_vk, type,</span><span>0</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>



<span><span>CMD:vkguard(playerid) {</span></span>
<span><span>    </span><span>if</span><span>(antiflood[playerid] &gt; </span><span>0</span><span>) </span><span>return</span><span> SendClientMessage(playerid, COLOR_BLACK,</span><span>"Пожалуйста, подождите пару секунд..."</span><span>);</span></span>
<span><span>    antiflood[playerid]++;</span></span>
<span><span>    </span><span>if</span><span>(PI[playerid][data_LOGGED] == </span><span>false</span><span>) </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>    </span><span>new</span><span> str_3[</span><span>512</span><span>];</span></span>
<span><span>    format(str_3, </span><span>sizeof</span><span>(str_3), </span><span>"</span><span>\</span></span>
<span><span>    Перейдите в нашу группу {4086ff}ВКонтакте{252525} </span><span>затем напишите: Чер привязать %s\n</span><span>\</span></span>
<span><span>    Затем в течении 10 секунд в игре Вам в чат </span><span>напишет код, который Вы должны ввести в нашей </span><span>группе {4086ff}ВКонтакте{252525}, {4086ff}Чер код </span><span>(и код с игры)\n</span><span>\</span></span>
<span><span>    {696969}Пример: Чер код 565678\n\n</span><span>\</span></span>
<span><span>    Группа {4086ff}ВКонтакте{252525} и другие </span><span>контакты: {4086ff}/info{252525}"</span><span>,PI[playerid][data_NAME]);</span></span>
<span><span>    </span><span>return</span><span> CEF__Dialog(playerid,dialog_OK, </span><span>DIALOG_STYLE_MSGBOX, </span><span>"{f00e5d}Привязка ВКонтакте"</span><span>, str_3, </span><span>"Закрыть"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>}</span></span>
</pre>

<p>
	 Mysql:<br />
	botvk, codevk, vkmasters, vksend<br />
	 
</p>
]]></description><guid isPermaLink="false">7921</guid><pubDate>Sun, 05 May 2024 21:14:15 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x43C;&#x43E;&#x433;&#x438;&#x442;&#x435; &#x43D;&#x430;&#x439;&#x442;&#x438; &#x44D;&#x442;&#x443; &#x43F;&#x430;&#x43D;&#x435;&#x43B;&#x44C; &#x43D;&#x430; php</title><link>https://pawno-rus.com/topic/7715-pomogite-nayti-etu-panel-na-php/</link><description><![CDATA[
<p>
	Ребята, очень прошу дайте мне такую панель как на скрине с функциями:
</p>

<p>
	- Добавление товара
</p>

<p>
	-Покупка товара
</p>

<p>
	-Состояние баланса
</p>

<p>
	Информация товара когда купили:
</p>

<p>
	-Описание
</p>

<p>
	-Кнопка скачать
</p>

<p>
	Повторюсь НЕ шаблон а панель.
</p>

<p>
	Зарание спасибо.
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2024_01/65aec7f9902eb_2024-01-22215415.png.8df28c1e57158356c1c8fa291988bcc1.png" data-fileid="19464" rel=""><img alt="Снимок экрана 2024-01-22 215415.png" class="ipsImage ipsImage_thumbnailed" data-fileid="19464" src="//storage.yandexcloud.net/pawnorus/monthly_2024_01/65aec7fa32d5b_2024-01-22215415.thumb.png.95139825f9cc526608197d5617a42a32.png" /></a>
</p>
]]></description><guid isPermaLink="false">7715</guid><pubDate>Mon, 22 Jan 2024 19:53:45 +0000</pubDate></item><item><title>&#x421;&#x430;&#x439;&#x442; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430; RUSSIAN HIGHWAY</title><link>https://pawno-rus.com/topic/1480-sayt-proekta-russian-highway/</link><description><![CDATA[
<p>
	Стиль,мне понравился по оформлению :),да и вообще подойдёт и для РП,проектов кароче,на весь жанр,главное картинки подобрать <img alt=":)" data-emoticon="" height="20" src="//storage.yandexcloud.net/pawnorus/emoticons/smile.png" srcset="//storage.yandexcloud.net/pawnorus/emoticons/smile@2x.png 2x" title=":)" width="20" /> юзайте.)
</p>

<p>
	Автор:Неизвестен.
</p>

<p>
	Скачать:<a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly95YWRpLnNrL2QvdTNDdGkyckYzUFZhRXA=" rel="external nofollow">https://yadi.sk/d/u3Cti2rF3PVaEp</a><span>  </span>
</p>

<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2017_11/qG0bn5-ytD0.jpg.bfef417b6d158b4863e5c923d3206938.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1093" src="//storage.yandexcloud.net/pawnorus/monthly_2017_11/qG0bn5-ytD0.thumb.jpg.83b449dea3638f772cafbf8a78cdf92d.jpg" class="ipsImage ipsImage_thumbnailed" alt="qG0bn5-ytD0.jpg"></a></p>]]></description><guid isPermaLink="false">1480</guid><pubDate>Tue, 07 Nov 2017 19:28:15 +0000</pubDate></item><item><title>[DLE] &#x422;&#x443;&#x440;&#x431;&#x43E; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446;&#x44B; &#x42F;&#x43D;&#x434;&#x435;&#x43A;&#x441;</title><link>https://pawno-rus.com/topic/7805-dle-turbo-stranicy-yandeks/</link><description><![CDATA[
<p>
	Добрый день
</p>

<p>
	Возможно выбрал не тот раздел н другого не нашел. 
</p>

<p>
	Проблема в том, что Яндекс ругается на турбо страницы постоянно
</p>

<p>
	В чем проблемма?
</p>

<p>
	Файл RSS
</p>

<div class="ipsSpoiler" data-ipsspoiler="" data-ipsspoiler-option="">
	<div class="ipsSpoiler_header">
		 
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>
	</div>

	<pre class="ipsCode">
[rss]&lt;item&gt;
&lt;title&gt;{title}&lt;/title&gt;
&lt;guid isPermaLink="true"&gt;{rsslink}&lt;/guid&gt;
&lt;link&gt;{rsslink}&lt;/link&gt;
&lt;dc:creator&gt;{rssauthor}&lt;/dc:creator&gt;
&lt;pubDate&gt;{rssdate}&lt;/pubDate&gt;
&lt;category&gt;{category}&lt;/category&gt;
&lt;description&gt;&lt;![CDATA[{short-story}]]&gt;&lt;/description&gt;
&lt;/item&gt;[/rss]

[turbo]&lt;item turbo="true"&gt;
&lt;turbo:extendedHtml&gt;true&lt;/turbo:extendedHtml&gt;
&lt;link&gt;{rsslink}&lt;/link&gt;
&lt;author&gt;{rssauthor}&lt;/author&gt;
&lt;category&gt;{category}&lt;/category&gt;
&lt;pubDate&gt;{rssdate}&lt;/pubDate&gt;
&lt;turbo:content&gt;&lt;![CDATA[&lt;header&gt;&lt;h1&gt;{title}&lt;/h1&gt;&lt;/header&gt;{full-story}]]&gt;&lt;/turbo:content&gt;
&lt;/item&gt;[/turbo]</pre>

	<div class="ipsSpoiler_contents">
		 
	</div>
</div>

<p>
	 
</p>

<p>
	PHP файл RSS
</p>

<div class="ipsSpoiler" data-ipsspoiler="" data-ipsspoiler-option="">
	<div class="ipsSpoiler_header">
		 
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>
	</div>

	<pre class="ipsCode">
&lt;?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group 
-----------------------------------------------------
http://dle-news.ru/
-----------------------------------------------------
 Copyright (c) 2004-2019 SoftNews Media Group
=====================================================
 This code is protected by copyright
=====================================================
 File: rss.php
-----------------------------------------------------
 Use: the news feeds
=====================================================
*/

if( !defined( 'DATALIFEENGINE' ) ) {
    header( "HTTP/1.1 403 Forbidden" );
    header ( 'Location: ../' );
    die( "Hacking attempt!" );
}

if($dle_module != "main" AND $dle_module != "allnews" AND $dle_module != "catalog" AND $dle_module != "cat") {
    header( "HTTP/1.1 403 Forbidden" );
    header ( 'Location: /' );
    die("Hacking attempt!");
}

include_once (DLEPlugins::Check(ENGINE_DIR . '/classes/templates.class.php'));
include_once (DLEPlugins::Check(ROOT_DIR . '/language/' . $config['langs'] . '/website.lng'));

if (strpos($config['http_home_url'], "//") === 0) $config['http_home_url'] = "https:".$config['http_home_url'];
elseif (strpos($config['http_home_url'], "/") === 0) $config['http_home_url'] = "https://".$_SERVER['HTTP_HOST'].$config['http_home_url'];

$tpl = new dle_template( );
$tpl-&gt;dir = ROOT_DIR . '/templates';
define( 'TEMPLATE_DIR', $tpl-&gt;dir );

$member_id['user_group'] = 5;

if( $category != '' ) $category_id = get_ID( $cat_info, $category );
else $category_id = false;

$view_template = "rss";

$config['allow_cache'] = true;
$config['allow_banner'] = false;
$config['rss_number'] = intval( $config['rss_number'] );
$config['rss_format'] = intval( $config['rss_format'] );
$cstart = 0;

if ( $user ) $config['allow_cache'] = false;

if( $_GET['subaction'] == 'allnews' ) $config['home_title'] = $lang['show_user_news'] . ' ' . htmlspecialchars( $user, ENT_QUOTES, $config['charset'] ) . " - " . $config['home_title'];
elseif( $_GET['do'] == 'cat' ) $config['home_title'] = stripslashes( $cat_info[$category_id]['name'] ) . " - " . $config['home_title'];

$rss_content = &lt;&lt;&lt;XML
&lt;?xml version="1.0" encoding="{$config['charset']}"?&gt;
&lt;rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0"&gt;
&lt;channel&gt;
&lt;title&gt;{$config['home_title']}&lt;/title&gt;
&lt;link&gt;{$config['http_home_url']}&lt;/link&gt;
&lt;language&gt;{$lang['wysiwyg_language']}&lt;/language&gt;
&lt;description&gt;{$config['home_title']}&lt;/description&gt;
&lt;generator&gt;DataLife Engine&lt;/generator&gt;
XML;

if( !file_exists( $tpl-&gt;dir . "/rss.tpl" ) ) {

    $tpl-&gt;template = &lt;&lt;&lt;HTML
[shortrss]&lt;item turbo="true"&gt;
&lt;title&gt;{title}&lt;/title&gt;
&lt;guid isPermaLink="true"&gt;{rsslink}&lt;/guid&gt;
&lt;link&gt;{rsslink}&lt;/link&gt;
&lt;description&gt;{short-story}&lt;/description&gt;
&lt;turbo:content&gt;&lt;![CDATA[{full-story}]]&gt;&lt;/turbo:content&gt;
&lt;category&gt;{category}&lt;/category&gt;
&lt;dc:creator&gt;{rssauthor}&lt;/dc:creator&gt;
&lt;pubDate&gt;{rssdate}&lt;/pubDate&gt;
&lt;/item&gt;[/shortrss]
[fullrss]&lt;item turbo="true"&gt;
&lt;title&gt;{title}&lt;/title&gt;
&lt;guid isPermaLink="true"&gt;{rsslink}&lt;/guid&gt;
&lt;link&gt;{rsslink}&lt;/link&gt;
&lt;description&gt;&lt;![CDATA[{short-story}]]&gt;&lt;/description&gt;
&lt;turbo:content&gt;&lt;![CDATA[{full-story}]]&gt;&lt;/turbo:content&gt;
&lt;category&gt;&lt;![CDATA[{category}]]&gt;&lt;/category&gt;
&lt;dc:creator&gt;{rssauthor}&lt;/dc:creator&gt;
&lt;pubDate&gt;{rssdate}&lt;/pubDate&gt;
&lt;/item&gt;[/fullrss]
[yandexrss]&lt;item turbo="true"&gt;
&lt;title&gt;{title}&lt;/title&gt;
&lt;link&gt;{rsslink}&lt;/link&gt;
&lt;description&gt;{short-story}&lt;/description&gt;
&lt;category&gt;{category}&lt;/category&gt;{images}
&lt;pubDate&gt;{rssdate}&lt;/pubDate&gt;
&lt;yandex:full-text&gt;{full-story}&lt;/yandex:full-text&gt;
&lt;turbo:content&gt;&lt;![CDATA[{full-story}]]&gt;&lt;/turbo:content&gt;
&lt;/item&gt;[/yandexrss]
HTML;

    $tpl-&gt;copy_template = $tpl-&gt;template;

} else {
    
    $tpl-&gt;load_template( 'rss.tpl' );
    
}


if( $config['site_offline'] OR ! $config['allow_rss'] ) {
    
    $rss_content .= &lt;&lt;&lt;XML
&lt;item&gt;
&lt;title&gt;RSS in offline mode&lt;/title&gt;
&lt;guid isPermaLink="true"&gt;&lt;/guid&gt;
&lt;link&gt;&lt;/link&gt;
&lt;description&gt;RSS in offline mode&lt;/description&gt;
&lt;category&gt;undefined&lt;/category&gt;
&lt;dc:creator&gt;DataLife Engine&lt;/dc:creator&gt;
&lt;pubDate&gt;DataLife Engine&lt;/pubDate&gt;
&lt;/item&gt;
XML;

} else {
    
    if( $config['rss_format'] == 1 ) {
        
        $tpl-&gt;template = str_replace( '[fullrss]', '', $tpl-&gt;template );
        $tpl-&gt;template = str_replace( '[/fullrss]', '', $tpl-&gt;template );
        $tpl-&gt;template = preg_replace( "'\\[yandexrss\\](.*?)\\[/yandexrss\\]'si", "", $tpl-&gt;template );
        $tpl-&gt;template = preg_replace( "'\\[shortrss\\](.*?)\\[/shortrss\\]'si", "", $tpl-&gt;template );
        $tpl-&gt;template = trim($tpl-&gt;template);
        
    } elseif( $config['rss_format'] == 2 ) {
        
        $rss_content = &lt;&lt;&lt;XML
&lt;?xml version="1.0" encoding="{$config['charset']}"?&gt;
&lt;rss xmlns:yandex="http://news.yandex.ru" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0"&gt;
&lt;channel&gt;
&lt;title&gt;{$config['home_title']}&lt;/title&gt;
&lt;link&gt;{$config['http_home_url']}&lt;/link&gt;
&lt;language&gt;{$lang['wysiwyg_language']}&lt;/language&gt;
&lt;description&gt;{$config['home_title']}&lt;/description&gt;
&lt;yandex:logo&gt;{$config['http_home_url']}yandexlogo.png&lt;/yandex:logo&gt;
&lt;yandex:logo type="square"&gt;{$config['http_home_url']}yandexsquarelogo.png&lt;/yandex:logo&gt;
&lt;generator&gt;DataLife Engine&lt;/generator&gt;
XML;
        
        $tpl-&gt;template = str_replace( '[yandexrss]', '', $tpl-&gt;template );
        $tpl-&gt;template = str_replace( '[/yandexrss]', '', $tpl-&gt;template );
        $tpl-&gt;template = preg_replace( "'\\[fullrss\\](.*?)\\[/fullrss\\]'si", "", $tpl-&gt;template );
        $tpl-&gt;template = preg_replace( "'\\[shortrss\\](.*?)\\[/shortrss\\]'si", "", $tpl-&gt;template );
        $tpl-&gt;template = trim($tpl-&gt;template);        
    } else {
        
        $tpl-&gt;template = str_replace( '[shortrss]', '', $tpl-&gt;template );
        $tpl-&gt;template = str_replace( '[/shortrss]', '', $tpl-&gt;template );
        $tpl-&gt;template = preg_replace( "'\\[fullrss\\](.*?)\\[/fullrss\\]'si", "", $tpl-&gt;template );
        $tpl-&gt;template = preg_replace( "'\\[yandexrss\\](.*?)\\[/yandexrss\\]'si", "", $tpl-&gt;template );
        $tpl-&gt;template = trim($tpl-&gt;template);    
    }
    
    $tpl-&gt;copy_template = $tpl-&gt;template;
    
    include_once (DLEPlugins::Check(ENGINE_DIR . '/engine.php'));
    
    $rss_content .= $tpl-&gt;result['content'];
}

$rss_content .= '&lt;/channel&gt;&lt;/rss&gt;';

$rss_content = str_ireplace( '{THEME}', $config['http_home_url'] . 'templates/' . $config['skin'], $rss_content );

header( "Content-type: application/xml; charset=".$config['charset'] );
echo $rss_content;

die();

?&gt;</pre>

	<div class="ipsSpoiler_contents">
		 
	</div>
</div>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_3.png.ae1b164c8b0cb8f2f47e32962d0d99f3.png" data-fileid="20150" rel=""><img alt="Screenshot_3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="20150" src="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_3.thumb.png.dea6092bb48e668d3b1f16f2ef85994a.png" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_1.png.b2a4de60ce3019380ee5014734180333.png" data-fileid="20151" rel=""><img alt="Screenshot_1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="20151" src="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_1.thumb.png.428dbd61e2c495ff295ed68e885a008e.png" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_2.png.ff38feed41c638c387f886a701eb83a4.png" data-fileid="20152" rel=""><img alt="Screenshot_2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="20152" src="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_2.thumb.png.9c037d7cf9fa71501ab17083b1480393.png" /></a>
</p>

<p><a href="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_4.png.7a151f009c5ea7a56cecdbcc23290263.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="20153" src="//storage.yandexcloud.net/pawnorus/monthly_2024_02/Screenshot_4.thumb.png.0a311e9b145b79e9ec1f254157d2dfad.png" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_4.png"></a></p>]]></description><guid isPermaLink="false">7805</guid><pubDate>Fri, 23 Feb 2024 09:38:28 +0000</pubDate></item><item><title>&#x418;&#x433;&#x440;&#x43E;&#x432;&#x43E;&#x439; &#x441;&#x430;&#x439;&#x442; *SAMP RP* (Old)</title><link>https://pawno-rus.com/topic/7750-igrovoy-sayt-samp-rp-old/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="color:#272a34;">Всем доброго дня. Сливаю вам сайт SAMP RP старой версии.<br>
	Разработчик: Maze Host</span><br><br>
	Скрины с сайта:<br><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9pYmIuY28vV2cwZnRQSw==" rel="external nofollow"><img alt="image.png" class="ipsImage" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.ibb.co/FgXzV07/image.png&amp;key=0a7fe08d39d07e044f13f39fbffc346c1319964a2cd4ff64aa56fd97396516b2"></a><br><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9pYmIuY28vWFNMYjRyTQ==" rel="external nofollow"><img alt="image.png" class="ipsImage" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.ibb.co/LnR8PXH/image.png&amp;key=9b11db379140ef32e14de8a26bf3c00c24c774699a34e0f4abbcffb9d49b67c9"></a><br><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9pYmIuY28vbVRkWks3dA==" rel="external nofollow"><img alt="image.png" class="ipsImage" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.ibb.co/sRcx4rQ/image.png&amp;key=7568ec42936a28a6488953d4eb2b00f6f71c9fdea44f32418dc0a23c69a8186b"></a><br><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9pYmIuY28veVk4eGc2Qw==" rel="external nofollow"><img alt="image.png" class="ipsImage" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.ibb.co/1d94RrN/image.png&amp;key=2d3c3642356439dc9adeb817db9a23e3ebf2c59780ce793c8cf47098bfab338e"></a><br><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9pYmIuY28vUWtNRzZEOQ==" rel="external nofollow"><img alt="image.png" class="ipsImage" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.ibb.co/dtDyQmB/image.png&amp;key=3664ddd150855087750ea446aeadeb21f6df5cdf36afd309c36bfc7e5606f3f3"></a><br><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9pYmIuY28vWVhWak41Wg==" rel="external nofollow"><img alt="image.png" class="ipsImage" src="https://pawno-rus.com/applications/core/interface/imageproxy/imageproxy.php?img=https://i.ibb.co/xYr52nH/image.png&amp;key=b831da97be1791327737169a41a482b6556dbe129f628224da137fa52820996f"></a><br><br>
	 
</p>

<p style="color:#272a34;">
	<strong>Основной язык сайта: </strong>HTML, CSS, JS
</p>

<p style="color:#272a34;">
	<strong>Донат: Т</strong>ребует подключения вручную
</p>

<p style="color:#272a34;">
	<strong>Адаптация: </strong>Имеется, под все устройства
</p>

<p style="color:#272a34;">
	<strong>Комментарии к коду: </strong>Отсутствуют
</p>

<p style="color:rgb(39,42,52);text-align:center;">
	<br><strong style="color:#272a34;">СКАЧАТЬ: </strong><a class="ipsAttachLink" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=20128" data-fileid="20128" rel="">samprp.zip</a><br><br><em style="color:#272a34;">По поводу сайтов и игровых модов на заказ, обращайтесь в телеграм <strong><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly90Lm1lL3N0cmVhdF8wNA==" rel="external nofollow">ТГ</a> </strong>или <strong><a href="https://vk.com/streat_gang" rel="external nofollow">ВКонтакте</a></strong></em>
</p>
]]></description><guid isPermaLink="false">7750</guid><pubDate>Sun, 28 Jan 2024 21:49:11 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x434;&#x441;&#x43A;&#x430;&#x436;&#x438;&#x442;&#x435; &#x441;&#x430;&#x439;&#x442; &#x441; &#x43D;&#x43E;&#x432;&#x43E;&#x439; Freekassa</title><link>https://pawno-rus.com/topic/7489-podskazhite-sayt-s-novoy-freekassa/</link><description><![CDATA[<p>
	Подскажите, сайт любой. с новой Freekassa. Заранее благодарочка.  
</p>]]></description><guid isPermaLink="false">7489</guid><pubDate>Fri, 06 Oct 2023 19:19:02 +0000</pubDate></item></channel></rss>
