<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x413;&#x43E;&#x442;&#x43E;&#x432;&#x44B;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</title><link>https://pawno-rus.com/forum/9-gotovye-resheniya/</link><description>&#x413;&#x43E;&#x442;&#x43E;&#x432;&#x44B;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</description><language>ru</language><item><title>CEF&#xA0;&#xAB;&#x41E;&#x440;&#x451;&#x43B; &#x438; &#x420;&#x435;&#x448;&#x43A;&#x430;&#xBB;</title><link>https://pawno-rus.com/topic/8720-cef%C2%A0%C2%ABoryol-i-reshka%C2%BB/</link><description><![CDATA[
<p>
	Привет! Сливаю вам CEF «Орёл и Решка».
</p>

<p>
	Автор: я
</p>

<p>
	Вот он - <a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9pYmIuY28vM3lLMU54Wlg=" rel="external nofollow">https://ibb.co/3yK1NxZX</a>
</p>

<p>
	Монета <span>крутится</span>
</p>

<p>
	Создайте текстовый файл с любым названием, но добавьте расширение .html. Затем вставьте в него код, который приведен ниже.
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="&lt;!DOCTYPE html&gt;&#13;
&lt;html&gt;&#13;
&lt;head&gt;&#13;
    &lt;meta charset=&quot;UTF-8&quot;&gt;&#13;
    &lt;style&gt;&#13;
        * {&#13;
            margin: 0;&#13;
            padding: 0;&#13;
            box-sizing: border-box;&#13;
        }&#13;
        &#13;
        body {&#13;
            background: transparent;&#13;
            overflow: hidden;&#13;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;&#13;
        }&#13;
        &#13;
        .container {&#13;
            position: absolute;&#13;
            top: 0;&#13;
            left: 0;&#13;
            width: 100vw;&#13;
            height: 100vh;&#13;
            display: flex;&#13;
            flex-direction: column;&#13;
            justify-content: center;&#13;
            align-items: center;&#13;
            background: linear-gradient(135deg, rgba(0,0,0,0.9) 0%, rgba(20,20,30,0.95) 100%);&#13;
            backdrop-filter: blur(5px);&#13;
        }&#13;
        &#13;
        .game-title {&#13;
            position: absolute;&#13;
            top: 30px;&#13;
            left: 0;&#13;
            width: 100%;&#13;
            text-align: center;&#13;
            color: #ffb94f;&#13;
            font-size: 32px;&#13;
            font-weight: bold;&#13;
            text-shadow: 0 0 20px rgba(255, 185, 79, 0.5);&#13;
            letter-spacing: 2px;&#13;
            animation: glow 2s ease-in-out infinite;&#13;
        }&#13;
        &#13;
        @keyframes glow {&#13;
            0%, 100% { text-shadow: 0 0 20px rgba(255, 185, 79, 0.5); }&#13;
            50% { text-shadow: 0 0 40px rgba(255, 185, 79, 0.8); }&#13;
        }&#13;
        &#13;
        .info-panel {&#13;
            position: absolute;&#13;
            top: 100px;&#13;
            left: 50%;&#13;
            transform: translateX(-50%);&#13;
            background: rgba(30, 30, 40, 0.8);&#13;
            backdrop-filter: blur(10px);&#13;
            padding: 15px 40px;&#13;
            border-radius: 50px;&#13;
            border: 1px solid rgba(255, 185, 79, 0.3);&#13;
            box-shadow: 0 10px 30px rgba(0,0,0,0.5);&#13;
            display: flex;&#13;
            gap: 60px;&#13;
            color: white;&#13;
            z-index: 10;&#13;
        }&#13;
        &#13;
        .player-info {&#13;
            text-align: center;&#13;
        }&#13;
        &#13;
        .player-name {&#13;
            font-size: 20px;&#13;
            color: #ffb94f;&#13;
            margin-bottom: 5px;&#13;
            font-weight: bold;&#13;
        }&#13;
        &#13;
        .player-bet {&#13;
            font-size: 18px;&#13;
            color: #ff9900;&#13;
        }&#13;
        &#13;
        .vs {&#13;
            font-size: 24px;&#13;
            font-weight: bold;&#13;
            color: #ffffff;&#13;
            text-shadow: 0 0 15px rgba(255,255,255,0.5);&#13;
            align-self: center;&#13;
        }&#13;
        &#13;
        .coin-container {&#13;
            position: relative;&#13;
            width: 300px;&#13;
            height: 300px;&#13;
            perspective: 1000px;&#13;
            margin: 50px auto;&#13;
            filter: drop-shadow(0 0 30px rgba(255, 215, 0, 0.6));&#13;
        }&#13;
        &#13;
        .coin {&#13;
            position: relative;&#13;
            width: 100%;&#13;
            height: 100%;&#13;
            transform-style: preserve-3d;&#13;
            animation: coinFloat 3s ease-in-out infinite;&#13;
        }&#13;
        &#13;
        .coin.flipping {&#13;
            animation: coinFlip 0.6s cubic-bezier(0.4, 0.0, 0.2, 1) infinite !important;&#13;
        }&#13;
        &#13;
        @keyframes coinFloat {&#13;
            0%, 100% { transform: translateY(0) rotateY(0); }&#13;
            50% { transform: translateY(-15px) rotateY(180deg); }&#13;
        }&#13;
        &#13;
        @keyframes coinFlip {&#13;
            0% { transform: rotateY(0) rotateX(0); }&#13;
            25% { transform: rotateY(720deg) rotateX(15deg); }&#13;
            50% { transform: rotateY(1440deg) rotateX(0); }&#13;
            75% { transform: rotateY(2160deg) rotateX(-15deg); }&#13;
            100% { transform: rotateY(2880deg) rotateX(0); }&#13;
        }&#13;
        &#13;
        .coin-side {&#13;
            position: absolute;&#13;
            width: 100%;&#13;
            height: 100%;&#13;
            backface-visibility: hidden;&#13;
            border-radius: 50%;&#13;
            display: flex;&#13;
            align-items: center;&#13;
            justify-content: center;&#13;
            font-size: 80px;&#13;
            font-weight: bold;&#13;
            text-transform: uppercase;&#13;
            box-shadow: 0 0 30px rgba(0,0,0,0.3);&#13;
        }&#13;
        &#13;
        .heads {&#13;
            background: radial-gradient(circle at 30% 30%, #ffd700, #b8860b);&#13;
            color: #4a2c0d;&#13;
            transform: rotateY(0deg);&#13;
            border: 3px solid #fff5b0;&#13;
            text-shadow: 2px 2px 4px rgba(255,255,255,0.5);&#13;
        }&#13;
        &#13;
        .heads::before {&#13;
            content: &quot;●&quot;;&#13;
            position: absolute;&#13;
            top: 50%;&#13;
            left: 50%;&#13;
            transform: translate(-50%, -50%);&#13;
            font-size: 120px;&#13;
            opacity: 0.2;&#13;
            color: #fff5b0;&#13;
        }&#13;
        &#13;
        .tails {&#13;
            background: radial-gradient(circle at 70% 70%, #c0c0c0, #505050);&#13;
            color: #2f2f2f;&#13;
            transform: rotateY(180deg);&#13;
            border: 3px solid #e0e0e0;&#13;
            text-shadow: 2px 2px 4px rgba(0,0,0,0.3);&#13;
        }&#13;
        &#13;
        .tails::before {&#13;
            content: &quot;●&quot;;&#13;
            position: absolute;&#13;
            top: 50%;&#13;
            left: 50%;&#13;
            transform: translate(-50%, -50%);&#13;
            font-size: 120px;&#13;
            opacity: 0.2;&#13;
            color: #000000;&#13;
        }&#13;
        &#13;
        .result-container {&#13;
            position: absolute;&#13;
            top: 50%;&#13;
            left: 50%;&#13;
            transform: translate(-50%, -50%);&#13;
            width: 100%;&#13;
            height: 100%;&#13;
            display: flex;&#13;
            flex-direction: column;&#13;
            justify-content: center;&#13;
            align-items: center;&#13;
            background: rgba(0,0,0,0.7);&#13;
            backdrop-filter: blur(8px);&#13;
            opacity: 0;&#13;
            transition: opacity 0.5s ease;&#13;
            pointer-events: none;&#13;
            z-index: 20;&#13;
        }&#13;
        &#13;
        .result-container.show {&#13;
            opacity: 1;&#13;
            pointer-events: all;&#13;
        }&#13;
        &#13;
        .result-text {&#13;
            font-size: 48px;&#13;
            font-weight: bold;&#13;
            margin-bottom: 20px;&#13;
            animation: resultPop 0.5s ease;&#13;
        }&#13;
        &#13;
        .winner-text {&#13;
            color: #ff9900;&#13;
            text-shadow: 0 0 30px rgba(255, 153, 0, 0.8);&#13;
        }&#13;
        &#13;
        .loser-text {&#13;
            color: #FF5733;&#13;
            text-shadow: 0 0 30px rgba(255, 87, 51, 0.8);&#13;
        }&#13;
        &#13;
        .result-amount {&#13;
            font-size: 36px;&#13;
            color: #ffffff;&#13;
            text-shadow: 0 0 20px rgba(255,255,255,0.5);&#13;
        }&#13;
        &#13;
        @keyframes resultPop {&#13;
            0% { transform: scale(0); opacity: 0; }&#13;
            50% { transform: scale(1.2); }&#13;
            100% { transform: scale(1); opacity: 1; }&#13;
        }&#13;
        &#13;
        .particles {&#13;
            position: absolute;&#13;
            width: 100%;&#13;
            height: 100%;&#13;
            pointer-events: none;&#13;
        }&#13;
        &#13;
        .particle {&#13;
            position: absolute;&#13;
            width: 4px;&#13;
            height: 4px;&#13;
            background: gold;&#13;
            border-radius: 50%;&#13;
            animation: particleFloat 2s ease-out forwards;&#13;
        }&#13;
        &#13;
        @keyframes particleFloat {&#13;
            0% {&#13;
                transform: translateY(0) scale(1);&#13;
                opacity: 1;&#13;
            }&#13;
            100% {&#13;
                transform: translateY(-100px) scale(0);&#13;
                opacity: 0;&#13;
            }&#13;
        }&#13;
    &lt;/style&gt;&#13;
&lt;/head&gt;&#13;
&lt;body&gt;&#13;
    &lt;div class=&quot;container&quot; id=&quot;container&quot;&gt;&#13;
        &lt;div class=&quot;game-title&quot;&gt;ОРЛЯНКА&lt;/div&gt;&#13;
        &#13;
        &lt;div class=&quot;info-panel&quot; id=&quot;infoPanel&quot;&gt;&#13;
            &lt;div class=&quot;player-info&quot; id=&quot;player1Info&quot;&gt;&#13;
                &lt;div class=&quot;player-name&quot; id=&quot;player1Name&quot;&gt;Игрок 1&lt;/div&gt;&#13;
                &lt;div class=&quot;player-bet&quot; id=&quot;player1Bet&quot;&gt;0$&lt;/div&gt;&#13;
            &lt;/div&gt;&#13;
            &lt;div class=&quot;vs&quot;&gt;VS&lt;/div&gt;&#13;
            &lt;div class=&quot;player-info&quot; id=&quot;player2Info&quot;&gt;&#13;
                &lt;div class=&quot;player-name&quot; id=&quot;player2Name&quot;&gt;Игрок 2&lt;/div&gt;&#13;
                &lt;div class=&quot;player-bet&quot; id=&quot;player2Bet&quot;&gt;0$&lt;/div&gt;&#13;
            &lt;/div&gt;&#13;
        &lt;/div&gt;&#13;
        &#13;
        &lt;div class=&quot;coin-container&quot;&gt;&#13;
            &lt;div class=&quot;coin&quot; id=&quot;coin&quot;&gt;&#13;
                &lt;div class=&quot;coin-side heads&quot;&gt;О&lt;/div&gt;&#13;
                &lt;div class=&quot;coin-side tails&quot;&gt;Р&lt;/div&gt;&#13;
            &lt;/div&gt;&#13;
        &lt;/div&gt;&#13;
        &#13;
        &lt;div class=&quot;result-container&quot; id=&quot;resultContainer&quot;&gt;&#13;
            &lt;div class=&quot;result-text&quot; id=&quot;resultText&quot;&gt;&lt;/div&gt;&#13;
            &lt;div class=&quot;result-amount&quot; id=&quot;resultAmount&quot;&gt;&lt;/div&gt;&#13;
        &lt;/div&gt;&#13;
        &#13;
        &lt;div class=&quot;particles&quot; id=&quot;particles&quot;&gt;&lt;/div&gt;&#13;
    &lt;/div&gt;&#13;
    &#13;
    &lt;script&gt;&#13;
        const coin = document.getElementById('coin');&#13;
        const player1Name = document.getElementById('player1Name');&#13;
        const player2Name = document.getElementById('player2Name');&#13;
        const player1Bet = document.getElementById('player1Bet');&#13;
        const player2Bet = document.getElementById('player2Bet');&#13;
        const resultContainer = document.getElementById('resultContainer');&#13;
        const resultText = document.getElementById('resultText');&#13;
        const resultAmount = document.getElementById('resultAmount');&#13;
        const particles = document.getElementById('particles');&#13;
        &#13;
        let isFlipping = false;&#13;
        &#13;
        function createParticles() {&#13;
            for(let i = 0; i &lt; 30; i++) {&#13;
                const particle = document.createElement('div');&#13;
                particle.className = 'particle';&#13;
                particle.style.left = Math.random() * 100 + '%';&#13;
                particle.style.top = Math.random() * 100 + '%';&#13;
                particle.style.background = `hsl(${Math.random() * 60 + 30}, 100%, 50%)`;&#13;
                particle.style.animationDelay = Math.random() * 0.5 + 's';&#13;
                particles.appendChild(particle);&#13;
                &#13;
                setTimeout(() =&gt; particle.remove(), 2000);&#13;
            }&#13;
        }&#13;
        &#13;
        window.external.on('init', (data) =&gt; {&#13;
            player1Name.textContent = data.player1;&#13;
            player2Name.textContent = data.player2;&#13;
            player1Bet.textContent = data.bet + '$';&#13;
            player2Bet.textContent = data.bet + '$';&#13;
            &#13;
            // Начинаем крутить монету&#13;
            coin.classList.add('flipping');&#13;
            isFlipping = true;&#13;
            createParticles();&#13;
        });&#13;
        &#13;
        window.external.on('result', (data) =&gt; {&#13;
            coin.classList.remove('flipping');&#13;
            isFlipping = false;&#13;
            &#13;
            // Останавливаем монету на нужной стороне&#13;
            const rotation = data.result === 0 ? 0 : 1800;&#13;
            coin.style.transform = `rotateY(${rotation}deg)`;&#13;
            &#13;
            // Показываем результат&#13;
            resultContainer.classList.add('show');&#13;
            &#13;
            if(data.winner === data.player1) {&#13;
                resultText.textContent = 'ПОБЕДИЛ ' + data.player1;&#13;
                resultText.className = 'result-text winner-text';&#13;
                resultAmount.textContent = '+' + (data.bet * 2) + '$';&#13;
            } else {&#13;
                resultText.textContent = 'ПОБЕДИЛ ' + data.player2;&#13;
                resultText.className = 'result-text winner-text';&#13;
                resultAmount.textContent = '+' + (data.bet * 2) + '$';&#13;
            }&#13;
            &#13;
            createParticles();&#13;
            &#13;
            // Закрываем окно через 4 секунды&#13;
            setTimeout(() =&gt; window.external.emit('close'), 4000);&#13;
        });&#13;
        &#13;
        // Эффекты при наведении&#13;
        coin.addEventListener('mouseenter', () =&gt; {&#13;
            if(!isFlipping) {&#13;
                coin.style.transform = 'scale(1.1)';&#13;
            }&#13;
        });&#13;
        &#13;
        coin.addEventListener('mouseleave', () =&gt; {&#13;
            if(!isFlipping) {&#13;
                coin.style.transform = 'scale(1)';&#13;
            }&#13;
        });&#13;
    &lt;/script&gt;&#13;
&lt;/body&gt;&#13;
&lt;/html&gt;">

<span><span class="mtk1">&lt;!DOCTYPE html&gt;</span></span>
<span><span class="mtk1">&lt;html&gt;</span></span>
<span><span class="mtk1">&lt;head&gt;</span></span>
<span><span class="mtk1">    &lt;meta charset=</span><span class="mtk20">"UTF-8"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">    &lt;style&gt;</span></span>
<span><span class="mtk1">        * {</span></span>
<span><span class="mtk1">            margin: </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            padding: </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            box-sizing: border-box;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        body {</span></span>
<span><span class="mtk1">            background: transparent;</span></span>
<span><span class="mtk1">            overflow: hidden;</span></span>
<span><span class="mtk1">            font-family: </span><span class="mtk20">'</span><span class="mtk1">Segoe UI</span><span class="mtk20">'</span><span class="mtk1">, Tahoma, Geneva, Verdana, sans-serif;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .container {</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            top: </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            left: </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">100</span><span class="mtk1">vw;</span></span>
<span><span class="mtk1">            height: </span><span class="mtk7">100</span><span class="mtk1">vh;</span></span>
<span><span class="mtk1">            display: flex;</span></span>
<span><span class="mtk1">            flex-direction: column;</span></span>
<span><span class="mtk1">            justify-content: center;</span></span>
<span><span class="mtk1">            align-items: center;</span></span>
<span><span class="mtk1">            background: linear-gradient(</span><span class="mtk7">135</span><span class="mtk1">deg, rgba(</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0.9</span><span class="mtk1">) </span><span class="mtk7">0</span><span class="mtk1">%, rgba(</span><span class="mtk7">20</span><span class="mtk1">,</span><span class="mtk7">20</span><span class="mtk1">,</span><span class="mtk7">30</span><span class="mtk1">,</span><span class="mtk7">0.95</span><span class="mtk1">) </span><span class="mtk7">100</span><span class="mtk1">%);</span></span>
<span><span class="mtk1">            backdrop-filter: blur(</span><span class="mtk7">5</span><span class="mtk1">px);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .game-title {</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            top: </span><span class="mtk7">30</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            left: </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            text-align: center;</span></span>
<span><span class="mtk1">            color: #ffb94f;</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">32</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            font-weight: bold;</span></span>
<span><span class="mtk1">            text-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">20</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">, </span><span class="mtk7">185</span><span class="mtk1">, </span><span class="mtk7">79</span><span class="mtk1">, </span><span class="mtk7">0.5</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            letter-spacing: </span><span class="mtk7">2</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            animation: glow </span><span class="mtk7">2</span><span class="mtk1">s ease-</span><span class="mtk6">in</span><span class="mtk1">-out infinite;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        @keyframes glow {</span></span>
<span><span class="mtk1">            </span><span class="mtk7">0</span><span class="mtk1">%, </span><span class="mtk7">100</span><span class="mtk1">% { text-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">20</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">, </span><span class="mtk7">185</span><span class="mtk1">, </span><span class="mtk7">79</span><span class="mtk1">, </span><span class="mtk7">0.5</span><span class="mtk1">); }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">50</span><span class="mtk1">% { text-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">40</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">, </span><span class="mtk7">185</span><span class="mtk1">, </span><span class="mtk7">79</span><span class="mtk1">, </span><span class="mtk7">0.8</span><span class="mtk1">); }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .info-panel {</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            top: </span><span class="mtk7">100</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            left: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            transform: translateX(-</span><span class="mtk7">50</span><span class="mtk1">%);</span></span>
<span><span class="mtk1">            background: rgba(</span><span class="mtk7">30</span><span class="mtk1">, </span><span class="mtk7">30</span><span class="mtk1">, </span><span class="mtk7">40</span><span class="mtk1">, </span><span class="mtk7">0.8</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            backdrop-filter: blur(</span><span class="mtk7">10</span><span class="mtk1">px);</span></span>
<span><span class="mtk1">            padding: </span><span class="mtk7">15</span><span class="mtk1">px </span><span class="mtk7">40</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            border-radius: </span><span class="mtk7">50</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            border: </span><span class="mtk7">1</span><span class="mtk1">px solid rgba(</span><span class="mtk7">255</span><span class="mtk1">, </span><span class="mtk7">185</span><span class="mtk1">, </span><span class="mtk7">79</span><span class="mtk1">, </span><span class="mtk7">0.3</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            box-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">10</span><span class="mtk1">px </span><span class="mtk7">30</span><span class="mtk1">px rgba(</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0.5</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            display: flex;</span></span>
<span><span class="mtk1">            gap: </span><span class="mtk7">60</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            color: white;</span></span>
<span><span class="mtk1">            z-index: </span><span class="mtk7">10</span><span class="mtk1">;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .player-info {</span></span>
<span><span class="mtk1">            text-align: center;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .player-name {</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">20</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            color: #ffb94f;</span></span>
<span><span class="mtk1">            margin-bottom: </span><span class="mtk7">5</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            font-weight: bold;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .player-bet {</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">18</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            color: #ff9900;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .vs {</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">24</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            font-weight: bold;</span></span>
<span><span class="mtk1">            color: #ffffff;</span></span>
<span><span class="mtk1">            text-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">15</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">0.5</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            align-self: center;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .coin-container {</span></span>
<span><span class="mtk1">            position: relative;</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">300</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            height: </span><span class="mtk7">300</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            perspective: </span><span class="mtk7">1000</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            margin: </span><span class="mtk7">50</span><span class="mtk1">px </span><span class="mtk6">auto</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            filter: drop-shadow(</span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">30</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">, </span><span class="mtk7">215</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">0.6</span><span class="mtk1">));</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .coin {</span></span>
<span><span class="mtk1">            position: relative;</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            height: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            transform-style: preserve-</span><span class="mtk7">3</span><span class="mtk1">d;</span></span>
<span><span class="mtk1">            animation: coinFloat </span><span class="mtk7">3</span><span class="mtk1">s ease-</span><span class="mtk6">in</span><span class="mtk1">-out infinite;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .coin.flipping {</span></span>
<span><span class="mtk1">            animation: coinFlip </span><span class="mtk7">0.6</span><span class="mtk1">s cubic-bezier(</span><span class="mtk7">0.4</span><span class="mtk1">, </span><span class="mtk7">0.0</span><span class="mtk1">, </span><span class="mtk7">0.2</span><span class="mtk1">, </span><span class="mtk7">1</span><span class="mtk1">) infinite !important;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        @keyframes coinFloat {</span></span>
<span><span class="mtk1">            </span><span class="mtk7">0</span><span class="mtk1">%, </span><span class="mtk7">100</span><span class="mtk1">% { transform: translateY(</span><span class="mtk7">0</span><span class="mtk1">) rotateY(</span><span class="mtk7">0</span><span class="mtk1">); }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">50</span><span class="mtk1">% { transform: translateY(-</span><span class="mtk7">15</span><span class="mtk1">px) rotateY(</span><span class="mtk7">180</span><span class="mtk1">deg); }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        @keyframes coinFlip {</span></span>
<span><span class="mtk1">            </span><span class="mtk7">0</span><span class="mtk1">% { transform: rotateY(</span><span class="mtk7">0</span><span class="mtk1">) rotateX(</span><span class="mtk7">0</span><span class="mtk1">); }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">25</span><span class="mtk1">% { transform: rotateY(</span><span class="mtk7">720</span><span class="mtk1">deg) rotateX(</span><span class="mtk7">15</span><span class="mtk1">deg); }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">50</span><span class="mtk1">% { transform: rotateY(</span><span class="mtk7">1440</span><span class="mtk1">deg) rotateX(</span><span class="mtk7">0</span><span class="mtk1">); }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">75</span><span class="mtk1">% { transform: rotateY(</span><span class="mtk7">2160</span><span class="mtk1">deg) rotateX(-</span><span class="mtk7">15</span><span class="mtk1">deg); }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">100</span><span class="mtk1">% { transform: rotateY(</span><span class="mtk7">2880</span><span class="mtk1">deg) rotateX(</span><span class="mtk7">0</span><span class="mtk1">); }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .coin-side {</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            height: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            backface-visibility: hidden;</span></span>
<span><span class="mtk1">            border-radius: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            display: flex;</span></span>
<span><span class="mtk1">            align-items: center;</span></span>
<span><span class="mtk1">            justify-content: center;</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">80</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            font-weight: bold;</span></span>
<span><span class="mtk1">            text-transform: uppercase;</span></span>
<span><span class="mtk1">            box-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">30</span><span class="mtk1">px rgba(</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0.3</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .heads {</span></span>
<span><span class="mtk1">            background: radial-gradient(circle at </span><span class="mtk7">30</span><span class="mtk1">% </span><span class="mtk7">30</span><span class="mtk1">%, #ffd700, #b8860b);</span></span>
<span><span class="mtk1">            color: #</span><span class="mtk7">4</span><span class="mtk1">a2c0d;</span></span>
<span><span class="mtk1">            transform: rotateY(</span><span class="mtk7">0</span><span class="mtk1">deg);</span></span>
<span><span class="mtk1">            border: </span><span class="mtk7">3</span><span class="mtk1">px solid #fff5b0;</span></span>
<span><span class="mtk1">            text-shadow: </span><span class="mtk7">2</span><span class="mtk1">px </span><span class="mtk7">2</span><span class="mtk1">px </span><span class="mtk7">4</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">0.5</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .heads::before {</span></span>
<span><span class="mtk1">            content: </span><span class="mtk20">"●"</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            top: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            left: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            transform: translate(-</span><span class="mtk7">50</span><span class="mtk1">%, -</span><span class="mtk7">50</span><span class="mtk1">%);</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">120</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            opacity: </span><span class="mtk7">0.2</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            color: #fff5b0;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .tails {</span></span>
<span><span class="mtk1">            background: radial-gradient(circle at </span><span class="mtk7">70</span><span class="mtk1">% </span><span class="mtk7">70</span><span class="mtk1">%, #c0c0c0, #</span><span class="mtk7">505050</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            color: #</span><span class="mtk7">2</span><span class="mtk1">f2f2f;</span></span>
<span><span class="mtk1">            transform: rotateY(</span><span class="mtk7">180</span><span class="mtk1">deg);</span></span>
<span><span class="mtk1">            border: </span><span class="mtk7">3</span><span class="mtk1">px solid #e0e0e0;</span></span>
<span><span class="mtk1">            text-shadow: </span><span class="mtk7">2</span><span class="mtk1">px </span><span class="mtk7">2</span><span class="mtk1">px </span><span class="mtk7">4</span><span class="mtk1">px rgba(</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0.3</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .tails::before {</span></span>
<span><span class="mtk1">            content: </span><span class="mtk20">"●"</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            top: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            left: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            transform: translate(-</span><span class="mtk7">50</span><span class="mtk1">%, -</span><span class="mtk7">50</span><span class="mtk1">%);</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">120</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            opacity: </span><span class="mtk7">0.2</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            color: #</span><span class="mtk7">000000</span><span class="mtk1">;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .result-container {</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            top: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            left: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            transform: translate(-</span><span class="mtk7">50</span><span class="mtk1">%, -</span><span class="mtk7">50</span><span class="mtk1">%);</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            height: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            display: flex;</span></span>
<span><span class="mtk1">            flex-direction: column;</span></span>
<span><span class="mtk1">            justify-content: center;</span></span>
<span><span class="mtk1">            align-items: center;</span></span>
<span><span class="mtk1">            background: rgba(</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0</span><span class="mtk1">,</span><span class="mtk7">0.7</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            backdrop-filter: blur(</span><span class="mtk7">8</span><span class="mtk1">px);</span></span>
<span><span class="mtk1">            opacity: </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            transition: opacity </span><span class="mtk7">0.5</span><span class="mtk1">s ease;</span></span>
<span><span class="mtk1">            pointer-events: none;</span></span>
<span><span class="mtk1">            z-index: </span><span class="mtk7">20</span><span class="mtk1">;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .result-container.show {</span></span>
<span><span class="mtk1">            opacity: </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            pointer-events: all;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .result-text {</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">48</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            font-weight: bold;</span></span>
<span><span class="mtk1">            margin-bottom: </span><span class="mtk7">20</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            animation: resultPop </span><span class="mtk7">0.5</span><span class="mtk1">s ease;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .winner-text {</span></span>
<span><span class="mtk1">            color: #ff9900;</span></span>
<span><span class="mtk1">            text-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">30</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">, </span><span class="mtk7">153</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">0.8</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .loser-text {</span></span>
<span><span class="mtk1">            color: #FF5733;</span></span>
<span><span class="mtk1">            text-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">30</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">, </span><span class="mtk7">87</span><span class="mtk1">, </span><span class="mtk7">51</span><span class="mtk1">, </span><span class="mtk7">0.8</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .result-amount {</span></span>
<span><span class="mtk1">            font-size: </span><span class="mtk7">36</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            color: #ffffff;</span></span>
<span><span class="mtk1">            text-shadow: </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">0</span><span class="mtk1"> </span><span class="mtk7">20</span><span class="mtk1">px rgba(</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">255</span><span class="mtk1">,</span><span class="mtk7">0.5</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        @keyframes resultPop {</span></span>
<span><span class="mtk1">            </span><span class="mtk7">0</span><span class="mtk1">% { transform: scale(</span><span class="mtk7">0</span><span class="mtk1">); opacity: </span><span class="mtk7">0</span><span class="mtk1">; }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">50</span><span class="mtk1">% { transform: scale(</span><span class="mtk7">1.2</span><span class="mtk1">); }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">100</span><span class="mtk1">% { transform: scale(</span><span class="mtk7">1</span><span class="mtk1">); opacity: </span><span class="mtk7">1</span><span class="mtk1">; }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .particles {</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            height: </span><span class="mtk7">100</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            pointer-events: none;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        .particle {</span></span>
<span><span class="mtk1">            position: absolute;</span></span>
<span><span class="mtk1">            width: </span><span class="mtk7">4</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            height: </span><span class="mtk7">4</span><span class="mtk1">px;</span></span>
<span><span class="mtk1">            background: gold;</span></span>
<span><span class="mtk1">            border-radius: </span><span class="mtk7">50</span><span class="mtk1">%;</span></span>
<span><span class="mtk1">            animation: particleFloat </span><span class="mtk7">2</span><span class="mtk1">s ease-out forwards;</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        @keyframes particleFloat {</span></span>
<span><span class="mtk1">            </span><span class="mtk7">0</span><span class="mtk1">% {</span></span>
<span><span class="mtk1">                transform: translateY(</span><span class="mtk7">0</span><span class="mtk1">) scale(</span><span class="mtk7">1</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                opacity: </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">            </span><span class="mtk7">100</span><span class="mtk1">% {</span></span>
<span><span class="mtk1">                transform: translateY(-</span><span class="mtk7">100</span><span class="mtk1">px) scale(</span><span class="mtk7">0</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                opacity: </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">    &lt;/style&gt;</span></span>
<span><span class="mtk1">&lt;/head&gt;</span></span>
<span><span class="mtk1">&lt;body&gt;</span></span>
<span><span class="mtk1">    &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"container"</span><span class="mtk1"> id=</span><span class="mtk20">"container"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">        &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"game-title"</span><span class="mtk1">&gt;ОРЛЯНКА&lt;/div&gt;</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"info-panel"</span><span class="mtk1"> id=</span><span class="mtk20">"infoPanel"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">            &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"player-info"</span><span class="mtk1"> id=</span><span class="mtk20">"player1Info"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">                &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"player-name"</span><span class="mtk1"> id=</span><span class="mtk20">"player1Name"</span><span class="mtk1">&gt;Игрок </span><span class="mtk7">1</span><span class="mtk1">&lt;/div&gt;</span></span>
<span><span class="mtk1">                &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"player-bet"</span><span class="mtk1"> id=</span><span class="mtk20">"player1Bet"</span><span class="mtk1">&gt;</span><span class="mtk7">0</span><span class="mtk1">$&lt;/div&gt;</span></span>
<span><span class="mtk1">            &lt;/div&gt;</span></span>
<span><span class="mtk1">            &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"vs"</span><span class="mtk1">&gt;VS&lt;/div&gt;</span></span>
<span><span class="mtk1">            &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"player-info"</span><span class="mtk1"> id=</span><span class="mtk20">"player2Info"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">                &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"player-name"</span><span class="mtk1"> id=</span><span class="mtk20">"player2Name"</span><span class="mtk1">&gt;Игрок </span><span class="mtk7">2</span><span class="mtk1">&lt;/div&gt;</span></span>
<span><span class="mtk1">                &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"player-bet"</span><span class="mtk1"> id=</span><span class="mtk20">"player2Bet"</span><span class="mtk1">&gt;</span><span class="mtk7">0</span><span class="mtk1">$&lt;/div&gt;</span></span>
<span><span class="mtk1">            &lt;/div&gt;</span></span>
<span><span class="mtk1">        &lt;/div&gt;</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"coin-container"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">            &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"coin"</span><span class="mtk1"> id=</span><span class="mtk20">"coin"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">                &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"coin-side heads"</span><span class="mtk1">&gt;О&lt;/div&gt;</span></span>
<span><span class="mtk1">                &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"coin-side tails"</span><span class="mtk1">&gt;Р&lt;/div&gt;</span></span>
<span><span class="mtk1">            &lt;/div&gt;</span></span>
<span><span class="mtk1">        &lt;/div&gt;</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"result-container"</span><span class="mtk1"> id=</span><span class="mtk20">"resultContainer"</span><span class="mtk1">&gt;</span></span>
<span><span class="mtk1">            &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"result-text"</span><span class="mtk1"> id=</span><span class="mtk20">"resultText"</span><span class="mtk1">&gt;&lt;/div&gt;</span></span>
<span><span class="mtk1">            &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"result-amount"</span><span class="mtk1"> id=</span><span class="mtk20">"resultAmount"</span><span class="mtk1">&gt;&lt;/div&gt;</span></span>
<span><span class="mtk1">        &lt;/div&gt;</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        &lt;div </span><span class="mtk6">class</span><span class="mtk1">=</span><span class="mtk20">"particles"</span><span class="mtk1"> id=</span><span class="mtk20">"particles"</span><span class="mtk1">&gt;&lt;/div&gt;</span></span>
<span><span class="mtk1">    &lt;/div&gt;</span></span>
<span><span class="mtk1">    </span></span>
<span><span class="mtk1">    &lt;script&gt;</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> coin = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">coin</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> player1Name = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">player1Name</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> player2Name = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">player2Name</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> player1Bet = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">player1Bet</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> player2Bet = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">player2Bet</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> resultContainer = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">resultContainer</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> resultText = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">resultText</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> resultAmount = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">resultAmount</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span><span class="mtk6">const</span><span class="mtk1"> particles = document.getElementById(</span><span class="mtk20">'</span><span class="mtk1">particles</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        let isFlipping = </span><span class="mtk6">false</span><span class="mtk1">;</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        function createParticles() {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">for</span><span class="mtk1">(let i = </span><span class="mtk7">0</span><span class="mtk1">; i &lt; </span><span class="mtk7">30</span><span class="mtk1">; i++) {</span></span>
<span><span class="mtk1">                </span><span class="mtk6">const</span><span class="mtk1"> particle = document.createElement(</span><span class="mtk20">'</span><span class="mtk1">div</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">                particle.className = </span><span class="mtk20">'</span><span class="mtk1">particle</span><span class="mtk20">'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                particle.style.left = Math.random(</span><span class="mtk1">) * </span><span class="mtk7">100</span><span class="mtk1"> + </span><span class="mtk20">'%'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                particle.style.top = Math.random()</span><span class="mtk1"> * </span><span class="mtk7">100</span><span class="mtk1"> + </span><span class="mtk20">'%'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                particle.style.background = `hsl($</span><span class="mtk1">{Math.random() * </span><span class="mtk7">60</span><span class="mtk1"> + </span><span class="mtk7">30</span><span class="mtk1">}, </span><span class="mtk7">100</span><span class="mtk1">%, </span><span class="mtk7">50</span><span class="mtk1">%)`;</span></span>
<span><span class="mtk1">                particle.style.animationDelay = Ma</span><span class="mtk1">th.random() * </span><span class="mtk7">0.5</span><span class="mtk1"> + </span><span class="mtk20">'s'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                particles.appendChild(particle);</span></span>
<span><span class="mtk1">                </span></span>
<span><span class="mtk1">                setTimeout(() =&gt; particle.remove()</span><span class="mtk1">, </span><span class="mtk7">2000</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            }</span></span>
<span><span class="mtk1">        }</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        window.external.on(</span><span class="mtk20">'</span><span class="mtk1">init</span><span class="mtk20">'</span><span class="mtk1">, (data) =&gt; {</span></span>
<span><span class="mtk1">            player1Name.textContent = data.player1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            player2Name.textContent = data.player2</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            player1Bet.textContent = data.bet + </span><span class="mtk20">'$'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            player2Bet.textContent = data.bet + </span><span class="mtk20">'$'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            </span></span>
<span><span class="mtk1">            </span><span class="mtk8">// Начинаем крутить монету</span></span>
<span><span class="mtk1">            coin.classList.add(</span><span class="mtk20">'</span><span class="mtk1">flipping</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            isFlipping = </span><span class="mtk6">true</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            createParticles();</span></span>
<span><span class="mtk1">        });</span></span>
<span><span class="mtk1">        </span></span>
<span><span class="mtk1">        window.external.on(</span><span class="mtk20">'</span><span class="mtk1">result</span><span class="mtk20">'</span><span class="mtk1">, (data) =&gt; {</span></span>
<span><span class="mtk1">            coin.classList.remove(</span><span class="mtk20">'</span><span class="mtk1">flipping</span><span class="mtk20">'</span><span class="mtk1">);</span></span>
<span><span class="mtk1">            isFlipping = </span><span class="mtk6">false</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            </span></span>
<span><span class="mtk1">            </span><span class="mtk8">// Останавливаем монету на нужной стороне</span></span>
<span><span class="mtk1">            </span><span class="mtk6">const</span><span class="mtk1"> rotation = data.result === </span><span class="mtk7">0</span><span class="mtk1"> ? </span><span class="mtk7">0</span><span class="mtk1"> : </span><span class="mtk7">1800</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            coin.style.transform = `rotateY(${rota</span><span class="mtk1">tion}deg)`;</span></span>
<span><span class="mtk1">            </span></span>
<span><span class="mtk1">            </span><span class="mtk8">// Показываем результат</span></span>
<span><span class="mtk1">            resultContainer.classList.add(</span><span class="mtk20">'</span><span class="mtk1">show</span><span class="mtk20">'</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">(data.winner === data.player1) {</span></span>
<span><span class="mtk1">                resultText.textContent = </span><span class="mtk20">'</span><span class="mtk1">ПОБЕДИЛ </span><span class="mtk20">'</span><span class="mtk1"> + data.player1;</span></span>
<span><span class="mtk1">                resultText.className = </span><span class="mtk20">'</span><span class="mtk1">result-text winner-text</span><span class="mtk20">'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                resultAmount.textContent = </span><span class="mtk20">'+'</span><span class="mtk1"> + (data.bet * </span><span class="mtk7">2</span><span class="mtk1">) + </span><span class="mtk20">'$'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">            } </span><span class="mtk6">else</span><span class="mtk1"> {</span></span>
<span><span class="mtk1">                resultText.textContent = </span><span class="mtk20">'</span><span class="mtk1">ПОБЕДИЛ </span><span class="mtk20">'</span><span class="mtk1"> + data.player2;</span></span>
<span><span class="mtk1">                resultText.className = </span><span class="mtk20">'</span><span class="mtk1">result-text winner-text</span><span class="mtk20">'</span><span class="mtk1">;</span></span>
<span><span class="mtk1">                resultAmount.textContent = </span><span class="mtk20">'+'</span><span class="mtk1"> + (data.bet * </span><span class="mtk7">2</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">            createParticles();</span></span>
<span><span class="mtk1">            </span></span>
<span><span class="mtk1">            </span><span class="mtk8">// Закрываем окно через 4 секунды</span></span>
<span><span class="mtk1">            setTimeout(() =&gt; window.external.emit(</span><span class="mtk20">'</span><span class="mtk1">close</span><span class="mtk20">'</span><span class="mtk1">), </span><span class="mtk7">4000</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="mtk8">// Эффекты при наведении</span></span>
<span><span class="mtk1">        coin.addEventListener(</span><span class="mtk20">'</span><span class="mtk1">mouseenter</span><span class="mtk20">'</span><span class="mtk1">, () =&gt; {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(!isFlipping) {</span></span>
<span><span class="mtk1">                coin.style.transform = </span><span class="mtk20">'</span><span class="mtk1">scale(</span><span class="mtk7">1.1</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>
<span><span class="mtk1">        coin.addEventListener(</span><span class="mtk20">'</span><span class="mtk1">mouseleave</span><span class="mtk20">'</span><span class="mtk1">, () =&gt; {</span></span>
<span><span class="mtk1">            </span><span class="mtk6">if</span><span class="mtk1">(!isFlipping) {</span></span>
<span><span class="mtk1">                coin.style.transform = </span><span class="mtk20">'</span><span class="mtk1">scale(</span><span class="mtk7">1</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">    &lt;/script&gt;</span></span>
<span><span class="mtk1">&lt;/body&gt;</span></span>
<span><span class="mtk1">&lt;/html&gt;</span></span>
</pre>

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

<p>
	 
</p>
]]></description><guid isPermaLink="false">8720</guid><pubDate>Mon, 02 Mar 2026 16:03:45 +0000</pubDate></item><item><title>&#x421;ef "&#x421;&#x43F;&#x438;&#x434;&#x43E;&#x43C;&#x435;&#x442;&#x440;"</title><link>https://pawno-rus.com/topic/8731-sef-spidometr/</link><description><![CDATA[
<p>
	Здравствуйте, сливаю вам cef спидометр! 
</p>

<p>
	Автор: я
</p>

<p>
	 
</p>

<p>
	pawn код
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			#include &lt;a_samp&gt;<br>
			#include &lt;a_http&gt;<br>
			#include &lt;a_players&gt;
		</p>

		<p>
			#define SPEEDOMETER_URL "http://localhost/samp/cef/speedometer.html"<br>
			#define UPDATE_TIME 100
		</p>

		<p>
			enum PlayerData<br>
			{<br>
			    CEFBrowser,<br>
			    bool:InCar,<br>
			    Speed,<br>
			    Gear,<br>
			    Float:Fuel,<br>
			    SpeedTimer<br>
			}<br>
			new pData[MAX_PLAYERS][PlayerData];
		</p>

		<p>
			// Создание CEF браузера<br>
			stock CreateSpeedometer(playerid)<br>
			{<br>
			    if(!IsPlayerConnected(playerid)) return 0;<br>
			    <br>
			    // Создаем CEF браузер (пример функции)<br>
			    pData[playerid][CEFBrowser] = cef_create_browser(<br>
			        playerid, <br>
			        0x12345, <br>
			        SPEEDOMETER_URL,<br>
			        true, // прозрачный фон<br>
			        false // без фокуса<br>
			    );<br>
			    <br>
			    // Прячем сначала<br>
			    cef_hide_browser(playerid, pData[playerid][CEFBrowser]);<br>
			    <br>
			    // Запускаем таймер обновления<br>
			    pData[playerid][SpeedTimer] = SetTimerEx("UpdateSpeedometer", UPDATE_TIME, true, "i", playerid);<br>
			    <br>
			    return 1;<br>
			}
		</p>

		<p>
			// Удаление CEF браузера<br>
			stock DestroySpeedometer(playerid)<br>
			{<br>
			    if(pData[playerid][CEFBrowser])<br>
			    {<br>
			        cef_destroy_browser(playerid, pData[playerid][CEFBrowser]);<br>
			        KillTimer(pData[playerid][SpeedTimer]);<br>
			        pData[playerid][CEFBrowser] = 0;<br>
			    }<br>
			}
		</p>

		<p>
			// Обновление данных<br>
			forward UpdateSpeedometer(playerid);<br>
			public UpdateSpeedometer(playerid)<br>
			{<br>
			    if(!IsPlayerConnected(playerid)) return 0;<br>
			    <br>
			    new vehicleid = GetPlayerVehicleID(playerid);<br>
			    <br>
			    if(vehicleid &amp;&amp; GetPlayerState(playerid) == PLAYER_STATE_DRIVER)<br>
			    {<br>
			        if(!pData[playerid][InCar])<br>
			        {<br>
			            pData[playerid][InCar] = true;<br>
			            cef_show_browser(playerid, pData[playerid][CEFBrowser]);<br>
			        }<br>
			        <br>
			        // Скорость<br>
			        new Float:vel[3];<br>
			        GetVehicleVelocity(vehicleid, vel[0], vel[1], vel[2]);<br>
			        pData[playerid][Speed] = floatround(floatsqroot(vel[0]*vel[0] + vel[1]*vel[1] + vel[2]*vel[2]) * 180.0);<br>
			        <br>
			        // Передача (примерно)<br>
			        if(pData[playerid][Speed] &lt; 1) pData[playerid][Gear] = 0; // N<br>
			        else if(pData[playerid][Speed] &lt; 30) pData[playerid][Gear] = 1;<br>
			        else if(pData[playerid][Speed] &lt; 60) pData[playerid][Gear] = 2;<br>
			        else if(pData[playerid][Speed] &lt; 90) pData[playerid][Gear] = 3;<br>
			        else if(pData[playerid][Speed] &lt; 120) pData[playerid][Gear] = 4;<br>
			        else if(pData[playerid][Speed] &lt; 150) pData[playerid][Gear] = 5;<br>
			        else pData[playerid][Gear] = 6;<br>
			        <br>
			        // Топливо (пример)<br>
			        pData[playerid][Fuel] -= 0.01;<br>
			        if(pData[playerid][Fuel] &lt; 0) pData[playerid][Fuel] = 100.0;<br>
			        <br>
			        // Отправляем данные в CEF<br>
			        new data[256];<br>
			        format(data, sizeof(data), <br>
			            "samp:updateData({speed: %d, gear: '%s', fuel: %.1f})",<br>
			            pData[playerid][Speed],<br>
			            pData[playerid][Gear] == 0 ? "N" : (pData[playerid][Gear] == 1 ? "1" : <br>
			            pData[playerid][Gear] == 2 ? "2" : pData[playerid][Gear] == 3 ? "3" : <br>
			            pData[playerid][Gear] == 4 ? "4" : pData[playerid][Gear] == 5 ? "5" : "6"),<br>
			            pData[playerid][Fuel]<br>
			        );<br>
			        <br>
			        cef_execute_js(playerid, pData[playerid][CEFBrowser], data);<br>
			    }<br>
			    else<br>
			    {<br>
			        if(pData[playerid][InCar])<br>
			        {<br>
			            pData[playerid][InCar] = false;<br>
			            cef_hide_browser(playerid, pData[playerid][CEFBrowser]);<br>
			        }<br>
			    }<br>
			    return 1;<br>
			}
		</p>

		<p>
			// При подключении игрока<br>
			public OnPlayerConnect(playerid)<br>
			{<br>
			    CreateSpeedometer(playerid);<br>
			    return 1;<br>
			}
		</p>

		<p>
			// При отключении<br>
			public OnPlayerDisconnect(playerid, reason)<br>
			{<br>
			    DestroySpeedometer(playerid);<br>
			    return 1;<br>
			}
		</p>

		<p>
			// Управление поворотниками<br>
			public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)<br>
			{<br>
			    if(!pData[playerid][InCar]) return 1;<br>
			    <br>
			    new left = 0, right = 0;<br>
			    <br>
			    if(newkeys &amp; KEY_SUBMISSION) left = 1; // Левая стрелка<br>
			    if(newkeys &amp; KEY_CROUCH) right = 1;    // Правая стрелка<br>
			    <br>
			    new js[128];<br>
			    format(js, sizeof(js), "samp:updateIndicators({left: %d, right: %d})", left, right);<br>
			    cef_execute_js(playerid, pData[playerid][CEFBrowser], js);<br>
			    <br>
			    return 1;<br>
			}
		</p>
	</div>
</div>

<p>
	CEF. Создайте текстовый файл с любым названием, но добавьте расширение .html. Затем вставьте в него код, который приведен ниже.
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			&lt;!DOCTYPE html&gt;<br>
			&lt;html lang="ru"&gt;<br>
			&lt;head&gt;<br>
			    &lt;meta charset="UTF-8"&gt;<br>
			    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;<br>
			    &lt;title&gt;SAMP CEF Speedometer&lt;/title&gt;<br>
			    &lt;style&gt;<br>
			        * {<br>
			            margin: 0;<br>
			            padding: 0;<br>
			            box-sizing: border-box;<br>
			            user-select: none;<br>
			        }
		</p>

		<p>
			        body {<br>
			            width: 100vw;<br>
			            height: 100vh;<br>
			            overflow: hidden;<br>
			            background: transparent;<br>
			            font-family: 'Segoe UI', 'Roboto', sans-serif;<br>
			            display: flex;<br>
			            justify-content: flex-end;<br>
			            align-items: flex-end;<br>
			        }
		</p>

		<p>
			        /* Основной контейнер спидометра */<br>
			        .speedo-container {<br>
			            position: relative;<br>
			            width: 380px;<br>
			            height: 200px;<br>
			            margin: 0 20px 20px 0;<br>
			            background: rgba(10, 10, 15, 0.92);<br>
			            backdrop-filter: blur(10px);<br>
			            border-radius: 25px;<br>
			            border: 1px solid rgba(0, 255, 255, 0.4);<br>
			            box-shadow: <br>
			                0 20px 40px rgba(0, 0, 0, 0.6),<br>
			                0 0 30px rgba(0, 255, 255, 0.3),<br>
			                inset 0 0 30px rgba(0, 255, 255, 0.1);<br>
			            overflow: hidden;<br>
			            transform: translateZ(0);<br>
			            animation: fadeIn 0.3s ease;<br>
			        }
		</p>

		<p>
			        @keyframes fadeIn {<br>
			            from { opacity: 0; transform: translateY(20px); }<br>
			            to { opacity: 1; transform: translateY(0); }<br>
			        }
		</p>

		<p>
			        /* Анимированный фон */<br>
			        .speedo-container::before {<br>
			            content: '';<br>
			            position: absolute;<br>
			            top: -50%;<br>
			            left: -50%;<br>
			            width: 200%;<br>
			            height: 200%;<br>
			            background: radial-gradient(circle at 30% 50%, rgba(0, 255, 255, 0.1) 0%, transparent 50%);<br>
			            animation: rotate 10s linear infinite;<br>
			            z-index: 0;<br>
			        }
		</p>

		<p>
			        @keyframes rotate {<br>
			            from { transform: rotate(0deg); }<br>
			            to { transform: rotate(360deg); }<br>
			        }
		</p>

		<p>
			        /* Верхняя панель */<br>
			        .top-bar {<br>
			            position: relative;<br>
			            display: flex;<br>
			            justify-content: space-between;<br>
			            align-items: center;<br>
			            padding: 8px 15px;<br>
			            background: rgba(0, 255, 255, 0.1);<br>
			            border-bottom: 1px solid rgba(0, 255, 255, 0.3);<br>
			            z-index: 2;<br>
			        }
		</p>

		<p>
			        .indicators {<br>
			            display: flex;<br>
			            gap: 15px;<br>
			        }
		</p>

		<p>
			        .indicator {<br>
			            font-size: 22px;<br>
			            opacity: 0.2;<br>
			            transition: all 0.2s ease;<br>
			            filter: drop-shadow(0 0 5px currentColor);<br>
			        }
		</p>

		<p>
			        .indicator.active {<br>
			            opacity: 1;<br>
			        }
		</p>

		<p>
			        #left-indicator.active {<br>
			            color: #4cff4c;<br>
			            animation: pulseLeft 0.5s infinite;<br>
			        }
		</p>

		<p>
			        #right-indicator.active {<br>
			            color: #4cff4c;<br>
			            animation: pulseRight 0.5s infinite;<br>
			        }
		</p>

		<p>
			        #highbeam.active {<br>
			            color: #00a2ff;<br>
			            animation: pulse 1s infinite;<br>
			        }
		</p>

		<p>
			        #engine-icon.active {<br>
			            color: #ffaa00;<br>
			            animation: rotate 3s linear infinite;<br>
			        }
		</p>

		<p>
			        @keyframes pulseLeft {<br>
			            0%, 100% { transform: translateX(0); opacity: 1; }<br>
			            50% { transform: translateX(-3px); opacity: 0.8; }<br>
			        }
		</p>

		<p>
			        @keyframes pulseRight {<br>
			            0%, 100% { transform: translateX(0); opacity: 1; }<br>
			            50% { transform: translateX(3px); opacity: 0.8; }<br>
			        }
		</p>

		<p>
			        @keyframes pulse {<br>
			            0%, 100% { opacity: 1; }<br>
			            50% { opacity: 0.5; }<br>
			        }
		</p>

		<p>
			        .warnings {<br>
			            display: flex;<br>
			            gap: 10px;<br>
			            font-size: 11px;<br>
			            font-weight: bold;<br>
			            text-transform: uppercase;<br>
			        }
		</p>

		<p>
			        .warning {<br>
			            display: none;<br>
			            color: #ff4444;<br>
			            text-shadow: 0 0 10px #ff4444;<br>
			            animation: blink 1s infinite;<br>
			        }
		</p>

		<p>
			        .warning.active {<br>
			            display: block;<br>
			        }
		</p>

		<p>
			        @keyframes blink {<br>
			            0%, 100% { opacity: 1; }<br>
			            50% { opacity: 0.3; }<br>
			        }
		</p>

		<p>
			        /* Основная часть */<br>
			        .main-panel {<br>
			            position: relative;<br>
			            display: flex;<br>
			            align-items: center;<br>
			            padding: 10px 20px;<br>
			            z-index: 2;<br>
			        }
		</p>

		<p>
			        .speed-section {<br>
			            flex: 1;<br>
			            text-align: center;<br>
			        }
		</p>

		<p>
			        .speed-value {<br>
			            font-size: 82px;<br>
			            font-weight: 900;<br>
			            background: linear-gradient(135deg, #fff, #00ffff, #0088ff);<br>
			            -webkit-background-clip: text;<br>
			            -webkit-text-fill-color: transparent;<br>
			            line-height: 1;<br>
			            text-shadow: 0 0 30px rgba(0, 255, 255, 0.5);<br>
			            letter-spacing: 2px;<br>
			        }
		</p>

		<p>
			        .speed-unit {<br>
			            font-size: 14px;<br>
			            color: rgba(255, 255, 255, 0.5);<br>
			            letter-spacing: 3px;<br>
			            margin-top: -5px;<br>
			        }
		</p>

		<p>
			        .gear-section {<br>
			            text-align: center;<br>
			            min-width: 80px;<br>
			        }
		</p>

		<p>
			        .gear-label {<br>
			            font-size: 11px;<br>
			            color: rgba(255, 255, 255, 0.4);<br>
			            letter-spacing: 2px;<br>
			            text-transform: uppercase;<br>
			        }
		</p>

		<p>
			        .gear-value {<br>
			            font-size: 48px;<br>
			            font-weight: 800;<br>
			            color: #00ffff;<br>
			            text-shadow: 0 0 20px #00ffff;<br>
			            line-height: 1;<br>
			            margin-top: -5px;<br>
			        }
		</p>

		<p>
			        /* Нижняя панель */<br>
			        .bottom-panel {<br>
			            position: relative;<br>
			            padding: 0 20px 15px 20px;<br>
			            z-index: 2;<br>
			        }
		</p>

		<p>
			        .progress-item {<br>
			            margin-bottom: 8px;<br>
			        }
		</p>

		<p>
			        .progress-header {<br>
			            display: flex;<br>
			            justify-content: space-between;<br>
			            font-size: 10px;<br>
			            color: rgba(255, 255, 255, 0.5);<br>
			            margin-bottom: 3px;<br>
			            text-transform: uppercase;<br>
			            letter-spacing: 1px;<br>
			        }
		</p>

		<p>
			        .progress-bar {<br>
			            height: 8px;<br>
			            background: rgba(255, 255, 255, 0.1);<br>
			            border-radius: 4px;<br>
			            overflow: hidden;<br>
			            position: relative;<br>
			        }
		</p>

		<p>
			        .progress-fill {<br>
			            height: 100%;<br>
			            width: 0%;<br>
			            border-radius: 4px;<br>
			            transition: width 0.1s linear;<br>
			            position: relative;<br>
			        }
		</p>

		<p>
			        .progress-fill::after {<br>
			            content: '';<br>
			            position: absolute;<br>
			            top: 0;<br>
			            left: 0;<br>
			            right: 0;<br>
			            bottom: 0;<br>
			            background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3));<br>
			            animation: shine 2s infinite;<br>
			        }
		</p>

		<p>
			        @keyframes shine {<br>
			            0% { transform: translateX(-100%); }<br>
			            100% { transform: translateX(100%); }<br>
			        }
		</p>

		<p>
			        #rpm-fill {<br>
			            background: linear-gradient(90deg, #4cff4c, #ffaa00, #ff4444);<br>
			        }
		</p>

		<p>
			        #fuel-fill {<br>
			            background: linear-gradient(90deg, #00a2ff, #00ffff);<br>
			        }
		</p>

		<p>
			        /* Нижний ряд */<br>
			        .info-row {<br>
			            display: flex;<br>
			            justify-content: space-between;<br>
			            margin-top: 10px;<br>
			            font-size: 11px;<br>
			            color: rgba(255, 255, 255, 0.4);<br>
			            text-transform: uppercase;<br>
			            letter-spacing: 1px;<br>
			        }
		</p>

		<p>
			        .info-item {<br>
			            display: flex;<br>
			            align-items: center;<br>
			            gap: 3px;<br>
			        }
		</p>

		<p>
			        .info-value {<br>
			            color: #00ffff;<br>
			            font-weight: bold;<br>
			            text-shadow: 0 0 10px #00ffff;<br>
			        }
		</p>

		<p>
			        #nitro.active {<br>
			            color: #00a2ff;<br>
			            animation: nitroPulse 0.3s infinite;<br>
			        }
		</p>

		<p>
			        @keyframes nitroPulse {<br>
			            0%, 100% { opacity: 1; text-shadow: 0 0 20px #00a2ff; }<br>
			            50% { opacity: 0.5; text-shadow: 0 0 40px #00a2ff; }<br>
			        }
		</p>

		<p>
			        /* Декоративный элемент */<br>
			        .glow-ring {<br>
			            position: absolute;<br>
			            top: 0;<br>
			            left: 0;<br>
			            right: 0;<br>
			            bottom: 0;<br>
			            border-radius: 25px;<br>
			            box-shadow: inset 0 0 30px rgba(0, 255, 255, 0.2);<br>
			            pointer-events: none;<br>
			            z-index: 3;<br>
			        }
		</p>

		<p>
			        /* Иконки */<br>
			        .material-icons {<br>
			            font-size: 16px;<br>
			            margin-right: 2px;<br>
			        }<br>
			    &lt;/style&gt;<br>
			&lt;/head&gt;<br>
			&lt;body&gt;<br>
			    &lt;div class="speedo-container" id="speedometer"&gt;<br>
			        &lt;!-- Декоративное кольцо --&gt;<br>
			        &lt;div class="glow-ring"&gt;&lt;/div&gt;<br>
			        <br>
			        &lt;!-- Верхняя панель --&gt;<br>
			        &lt;div class="top-bar"&gt;<br>
			            &lt;div class="indicators"&gt;<br>
			                &lt;span class="indicator" id="left-indicator"&gt;←&lt;/span&gt;<br>
			                &lt;span class="indicator" id="right-indicator"&gt;→&lt;/span&gt;<br>
			                &lt;span class="indicator" id="highbeam"&gt;⚡&lt;/span&gt;<br>
			                &lt;span class="indicator" id="engine-icon"&gt;⚙️&lt;/span&gt;<br>
			            &lt;/div&gt;<br>
			            &lt;div class="warnings"&gt;<br>
			                &lt;span class="warning" id="low-fuel-warning"&gt;⛽ FUEL LOW&lt;/span&gt;<br>
			                &lt;span class="warning" id="temp-warning"&gt;🌡️ OVERHEAT&lt;/span&gt;<br>
			                &lt;span class="warning" id="check-warning"&gt;⚠ CHECK&lt;/span&gt;<br>
			            &lt;/div&gt;<br>
			        &lt;/div&gt;
		</p>

		<p>
			        &lt;!-- Основная часть --&gt;<br>
			        &lt;div class="main-panel"&gt;<br>
			            &lt;div class="speed-section"&gt;<br>
			                &lt;div class="speed-value" id="speed"&gt;0&lt;/div&gt;<br>
			                &lt;div class="speed-unit"&gt;KM/H&lt;/div&gt;<br>
			            &lt;/div&gt;<br>
			            &lt;div class="gear-section"&gt;<br>
			                &lt;div class="gear-label"&gt;GEAR&lt;/div&gt;<br>
			                &lt;div class="gear-value" id="gear"&gt;N&lt;/div&gt;<br>
			            &lt;/div&gt;<br>
			        &lt;/div&gt;
		</p>

		<p>
			        &lt;!-- Нижняя панель --&gt;<br>
			        &lt;div class="bottom-panel"&gt;<br>
			            &lt;div class="progress-item"&gt;<br>
			                &lt;div class="progress-header"&gt;<br>
			                    &lt;span&gt;RPM&lt;/span&gt;<br>
			                    &lt;span id="rpm-text"&gt;0%&lt;/span&gt;<br>
			                &lt;/div&gt;<br>
			                &lt;div class="progress-bar"&gt;<br>
			                    &lt;div class="progress-fill" id="rpm-fill"&gt;&lt;/div&gt;<br>
			                &lt;/div&gt;<br>
			            &lt;/div&gt;<br>
			            <br>
			            &lt;div class="progress-item"&gt;<br>
			                &lt;div class="progress-header"&gt;<br>
			                    &lt;span&gt;FUEL&lt;/span&gt;<br>
			                    &lt;span id="fuel-text"&gt;100%&lt;/span&gt;<br>
			                &lt;/div&gt;<br>
			                &lt;div class="progress-bar"&gt;<br>
			                    &lt;div class="progress-fill" id="fuel-fill"&gt;&lt;/div&gt;<br>
			                &lt;/div&gt;<br>
			            &lt;/div&gt;<br>
			            <br>
			            &lt;div class="info-row"&gt;<br>
			                &lt;div class="info-item"&gt;<br>
			                    &lt;span&gt;🌡️&lt;/span&gt;<br>
			                    &lt;span class="info-value" id="temp"&gt;90°&lt;/span&gt;<br>
			                &lt;/div&gt;<br>
			                &lt;div class="info-item"&gt;<br>
			                    &lt;span&gt;⏱️&lt;/span&gt;<br>
			                    &lt;span class="info-value" id="trip"&gt;0.0&lt;/span&gt;<br>
			                    &lt;span&gt;KM&lt;/span&gt;<br>
			                &lt;/div&gt;<br>
			                &lt;div class="info-item"&gt;<br>
			                    &lt;span id="nitro"&gt;⚡ NITRO&lt;/span&gt;<br>
			                &lt;/div&gt;<br>
			            &lt;/div&gt;<br>
			        &lt;/div&gt;<br>
			    &lt;/div&gt;
		</p>

		<p>
			    &lt;script&gt;<br>
			        class Speedometer {<br>
			            constructor() {<br>
			                this.speed = 0;<br>
			                this.gear = 'N';<br>
			                this.rpm = 0;<br>
			                this.fuel = 100;<br>
			                this.temp = 90;<br>
			                this.trip = 0;<br>
			                this.leftIndicator = false;<br>
			                this.rightIndicator = false;<br>
			                this.highbeam = false;<br>
			                this.engineOn = false;<br>
			                this.nitro = false;<br>
			                <br>
			                this.init();<br>
			            }
		</p>

		<p>
			            init() {<br>
			                // Слушаем сообщения от SAMP<br>
			                window.addEventListener('message', (event) =&gt; {<br>
			                    if (event.data &amp;&amp; event.data.type === 'samp') {<br>
			                        this.updateFromGame(event.data);<br>
			                    }<br>
			                });
		</p>

		<p>
			                // Функции для вызова из PAWN<br>
			                window.samp = {<br>
			                    updateData: (data) =&gt; this.updateFromGame(data),<br>
			                    updateIndicators: (data) =&gt; this.updateIndicators(data)<br>
			                };
		</p>

		<p>
			                // Тестовые данные (удалить в продакшене)<br>
			                this.startTest();<br>
			            }
		</p>

		<p>
			            updateFromGame(data) {<br>
			                if (data.speed !== undefined) {<br>
			                    this.speed = Math.min(360, Math.max(0, Math.floor(data.speed)));<br>
			                    document.getElementById('speed').textContent = this.speed;<br>
			                    <br>
			                    // Меняем цвет скорости в зависимости от скорости<br>
			                    let color;<br>
			                    if (this.speed &gt; 200) color = '#ff4444';<br>
			                    else if (this.speed &gt; 150) color = '#ffaa00';<br>
			                    else color = '#00ffff';<br>
			                    <br>
			                    document.getElementById('speed').style.background = <br>
			                        `linear-gradient(135deg, #fff, ${color})`;<br>
			                    document.getElementById('speed').style.webkitBackgroundClip = 'text';<br>
			                }
		</p>

		<p>
			                if (data.gear !== undefined) {<br>
			                    const gears = ['R', 'N', '1', '2', '3', '4', '5', '6'];<br>
			                    this.gear = gears[data.gear] || 'N';<br>
			                    document.getElementById('gear').textContent = this.gear;<br>
			                }
		</p>

		<p>
			                if (data.rpm !== undefined) {<br>
			                    this.rpm = Math.min(100, Math.max(0, data.rpm));<br>
			                    document.getElementById('rpm-fill').style.width = this.rpm + '%';<br>
			                    document.getElementById('rpm-text').textContent = this.rpm + '%';<br>
			                }
		</p>

		<p>
			                if (data.fuel !== undefined) {<br>
			                    this.fuel = Math.min(100, Math.max(0, data.fuel));<br>
			                    document.getElementById('fuel-fill').style.width = this.fuel + '%';<br>
			                    document.getElementById('fuel-text').textContent = this.fuel + '%';<br>
			                    <br>
			                    // Предупреждение о низком топливе<br>
			                    const warning = document.getElementById('low-fuel-warning');<br>
			                    if (this.fuel &lt; 15) {<br>
			                        warning.classList.add('active');<br>
			                        document.getElementById('fuel-fill').style.background = <br>
			                            'linear-gradient(90deg, #ff4444, #ff8800)';<br>
			                    } else {<br>
			                        warning.classList.remove('active');<br>
			                        document.getElementById('fuel-fill').style.background = <br>
			                            'linear-gradient(90deg, #00a2ff, #00ffff)';<br>
			                    }<br>
			                }
		</p>

		<p>
			                if (data.temp !== undefined) {<br>
			                    this.temp = data.temp;<br>
			                    document.getElementById('temp').textContent = this.temp + '°';<br>
			                    <br>
			                    const warning = document.getElementById('temp-warning');<br>
			                    if (this.temp &gt; 110) {<br>
			                        warning.classList.add('active');<br>
			                    } else {<br>
			                        warning.classList.remove('active');<br>
			                    }<br>
			                }
		</p>

		<p>
			                if (data.trip !== undefined) {<br>
			                    this.trip = data.trip;<br>
			                    document.getElementById('trip').textContent = this.trip.toFixed(1);<br>
			                }
		</p>

		<p>
			                if (data.engine !== undefined) {<br>
			                    this.engineOn = data.engine;<br>
			                    const engineIcon = document.getElementById('engine-icon');<br>
			                    if (this.engineOn) {<br>
			                        engineIcon.classList.add('active');<br>
			                    } else {<br>
			                        engineIcon.classList.remove('active');<br>
			                    }<br>
			                }
		</p>

		<p>
			                if (data.nitro !== undefined) {<br>
			                    this.nitro = data.nitro;<br>
			                    const nitroElement = document.getElementById('nitro');<br>
			                    if (this.nitro) {<br>
			                        nitroElement.classList.add('active');<br>
			                    } else {<br>
			                        nitroElement.classList.remove('active');<br>
			                    }<br>
			                }
		</p>

		<p>
			                // Обновляем индикаторы<br>
			                if (data.left !== undefined) {<br>
			                    this.leftIndicator = data.left;<br>
			                    this.updateIndicators();<br>
			                }<br>
			                if (data.right !== undefined) {<br>
			                    this.rightIndicator = data.right;<br>
			                    this.updateIndicators();<br>
			                }<br>
			                if (data.highbeam !== undefined) {<br>
			                    this.highbeam = data.highbeam;<br>
			                    this.updateIndicators();<br>
			                }<br>
			            }
		</p>

		<p>
			            updateIndicators() {<br>
			                const left = document.getElementById('left-indicator');<br>
			                const right = document.getElementById('right-indicator');<br>
			                const highbeam = document.getElementById('highbeam');
		</p>

		<p>
			                left.classList.toggle('active', this.leftIndicator);<br>
			                right.classList.toggle('active', this.rightIndicator);<br>
			                highbeam.classList.toggle('active', this.highbeam);<br>
			            }
		</p>

		<p>
			            // Тестовые данные (удалить)<br>
			            startTest() {<br>
			                setInterval(() =&gt; {<br>
			                    this.updateFromGame({<br>
			                        speed: Math.floor(Math.random() * 240),<br>
			                        rpm: Math.floor(Math.random() * 100),<br>
			                        fuel: Math.max(0, this.fuel - 0.5),<br>
			                        temp: 70 + Math.floor(Math.random() * 40),<br>
			                        trip: this.trip + 0.1,<br>
			                        engine: true,<br>
			                        nitro: Math.random() &gt; 0.7,<br>
			                        left: Math.random() &gt; 0.7,<br>
			                        right: Math.random() &gt; 0.7,<br>
			                        highbeam: Math.random() &gt; 0.8<br>
			                    });<br>
			                }, 100);<br>
			            }<br>
			        }
		</p>

		<p>
			        // Запуск<br>
			        document.addEventListener('DOMContentLoaded', () =&gt; {<br>
			            new Speedometer();<br>
			            <br>
			            // Показываем спидометр<br>
			            document.getElementById('speedometer').style.display = 'block';<br>
			        });<br>
			    &lt;/script&gt;<br>
			&lt;/body&gt;<br>
			&lt;/html&gt;
		</p>
	</div>
</div>

<p>
	отдельно индикаторы
</p>

<pre style="color:#f9fafb;">
<span>cef_execute_js(playerid, browser, "samp.updateIndicators({left: 0, right: 1, highbeam: 0})");</span></pre>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='cef_execute_js(playerid, browser, "samp.updateIndicators({left: 0, right: 1, highbeam: 0})");'>
<span><span class="mtk1">cef_execute_js(playerid, browser, </span><span class="mtk20">"samp.updateIndicators({left: 0, right: 1, highbea</span><span class="mtk20">m: 0})"</span><span class="mtk1">);</span></span>
</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">8731</guid><pubDate>Sun, 15 Mar 2026 18:45:58 +0000</pubDate></item><item><title>[Pawn][PHP] &#x41F;&#x440;&#x438;&#x432;&#x44F;&#x437;&#x43A;&#x430; &#x412;&#x41A; &#x43A; &#x438;&#x433;&#x440;&#x43E;&#x432;&#x43E;&#x43C;&#x443; &#x430;&#x43A;&#x43A;&#x430;&#x443;&#x43D;&#x442;&#x443;</title><link>https://pawno-rus.com/topic/7581-pawnphp-privyazka-vk-k-igrovomu-akkauntu/</link><description><![CDATA[
<p>
	Итак, всем доброго времени суток.
</p>

<p>
	Сегодня я хочу рассказать и показать, как грамотно подключить систему привязки VK к игровым аккаунтам.
</p>

<p>
	Для начала рассмотрим настройку Вашей группы в ВК, которая будет присылать сообщения пользователям в ВК:
</p>

<p>
	1. Переходим в Вашу группу в ВК
</p>

<p>
	2. Переходим в управление сообществом:
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b4a44261b8__2023-11-20_150003610.png.f8dd4908a5c52e3839cf9dbd720a3607.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16940" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b4a44261b8__2023-11-20_150003610.png.f8dd4908a5c52e3839cf9dbd720a3607.png" /></p>
	</div>
</div>

<p>
	3. Переходим в раздел "Сообщения", и разрешаем сообщения сообществу, сохраняем
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b4bfe0c62b__2023-11-20_150725657.png.b105b8084347a75305b98c611527745d.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16941" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b4bfe0c62b__2023-11-20_150725657.png.b105b8084347a75305b98c611527745d.png" /></p>
	</div>
</div>

<p>
	4. Переходим в "Настройки" -&gt; "Работа с API" и создаём ключ (если он у вас уже создан, то просто копируем его)
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b4c7cac9f3__2023-11-20_150931965.png.99e019aab0519d0c72a5cfed833d667c.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16942" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b4c7cac9f3__2023-11-20_150931965.png.99e019aab0519d0c72a5cfed833d667c.png" /></p>
	</div>
</div>

<p>
	5. В высветившемся списке выбираем "<span style="color:#e1e3e6;">Разрешить приложению доступ к сообщениям сообщества" и нажимаем "Создать"</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b4cd029259__2023-11-20_151055669.png.1f0b99be396d9ecef004b6531dfb61e9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16943" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b4cd029259__2023-11-20_151055669.png.1f0b99be396d9ecef004b6531dfb61e9.png" /></p>
	</div>
</div>

<p>
	6. После подтверждения личности появится запись с ключом, копируем его:
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b4d457f7a4__2023-11-20_151253063.png.8cf1386523dbf9a8c694da81b93e4541.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16944" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b4d457f7a4__2023-11-20_151253063.png.8cf1386523dbf9a8c694da81b93e4541.png" /></p>
	</div>
</div>

<p>
	7. Переходим на главную страницу сообщества и разрешаем сообщения
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b4e2cdf8c3__2023-11-20_151643741.png.d2af8cd760c298fa8193a6172a4b1741.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16945" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b4e2cdf8c3__2023-11-20_151643741.png.d2af8cd760c298fa8193a6172a4b1741.png" /></p>
	</div>
</div>

<p>
	Далее нам надо создать и залить на веб-хостинг наш PHP-файл, который будет обрабатывать запрос от хостинга
</p>

<p>
	Перейдём к созданию PHP файла:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="php" plaincode="&lt;?php // Объявляем PHP-файл
$token_vk = &quot;vk1.a.Pl1D4M...&quot;; 						    // Сюда вводим токен, полученный в группе ВК
$msg = $_GET[&quot;msg&quot;];									// Получаем сообщение из GET-запроса (msg=...) 
$msg = iconv('Windows-1251', 'UTF-8', $msg);			// Делаем нужную кодировку сообщения (Из-за кириллицы)
$msg = urlencode($msg);									// Заного кодируем строку для запроса в ВК
$def_id = $_GET[&quot;id&quot;];									// Получаем ID пользователя из GET-запроса (id=...)
if(stripos($def_id, &quot;/&quot;) !== false)						// Проверка на наличие слешей в ID
	$def_id = substr($def_id, strrpos($def_id, &quot;/&quot;)+1); // Удаляем всё, что до последнего слеша, и сам слеш
	// Код выше способствует следующим преображениям:
	// vk.com/olegsleash 			-&gt; 		olegsleash
	// https://vk.com/id405249405 	-&gt; 		id405249405
if(stripos($def_id, &quot;@&quot;) !== false)						// Проверка на наличие &quot;собачки&quot; в ID
	$def_id = substr($def_id, strrpos($def_id, &quot;@&quot;)+1); // Удаляем всё, что до последней &quot;собачки&quot;, и саму &quot;собачку&quot;
	// Код выше способствует следующим преображениям:
	// @olegsleash 		-&gt; 		olegsleash
	// @id405249405 	-&gt; 		id405249405
if(stripos($def_id, &quot;id&quot;) === 0)						// Проверка на &quot;id&quot; в началае строки
	$def_id = substr($def_id, 2);						// Удаление &quot;id&quot; из начала строки
	// Код выше способствует следующим преображениям:
	// id405249405 	-&gt; 		405249405

// Отправка сообщений в ВК невозможна при помощи короткого имени (olegsleash)
// Поэтому для нормальной и красивой работы получаем имя и числовое ID пользователя:
// Генерируем и отправляем запрос в ВК о получении данных пользователя по его короткому имени/ID:
$httpsfile1 = file_get_contents(&quot;https://api.vk.com/method/users.get?access_token=$token_vk&amp;fields=maiden_name&amp;name_case=nom&amp;v=5.154&amp;user_id=$def_id&quot;);
$id_data = json_decode($httpsfile1, true);				// Переводим строку, которую получили в JSON-таблицу
$def_id = $id_data['response'][0]['id'];				// получаем числовое ID пользователя из овтета ВК
$fn = iconv('UTF-8','Windows-1251', $id_data['response'][0]['first_name']); 	// Получаем имя пользователя из овтета ВК
$ln = iconv('UTF-8','Windows-1251', $id_data['response'][0]['last_name']);		// Получаем фамилию пользователя из овтета ВК
// Теперь, когда у нас есть числово ID пользователя, можно отправить сообщение:
// Генерируем и отправляем запрос в ВК с сообщением пользователю:
file_get_contents(&quot;https://api.vk.com/method/messages.send?random_id=0&amp;v=5.154&amp;message=$msg&amp;user_id=$def_id&amp;access_token=$token_vk&quot;);
print &quot;$def_id,$fn,$ln&quot;; // Выводим на страницу ID, имя и фамилию пользователя для callback'a в Pawn
// Завершаем PHP-файл
?&gt;">
<span><span>&lt;?php</span><span> </span><span>// Объявляем PHP-файл</span></span>
<span><span>$token_vk</span><span> = </span><span>"vk1.a.Pl1D4M..."</span><span>;                          </span><span>// Сюда вводим токен, полученный в группе ВК</span></span>
<span><span>$msg</span><span> = </span><span>$_GET</span><span>[</span><span>"msg"</span><span>];                                    </span><span>// Получаем сообщение из GET-запроса (msg=...) </span></span>
<span><span>$msg</span><span> = iconv(</span><span>'Windows-1251'</span><span>, </span><span>'UTF-8'</span><span>, </span><span>$msg</span><span>);            </span><span>// Делаем нужную кодировку сообщения (Из-за </span><span>кириллицы)</span></span>
<span><span>$msg</span><span> = urlencode(</span><span>$msg</span><span>);                                 </span><span>// Заного кодируем строку для запроса в ВК</span></span>
<span><span>$def_id</span><span> = </span><span>$_GET</span><span>[</span><span>"id"</span><span>];                                  </span><span>// Получаем ID пользователя из GET-запроса </span><span>(id=...)</span></span>
<span><span>if</span><span>(stripos(</span><span>$def_id</span><span>, </span><span>"/"</span><span>) !== </span><span>false</span><span>)                     </span><span>// Проверка на наличие слешей в ID</span></span>
<span><span>    </span><span>$def_id</span><span> = substr(</span><span>$def_id</span><span>, strrpos(</span><span>$def_id</span><span>, </span><span>"/"</span><span>)+</span><span>1</span><span>); </span><span>// Удаляем всё, что до последнего слеша, и сам </span><span>слеш</span></span>
<span><span>    </span><span>// Код выше способствует следующим преображениям:</span></span>
<span><span>    </span><span>// vk.com/olegsleash            -&gt;      olegsleash</span></span>
<span><span>    </span><span>// https://vk.com/id405249405   -&gt;      id405249405</span></span>
<span><span>if</span><span>(stripos(</span><span>$def_id</span><span>, </span><span>"@"</span><span>) !== </span><span>false</span><span>)                     </span><span>// Проверка на наличие "собачки" в ID</span></span>
<span><span>    </span><span>$def_id</span><span> = substr(</span><span>$def_id</span><span>, strrpos(</span><span>$def_id</span><span>, </span><span>"@"</span><span>)+</span><span>1</span><span>); </span><span>// Удаляем всё, что до последней "собачки", и саму </span><span>"собачку"</span></span>
<span><span>    </span><span>// Код выше способствует следующим преображениям:</span></span>
<span><span>    </span><span>// @olegsleash      -&gt;      olegsleash</span></span>
<span><span>    </span><span>// @id405249405     -&gt;      id405249405</span></span>
<span><span>if</span><span>(stripos(</span><span>$def_id</span><span>, </span><span>"id"</span><span>) === </span><span>0</span><span>)                        </span><span>// Проверка на "id" в началае строки</span></span>
<span><span>    </span><span>$def_id</span><span> = substr(</span><span>$def_id</span><span>, </span><span>2</span><span>);                       </span><span>// Удаление "id" из начала строки</span></span>
<span><span>    </span><span>// Код выше способствует следующим преображениям:</span></span>
<span><span>    </span><span>// id405249405  -&gt;      405249405</span></span>

<span><span>// Отправка сообщений в ВК невозможна при помощи </span><span>короткого имени (olegsleash)</span></span>
<span><span>// Поэтому для нормальной и красивой работы </span><span>получаем имя и числовое ID пользователя:</span></span>
<span><span>// Генерируем и отправляем запрос в ВК о получении </span><span>данных пользователя по его короткому имени/ID:</span></span>
<span><span>$httpsfile1</span><span> = file_get_contents(</span><span>"https://api.vk.com/method/users.get?access_token=</span><span>$token_vk&amp;fields=maiden_name&amp;name_case=nom&amp;v=5.154</span><span>&amp;user_id=$def_id"</span><span>);</span></span>
<span><span>$id_data</span><span> = json_decode(</span><span>$httpsfile1</span><span>, </span><span>true</span><span>);              </span><span>// Переводим строку, которую получили в </span><span>JSON-таблицу</span></span>
<span><span>$def_id</span><span> = </span><span>$id_data</span><span>[</span><span>'response'</span><span>][</span><span>0</span><span>][</span><span>'id'</span><span>];                </span><span>// получаем числовое ID пользователя из овтета ВК</span></span>
<span><span>$fn</span><span> = iconv(</span><span>'UTF-8'</span><span>,</span><span>'Windows-1251'</span><span>, </span><span>$id_data</span><span>[</span><span>'response'</span><span>][</span><span>0</span><span>][</span><span>'first_name'</span><span>]);     </span><span>// Получаем имя пользователя из овтета ВК</span></span>
<span><span>$ln</span><span> = iconv(</span><span>'UTF-8'</span><span>,</span><span>'Windows-1251'</span><span>, </span><span>$id_data</span><span>[</span><span>'response'</span><span>][</span><span>0</span><span>][</span><span>'last_name'</span><span>]);      </span><span>// Получаем фамилию пользователя из овтета ВК</span></span>
<span><span>// Теперь, когда у нас есть числово ID </span><span>пользователя, можно отправить сообщение:</span></span>
<span><span>// Генерируем и отправляем запрос в ВК с </span><span>сообщением пользователю:</span></span>
<span><span>file_get_contents(</span><span>"https://api.vk.com/method/messages.send?random_id</span><span>=0&amp;v=5.154&amp;message=$msg&amp;user_id=$def_id&amp;access_tok</span><span>en=$token_vk"</span><span>);</span></span>
<span><span>print</span><span> </span><span>"$def_id,$fn,$ln"</span><span>; </span><span>// Выводим на страницу ID, имя и фамилию </span><span>пользователя для callback'a в Pawn</span></span>
<span><span>// Завершаем PHP-файл</span></span>
<span><span>?&gt;</span></span>
</pre>

<p>
	Сохраняем данный файл под любым названием на хостинг (инструкцию по загрузке файлов можете посмотреть на выбранном Вами хостинге)
</p>

<p>
	Дальше нам надо создать столбцы в базе mysql следующими запросами:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="sql" plaincode="ALTER TABLE `Таблица с акк-ами` ADD vkName TEXT NOT NULL, vkID TEXT NOT NULL, vkStatus INT NOT NULL;">
<span><span>ALTER</span><span> </span><span>TABLE</span><span> `Таблица с акк</span><span>-</span><span>ами` </span><span>ADD</span><span> vkName TEXT </span><span>NOT</span><span> </span><span>NULL</span><span>, vkID TEXT </span><span>NOT</span><span> </span><span>NULL</span><span>, vkStatus </span><span>INT</span><span> </span><span>NOT</span><span> </span><span>NULL</span><span>;</span></span>
</pre>

<p>
	Теперь перейдём к работе с модом:
</p>

<p>
	Для начала импортируем нужные нам плагины и инклуды:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="#include &lt;a_samp&gt;       // Думаю понятно для чего нужен a_samp
#include &lt;a_http&gt;       // a_http нужен для создания запросов на сайты
#include &lt;sscanf2&gt;      // sscanf нужен для извлечения данных из ответа сайта
#include &lt;Pawn.CMD&gt;     // Pawn.CMD нужен для использовния команд привязки и отвязки ВК
// Вы можете использовать любой коммандны процессор
#include &lt;a_mysql&gt;      // a_mysql нужен для взаимодействие информацией в базе данных
main(){}                // main как минимум нужен для предотвращения ошибки в консоле при запуске">
<span><span>#include</span><span> </span><span>&lt;</span><span>a_samp</span><span>&gt;</span><span>       </span><span>// Думаю понятно для чего нужен a_samp</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>a_http</span><span>&gt;</span><span>       </span><span>// a_http нужен для создания запросов на сайты</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>sscanf2</span><span>&gt;</span><span>      </span><span>// sscanf нужен для извлечения данных из ответа </span><span>сайта</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>Pawn.CMD</span><span>&gt;</span><span>     </span><span>// Pawn.CMD нужен для использовния команд привязки </span><span>и отвязки ВК</span></span>
<span><span>// Вы можете использовать любой коммандны </span><span>процессор</span></span>
<span><span>#include</span><span> </span><span>&lt;</span><span>a_mysql</span><span>&gt;</span><span>      </span><span>// a_mysql нужен для взаимодействие информацией в </span><span>базе данных</span></span>
<span><span>main(){}                </span><span>// main как минимум нужен для предотвращения </span><span>ошибки в консоле при запуске</span></span>
</pre>

<p>
	Дальше пройдёмся по дефайнам, которые я создал для удобной работы:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="#define VK_FILE				&quot;yourSise.ru/vk_file.php?&quot;				// Ссылка на ваш PHP-файл
																	// Да, надо искать хостинг, можно бесплатный
																	// Я могу посоветовать sprinthost (не реклама)
#define VK_GROUP			&quot;{0099FF}vk.com/{ffffff}&quot;				// Ссылка на группу сервера в ВК
#define COLOR_ERROR			0xE03F2DFF								// Бардовый цвет для ошибки (красный не очень)) )
#define DLG_VK_LINK			3175									// ID диалога для ввода ссылки на свой ВК
#define DLG_VK_CODE			3176									// ID диалога для ввода кода привязки, который придёт в ВК
#define DLG_VK_UNLINK		3177									// ID диалога для отвязки ВК
#define DLG_VK_UNCODE		3178									// ID диалога для ввода кода отвязки, который придёт в ВК
#define DB_ACCOUNTS			&quot;users&quot;		// Таблица в MySQL-БД с данными аккаунтов	// Заменить на своё
#define DB_ACCOUNTS_NAME	&quot;name&quot;		// Столбец в MySQL-БД с ником аккаунта		// Заменить на своё">
<span><span>#define</span><span> VK_FILE             </span><span>"yourSise.ru/vk_file.php?"</span><span>              </span><span>// Ссылка на ваш PHP-файл</span></span>
<span><span>                                                                    </span><span>// Да, надо искать хостинг, можно бесплатный</span></span>
<span><span>                                                                    </span><span>// Я могу посоветовать sprinthost (не реклама)</span></span>
<span><span>#define</span><span> VK_GROUP            </span><span>"{0099FF}vk.com/{ffffff}"</span><span>               </span><span>// Ссылка на группу сервера в ВК</span></span>
<span><span>#define</span><span> COLOR_ERROR         </span><span>0xE03F2DFF</span><span>                              </span><span>// Бардовый цвет для ошибки (красный не очень)) )</span></span>
<span><span>#define</span><span> DLG_VK_LINK         </span><span>3175</span><span>                                    </span><span>// ID диалога для ввода ссылки на свой ВК</span></span>
<span><span>#define</span><span> DLG_VK_CODE         </span><span>3176</span><span>                                    </span><span>// ID диалога для ввода кода привязки, который </span><span>придёт в ВК</span></span>
<span><span>#define</span><span> DLG_VK_UNLINK       </span><span>3177</span><span>                                    </span><span>// ID диалога для отвязки ВК</span></span>
<span><span>#define</span><span> DLG_VK_UNCODE       </span><span>3178</span><span>                                    </span><span>// ID диалога для ввода кода отвязки, который </span><span>придёт в ВК</span></span>
<span><span>#define</span><span> DB_ACCOUNTS         </span><span>"users"</span><span>     </span><span>// Таблица в MySQL-БД с данными аккаунтов   // </span><span>Заменить на своё</span></span>
<span><span>#define</span><span> DB_ACCOUNTS_NAME    </span><span>"name"</span><span>      </span><span>// Столбец в MySQL-БД с ником аккаунта      // </span><span>Заменить на своё</span></span>
</pre>

<p>
	Далее создаём переменные для временного хранения информации о игроке:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="new str_1[512];							// Создаём строку для обработки
enum playerVK {							// Создаём enum для хранения информации о данных ВК игрока
	vkName[64],							// Имя игрока в ВК
	vkID[16],							// ID игрока в ВК
	vkStatus							// Статус привязки к ВК у икрока
}; new plVK[MAX_PLAYERS][playerVK];		// Создаём переменную под каждого игрока">
<span><span>new</span><span> str_1[</span><span>512</span><span>];                         </span><span>// Создаём строку для обработки</span></span>
<span><span>enum</span><span> playerVK {                         </span><span>// Создаём enum для хранения информации о данных </span><span>ВК игрока</span></span>
<span><span>    vkName[</span><span>64</span><span>],                         </span><span>// Имя игрока в ВК</span></span>
<span><span>    vkID[</span><span>16</span><span>],                           </span><span>// ID игрока в ВК</span></span>
<span><span>    vkStatus                            </span><span>// Статус привязки к ВК у икрока</span></span>
<span><span>}; </span><span>new</span><span> plVK[MAX_PLAYERS][playerVK];     </span><span>// Создаём переменную под каждого игрока</span></span>
</pre>

<p>
	Функции, которые я использовал для сокращения кода в дальнейшем:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="stock SendError(playerid, text[]) {								// Функция отправки ошибки игроку
	format(str_1, sizeof(str_1), &quot;[Ошибка] {ffffff}%s&quot;, text);	// Форматирование строки с ошибкой
	return SendClientMessage(playerid, COLOR_ERROR, str_1);		// Отравка ошибки игроку
}
stock SendVKMessage(playerid, msg[], id[], callback[] = &quot;&quot;) {	// Отправка сообщения игроку в ВК
	new buf_msg[512]; strmid(buf_msg, msg, 0, strlen(msg));		// Создаём буфер для сообщения, ибо кодировка удлиняет строку
	new buf_id[64];   strmid(buf_id,  id,  0, strlen(id));		// Создаём буфер для ID игрока, ибо кодировка удлиняет строку
	StringURLEncode(buf_msg);									// Кодируем сообщение
	StringURLEncode(buf_id);									// Кодируем ID игрока
	// Кодировка нужна для того, что бы наша ссылка с HTTP-запросом воспринималась верно
	format(str_1, sizeof(str_1), &quot;%smsg=%s&amp;id=%s&quot;,VK_FILE, buf_msg, buf_id);
	// Выше мы составляем строку с запросом к нашему PHP-файлу
	HTTP(playerid, HTTP_GET, str_1, &quot;&quot;, callback); 				// Создаём GET-Запрос, мне GET как-то ближе))
}
// Данная функция кодировки была позимствована у другого скриптера))
stock StringURLEncode(string[], size = sizeof(string))
{
	for(new i = 0, l = strlen(string), hex[8]; i &lt; l; i++)
	{
		switch(string[i]) {
			case '!','(',')','\'','*','0'..'9','A'..'Z','a'..'z': continue;
			case ' ': {string[i] = '+'; continue;}
		}
		if(i+3 &gt;= size) {string[i] = EOS; return 0;}
		if(l+3 &gt;= size) string[size-3] = EOS;
		format(hex, sizeof(hex), &quot;%02h&quot;, string[i]);
		string[i] = '%';
		strins(string, hex, i + 1, size);
		l += 2; i += 2;
		if (l &gt; size - 1) l = size - 1;
	}
	return 1;
}">
<span><span>stock SendError(playerid, text[]) {                             </span><span>// Функция отправки ошибки игроку</span></span>
<span><span>    format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"[Ошибка] {ffffff}%s"</span><span>, text);  </span><span>// Форматирование строки с ошибкой</span></span>
<span><span>    </span><span>return</span><span> SendClientMessage(playerid, COLOR_ERROR, </span><span>str_1);     </span><span>// Отравка ошибки игроку</span></span>
<span><span>}</span></span>
<span><span>stock SendVKMessage(playerid, msg[], id[], </span><span>callback[] = </span><span>""</span><span>) {   </span><span>// Отправка сообщения игроку в ВК</span></span>
<span><span>    </span><span>new</span><span> buf_msg[</span><span>512</span><span>]; strmid(buf_msg, msg, </span><span>0</span><span>, strlen(msg));     </span><span>// Создаём буфер для сообщения, ибо кодировка </span><span>удлиняет строку</span></span>
<span><span>    </span><span>new</span><span> buf_id[</span><span>64</span><span>];   strmid(buf_id,  id,  </span><span>0</span><span>, strlen(id));      </span><span>// Создаём буфер для ID игрока, ибо кодировка </span><span>удлиняет строку</span></span>
<span><span>    StringURLEncode(buf_msg);                                   </span><span>// Кодируем сообщение</span></span>
<span><span>    StringURLEncode(buf_id);                                    </span><span>// Кодируем ID игрока</span></span>
<span><span>    </span><span>// Кодировка нужна для того, что бы наша ссылка с </span><span>HTTP-запросом воспринималась верно</span></span>
<span><span>    format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"%smsg=%s&amp;id=%s"</span><span>,VK_FILE, buf_msg, buf_id);</span></span>
<span><span>    </span><span>// Выше мы составляем строку с запросом к нашему </span><span>PHP-файлу</span></span>
<span><span>    HTTP(playerid, HTTP_GET, str_1, </span><span>""</span><span>, callback);              </span><span>// Создаём GET-Запрос, мне GET как-то ближе))</span></span>
<span><span>}</span></span>
<span><span>// Данная функция кодировки была позимствована у </span><span>другого скриптера))</span></span>
<span><span>stock StringURLEncode(string[], size = </span><span>sizeof</span><span>(string))</span></span>
<span><span>{</span></span>
<span><span>    </span><span>for</span><span>(</span><span>new</span><span> i = </span><span>0</span><span>, l = strlen(string), hex[</span><span>8</span><span>]; i &lt; l; i++)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>switch</span><span>(string[i]) {</span></span>
<span><span>            </span><span>case</span><span> </span><span>'!'</span><span>,</span><span>'('</span><span>,</span><span>')'</span><span>,</span><span>'\''</span><span>,</span><span>'*'</span><span>,</span><span>'0'</span><span>..</span><span>'9'</span><span>,</span><span>'A'</span><span>..</span><span>'Z'</span><span>,</span><span>'a'</span><span>..</span><span>'z'</span><span>: </span><span>continue</span><span>;</span></span>
<span><span>            </span><span>case</span><span> </span><span>' '</span><span>: {string[i] = </span><span>'+'</span><span>; </span><span>continue</span><span>;}</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>if</span><span>(i+</span><span>3</span><span> &gt;= size) {string[i] = EOS; </span><span>return</span><span> </span><span>0</span><span>;}</span></span>
<span><span>        </span><span>if</span><span>(l+</span><span>3</span><span> &gt;= size) string[size-</span><span>3</span><span>] = EOS;</span></span>
<span><span>        format(hex, </span><span>sizeof</span><span>(hex), </span><span>"%02h"</span><span>, string[i]);</span></span>
<span><span>        string[i] = </span><span>'%'</span><span>;</span></span>
<span><span>        strins(string, hex, i + </span><span>1</span><span>, size);</span></span>
<span><span>        l += </span><span>2</span><span>; i += </span><span>2</span><span>;</span></span>
<span><span>        </span><span>if</span><span> (l &gt; size - </span><span>1</span><span>) l = size - </span><span>1</span><span>;</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Следующим шагом создаём коллбэки для получения информации о созданных запросах к нашему PHP файлу:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="forward VKLinkAPI(playerid, resp, data[]);	// Создаём callback для получения данных
public VKLinkAPI(playerid, resp, data[]) {	// Используем callback для получения данных
	if(resp != 200) { 					// Если ответ от сервера НЕ равен 200
		return SendError(playerid, &quot;{0099FF}[VK] {ffffff}Техническая ошибка сервера. Свяжитесь с разработчиком.&quot;);
		// Причины такого ответа:
		// 	Ошибка в коде PHP-файла
		// 	Неверно указана ссылка на PHP-файл
		// 	Был удалён сайт с файлом (неуплата / неактив) на хостинге
	}
	new first_name[32], last_name[32]; 														// Создаём переменные для получения информации о пользователе
	if(!sscanf(data, &quot;p&lt;,&gt;s[16]s[32]s[32]&quot;, plVK[playerid][vkID], first_name, last_name)) {	// Если от сервера полчен ожидаемый ответ
		// Можете не спрашивать, почему я сделал ID игрока строкой, а не числом, я так захотел))
		new full_name[64];																	// Создаём переменную под полное имя игрока в ВК
		format(full_name, 64, &quot;%s %s&quot;, first_name, last_name);								// Соеденяем имя и фамилию
		strmid(plVK[playerid][vkName], full_name, 0, strlen(full_name));					// Записываем имя игрока в переменную
		// Форматируем строку и показываем игроук диалог
		format(str_1, sizeof(str_1), &quot;{ffffff}На вашу страницу {0099FF}%s {ffffff}[{0099FF}%s{ffffff}] был отправлен код подтверждения\n\
											  Пожалуйста, введите его в поле ниже:&quot;, plVK[playerid][vkName], plVK[playerid][vkID]);
		ShowPlayerDialog(playerid, DLG_VK_CODE, DIALOG_STYLE_INPUT, &quot;Подтверждение VK&quot;, str_1, &quot;Отправить&quot;, &quot;Отмена&quot;); // Открываем диалог
	} else {		// Если же ответ от сервера не тот, что мы ожидает
	    // print(&quot;Хуйня выходит&quot;);
	    return SendError(playerid, &quot;{0099FF}[VK] {ffffff}Техническая ошибка сервера. Свяжитесь с разработчиком.&quot;);
	}
	return 1;
}
forward VKUnLinkAPI(playerid, resp, data[]);
public VKUnLinkAPI(playerid, resp, data[]) {
	if(resp != 200) return SendError(playerid, &quot;{0099FF}[VK] {ffffff}Техническая ошибка сервера. Свяжитесь с разработчиком.&quot;);
	new unused_str1[16], unused_str2[32], unused_str3[32]; // для обхода варнинга
	if(!sscanf(data, &quot;p&lt;,&gt;s[16]s[32]s[32]&quot;, unused_str1, unused_str2, unused_str3)) {
		#pragma unused unused_str1 // Убираем строки из пользования
		#pragma unused unused_str2
		#pragma unused unused_str3
		format(str_1, sizeof(str_1), &quot;{ffffff}На вашу страницу {0099FF}%s {ffffff}[{0099FF}%s{ffffff}] был отправлен код подтверждения\n\
											  Пожалуйста, введите его в поле ниже:&quot;, plVK[playerid][vkName], plVK[playerid][vkID]);
		ShowPlayerDialog(playerid, DLG_VK_UNCODE, DIALOG_STYLE_INPUT, &quot;Подтверждение VK&quot;, str_1, &quot;Отправить&quot;, &quot;Отмена&quot;); // Открываем диалог
	} else return SendError(playerid, &quot;{0099FF}[VK] {ffffff}Техническая ошибка сервера. Свяжитесь с разработчиком.&quot;);
	return 1;
}">
<span><span>forward VKLinkAPI(playerid, resp, data[]);  </span><span>// Создаём callback для получения данных</span></span>
<span><span>public</span><span> VKLinkAPI(playerid, resp, data[]) {  </span><span>// Используем callback для получения данных</span></span>
<span><span>    </span><span>if</span><span>(resp != </span><span>200</span><span>) {                   </span><span>// Если ответ от сервера НЕ равен 200</span></span>
<span><span>        </span><span>return</span><span> SendError(playerid, </span><span>"{0099FF}[VK] {ffffff}Техническая ошибка сервера. </span><span>Свяжитесь с разработчиком."</span><span>);</span></span>
<span><span>        </span><span>// Причины такого ответа:</span></span>
<span><span>        </span><span>//  Ошибка в коде PHP-файла</span></span>
<span><span>        </span><span>//  Неверно указана ссылка на PHP-файл</span></span>
<span><span>        </span><span>//  Был удалён сайт с файлом (неуплата / неактив) </span><span>на хостинге</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>new</span><span> first_name[</span><span>32</span><span>], last_name[</span><span>32</span><span>];                                                      </span><span>// Создаём переменные для получения информации о </span><span>пользователе</span></span>
<span><span>    </span><span>if</span><span>(!sscanf(data, </span><span>"p&lt;,&gt;s[16]s[32]s[32]"</span><span>, plVK[playerid][vkID], first_name, last_name)) { </span><span>// Если от сервера полчен ожидаемый ответ</span></span>
<span><span>        </span><span>// Можете не спрашивать, почему я сделал ID игрока </span><span>строкой, а не числом, я так захотел))</span></span>
<span><span>        </span><span>new</span><span> full_name[</span><span>64</span><span>];                                                                  </span><span>// Создаём переменную под полное имя игрока в ВК</span></span>
<span><span>        format(full_name, </span><span>64</span><span>, </span><span>"%s %s"</span><span>, first_name, last_name);                              </span><span>// Соеденяем имя и фамилию</span></span>
<span><span>        strmid(plVK[playerid][vkName], full_name, </span><span>0</span><span>, strlen(full_name));                    </span><span>// Записываем имя игрока в переменную</span></span>
<span><span>        </span><span>// Форматируем строку и показываем игроук диалог</span></span>
<span><span>        format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"{ffffff}На вашу страницу {0099FF}%s </span><span>{ffffff}[{0099FF}%s{ffffff}] был отправлен код </span><span>подтверждения\n</span><span>\</span></span>
<span><span>                                              Пожалуйста, введите его в поле ниже:"</span><span>, plVK[playerid][vkName], plVK[playerid][vkID]);</span></span>
<span><span>        ShowPlayerDialog(playerid, DLG_VK_CODE, </span><span>DIALOG_STYLE_INPUT, </span><span>"Подтверждение VK"</span><span>, str_1, </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Открываем диалог</span></span>
<span><span>    } </span><span>else</span><span> {        </span><span>// Если же ответ от сервера не тот, что мы ожидает</span></span>
<span><span>        </span><span>// print("(Слово удалено системой) выходит");</span></span>
<span><span>        </span><span>return</span><span> SendError(playerid, </span><span>"{0099FF}[VK] {ffffff}Техническая ошибка сервера. </span><span>Свяжитесь с разработчиком."</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
<span><span>forward VKUnLinkAPI(playerid, resp, data[]);</span></span>
<span><span>public</span><span> VKUnLinkAPI(playerid, resp, data[]) {</span></span>
<span><span>    </span><span>if</span><span>(resp != </span><span>200</span><span>) </span><span>return</span><span> SendError(playerid, </span><span>"{0099FF}[VK] {ffffff}Техническая ошибка сервера. </span><span>Свяжитесь с разработчиком."</span><span>);</span></span>
<span><span>    </span><span>new</span><span> unused_str1[</span><span>16</span><span>], unused_str2[</span><span>32</span><span>], unused_str3[</span><span>32</span><span>]; </span><span>// для обхода варнинга</span></span>
<span><span>    </span><span>if</span><span>(!sscanf(data, </span><span>"p&lt;,&gt;s[16]s[32]s[32]"</span><span>, unused_str1, unused_str2, unused_str3)) {</span></span>
<span><span>        #pragma</span><span> unused unused_str1 </span><span>// Убираем строки из пользования</span></span>
<span><span>        #pragma</span><span> unused unused_str2</span></span>
<span><span>        #pragma</span><span> unused unused_str3</span></span>
<span><span>        format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"{ffffff}На вашу страницу {0099FF}%s </span><span>{ffffff}[{0099FF}%s{ffffff}] был отправлен код </span><span>подтверждения\n</span><span>\</span></span>
<span><span>                                              Пожалуйста, введите его в поле ниже:"</span><span>, plVK[playerid][vkName], plVK[playerid][vkID]);</span></span>
<span><span>        ShowPlayerDialog(playerid, DLG_VK_UNCODE, </span><span>DIALOG_STYLE_INPUT, </span><span>"Подтверждение VK"</span><span>, str_1, </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Открываем диалог</span></span>
<span><span>    } </span><span>else</span><span> </span><span>return</span><span> SendError(playerid, </span><span>"{0099FF}[VK] {ffffff}Техническая ошибка сервера. </span><span>Свяжитесь с разработчиком."</span><span>);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Так же не забываем добавить команды для активации диалога с привязкой/отвязкой ВК-Аккаунта:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="CMD:linkvk(playerid) {							// Команда для привязки ВК
	if(plVK[playerid][vkStatus]) return SendError(playerid, &quot;{0099FF}[VK]{ffffff} У Вас уже привязан ВК-аккаунт&quot;); // Ошибка, если у игрока уже привязан ВК
	new VK_code = 100000 + random(899999); 		// Генерируем код для ВК
	SetPVarInt(playerid, &quot;VKCode&quot;, VK_code); 	// Привязываем код к игроку;
	// Форматируем текст диалога и открываем его для игрока
	format(str_1, sizeof(str_1), &quot;{ffffff}Привязка VK\n\
										  Для того, что привязать аккаунт ВК, выполните несколько действий:\n\
										  \t1. Перейдите в нашу группу %s\n\
										  \t2. Разрешите сообщение от группы\n\
										  \t3. Введите ID/короткое имя/ссылку ваше страницы в ВК.\n\
										  \t\tПримеры:\n\
										  \t\t\t- {0099FF}405249405{ffffff}\n\
										  \t\t\t- {0099FF}@olegsleash{ffffff}\n\
										  \t\t\t- {0099FF}vk.com/id405249405{ffffff}\n\
										  \t\t\t- {0099FF}https://vk.com/olegsleash{ffffff}\n\
										  \t\t\t- И т.д.&quot;, VK_GROUP);
	ShowPlayerDialog(playerid, DLG_VK_LINK, DIALOG_STYLE_INPUT, &quot;Привязка ВК&quot;, str_1, &quot;Отправить&quot;, &quot;Отмена&quot;);
	return 1;
}
CMD:unlinkvk(playerid) {
	if(!plVK[playerid][vkStatus]) return SendError(playerid, &quot;{0099FF}[VK]{ffffff} У Вас не привязан ВК-аккаунт&quot;); // Ошибка, если у игрока не привязан ВК
	SetPVarInt(playerid, &quot;VKCode&quot;, 100000 + random(899999)); 	// Генерируем и привязываем код к игроку;
	// Форматируем текст диалога и открываем его для игрока
	format(str_1, sizeof(str_1), &quot;Вы действительно хотите отвязать ВК-аккаунт {0099FF}%s {ffffff}[{0099FF}%s{ffffff}]?&quot;, plVK[playerid][vkName], plVK[playerid][vkID]);
	ShowPlayerDialog(playerid, DLG_VK_UNLINK, DIALOG_STYLE_MSGBOX, &quot;Отвязка ВК&quot;, str_1, &quot;Да&quot;, &quot;Отмена&quot;);
	return 1;
}">
<span><span>CMD:linkvk(playerid) {                          </span><span>// Команда для привязки ВК</span></span>
<span><span>    </span><span>if</span><span>(plVK[playerid][vkStatus]) </span><span>return</span><span> SendError(playerid, </span><span>"{0099FF}[VK]{ffffff} У Вас уже привязан </span><span>ВК-аккаунт"</span><span>); </span><span>// Ошибка, если у игрока уже привязан ВК</span></span>
<span><span>    </span><span>new</span><span> VK_code = </span><span>100000</span><span> + random(</span><span>899999</span><span>);      </span><span>// Генерируем код для ВК</span></span>
<span><span>    SetPVarInt(playerid, </span><span>"VKCode"</span><span>, VK_code);    </span><span>// Привязываем код к игроку;</span></span>
<span><span>    </span><span>// Форматируем текст диалога и открываем его для </span><span>игрока</span></span>
<span><span>    format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"{ffffff}Привязка VK\n</span><span>\</span></span>
<span><span>                                          Для того, что привязать аккаунт ВК, </span><span>выполните несколько действий:\n</span><span>\</span></span>
<span><span>                                          \t1. Перейдите в нашу группу %s\n</span><span>\</span></span>
<span><span>                                          \t2. Разрешите сообщение от группы\n</span><span>\</span></span>
<span><span>                                          \t3. Введите ID/короткое имя/ссылку </span><span>ваше страницы в ВК.\n</span><span>\</span></span>
<span><span>                                          \t\tПримеры:\n</span><span>\</span></span>
<span><span>                                          \t\t\t- {0099FF}405249405{ffffff}\n</span><span>\</span></span>
<span><span>                                          \t\t\t- {0099FF}@olegsleash{ffffff}\n</span><span>\</span></span>
<span><span>                                          \t\t\t- {0099FF}vk.com/id405249405{fff</span><span>fff}\n</span><span>\</span></span>
<span><span>                                          \t\t\t- {0099FF}https://vk.com/olegsle</span><span>ash{ffffff}\n</span><span>\</span></span>
<span><span>                                          \t\t\t- И т.д."</span><span>, VK_GROUP);</span></span>
<span><span>    ShowPlayerDialog(playerid, DLG_VK_LINK, </span><span>DIALOG_STYLE_INPUT, </span><span>"Привязка ВК"</span><span>, str_1, </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
<span><span>CMD:unlinkvk(playerid) {</span></span>
<span><span>    </span><span>if</span><span>(!plVK[playerid][vkStatus]) </span><span>return</span><span> SendError(playerid, </span><span>"{0099FF}[VK]{ffffff} У Вас не привязан </span><span>ВК-аккаунт"</span><span>); </span><span>// Ошибка, если у игрока не привязан ВК</span></span>
<span><span>    SetPVarInt(playerid, </span><span>"VKCode"</span><span>, </span><span>100000</span><span> + random(</span><span>899999</span><span>));    </span><span>// Генерируем и привязываем код к игроку;</span></span>
<span><span>    </span><span>// Форматируем текст диалога и открываем его для </span><span>игрока</span></span>
<span><span>    format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"Вы действительно хотите отвязать ВК-аккаунт </span><span>{0099FF}%s {ffffff}[{0099FF}%s{ffffff}]?"</span><span>, plVK[playerid][vkName], plVK[playerid][vkID]);</span></span>
<span><span>    ShowPlayerDialog(playerid, DLG_VK_UNLINK, </span><span>DIALOG_STYLE_MSGBOX, </span><span>"Отвязка ВК"</span><span>, str_1, </span><span>"Да"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Соответственно добавляем работу с диалогами:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
	switch(dialogid) {
		case DLG_VK_LINK: {
			if(!response) return false; // Если игрок нажал &quot;Отмена&quot;
			if(!(5 &lt;= strlen(inputtext) &lt;= 50)) return SendError(playerid, &quot;{0099FF}[VK]{ffffff} Длина ссылки не может быть меньше 6 и более 50 символов!&quot;);
			// Форматируем строку и отправляем сообщение в ВК игроку
			format(str_1, sizeof(str_1), &quot;Используте следующий код для привязки ВК-Аккаунта для игрового аккаунта: %d&quot;, GetPVarInt(playerid, &quot;VKCode&quot;));
			SendVKMessage(playerid, str_1, inputtext, &quot;VKLinkAPI&quot;); // Отправляем запрос PHP-файлу с callback = VKLinkAPI
		} case DLG_VK_CODE: {
			if(!response) {
				strmid(plVK[playerid][vkName], &quot;None&quot;, 0, 4);
				strmid(plVK[playerid][vkID],   &quot;None&quot;, 0, 4);
				plVK[playerid][vkStatus] 	= 0;
			} // Очищаем данные при отказе вводить код
			if(!strlen(inputtext) || !strval(inputtext)) {
				format(str_1, sizeof(str_1), &quot;{ffffff}На вашу страницу {0099FF}%s {ffffff}[{0099FF}%s{ffffff}] был отправлен код подтверждения\n\
											  Пожалуйста, введите его в поле ниже:&quot;, plVK[playerid][vkName], plVK[playerid][vkID]); // Форматируем строку для диалога
				return ShowPlayerDialog(playerid, DLG_VK_CODE, DIALOG_STYLE_INPUT, &quot;Подстверждение VK&quot;, str_1, &quot;Отправить&quot;, &quot;Отмена&quot;); // Открываем диалог
			} // Если игрок ничего не ввёл или в строке не только цифры
			new input_code = strval(inputtext);
			if(input_code == GetPVarInt(playerid, &quot;VKCode&quot;)) { // Если код тот, что отправили в ВК
				SendClientMessage(playerid, 0x0099FFFF, &quot;[VK] {ffffff}Вы успешно привязали свою страницу к аккаунту!&quot;);
				plVK[playerid][vkStatus] = 1; // Статус привязкки ВК устанавливаем на &quot;ДА&quot;
				SaveVKData(playerid);			 // Сохраняем данные ВК в базу данных
			} else { // Если код не совпадает
				SendError(playerid, &quot;{0099FF}[VK]{ffffff} Вы ввели неверный код подтверждения!&quot;);
				format(str_1, sizeof(str_1), &quot;{ffffff}На вашу страницу {0099FF}%s {ffffff}[{0099FF}%s{ffffff}] был отправлен код подтверждения\n\
											  Пожалуйста, введите его в поле ниже:&quot;, plVK[playerid][vkName], plVK[playerid][vkID]); // Форматируем строку для диалога
				return ShowPlayerDialog(playerid, DLG_VK_CODE, DIALOG_STYLE_INPUT, &quot;Подстверждение VK&quot;, str_1, &quot;Отправить&quot;, &quot;Отмена&quot;); // Открываем диалог
			}
		} case DLG_VK_UNLINK: {
			if(!response) return false; // Если игрок нажал &quot;Отмена&quot;
			// Форматируем строку и отправляем сообщение в ВК игроку
			format(str_1, sizeof(str_1), &quot;Используте следующий код для отвязки ВК-Аккаунта для игрового аккаунта: %d&quot;, GetPVarInt(playerid, &quot;VKCode&quot;));
			SendVKMessage(playerid, str_1, plVK[playerid][vkID], &quot;VKUnLinkAPI&quot;); // Отправляем запрос PHP-файлу с callback = VKUnLinkAPI
		} case DLG_VK_UNCODE: {
			if(!response) return false;
			if(!strlen(inputtext) || !strval(inputtext)) {
				format(str_1, sizeof(str_1), &quot;{ffffff}На вашу страницу {0099FF}%s {ffffff}[{0099FF}%s{ffffff}] был отправлен код подтверждения\n\
											  Пожалуйста, введите его в поле ниже:&quot;, plVK[playerid][vkName], plVK[playerid][vkID]); // Форматируем строку для диалога
				return ShowPlayerDialog(playerid, DLG_VK_UNCODE, DIALOG_STYLE_INPUT, &quot;Подстверждение VK&quot;, str_1, &quot;Отправить&quot;, &quot;Отмена&quot;); // Открываем диалог
			} // Если игрок ничего не ввёл или в строке не только цифры
			new input_code = strval(inputtext);
			if(input_code == GetPVarInt(playerid, &quot;VKCode&quot;)) { // Если код тот, что отправили в ВК
				SendClientMessage(playerid, 0x0099FFFF, &quot;[VK] {ffffff}Вы успешно отвязали свою страницу от аккаунта!&quot;);
				strmid(plVK[playerid][vkName], &quot;None&quot;, 0, 4);
				strmid(plVK[playerid][vkID],   &quot;None&quot;, 0, 4);
				plVK[playerid][vkStatus] 	= 0;
				SaveVKData(playerid);			 // Сохраняем данные ВК в базу данных
			} else { // Если код не совпадает
				SendError(playerid, &quot;{0099FF}[VK]{ffffff} Вы ввели неверный код подтверждения!&quot;);
				format(str_1, sizeof(str_1), &quot;{ffffff}На вашу страницу {0099FF}%s {ffffff}[{0099FF}%s{ffffff}] был отправлен код подтверждения\n\
											  Пожалуйста, введите его в поле ниже:&quot;, plVK[playerid][vkName], plVK[playerid][vkID]); // Форматируем строку для диалога
				return ShowPlayerDialog(playerid, DLG_VK_UNCODE, DIALOG_STYLE_INPUT, &quot;Подстверждение VK&quot;, str_1, &quot;Отправить&quot;, &quot;Отмена&quot;); // Открываем диалог
			}
		}
	}
	return 1;
}">
<span><span>public</span><span> OnDialogResponse(playerid, dialogid, response, li</span><span>stitem, inputtext[]) {</span></span>
<span><span>    </span><span>switch</span><span>(dialogid) {</span></span>
<span><span>        </span><span>case</span><span> DLG_VK_LINK: {</span></span>
<span><span>            </span><span>if</span><span>(!response) </span><span>return</span><span> </span><span>false</span><span>; </span><span>// Если игрок нажал "Отмена"</span></span>
<span><span>            </span><span>if</span><span>(!(</span><span>5</span><span> &lt;= strlen(inputtext) &lt;= </span><span>50</span><span>)) </span><span>return</span><span> SendError(playerid, </span><span>"{0099FF}[VK]{ffffff} Длина ссылки не может быть </span><span>меньше 6 и более 50 символов!"</span><span>);</span></span>
<span><span>            </span><span>// Форматируем строку и отправляем сообщение в ВК </span><span>игроку</span></span>
<span><span>            format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"Используте следующий код для привязки ВК-Аккаунта </span><span>для игрового аккаунта: %d"</span><span>, GetPVarInt(playerid, </span><span>"VKCode"</span><span>));</span></span>
<span><span>            SendVKMessage(playerid, str_1, inputtext, </span><span>"VKLinkAPI"</span><span>); </span><span>// Отправляем запрос PHP-файлу с callback = </span><span>VKLinkAPI</span></span>
<span><span>        } </span><span>case</span><span> DLG_VK_CODE: {</span></span>
<span><span>            </span><span>if</span><span>(!response) {</span></span>
<span><span>                strmid(plVK[playerid][vkName], </span><span>"None"</span><span>, </span><span>0</span><span>, </span><span>4</span><span>);</span></span>
<span><span>                strmid(plVK[playerid][vkID],   </span><span>"None"</span><span>, </span><span>0</span><span>, </span><span>4</span><span>);</span></span>
<span><span>                plVK[playerid][vkStatus]    = </span><span>0</span><span>;</span></span>
<span><span>            } </span><span>// Очищаем данные при отказе вводить код</span></span>
<span><span>            </span><span>if</span><span>(!strlen(inputtext) || !strval(inputtext)) {</span></span>
<span><span>                format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"{ffffff}На вашу страницу {0099FF}%s </span><span>{ffffff}[{0099FF}%s{ffffff}] был отправлен код </span><span>подтверждения\n</span><span>\</span></span>
<span><span>                                              Пожалуйста, введите его в поле ниже:"</span><span>, plVK[playerid][vkName], plVK[playerid][vkID]); </span><span>// Форматируем строку для диалога</span></span>
<span><span>                </span><span>return</span><span> ShowPlayerDialog(playerid, DLG_VK_CODE, </span><span>DIALOG_STYLE_INPUT, </span><span>"Подстверждение VK"</span><span>, str_1, </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Открываем диалог</span></span>
<span><span>            } </span><span>// Если игрок ничего не ввёл или в строке не </span><span>только цифры</span></span>
<span><span>            </span><span>new</span><span> input_code = strval(inputtext);</span></span>
<span><span>            </span><span>if</span><span>(input_code == GetPVarInt(playerid, </span><span>"VKCode"</span><span>)) { </span><span>// Если код тот, что отправили в ВК</span></span>
<span><span>                SendClientMessage(playerid, </span><span>0x0099FFFF</span><span>, </span><span>"[VK] {ffffff}Вы успешно привязали свою страницу к </span><span>аккаунту!"</span><span>);</span></span>
<span><span>                plVK[playerid][vkStatus] = </span><span>1</span><span>; </span><span>// Статус привязкки ВК устанавливаем на "ДА"</span></span>
<span><span>                SaveVKData(playerid);            </span><span>// Сохраняем данные ВК в базу данных</span></span>
<span><span>            } </span><span>else</span><span> { </span><span>// Если код не совпадает</span></span>
<span><span>                SendError(playerid, </span><span>"{0099FF}[VK]{ffffff} Вы ввели неверный код </span><span>подтверждения!"</span><span>);</span></span>
<span><span>                format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"{ffffff}На вашу страницу {0099FF}%s </span><span>{ffffff}[{0099FF}%s{ffffff}] был отправлен код </span><span>подтверждения\n</span><span>\</span></span>
<span><span>                                              Пожалуйста, введите его в поле ниже:"</span><span>, plVK[playerid][vkName], plVK[playerid][vkID]); </span><span>// Форматируем строку для диалога</span></span>
<span><span>                </span><span>return</span><span> ShowPlayerDialog(playerid, DLG_VK_CODE, </span><span>DIALOG_STYLE_INPUT, </span><span>"Подстверждение VK"</span><span>, str_1, </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Открываем диалог</span></span>
<span><span>            }</span></span>
<span><span>        } </span><span>case</span><span> DLG_VK_UNLINK: {</span></span>
<span><span>            </span><span>if</span><span>(!response) </span><span>return</span><span> </span><span>false</span><span>; </span><span>// Если игрок нажал "Отмена"</span></span>
<span><span>            </span><span>// Форматируем строку и отправляем сообщение в ВК </span><span>игроку</span></span>
<span><span>            format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"Используте следующий код для отвязки ВК-Аккаунта </span><span>для игрового аккаунта: %d"</span><span>, GetPVarInt(playerid, </span><span>"VKCode"</span><span>));</span></span>
<span><span>            SendVKMessage(playerid, str_1, </span><span>plVK[playerid][vkID], </span><span>"VKUnLinkAPI"</span><span>); </span><span>// Отправляем запрос PHP-файлу с callback = </span><span>VKUnLinkAPI</span></span>
<span><span>        } </span><span>case</span><span> DLG_VK_UNCODE: {</span></span>
<span><span>            </span><span>if</span><span>(!response) </span><span>return</span><span> </span><span>false</span><span>;</span></span>
<span><span>            </span><span>if</span><span>(!strlen(inputtext) || !strval(inputtext)) {</span></span>
<span><span>                format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"{ffffff}На вашу страницу {0099FF}%s </span><span>{ffffff}[{0099FF}%s{ffffff}] был отправлен код </span><span>подтверждения\n</span><span>\</span></span>
<span><span>                                              Пожалуйста, введите его в поле ниже:"</span><span>, plVK[playerid][vkName], plVK[playerid][vkID]); </span><span>// Форматируем строку для диалога</span></span>
<span><span>                </span><span>return</span><span> ShowPlayerDialog(playerid, DLG_VK_UNCODE, </span><span>DIALOG_STYLE_INPUT, </span><span>"Подстверждение VK"</span><span>, str_1, </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Открываем диалог</span></span>
<span><span>            } </span><span>// Если игрок ничего не ввёл или в строке не </span><span>только цифры</span></span>
<span><span>            </span><span>new</span><span> input_code = strval(inputtext);</span></span>
<span><span>            </span><span>if</span><span>(input_code == GetPVarInt(playerid, </span><span>"VKCode"</span><span>)) { </span><span>// Если код тот, что отправили в ВК</span></span>
<span><span>                SendClientMessage(playerid, </span><span>0x0099FFFF</span><span>, </span><span>"[VK] {ffffff}Вы успешно отвязали свою страницу от </span><span>аккаунта!"</span><span>);</span></span>
<span><span>                strmid(plVK[playerid][vkName], </span><span>"None"</span><span>, </span><span>0</span><span>, </span><span>4</span><span>);</span></span>
<span><span>                strmid(plVK[playerid][vkID],   </span><span>"None"</span><span>, </span><span>0</span><span>, </span><span>4</span><span>);</span></span>
<span><span>                plVK[playerid][vkStatus]    = </span><span>0</span><span>;</span></span>
<span><span>                SaveVKData(playerid);            </span><span>// Сохраняем данные ВК в базу данных</span></span>
<span><span>            } </span><span>else</span><span> { </span><span>// Если код не совпадает</span></span>
<span><span>                SendError(playerid, </span><span>"{0099FF}[VK]{ffffff} Вы ввели неверный код </span><span>подтверждения!"</span><span>);</span></span>
<span><span>                format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"{ffffff}На вашу страницу {0099FF}%s </span><span>{ffffff}[{0099FF}%s{ffffff}] был отправлен код </span><span>подтверждения\n</span><span>\</span></span>
<span><span>                                              Пожалуйста, введите его в поле ниже:"</span><span>, plVK[playerid][vkName], plVK[playerid][vkID]); </span><span>// Форматируем строку для диалога</span></span>
<span><span>                </span><span>return</span><span> ShowPlayerDialog(playerid, DLG_VK_UNCODE, </span><span>DIALOG_STYLE_INPUT, </span><span>"Подстверждение VK"</span><span>, str_1, </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Открываем диалог</span></span>
<span><span>            }</span></span>
<span><span>        }</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Ну и само собой загрузка и сохранение данных ВК игроков в базу данных:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="stock SaveVKData(playerid) {	// Функция созранения ВК-данных игрока
	new playerNName[MAX_PLAYER_NAME];
	GetPlayerName(playerid, playerNName, MAX_PLAYER_NAME);
	format(str_1, sizeof(str_1), &quot;UPDATE `%s` SET `vkName` = '%s', `vkID` = '%s', `vkStatus` = '%d' WHERE `%s' = '%s' LIMIT 1&quot;,\
		DB_ACCOUNTS, plVK[playerid][vkName], plVK[playerid][vkID], plVK[playerid][vkStatus], DB_ACCOUNTS_NAME, playerNName);
	// Создаём запрос в базу данных
	mysql_query(1, str_1, false);
}
stock LoadVKData(playerid) {
	new playerNName[MAX_PLAYER_NAME];
	GetPlayerName(playerid, playerNName, MAX_PLAYER_NAME);
	format(str_1, sizeof(str_1), &quot;SELECT `vkName`, `vkID`, `vkStatus` FROM `%s` WHERE `%s' = '%s' LIMIT 1&quot;, DB_ACCOUNTS, DB_ACCOUNTS_NAME, playerNName);
	// Создаём запрос в базу данных
	new Cache:vk_cache = mysql_query(1, str_1, true);
	cache_get_field_content(0, &quot;vkName&quot;, plVK[playerid][vkName]);		// Получаем имя аккаунта ВК
	cache_get_field_content(0, &quot;vkID&quot;, plVK[playerid][vkID]);			// Получаем ID аккаунта ВК
	plVK[playerid][vkStatus] = cache_get_field_content(0, &quot;vkStatus&quot;);	// Получаем статус привязки
	cache_delete(vk_cache);
	return 1;
}">
<span><span>stock SaveVKData(playerid) {    </span><span>// Функция созранения ВК-данных игрока</span></span>
<span><span>    </span><span>new</span><span> playerNName[MAX_PLAYER_NAME];</span></span>
<span><span>    GetPlayerName(playerid, playerNName, MAX_PLAYER_N</span><span>AME);</span></span>
<span><span>    format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"UPDATE `%s` SET `vkName` = '%s', `vkID` = '%s', `</span><span>vkStatus` = '%d' WHERE `%s' = '%s' LIMIT 1"</span><span>,\</span></span>
<span><span>        DB_ACCOUNTS, plVK[playerid][vkName], plVK[player</span><span>id][vkID], plVK[playerid][vkStatus], DB_ACCOUNTS_N</span><span>AME, playerNName);</span></span>
<span><span>    </span><span>// Создаём запрос в базу данных</span></span>
<span><span>    mysql_query(</span><span>1</span><span>, str_1, </span><span>false</span><span>);</span></span>
<span><span>}</span></span>
<span><span>stock LoadVKData(playerid) {</span></span>
<span><span>    </span><span>new</span><span> playerNName[MAX_PLAYER_NAME];</span></span>
<span><span>    GetPlayerName(playerid, playerNName, MAX_PLAYER_N</span><span>AME);</span></span>
<span><span>    format(str_1, </span><span>sizeof</span><span>(str_1), </span><span>"SELECT `vkName`, `vkID`, `vkStatus` FROM `%s` WHE</span><span>RE `%s' = '%s' LIMIT 1"</span><span>, DB_ACCOUNTS, DB_ACCOUNTS_NAME, playerNName);</span></span>
<span><span>    </span><span>// Создаём запрос в базу данных</span></span>
<span><span>    </span><span>new</span><span> Cache:vk_cache = mysql_query(</span><span>1</span><span>, str_1, </span><span>true</span><span>);</span></span>
<span><span>    cache_get_field_content(</span><span>0</span><span>, </span><span>"vkName"</span><span>, plVK[playerid][vkName]);       </span><span>// Получаем имя аккаунта ВК</span></span>
<span><span>    cache_get_field_content(</span><span>0</span><span>, </span><span>"vkID"</span><span>, plVK[playerid][vkID]);           </span><span>// Получаем ID аккаунта ВК</span></span>
<span><span>    plVK[playerid][vkStatus] = </span><span>cache_get_field_content(</span><span>0</span><span>, </span><span>"vkStatus"</span><span>);  </span><span>// Получаем статус привязки</span></span>
<span><span>    cache_delete(vk_cache);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Теперь перейдём к тестированию кода:
</p>

<p>
	Скриншоты привязки ВК:
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b5751ed459__2023-11-20_155545292.png.ed128315059459445471637401a09262.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16947" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b5751ed459__2023-11-20_155545292.png.ed128315059459445471637401a09262.png" /></p>

		<p>
			<img alt="655b575c75cf8__2023-11-20_155556102.png.3552953965941f0f2a4ec30ba98bbc81.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16948" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b575c75cf8__2023-11-20_155556102.png.3552953965941f0f2a4ec30ba98bbc81.png" /></p>

		<p>
			<img alt="655b5768b6bdc__2023-11-20_155608170.png.aaeee7e62f4754b7c66b851b624c18d7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16949" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b5768b6bdc__2023-11-20_155608170.png.aaeee7e62f4754b7c66b851b624c18d7.png" /></p>

		<p>
			<img alt="655b57711da52__2023-11-20_155616691.png.41900e6a255d8edccbfd28249c771bd9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16950" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b57711da52__2023-11-20_155616691.png.41900e6a255d8edccbfd28249c771bd9.png" /></p>

		<p>
			<img alt="655b57d49d563__2023-11-20_155756186.png.e73d7034f514a9b1a8514518fcece4a4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16951" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b57d49d563__2023-11-20_155756186.png.e73d7034f514a9b1a8514518fcece4a4.png" /></p>
	</div>
</div>

<p>
	Скриншоты отвязки ВК:
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="655b57f2aeba3__2023-11-20_155826274.png.f0de8ebbfa79fa5ff0795b47e4c2af40.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16952" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b57f2aeba3__2023-11-20_155826274.png.f0de8ebbfa79fa5ff0795b47e4c2af40.png" /></p>

		<p>
			<img alt="655b580d920b6__2023-11-20_155853192.png.804f5f8610f218295ac732c8682952ff.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16953" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b580d920b6__2023-11-20_155853192.png.804f5f8610f218295ac732c8682952ff.png" /></p>

		<p>
			<img alt="655b5823d8b41__2023-11-20_155915192.png.3d25b1ffc024151ff40e6bee0c566568.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16954" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b5823d8b41__2023-11-20_155915192.png.3d25b1ffc024151ff40e6bee0c566568.png" /></p>

		<p>
			<img alt="655b583a8546e__2023-11-20_155938145.png.d93ea51672092727ff9199e9b15e11e2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16955" src="//storage.yandexcloud.net/pawnorus/monthly_2023_11/655b583a8546e__2023-11-20_155938145.png.d93ea51672092727ff9199e9b15e11e2.png" /></p>
	</div>
</div>

<p>
	На этом я бы хотел закончить свой урок, всем хорошего настроения!
</p>

<p>
	P.S. Дядюшка Cawfee, пожалуйста не выдавай предупреждение за код, я не хочу, что бы моя темы выглядела как совокупность спойлеров)
</p>
]]></description><guid isPermaLink="false">7581</guid><pubDate>Mon, 20 Nov 2023 13:03:47 +0000</pubDate></item><item><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x43F;&#x43E;&#x43B;&#x435;&#x442;&#x430; &#x43A;&#x430;&#x43C;&#x435;&#x440;&#x43E;&#x439;</title><link>https://pawno-rus.com/topic/2593-sistema-poleta-kameroy/</link><description><![CDATA[
<p>
	<span style="font-size:16px;"><strong>Описание системы.</strong></span>
</p>

<p>
	Система полета камерой представляет собой возможность перемещаться в пространстве игры по всем осям (X, Y, Z) путем нажатия кнопок на клавиатуре.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><strong>Подключение системы.</strong></span>
</p>

<p>
	1. Система написана в отдельном файле. Вам необходимо скачать этот файл и добавить в папку, находящейся в следующей директории:
</p>

<pre class="ipsCode prettyprint prettyprinted" id="ips_uid_2994_4" style="">
<span class="str">"..\pawno\include"</span></pre>

<p>
	2. Затем Вам следует открыть свой игровой мод и в начале, после всех директив включения заголовочных файлов (#include), дописать следующую строку:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='#include "fly"'>
<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">"</span><span class="mtk20">fly</span><span class="mtk6">"</span></span>
</pre>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><strong>Работа с системой.</strong></span>
</p>

<p>
	В систему полета камерой включены две функции:
</p>

<p>
	1. Изменение состояния полета игрока.
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='SetPlayerFlyStatus(playerid, status = CAMERA_MODE_REVERSE)&#13;
/*&#13;
	playerid - ID игрока, которого Вы хотите "отправить" в режим полета&#13;
	status - режим полета*&#13;
    &#13;
    * предусмотрено три режима полета:&#13;
		CAMERA_MODE_NONE	(0) - выключить режим полета,&#13;
		CAMERA_MODE_FLY		(1) - включить режим полета,&#13;
		CAMERA_MODE_REVERSE	(2) - сменить режим на реверсивный&#13;
*/'>
<span><span class="mtk1">SetPlayerFlyStatus(playerid, status = CAMERA_MODE_</span><span class="mtk1">REVERSE)</span></span>
<span><span class="mtk8">/*</span></span>
<span><span class="mtk8">    playerid - ID игрока, которого Вы хотите </span><span class="mtk8">"отправить" в режим полета</span></span>
<span><span class="mtk8">    status - режим полета*</span></span>
<span><span class="mtk8">    </span></span>
<span><span class="mtk8">    * предусмотрено три режима полета:</span></span>
<span><span class="mtk8">        CAMERA_MODE_NONE    (0) - выключить режим полета,</span></span>
<span><span class="mtk8">        CAMERA_MODE_FLY     (1) - включить режим полета,</span></span>
<span><span class="mtk8">        CAMERA_MODE_REVERSE (2) - сменить режим на </span><span class="mtk8">реверсивный</span></span>
<span><span class="mtk8">*/</span></span>
</pre>

<p>
	2. Проверка, находится ли игрок в "полете".
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="IsPlayerFlying(playerid)&#13;
/*&#13;
	playerid - ID игрока, пребывание в состоянии полета которого Вы хотите проверить&#13;
	&#13;
	* данная функция возвращает:&#13;
		CAMERA_MODE_NONE	(0), если игрок не находится в состоянии полета,&#13;
		CAMERA_MODE_FLY		(1), если игрок находится в состоянии полета&#13;
	&#13;
*/">
<span><span class="mtk1">IsPlayerFlying(playerid)</span></span>
<span><span class="mtk8">/*</span></span>
<span><span class="mtk8">    playerid - ID игрока, пребывание в состоянии </span><span class="mtk8">полета которого Вы хотите проверить</span></span>
<span><span class="mtk8">    </span></span>
<span><span class="mtk8">    * данная функция возвращает:</span></span>
<span><span class="mtk8">        CAMERA_MODE_NONE    (0), если игрок не находится в </span><span class="mtk8">состоянии полета,</span></span>
<span><span class="mtk8">        CAMERA_MODE_FLY     (1), если игрок находится в </span><span class="mtk8">состоянии полета</span></span>
<span><span class="mtk8">    </span></span>
<span><span class="mtk8">*/</span></span>
</pre>

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

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><strong>Особенности системы.</strong></span>
</p>

<p>
	Системой полета предусмотрено, что игрок, выходящий из режима полета, появится именно там, где вышел. Так, если вы покидаете режим полета, пребывая в озере, то появление игрока будет именно в этом озере.
</p>

<p>
	 
</p>

<p>
	<strong><span style="font-size:16px;">Пример использования.</span></strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode='CMD:fly(playerid, params[])&#13;
{&#13;
	static const MSG_USE_CMD[] = !"» Usage the command: /fly [mode 0-2]";&#13;
	&#13;
	if(isnull(params)) {&#13;
        return SendClientMessage(playerid, -1, MSG_USE_CMD) &amp; 0;&#13;
    }&#13;
&#13;
    new mode;&#13;
	if(sscanf(params, "d", mode)) {&#13;
        return SendClientMessage(playerid, -1, MSG_USE_CMD) &amp; 0;&#13;
    }&#13;
    &#13;
    if(!(mode &gt;= 0 &amp;&amp; mode &lt;= 2)) {&#13;
        return SendClientMessage(playerid, -1, MSG_USE_CMD) &amp; 0;&#13;
    }&#13;
&#13;
	SetPlayerFlyStatus(playerid, mode);&#13;
	return 1;&#13;
}&#13;
CMD:checkfly(playerid, params[])&#13;
{&#13;
	static const MSG_USE_CMD[] = !"» Usage the command: /checkfly [playerid]";&#13;
	&#13;
	if(isnull(params)) {&#13;
        return SendClientMessage(playerid, -1, MSG_USE_CMD) &amp; 0;&#13;
    }&#13;
&#13;
    new id;&#13;
	if(sscanf(params, "u", id)) {&#13;
        return SendClientMessage(playerid, -1, MSG_USE_CMD) &amp; 0;&#13;
    }&#13;
&#13;
    if(id == INVALID_PLAYER_ID) {&#13;
        return SendClientMessage(playerid, -1, !"The player is not connected") &amp; 0;&#13;
    }&#13;
&#13;
	static const status_fly[][] =&#13;
	{&#13;
		!"The player is not flying",&#13;
		!"The player is flying"&#13;
	};&#13;
    &#13;
	SendClientMessage(playerid, -1, status_fly[IsPlayerFlying(id)]);&#13;
	return 1&#13;
}'>
<span><span class="mtk1">CMD:fly(playerid, params[])</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"> MSG_USE_CMD[] = !</span><span class="mtk20">"» Usage the command: /fly [mode 0-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">(isnull(params)) {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, MSG_USE_CMD) &amp; </span><span class="mtk7">0</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"> mode;</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(sscanf(params, </span><span class="mtk20">"d"</span><span class="mtk1">, mode)) {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, MSG_USE_CMD) &amp; </span><span class="mtk7">0</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">if</span><span class="mtk1">(!(mode &gt;= </span><span class="mtk7">0</span><span class="mtk1"> &amp;&amp; mode &lt;= </span><span class="mtk7">2</span><span class="mtk1">)) {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, MSG_USE_CMD) &amp; </span><span class="mtk7">0</span><span class="mtk1">;</span></span>
<span><span class="mtk1">    }</span></span>

<span><span class="mtk1">    SetPlayerFlyStatus(playerid, mode);</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">CMD:checkfly(playerid, params[])</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"> MSG_USE_CMD[] = !</span><span class="mtk20">"» Usage the command: /checkfly [playerid]"</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">(isnull(params)) {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, MSG_USE_CMD) &amp; </span><span class="mtk7">0</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"> id;</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(sscanf(params, </span><span class="mtk20">"u"</span><span class="mtk1">, id)) {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, MSG_USE_CMD) &amp; </span><span class="mtk7">0</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">(id == INVALID_PLAYER_ID) {</span></span>
<span><span class="mtk1">        </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, !</span><span class="mtk20">"The player is not connected"</span><span class="mtk1">) &amp; </span><span class="mtk7">0</span><span class="mtk1">;</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"> status_fly[][] =</span></span>
<span><span class="mtk1">    {</span></span>
<span><span class="mtk1">        !</span><span class="mtk20">"The player is not flying"</span><span class="mtk1">,</span></span>
<span><span class="mtk1">        !</span><span class="mtk20">"The player is flying"</span></span>
<span><span class="mtk1">    };</span></span>
<span><span class="mtk1">    </span></span>
<span><span class="mtk1">    SendClientMessage(playerid, -</span><span class="mtk7">1</span><span class="mtk1">, status_fly[IsPlayerFlying(id)]);</span></span>
<span><span class="mtk1">    </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span></span>
<span><span class="mtk1">}</span></span>
</pre>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileid="1533" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=1533" rel="">fly.inc</a>
</p>
]]></description><guid isPermaLink="false">2593</guid><pubDate>Mon, 04 Jun 2018 16:29:24 +0000</pubDate></item><item><title>JetPack</title><link>https://pawno-rus.com/topic/6913-jetpack/</link><description><![CDATA[
<p>
	 
</p>

<p>
	<span style="color:rgb(206,202,195);"><span><span>Всем привет народ, сегодня я вам покажу как создать<br /><br />
	команду которая выдает нам Джетпак.</span></span></span><br style="color:rgb(206,202,195);" /><br style="color:rgb(206,202,195);" /><span style="color:rgb(206,202,195);"><span>Погнали</span></span>
</p>

<p>
	 
</p>

<p>
	<span style="color:rgb(206,202,195);">Переходим к OnPlayerCommandText и вставляем этот код:</span>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="if(strcmp(cmd, &quot;/jp&quot;, true) == 0)
{
        if(PlayerInfo[playerid][pAdmin] &gt;=11) // Проверка на админку
        {
           SetPlayerSpecialAction( playerid, SPECIAL_ACTION_USEJETPACK );
           SendClientMessage(playerid, COLOR_RED, &quot;Вам было выдано JetPack.&quot;);
        }
}">
<span><span>if</span><span>(strcmp(cmd, </span><span>"/jp"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>{</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pAdmin] &gt;=</span><span>11</span><span>) </span><span>// Проверка на админку</span></span>
<span><span>        {</span></span>
<span><span>           SetPlayerSpecialAction( playerid, SPECI</span><span>AL_ACTION_USEJETPACK );</span></span>
<span><span>           SendClientMessage(playerid, COLOR_RED, </span><span>"Вам было выдано JetPack."</span><span>);</span></span>
<span><span>        }</span></span>
<span><span>}</span></span>
</pre>

<p>
	<span style="color:rgb(206,202,195);">Для удаления JetPack-a добавляем ещё одну команду: НО МОЖНО НЕ ДОБАВЛЯТЬ ПРОСТО НАЖАТЬ F </span>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="if(strcmp(cmd, &quot;/delljp&quot;, true) == 0)
{
        if(PlayerInfo[playerid][pAdmin] &gt;=11)
        {
           SetPlayerSpecialAction( playerid, SPECIAL_ACTION_NONE );
           SendClientMessage(playerid, COLOR_RED, &quot;Вы убрали JetPack.&quot;);
        }
}">
<span><span>if</span><span>(strcmp(cmd, </span><span>"/delljp"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>{</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pAdmin] &gt;=</span><span>11</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>           SetPlayerSpecialAction( playerid, SPECI</span><span>AL_ACTION_NONE );</span></span>
<span><span>           SendClientMessage(playerid, COLOR_RED, </span><span>"Вы убрали JetPack."</span><span>);</span></span>
<span><span>        }</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">6913</guid><pubDate>Fri, 02 Dec 2022 01:12:27 +0000</pubDate></item><item><title>&#x410;&#x43D;&#x442;&#x438;&#x432;&#x43E;&#x437;&#x433;&#x43E;&#x440;&#x430;&#x43D;&#x438;&#x435; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x44B;</title><link>https://pawno-rus.com/topic/680-antivozgoranie-mashiny/</link><description><![CDATA[
<p>
	Данная система подойдет как для Дрифт так и РП модов. Так как возгорание машины для РП модов как-то не очень <img alt=":(" data-emoticon="true" height="20" src="//storage.yandexcloud.net/pawnorus/emoticons/sad.png" srcset="//storage.yandexcloud.net/pawnorus/emoticons/sad@2x.png 2x" title=":(" width="20"></p>

<p>
	В конец мода:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_4884_4">
<span class="pln">forward autochinilka</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> autochinilka</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> playerid</span><span class="pun">=</span><span class="lit">0</span><span class="pun">;</span><span class="pln"> playerid</span><span class="pun">&lt;</span><span class="pln">MAX_PLAYERS</span><span class="pun">;</span><span class="pln"> playerid</span><span class="pun">++)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="typ">IsPlayerInAnyVehicle</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">)</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="typ">GetPlayerState</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">)</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> PLAYER_STATE_DRIVER</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">continue</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Float</span><span class="pun">:</span><span class="pln">HPMASHINI</span><span class="pun">;</span><span class="pln">
            </span><span class="typ">GetVehicleHealth</span><span class="pun">(</span><span class="typ">GetPlayerVehicleID</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">),</span><span class="pln"> HPMASHINI</span><span class="pun">);</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">HPMASHINI </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">300</span><span class="pun">)</span><span class="pln"> </span><span class="typ">SetVehicleHealth</span><span class="pun">(</span><span class="typ">GetPlayerVehicleID</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">),</span><span class="pln"> </span><span class="lit">350</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	В паблик OnVehicleDamageStatusUpdate:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_4884_6">
<span class="pln">autochinilka</span><span class="pun">();</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">680</guid><pubDate>Sat, 02 Sep 2017 16:54:02 +0000</pubDate></item><item><title>&#x41A;&#x440;&#x438;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x430;&#x44F; &#x443;&#x44F;&#x437;&#x432;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x44C; &#x432; SKY &#x43F;&#x43B;&#x430;&#x433;&#x438;&#x43D;&#x435;</title><link>https://pawno-rus.com/topic/8477-kriticheskaya-uyazvimost-v-sky-plagine/</link><description><![CDATA[
<p>
	<b>Всем доброй ночи, не уверен где можно создавать тему, так что решил создать её здесь;</b>
</p>

<p>
	 
</p>

<p>
	Хочу поделиться важной информацией. Если вы используете <strong>SKY плагин</strong> вместе с <strong>weapon-config</strong>, или вместо связки <strong>Pawn.RakNet + weapon-config</strong>, стоит быть внимательными. В последних версиях плагина (<strong>v2.3.2 и ниже</strong>) обнаружена <strong>критическая уязвимость</strong>, которая уже используется злоумышленниками
</p>

<p>
	Суть проблемы в том, что через специально подготовленные пакеты <strong>VehicleSync (ID 200)</strong> можно вызвать <strong>массовое отключение игроков</strong>. Например, с 90 до 10 всего за несколько секунд. Сервер при этом <strong>не падает</strong>, ошибок в логах почти нет, но игровой процесс полностью нарушается. Уязвимость можно использовать <strong>удалённо</strong>, без авторизации. Она создаёт <strong>DoS эффект</strong> и вызывает лаги и нестабильность сервера.
</p>

<p>
	 
</p>

<p>
	Если есть возможность, <strong>лучше перейти на Pawn.RakNet</strong>. Исключение составляют случаи, когда есть конфликты с другими плагинами, например <strong>SAMPVoice</strong> или <strong><a href="https://pawno-rus.com/fcnpc" rel="" title="Ссылка встроена автоматически для предоставления большей информации."></a><a href="https://pawno-rus.ru/fcnpc" rel="nofollow" title="Ссылка встроена автоматически для предоставления большей информации.">FCNPC</a></strong>, и смена архитектуры невозможна.
</p>

<p>
	 
</p>

<p>
	Проверьте свои сервера, предупредите других людей и по возможности обновите связку 🙂
</p>

<p>
	Подробнее:
</p>

<p>
	<a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9naXRodWIuY29tL29zY2FyLWJyb21hbi9TS1kvaXNzdWVzLzY4" rel="external nofollow">https://github.com/oscar-broman/SKY/issues/68</a>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">8477</guid><pubDate>Fri, 29 Aug 2025 01:26:13 +0000</pubDate></item><item><title>[SAMP][LUA] &#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x438; &#x438; &#x432;&#x43E;&#x441;&#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x430;&#x440;&#x448;&#x440;&#x443;&#x442;&#x430; &#x434;&#x43B;&#x44F; RakSAMP &#x441; &#x441;&#x43E;&#x445;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x447;&#x430;&#x442;&#x430;</title><link>https://pawno-rus.com/topic/8409-samplua-sistema-zapisi-i-vosproizvedeniya-marshruta-dlya-raksamp-s-sohraneniem-chata/</link><description><![CDATA[
<p>
	<b style="color:#8d8d9e;">Привет всем!</b><br style="color:#8d8d9e;" /><br style="color:#8d8d9e;" /><span style="color:#8d8d9e;">Выкладываю рабочий инструмент, который лично писал под задачи для крупных бонусных проектов. От меня недавно произошла доработка - теперь при записи маршрута сохраняются все сообщения, которые вы пишете в чат.</span>
</p>

<p>
	 
</p>

<div>
	<span style="font-size:18px;"><strong><span style="color:#8d8d9e;">Как это работает</span></strong></span>
</div>

<ul style="color:#8d8d9e;"><li>
		<b>Запуск записи:</b><br />
		Вводите /route с названием скрипта (или биндите на клавишу) — скрипт начинает фиксировать всё ваше передвижение (onfoot/incar/aim пакеты) и любые ваши сообщения в чат.
	</li>
	<li>
		<b>Завершение:</b><br />
		Ещё раз /route с названием скрипта или /stop — сохраняется маршрут вместе с чатом в файл формата .rt в папке MoonLoader/rakbotRoutes.
	</li>
	<li>
		<b>Воспроизведение:</b><br />
		Через команду !play &lt;название&gt; в консоли RakSamp LITE — бот воспроизводит маршрут<span> </span><b>один в один</b><span> </span>с вашими действиями, повторяет весь ввод, а так-же отправляет в чат все сохранённые сообщения (имитация через Enter).
	</li>
	<li>
		<b>Поддержка цикла:</b><br />
		Можно включить повтор маршрута (!loop), пока не надоест.
	</li>
</ul><div>
	<h3 style="color:#8d8d9e;">
		Что важно в коде
	</h3>

	<ul style="color:#8d8d9e;"><li>
			<b>Запись всех синк-пакетов (движения</b><b>, анимации, aim и т.д.):</b><br />
			Пакеты по движению (onfoot/incar/aim) записываются подробно — никакой халтуры, каждое значение (позиция, кватернион, скорость, анимации, флаги и т.д.) фиксируется для полной копии.
		</li>
	</ul></div>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24070" href="//storage.yandexcloud.net/pawnorus/monthly_2025_05/1748414250348.png.79856451049efd07a78cb5608d58ce16.png" rel=""><img alt="1748414250348.thumb.png.887feca1dd58af29e6de3b0ed9b25bf6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24070" src="//storage.yandexcloud.net/pawnorus/monthly_2025_05/1748414250348.thumb.png.887feca1dd58af29e6de3b0ed9b25bf6.png" /></a>
</p>

<p>
	 
</p>

<ul style="color:#8d8d9e;"><li>
		<b>Запись сообщений чата по индексам</b><br />
		Каждое сообщение, которое отправляется в чат во время записи маршрута, сохраняется в отдельную таблицу с текущим индексом (counter). То есть при воспроизведении бот знает, на каком этапе какой текст нужно “цитировать” в чат.
	</li>
</ul><p>
	 
</p>

<p>
	<img alt="1748414708554.png.5945cb056e681426208ba46742b2a229.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24071" src="//storage.yandexcloud.net/pawnorus/monthly_2025_05/1748414708554.png.5945cb056e681426208ba46742b2a229.png" /></p>

<p>
	 
</p>

<ul style="color:#8d8d9e;"><li>
		<b>Воспроизведение маршрута и чата</b><br />
		На каждом этапе воспроизведения проверяется, было ли сообщение в этот момент — если да, оно “отправляется” как будто в оригинале, без задержек и рассинхрона. Пакеты проигрываются по индексу — как только доходит до конца, скрипт сам решает, останавливать ли выполнение или запускать по кругу (если включен loop).
	</li>
</ul><p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24072" href="//storage.yandexcloud.net/pawnorus/monthly_2025_05/1748414406644.png.86df6a248d3c4f2a6c388429a924c032.png" rel=""><img alt="1748414406644.thumb.png.2e1c52de33a88aad7ae685bc04787505.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24072" src="//storage.yandexcloud.net/pawnorus/monthly_2025_05/1748414406644.thumb.png.2e1c52de33a88aad7ae685bc04787505.png" /></a>
</p>

<p>
	 
</p>

<ul style="color:#8d8d9e;"><li>
		<b>Формат сохранения</b><br />
		Файл маршрута содержит не только действия, но и отдельную секцию [chat], что позволяет воспроизвести всё как было, а не только беготню.
	</li>
</ul><p>
	 
</p>

<p>
	<img alt="1748414491204.png.527aa9515557b2ef7bd1c66010a565ac.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24073" src="//storage.yandexcloud.net/pawnorus/monthly_2025_05/1748414491204.png.527aa9515557b2ef7bd1c66010a565ac.png" /></p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<span style="color:#8d8d9e;">Если кому-то реально нужна автоматизация для бонусных серверов и не только как например фейковые игроки и вам важна последовательность действий и чата — этот инструмент сэкономит часы времени. Всё написано максимально просто для внедрения.</span><br style="color:#8d8d9e;" /><br style="color:#8d8d9e;" /><b style="color:#8d8d9e;">P.S.</b><span style="color:#8d8d9e;"><span> </span>Если есть определённые проблемы, вопросы или даже идеи для доработки — пишите.</span>
</p>

<p>
	<a class="ipsAttachLink" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=24074" data-fileid="24074" rel="">Desktop.zip</a>
</p>
]]></description><guid isPermaLink="false">8409</guid><pubDate>Wed, 28 May 2025 06:53:37 +0000</pubDate></item><item><title>&#x420;&#x435;&#x441;&#x43F;&#x430;&#x432;&#x43D; &#x430;&#x432;&#x442;&#x43E; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x435; N &#x43C;&#x438;&#x43D;&#x443;&#x442;.</title><link>https://pawno-rus.com/topic/2452-respavn-avto-kazhdye-n-minut/</link><description><![CDATA[
<p style="text-align:center;">
	<strong>Респавн авто каждые N минут, в моем случае 60 минут.</strong>
</p>

<p style="text-align:center;">
	<strong>Автор: <span style="color:#e74c3c;">cooper</span></strong>
</p>

<p style="text-align:center;">
	<b>Ко всем <span style="color:#2980b9;">Define :</span></b>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<code style="color:#000000;">#define RESPAWN_TIME_CARS 60 </code><code style="color:#008200;">//60 минут можно сменить на свое 60 мин - 1ч.</code>
		</p>
	</div>
</div>

<p style="text-align:center;">
	<strong>Ко всем <span style="color:#2980b9;">New :</span></strong>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			new bool:resCar[MAX_VEHICLES];<br />
			new timeSec;<br />
			new timeMin;
		</p>
	</div>
</div>

<p style="text-align:center;">
	<strong>В секундный таймер :</strong>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			if(++timeSec &gt;= 60)<br />
			{<br />
			    timeSec = 0;<br />
			    timeMin ++;<br />
			    if(timeMin &gt;= RESPAWN_TIME_CARS)<br />
			    {<br />
			        SendClientMessageToAll(-1,"Все незанятые авто зареспавнены! В следующий раз, спавн авто будет через "#RESPAWN_TIME_CARS" мин.");<br />
			        for(new i = GetMaxPlayers(); i != -1; i--) if(IsPlayerInAnyVehicle(i)) resCar[GetPlayerVehicleID(i)] = true;<br />
			        for(new car = 1; car &lt; MAX_VEHICLES; car++) if(!resCar[car]) SetVehicleToRespawn(car);<br />
			        timeMin = 0;<br />
			    }<br />
			}
		</p>
	</div>
</div>

<p style="text-align:center;">
	<strong>Если нет секундного Таймера то в <span style="color:#ff0000;"><span> </span></span><span style="color:#2980b9;">public OnGameModeInit :</span></strong>
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			SetTimer("SecondTime",1000,true);
		</p>
	</div>
</div>

<p style="text-align:center;">
	<strong>В конец мода :</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="" data-ipsspoiler-option="Конец мода">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			forward SecondTime();
		</p>

		<p>
			public SecondTime()
		</p>

		<p>
			{
		</p>

		<p>
			    if(++timeSec &gt;= 60)
		</p>

		<p>
			    {
		</p>

		<p>
			        timeSec = 0;
		</p>

		<p>
			        timeMin ++;
		</p>

		<p>
			        if(timeMin &gt;= RESPAWN_TIME_CARS)
		</p>

		<p>
			        {
		</p>

		<p>
			            SendClientMessageToAll(-1,"Все незанятые авто зареспавнены! В следующий раз, спавн авто будет через "#RESPAWN_TIME_CARS" мин.");
		</p>

		<p>
			            for(new i = GetMaxPlayers(); i != -1; i--) if(IsPlayerInAnyVehicle(i)) resCar[GetPlayerVehicleID(i)] = true;
		</p>

		<p>
			            for(new car = 1; car &lt; MAX_VEHICLES; car++) if(!resCar[car]) SetVehicleToRespawn(car);
		</p>

		<p>
			            timeMin = 0;
		</p>

		<p>
			        }
		</p>

		<p>
			    }
		</p>

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

<p>
	 
</p>
]]></description><guid isPermaLink="false">2452</guid><pubDate>Thu, 19 Apr 2018 06:19:12 +0000</pubDate></item><item><title>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x440;&#x430;&#x434;&#x430;&#x440; &#x441; &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x43A;&#x430;&#x440;&#x442;&#x43E;&#x439;</title><link>https://pawno-rus.com/topic/2132-sozdaem-radar-s-sobstvennoy-kartoy/</link><description><![CDATA[
<p style="text-align:center;">
	Всем привет, думаю многие знают, что на некоторых проектах в мод-паки входит своя карта, отображаемая на радаре и в меню (ESC &gt; Карта) с маппингом сервера, но немногие знают, как сделать себе такую. В этой теме я расскажу, как сделать собственный рендер карты со своим маппингом сервера.
</p>

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

<p style="text-align:center;">
	<strong>Для начала несколько примечаний:</strong><br />
	Для рендера с маппингом сервера потребуется перевести его в IPL формат, если ваша карта уже есть в таком формате - хорошо, если нет - мы научимся конвертировать её в этой теме.<br />
	Рекомендуется, чтобы удаляемые объекты (RemoveBuildingForPlayer), либо были в небольшом количестве, либо были незаметными, потому что удалить их на рендере невозможно.<br />
	Рендер можно делать с модификацией на текстуры игры (весна, осень, зима), получается весьма красиво.<br />
	Для рендера мы будем использовать программу MapViewer, которую можно найти в сети, но рекомендую использовать мою версию с некоторыми исправлениями в её скриптах.<br />
	Карту, которую мы получим в итоге, можно в пару кликов перевести либо в одно изображение, либо разделить по TXD файлам для мод-пака с помощью программы XRadarEditor.<br />
	Для создания рендера я рекомендую использовать полностью чистую копию GTA Criminal Russia <br />
	На итоговом рендере не будет воды, её можно дорисовать через фотошоп.
</p>

<p style="text-align:center;">
	<strong>Переводим карту в IPL формат:</strong><br />
	Скачиваем следующий скрипт. <a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly95YWRpLnNrL2QvQ2xad2htYUszQjRMd2I=" rel="external nofollow">Script</a><br />
	Используем любой сервер с установленным на нем sscanf 2.8.2 или выше.<br />
	Перекинем ipl.pwn в filterscripts и скомпилируем.<br />
	В файл scriptfiles/iplc/input.txt записываем код маппинга строго в формате CreateObjeсt без комментариев и лишних строк (пустых в том числе).<br />
	Запускаем сервер и вводим в консоль команду "loadfs ipl".<br />
	Если всё будет отлично - в scriptfiles/iplc/output.txt будет записан маппинг в формате IPL.
</p>

<p style="text-align:center;">
	<strong>Подготовка игры для рендера карты:</strong><br />
	Как я и сказал, рекомендуется чистая версия GTA Criminal Russia (желательно копией, дабы в будущем можно было легко делать рендер и не засорять рабочую игру).<br />
	Создаем в директории игры папку "map", копируем в созданную папку файлы "mp.img" и "mp_col.img" из папки "multiplayer_c/models" (оригинальной игры с мультиплеером), скачиваем <a href="https://pawno-rus.com/go/?url=aHR0cDovL3d3dy5ndGFzcnYucnUvcmVhZG1lL3Jlc291cmNlcy9tdWx0aXBsYXllci5pZGU=" rel="external nofollow">файл</a> и перекидываем его в папку "map" под названием "mp.ide".<br />
	Копируем IPL файл карты (полученный ранее в output.txt) в папку "map" под названием "map.ipl".<br />
	Если у вас есть мод-пак со своими объектами, то переместите всё в ту же папку IDE и IMG файл мод-пака, допустим под названиями "modpack.ide" и "modpack.img" (если есть IPL файл, то добавьте его содержимое к map.ipl).<br />
	Откройте файл %ПапкаИгры%/data/gta.dat и замените все его содержимое на:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted">
<span class="pln">IMG MODELS\gta3</span><span class="pun">.</span><span class="pln">IMG
IMG MODELS\gamemod</span><span class="pun">.</span><span class="pln">IMG
IMG MODELS\gta_int</span><span class="pun">.</span><span class="pln">IMG

IMG map\mp</span><span class="pun">.</span><span class="pln">IMG
IMG map\mp_col</span><span class="pun">.</span><span class="pln">IMG
</span><span class="pun">#</span><span class="pln"> IMG map\modpack</span><span class="pun">.</span><span class="pln">IMG

IDE DATA\MAPS\generic\vegepart</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\generic\barriers</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\generic\dynamic</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\generic\dynamic2</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\generic\multiobj</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\generic\procobj</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\leveldes\levelxre</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\sopki\sopki</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\sopki\newgen</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\sopki\sopki_lesa</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\Arzamas\arzamas_N</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\Arzamas\arzamas_gen</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\Arzamas\arzamas_park</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\Arzamas\country_WN</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\Arzamas\arzamas_S</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\crteam\crteam</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\ryazan\ryazan</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\russia\garel</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\russia\materik</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\russia\materik_objs</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\lytkarino\lytkarino</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\russia\rogovichi</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\russia\OpenAir</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\batyrevo\batyrevo</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\mod_int\mod_int</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\mod_int\AudiosurfGame</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\MAPS\veh_mods\veh_mods</span><span class="pun">.</span><span class="pln">IDE
IDE DATA\TXDCUT</span><span class="pun">.</span><span class="pln">IDE

IDE map\mp</span><span class="pun">.</span><span class="pln">IDE
</span><span class="pun">#</span><span class="pln"> IDE map\modpack</span><span class="pun">.</span><span class="pln">IDE

IPL DATA\MAPS\sopki\sopki</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\sopki\sopki_add2</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\sopki\sopki_add3</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\sopki\sveg</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\sopki\add_sopki</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\sopki\sopki_lesa</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\arzamas_N</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\arzamas_N2</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\arzamas_Ngen</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\country_WN</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\arzamas_veg</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\arzamas_veg2</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\arzamas_park</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\Arzamas\arzamas_S</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\crteam\crteam</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\crteam\crteam_gen</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\crteam\crteam_veg</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\ryazan\ryazan</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\ryazan\ryazan_gen</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\ryazan\ryazan_veg</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\ryazan\koryakino</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\ryazan\koryakino_gen</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\garel</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\garel_gen</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\materik</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\materik_objs</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\materik_gen</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\SPC_generic</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\lytkarino\lytkarino</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\lytkarino\lyt_genveg</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\rogovichi</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\tesla_place</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\bigRyazanLes</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\OpenAir</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\batyrevo\batyrevo</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\batyrevo\batyrevo_tree</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\russia\metro2</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\mod_int\mod_int</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\mod_int\AudiosurfGame</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\audiozon</span><span class="pun">.</span><span class="pln">IPL
IPL DATA\MAPS\cull</span><span class="pun">.</span><span class="pln">IPL

IPL map\map</span><span class="pun">.</span><span class="pln">IPL</span></pre>

<p style="text-align:center;">
	Раскомментируйте комментарии с файлами "modpack.IDE" и "modpack.IPL", если это требуется (пункт 4).<br />
	На этом подготовление игры к рендеру закончено, можем идти дальше.
</p>

<p style="text-align:center;">
	<strong>Рендерим саму карту:</strong><br />
	Скачиваем мою версию MapViewer.<a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly95YWRpLnNrL2QvZkk0enBlZUozQkZKNUw=" rel="external nofollow">MapViewer</a><br />
	Распаковываем папку из архива в любое место.<br />
	Открываем файл games.cfg и прописываем в нем путь для нашей игры, примерно так:<br />
	G:\Games\GTA Criminal Russia Full Original<br />
	Запускаем MapViewer.exe, у вас должно открыться маленькое черное окошечко. Для того, чтобы убрать курсов из фокуса, нажмите один раз ESC, для того, чтобы закрыть MapViewer, нажмите два раза ESC или ALT + F4.<br />
	Нажимаем F1 и дожидаемся загрузи нашей карты, если всё будет отлично - мы сможем летать по карте.<br />
	Нажимаем F11 и дожидаемся конца рендера карты, скорее всего это действие придется повторить два раза, т.к. в рендере могут быть артефакты (черные дыры).<br />
	В папке radar получаем 145 bmp файлов каждого куска карты.
</p>

<p style="text-align:center;">
	<strong>Объединение в одно изображение или разделение по TXD файлам:</strong><br />
	Скачиваем <a href="https://pawno-rus.com/go/?url=aHR0cDovL3d3dy5ndGFnYXJhZ2UuY29tL21vZHMvc2hvdy5waHA/aWQ9NTAwMg==" rel="external nofollow">от сюда</a> и запускаем XRadarEditor.<br />
	Нажимаем Import &gt; Import Tile(s), переходим в папку radar, выделяем все файлы (CTRL + A) и нажимаем "Открыть".<br />
	Экспортировать карту в одно изображение - Export &gt; Export Map, экспортировать по TXD файлам - Export &gt; Export Tiles &gt; As TXDs &gt; All.<br />
	Чтобы закрыть XRadarEditor, нажмите ПКМ &gt; Exit.<br />
	Для того, чтобы заменить карту в игре, все TXD файлы можно перекинуть в gta3.img с заменой или в IMG файл мод-пака. Как я сказал выше, воду придется дорисовывать вручную (в XRadarEditor можно экспортировать всё в одно изображение, дорисовать воду, а потом импортировать и экспортировать TXD файлы).
</p>

<p style="text-align:center;">
	<strong>Авторство:</strong>
</p>

<p style="text-align:center;">
	Весь текст и авторство программа или их переделки принадлежат  JoKeR_2020 он же Владимир Сергеенко.
</p>

<p style="text-align:center;">
	При копировании темы на другие порталы указание авторства обязательно.
</p>
]]></description><guid isPermaLink="false">2132</guid><pubDate>Fri, 09 Feb 2018 00:57:02 +0000</pubDate></item><item><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x442;&#x435;&#x445;&#x43D;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x440;&#x430;&#x431;&#x43E;&#x442;</title><link>https://pawno-rus.com/topic/7878-sistema-tehnicheskih-rabot/</link><description><![CDATA[
<p>
	Всем добрый вечер ребят! 
</p>

<p>
	Я начинающий, сегодня я вам сливаю команду 2(шт) на технические работы
</p>

<p>
	Ловите <img alt="&lt;3" data-emoticon="" src="//storage.yandexcloud.net/pawnorus/emoticons/ba.gif" title="&lt;3"></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;
cmd:tex(playerid, params[])&#13;
{&#13;
    if(PI[playerid][pAdmin] &lt; ADM_GL) return 1; //Проверка на администратора, для использавания команды&#13;
 //===============================================================================================&#13;
 for(new i = 0; i &lt;= MAX_PLAYERS; i++)&#13;
    {&#13;
     if(IsPlayerConnected(i))&#13;
     {&#13;
      if(PI[pAdmin] &gt; SUPPORT) //Если игрок администратор, то высвечиваеися табличка с паролем и т.д&#13;
      {&#13;
       ShowPlayerDialog(i,0,DIALOG_STYLE_MSGBOX,"Внимание!!!","{CB1A1A}Администраторов не отключается с сервера!\n{CB1A1A} Активированы тех.работы для сервера!\n{CB1A1A}Пароль к серверу: ВАШ ПАРОЛЬ\n{CB1A1A}Причина будет в нашей офф. группе VK: ВАША ГРУППА","Понял","");&#13;
      }&#13;
        if(PI[pAdmin] == ADM_NONE) //Если игрок не администратор, то высвечевается табличка с информацией, и его отключает с сервера&#13;
        {&#13;
          ShowPlayerDialog(i,0,DIALOG_STYLE_MSGBOX,"Внимание!!!","{CB1A1A} Внимание массовое отключение с сервера!\n{CB1A1A}Причина будет в нашей офф. группе VK: ВАША ГРУППА","Понял","");&#13;
          Kick(i);&#13;
     }&#13;
     }&#13;
  }&#13;
&#13;
 //===============================================================================================&#13;
 SendRconCommand("password Ваш пароль");&#13;
 SendRconCommand("hostname TimePlay RolePlay || У нас Тех.Работы, не грустите!");&#13;
 //===============================================================================================&#13;
 SendClientMessageToAll(0xF04245FF, "Руководитель сервера активиривал Тех.Работы!");&#13;
 return 1;&#13;
}&#13;
&#13;
cmd:texoff(playerid, params[])&#13;
{&#13;
    if(PI[playerid][pAdmin] &lt; ADM_GL) return 1;&#13;
 //===============================================================================================&#13;
 SendRconCommand("password 0"); //Снос пароля&#13;
 SendRconCommand("hostname TimePlay RolePlay || Заходи к нам, мы вас ждем!");&#13;
 //===============================================================================================&#13;
    callcmd::gmx(i, ""); //Вызов команды для рестарта сервера&#13;
 //===============================================================================================&#13;
 SendClientMessageToAll(0xF04245FF, "Руководитель сервера деактивиривал Тех.Работы! Спасибо всем кто помагал!");&#13;
 return 1;&#13;
}'>

<span><span class="mtk1">||||||||||||||||||||||||||||||||||||||||||||||||||</span><span class="mtk1">||||||||||||||||||||||||||||||||||||||||||||||||||</span><span class="mtk1">||</span></span>
<span><span class="mtk1">cmd:tex(playerid, params[])</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(PI[playerid][pAdmin] &lt; ADM_GL) </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk7">1</span><span class="mtk1">; </span><span class="mtk8">//Проверка на администратора, для использавания </span><span class="mtk8">команды</span></span>
<span><span class="mtk1"> </span><span class="mtk8">//===============================================================================================</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 = </span><span class="mtk7">0</span><span class="mtk1">; i &lt;= MAX_PLAYERS; i++)</span></span>
<span><span class="mtk1">    {</span></span>
<span><span class="mtk1">     </span><span class="mtk6">if</span><span class="mtk1">(IsPlayerConnected(i))</span></span>
<span><span class="mtk1">     {</span></span>
<span><span class="mtk1">      </span><span class="mtk6">if</span><span class="mtk1">(PI[pAdmin] &gt; SUPPORT) </span><span class="mtk8">//Если игрок администратор, то высвечиваеися </span><span class="mtk8">табличка с паролем и т.д</span></span>
<span><span class="mtk1">      {</span></span>
<span><span class="mtk1">       ShowPlayerDialog(i,</span><span class="mtk7">0</span><span class="mtk1">,DIALOG_STYLE_MSGBOX,</span><span class="mtk20">"Внимание!!!"</span><span class="mtk1">,</span><span class="mtk20">"{CB1A1A}Администраторов не отключается с </span><span class="mtk20">сервера!\n{CB1A1A} Активированы тех.работы для </span><span class="mtk20">сервера!\n{CB1A1A}Пароль к серверу: ВАШ </span><span class="mtk20">ПАРОЛЬ\n{CB1A1A}Причина будет в нашей офф. группе </span><span class="mtk20">VK: ВАША ГРУППА"</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">if</span><span class="mtk1">(PI[pAdmin] == ADM_NONE) </span><span class="mtk8">//Если игрок не администратор, то высвечевается </span><span class="mtk8">табличка с информацией, и его отключает с сервера</span></span>
<span><span class="mtk1">        {</span></span>
<span><span class="mtk1">          ShowPlayerDialog(i,</span><span class="mtk7">0</span><span class="mtk1">,DIALOG_STYLE_MSGBOX,</span><span class="mtk20">"Внимание!!!"</span><span class="mtk1">,</span><span class="mtk20">"{CB1A1A} Внимание массовое отключение с </span><span class="mtk20">сервера!\n{CB1A1A}Причина будет в нашей офф. </span><span class="mtk20">группе VK: ВАША ГРУППА"</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">          Kick(i);</span></span>
<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="mtk8">//===============================================================================================</span></span>
<span><span class="mtk1"> SendRconCommand(</span><span class="mtk20">"password Ваш пароль"</span><span class="mtk1">);</span></span>
<span><span class="mtk1"> SendRconCommand(</span><span class="mtk20">"hostname TimePlay RolePlay || У нас Тех.Работы, </span><span class="mtk20">не грустите!"</span><span class="mtk1">);</span></span>
<span><span class="mtk1"> </span><span class="mtk8">//===============================================================================================</span></span>
<span><span class="mtk1"> SendClientMessageToAll(</span><span class="mtk16">0xF04245FF</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"> </span><span class="mtk7">1</span><span class="mtk1">;</span></span>
<span><span class="mtk1">}</span></span>

<span><span class="mtk1">cmd:texoff(playerid, params[])</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(PI[playerid][pAdmin] &lt; ADM_GL) </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 class="mtk8">//===============================================================================================</span></span>
<span><span class="mtk1"> SendRconCommand(</span><span class="mtk20">"password 0"</span><span class="mtk1">); </span><span class="mtk8">//Снос пароля</span></span>
<span><span class="mtk1"> SendRconCommand(</span><span class="mtk20">"hostname TimePlay RolePlay || Заходи к нам, мы </span><span class="mtk20">вас ждем!"</span><span class="mtk1">);</span></span>
<span><span class="mtk1"> </span><span class="mtk8">//===============================================================================================</span></span>
<span><span class="mtk1">    callcmd::gmx(i, </span><span class="mtk20">""</span><span class="mtk1">); </span><span class="mtk8">//Вызов команды для рестарта сервера</span></span>
<span><span class="mtk1"> </span><span class="mtk8">//===============================================================================================</span></span>
<span><span class="mtk1"> SendClientMessageToAll(</span><span class="mtk16">0xF04245FF</span><span class="mtk1">, </span><span class="mtk20">"Руководитель сервера деактивиривал Тех.Работы! </span><span class="mtk20">Спасибо всем кто помагал!"</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>
</pre>

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

<p>
	 
</p>
]]></description><guid isPermaLink="false">7878</guid><pubDate>Tue, 16 Apr 2024 15:33:03 +0000</pubDate></item><item><title>[Pawn] &#x413;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43E;&#x432;</title><link>https://pawno-rus.com/topic/7649-pawn-generator-matematicheskih-primerov/</link><description><![CDATA[
<p>
	Всем доброго времени суток, сегодня я хочу Вам представить <span style="font-size:9px;">неоптимизированный из-за моей лени</span> генератор математических примеров с ответами.<br />
	Без лишних слов перейдём к коду<br />
	Для начала нам надо добавить define для удобства использования:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="#define skip:%0; {++%0;continue;}">
<span><span>#define</span><span> skip:%</span><span>0</span><span>; {++%</span><span>0</span><span>;</span><span>continue</span><span>;}</span></span>
</pre>

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

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="stock intToStr(a) {new asd[8]; format(asd, 8, &quot;%d&quot;, a); return asd;}">
<span><span>stock intToStr(a) {</span><span>new</span><span> asd[</span><span>8</span><span>]; format(asd, </span><span>8</span><span>, </span><span>"%d"</span><span>, a); </span><span>return</span><span> asd;}</span></span>
</pre>

<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="stock CreateCase(strCase[], actions = 3, max_ints = 350, strSize = 128) {
	new answer = 0; ++actions;
	for(new i = actions; i &gt; 0; i--) {
		new plussing = 1, rnd_act = random(101);
		if(60 &lt;= rnd_act &lt;= 80) {
			new Fint = random(max_ints/15);
			if(!Fint) skip:i;
			if(i != actions) {
				if(i &lt; 2) skip:i; else i--;
				if(random(2)) strcat(strCase, &quot;+&quot;, strSize);
				else strcat(strCase, &quot;-&quot;, strSize), plussing = -1;
			}
			new Sint = max_ints/Fint;
			if(random(2)) strcat(strCase, intToStr(Fint), strSize), strcat(strCase, &quot;*&quot;, strSize), answer += Fint*Sint*plussing;
			else strcat(strCase, intToStr(Fint*Sint), strSize), strcat(strCase, &quot;/&quot;, strSize), answer += (Fint*Sint/Sint)*plussing;
			strcat(strCase, intToStr(Sint), strSize);
		} else if (80 &lt; rnd_act &lt;= 100) {
			if(i != actions) {
				if(i &lt; 4) skip:i; else i--;
				if(random(2)) strcat(strCase, &quot;+&quot;, strSize);
				else strcat(strCase, &quot;-&quot;, strSize), plussing = -1;
			} if(i &lt; 3) skip:i;
			new rnd_brac = random(i-2)+1;
			i -= rnd_brac;
			new strCaseBrackets[64]; new BrackAns = CreateCase(strCaseBrackets, rnd_brac, max_ints, 64);
			answer += BrackAns*plussing;
			strcat(strCase, &quot;(&quot;, strSize); strcat(strCase, strCaseBrackets, strSize); strcat(strCase, &quot;)&quot;, strSize);
		} else if(0 &lt;= rnd_act &lt;= 15) {
				new Fint = random(4)+1;
				if(i != actions) {
					if(i &lt; 2) skip:i; else i--;
					if(random(2)) strcat(strCase, &quot;+&quot;, strSize);
					else strcat(strCase, &quot;-&quot;, strSize), plussing = -1;
				}
				new Float:fSint = floatlog(max_ints*1.0, Fint*1.0);
				new Sint = floatround(fSint, floatround_ceil);
				strcat(strCase, intToStr(Sint), strSize);
				strcat(strCase, &quot;^&quot;, strSize), answer += floatround(floatpower(Sint, Fint))*plussing;
				strcat(strCase, intToStr(Fint), strSize);
		} else {
			if(i != actions) {
				if(random(2)) strcat(strCase, &quot;+&quot;, strSize);
				else strcat(strCase, &quot;-&quot;, strSize), plussing = -1;
			}
			new intt = random(max_ints/2);
			strcat(strCase, intToStr(intt), strSize);
			answer += intt*plussing;
		}
	}
	return answer;
}">

<span><span>stock CreateCase(strCase[], actions = </span><span>3</span><span>, max_ints = </span><span>350</span><span>, strSize = </span><span>128</span><span>) {</span></span>
<span><span>    </span><span>new</span><span> answer = </span><span>0</span><span>; ++actions;</span></span>
<span><span>    </span><span>for</span><span>(</span><span>new</span><span> i = actions; i &gt; </span><span>0</span><span>; i--) {</span></span>
<span><span>        </span><span>new</span><span> plussing = </span><span>1</span><span>, rnd_act = random(</span><span>101</span><span>);</span></span>
<span><span>        </span><span>if</span><span>(</span><span>60</span><span> &lt;= rnd_act &lt;= </span><span>80</span><span>) {</span></span>
<span><span>            </span><span>new</span><span> Fint = random(max_ints/</span><span>15</span><span>);</span></span>
<span><span>            </span><span>if</span><span>(!Fint) skip:i;</span></span>
<span><span>            </span><span>if</span><span>(i != actions) {</span></span>
<span><span>                </span><span>if</span><span>(i &lt; </span><span>2</span><span>) skip:i; </span><span>else</span><span> i--;</span></span>
<span><span>                </span><span>if</span><span>(random(</span><span>2</span><span>)) strcat(strCase, </span><span>"+"</span><span>, strSize);</span></span>
<span><span>                </span><span>else</span><span> strcat(strCase, </span><span>"-"</span><span>, strSize), plussing = -</span><span>1</span><span>;</span></span>
<span><span>            }</span></span>
<span><span>            </span><span>new</span><span> Sint = max_ints/Fint;</span></span>
<span><span>            </span><span>if</span><span>(random(</span><span>2</span><span>)) strcat(strCase, intToStr(Fint), strSize), strca</span><span>t(strCase, </span><span>"*"</span><span>, strSize), answer += Fint*Sint*plussing;</span></span>
<span><span>            </span><span>else</span><span> strcat(strCase, intToStr(Fint*Sint), strSize), st</span><span>rcat(strCase, </span><span>"/"</span><span>, strSize), answer += (Fint*Sint/Sint)*plussing;</span></span>
<span><span>            strcat(strCase, intToStr(Sint), strSize);</span></span>
<span><span>        } </span><span>else</span><span> </span><span>if</span><span> (</span><span>80</span><span> &lt; rnd_act &lt;= </span><span>100</span><span>) {</span></span>
<span><span>            </span><span>if</span><span>(i != actions) {</span></span>
<span><span>                </span><span>if</span><span>(i &lt; </span><span>4</span><span>) skip:i; </span><span>else</span><span> i--;</span></span>
<span><span>                </span><span>if</span><span>(random(</span><span>2</span><span>)) strcat(strCase, </span><span>"+"</span><span>, strSize);</span></span>
<span><span>                </span><span>else</span><span> strcat(strCase, </span><span>"-"</span><span>, strSize), plussing = -</span><span>1</span><span>;</span></span>
<span><span>            } </span><span>if</span><span>(i &lt; </span><span>3</span><span>) skip:i;</span></span>
<span><span>            </span><span>new</span><span> rnd_brac = random(i-</span><span>2</span><span>)+</span><span>1</span><span>;</span></span>
<span><span>            i -= rnd_brac;</span></span>
<span><span>            </span><span>new</span><span> strCaseBrackets[</span><span>64</span><span>]; </span><span>new</span><span> BrackAns = CreateCase(strCaseBrackets, rnd_brac, </span><span>max_ints, </span><span>64</span><span>);</span></span>
<span><span>            answer += BrackAns*plussing;</span></span>
<span><span>            strcat(strCase, </span><span>"("</span><span>, strSize); strcat(strCase, strCaseBrackets, strSi</span><span>ze); strcat(strCase, </span><span>")"</span><span>, strSize);</span></span>
<span><span>        } </span><span>else</span><span> </span><span>if</span><span>(</span><span>0</span><span> &lt;= rnd_act &lt;= </span><span>15</span><span>) {</span></span>
<span><span>                </span><span>new</span><span> Fint = random(</span><span>4</span><span>)+</span><span>1</span><span>;</span></span>
<span><span>                </span><span>if</span><span>(i != actions) {</span></span>
<span><span>                    </span><span>if</span><span>(i &lt; </span><span>2</span><span>) skip:i; </span><span>else</span><span> i--;</span></span>
<span><span>                    </span><span>if</span><span>(random(</span><span>2</span><span>)) strcat(strCase, </span><span>"+"</span><span>, strSize);</span></span>
<span><span>                    </span><span>else</span><span> strcat(strCase, </span><span>"-"</span><span>, strSize), plussing = -</span><span>1</span><span>;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>new</span><span> Float:fSint = floatlog(max_ints*</span><span>1.0</span><span>, Fint*</span><span>1.0</span><span>);</span></span>
<span><span>                </span><span>new</span><span> Sint = floatround(fSint, floatround_ceil);</span></span>
<span><span>                strcat(strCase, intToStr(Sint), strSize);</span></span>
<span><span>                strcat(strCase, </span><span>"^"</span><span>, strSize), answer += floatround(floatpower(Sint, </span><span>Fint))*plussing;</span></span>
<span><span>                strcat(strCase, intToStr(Fint), strSize);</span></span>
<span><span>        } </span><span>else</span><span> {</span></span>
<span><span>            </span><span>if</span><span>(i != actions) {</span></span>
<span><span>                </span><span>if</span><span>(random(</span><span>2</span><span>)) strcat(strCase, </span><span>"+"</span><span>, strSize);</span></span>
<span><span>                </span><span>else</span><span> strcat(strCase, </span><span>"-"</span><span>, strSize), plussing = -</span><span>1</span><span>;</span></span>
<span><span>            }</span></span>
<span><span>            </span><span>new</span><span> intt = random(max_ints/</span><span>2</span><span>);</span></span>
<span><span>            strcat(strCase, intToStr(intt), strSize);</span></span>
<span><span>            answer += intt*plussing;</span></span>
<span><span>        }</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> answer;</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	Чуть позже рассмотрим пример использования генератора, а сейчас разберёмся с параметрами:<br />
	strCase - строка, в которую запишется пример;<br />
	actions - количество действий в примере (Иногда генератор может вписывать на 1 действие больше)<br />
	max_ints - число, которое будет использоваться как максимум в <strong>отдельных действиях</strong>
</p>

<p>
	Т. е. вычитаемое, слогамое, делимое, произведение и результат возведения в степень не будет больше max_ints
</p>

<p>
	strSize - размер строки strCase. Так как в функциях невозможно определить размер через sizeof, а при strlen нельзя будет добавить числа, то я решил использовать эту пеерменную
</p>

<p>
	Теперь само использование функции:
</p>

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

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

		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="...(...) {	
    for(new i = 0; i &lt; 10; i++) {                       // Цикл генерации 10-и примеров
		printf(&quot;-------------№%d------------&quot;, i+1);    // разделение примеров для удобного обозрения
		new strr[128];                                  // переменная для хранения примера
		new ans;                                        // переменная для хранения ответа
        ans = CreateCase(strr, 5, 350);                 // генерация примера и запись ответа
		printf(&quot;Case: %s&quot;, strr);                       // вывод примера
		printf(&quot;Answer: %d&quot;, ans);                      // вывод ответа
		printf(&quot;Real actions: %d&quot;, ChechActs(strr));    // вывод реального количества действий
	}
    ...
}
stock ChechActs(const str[]) {
	new acts = 0;
	for(new i = 0; i &lt; strlen(str); i++) {
		switch(str[i]) {
			case '-','/','*','+','^': ++acts;
		}
	}
	return acts;
}">

<span><span>...(...) {  </span></span>
<span><span>    </span><span>for</span><span>(</span><span>new</span><span> i = </span><span>0</span><span>; i &lt; </span><span>10</span><span>; i++) {                       </span><span>// Цикл генерации 10-и примеров</span></span>
<span><span>        printf(</span><span>"-------------№%d------------"</span><span>, i+</span><span>1</span><span>);    </span><span>// разделение примеров для удобного обозрения</span></span>
<span><span>        </span><span>new</span><span> strr[</span><span>128</span><span>];                                  </span><span>// переменная для хранения примера</span></span>
<span><span>        </span><span>new</span><span> ans;                                        </span><span>// переменная для хранения ответа</span></span>
<span><span>        ans = CreateCase(strr, </span><span>5</span><span>, </span><span>350</span><span>);                 </span><span>// генерация примера и запись ответа</span></span>
<span><span>        printf(</span><span>"Case: %s"</span><span>, strr);                       </span><span>// вывод примера</span></span>
<span><span>        printf(</span><span>"Answer: %d"</span><span>, ans);                      </span><span>// вывод ответа</span></span>
<span><span>        printf(</span><span>"Real actions: %d"</span><span>, ChechActs(strr));    </span><span>// вывод реального количества действий</span></span>
<span><span>    }</span></span>
<span><span>    ...</span></span>
<span><span>}</span></span>
<span><span>stock ChechActs(</span><span>const</span><span> str[]) {</span></span>
<span><span>    </span><span>new</span><span> acts = </span><span>0</span><span>;</span></span>
<span><span>    </span><span>for</span><span>(</span><span>new</span><span> i = </span><span>0</span><span>; i &lt; strlen(str); i++) {</span></span>
<span><span>        </span><span>switch</span><span>(str[i]) {</span></span>
<span><span>            </span><span>case</span><span> </span><span>'-'</span><span>,</span><span>'/'</span><span>,</span><span>'*'</span><span>,</span><span>'+'</span><span>,</span><span>'^'</span><span>: ++acts;</span></span>
<span><span>        }</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> acts;</span></span>
<span><span>}</span></span>
</pre>
	</div>
</div>

<p>
	<strong>Внимание: </strong>В некоторых случаях может возникать следующе предупреждение в консоли:
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="[debug] Long callback execution detected (hang or performance issue)">
<span><span>[debug] Long callback execution detected (hang or </span><span>performance issue)</span></span>
</pre>

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

<p>
	Назовём это ложкой дёгтя в бочке мёда)<br />
	После генерации 10-и примеров в консоли мы увидим следующее:
</p>

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

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="657dc736e04d5__2023-12-16_185014521.png.0619f19542c88a2436281538f3568c0e.png" class="ipsImage ipsImage_thumbnailed" data-fileid="19397" src="//storage.yandexcloud.net/pawnorus/monthly_2023_12/657dc736e04d5__2023-12-16_185014521.png.0619f19542c88a2436281538f3568c0e.png" /></p>
	</div>
</div>

<p>
	Любой из примеров вы можете вбить в калькулятор и он выдаст тот же ответ, что и написан в консоли.<br />
	Этот генератор можно использовать в качестве проверки на бота или интерактива. Пример:
</p>

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

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

		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="new tempAnswer;
forward CreateICCase();
public CreateICCase() {
    new tempCase[128];
    tempAnswer = CreateCase(tempCase, 3, 150);
    SendClientMessageToAll(-1, &quot;Введите ответ на следующий пример в /cans и получите приз:&quot;);
    SendClientMessageToAll(-1, tempCase);
}
public OnGameModeInit() {
    SetTimer(&quot;CreateICCase&quot;, 1000*60*30, true);
}
CMD:cans(playerid, params[]) {
    if(sscanf(params, &quot;d&quot;, params[0])) return false;
    if(params[0] == tempAnswer) GivePlayerMoney(playerid, 5000);
    else SendClientMessage(playerid, -1, &quot;Неверный ответ&quot;);
    return 1;
}">

<span><span>new</span><span> tempAnswer;</span></span>
<span><span>forward CreateICCase();</span></span>
<span><span>public</span><span> CreateICCase() {</span></span>
<span><span>    </span><span>new</span><span> tempCase[</span><span>128</span><span>];</span></span>
<span><span>    tempAnswer = CreateCase(tempCase, </span><span>3</span><span>, </span><span>150</span><span>);</span></span>
<span><span>    SendClientMessageToAll(-</span><span>1</span><span>, </span><span>"Введите ответ на следующий пример в /cans и </span><span>получите приз:"</span><span>);</span></span>
<span><span>    SendClientMessageToAll(-</span><span>1</span><span>, tempCase);</span></span>
<span><span>}</span></span>
<span><span>public</span><span> OnGameModeInit() {</span></span>
<span><span>    SetTimer(</span><span>"CreateICCase"</span><span>, </span><span>1000</span><span>*</span><span>60</span><span>*</span><span>30</span><span>, </span><span>true</span><span>);</span></span>
<span><span>}</span></span>
<span><span>CMD:cans(playerid, params[]) {</span></span>
<span><span>    </span><span>if</span><span>(sscanf(params, </span><span>"d"</span><span>, params[</span><span>0</span><span>])) </span><span>return</span><span> </span><span>false</span><span>;</span></span>
<span><span>    </span><span>if</span><span>(params[</span><span>0</span><span>] == tempAnswer) GivePlayerMoney(playerid, </span><span>5000</span><span>);</span></span>
<span><span>    </span><span>else</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Неверный ответ"</span><span>);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>
	</div>
</div>

<p>
	Код выше далёк от того, который можно было бы использовать, как минимум потому, что нет ограничение на то, сколько раз давать ответ, но именно поэтому это и является всего лишь вводным примером.<br />
	А на этом я бы хотел закончить представление генератора примеров, всем спасибо за чтение!<br />
	UPDATE:<br />
	Забыл упомянуть, не стоит привязывать к такому интерактиву большие призы, так как написать Lua-скрипт, который решит такой пример довольно просто (знаю по себе, ибо сам такой же и писал)
</p>
]]></description><guid isPermaLink="false">7649</guid><pubDate>Sat, 16 Dec 2023 16:00:04 +0000</pubDate></item><item><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x440;&#x430;&#x434;&#x430;&#x440;&#x43E;&#x432; &#x441; &#x441;&#x43E;&#x445;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x43D;&#x430; MySQL</title><link>https://pawno-rus.com/topic/369-sistema-radarov-s-sohraneniem-na-mysql/</link><description><![CDATA[
<p style="color: rgb(40, 40, 40); text-align: center;">
	<u><strong>Дорогие пользователи портала PAWNO-RUS.RU</strong></u>
</p>

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

<p style="color: rgb(40, 40, 40); text-align: center;">
	Nемного о системе:
</p>

<p style="color: rgb(40, 40, 40); text-align: center;">
	Радары можно будет добавлять прямо из игры
</p>

<p style="color: rgb(40, 40, 40); text-align: center;">
	Далее они будут сохраняться в базу данных
</p>

<p style="color: rgb(40, 40, 40); text-align: center;">
	Ну и так же после рестарта они не удаляться!
</p>

<p style="color: rgb(40, 40, 40); text-align: center;">
	Но удалять придется их через саму <abbr title="База Данных">БД</abbr>
</p>

<p style="color:#282828">
	 
</p>

<p style="color:#282828">
	<strong>И так начнем:</strong>
</p>

<p style="color:#282828">
	 
</p>

<p style="color:#282828">
	1) Нам понадобятся плагины такие как mysql r-38,scanff,streamer и сам командный процессор
</p>

<p style="color:#282828">
	 Теперь начинаем в начало мода вставляем следующее
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8348_5">

<span class="com">#define</span><span class="pln"> MAX_RADARS                              </span><span class="lit">50</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> publics</span><span class="pun">:%</span><span class="lit">0</span><span class="pun">(%</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> forward </span><span class="pun">%</span><span class="lit">0</span><span class="pun">(%</span><span class="lit">1</span><span class="pun">);</span><span class="pln"> </span><span class="kwd">public</span><span class="pln"> </span><span class="pun">%</span><span class="lit">0</span><span class="pun">(%</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> SFCM</span><span class="pun">(%</span><span class="lit">0</span><span class="pun">,%</span><span class="lit">1</span><span class="pun">,%</span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">do</span><span class="pun">{</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> msg</span><span class="pun">[</span><span class="lit">141</span><span class="pun">];</span><span class="pln"> format</span><span class="pun">(</span><span class="pln">msg</span><span class="pun">,</span><span class="lit">141</span><span class="pun">,%</span><span class="lit">2</span><span class="pun">);</span><span class="pln"> </span><span class="typ">SendClientMessage</span><span class="pun">(%</span><span class="lit">0</span><span class="pun">,%</span><span class="lit">1</span><span class="pun">,</span><span class="pln">msg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">while</span><span class="pun">(</span><span class="pln">FALSE</span><span class="pun">)</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> SCM </span><span class="typ">SendClientMessage</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> TOTAL_RADAR             </span><span class="str">"`radar`"</span><span class="pln">
</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RadarIterator</span><span class="pun">[</span><span class="pln">MAX_RADARS</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">new</span><span class="pln"> radariter</span><span class="pun">;</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> foreachRadar</span><span class="pun">(%</span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> _i</span><span class="pun">,</span><span class="pln"> </span><span class="pun">%</span><span class="lit">0</span><span class="pun">=</span><span class="typ">RadarIterator</span><span class="pun">[</span><span class="pln">_i</span><span class="pun">];</span><span class="pln"> _i </span><span class="pun">&lt;</span><span class="pln">radariter</span><span class="pun">;</span><span class="pln"> </span><span class="pun">%</span><span class="lit">0</span><span class="pun">=</span><span class="typ">RadarIterator</span><span class="pun">[++</span><span class="pln">_i</span><span class="pun">])</span><span class="pln">  

</span><span class="kwd">enum</span><span class="pln"> rInfo</span><span class="pun">{</span><span class="pln">
        rid</span><span class="pun">,</span><span class="pln">
</span><span class="typ">Float</span><span class="pun">:</span><span class="pln">rX</span><span class="pun">,</span><span class="pln">
</span><span class="typ">Float</span><span class="pun">:</span><span class="pln">rY</span><span class="pun">,</span><span class="pln">
</span><span class="typ">Float</span><span class="pun">:</span><span class="pln">rZ</span><span class="pun">,</span><span class="pln">
</span><span class="typ">Float</span><span class="pun">:</span><span class="pln">rRZ</span><span class="pun">,</span><span class="pln">
</span><span class="typ">Float</span><span class="pun">:</span><span class="pln">rR</span><span class="pun">,</span><span class="pln">
        rSpeed</span><span class="pun">,</span><span class="pln">
        rObj
</span><span class="pun">};</span><span class="pln">
</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">MAX_RADARS</span><span class="pun">][</span><span class="pln">rInfo</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">new</span><span class="pln"> TOTALRADAR</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RadarTimer</span><span class="pun">[</span><span class="pln">MAX_PLAYERS</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RadarShtraf</span><span class="pun">[</span><span class="pln">MAX_PLAYERS</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RadarMaxSpeed</span><span class="pun">[</span><span class="pln">MAX_RADARS</span><span class="pun">];</span></pre>

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

<p>
	<span style="color:#282828">В Public OnPlayerDisconnect </span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8348_7">

<span class="kwd">if</span><span class="pun">(</span><span class="typ">RadarTimer</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]!=</span><span class="lit">0</span><span class="pun">){</span><span class="pln">
    </span><span class="typ">RadarShtraf</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    </span><span class="typ">KillTimer</span><span class="pun">(</span><span class="typ">RadarTimer</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	<span style="color:#282828">Теперь загрузку радаров</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8348_9">

<span class="pln">publics</span><span class="pun">:</span><span class="pln"> </span><span class="typ">OnLoadRadarCallback</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">new</span><span class="pln"> time </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetTickCount</span><span class="pun">();</span><span class="pln">
        </span><span class="kwd">new</span><span class="pln"> r</span><span class="pun">,</span><span class="pln"> f</span><span class="pun">;</span><span class="pln">
        cache_get_data</span><span class="pun">(</span><span class="pln">r</span><span class="pun">,</span><span class="pln"> f</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> r</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cache_get_field_content_int</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">"id"</span><span class="pun">,</span><span class="pln"> mysql</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rX</span><span class="pun">]</span><span class="pln">  </span><span class="pun">=</span><span class="pln"> cache_get_field_content_float</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">"x"</span><span class="pun">,</span><span class="pln"> mysql</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rY</span><span class="pun">]</span><span class="pln">  </span><span class="pun">=</span><span class="pln"> cache_get_field_content_float</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">"y"</span><span class="pun">,</span><span class="pln"> mysql</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rZ</span><span class="pun">]</span><span class="pln">  </span><span class="pun">=</span><span class="pln"> cache_get_field_content_float</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">"z"</span><span class="pun">,</span><span class="pln"> mysql</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rRZ</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cache_get_field_content_float</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">"rz"</span><span class="pun">,</span><span class="pln"> mysql</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rR</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cache_get_field_content_float</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">"rad"</span><span class="pun">,</span><span class="pln"> mysql</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rSpeed</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cache_get_field_content_int</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">"speed"</span><span class="pun">,</span><span class="pln"> mysql</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rObj</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">CreateObject</span><span class="pun">(</span><span class="lit">18880</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rX</span><span class="pun">],</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rY</span><span class="pun">],</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rZ</span><span class="pun">],</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rRZ</span><span class="pun">]);</span><span class="pln">
                </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">CreateDynamicSphere</span><span class="pun">(</span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rX</span><span class="pun">],</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rY</span><span class="pun">],</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rZ</span><span class="pun">],</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rR</span><span class="pun">],</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
                </span><span class="com">//Iter_Add(RadarIterator, int);</span><span class="pln">
                </span><span class="typ">RadarIterator</span><span class="pun">[</span><span class="pln">radariter</span><span class="pun">++]=</span><span class="typ">int</span><span class="pun">;</span><span class="pln">
                </span><span class="typ">RadarMaxSpeed</span><span class="pun">[</span><span class="typ">int</span><span class="pun">]=</span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">i</span><span class="pun">][</span><span class="pln">rSpeed</span><span class="pun">];</span><span class="pln">
                TOTALRADAR</span><span class="pun">++;</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        printf</span><span class="pun">(</span><span class="str">"[Загрузка: %d радаров, потрачено %d (ms)"</span><span class="pun">,</span><span class="pln"> TOTALRADAR</span><span class="pun">,</span><span class="typ">GetTickCount</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> time</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	<span style="color:#282828">Если у вас есть данные коллбеки то просто добавьте содержимое,ну а если нет то добавляем данные строки</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8348_11">

<span class="kwd">public</span><span class="pln"> </span><span class="typ">OnPlayerEnterDynamicArea</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> areaid</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        foreachRadar</span><span class="pun">(</span><span class="pln">i</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
                </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">areaid </span><span class="pun">==</span><span class="pln"> i</span><span class="pun">)</span><span class="pln">
                </span><span class="pun">{</span><span class="pln">
                        </span><span class="kwd">if</span><span class="pun">(</span><span class="typ">IsPlayerInAnyVehicle</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="typ">GetPlayerState</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> 
                        </span><span class="pun">{</span><span class="pln">
                                </span><span class="com">//if(IsAPlane(GetPlayerVehicleID(playerid)) || IsABoat(GetPlayerVehicleID(playerid)) || IsABike(GetPlayerVehicleID(playerid))) break; // это условие проверяет не сидите ли вы в самолете, лодке или велике!!!</span><span class="pln">
                                </span><span class="typ">RadarTimer</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SetTimerEx</span><span class="pun">(</span><span class="str">"CallBackRadar"</span><span class="pun">,</span><span class="lit">500</span><span class="pun">,</span><span class="kwd">true</span><span class="pun">,</span><span class="str">"ii"</span><span class="pun">,</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln">areaid</span><span class="pun">);</span><span class="pln">
                        </span><span class="pun">}</span><span class="pln">
                        </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="typ">OnPlayerLeaveDynamicArea</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> areaid</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        foreachRadar</span><span class="pun">(</span><span class="pln">i</span><span class="pun">){</span><span class="pln">
                </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">areaid </span><span class="pun">==</span><span class="pln"> i</span><span class="pun">){</span><span class="pln">
                        </span><span class="typ">RadarShtraf</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">KillTimer</span><span class="pun">(</span><span class="typ">RadarTimer</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]);</span><span class="pln">
                        </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	В OnPlayerEditObject:<br>
	 
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8348_13">

<span class="kwd">if</span><span class="pun">(</span><span class="pln">response </span><span class="pun">==</span><span class="pln"> EDIT_RESPONSE_FINAL</span><span class="pun">){</span><span class="com">// player clicked on savе</span><span class="pln">
                </span><span class="kwd">if</span><span class="pun">(</span><span class="typ">GetPVarInt</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"addrad"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">){</span><span class="pln">
                        </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> TOTALRADAR</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rX</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> fX</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rY</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> fY</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rZ</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> fZ</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rRZ</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> fRotZ</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rSpeed</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetPVarInt</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"speed"</span><span class="pun">);</span><span class="pln">
                        mysql_format</span><span class="pun">(</span><span class="pln">mysql</span><span class="pun">,</span><span class="pln"> </span><span class="typ">MySqlStr</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="typ">MySqlStr</span><span class="pun">),</span><span class="pln"> </span><span class="str">"INSERT INTO "</span><span class="pln">TOTAL_RADAR</span><span class="str">" (`x`, `y`, `z`, `rz`, `speed`) VALUES ('%f', '%f', '%f', '%f', '%i')"</span><span class="pun">,</span><span class="pln">fX</span><span class="pun">,</span><span class="pln">fY</span><span class="pun">,</span><span class="pln">fZ</span><span class="pun">,</span><span class="pln">fRotZ</span><span class="pun">,</span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rSpeed</span><span class="pun">]);</span><span class="pln">
                        mysql_function_query</span><span class="pun">(</span><span class="pln">mysql</span><span class="pun">,</span><span class="pln"> </span><span class="typ">MySqlStr</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="str">""</span><span class="pun">,</span><span class="pln"> </span><span class="str">""</span><span class="pun">);</span><span class="pln">
                        </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">CreateDynamicSphere</span><span class="pun">(</span><span class="pln">fX</span><span class="pun">,</span><span class="pln">fY</span><span class="pun">,</span><span class="pln">fZ</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
                        </span><span class="com">//Iter_Add(RadarIterator, int);</span><span class="pln">
                        </span><span class="typ">RadarIterator</span><span class="pun">[</span><span class="pln">radariter</span><span class="pun">++]=</span><span class="typ">int</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">RadarMaxSpeed</span><span class="pun">[</span><span class="typ">int</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rSpeed</span><span class="pun">];</span><span class="pln">
                        </span><span class="typ">DeletePVar</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"addrad"</span><span class="pun">);</span><span class="pln">
                        </span><span class="typ">DeletePVar</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"speed"</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">response </span><span class="pun">==</span><span class="pln"> EDIT_RESPONSE_CANCEL</span><span class="pun">){</span><span class="com">// player cancelled (ESC)</span><span class="pln">
                </span><span class="typ">DestroyObject</span><span class="pun">(</span><span class="pln">objectid</span><span class="pun">);</span><span class="pln">
                </span><span class="kwd">if</span><span class="pun">(</span><span class="typ">GetPVarInt</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"addrad"</span><span class="pun">)==</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                        TOTALRADAR</span><span class="pun">--;</span><span class="pln">
                        </span><span class="typ">DeletePVar</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"addrad"</span><span class="pun">);</span><span class="pln">
                        </span><span class="typ">DeletePVar</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"speed"</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">response </span><span class="pun">==</span><span class="pln"> EDIT_RESPONSE_UPDATE</span><span class="pun">){</span><span class="com">// player moved the object (edition did not stop at all)</span><span class="pln">
                </span><span class="typ">SetObjectPos</span><span class="pun">(</span><span class="pln">objectid</span><span class="pun">,</span><span class="pln"> fX</span><span class="pun">,</span><span class="pln"> fY</span><span class="pun">,</span><span class="pln"> fZ</span><span class="pun">);</span><span class="pln">
                </span><span class="typ">SetObjectRot</span><span class="pun">(</span><span class="pln">objectid</span><span class="pun">,</span><span class="pln"> fRotX</span><span class="pun">,</span><span class="pln"> fRotY</span><span class="pun">,</span><span class="pln"> fRotZ</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span></pre>

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

<p>
	<span style="color:#282828">Данный коллбек отвечает за сами штрафы,его добавим в самый конец вашего мода</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8348_15">

<span class="pln">publics</span><span class="pun">:</span><span class="pln"> </span><span class="typ">CallBackRadar</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln">area</span><span class="pun">){</span><span class="pln">
        </span><span class="kwd">if</span><span class="pun">(</span><span class="typ">RadarShtraf</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
                </span><span class="kwd">if</span><span class="pun">(</span><span class="typ">IsACop</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="typ">PlayerInfo</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">][</span><span class="pln">pMember</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
                </span><span class="kwd">new</span><span class="pln"> speed </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpeedVehicle</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">);</span><span class="pln">
                </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">speed </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="typ">RadarMaxSpeed</span><span class="pun">[</span><span class="pln">area</span><span class="pun">]+</span><span class="lit">10</span><span class="pun">){&gt;</span><span class="pln">
                        </span><span class="kwd">new</span><span class="pln"> shtraf</span><span class="pun">;</span><span class="pln">
                        shtraf</span><span class="pun">=(</span><span class="pln">speed</span><span class="pun">-</span><span class="typ">RadarMaxSpeed</span><span class="pun">[</span><span class="pln">area</span><span class="pun">])*</span><span class="typ">RadarMaxSpeed</span><span class="pun">[</span><span class="pln">area</span><span class="pun">];</span><span class="pln">
                        </span><span class="typ">PlayerInfo</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">][</span><span class="pln">pCash</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-=</span><span class="pln"> shtraf</span><span class="pun">;</span><span class="pln">
                        </span><span class="typ">RadarShtraf</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
                        SFCM</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln">COLOR_LIGHTRED</span><span class="pun">,</span><span class="str">"[ДПС] Вы нарушили скоростной режим на %d м/ч. Штраф: %d!"</span><span class="pun">,</span><span class="pln">speed</span><span class="pun">-</span><span class="typ">RadarMaxSpeed</span><span class="pun">[</span><span class="pln">area</span><span class="pun">],</span><span class="pln">shtraf</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	<span style="color:#282828">Ну и самое последнее это сама команда для добавление радаров</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8348_19">

<span class="pln">CMD</span><span class="pun">:</span><span class="pln">addradar</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> params</span><span class="pun">[]){</span><span class="pln">
        </span><span class="kwd">if</span><span class="pun">(</span><span class="typ">AdLevel</span><span class="pun">[</span><span class="pln">playerid</span><span class="pun">]</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln"> </span><span class="com">//уровень админа</span><span class="pln">
        </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">sscanf</span><span class="pun">(</span><span class="pln">params</span><span class="pun">,</span><span class="pln"> </span><span class="str">"i"</span><span class="pun">,</span><span class="pln"> params</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]))</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> SCM</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> COLOR_GREY</span><span class="pun">,</span><span class="pln"> </span><span class="str">"{F74848}» Введите{FFFFFF}: /addradar [скорость]"</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Float</span><span class="pun">:</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Float</span><span class="pun">:</span><span class="pln">Y</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Float</span><span class="pun">:</span><span class="pln">Z</span><span class="pun">;</span><span class="pln">
        </span><span class="typ">SetPVarInt</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"addrad"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
        </span><span class="typ">SetPVarInt</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"speed"</span><span class="pun">,</span><span class="pln"> params</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]);</span><span class="pln">
        </span><span class="typ">GetPlayerPos</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> X</span><span class="pun">,</span><span class="pln"> Y</span><span class="pun">,</span><span class="pln"> Z</span><span class="pun">);</span><span class="pln">
        TOTALRADAR</span><span class="pun">++;</span><span class="pln">
        </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rObj</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">CreateObject</span><span class="pun">(</span><span class="lit">18880</span><span class="pun">,</span><span class="pln"> X</span><span class="pun">+</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> Y</span><span class="pun">+</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> Z</span><span class="pun">+</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">,</span><span class="lit">0.0</span><span class="pun">,</span><span class="lit">0.0</span><span class="pun">);</span><span class="pln">
        </span><span class="typ">EditObject</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RadarInfo</span><span class="pun">[</span><span class="pln">TOTALRADAR</span><span class="pun">][</span><span class="pln">rObj</span><span class="pun">]);</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p style="color:#282828">
	Ну вот и все,вот такая маленькая система! На mnINI можете переведу,но советую на <abbr title="База Данных">БД</abbr> ставить,что бы не произошло с ними ни что!
</p>

<p style="color:#282828">
	 
</p>

<p style="color:#282828">
	Спасибо за внимание! Удачного использования!
</p>

<p style="color:#282828">
	<strong>Автор: </strong>неизвестен.
</p>
]]></description><guid isPermaLink="false">369</guid><pubDate>Mon, 07 Aug 2017 11:56:09 +0000</pubDate></item><item><title>&#x41D;&#x435;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x430;&#x44F; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x441;&#x435;&#x43C;&#x435;&#x439;</title><link>https://pawno-rus.com/topic/6036-nebolshaya-sistema-semey/</link><description><![CDATA[
<p>
	<span style="color:#292929;">Решил с неделю назад написать простенькую систему семей, справился +- за 2-3 дня, но потом ещё дня 4 ё*ся с БД, что успешно пофиксил и внёс поправки в мод.</span><br style="color:#292929;" /><span style="color:#292929;">И вот хотелось бы сейчас поделиться с вами:</span>
</p>

<p>
	<font color="#292929">Для начала добавим в начало мода все переменные и Enum</font>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="new famamount;
new Text3D:famd[MAX_PLAYERS];
enum finfo
{
        fID,
        fName[32],
        fOwner[MAX_PLAYER_NAME],
        fZam[MAX_PLAYER_NAME],
        fColor,
        fCColor,
        fMembers,
        fCDate[32],
};
new FamInfo[1000][finfo];
new FamColors[][12] = {&quot;{FF0000}&quot;,&quot;{FD1493}&quot;,&quot;{32CD32}&quot;,&quot;{FF8C00}&quot;
,&quot;{FFFF00}&quot;,&quot;{0000FF}&quot;,&quot;{00FFFF}&quot;,&quot;{FFFFFF}&quot;
,&quot;{8B4513}&quot;,&quot;{000000}&quot;,&quot;{C0C0C0}&quot;};
enum pInfo
{
        pNames[MAX_PLAYER_NAME],
        pFamID,
};
new PlayerInfo[playerid][pInfo];">

<span><span>new</span><span> famamount;</span></span>
<span><span>new</span><span> Text3D:famd[MAX_PLAYERS];</span></span>
<span><span>enum</span><span> finfo</span></span>
<span><span>{</span></span>
<span><span>        fID,</span></span>
<span><span>        fName[</span><span>32</span><span>],</span></span>
<span><span>        fOwner[MAX_PLAYER_NAME],</span></span>
<span><span>        fZam[MAX_PLAYER_NAME],</span></span>
<span><span>        fColor,</span></span>
<span><span>        fCColor,</span></span>
<span><span>        fMembers,</span></span>
<span><span>        fCDate[</span><span>32</span><span>],</span></span>
<span><span>};</span></span>
<span><span>new</span><span> FamInfo[</span><span>1000</span><span>][finfo];</span></span>
<span><span>new</span><span> FamColors[][</span><span>12</span><span>] = {</span><span>"{FF0000}"</span><span>,</span><span>"{FD1493}"</span><span>,</span><span>"{32CD32}"</span><span>,</span><span>"{FF8C00}"</span></span>
<span><span>,</span><span>"{FFFF00}"</span><span>,</span><span>"{0000FF}"</span><span>,</span><span>"{00FFFF}"</span><span>,</span><span>"{FFFFFF}"</span></span>
<span><span>,</span><span>"{8B4513}"</span><span>,</span><span>"{000000}"</span><span>,</span><span>"{C0C0C0}"</span><span>};</span></span>
<span><span>enum</span><span> pInfo</span></span>
<span><span>{</span></span>
<span><span>        pNames[MAX_PLAYER_NAME],</span></span>
<span><span>        pFamID,</span></span>
<span><span>};</span></span>
<span><span>new</span><span> PlayerInfo[playerid][pInfo];</span></span>
</pre>

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

<p>
	После чего добавим forwardы для функций:
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="forward CheckFamNameCreate(playerid, result[]);
forward CheckAkkvign(playerid, inputtext[]);
forward CheckFamNameNEW(playerid, inputtext[]);
forward LoadFams();
forward OtherLoad();">

<span><span>forward CheckFamNameCreate(playerid, result[]);</span></span>
<span><span>forward CheckAkkvign(playerid, inputtext[]);</span></span>
<span><span>forward CheckFamNameNEW(playerid, inputtext[]);</span></span>
<span><span>forward LoadFams();</span></span>
<span><span>forward OtherLoad();</span></span>
</pre>

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

<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="public OnPlayerConnected(playerid)
{
    //Должна быть загрузка данных из БД
    if(PlayerInfo[playerid][pFamID] &gt; 0) Delete3DTextLabel(famd[playerid]);
}

public OnPlayerDisconnect(playerid, ressom)
{
    PlayerInfo[playerid][pFamID] = 0;
}

public OnPlayerSpawn(playerid)
{
    if(PlayerInfo[playerid][pFamID] &gt; 0)
    {
        new famstr[144];
        format(famstr, sizeof(famstr), &quot;%s%s&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]], FamInfo[PlayerInfo[playerid][pFamID]][fName]);
        famd[playerid] = Create3DTextLabel(famstr,0xFFA0A0D0,0.0,0.0,1500.0,30.0,0,1);
        Attach3DTextLabelToPlayer(famd[playerid], playerid, 0.0, 0.0, 0.7);
    }
}">

<span><span>public</span><span> OnPlayerConnected(playerid)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>//Должна быть загрузка данных из БД</span></span>
<span><span>    </span><span>if</span><span>(PlayerInfo[playerid][pFamID] &gt; </span><span>0</span><span>) Delete3DTextLabel(famd[playerid]);</span></span>
<span><span>}</span></span>

<span><span>public</span><span> OnPlayerDisconnect(playerid, ressom)</span></span>
<span><span>{</span></span>
<span><span>    PlayerInfo[playerid][pFamID] = </span><span>0</span><span>;</span></span>
<span><span>}</span></span>

<span><span>public</span><span> OnPlayerSpawn(playerid)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(PlayerInfo[playerid][pFamID] &gt; </span><span>0</span><span>)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>new</span><span> famstr[</span><span>144</span><span>];</span></span>
<span><span>        format(famstr, </span><span>sizeof</span><span>(famstr), </span><span>"%s%s"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][f</span><span>Color]], FamInfo[PlayerInfo[playerid][pFamID]][fNa</span><span>me]);</span></span>
<span><span>        famd[playerid] = Create3DTextLabel(famstr,</span><span>0xFFA0A0D0</span><span>,</span><span>0.0</span><span>,</span><span>0.0</span><span>,</span><span>1500.0</span><span>,</span><span>30.0</span><span>,</span><span>0</span><span>,</span><span>1</span><span>);</span></span>
<span><span>        Attach3DTextLabelToPlayer(famd[playerid], </span><span>playerid, </span><span>0.0</span><span>, </span><span>0.0</span><span>, </span><span>0.7</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>
</pre>

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

<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="public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        switch(dialogid)
        {
                case 16667:
                {
                        if(!response) return true;
                        switch(listitem)
                        {
                                case 0:
                                {
                                        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),true)) return Error(playerid, &quot;Только лидеру!&quot;);
                                        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam],&quot;None&quot;,true)) return Error(playerid, &quot;У вас уже есть заместитель!&quot;);
                                        SPD(playerid, 16668, DIALOG_STYLE_INPUT, &quot;Новый зам.&quot;, &quot;Введите ID игрока, которого хотете поставить на пост своего зама:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
                                }
                                case 1:
                                {
                                        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),true)) return Error(playerid, &quot;Только лидеру!&quot;);
                                        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam],&quot;None&quot;,true) == 0) return Error(playerid, &quot;У вас и так нет заместителя!&quot;);
                                        strmid(FamInfo[PlayerInfo[playerid][pFamID]][fZam],&quot;None&quot;,0,strlen(&quot;None&quot;),32);
                            new form[144];
                                                        format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] снял с поста зама: %s&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                                                                        FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(playerid),playerid,FamInfo[PlayerInfo[playerid][pFamID]][fZam]);
                                                        SCMFam(PlayerInfo[playerid][pFamID], 0xFFFFFFFF, form);
                                                        SaveFams();
                                                        return true;
                                }
                                case 2:
                                {
                                    SPD(playerid, 16669, DIALOG_STYLE_INPUT, &quot;Название&quot;, &quot;Введите новое название:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
                                }
                                case 3:
                                {
                                        SPD(playerid, 16670, DIALOG_STYLE_INPUT, &quot;Исключение&quot;, &quot;Введите ник игрока, которого хотите выгнать:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
                                }
                                case 4:
                                {
                                        new colors[600];
                                        for(new d = 0; d &lt; sizeof(FamColors); d++)
                                        {
                                            if(d == 0) format(colors,sizeof(colors), &quot;%s####################################\n&quot;,FamColors[d]);
                                                else if(d == 11) format(colors,sizeof(colors), &quot;%s%s####################################&quot;,colors,FamColors[d]);

                                                else format(colors,sizeof(colors), &quot;%s%s####################################\n&quot;,colors,FamColors[d]);
                                        }
                                        SPD(playerid, 16671, DIALOG_STYLE_LIST, &quot;\t\tВыбирете новый цвет семьи:&quot;, colors, &quot;Выбрать&quot;,&quot;Отмена&quot;);
                                }
                                case 5:
                                {
                                        new colors[600];
                                        for(new d = 0; d &lt; sizeof(FamColors); d++)
                                        {
                                            if(d == 0) format(colors,sizeof(colors), &quot;%####################################\n&quot;,FamColors[d]);
                                                else if(d == 11) format(colors,sizeof(colors), &quot;%s%s####################################&quot;,colors,FamColors[d]);

                                                else format(colors,sizeof(colors), &quot;%s%s####################################\n&quot;,colors,FamColors[d]);
                                        }
                                        SPD(playerid, 16672, DIALOG_STYLE_LIST, &quot;\t\tВыбирете новый цвет чата семьи:&quot;, colors, &quot;Выбрать&quot;,&quot;Отмена&quot;);
                                }
                        }
                }
                case 16672:
                {
                        FamInfo[PlayerInfo[playerid][pFamID]][fCColor] = listitem;
                        new form[144];
                        format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] сменил цвет чата семьи&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                                            FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(playerid),playerid);
                        SCMFam(PlayerInfo[playerid][pFamID], 0xFFFFFFFF, form);
                        SaveFams();
                        return true;
                }
                case 16671:
                {
                        FamInfo[PlayerInfo[playerid][pFamID]][fColor] = listitem;
                        new form[144];
                        format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] сменил цвет семьи&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                                    FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(playerid),playerid);
                        SCMFam(PlayerInfo[playerid][pFamID], 0xFFFFFFFF, form);
                        SaveFams();
                        for(new fp; fp &lt; MAX_PLAYERS; fp++)
                        {
                                if(PlayerInfo[fp][pFamID] == PlayerInfo[playerid][pFamID])
                                {
                    format(form, sizeof(form), &quot;%s%s&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]], FamInfo[PlayerInfo[playerid][pFamID]][fName]);
                                        famd[fp] = Create3DTextLabel(form,0xFFA0A0D0,0.0,0.0,1500.0,30.0,0,1);
                                        Attach3DTextLabelToPlayer(famd[fp], fp, 0.0, 0.0, 0.7);
                                }
                        }
                        return true;
                }
                case 16670:
                {
                        if(!strlen(inputtext))return SPD(playerid, 16670, DIALOG_STYLE_INPUT, &quot;Исключение&quot;, &quot;Введите ник игрока, которого хотите выгнать:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
                        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),true)) return Error(playerid, &quot;Доступно только создателю семьи!&quot;);
                        //      format(mysql_query, sizeof(mysql_query), &quot;SELECT * FROM `accounts` WHERE `Fastss` = '%s'&quot;, inputtext);
                        //      mysql_function_query(connects, mysql_query, false, &quot;&quot;, &quot;&quot;);
                        /*cache_get_data(rows, fields);
                        if(!rows) return*/
                        new query[75];
                        mysql_format(connects, query, 85, &quot;SELECT `id` FROM `accounts` WHERE `Fastss` = '%s' LIMIT 1&quot;, inputtext);
                        mysql_function_query(connects, mysql_query, true, &quot;CheckAkkvign&quot;, &quot;ds&quot;, playerid, inputtext);
                        //if(!mysql_num_rows(connects)) return

                }
                case 16669:
                {
                        if(!response) return true;
                        if(!strlen(inputtext)) return SPD(playerid, 16669, DIALOG_STYLE_INPUT, &quot;Название&quot;, &quot;Введите новое название:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
                        for(new i = strlen(inputtext); i != 0; --i){
                        switch(inputtext[i]){case 'А'..'Я', 'а'..'я': return Error(playerid, &quot;Нельзя использовать русские буквы!&quot;);}}
                        if(strlen(inputtext) &gt; 32) return Error(playerid, &quot;Максимальное кол-во букв 32&quot;);
                        new select[144];
                        mysql_format(connects, select, sizeof(select), &quot;SELECT * FROM `family` WHERE `fName` = '%s'&quot;, inputtext);
                        mysql_function_query(connects, select, true, &quot;CheckFamNameNEW&quot;, &quot;ds&quot;, playerid, inputtext);
                        SaveFams();
                        return true;
                }
                case 16668:
                {
            if(!response) return true;
            if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),true)) return Error(playerid, &quot;Доступно только создателю семьи!&quot;);
            if(!strlen(inputtext)) return SPD(playerid, 16668, DIALOG_STYLE_INPUT, &quot;Новый зам.&quot;, &quot;Введите ID игрока, которого хотите поставить на пост своего зама:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
            for(new i = 0; i &lt; strlen(inputtext); i++)
            switch (inputtext[i]){ case 'A'..'Z','a'..'z','А'..'Я','а'..'я', ' ': return SPD(playerid, 16668, DIALOG_STYLE_INPUT, &quot;Новый зам.&quot;, &quot;Введите ID игрока, которого хотете поставить на пост своего зама:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;); }
            new playa = strval(inputtext);
            if(!IsPlayerConnected(playa) || playa == INVALID_PLAYER_ID || playa == playerid) return Error(playerid, &quot;Неверный ID&quot;);
            if(PlayerInfo[playa][pFamID] != PlayerInfo[playerid][pFamID]) return Error(playerid, &quot;Игрок должен быть в вашей семье!&quot;);
            strmid(FamInfo[PlayerInfo[playerid][pFamID]][fZam],Nick(playa),0,strlen(Nick(playa)),32);
            new form[144];
            format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] поставил нового зама: %s[%d]&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                                    FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(playerid),playerid,Nick(playa),playa);
                        SCMFam(PlayerInfo[playerid][pFamID], 0xFFFFFFFF, form);
                        SaveFams();
                        return true;
                }
                case 16666:
                {
                    new pid = GetPVarInt(playerid, &quot;ifamidl&quot;), fid = GetPVarInt(playerid, &quot;ifamid&quot;);
                        if(!response)
                        {
                                SendMes(pid, 0xFFFFFFFF, &quot;Игрок %s[%d] отказался от приглашения в семью&quot;, Nick(playerid),playerid);
                                SCM(playerid, 0xFFFFFFFF,&quot;Вы отказались от вступления в семью!&quot;);
                                DeletePVar(playerid, &quot;ifamidl&quot;), DeletePVar(playerid, &quot;ifamid&quot;);
                                return true;
                        }
                        else
                        {
                            new famstr[144];
                            SCM(playerid, COLOR_GREEN, &quot;Вы приняли приглашение в семью!&quot;);
                            SendMes(pid, COLOR_GREEN, &quot;Игрок %s[%d] принял приглашение в семью!&quot;,Nick(playerid),playerid);
                            PlayerInfo[playerid][pFamID] = fid;
                                format(famstr, sizeof(famstr), &quot;%s[%s] {FFFFFF}%s[%d] пригласил нового члена в семью: %s[%d]&quot;, FamColors[FamInfo[fid][fColor]], FamInfo[fid][fName], Nick(pid), pid, Nick(playerid), playerid);
                                SCMFam(fid,0xFFFFFFFF,famstr);
                                FamInfo[fid][fMembers]++;
                                format(famstr, sizeof(famstr), &quot;%s%s&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]], FamInfo[PlayerInfo[playerid][pFamID]][fName]);
                                famd[playerid] = Create3DTextLabel(famstr,0xFFA0A0D0,0.0,0.0,1500.0,30.0,0,1);
                                Attach3DTextLabelToPlayer(famd[playerid], playerid, 0.0, 0.0, 0.7);
                                DeletePVar(playerid, &quot;ifamidl&quot;), DeletePVar(playerid, &quot;ifamid&quot;);
                                SaveFams();
                                return true;
                        }
                }
                case 16665:
                {
                        if(!response) return true;
                        if(!strlen(inputtext)) return SPD(playerid, 16665, DIALOG_STYLE_INPUT, &quot;Создание семьи&quot;, &quot;Что бы создать семью, введите название семью ниже:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
                        new ffc[64];
                        format(ffc, sizeof(ffc), &quot;/famcreate %s&quot;, inputtext);
                        OnPlayerCommandText(playerid, ffc);
                        return true;
                }
        }
}">

<span><span>public</span><span> OnDialogResponse(playerid, dialogid, response, li</span><span>stitem, inputtext[])</span></span>
<span><span>{</span></span>
<span><span>        </span><span>switch</span><span>(dialogid)</span></span>
<span><span>        {</span></span>
<span><span>                </span><span>case</span><span> </span><span>16667</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>                        </span><span>if</span><span>(!response) </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                        </span><span>switch</span><span>(listitem)</span></span>
<span><span>                        {</span></span>
<span><span>                                </span><span>case</span><span> </span><span>0</span><span>:</span></span>
<span><span>                                {</span></span>
<span><span>                                        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),</span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"Только лидеру!"</span><span>);</span></span>
<span><span>                                        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam],</span><span>"None"</span><span>,</span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"У вас уже есть заместитель!"</span><span>);</span></span>
<span><span>                                        </span><span>SPD(playerid, </span><span>16668</span><span>, DIALOG_STYLE_INPUT, </span><span>"Новый зам."</span><span>, </span><span>"Введите ID игрока, которого хотете поставить на </span><span>пост своего зама:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>                                }</span></span>
<span><span>                                </span><span>case</span><span> </span><span>1</span><span>:</span></span>
<span><span>                                {</span></span>
<span><span>                                        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),</span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"Только лидеру!"</span><span>);</span></span>
<span><span>                                        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam],</span><span>"None"</span><span>,</span><span>true</span><span>) == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"У вас и так нет заместителя!"</span><span>);</span></span>
<span><span>                                        strmid(Fam</span><span>Info[PlayerInfo[playerid][pFamID]][fZam],</span><span>"None"</span><span>,</span><span>0</span><span>,strlen(</span><span>"None"</span><span>),</span><span>32</span><span>);</span></span>
<span><span>                            </span><span>new</span><span> form[</span><span>144</span><span>];</span></span>
<span><span>                                                   </span><span>     format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] снял с поста зама: </span><span>%s"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                                                  </span><span>                                    FamColors[FamI</span><span>nfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(p</span><span>layerid),playerid,FamInfo[PlayerInfo[playerid][pFa</span><span>mID]][fZam]);</span></span>
<span><span>                                                  </span><span>      SCMFam(PlayerInfo[playerid][pFamID], </span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>                                                  </span><span>      SaveFams();</span></span>
<span><span>                                                  </span><span>      </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                                }</span></span>
<span><span>                                </span><span>case</span><span> </span><span>2</span><span>:</span></span>
<span><span>                                {</span></span>
<span><span>                                    SPD(playerid, </span><span>16669</span><span>, DIALOG_STYLE_INPUT, </span><span>"Название"</span><span>, </span><span>"Введите новое название:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>                                }</span></span>
<span><span>                                </span><span>case</span><span> </span><span>3</span><span>:</span></span>
<span><span>                                {</span></span>
<span><span>                                        </span><span>SPD(playerid, </span><span>16670</span><span>, DIALOG_STYLE_INPUT, </span><span>"Исключение"</span><span>, </span><span>"Введите ник игрока, которого хотите выгнать:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>                                }</span></span>
<span><span>                                </span><span>case</span><span> </span><span>4</span><span>:</span></span>
<span><span>                                {</span></span>
<span><span>                                        </span><span>new</span><span> colors[</span><span>600</span><span>];</span></span>
<span><span>                                        </span><span>for</span><span>(</span><span>new</span><span> d = </span><span>0</span><span>; d &lt; </span><span>sizeof</span><span>(FamColors); d++)</span></span>
<span><span>                                        {</span></span>
<span><span>                                            </span><span>if</span><span>(d == </span><span>0</span><span>) format(colors,</span><span>sizeof</span><span>(colors), </span><span>"%s####################################\n"</span><span>,FamColors[d]);</span></span>
<span><span>                                                </span><span>else</span><span> </span><span>if</span><span>(d == </span><span>11</span><span>) format(colors,</span><span>sizeof</span><span>(colors), </span><span>"%s%s####################################"</span><span>,colors,FamColors[d]);</span></span>

<span><span>                                                </span><span>else</span><span> format(colors,</span><span>sizeof</span><span>(colors), </span><span>"%s%s####################################\n"</span><span>,colors,FamColors[d]);</span></span>
<span><span>                                        }</span></span>
<span><span>                                        </span><span>SPD(playerid, </span><span>16671</span><span>, DIALOG_STYLE_LIST, </span><span>"\t\tВыбирете новый цвет семьи:"</span><span>, colors, </span><span>"Выбрать"</span><span>,</span><span>"Отмена"</span><span>);</span></span>
<span><span>                                }</span></span>
<span><span>                                </span><span>case</span><span> </span><span>5</span><span>:</span></span>
<span><span>                                {</span></span>
<span><span>                                        </span><span>new</span><span> colors[</span><span>600</span><span>];</span></span>
<span><span>                                        </span><span>for</span><span>(</span><span>new</span><span> d = </span><span>0</span><span>; d &lt; </span><span>sizeof</span><span>(FamColors); d++)</span></span>
<span><span>                                        {</span></span>
<span><span>                                            </span><span>if</span><span>(d == </span><span>0</span><span>) format(colors,</span><span>sizeof</span><span>(colors), </span><span>"%####################################\n"</span><span>,FamColors[d]);</span></span>
<span><span>                                                </span><span>else</span><span> </span><span>if</span><span>(d == </span><span>11</span><span>) format(colors,</span><span>sizeof</span><span>(colors), </span><span>"%s%s####################################"</span><span>,colors,FamColors[d]);</span></span>

<span><span>                                                </span><span>else</span><span> format(colors,</span><span>sizeof</span><span>(colors), </span><span>"%s%s####################################\n"</span><span>,colors,FamColors[d]);</span></span>
<span><span>                                        }</span></span>
<span><span>                                        </span><span>SPD(playerid, </span><span>16672</span><span>, DIALOG_STYLE_LIST, </span><span>"\t\tВыбирете новый цвет чата семьи:"</span><span>, colors, </span><span>"Выбрать"</span><span>,</span><span>"Отмена"</span><span>);</span></span>
<span><span>                                }</span></span>
<span><span>                        }</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>case</span><span> </span><span>16672</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>                        FamInfo[PlayerInfo[playeri</span><span>d][pFamID]][fCColor] = listitem;</span></span>
<span><span>                        </span><span>new</span><span> form[</span><span>144</span><span>];</span></span>
<span><span>                        format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] сменил цвет чата </span><span>семьи"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                                                  </span><span>        FamColors[FamInfo[PlayerInfo[playerid][pFa</span><span>mID]][fCColor]],Nick(playerid),playerid);</span></span>
<span><span>                        SCMFam(PlayerInfo[playerid</span><span>][pFamID], </span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>                        SaveFams();</span></span>
<span><span>                        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>case</span><span> </span><span>16671</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>                        FamInfo[PlayerInfo[playeri</span><span>d][pFamID]][fColor] = listitem;</span></span>
<span><span>                        </span><span>new</span><span> form[</span><span>144</span><span>];</span></span>
<span><span>                        format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] сменил цвет семьи"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                                                  </span><span>FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fC</span><span>Color]],Nick(playerid),playerid);</span></span>
<span><span>                        SCMFam(PlayerInfo[playerid</span><span>][pFamID], </span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>                        SaveFams();</span></span>
<span><span>                        </span><span>for</span><span>(</span><span>new</span><span> fp; fp &lt; MAX_PLAYERS; fp++)</span></span>
<span><span>                        {</span></span>
<span><span>                                </span><span>if</span><span>(PlayerInfo[fp][pFamID] == PlayerInfo[playerid][pF</span><span>amID])</span></span>
<span><span>                                {</span></span>
<span><span>                    format(form, </span><span>sizeof</span><span>(form), </span><span>"%s%s"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][f</span><span>Color]], FamInfo[PlayerInfo[playerid][pFamID]][fNa</span><span>me]);</span></span>
<span><span>                                        famd[fp] =</span><span> Create3DTextLabel(form,</span><span>0xFFA0A0D0</span><span>,</span><span>0.0</span><span>,</span><span>0.0</span><span>,</span><span>1500.0</span><span>,</span><span>30.0</span><span>,</span><span>0</span><span>,</span><span>1</span><span>);</span></span>
<span><span>                                        Attach3DTe</span><span>xtLabelToPlayer(famd[fp], fp, </span><span>0.0</span><span>, </span><span>0.0</span><span>, </span><span>0.7</span><span>);</span></span>
<span><span>                                }</span></span>
<span><span>                        }</span></span>
<span><span>                        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>case</span><span> </span><span>16670</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>                        </span><span>if</span><span>(!strlen(inputtext))</span><span>return</span><span> SPD(playerid, </span><span>16670</span><span>, DIALOG_STYLE_INPUT, </span><span>"Исключение"</span><span>, </span><span>"Введите ник игрока, которого хотите выгнать:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>                        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),</span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"Доступно только создателю семьи!"</span><span>);</span></span>
<span><span>                        </span><span>//      format(mysql_query, sizeof(mysql_query), "</span><span>SELECT * FROM `accounts` WHERE `Fastss` = '%s'", i</span><span>nputtext);</span></span>
<span><span>                        </span><span>//      mysql_function_query(connects, mysql_query</span><span>, false, "", "");</span></span>
<span><span>                        </span><span>/*cache_get_data(rows, fields);</span></span>
<span><span>                        if(!rows) return*/</span></span>
<span><span>                        </span><span>new</span><span> query[</span><span>75</span><span>];</span></span>
<span><span>                        mysql_format(connects, que</span><span>ry, </span><span>85</span><span>, </span><span>"SELECT `id` FROM `accounts` WHERE `Fastss` = '%s'</span><span> LIMIT 1"</span><span>, inputtext);</span></span>
<span><span>                        mysql_function_query(conne</span><span>cts, mysql_query, </span><span>true</span><span>, </span><span>"CheckAkkvign"</span><span>, </span><span>"ds"</span><span>, playerid, inputtext);</span></span>
<span><span>                        </span><span>//if(!mysql_num_rows(connects)) return</span></span>

<span><span>                }</span></span>
<span><span>                </span><span>case</span><span> </span><span>16669</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>                        </span><span>if</span><span>(!response) </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                        </span><span>if</span><span>(!strlen(inputtext)) </span><span>return</span><span> SPD(playerid, </span><span>16669</span><span>, DIALOG_STYLE_INPUT, </span><span>"Название"</span><span>, </span><span>"Введите новое название:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>                        </span><span>for</span><span>(</span><span>new</span><span> i = strlen(inputtext); i != </span><span>0</span><span>; --i){</span></span>
<span><span>                        </span><span>switch</span><span>(inputtext[i]){</span><span>case</span><span> </span><span>'А'</span><span>..</span><span>'Я'</span><span>, </span><span>'а'</span><span>..</span><span>'я'</span><span>: </span><span>return</span><span> Error(playerid, </span><span>"Нельзя использовать русские буквы!"</span><span>);}}</span></span>
<span><span>                        </span><span>if</span><span>(strlen(inputtext) &gt; </span><span>32</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Максимальное кол-во букв 32"</span><span>);</span></span>
<span><span>                        </span><span>new</span><span> select[</span><span>144</span><span>];</span></span>
<span><span>                        mysql_format(connects, sel</span><span>ect, </span><span>sizeof</span><span>(select), </span><span>"SELECT * FROM `family` WHERE `fName` = '%s'"</span><span>, inputtext);</span></span>
<span><span>                        mysql_function_query(conne</span><span>cts, select, </span><span>true</span><span>, </span><span>"CheckFamNameNEW"</span><span>, </span><span>"ds"</span><span>, playerid, inputtext);</span></span>
<span><span>                        SaveFams();</span></span>
<span><span>                        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>case</span><span> </span><span>16668</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>            </span><span>if</span><span>(!response) </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>            </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),</span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"Доступно только создателю семьи!"</span><span>);</span></span>
<span><span>            </span><span>if</span><span>(!strlen(inputtext)) </span><span>return</span><span> SPD(playerid, </span><span>16668</span><span>, DIALOG_STYLE_INPUT, </span><span>"Новый зам."</span><span>, </span><span>"Введите ID игрока, которого хотите поставить на </span><span>пост своего зама:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>            </span><span>for</span><span>(</span><span>new</span><span> i = </span><span>0</span><span>; i &lt; strlen(inputtext); i++)</span></span>
<span><span>            </span><span>switch</span><span> (inputtext[i]){ </span><span>case</span><span> </span><span>'A'</span><span>..</span><span>'Z'</span><span>,</span><span>'a'</span><span>..</span><span>'z'</span><span>,</span><span>'А'</span><span>..</span><span>'Я'</span><span>,</span><span>'а'</span><span>..</span><span>'я'</span><span>, </span><span>' '</span><span>: </span><span>return</span><span> SPD(playerid, </span><span>16668</span><span>, DIALOG_STYLE_INPUT, </span><span>"Новый зам."</span><span>, </span><span>"Введите ID игрока, которого хотете поставить на </span><span>пост своего зама:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>); }</span></span>
<span><span>            </span><span>new</span><span> playa = strval(inputtext);</span></span>
<span><span>            </span><span>if</span><span>(!IsPlayerConnected(playa) || playa == </span><span>INVALID_PLAYER_ID || playa == playerid) </span><span>return</span><span> Error(playerid, </span><span>"Неверный ID"</span><span>);</span></span>
<span><span>            </span><span>if</span><span>(PlayerInfo[playa][pFamID] != </span><span>PlayerInfo[playerid][pFamID]) </span><span>return</span><span> Error(playerid, </span><span>"Игрок должен быть в вашей семье!"</span><span>);</span></span>
<span><span>            strmid(FamInfo[PlayerInfo[playerid][pF</span><span>amID]][fZam],Nick(playa),</span><span>0</span><span>,strlen(Nick(playa)),</span><span>32</span><span>);</span></span>
<span><span>            </span><span>new</span><span> form[</span><span>144</span><span>];</span></span>
<span><span>            format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] поставил нового </span><span>зама: %s[%d]"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                                                  </span><span>FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fC</span><span>Color]],Nick(playerid),playerid,Nick(playa),playa)</span><span>;</span></span>
<span><span>                        SCMFam(PlayerInfo[playerid</span><span>][pFamID], </span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>                        SaveFams();</span></span>
<span><span>                        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>case</span><span> </span><span>16666</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>                    </span><span>new</span><span> pid = GetPVarInt(playerid, </span><span>"ifamidl"</span><span>), fid = GetPVarInt(playerid, </span><span>"ifamid"</span><span>);</span></span>
<span><span>                        </span><span>if</span><span>(!response)</span></span>
<span><span>                        {</span></span>
<span><span>                                SendMes(pid, </span><span>0xFFFFFFFF</span><span>, </span><span>"Игрок %s[%d] отказался от приглашения в семью"</span><span>, Nick(playerid),playerid);</span></span>
<span><span>                                SCM(playerid, </span><span>0xFFFFFFFF</span><span>,</span><span>"Вы отказались от вступления в семью!"</span><span>);</span></span>
<span><span>                                DeletePVar(playeri</span><span>d, </span><span>"ifamidl"</span><span>), DeletePVar(playerid, </span><span>"ifamid"</span><span>);</span></span>
<span><span>                                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                        }</span></span>
<span><span>                        </span><span>else</span></span>
<span><span>                        {</span></span>
<span><span>                            </span><span>new</span><span> famstr[</span><span>144</span><span>];</span></span>
<span><span>                            SCM(playerid, </span><span>COLOR_GREEN, </span><span>"Вы приняли приглашение в семью!"</span><span>);</span></span>
<span><span>                            SendMes(pid, </span><span>COLOR_GREEN, </span><span>"Игрок %s[%d] принял приглашение в семью!"</span><span>,Nick(playerid),playerid);</span></span>
<span><span>                            PlayerInfo[playerid][p</span><span>FamID] = fid;</span></span>
<span><span>                                format(famstr, </span><span>sizeof</span><span>(famstr), </span><span>"%s[%s] {FFFFFF}%s[%d] пригласил нового члена в </span><span>семью: %s[%d]"</span><span>, FamColors[FamInfo[fid][fColor]], </span><span>FamInfo[fid][fName], Nick(pid), pid, </span><span>Nick(playerid), playerid);</span></span>
<span><span>                                SCMFam(fid,</span><span>0xFFFFFFFF</span><span>,famstr);</span></span>
<span><span>                                FamInfo[fid][fMemb</span><span>ers]++;</span></span>
<span><span>                                format(famstr, </span><span>sizeof</span><span>(famstr), </span><span>"%s%s"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][f</span><span>Color]], FamInfo[PlayerInfo[playerid][pFamID]][fNa</span><span>me]);</span></span>
<span><span>                                famd[playerid] = C</span><span>reate3DTextLabel(famstr,</span><span>0xFFA0A0D0</span><span>,</span><span>0.0</span><span>,</span><span>0.0</span><span>,</span><span>1500.0</span><span>,</span><span>30.0</span><span>,</span><span>0</span><span>,</span><span>1</span><span>);</span></span>
<span><span>                                Attach3DTextLabelT</span><span>oPlayer(famd[playerid], playerid, </span><span>0.0</span><span>, </span><span>0.0</span><span>, </span><span>0.7</span><span>);</span></span>
<span><span>                                DeletePVar(playeri</span><span>d, </span><span>"ifamidl"</span><span>), DeletePVar(playerid, </span><span>"ifamid"</span><span>);</span></span>
<span><span>                                SaveFams();</span></span>
<span><span>                                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                        }</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>case</span><span> </span><span>16665</span><span>:</span></span>
<span><span>                {</span></span>
<span><span>                        </span><span>if</span><span>(!response) </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                        </span><span>if</span><span>(!strlen(inputtext)) </span><span>return</span><span> SPD(playerid, </span><span>16665</span><span>, DIALOG_STYLE_INPUT, </span><span>"Создание семьи"</span><span>, </span><span>"Что бы создать семью, введите название семью </span><span>ниже:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>                        </span><span>new</span><span> ffc[</span><span>64</span><span>];</span></span>
<span><span>                        format(ffc, </span><span>sizeof</span><span>(ffc), </span><span>"/famcreate %s"</span><span>, inputtext);</span></span>
<span><span>                        OnPlayerCommandText(player</span><span>id, ffc);</span></span>
<span><span>                        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>                }</span></span>
<span><span>        }</span></span>
<span><span>}</span></span>
</pre>

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

<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="public OnGameModeInit()
{
    CreateDynamicPickup(1314, 23, 395.8950, 1359.0887, 1085.5210, -1, -1, -1, 20.0);
        CreateDynamic3DTextLabel(&quot;Создание семей\n{FF0000}Используйте \'ALT\'&quot;,0xFFFFFFFF, 395.8950, 1359.0887, 1085.5210,20.0, INVALID_PLAYER_ID,INVALID_VEHICLE_ID, 1, -1, -1, -1, 20.0);
}">

<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>    CreateDynamicPickup(</span><span>1314</span><span>, </span><span>23</span><span>, </span><span>395.8950</span><span>, </span><span>1359.0887</span><span>, </span><span>1085.5210</span><span>, -</span><span>1</span><span>, -</span><span>1</span><span>, -</span><span>1</span><span>, </span><span>20.0</span><span>);</span></span>
<span><span>        CreateDynamic3DTextLabel(</span><span>"Создание семей\n{FF0000}Используйте \'ALT\'"</span><span>,</span><span>0xFFFFFFFF</span><span>, </span><span>395.8950</span><span>, </span><span>1359.0887</span><span>, </span><span>1085.5210</span><span>,</span><span>20.0</span><span>, INVALID_PLAYER_ID,INVALID_VEHICLE_ID, </span><span>1</span><span>, -</span><span>1</span><span>, -</span><span>1</span><span>, -</span><span>1</span><span>, </span><span>20.0</span><span>);</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	<span style="color:#292929;">И самое интересное, команды, которые были написаны в доисторческом стиле, а именно OnPlayerCommandText, так как писал я уже под готовый мод:</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnPlayerCommandText(playerid, cmdtext[])
{
        // --------------------------- СИСТЕМА СЕМЕЙ --------------------------
        else if(strcmp(cmd, &quot;/famcreate&quot;, true) == 0)
        {
            if(PlayerInfo[playerid][pFamID] != 0) return Error(playerid, &quot;Вы уже состоите в семье!&quot;);
                if(PlayerInfo[playerid][pLevel] &lt; 15) return Error(playerid, &quot;Семью создать можно только с 15-го уровня&quot;);
                new length = strlen(cmdtext);
                while ((idx &lt; length) &amp;&amp; (cmdtext[idx] &lt;= ' '))
                {
                        idx++;
                }
                new offset = idx;
                new result[90];
                while ((idx &lt; length) &amp;&amp; ((idx - offset) &lt; (sizeof(result) - 1)))
                {
                        result[idx - offset] = cmdtext[idx];
                        idx++;
                }
                result[idx - offset] = EOS;
                if(!strlen(result)) return SPD(playerid, 16665, DIALOG_STYLE_INPUT, &quot;Создание семьи&quot;, &quot;Что бы создать семью, введите название семью ниже:&quot;, &quot;Ввести&quot;, &quot;Отмена&quot;);
                for(new i = strlen(result); i != 0; --i)
                switch(result[i]){
                        case 'А'..'Я', 'а'..'я': return Error(playerid, &quot;Нельзя использовать русские буквы!&quot;);
                        case '\'', '`': return Error(playerid, &quot;Недопустимые символы&quot;);}
                if(strlen(result) &gt; 32) return Error(playerid, &quot;Максимальное кол-во букв 32&quot;);
                new select[144];
                mysql_format(connects, select, sizeof(select), &quot;SELECT * FROM `family` WHERE `fName` = '%s'&quot;, result);
                mysql_function_query(connects, select, true, &quot;CheckFamNameCreate&quot;, &quot;ds&quot;, playerid,result);
                return true;
        }
        else if(strcmp(cmd, &quot;/finvite&quot;, true) == 0)
        {
            if(PlayerInfo[playerid][pFamID] == 0) return Error(playerid, &quot;Вам недоступна эта функция!&quot;);
                else if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner], PlayerInfo[playerid][pNames], true) &amp;&amp; \
                    strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], PlayerInfo[playerid][pNames], true)) return Error(playerid, &quot;Вы не лидер/зам. семьи!&quot;);
        tmp = strcharsplit(cmdtext, idx);
                if(!strlen(tmp)) return Use(playerid, &quot;/finvite [id]&quot;);
                new playa = ReturnUser(tmp), form[144], fid = PlayerInfo[playerid][pFamID];
                if(!IsPlayerConnected(playa) || gPlayerLogged[playa] == 0 || playa == INVALID_PLAYER_ID) return Error(playerid, &quot;Неверный ID игрока&quot;);
                if(PlayerInfo[playa][pFamID] == PlayerInfo[playerid][pFamID]) return Error(playerid, &quot;Игрок уже состоит в вашей семье!&quot;);
                new Float:px,Float:py,Float:pz; GetPlayerPos(playa,px,py,pz);
                if(!PlayerToPoint(3,playerid,px,py,pz)) return Error(playerid, &quot;Вы далекто от игрока!&quot;);
                if(PlayerInfo[playa][pFamID] != 0) return Error(playerid, &quot;Игрок уже состоит в другой семье!&quot;);
                format(form, sizeof(form),&quot;{FFFFFF}%s[%d] предлагает вас вступить в семью%s %s&quot;, Nick(playerid), playerid, FamColors[FamInfo[fid][fColor]], FamInfo[fid][fName]);
                SPD(playa, 16666, DIALOG_STYLE_MSGBOX, &quot;Приглашение&quot;, form, &quot;Да&quot;, &quot;Нет&quot;);
                SetPVarInt(playa, &quot;ifamidl&quot;, playerid);
                SetPVarInt(playa, &quot;ifamid&quot;, fid);
                return true;
        }
        else if(strcmp(cmd, &quot;/funinvite&quot;, true) == 0)
        {
        if(PlayerInfo[playerid][pFamID] == 0) return Error(playerid, &quot;Вам недоступна эта функция!&quot;);
            else if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner], PlayerInfo[playerid][pNames], true) &amp;&amp; \
                    strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], PlayerInfo[playerid][pNames], true)) return Error(playerid, &quot;Вы не лидер/зам. семьи!&quot;);
        tmp = strcharsplit(cmdtext, idx);
                if(!strlen(tmp)) return Use(playerid, &quot;/funinvite [id]&quot;);
                new playa = ReturnUser(tmp), form[144];
                if(!IsPlayerConnected(playa) || gPlayerLogged[playa] == 0 || playa == INVALID_PLAYER_ID) return Error(playerid, &quot;Неверный ID игрока&quot;);
                if(PlayerInfo[playa][pFamID] != PlayerInfo[playerid][pFamID]) return Error(playerid, &quot;Игрок не состоит в вашей семье!&quot;);
                new length = strlen(cmdtext);
                while ((idx &lt; length) &amp;&amp; (cmdtext[idx] &lt;= ' '))
                {
                        idx++;
                }
                new offset = idx;
                new result[128];
                while ((idx &lt; length) &amp;&amp; ((idx - offset) &lt; (sizeof(result) - 1)))
                {
                        result[idx - offset] = cmdtext[idx];
                        idx++;
                }
                result[idx - offset] = EOS;
                if(!strlen(result)) return Use(playerid, &quot;/funinvite [id] [причина]&quot;);
                if(playa == playerid) return Use(playerid, &quot;/fleave&quot;);
                else if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner], result, true) == 0 || \
                    strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], result, true) == 0) return Error(playerid, &quot;Нельзя выгнать лидера/зама!&quot;);
                SendMes(playerid, 0xFFFFFFFF, &quot;Вы выгнали %s[%d] из семьи по причине: %s&quot;,Nick(playa), playa, result);
                SendMes(playa, 0xFFFFFFFF, &quot;%s[%d] выгнал ваз из семьи по причине: %s&quot;, Nick(playerid), playerid, result);
                format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] выгнал из семьи %s[%d] по причине: %s&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                                                 FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(playerid),playerid,Nick(playa),playa,result);
                SCMFam(PlayerInfo[playerid][pFamID],0xFFFFFFFF, form);
                PlayerInfo[playa][pFamID] = 0;
                Delete3DTextLabel(famd[playerid]);
                --FamInfo[PlayerInfo[playerid][pFamID]][fMembers];
                return true;
        }
        else if(strcmp(cmd, &quot;/fleave&quot;, true) == 0)
        {
            new form[144];
        if(PlayerInfo[playerid][pFamID] == 0) return Error(playerid, &quot;Вам и так не состоите в семье!&quot;);
        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),true) == 0) return Error(playerid, &quot;Вы не можете покинуть семью, так как её создатель!&quot;);
        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam],Nick(playerid),true) == 0) strmid(FamInfo[PlayerInfo[playerid][pFamID]][fZam],&quot;None&quot;,0,strlen(&quot;None&quot;),32);
        SCM(playerid, 0xFFFFFFFF,&quot;Вы успешно покинули семью!&quot;);
        format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] покинул семью&quot;,FamInfo[PlayerInfo[playerid][pFamID]][fColor],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                FamInfo[PlayerInfo[playerid][pFamID]][fCColor],Nick(playerid),playerid);
        SCMFam(PlayerInfo[playerid][pFamID],0xFFFFFFFF, form);
        --FamInfo[PlayerInfo[playerid][pFamID]][fMembers];
                PlayerInfo[playerid][pFamID] = 0;
        }
        else if(strcmp(cmd, &quot;/fampanel&quot;, true) == 0 || strcmp(cmd, &quot;/fp&quot;, true) == 0)
        {
        if(PlayerInfo[playerid][pFamID] == 0) return Error(playerid, &quot;Вам недоступна эта функция!&quot;);
            else if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner], PlayerInfo[playerid][pNames], true) &amp;&amp; \
                    strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], PlayerInfo[playerid][pNames], true)) return Error(playerid, &quot;Вы не лидер/зам. семьи!&quot;);
                SPD(playerid, 16667, DIALOG_STYLE_LIST, &quot;Меню семью&quot;, &quot;Поставить заместителя\nСнять текущего заместителя\nИзменить название семьи\nВыгнать человека [Offline]\nСменить цвет семьи\nСменить цвет чата&quot;, &quot;Выбрать&quot;,&quot;Отмена&quot;);
        }
        else if(strcmp(cmd, &quot;/faminfo&quot;, true) == 0 || strcmp(cmd, &quot;/fi&quot;, true) == 0)
        {
        if(PlayerInfo[playerid][pFamID] == 0) return Error(playerid, &quot;Вы не состоите в семье!&quot;);
                new finfos[512], fid = PlayerInfo[playerid][pFamID];
        format(finfos,sizeof(finfos),&quot;\n\t%s%s{ffffff}\n\n\tЛидер: %s\n\tЗам: %s\n\n\tДата создания: %s\n\tЧисленность семьи: %d чел.&quot;,\
                FamColors[FamInfo[fid][fColor]],FamInfo[fid][fName],FamInfo[fid][fOwner],FamInfo[fid][fZam],FamInfo[fid][fCDate],FamInfo[fid][fMembers]);
                SPD(playerid, 0, DIALOG_STYLE_MSGBOX,&quot;Информация:&quot;, finfos, &quot;Ок&quot;, &quot;&quot;);
                return true;
        }
        else if(strcmp(cmd, &quot;/fmembers&quot;, true) == 0 || strcmp(cmd, &quot;/fonline&quot;, true) == 0)
        {
        if(PlayerInfo[playerid][pFamID] == 0) return Error(playerid, &quot;Вы не состоите в семье!&quot;);
                new finfon[32],finfos[512], fid = PlayerInfo[playerid][pFamID], m;
                for(new i = 0; i &lt; MAX_PLAYERS; i++)
                {
                    if(!IsPlayerConnected(i) || i == INVALID_PLAYER_ID) continue;
                        if(PlayerInfo[i][pFamID] != fid) continue;
                        if(strcmp(FamInfo[fid][fOwner],Nick(i),true) == 0) format(finfos,sizeof(finfos), &quot;%sЛидер: %s[%d]\n&quot;,finfos,Nick(i),i);
                        else if(strcmp(FamInfo[fid][fZam],Nick(i),true) == 0) format(finfos,sizeof(finfos), &quot;%sЗам.: %s[%d]\n&quot;,finfos,Nick(i),i);
                        else format(finfos,sizeof(finfos), &quot;%sУчастник: %s[%d]\n&quot;,finfos,Nick(i),i);
                        m++;
                }
                format(finfos, sizeof(finfos), &quot;%s\n{669999}Всего в сети: %d чел.&quot;, finfos,m);
        format(finfon, sizeof(finfon), &quot;%s****ы семьи ONline&quot;,FamInfo[fid][fColor]);
        SPD(playerid, 0, DIALOG_STYLE_MSGBOX,finfon, finfos, &quot;Ок&quot;, &quot;&quot;);
        return true;
        }
        else if(strcmp(cmd, &quot;/fc&quot;, true) == 0 || strcmp(cmd, &quot;/k&quot;, true) == 0)
        {
        if(PlayerInfo[playerid][pFamID] == 0) return Error(playerid, &quot;Вы не состоите в семье!&quot;);
        new length = strlen(cmdtext);
                while ((idx &lt; length) &amp;&amp; (cmdtext[idx] &lt;= ' '))
                {
                        idx++;
                }
                new offset = idx;
                new result[128];
                while ((idx &lt; length) &amp;&amp; ((idx - offset) &lt; (sizeof(result) - 1)))
                {
                        result[idx - offset] = cmdtext[idx];
                        idx++;
                }
                result[idx - offset] = EOS;
                if(!strlen(result)) return SendClientMessage(playerid, COLOR_GREEN, &quot;Вводите: /fc [text] или /k [text]&quot;);
        for(new k = 0; k &lt; MAX_PLAYERS; k++)
        if(PlayerInfo[playerid][pFamID] == PlayerInfo[k][pFamID]) SendMes(k, 0xFFFFFFFF, &quot;%s[%s]{FFFFFF} %s[%d]: %s%s&quot;, FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                                                         PlayerInfo[playerid][pNames],playerid,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],result);
                return true;
        }// --------------------------- СИСТЕМА СЕМЕЙ -------------------------- END
}">

<span><span>public</span><span> OnPlayerCommandText(playerid, cmdtext[])</span></span>
<span><span>{</span></span>
<span><span>        </span><span>// --------------------------- СИСТЕМА СЕМЕЙ </span><span>--------------------------</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/famcreate"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>            </span><span>if</span><span>(PlayerInfo[playerid][pFamID] != </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вы уже состоите в семье!"</span><span>);</span></span>
<span><span>                </span><span>if</span><span>(PlayerInfo[playerid][pLevel] &lt; </span><span>15</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Семью создать можно только с 15-го уровня"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> length = strlen(cmdtext);</span></span>
<span><span>                </span><span>while</span><span> ((idx &lt; length) &amp;&amp; (cmdtext[idx] &lt;= </span><span>' '</span><span>))</span></span>
<span><span>                {</span></span>
<span><span>                        idx++;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>new</span><span> offset = idx;</span></span>
<span><span>                </span><span>new</span><span> result[</span><span>90</span><span>];</span></span>
<span><span>                </span><span>while</span><span> ((idx &lt; length) &amp;&amp; ((idx - offset) &lt; (</span><span>sizeof</span><span>(result) - </span><span>1</span><span>)))</span></span>
<span><span>                {</span></span>
<span><span>                        result[idx - offset] = cmd</span><span>text[idx];</span></span>
<span><span>                        idx++;</span></span>
<span><span>                }</span></span>
<span><span>                result[idx - offset] = EOS;</span></span>
<span><span>                </span><span>if</span><span>(!strlen(result)) </span><span>return</span><span> SPD(playerid, </span><span>16665</span><span>, DIALOG_STYLE_INPUT, </span><span>"Создание семьи"</span><span>, </span><span>"Что бы создать семью, введите название семью </span><span>ниже:"</span><span>, </span><span>"Ввести"</span><span>, </span><span>"Отмена"</span><span>);</span></span>
<span><span>                </span><span>for</span><span>(</span><span>new</span><span> i = strlen(result); i != </span><span>0</span><span>; --i)</span></span>
<span><span>                </span><span>switch</span><span>(result[i]){</span></span>
<span><span>                        </span><span>case</span><span> </span><span>'А'</span><span>..</span><span>'Я'</span><span>, </span><span>'а'</span><span>..</span><span>'я'</span><span>: </span><span>return</span><span> Error(playerid, </span><span>"Нельзя использовать русские буквы!"</span><span>);</span></span>
<span><span>                        </span><span>case</span><span> </span><span>'\''</span><span>, </span><span>'`'</span><span>: </span><span>return</span><span> Error(playerid, </span><span>"Недопустимые символы"</span><span>);}</span></span>
<span><span>                </span><span>if</span><span>(strlen(result) &gt; </span><span>32</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Максимальное кол-во букв 32"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> select[</span><span>144</span><span>];</span></span>
<span><span>                mysql_format(connects, select, </span><span>sizeof</span><span>(select), </span><span>"SELECT * FROM `family` WHERE `fName` = '%s'"</span><span>, result);</span></span>
<span><span>                mysql_function_query(connects, sel</span><span>ect, </span><span>true</span><span>, </span><span>"CheckFamNameCreate"</span><span>, </span><span>"ds"</span><span>, playerid,result);</span></span>
<span><span>                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/finvite"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>            </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вам недоступна эта функция!"</span><span>);</span></span>
<span><span>                </span><span>else</span><span> </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwn</span><span>er], PlayerInfo[playerid][pNames], </span><span>true</span><span>) &amp;&amp; \</span></span>
<span><span>                    </span><span>strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], </span><span>PlayerInfo[playerid][pNames], </span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"Вы не лидер/зам. семьи!"</span><span>);</span></span>
<span><span>        tmp = strcharsplit(cmdtext, idx);</span></span>
<span><span>                </span><span>if</span><span>(!strlen(tmp)) </span><span>return</span><span> Use(playerid, </span><span>"/finvite [id]"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> playa = ReturnUser(tmp), form[</span><span>144</span><span>], fid = PlayerInfo[playerid][pFamID];</span></span>
<span><span>                </span><span>if</span><span>(!IsPlayerConnected(playa) || gPlayerLogged[playa] </span><span>== </span><span>0</span><span> || playa == INVALID_PLAYER_ID) </span><span>return</span><span> Error(playerid, </span><span>"Неверный ID игрока"</span><span>);</span></span>
<span><span>                </span><span>if</span><span>(PlayerInfo[playa][pFamID] == </span><span>PlayerInfo[playerid][pFamID]) </span><span>return</span><span> Error(playerid, </span><span>"Игрок уже состоит в вашей семье!"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> Float:px,Float:py,Float:pz; GetPlayerPos(playa,px</span><span>,py,pz);</span></span>
<span><span>                </span><span>if</span><span>(!PlayerToPoint(</span><span>3</span><span>,playerid,px,py,pz)) </span><span>return</span><span> Error(playerid, </span><span>"Вы далекто от игрока!"</span><span>);</span></span>
<span><span>                </span><span>if</span><span>(PlayerInfo[playa][pFamID] != </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Игрок уже состоит в другой семье!"</span><span>);</span></span>
<span><span>                format(form, </span><span>sizeof</span><span>(form),</span><span>"{FFFFFF}%s[%d] предлагает вас вступить в семью%s </span><span>%s"</span><span>, Nick(playerid), playerid, </span><span>FamColors[FamInfo[fid][fColor]], </span><span>FamInfo[fid][fName]);</span></span>
<span><span>                SPD(playa, </span><span>16666</span><span>, DIALOG_STYLE_MSGBOX, </span><span>"Приглашение"</span><span>, form, </span><span>"Да"</span><span>, </span><span>"Нет"</span><span>);</span></span>
<span><span>                SetPVarInt(playa, </span><span>"ifamidl"</span><span>, playerid);</span></span>
<span><span>                SetPVarInt(playa, </span><span>"ifamid"</span><span>, fid);</span></span>
<span><span>                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/funinvite"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вам недоступна эта функция!"</span><span>);</span></span>
<span><span>            </span><span>else</span><span> </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwn</span><span>er], PlayerInfo[playerid][pNames], </span><span>true</span><span>) &amp;&amp; \</span></span>
<span><span>                    </span><span>strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], </span><span>PlayerInfo[playerid][pNames], </span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"Вы не лидер/зам. семьи!"</span><span>);</span></span>
<span><span>        tmp = strcharsplit(cmdtext, idx);</span></span>
<span><span>                </span><span>if</span><span>(!strlen(tmp)) </span><span>return</span><span> Use(playerid, </span><span>"/funinvite [id]"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> playa = ReturnUser(tmp), form[</span><span>144</span><span>];</span></span>
<span><span>                </span><span>if</span><span>(!IsPlayerConnected(playa) || gPlayerLogged[playa] </span><span>== </span><span>0</span><span> || playa == INVALID_PLAYER_ID) </span><span>return</span><span> Error(playerid, </span><span>"Неверный ID игрока"</span><span>);</span></span>
<span><span>                </span><span>if</span><span>(PlayerInfo[playa][pFamID] != </span><span>PlayerInfo[playerid][pFamID]) </span><span>return</span><span> Error(playerid, </span><span>"Игрок не состоит в вашей семье!"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> length = strlen(cmdtext);</span></span>
<span><span>                </span><span>while</span><span> ((idx &lt; length) &amp;&amp; (cmdtext[idx] &lt;= </span><span>' '</span><span>))</span></span>
<span><span>                {</span></span>
<span><span>                        idx++;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>new</span><span> offset = idx;</span></span>
<span><span>                </span><span>new</span><span> result[</span><span>128</span><span>];</span></span>
<span><span>                </span><span>while</span><span> ((idx &lt; length) &amp;&amp; ((idx - offset) &lt; (</span><span>sizeof</span><span>(result) - </span><span>1</span><span>)))</span></span>
<span><span>                {</span></span>
<span><span>                        result[idx - offset] = cmd</span><span>text[idx];</span></span>
<span><span>                        idx++;</span></span>
<span><span>                }</span></span>
<span><span>                result[idx - offset] = EOS;</span></span>
<span><span>                </span><span>if</span><span>(!strlen(result)) </span><span>return</span><span> Use(playerid, </span><span>"/funinvite [id] [причина]"</span><span>);</span></span>
<span><span>                </span><span>if</span><span>(playa == playerid) </span><span>return</span><span> Use(playerid, </span><span>"/fleave"</span><span>);</span></span>
<span><span>                </span><span>else</span><span> </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwn</span><span>er], result, </span><span>true</span><span>) == </span><span>0</span><span> || \</span></span>
<span><span>                    </span><span>strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], </span><span>result, </span><span>true</span><span>) == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Нельзя выгнать лидера/зама!"</span><span>);</span></span>
<span><span>                SendMes(playerid, </span><span>0xFFFFFFFF</span><span>, </span><span>"Вы выгнали %s[%d] из семьи по причине: %s"</span><span>,Nick(playa), playa, result);</span></span>
<span><span>                SendMes(playa, </span><span>0xFFFFFFFF</span><span>, </span><span>"%s[%d] выгнал ваз из семьи по причине: %s"</span><span>, Nick(playerid), playerid, result);</span></span>
<span><span>                format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] выгнал из семьи </span><span>%s[%d] по причине: %s"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                                                  </span><span>             FamColors[FamInfo[PlayerInfo[playerid</span><span>][pFamID]][fCColor]],Nick(playerid),playerid,Nick(</span><span>playa),playa,result);</span></span>
<span><span>                SCMFam(PlayerInfo[playerid][pFamID</span><span>],</span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>                PlayerInfo[playa][pFamID] = </span><span>0</span><span>;</span></span>
<span><span>                Delete3DTextLabel(famd[playerid]);</span></span>
<span><span>                --FamInfo[PlayerInfo[playerid][pFa</span><span>mID]][fMembers];</span></span>
<span><span>                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/fleave"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>            </span><span>new</span><span> form[</span><span>144</span><span>];</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вам и так не состоите в семье!"</span><span>);</span></span>
<span><span>        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],Nick(playerid),</span><span>true</span><span>) == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вы не можете покинуть семью, так как её </span><span>создатель!"</span><span>);</span></span>
<span><span>        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam</span><span>],Nick(playerid),</span><span>true</span><span>) == </span><span>0</span><span>) strmid(FamInfo[PlayerInfo[playerid][pFamID]][fZa</span><span>m],</span><span>"None"</span><span>,</span><span>0</span><span>,strlen(</span><span>"None"</span><span>),</span><span>32</span><span>);</span></span>
<span><span>        SCM(playerid, </span><span>0xFFFFFFFF</span><span>,</span><span>"Вы успешно покинули семью!"</span><span>);</span></span>
<span><span>        format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] покинул семью"</span><span>,FamInfo[PlayerInfo[playerid][pFamID]][fColor],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                              FamInfo[PlayerInfo[p</span><span>layerid][pFamID]][fCColor],Nick(playerid),playerid</span><span>);</span></span>
<span><span>        SCMFam(PlayerInfo[playerid][pFamID],</span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>        --FamInfo[PlayerInfo[playerid][pFamID]][fM</span><span>embers];</span></span>
<span><span>                PlayerInfo[playerid][pFamID] = </span><span>0</span><span>;</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/fampanel"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span> || strcmp(cmd, </span><span>"/fp"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вам недоступна эта функция!"</span><span>);</span></span>
<span><span>            </span><span>else</span><span> </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwn</span><span>er], PlayerInfo[playerid][pNames], </span><span>true</span><span>) &amp;&amp; \</span></span>
<span><span>                    </span><span>strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam], </span><span>PlayerInfo[playerid][pNames], </span><span>true</span><span>)) </span><span>return</span><span> Error(playerid, </span><span>"Вы не лидер/зам. семьи!"</span><span>);</span></span>
<span><span>                SPD(playerid, </span><span>16667</span><span>, DIALOG_STYLE_LIST, </span><span>"Меню семью"</span><span>, </span><span>"Поставить заместителя\nСнять текущего </span><span>заместителя\nИзменить название семьи\nВыгнать </span><span>человека [Offline]\nСменить цвет семьи\nСменить </span><span>цвет чата"</span><span>, </span><span>"Выбрать"</span><span>,</span><span>"Отмена"</span><span>);</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/faminfo"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span> || strcmp(cmd, </span><span>"/fi"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вы не состоите в семье!"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> finfos[</span><span>512</span><span>], fid = PlayerInfo[playerid][pFamID];</span></span>
<span><span>        format(finfos,</span><span>sizeof</span><span>(finfos),</span><span>"\n\t%s%s{ffffff}\n\n\tЛидер: %s\n\tЗам: </span><span>%s\n\n\tДата создания: %s\n\tЧисленность семьи: %d </span><span>чел."</span><span>,\</span></span>
<span><span>                FamColors[FamInfo[fid][fColor]],Fa</span><span>mInfo[fid][fName],FamInfo[fid][fOwner],FamInfo[fid</span><span>][fZam],FamInfo[fid][fCDate],FamInfo[fid][fMembers</span><span>]);</span></span>
<span><span>                SPD(playerid, </span><span>0</span><span>, DIALOG_STYLE_MSGBOX,</span><span>"Информация:"</span><span>, finfos, </span><span>"Ок"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/fmembers"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span> || strcmp(cmd, </span><span>"/fonline"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вы не состоите в семье!"</span><span>);</span></span>
<span><span>                </span><span>new</span><span> finfon[</span><span>32</span><span>],finfos[</span><span>512</span><span>], fid = PlayerInfo[playerid][pFamID], m;</span></span>
<span><span>                </span><span>for</span><span>(</span><span>new</span><span> i = </span><span>0</span><span>; i &lt; MAX_PLAYERS; i++)</span></span>
<span><span>                {</span></span>
<span><span>                    </span><span>if</span><span>(!IsPlayerConnected(i) || i == INVALID_PLAYER_ID) </span><span>continue</span><span>;</span></span>
<span><span>                        </span><span>if</span><span>(PlayerInfo[i][pFamID] != fid) </span><span>continue</span><span>;</span></span>
<span><span>                        </span><span>if</span><span>(strcmp(FamInfo[fid][fOwner],Nick(i),</span><span>true</span><span>) == </span><span>0</span><span>) format(finfos,</span><span>sizeof</span><span>(finfos), </span><span>"%sЛидер: %s[%d]\n"</span><span>,finfos,Nick(i),i);</span></span>
<span><span>                        </span><span>else</span><span> </span><span>if</span><span>(strcmp(FamInfo[fid][fZam],Nick(i),</span><span>true</span><span>) == </span><span>0</span><span>) format(finfos,</span><span>sizeof</span><span>(finfos), </span><span>"%sЗам.: %s[%d]\n"</span><span>,finfos,Nick(i),i);</span></span>
<span><span>                        </span><span>else</span><span> format(finfos,</span><span>sizeof</span><span>(finfos), </span><span>"%sУчастник: %s[%d]\n"</span><span>,finfos,Nick(i),i);</span></span>
<span><span>                        m++;</span></span>
<span><span>                }</span></span>
<span><span>                format(finfos, </span><span>sizeof</span><span>(finfos), </span><span>"%s\n{669999}Всего в сети: %d чел."</span><span>, finfos,m);</span></span>
<span><span>        format(finfon, </span><span>sizeof</span><span>(finfon), </span><span>"%s****ы семьи ONline"</span><span>,FamInfo[fid][fColor]);</span></span>
<span><span>        SPD(playerid, </span><span>0</span><span>, DIALOG_STYLE_MSGBOX,finfon, finfos, </span><span>"Ок"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>(strcmp(cmd, </span><span>"/fc"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span> || strcmp(cmd, </span><span>"/k"</span><span>, </span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>        {</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Вы не состоите в семье!"</span><span>);</span></span>
<span><span>        </span><span>new</span><span> length = strlen(cmdtext);</span></span>
<span><span>                </span><span>while</span><span> ((idx &lt; length) &amp;&amp; (cmdtext[idx] &lt;= </span><span>' '</span><span>))</span></span>
<span><span>                {</span></span>
<span><span>                        idx++;</span></span>
<span><span>                }</span></span>
<span><span>                </span><span>new</span><span> offset = idx;</span></span>
<span><span>                </span><span>new</span><span> result[</span><span>128</span><span>];</span></span>
<span><span>                </span><span>while</span><span> ((idx &lt; length) &amp;&amp; ((idx - offset) &lt; (</span><span>sizeof</span><span>(result) - </span><span>1</span><span>)))</span></span>
<span><span>                {</span></span>
<span><span>                        result[idx - offset] = cmd</span><span>text[idx];</span></span>
<span><span>                        idx++;</span></span>
<span><span>                }</span></span>
<span><span>                result[idx - offset] = EOS;</span></span>
<span><span>                </span><span>if</span><span>(!strlen(result)) </span><span>return</span><span> SendClientMessage(playerid, COLOR_GREEN, </span><span>"Вводите: /fc [text] или /k [text]"</span><span>);</span></span>
<span><span>        </span><span>for</span><span>(</span><span>new</span><span> k = </span><span>0</span><span>; k &lt; MAX_PLAYERS; k++)</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[playerid][pFamID] == PlayerInfo[k][pFa</span><span>mID]) SendMes(k, </span><span>0xFFFFFFFF</span><span>, </span><span>"%s[%s]{FFFFFF} %s[%d]: %s%s"</span><span>, FamColors[FamInfo[PlayerInfo[playerid][pFamID]][</span><span>fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fNa</span><span>me], \</span></span>
<span><span>                                                  </span><span>                                                  </span><span>                     PlayerInfo[playerid][pNames],</span><span>playerid,FamColors[FamInfo[PlayerInfo[playerid][pF</span><span>amID]][fCColor]],result);</span></span>
<span><span>                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>        }</span><span>// --------------------------- СИСТЕМА СЕМЕЙ </span><span>-------------------------- END</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	<span style="color:#292929;">Оставшиеся стоки и паблики "искусственного" создания:</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="stock SCMFam(famid,color,msg[])
{
        for(new fp; fp &lt; MAX_PLAYERS; fp++)
        if(PlayerInfo[fp][pFamID] == famid) SCM(fp,color,msg);
}

public CheckAkkvign(playerid, inputtext[])
{
        static rows, fields;
        cache_get_data(rows, fields);
        if(!rows) return Error(playerid, &quot;Данный аккаунт не найден!&quot;);
        new /*rows, fields,*/tmp[4];
        cache_get_field_content(0, &quot;pFamID&quot;, tmp);
                        if(strval(tmp) != PlayerInfo[playerid][pFamID]) return SendMes(playerid,COLOR_GREY,&quot;[ MySql ] Аккаунт %s не является вашим членом семьи.&quot;,inputtext);
                        for(new ip; ip &lt; MAX_PLAYERS; ip++)
                        if(strcmp(PlayerInfo[playerid][pNames], inputtext, true) == 0) return Error(playerid, &quot;Игрок в сети!&quot;);
                        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],inputtext, true) == 0) return Error(playerid, &quot;Невозможно выгнать создателя семьи&quot;);
                        if(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam],inputtext,true) == 0)
                        {
                                strmid(FamInfo[PlayerInfo[playerid][pFamID]][fZam],&quot;None&quot;,0,strlen(&quot;None&quot;),32);
                        new form[144];
                                format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] снял с поста зама: %s&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                                               FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(playerid),playerid,inputtext);
                                SCMFam(PlayerInfo[playerid][pFamID], 0xFFFFFFFF, form);
                        }
                        new mysql_query[144];
                        mysql_format(connects, mysql_query, sizeof(mysql_query), &quot;UPDATE `accounts` SET `pFamID` = '0' WHERE `Fastss` = '%s'&quot;, inputtext);
                        mysql_function_query(connects, mysql_query, false, &quot;&quot;, &quot;&quot;);
                        SendMes(playerid, COLOR_GREY, &quot;[ MySql ] Аккаунт %s успешно выгнан из семьи.&quot;, inputtext);
                        --FamInfo[PlayerInfo[playerid][pFamID]][fMembers]
;
                        SaveFams();
        return true;
}
public CheckFamNameCreate(playerid, result[])
{
        static rows, fields;
        cache_get_data(rows, fields);
        if(rows) return Error(playerid, &quot;Данное имя уже занято!&quot;);
                SendMes(playerid, COLOR_YELLOW, &quot;Вы успешно создали семью \&quot;%s\&quot;&quot;,result);
                new cdf[32],yr,mh,dy, insert[256];
                getdate(yr,mh,dy);
                format(cdf, sizeof(cdf), &quot;%d-%d-%d&quot;, dy,mh,yr);
                new nns[32] = &quot;None&quot;;
                mysql_format(connects, insert, sizeof(insert), &quot;INSERT INTO `family` (`fName`, `fOwner`, `fZam`, `fColor`, `fCColor`, `fMembers`, `fCDate`) VALUES ('%s','%s', '%s', '7', '7', '1', '%s')&quot;,result,PlayerInfo[playerid][pNames],nns,cdf);

                mysql_function_query(connects, insert, false, &quot;&quot;, &quot;&quot;);
                mysql_format(connects, insert, sizeof(insert), &quot;UPDATE `accounts` SET `pFamID` = (SELECT fID FROM `family` WHERE fName = '%s' LIMIT 1) WHERE Fastss = '%s'&quot;,result,PlayerInfo[playerid][pNames]);
                mysql_function_query(connects, insert, false, &quot;&quot;, &quot;&quot;);
                famamount++;
                PlayerInfo[playerid][pFamID] = famamount;
                FamInfo[famamount][fID] = famamount;
                strmid(FamInfo[famamount][fName], result, 0, strlen(result), 255);
                strmid(FamInfo[famamount][fOwner], PlayerInfo[playerid][pNames], 0, strlen(PlayerInfo[playerid][pNames]), 255);
                strmid(FamInfo[famamount][fZam], &quot;None&quot;, 0, strlen(&quot;None&quot;), 32);
                FamInfo[famamount][fColor] = 7;
                FamInfo[famamount][fCColor] = 7;
                FamInfo[famamount][fMembers] = 1;
                strmid(FamInfo[famamount][fCDate], cdf, 0, strlen(cdf), 255);
                format(insert, sizeof(insert), &quot;%s%s&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]], result);
                famd[playerid] = Create3DTextLabel(insert,0xFFA0A0D0,0.0,0.0,1500.0,30.0,0,1);
                Attach3DTextLabelToPlayer(famd[playerid], playerid, 0.0, 0.0, 0.7);
        return true;
}
public CheckFamNameNEW(playerid, inputtext[])
{
        static rows, fields;
        cache_get_data(rows, fields);
        if(rows) return Error(playerid, &quot;Данное имя уже занято!&quot;);
        strmid(FamInfo[PlayerInfo[playerid][pFamID]][fName],inputtext,0,strlen(inputtext),32);
        new form[144];
        format(form, sizeof(form), &quot;%s[%s]{ffffff} NEWS: %s%s[%d] сменил название семьи&quot;,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], \
                                                                                         FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nick(playerid),playerid);
        SCMFam(PlayerInfo[playerid][pFamID], 0xFFFFFFFF, form);
        return true;
}">

<span><span>stock SCMFam(famid,color,msg[])</span></span>
<span><span>{</span></span>
<span><span>        </span><span>for</span><span>(</span><span>new</span><span> fp; fp &lt; MAX_PLAYERS; fp++)</span></span>
<span><span>        </span><span>if</span><span>(PlayerInfo[fp][pFamID] == famid) SCM(fp,color,msg</span><span>);</span></span>
<span><span>}</span></span>

<span><span>public</span><span> CheckAkkvign(playerid, inputtext[])</span></span>
<span><span>{</span></span>
<span><span>        </span><span>static</span><span> rows, fields;</span></span>
<span><span>        cache_get_data(rows, fields);</span></span>
<span><span>        </span><span>if</span><span>(!rows) </span><span>return</span><span> Error(playerid, </span><span>"Данный аккаунт не найден!"</span><span>);</span></span>
<span><span>        </span><span>new</span><span> </span><span>/*rows, fields,*/</span><span>tmp[</span><span>4</span><span>];</span></span>
<span><span>        cache_get_field_content(</span><span>0</span><span>, </span><span>"pFamID"</span><span>, tmp);</span></span>
<span><span>                        </span><span>if</span><span>(strval(tmp) != PlayerInfo[playerid][pFamID]) </span><span>return</span><span> SendMes(playerid,COLOR_GREY,</span><span>"[ MySql ] Аккаунт %s не является вашим членом </span><span>семьи."</span><span>,inputtext);</span></span>
<span><span>                        </span><span>for</span><span>(</span><span>new</span><span> ip; ip &lt; MAX_PLAYERS; ip++)</span></span>
<span><span>                        </span><span>if</span><span>(strcmp(PlayerInfo[playerid][pNames], inputtext, </span><span>true</span><span>) == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Игрок в сети!"</span><span>);</span></span>
<span><span>                        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fOwner],inputtext, </span><span>true</span><span>) == </span><span>0</span><span>) </span><span>return</span><span> Error(playerid, </span><span>"Невозможно выгнать создателя семьи"</span><span>);</span></span>
<span><span>                        </span><span>if</span><span>(strcmp(FamInfo[PlayerInfo[playerid][pFamID]][fZam</span><span>],inputtext,</span><span>true</span><span>) == </span><span>0</span><span>)</span></span>
<span><span>                        {</span></span>
<span><span>                                strmid(FamInfo[Pla</span><span>yerInfo[playerid][pFamID]][fZam],</span><span>"None"</span><span>,</span><span>0</span><span>,strlen(</span><span>"None"</span><span>),</span><span>32</span><span>);</span></span>
<span><span>                        </span><span>new</span><span> form[</span><span>144</span><span>];</span></span>
<span><span>                                format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] снял с поста зама: </span><span>%s"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                                                  </span><span>           FamColors[FamInfo[PlayerInfo[playerid][</span><span>pFamID]][fCColor]],Nick(playerid),playerid,inputte</span><span>xt);</span></span>
<span><span>                                SCMFam(PlayerInfo[</span><span>playerid][pFamID], </span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>                        }</span></span>
<span><span>                        </span><span>new</span><span> mysql_query[</span><span>144</span><span>];</span></span>
<span><span>                        mysql_format(connects, mys</span><span>ql_query, </span><span>sizeof</span><span>(mysql_query), </span><span>"UPDATE `accounts` SET `pFamID` = '0' WHERE `Fasts</span><span>s` = '%s'"</span><span>, inputtext);</span></span>
<span><span>                        mysql_function_query(conne</span><span>cts, mysql_query, </span><span>false</span><span>, </span><span>""</span><span>, </span><span>""</span><span>);</span></span>
<span><span>                        SendMes(playerid, </span><span>COLOR_GREY, </span><span>"[ MySql ] Аккаунт %s успешно выгнан из семьи."</span><span>, inputtext);</span></span>
<span><span>                        --FamInfo[PlayerInfo[playe</span><span>rid][pFamID]][fMembers]</span></span>
<span><span>;</span></span>
<span><span>                        SaveFams();</span></span>
<span><span>        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>}</span></span>
<span><span>public</span><span> CheckFamNameCreate(playerid, result[])</span></span>
<span><span>{</span></span>
<span><span>        </span><span>static</span><span> rows, fields;</span></span>
<span><span>        cache_get_data(rows, fields);</span></span>
<span><span>        </span><span>if</span><span>(rows) </span><span>return</span><span> Error(playerid, </span><span>"Данное имя уже занято!"</span><span>);</span></span>
<span><span>                SendMes(playerid, COLOR_YELLOW, </span><span>"Вы успешно создали семью \"%s\""</span><span>,result);</span></span>
<span><span>                </span><span>new</span><span> cdf[</span><span>32</span><span>],yr,mh,dy, insert[</span><span>256</span><span>];</span></span>
<span><span>                getdate(yr,mh,dy);</span></span>
<span><span>                format(cdf, </span><span>sizeof</span><span>(cdf), </span><span>"%d-%d-%d"</span><span>, dy,mh,yr);</span></span>
<span><span>                </span><span>new</span><span> nns[</span><span>32</span><span>] = </span><span>"None"</span><span>;</span></span>
<span><span>                mysql_format(connects, insert, </span><span>sizeof</span><span>(insert), </span><span>"INSERT INTO `family` (`fName`, `fOwner`, `fZam`, </span><span>`fColor`, `fCColor`, `fMembers`, `fCDate`) VALUES </span><span>('%s','%s', '%s', '7', '7', '1', '%s')"</span><span>,result,PlayerInfo[playerid][pNames],nns,cdf);</span></span>

<span><span>                mysql_function_query(connects, ins</span><span>ert, </span><span>false</span><span>, </span><span>""</span><span>, </span><span>""</span><span>);</span></span>
<span><span>                mysql_format(connects, insert, </span><span>sizeof</span><span>(insert), </span><span>"UPDATE `accounts` SET `pFamID` = (SELECT fID FROM</span><span> `family` WHERE fName = '%s' LIMIT 1) WHERE Fastss</span><span> = '%s'"</span><span>,result,PlayerInfo[playerid][pNames]);</span></span>
<span><span>                mysql_function_query(connects, ins</span><span>ert, </span><span>false</span><span>, </span><span>""</span><span>, </span><span>""</span><span>);</span></span>
<span><span>                famamount++;</span></span>
<span><span>                PlayerInfo[playerid][pFamID] = fam</span><span>amount;</span></span>
<span><span>                FamInfo[famamount][fID] = famamoun</span><span>t;</span></span>
<span><span>                strmid(FamInfo[famamount][fName], </span><span>result, </span><span>0</span><span>, strlen(result), </span><span>255</span><span>);</span></span>
<span><span>                strmid(FamInfo[famamount][fOwner],</span><span> PlayerInfo[playerid][pNames], </span><span>0</span><span>, strlen(PlayerInfo[playerid][pNames]), </span><span>255</span><span>);</span></span>
<span><span>                strmid(FamInfo[famamount][fZam], </span><span>"None"</span><span>, </span><span>0</span><span>, strlen(</span><span>"None"</span><span>), </span><span>32</span><span>);</span></span>
<span><span>                FamInfo[famamount][fColor] = </span><span>7</span><span>;</span></span>
<span><span>                FamInfo[famamount][fCColor] = </span><span>7</span><span>;</span></span>
<span><span>                FamInfo[famamount][fMembers] = </span><span>1</span><span>;</span></span>
<span><span>                strmid(FamInfo[famamount][fCDate],</span><span> cdf, </span><span>0</span><span>, strlen(cdf), </span><span>255</span><span>);</span></span>
<span><span>                format(insert, </span><span>sizeof</span><span>(insert), </span><span>"%s%s"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][f</span><span>Color]], result);</span></span>
<span><span>                famd[playerid] = Create3DTextLabel</span><span>(insert,</span><span>0xFFA0A0D0</span><span>,</span><span>0.0</span><span>,</span><span>0.0</span><span>,</span><span>1500.0</span><span>,</span><span>30.0</span><span>,</span><span>0</span><span>,</span><span>1</span><span>);</span></span>
<span><span>                Attach3DTextLabelToPlayer(famd[pla</span><span>yerid], playerid, </span><span>0.0</span><span>, </span><span>0.0</span><span>, </span><span>0.7</span><span>);</span></span>
<span><span>        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>}</span></span>
<span><span>public</span><span> CheckFamNameNEW(playerid, inputtext[])</span></span>
<span><span>{</span></span>
<span><span>        </span><span>static</span><span> rows, fields;</span></span>
<span><span>        cache_get_data(rows, fields);</span></span>
<span><span>        </span><span>if</span><span>(rows) </span><span>return</span><span> Error(playerid, </span><span>"Данное имя уже занято!"</span><span>);</span></span>
<span><span>        strmid(FamInfo[PlayerInfo[playerid][pFamID</span><span>]][fName],inputtext,</span><span>0</span><span>,strlen(inputtext),</span><span>32</span><span>);</span></span>
<span><span>        </span><span>new</span><span> form[</span><span>144</span><span>];</span></span>
<span><span>        format(form, </span><span>sizeof</span><span>(form), </span><span>"%s[%s]{ffffff} NEWS: %s%s[%d] сменил название </span><span>семьи"</span><span>,FamColors[FamInfo[PlayerInfo[playerid][pFamID]][fColor]],FamInfo[PlayerInfo[playerid][pFamID]][fName], </span><span>\</span></span>
<span><span>                                                  </span><span>                                       FamColors[F</span><span>amInfo[PlayerInfo[playerid][pFamID]][fCColor]],Nic</span><span>k(playerid),playerid);</span></span>
<span><span>        SCMFam(PlayerInfo[playerid][pFamID], </span><span>0xFFFFFFFF</span><span>, form);</span></span>
<span><span>        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	<span style="color:#292929;">И последнее - загрузка и выгрузка данных БД:</span>
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OtherLoad()
{
    publics:OnLoadMaterialsCallback()
        {
                new rows, fields, vresult[21];
                cache_get_data(rows, fields);
                //
                //
                cache_get_field_content(0, &quot;famamount&quot;, vresult); famamount = strval(vresult);
                return true;
        }
}

stock SaveMaterials()
{
        new mysql_query[512];
        format(mysql_query, sizeof(mysql_query), &quot;UPDATE `other` SET  `famamount` = '%d'&quot;, famamount);
        mysql_function_query(connects, mysql_query, false, &quot;&quot;, &quot;&quot;);
        return true;
}

public LoadFams()
{
        static rows, fields;
        cache_get_data(rows, fields);
        new temp[64], i = 1, fi = 0;
        if(rows)
        {
                for(new he = 0; he &lt; rows; he++)
                {
                        cache_get_row(he, 0, temp), FamInfo[i][fID] = strval(temp);
                        cache_get_row(he, 1, temp), strmid(FamInfo[i][fName], temp, 0, strlen(temp), 32);
                        cache_get_row(he, 2, temp), strmid(FamInfo[i][fOwner], temp, 0, strlen(temp), 32);
                        cache_get_row(he, 3, temp), strmid(FamInfo[i][fZam], temp, 0, strlen(temp), 32);
                        cache_get_row(he, 4, temp), FamInfo[i][fColor] = strval(temp);
                        cache_get_row(he, 5, temp), FamInfo[i][fCColor] = strval(temp);
                        cache_get_row(he, 6, temp), FamInfo[i][fMembers] = strval(temp);
                        cache_get_row(he, 7, temp), strmid(FamInfo[i][fCDate], temp, 0, strlen(temp), 32);
                        i++;
                        fi++;
                }
                printf(&quot;Фамы загружены - %d&quot;, fi);
        }
        else print(&quot;Фамы не загружены&quot;);
        return true;
}
stock SaveFams()
{
        for(new houseid = 1; houseid &lt; sizeof(FamInfo); houseid++)
        {
                new update[600];
                update = &quot;UPDATE `family` SET &quot;;
                acc_str_strcat(update, sizeof(update), &quot;fName&quot;, FamInfo[houseid][fName]);
                acc_str_strcat(update, sizeof(update), &quot;fOwner&quot;, FamInfo[houseid][fOwner]);
                acc_str_strcat(update, sizeof(update), &quot;fZam&quot;, FamInfo[houseid][fZam]);
                acc_int_strcat(update, sizeof(update), &quot;fColor&quot;, FamInfo[houseid][fColor]);
                acc_int_strcat(update, sizeof(update), &quot;fCColor&quot;, FamInfo[houseid][fCColor]);
                acc_int_strcat(update, sizeof(update), &quot;fMembers&quot;, FamInfo[houseid][fMembers]);
                acc_str_strcat(update, sizeof(update), &quot;fCDate&quot;, FamInfo[houseid][fCDate]);
                strdel(update, strlen(update)-1, strlen(update));
                format(stringer,sizeof(stringer),&quot; WHERE `fID` = '%d'&quot;,houseid),strcat(update, stringer);
                mysql_function_query(connects, update, false, &quot;&quot;, &quot;&quot;);
        }
        return true;
}">

<span><span>public</span><span> OtherLoad()</span></span>
<span><span>{</span></span>
<span><span>    publics:OnLoadMaterialsCallback()</span></span>
<span><span>        {</span></span>
<span><span>                </span><span>new</span><span> rows, fields, vresult[</span><span>21</span><span>];</span></span>
<span><span>                cache_get_data(rows, fields);</span></span>
<span><span>                </span><span>//</span></span>
<span><span>                </span><span>//</span></span>
<span><span>                cache_get_field_content(</span><span>0</span><span>, </span><span>"famamount"</span><span>, vresult); famamount = strval(vresult);</span></span>
<span><span>                </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>        }</span></span>
<span><span>}</span></span>

<span><span>stock SaveMaterials()</span></span>
<span><span>{</span></span>
<span><span>        </span><span>new</span><span> mysql_query[</span><span>512</span><span>];</span></span>
<span><span>        format(mysql_query, </span><span>sizeof</span><span>(mysql_query), </span><span>"UPDATE `other` SET  `famamount` = '%d'"</span><span>, famamount);</span></span>
<span><span>        mysql_function_query(connects, mysql_query</span><span>, </span><span>false</span><span>, </span><span>""</span><span>, </span><span>""</span><span>);</span></span>
<span><span>        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>}</span></span>

<span><span>public</span><span> LoadFams()</span></span>
<span><span>{</span></span>
<span><span>        </span><span>static</span><span> rows, fields;</span></span>
<span><span>        cache_get_data(rows, fields);</span></span>
<span><span>        </span><span>new</span><span> temp[</span><span>64</span><span>], i = </span><span>1</span><span>, fi = </span><span>0</span><span>;</span></span>
<span><span>        </span><span>if</span><span>(rows)</span></span>
<span><span>        {</span></span>
<span><span>                </span><span>for</span><span>(</span><span>new</span><span> he = </span><span>0</span><span>; he &lt; rows; he++)</span></span>
<span><span>                {</span></span>
<span><span>                        cache_get_row(he, </span><span>0</span><span>, temp), FamInfo[i][fID] = strval(temp);</span></span>
<span><span>                        cache_get_row(he, </span><span>1</span><span>, temp), strmid(FamInfo[i][fName], temp, </span><span>0</span><span>, strlen(temp), </span><span>32</span><span>);</span></span>
<span><span>                        cache_get_row(he, </span><span>2</span><span>, temp), strmid(FamInfo[i][fOwner], temp, </span><span>0</span><span>, strlen(temp), </span><span>32</span><span>);</span></span>
<span><span>                        cache_get_row(he, </span><span>3</span><span>, temp), strmid(FamInfo[i][fZam], temp, </span><span>0</span><span>, strlen(temp), </span><span>32</span><span>);</span></span>
<span><span>                        cache_get_row(he, </span><span>4</span><span>, temp), FamInfo[i][fColor] = strval(temp);</span></span>
<span><span>                        cache_get_row(he, </span><span>5</span><span>, temp), FamInfo[i][fCColor] = strval(temp);</span></span>
<span><span>                        cache_get_row(he, </span><span>6</span><span>, temp), FamInfo[i][fMembers] = strval(temp);</span></span>
<span><span>                        cache_get_row(he, </span><span>7</span><span>, temp), strmid(FamInfo[i][fCDate], temp, </span><span>0</span><span>, strlen(temp), </span><span>32</span><span>);</span></span>
<span><span>                        i++;</span></span>
<span><span>                        fi++;</span></span>
<span><span>                }</span></span>
<span><span>                printf(</span><span>"Фамы загружены - %d"</span><span>, fi);</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>else</span><span> print(</span><span>"Фамы не загружены"</span><span>);</span></span>
<span><span>        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>}</span></span>
<span><span>stock SaveFams()</span></span>
<span><span>{</span></span>
<span><span>        </span><span>for</span><span>(</span><span>new</span><span> houseid = </span><span>1</span><span>; houseid &lt; </span><span>sizeof</span><span>(FamInfo); houseid++)</span></span>
<span><span>        {</span></span>
<span><span>                </span><span>new</span><span> update[</span><span>600</span><span>];</span></span>
<span><span>                update = </span><span>"UPDATE `family` SET "</span><span>;</span></span>
<span><span>                acc_str_strcat(update, </span><span>sizeof</span><span>(update), </span><span>"fName"</span><span>, FamInfo[houseid][fName]);</span></span>
<span><span>                acc_str_strcat(update, </span><span>sizeof</span><span>(update), </span><span>"fOwner"</span><span>, FamInfo[houseid][fOwner]);</span></span>
<span><span>                acc_str_strcat(update, </span><span>sizeof</span><span>(update), </span><span>"fZam"</span><span>, FamInfo[houseid][fZam]);</span></span>
<span><span>                acc_int_strcat(update, </span><span>sizeof</span><span>(update), </span><span>"fColor"</span><span>, FamInfo[houseid][fColor]);</span></span>
<span><span>                acc_int_strcat(update, </span><span>sizeof</span><span>(update), </span><span>"fCColor"</span><span>, FamInfo[houseid][fCColor]);</span></span>
<span><span>                acc_int_strcat(update, </span><span>sizeof</span><span>(update), </span><span>"fMembers"</span><span>, FamInfo[houseid][fMembers]);</span></span>
<span><span>                acc_str_strcat(update, </span><span>sizeof</span><span>(update), </span><span>"fCDate"</span><span>, FamInfo[houseid][fCDate]);</span></span>
<span><span>                strdel(update, strlen(update)-</span><span>1</span><span>, strlen(update));</span></span>
<span><span>                format(stringer,</span><span>sizeof</span><span>(stringer),</span><span>" WHERE `fID` = '%d'"</span><span>,houseid),strcat(update, stringer);</span></span>
<span><span>                mysql_function_query(connects, upd</span><span>ate, </span><span>false</span><span>, </span><span>""</span><span>, </span><span>""</span><span>);</span></span>
<span><span>        }</span></span>
<span><span>        </span><span>return</span><span> </span><span>true</span><span>;</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	 
</p>
]]></description><guid isPermaLink="false">6036</guid><pubDate>Mon, 17 Jan 2022 20:42:49 +0000</pubDate></item><item><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x441;&#x43A;&#x438;&#x43D;&#x43E;&#x432; &#x447;&#x435;&#x440;&#x435;&#x437; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;&#x43D;&#x44B;&#x439; &#x432;&#x44B;&#x431;&#x43E;&#x440; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430;</title><link>https://pawno-rus.com/topic/7512-sistema-skinov-cherez-standartnyy-vybor-klassa/</link><description><![CDATA[
<p>
	Стандартная система выбора класса хороша, но в ней можно сделать только определённое количество скинов/классов. А ведь на сервере может быть выбор скина при регистрации, в магазине во фракции... Здесь я постараюсь наглядно обьяснить суть работы.
</p>

<p>
	 
</p>

<p>
	В первую очередь, нужно добавить 3 абсолютно любых класса.
</p>

<p>
	Нужно создать массив нужных нам скинов, с их количеством в нулевом элементе. Например: <strong><span style="font-family:'Courier New', Courier, monospace;">static const bitchSkins[][] = { 4, 78, 79, 134, 135 };</span></strong>
</p>

<p>
	<span style="font-family:Arial, Helvetica, sans-serif;">В ваш енум игроков добавьте </span><strong><font face="Courier New, Courier, monospace">pClassID</font></strong><font face="Courier New, Courier, monospace"><span style="font-family:Arial, Helvetica, sans-serif;"> и добавьте нужную вам переменную для хранения выбора скина(например, </span></font><strong><span style="font-family:'Courier New', Courier, monospace;">pRegSkin</span></strong><font face="Courier New, Courier, monospace"><span style="font-family:Arial, Helvetica, sans-serif;">).</span></font><br />
	Вставьте в ваш мод следующий код:
</p>

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

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

		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="// pinfo - enum игроков
// skinid - id скина(индекс массива скинов)
// wasclass - id предыдущего класса
// skins - массив скинов

// В то место, откуда вы хотите начать выбор скина:
    pinfo[playerid][skinid] = 1;

    // Эта строка бесполезная если вы делаете выбор скина сразу после подключения игрока(регистрация)
    ForceClassSelection(playerid);

public OnPlayerRequestClass(playerid, classid) // Когда игрок нажимает кнопки '&lt;&lt;' или '&gt;&gt;'
{
    #define was pinfo[playerid][wasclass] // Макрос на прошлый id класса
    #define now classid // Макрос на текущий id класса

    if(pinfo[playerid][skinid] &gt; 0) // Проверка на выбор скина(мы на старте установили skinid в 1)
    {
        // Вправо: если было 0 и стало 1 или было 1 и стало 2 или было 2 и стало 0
        if((was == 0 &amp;&amp; now == 1) || (was == 1 &amp;&amp; now == 2) || (was == 2 &amp;&amp; now == 0))
        {
            pInfo[playerid][skinid]++; // Инкремент счетчика
            if(pinfo[playerid][skinid] &gt; skins[0]) // Если индекс скина дошел до края(0 ячейка - размер)
                pInfo[playerid][skinid] = 1; // то листнуть индекс скина до первого скина в массиве
            SetPlayerSkin(playerid, skins[ pInfo[playerid][skinid] ]); // Поставить скин из массива игроку
		    was = now; // Установить прошлый класс в текущий
        }
        
        // Влево: если было 0 и стало 2 или было 1 и стало 0 или было 2 и стало 1
        else if((was == 0 &amp;&amp; now == 2) || (was == 1 &amp;&amp; now == 0) || (was == 2 &amp;&amp; now == 1))
        {
            pInfo[playerid][skinid]--; // Декремент счетчика
	        if(pInfo[playerid][skinid] == 0) // Если счетчик скина дошёл до начала
                pInfo[playerid][skinid] = bitchSkins[0]; // то листнуть счетчик до последнего скина в массиве(0 ячейка - размер)
	        SetPlayerSkin(playerid, skins[ pInfo[playerid][skinid] ]); // Поставить скин из массива игроку
		    was = now; // Установить прошлый класс в текущий
        }
    }
}

public OnPlayerRequestSpawn(playerid) // Когда игрок нажимает кнопку 'Spawn'
{
    // В пунктах с защитой от F4: я это не проверял, мб будет работать
    if(pinfo[playerid][skinid] &gt; 0) // если игрок выбирает себе скин
    {
        // SetSpawnInfo
        SpawnPlayer(playerid); // Спавним игрока чтобы сбросить выбор класса
        // SetPlayerPos/FacingAngle/Interior/VirtualWorld/...
        return 0; // Если вы хотите защиты от F4 :: Отменяем спавн игрока
    }
    return 0; // Не забудьте вернуть 0 чтобы паблик не заспавнил ничего сам по себе

    // SetSpawnInfo
    return 1; // Если вы хотите защиту от F4 :: Если игрок нажал F4, то он может просто заспавниться по нажатию кнопки
    // SetPlayerPos/FacingAngle/Interior/VirtualWorld/...
}">

<span><span>// pinfo - enum игроков</span></span>
<span><span>// skinid - id скина(индекс массива скинов)</span></span>
<span><span>// wasclass - id предыдущего класса</span></span>
<span><span>// skins - массив скинов</span></span>

<span><span>// В то место, откуда вы хотите начать выбор </span><span>скина:</span></span>
<span><span>    pinfo[playerid][skinid] = </span><span>1</span><span>;</span></span>

<span><span>    </span><span>// Эта строка бесполезная если вы делаете выбор </span><span>скина сразу после подключения игрока(регистрация)</span></span>
<span><span>    ForceClassSelection(playerid);</span></span>

<span><span>public</span><span> OnPlayerRequestClass(playerid, classid) </span><span>// Когда игрок нажимает кнопки '&lt;&lt;' или '&gt;&gt;'</span></span>
<span><span>{</span></span>
<span><span>    #define</span><span> was pinfo[playerid][wasclass] </span><span>// Макрос на прошлый id класса</span></span>
<span><span>    #define</span><span> now classid </span><span>// Макрос на текущий id класса</span></span>

<span><span>    </span><span>if</span><span>(pinfo[playerid][skinid] &gt; </span><span>0</span><span>) </span><span>// Проверка на выбор скина(мы на старте установили </span><span>skinid в 1)</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>// Вправо: если было 0 и стало 1 или было 1 и </span><span>стало 2 или было 2 и стало 0</span></span>
<span><span>        </span><span>if</span><span>((was == </span><span>0</span><span> &amp;&amp; now == </span><span>1</span><span>) || (was == </span><span>1</span><span> &amp;&amp; now == </span><span>2</span><span>) || (was == </span><span>2</span><span> &amp;&amp; now == </span><span>0</span><span>))</span></span>
<span><span>        {</span></span>
<span><span>            pInfo[playerid][skinid]++; </span><span>// Инкремент счетчика</span></span>
<span><span>            </span><span>if</span><span>(pinfo[playerid][skinid] &gt; skins[</span><span>0</span><span>]) </span><span>// Если индекс скина дошел до края(0 ячейка - </span><span>размер)</span></span>
<span><span>                pInfo[playerid][skinid] = </span><span>1</span><span>; </span><span>// то листнуть индекс скина до первого скина в </span><span>массиве</span></span>
<span><span>            SetPlayerSkin(playerid, skins[ </span><span>pInfo[playerid][skinid] ]); </span><span>// Поставить скин из массива игроку</span></span>
<span><span>            was = now; </span><span>// Установить прошлый класс в текущий</span></span>
<span><span>        }</span></span>
<span><span>        </span></span>
<span><span>        </span><span>// Влево: если было 0 и стало 2 или было 1 и стало </span><span>0 или было 2 и стало 1</span></span>
<span><span>        </span><span>else</span><span> </span><span>if</span><span>((was == </span><span>0</span><span> &amp;&amp; now == </span><span>2</span><span>) || (was == </span><span>1</span><span> &amp;&amp; now == </span><span>0</span><span>) || (was == </span><span>2</span><span> &amp;&amp; now == </span><span>1</span><span>))</span></span>
<span><span>        {</span></span>
<span><span>            pInfo[playerid][skinid]--; </span><span>// Декремент счетчика</span></span>
<span><span>            </span><span>if</span><span>(pInfo[playerid][skinid] == </span><span>0</span><span>) </span><span>// Если счетчик скина дошёл до начала</span></span>
<span><span>                pInfo[playerid][skinid] = </span><span>bitchSkins[</span><span>0</span><span>]; </span><span>// то листнуть счетчик до последнего скина в </span><span>массиве(0 ячейка - размер)</span></span>
<span><span>            SetPlayerSkin(playerid, skins[ </span><span>pInfo[playerid][skinid] ]); </span><span>// Поставить скин из массива игроку</span></span>
<span><span>            was = now; </span><span>// Установить прошлый класс в текущий</span></span>
<span><span>        }</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>

<span><span>public</span><span> OnPlayerRequestSpawn(playerid) </span><span>// Когда игрок нажимает кнопку 'Spawn'</span></span>
<span><span>{</span></span>
<span><span>    </span><span>// В пунктах с защитой от F4: я это не проверял, </span><span>мб будет работать</span></span>
<span><span>    </span><span>if</span><span>(pinfo[playerid][skinid] &gt; </span><span>0</span><span>) </span><span>// если игрок выбирает себе скин</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>// SetSpawnInfo</span></span>
<span><span>        SpawnPlayer(playerid); </span><span>// Спавним игрока чтобы сбросить выбор класса</span></span>
<span><span>        </span><span>// SetPlayerPos/FacingAngle/Interior/VirtualWorld/</span><span>...</span></span>
<span><span>        </span><span>return</span><span> </span><span>0</span><span>; </span><span>// Если вы хотите защиты от F4 :: Отменяем спавн </span><span>игрока</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>return</span><span> </span><span>0</span><span>; </span><span>// Не забудьте вернуть 0 чтобы паблик не заспавнил </span><span>ничего сам по себе</span></span>

<span><span>    </span><span>// SetSpawnInfo</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>; </span><span>// Если вы хотите защиту от F4 :: Если игрок нажал </span><span>F4, то он может просто заспавниться по нажатию </span><span>кнопки</span></span>
<span><span>    </span><span>// SetPlayerPos/FacingAngle/Interior/VirtualWorld/</span><span>...</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	 
</p>

<p>
	* Завтра добавлю пример *
</p>
]]></description><guid isPermaLink="false">7512</guid><pubDate>Tue, 17 Oct 2023 14:23:03 +0000</pubDate></item><item><title>&#x414;&#x438;&#x430;&#x43B;&#x43E;&#x433;&#x43E;&#x432;&#x44B;&#x435; &#x445;&#x443;&#x43A;&#x438;</title><link>https://pawno-rus.com/topic/7508-dialogovye-huki/</link><description><![CDATA[
<p>
	Привет, форумчане. Не знаю, мб кто-то это уже придумал, но я вам представляю систему хукования диалогов.
</p>

<p>
	Хукование может уменьшить производительность во время ответа на диалог, но зато предоставляет удобство для скриптера.
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="// Макрос-хук. Аргумент после двоеточия: dialogid.
// Аргументы в скобках: playerid, response, listitem, inputtext[]
#define DIA:%0(%1,%2,%3,%4) forward dia@%0(%1,%2,%3,%4); public dia@%0(%1,%2,%3,%4)

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]
{
    new callback[10]; // Строка для вызова хука. Размер: dia@ (4 символа) + ID диалога (максимум 32767, 5 символов) + \0
    format(callback, 10, &quot;dia@%d&quot;, dialogid); // Форматирование строки
    CallLocalFunction(callback, &quot;ddds&quot;, playerid, response, listitem, inputtext); // Сам вызов хука
}

// Пример со списком
CMD:choice(playerid, params[]) // Команда на DC_CMD/ZCMD
    return ShowPlayerDialog(playerid, 100, DIALOG_STYLE_LIST, &quot;Опрос&quot;, &quot;Партия За Правду\n\
    Партия Справедливый Сан Андреас&quot;, &quot;Выбрать&quot;, &quot;Отмена&quot;); // Диалог 100 с двумя пунктами

DIA:100(playerid, resp, item, text[]) // Хук на диалог 100
{
    if(resp) // Если нажата первая кнопка
    {
        if(item == 0) SendClientMessage(playerid, 0x00FF00AA, &quot;Хороший выбор!&quot;); // Ответ на 1 пункт
        else          SendClientMessage(playerid, 0xFF0000AA, &quot;Плохой выбор!&quot; ); // Ответ на 2 пункт
    }
}

// Пример с вводом
CMD:input(playerid, params[])
{
    return ShowPlayerDialog(playerid, 200, DIALOG_STYLE_INPUT, &quot;Ввод&quot;, &quot;Введите ваш отзыв о сервере!&quot;,
    &quot;Отправить&quot;, &quot;Отмена&quot;); // Диалог 100 с вводом строки
}

DIA:200(playerid, response, listitem, inputtext[]) // Хук на диалог 200
{
    if(response) // Если нажата первая кнопка
    {
        new query[100], name[24], ret; // Строка для запроса, имени игрока и 
        GetPlayerName(playerid, name, 24); // Получение имени
        format(query, 100, &quot;INSERT INTO comments ( name, review ) VALUES ( %s, %s )&quot;, name, inputtext); // Форматирование запроса
        ret = db_query(mainDB, query); // Отправка запроса a_sampdb
        db_free_result(ret); // Очистка запроса
    }
}">
<span><span>// Макрос-хук. Аргумент после двоеточия: dialogid.</span></span>
<span><span>// Аргументы в скобках: playerid, response, </span><span>listitem, inputtext[]</span></span>
<span><span>#define</span><span> DIA:%</span><span>0</span><span>(%</span><span>1</span><span>,%</span><span>2</span><span>,%</span><span>3</span><span>,%</span><span>4</span><span>) forward dia@%</span><span>0</span><span>(%</span><span>1</span><span>,%</span><span>2</span><span>,%</span><span>3</span><span>,%</span><span>4</span><span>); </span><span>public</span><span> dia@%</span><span>0</span><span>(%</span><span>1</span><span>,%</span><span>2</span><span>,%</span><span>3</span><span>,%</span><span>4</span><span>)</span></span>

<span><span>public</span><span> OnDialogResponse(playerid, dialogid, response, li</span><span>stitem, inputtext[]</span></span>
<span><span>{</span></span>
<span><span>    </span><span>new</span><span> callback[</span><span>10</span><span>]; </span><span>// Строка для вызова хука. Размер: dia@ (4 </span><span>символа) + ID диалога (максимум 32767, 5 символов) </span><span>+ \0</span></span>
<span><span>    format(callback, </span><span>10</span><span>, </span><span>"dia@%d"</span><span>, dialogid); </span><span>// Форматирование строки</span></span>
<span><span>    CallLocalFunction(callback, </span><span>"ddds"</span><span>, playerid, response, listitem, inputtext); </span><span>// Сам вызов хука</span></span>
<span><span>}</span></span>

<span><span>// Пример со списком</span></span>
<span><span>CMD:choice(playerid, params[]) </span><span>// Команда на DC_CMD/ZCMD</span></span>
<span><span>    </span><span>return</span><span> ShowPlayerDialog(playerid, </span><span>100</span><span>, DIALOG_STYLE_LIST, </span><span>"Опрос"</span><span>, </span><span>"Партия За Правду\n</span><span>\</span></span>
<span><span>    Партия Справедливый Сан Андреас"</span><span>, </span><span>"Выбрать"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Диалог 100 с двумя пунктами</span></span>

<span><span>DIA:</span><span>100</span><span>(playerid, resp, item, text[]) </span><span>// Хук на диалог 100</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(resp) </span><span>// Если нажата первая кнопка</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>if</span><span>(item == </span><span>0</span><span>) SendClientMessage(playerid, </span><span>0x00FF00AA</span><span>, </span><span>"Хороший выбор!"</span><span>); </span><span>// Ответ на 1 пункт</span></span>
<span><span>        </span><span>else</span><span>          SendClientMessage(playerid, </span><span>0xFF0000AA</span><span>, </span><span>"Плохой выбор!"</span><span> ); </span><span>// Ответ на 2 пункт</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>

<span><span>// Пример с вводом</span></span>
<span><span>CMD:input(playerid, params[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>return</span><span> ShowPlayerDialog(playerid, </span><span>200</span><span>, DIALOG_STYLE_INPUT, </span><span>"Ввод"</span><span>, </span><span>"Введите ваш отзыв о сервере!"</span><span>,</span></span>
<span><span>    </span><span>"Отправить"</span><span>, </span><span>"Отмена"</span><span>); </span><span>// Диалог 100 с вводом строки</span></span>
<span><span>}</span></span>

<span><span>DIA:</span><span>200</span><span>(playerid, response, listitem, inputtext[]) </span><span>// Хук на диалог 200</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(response) </span><span>// Если нажата первая кнопка</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>new</span><span> query[</span><span>100</span><span>], name[</span><span>24</span><span>], ret; </span><span>// Строка для запроса, имени игрока и </span></span>
<span><span>        GetPlayerName(playerid, name, </span><span>24</span><span>); </span><span>// Получение имени</span></span>
<span><span>        format(query, </span><span>100</span><span>, </span><span>"INSERT INTO comments ( name, review ) VALUES ( </span><span>%s, %s )"</span><span>, name, inputtext); </span><span>// Форматирование запроса</span></span>
<span><span>        ret = db_query(mainDB, query); </span><span>// Отправка запроса a_sampdb</span></span>
<span><span>        db_free_result(ret); </span><span>// Очистка запроса</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7508</guid><pubDate>Sun, 15 Oct 2023 07:06:05 +0000</pubDate></item><item><title>&#x412;&#x445;&#x43E;&#x434; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440; &#x43F;&#x43E; &#x43D;&#x438;&#x43A;&#x443;</title><link>https://pawno-rus.com/topic/7500-vhod-na-server-po-niku/</link><description><![CDATA[
<p>
	Система подходит для тех, кто пишет мод. На сервер допускаются ники, зарегистрированные с помощью команды /setreg. 
</p>

<p>
	/setreg Зарегистрировать ник<br />
	/delreg Удалить ник
</p>

<p>
	<strong>В OnPlayerConnect:</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnPlayerConnect(playerid)
{
   SetConnectServer(playerid); // Вызываем функцию SetConnectServer при подключении игрока
   return 1;
}">
<span><span>public</span><span> OnPlayerConnect(playerid)</span></span>
<span><span>{</span></span>
<span><span>   SetConnectServer(playerid); </span><span>// Вызываем функцию SetConnectServer при </span><span>подключении игрока</span></span>
<span><span>   </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	<strong>В конец мода или куда вам удобно</strong>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="CMD:setreg(playerid, params[])
{
    static const fmt_str[] = &quot;[СЕРВЕР] Игрок с ником %s был зарегистрирован в техническую часть.&quot;;
    new string[sizeof(fmt_str) + MAX_PLAYER_NAME],d_nick[MAX_PLAYER_NAME];

    if(sscanf(params, &quot;s[24]&quot;, d_nick)) return SendClientMessage(playerid, -1, &quot;Введите: /setreg [Ник игрока]&quot;);
    
        // Формируем SQL-запрос для проверки наличия ника в базе данных
    mysql_format(dbHandle, string, sizeof(string), &quot;SELECT * FROM `ConnectServer` WHERE `sOwner` = '%s'&quot;, d_nick);
    new Cache:result = mysql_query(dbHandle, string);
    
        // Проверяем, есть ли результаты запроса (ник уже существует в базе данных)
    if(cache_num_rows())
    {
        SendClientMessage(playerid, -1, &quot;[СЕРВЕР] Этот ник уже зарегистрирован в технической части сервера.&quot;);
    }
    else
    {
                // Ник не найден в базе данных, выполняем запрос на добавление нового ника
        mysql_format(dbHandle, string, sizeof(string), &quot;INSERT INTO `ConnectServer` (`sOwner`) VALUES ('%s')&quot;, d_nick);
        mysql_tquery(dbHandle, string);

                // Форматируем сообщение с использованием ника и отправляем игроку
        format(string, sizeof(string), fmt_str, d_nick);
        SendClientMessage(playerid, -1, string);
    }
        // Удаляем результаты запроса из кэша
    cache_delete(result);
    return 1;
}">
<span><span>CMD:setreg(playerid, params[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>static</span><span> </span><span>const</span><span> fmt_str[] = </span><span>"[СЕРВЕР] Игрок с ником %s был зарегистрирован в </span><span>техническую часть."</span><span>;</span></span>
<span><span>    </span><span>new</span><span> string[</span><span>sizeof</span><span>(fmt_str) + </span><span>MAX_PLAYER_NAME],d_nick[MAX_PLAYER_NAME];</span></span>

<span><span>    </span><span>if</span><span>(sscanf(params, </span><span>"s[24]"</span><span>, d_nick)) </span><span>return</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Введите: /setreg [Ник игрока]"</span><span>);</span></span>
<span><span>    </span></span>
<span><span>        </span><span>// Формируем SQL-запрос для проверки наличия ника </span><span>в базе данных</span></span>
<span><span>    mysql_format(dbHandle, string, </span><span>sizeof</span><span>(string), </span><span>"SELECT * FROM `ConnectServer` WHERE `sOwner` = </span><span>'%s'"</span><span>, d_nick);</span></span>
<span><span>    </span><span>new</span><span> Cache:result = mysql_query(dbHandle, string);</span></span>
<span><span>    </span></span>
<span><span>        </span><span>// Проверяем, есть ли результаты запроса (ник уже </span><span>существует в базе данных)</span></span>
<span><span>    </span><span>if</span><span>(cache_num_rows())</span></span>
<span><span>    {</span></span>
<span><span>        SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"[СЕРВЕР] Этот ник уже зарегистрирован в </span><span>технической части сервера."</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>                </span><span>// Ник не найден в базе данных, выполняем запрос </span><span>на добавление нового ника</span></span>
<span><span>        mysql_format(dbHandle, string, </span><span>sizeof</span><span>(string), </span><span>"INSERT INTO `ConnectServer` (`sOwner`) VALUES </span><span>('%s')"</span><span>, d_nick);</span></span>
<span><span>        mysql_tquery(dbHandle, string);</span></span>

<span><span>                </span><span>// Форматируем сообщение с использованием ника и </span><span>отправляем игроку</span></span>
<span><span>        format(string, </span><span>sizeof</span><span>(string), fmt_str, d_nick);</span></span>
<span><span>        SendClientMessage(playerid, -</span><span>1</span><span>, string);</span></span>
<span><span>    }</span></span>
<span><span>        </span><span>// Удаляем результаты запроса из кэша</span></span>
<span><span>    cache_delete(result);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	<br />
	Получение ника игрока: Код начинается с попытки считать первый параметр команды в переменную d_nick.
</p>

<p>
	Проверка наличия ника в базе данных: Следующий шаг - формирование SQL-запроса для проверки наличия данного ника в базе данных. 
</p>

<p>
	Добавление ника в базу данных: Если ник не найден в базе данных, формируется запрос на добавление нового ника. 
</p>

<p>
	Очистка результатов запроса: cache_delete(result); - очищает результаты запроса из кэша для оптимизации памяти.
</p>

<p>
	Этот код обрабатывает команду /setreg [Ник игрока], проверяет наличие ника в базе данных и регистрирует его, если он еще не зарегистрирован.
</p>

<p>
	Далее...
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="CMD:dellreg(playerid, params[])
{
    static const fmt_str[] = &quot;[СЕРВЕР] Вы удалили ник %s с технической части сервера.&quot;;
    new string[sizeof(fmt_str) + MAX_PLAYER_NAME],d_nick[MAX_PLAYER_NAME];
    
    if(sscanf(params, &quot;s[24]&quot;, d_nick)) return SendClientMessage(playerid, -1, !&quot;Введите: /dellreg [Ник игрока]&quot;);

        // Формируем SQL-запрос для проверки наличия ника в базе данных
    mysql_format(dbHandle, string, sizeof(string), &quot;SELECT * FROM `ConnectServer` WHERE `sOwner` = '%s'&quot;, d_nick);
    new Cache:result = mysql_query(dbHandle, string);
        // Проверяем, есть ли результаты запроса (ник найден в базе данных)
    if(cache_num_rows())
    {
                // Формируем SQL-запрос для удаления ника из базы данных
        mysql_format(dbHandle, string, sizeof(string), &quot;DELETE FROM `ConnectServer` WHERE `sOwner` = '%s'&quot;, d_nick);
        mysql_tquery(dbHandle, string);

                // Форматируем сообщение с использованием ника и отправляем игроку
        format(string, sizeof(string), fmt_str, d_nick);
        SendClientMessage(playerid, -1, string);
    }
    else
    {
                // Ник не найден в базе данных, отправляем сообщение об ошибке
        SendClientMessage(playerid, -1, &quot;[СЕРВЕР] Данный ник не обнаружен в технической части!&quot;);
    }
        // Удаляем результаты запроса из кэша
    cache_delete(result);
    return 1;
}">
<span><span>CMD:dellreg(playerid, params[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>static</span><span> </span><span>const</span><span> fmt_str[] = </span><span>"[СЕРВЕР] Вы удалили ник %s с технической части </span><span>сервера."</span><span>;</span></span>
<span><span>    </span><span>new</span><span> string[</span><span>sizeof</span><span>(fmt_str) + </span><span>MAX_PLAYER_NAME],d_nick[MAX_PLAYER_NAME];</span></span>
<span><span>    </span></span>
<span><span>    </span><span>if</span><span>(sscanf(params, </span><span>"s[24]"</span><span>, d_nick)) </span><span>return</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, !</span><span>"Введите: /dellreg [Ник игрока]"</span><span>);</span></span>

<span><span>        </span><span>// Формируем SQL-запрос для проверки наличия ника </span><span>в базе данных</span></span>
<span><span>    mysql_format(dbHandle, string, </span><span>sizeof</span><span>(string), </span><span>"SELECT * FROM `ConnectServer` WHERE `sOwner` = </span><span>'%s'"</span><span>, d_nick);</span></span>
<span><span>    </span><span>new</span><span> Cache:result = mysql_query(dbHandle, string);</span></span>
<span><span>        </span><span>// Проверяем, есть ли результаты запроса (ник </span><span>найден в базе данных)</span></span>
<span><span>    </span><span>if</span><span>(cache_num_rows())</span></span>
<span><span>    {</span></span>
<span><span>                </span><span>// Формируем SQL-запрос для удаления ника из базы </span><span>данных</span></span>
<span><span>        mysql_format(dbHandle, string, </span><span>sizeof</span><span>(string), </span><span>"DELETE FROM `ConnectServer` WHERE `sOwner` = </span><span>'%s'"</span><span>, d_nick);</span></span>
<span><span>        mysql_tquery(dbHandle, string);</span></span>

<span><span>                </span><span>// Форматируем сообщение с использованием ника и </span><span>отправляем игроку</span></span>
<span><span>        format(string, </span><span>sizeof</span><span>(string), fmt_str, d_nick);</span></span>
<span><span>        SendClientMessage(playerid, -</span><span>1</span><span>, string);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>                </span><span>// Ник не найден в базе данных, отправляем </span><span>сообщение об ошибке</span></span>
<span><span>        SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"[СЕРВЕР] Данный ник не обнаружен в технической </span><span>части!"</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>        </span><span>// Удаляем результаты запроса из кэша</span></span>
<span><span>    cache_delete(result);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	<br />
	Получение ника игрока: Код начинается с попытки считать первый параметр команды в переменную d_nick.
</p>

<p>
	Проверка наличия ника в базе данных: Следующий шаг - формирование SQL-запроса для проверки наличия данного ника в базе данных. Если ник найден, выполняется запрос на удаление ника.
</p>

<p>
	Удаление ника из базы данных: Если ник найден в базе данных, формируется SQL-запрос для его удаления. 
</p>

<p>
	Очистка результатов запроса: cache_delete(result); - очищает результаты запроса из кэша для оптимизации памяти.
</p>

<p>
	Этот код обрабатывает команду /dellreg [Ник игрока], проверяет наличие ника в базе данных и удаляет его, если он существует.
</p>

<p>
	Далее...
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="stock SetConnectServer(playerid)
{
    // Определение SQL-запроса для проверки наличия игрока в базе данных
    static const fmt_str[] = &quot;SELECT * FROM `ConnectServer` WHERE `sOwner` = '%s'&quot;;
    new string[sizeof(fmt_str) + MAX_PLAYER_NAME],d_nick[MAX_PLAYER_NAME];
    // new string[sizeof(fmt_str) + MAX_PLAYER_NAME];

    // Получение имени игрока по его идентификатору
    GetPlayerName(playerid, d_nick, MAX_PLAYER_NAME);
    
    // Формирование SQL-запроса с использованием имени игрока
    mysql_format(dbHandle, string, sizeof(string), fmt_str, d_nick);
    // mysql_format(dbHandle, string, sizeof(string), fmt_str, pInfo[playerid][p_name]); 
    new Cache:result = mysql_query(dbHandle, string);

    // Проверка наличия игрока в базе данных
    if(cache_num_rows())
    {
        // Если игрок найден, отправляем ему сообщение о авторизации
        SendClientMessage(playerid, -1, &quot;[СЕРВЕР] Вы зарегистрированы в технической части.&quot;);
    }
    else
    {
        // Если игрок не найден, отправляем ему сообщение об ошибке и кикаем его
        SendClientMessage(playerid, -1, &quot;[СЕРВЕР] Ваш аккаунт не зарегистрирован в технической части! Обратитесь к Руководству.&quot;);
        ShowPlayerDialog(playerid, 0, 0, !&quot;              Сервер Name Role Play&quot;, !&quot;      На сервере ведутся технические работы.\n\tЭто может занять некоторое время.\nПриносим извинения за причинённые неудобства.&quot;, !&quot;Закрыть&quot;, &quot;&quot;);
        Kick(playerid);
    }
    // Очистка результатов запроса из кэша
    cache_delete(result);
    return 1;
}">
<span><span>stock SetConnectServer(playerid)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>// Определение SQL-запроса для проверки наличия </span><span>игрока в базе данных</span></span>
<span><span>    </span><span>static</span><span> </span><span>const</span><span> fmt_str[] = </span><span>"SELECT * FROM `ConnectServer` WHERE `sOwner` = </span><span>'%s'"</span><span>;</span></span>
<span><span>    </span><span>new</span><span> string[</span><span>sizeof</span><span>(fmt_str) + </span><span>MAX_PLAYER_NAME],d_nick[MAX_PLAYER_NAME];</span></span>
<span><span>    </span><span>// new string[sizeof(fmt_str) + MAX_PLAYER_NAME];</span></span>

<span><span>    </span><span>// Получение имени игрока по его идентификатору</span></span>
<span><span>    GetPlayerName(playerid, d_nick, </span><span>MAX_PLAYER_NAME);</span></span>
<span><span>    </span></span>
<span><span>    </span><span>// Формирование SQL-запроса с использованием имени </span><span>игрока</span></span>
<span><span>    mysql_format(dbHandle, string, </span><span>sizeof</span><span>(string), fmt_str, d_nick);</span></span>
<span><span>    </span><span>// mysql_format(dbHandle, string, sizeof(string), </span><span>fmt_str, pInfo[playerid][p_name]); </span></span>
<span><span>    </span><span>new</span><span> Cache:result = mysql_query(dbHandle, string);</span></span>

<span><span>    </span><span>// Проверка наличия игрока в базе данных</span></span>
<span><span>    </span><span>if</span><span>(cache_num_rows())</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>// Если игрок найден, отправляем ему сообщение о </span><span>авторизации</span></span>
<span><span>        SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"[СЕРВЕР] Вы зарегистрированы в технической </span><span>части."</span><span>);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>else</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>// Если игрок не найден, отправляем ему сообщение </span><span>об ошибке и кикаем его</span></span>
<span><span>        SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"[СЕРВЕР] Ваш аккаунт не зарегистрирован в </span><span>технической части! Обратитесь к Руководству."</span><span>);</span></span>
<span><span>        ShowPlayerDialog(playerid, </span><span>0</span><span>, </span><span>0</span><span>, !</span><span>"              Сервер Name Role Play"</span><span>, !</span><span>"      На сервере ведутся технические </span><span>работы.\n\tЭто может занять некоторое </span><span>время.\nПриносим извинения за причинённые </span><span>неудобства."</span><span>, !</span><span>"Закрыть"</span><span>, </span><span>""</span><span>);</span></span>
<span><span>        Kick(playerid);</span></span>
<span><span>    }</span></span>
<span><span>    </span><span>// Очистка результатов запроса из кэша</span></span>
<span><span>    cache_delete(result);</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	Определение SQL-запроса: static const fmt_str[] = "SELECT * FROM \ConnectServer` WHERE `sOwner` = '%s'";` - определяет SQL-запрос для проверки наличия игрока в базе данных.
</p>

<p>
	Получение имени игрока: GetPlayerName(playerid, d_nick, MAX_PLAYER_NAME); - получает имя игрока по его идентификатору и сохраняет его в переменную d_nick.
</p>

<p>
	Формирование и выполнение SQL-запроса: mysql_format(dbHandle, string, sizeof(string), fmt_str, d_nick); - формирует SQL-запрос, вставляя имя игрока, и выполняет его.
</p>

<p>
	Проверка результата запроса и отправка сообщения: if(cache_num_rows()) - проверяет, есть ли результаты запроса в кэше. Если игрок найден в базе данных, отправляет ему сообщение о авторизации.
</p>

<p>
	Обработка случая, когда игрок не найден: Если игрок не найден в базе данных, отправляет ему сообщение об ошибке, отображает диалоговое окно и кикает его с сервера.
</p>

<p>
	Очистка результатов запроса: cache_delete(result); - очищает результаты запроса из кэша для оптимизации памяти.<br /><br /><strong>Добавляем в базу данных:</strong><br />
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2023_10/2023-10-10_133138.png.71e91f389c80d806537607ca738d7477.png" data-fileid="14240" rel=""><img alt="2023-10-10_133138.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14240" src="//storage.yandexcloud.net/pawnorus/monthly_2023_10/2023-10-10_133138.thumb.png.bd7554746d8d0df8e68af556278cdc9b.png" /></a>
</p>
]]></description><guid isPermaLink="false">7500</guid><pubDate>Tue, 10 Oct 2023 12:57:53 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x43A;&#x430; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x435; 10 &#x43C;&#x438;&#x43D;&#x443;&#x442;.</title><link>https://pawno-rus.com/topic/7492-podskazka-informacii-kazhdye-10-minut/</link><description><![CDATA[
<p>
	<span style="color:#141414;">Здравствуйте, дорогие друзья! Возможно, кому-то пригодится данная система.</span><br style="color:#141414;" /><span style="color:#141414;">Каждые 10 минут на сервере будет выводиться подсказка текста по очереди.</span><br /><br /><b style="color:#141414;">В начале мода.</b><br />
	 
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="#define publics:%0(%1)  forward %0(%1);public %0(%1)
#define MAX_TEXT 3 // Количество текстовых строк
#define MAX_TEXT_TIMES 10 // Интервал в минутах

new currentTextIndex = 0; // Текущий индекс текста

new randomMessages[MAX_TEXT][128] =
{
    &quot;{DC4747}[Подсказка]: СВОЙ ТЕКСТ&quot;,
    &quot;{DC4747}[Подсказка]: СВОЙ ТЕКСТ&quot;,
    &quot;{DC4747}[Подсказка]: СВОЙ ТЕКСТ&quot;
};">
<span><span>#define</span><span> publics:%</span><span>0</span><span>(%</span><span>1</span><span>)  forward %</span><span>0</span><span>(%</span><span>1</span><span>);</span><span>public</span><span> %</span><span>0</span><span>(%</span><span>1</span><span>)</span></span>
<span><span>#define</span><span> MAX_TEXT </span><span>3</span><span> </span><span>// Количество текстовых строк</span></span>
<span><span>#define</span><span> MAX_TEXT_TIMES </span><span>10</span><span> </span><span>// Интервал в минутах</span></span>

<span><span>new</span><span> currentTextIndex = </span><span>0</span><span>; </span><span>// Текущий индекс текста</span></span>

<span><span>new</span><span> randomMessages[MAX_TEXT][</span><span>128</span><span>] =</span></span>
<span><span>{</span></span>
<span><span>    </span><span>"{DC4747}[Подсказка]: СВОЙ ТЕКСТ"</span><span>,</span></span>
<span><span>    </span><span>"{DC4747}[Подсказка]: СВОЙ ТЕКСТ"</span><span>,</span></span>
<span><span>    </span><span>"{DC4747}[Подсказка]: СВОЙ ТЕКСТ"</span></span>
<span><span>};</span></span>
</pre>

<p>
	<b style="color:#141414;">В OnGameModeInit:</b><br />
	 
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="public OnGameModeInit()
{
   SetTimer(&quot;SendRandomMessage&quot;, MAX_TEXT_TIMES * 60 * 1000, true);
   return 1;
}">
<span><span>public</span><span> OnGameModeInit()</span></span>
<span><span>{</span></span>
<span><span>   SetTimer(</span><span>"SendRandomMessage"</span><span>, MAX_TEXT_TIMES * </span><span>60</span><span> * </span><span>1000</span><span>, </span><span>true</span><span>);</span></span>
<span><span>   </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	<b style="color:#141414;">В конце мода:</b><br />
	 
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="publics: SendRandomMessage()
{
    SendClientMessageToAll(-1, randomMessages[currentTextIndex]);

    currentTextIndex++;
    if (currentTextIndex &gt;= MAX_TEXT)
    {
        currentTextIndex = 0;
    }

    return 1;
}">
<span><span>publics: SendRandomMessage()</span></span>
<span><span>{</span></span>
<span><span>    SendClientMessageToAll(-</span><span>1</span><span>, randomMessages[currentTextIndex]);</span></span>

<span><span>    currentTextIndex++;</span></span>
<span><span>    </span><span>if</span><span> (currentTextIndex &gt;= MAX_TEXT)</span></span>
<span><span>    {</span></span>
<span><span>        currentTextIndex = </span><span>0</span><span>;</span></span>
<span><span>    }</span></span>

<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7492</guid><pubDate>Sun, 08 Oct 2023 20:20:37 +0000</pubDate></item><item><title>[&#x41D;&#x41E;&#x412;&#x42B;&#x419;] &#x421;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x44F; &#x43B;&#x430;&#x443;&#x43D;&#x447;&#x435;&#x440;&#x430; Arizona RP</title><link>https://pawno-rus.com/topic/6985-novyy-sposob-sozdaniya-launchera-arizona-rp/</link><description><![CDATA[
<hr class="ipsHr">
<div class="ipsType_normal ipsType_richText ipsContained ipsType_break">
	<p style="text-align:center;">
		<b style="color:#141414;"><i>Что нужно скачать.</i></b><br style="color:#141414;"><span style="color:#b8312f;">1)</span><span style="color:#141414;"><span> </span></span><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9ub2RlanMub3JnL2VuLw==" rel="external nofollow" style="color:#84577c;">Java Script</a><br style="color:#141414;"><span style="color:#b8312f;">2)</span><span style="color:#141414;"><span> </span></span><a href="https://pawno-rus.com/go/?url=aHR0cHM6Ly9ub3RlcGFkLXBsdXMtcGx1cy5vcmcvZG93bmxvYWRzLw==" rel="external nofollow" style="color:#84577c;">NotePad++</a><br style="color:#141414;"><i style="color:#141414;"><b>Что делать дальше.</b></i><br style="color:#141414;"><span style="color:#b8312f;">1)</span><span style="color:#141414;"><span> </span>Заходим по пути по которому установлен лаунчер Arizona.</span><br style="color:#141414;"><span style="color:#b8312f;">2)<span> </span></span><span style="color:#141414;">Заходим в папку resources и копируем файл app.asar на рабочий стол</span><br style="color:#141414;"><span style="color:#b8312f;">3)</span><span style="color:#141414;"><span> </span>После создаем папку на рабочем столе "Arz(или своё название)"</span><br style="color:#141414;"><span style="color:#b8312f;">4)</span><span style="color:#141414;"><span> </span>Запускаете "Node.js command prompt" и выходите на рабочий стол, команда "cd Desktop"</span><br style="color:#141414;"><span style="color:#b8312f;">5)</span><span style="color:#141414;"><span> </span>После распаковывает архив "asar e app.asar arz"</span><br style="color:#141414;"><span style="color:#41a85f;">P.S если пишет "не является внутренней или внешней командой, исполняемой программой или пакетным файлом", то пропишите команду "npm i asar -g"</span><br style="color:#141414;"><span style="color:#b8312f;">6)</span><span style="color:#141414;"><span> </span>Заходим в arz(или своя папка)/static и открываем bundle.js в NotePad++</span><br style="color:#141414;"><span style="color:#b8312f;">7)</span><span style="color:#141414;"><span> </span>Ищите "servers-data" копируете всю ссылку и вставляете в браузер</span><br style="color:#141414;"><span style="color:#b8312f;">8)</span><span style="color:#141414;"><span> </span>В открывшейся ссылки копируем текст,и создаём текстовой документ на рабочем столе с таким же названием</span><br style="color:#141414;"><span style="color:#b8312f;">9)</span><span style="color:#141414;"><span> </span>Вставляем в этот текстовой документ текст,который скопировали и редактируем под свой сервер(IP,PORT)</span><br style="color:#141414;"><span style="color:#41a85f;">P.S.S нужно оставить один оригинальный сервер от Arizona,для того чтобы пройти проверку на оригинальность.</span><br style="color:#141414;"><span style="color:#b8312f;">10)</span><span style="color:#141414;"><span> </span>После заливаете вместо той ссылки свою</span><br style="color:#141414;"><span style="color:#b8312f;">11)</span><span style="color:#141414;"><span> </span>Теперь компилим это все команда "asar p arz app.asar"</span><br style="color:#141414;"><span style="color:#b8312f;">12)</span><span style="color:#141414;"><span> </span>Закидываете этот файл в "resourses" и воля, все работает</span><br style="color:#141414;"><span style="color:#41a85f;">P.S.S.S После того как все выше перечисленное проделали,у вас может появится ошибка,для того чтобы её исправить нужно</span><br style="color:#141414;"><span style="color:#b8312f;">1.1)</span><span style="color:#141414;"><span> </span>Зайти на оригинальный сервер Arizona(который оставили),как только загрузится регистрация/авторизация,выйти с сервера</span><br style="color:#141414;"><span style="color:#b8312f;">1.2)</span><span style="color:#141414;"><span> </span>Заходим по пути по которому установлен лаунчер Arizona,дальше в папку<span> </span></span><span style="color:#41a85f;">bin-&gt;arizona</span><span style="color:#141414;"><span> </span>и ищем там файл "</span><span style="color:#41a85f;">fastman92limitAdjuster_GTASA.ini</span><span style="color:#141414;">"</span><br style="color:#141414;"><span style="color:#b8312f;">1.3)</span><span style="color:#141414;"><span> </span>Выделяем его и нажимаем ПКМ и выбираем "Свойства" и ставим галочку "Только для чтения"</span><br style="color:#141414;"><span style="color:#b8312f;">1.4)</span><span style="color:#141414;"><span> </span>Нажимаем "Применить"</span><br style="color:#141414;"><span style="color:#b8312f;">1.5)</span><span style="color:#141414;"><span> </span>Пробуем зайти ещё раз на свой проект.</span><br style="color:#141414;"><span style="color:#141414;">Если будет не понятно что да как,позже сниму видеоролик по этому способу</span>
	</p>

	<p>
		<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2023_01/2023-01-08_23-41-34.png.21e98ff6296610a522367ee1e0555c23.png" data-fileid="11804" rel=""><img alt="2023-01-08_23-41-34.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11804" src="//storage.yandexcloud.net/pawnorus/monthly_2023_01/2023-01-08_23-41-34.png.21e98ff6296610a522367ee1e0555c23.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a>
	</p>

	<p>
		<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2023_01/2023-01-08_23-39-49.png.8c848cecf193d761742c44f051960507.png" data-fileid="11802" rel=""><img alt="2023-01-08_23-39-49.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11802" src="//storage.yandexcloud.net/pawnorus/monthly_2023_01/2023-01-08_23-39-49.png.8c848cecf193d761742c44f051960507.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a>
	</p>

	<p>
		<a class="ipsAttachLink ipsAttachLink_image" href="//storage.yandexcloud.net/pawnorus/monthly_2023_01/2023-01-08_23-40-56.png.544987ea174acef17f2a14325eb4e598.png" data-fileid="11803" rel=""><img alt="2023-01-08_23-40-56.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11803" src="//storage.yandexcloud.net/pawnorus/monthly_2023_01/2023-01-08_23-40-56.thumb.png.ace00091c7abb896465c6f8cc05e99e6.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'"></a>
	</p>
</div>
]]></description><guid isPermaLink="false">6985</guid><pubDate>Sun, 08 Jan 2023 23:17:55 +0000</pubDate></item><item><title>&#x413;&#x440;&#x43E;&#x431; &#x43D;&#x430; &#x441;&#x43A;&#x438;&#x43D; &#x430;&#x434;&#x43C;&#x438;&#x43D;&#x438;&#x441;&#x442;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x430;</title><link>https://pawno-rus.com/topic/7411-grob-na-skin-administratora/</link><description><![CDATA[
<p style="text-align:center;">
	Здравствуйте! Взял команду со своего мода. 
</p>

<p style="text-align:center;">
	Как выглядит:
</p>

<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" href="//storage.yandexcloud.net/pawnorus/monthly_2023_09/64f36a43040c4__2023-09-02_200036402.png.3b39e6f79699a71a9356d973d66af94b.png" data-fileid="14175" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="14175" data-unique="szrpwc4j3" src="//storage.yandexcloud.net/pawnorus/monthly_2023_09/64f36a43e9b93__2023-09-02_200036402.thumb.png.499dada520f3d3ada335e6f258097c36.png" onError="this.src='https://pawno-rus.ru/uploads/onerror.png'" alt="изображение_2023-09-02_200036402.png"></a>
		</p>
	</div>
</div>

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

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

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="CMD:loaa3(playerid)&#13;
{&#13;
    if(PI[playerid][pFullDostup] &lt; 2) return false;&#13;
    if(!ADuty{playerid}) return SendClientMessage(playerid, COLOR_GREY, NO_DUTY_TEXT);&#13;
    //[Skin: 163, Model: 19352]&#13;
	SetPlayerAttachedObject(playerid, 0, 19352, 2, 0.0829, 0.0130, 0.0000, -100.6999, 120.0999, -85.4000, 0.9490, 1.1439, 1.1269, 0, 0);&#13;
&#13;
	//[Skin: 163, Model: 19030]&#13;
	SetPlayerAttachedObject(playerid, 1, 19030, 2, 0.0680, 0.0349, 0.0000, 107.0000, -83.4001, -163.0996, 0.8470, 1.0709, 1.2939, 0, 0);&#13;
&#13;
	//[Skin: 163, Model: 11731]&#13;
	SetPlayerAttachedObject(playerid, 2, 11731, 1, 0.0099, 0.0419, 0.0610, -3.9000, 153.6000, -84.2000, 0.1140, 0.2629, 0.1879, 0, 16777215);&#13;
&#13;
	//[Skin: 163, Model: 19347]&#13;
	SetPlayerAttachedObject(playerid, 3, 19347, 1, -0.0549, 0.2680, -0.1000, 83.7999, -12.1000, 0.0000, 1.8899, 1.8039, 0.4760, 0, 0);&#13;
&#13;
	//[Skin: 163, Model: 19339]&#13;
	SetPlayerAttachedObject(playerid, 4, 19339, 1, 0.5440, -0.0390, -0.5799, -0.9999, 102.1999, -88.4999, 0.9319, 0.8089, 0.8119, 0, 0);&#13;
	return 1;&#13;
}">
<span><span class="mtk1">CMD:loaa3(playerid)</span></span>
<span><span class="mtk1">{</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(PI[playerid][pFullDostup] &lt; </span><span class="mtk7">2</span><span class="mtk1">) </span><span class="mtk6">return</span><span class="mtk1"> </span><span class="mtk6">false</span><span class="mtk1">;</span></span>
<span><span class="mtk1">    </span><span class="mtk6">if</span><span class="mtk1">(!ADuty{playerid}) </span><span class="mtk6">return</span><span class="mtk1"> SendClientMessage(playerid, COLOR_GREY, NO_DUTY_T</span><span class="mtk1">EXT);</span></span>
<span><span class="mtk1">    </span><span class="mtk8">//[Skin: 163, Model: 19352]</span></span>
<span><span class="mtk1">    SetPlayerAttachedObject(playerid, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">19352</span><span class="mtk1">, </span><span class="mtk7">2</span><span class="mtk1">, </span><span class="mtk7">0.0829</span><span class="mtk1">, </span><span class="mtk7">0.0130</span><span class="mtk1">, </span><span class="mtk7">0.0000</span><span class="mtk1">, -</span><span class="mtk7">100.6999</span><span class="mtk1">, </span><span class="mtk7">120.0999</span><span class="mtk1">, -</span><span class="mtk7">85.4000</span><span class="mtk1">, </span><span class="mtk7">0.9490</span><span class="mtk1">, </span><span class="mtk7">1.1439</span><span class="mtk1">, </span><span class="mtk7">1.1269</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">);</span></span>

<span><span class="mtk1">    </span><span class="mtk8">//[Skin: 163, Model: 19030]</span></span>
<span><span class="mtk1">    SetPlayerAttachedObject(playerid, </span><span class="mtk7">1</span><span class="mtk1">, </span><span class="mtk7">19030</span><span class="mtk1">, </span><span class="mtk7">2</span><span class="mtk1">, </span><span class="mtk7">0.0680</span><span class="mtk1">, </span><span class="mtk7">0.0349</span><span class="mtk1">, </span><span class="mtk7">0.0000</span><span class="mtk1">, </span><span class="mtk7">107.0000</span><span class="mtk1">, -</span><span class="mtk7">83.4001</span><span class="mtk1">, -</span><span class="mtk7">163.0996</span><span class="mtk1">, </span><span class="mtk7">0.8470</span><span class="mtk1">, </span><span class="mtk7">1.0709</span><span class="mtk1">, </span><span class="mtk7">1.2939</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">);</span></span>

<span><span class="mtk1">    </span><span class="mtk8">//[Skin: 163, Model: 11731]</span></span>
<span><span class="mtk1">    SetPlayerAttachedObject(playerid, </span><span class="mtk7">2</span><span class="mtk1">, </span><span class="mtk7">11731</span><span class="mtk1">, </span><span class="mtk7">1</span><span class="mtk1">, </span><span class="mtk7">0.0099</span><span class="mtk1">, </span><span class="mtk7">0.0419</span><span class="mtk1">, </span><span class="mtk7">0.0610</span><span class="mtk1">, -</span><span class="mtk7">3.9000</span><span class="mtk1">, </span><span class="mtk7">153.6000</span><span class="mtk1">, -</span><span class="mtk7">84.2000</span><span class="mtk1">, </span><span class="mtk7">0.1140</span><span class="mtk1">, </span><span class="mtk7">0.2629</span><span class="mtk1">, </span><span class="mtk7">0.1879</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">16777215</span><span class="mtk1">);</span></span>

<span><span class="mtk1">    </span><span class="mtk8">//[Skin: 163, Model: 19347]</span></span>
<span><span class="mtk1">    SetPlayerAttachedObject(playerid, </span><span class="mtk7">3</span><span class="mtk1">, </span><span class="mtk7">19347</span><span class="mtk1">, </span><span class="mtk7">1</span><span class="mtk1">, -</span><span class="mtk7">0.0549</span><span class="mtk1">, </span><span class="mtk7">0.2680</span><span class="mtk1">, -</span><span class="mtk7">0.1000</span><span class="mtk1">, </span><span class="mtk7">83.7999</span><span class="mtk1">, -</span><span class="mtk7">12.1000</span><span class="mtk1">, </span><span class="mtk7">0.0000</span><span class="mtk1">, </span><span class="mtk7">1.8899</span><span class="mtk1">, </span><span class="mtk7">1.8039</span><span class="mtk1">, </span><span class="mtk7">0.4760</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">);</span></span>

<span><span class="mtk1">    </span><span class="mtk8">//[Skin: 163, Model: 19339]</span></span>
<span><span class="mtk1">    SetPlayerAttachedObject(playerid, </span><span class="mtk7">4</span><span class="mtk1">, </span><span class="mtk7">19339</span><span class="mtk1">, </span><span class="mtk7">1</span><span class="mtk1">, </span><span class="mtk7">0.5440</span><span class="mtk1">, -</span><span class="mtk7">0.0390</span><span class="mtk1">, -</span><span class="mtk7">0.5799</span><span class="mtk1">, -</span><span class="mtk7">0.9999</span><span class="mtk1">, </span><span class="mtk7">102.1999</span><span class="mtk1">, -</span><span class="mtk7">88.4999</span><span class="mtk1">, </span><span class="mtk7">0.9319</span><span class="mtk1">, </span><span class="mtk7">0.8089</span><span class="mtk1">, </span><span class="mtk7">0.8119</span><span class="mtk1">, </span><span class="mtk7">0</span><span class="mtk1">, </span><span class="mtk7">0</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>
</pre>

<p style="text-align:center;">
	Будут вопросы пишите!
</p>
]]></description><guid isPermaLink="false">7411</guid><pubDate>Tue, 22 Aug 2023 20:09:57 +0000</pubDate></item><item><title>&#x41F;&#x440;&#x438;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x438;&#x435; &#x43F;&#x440;&#x438; &#x432;&#x445;&#x43E;&#x434;&#x435; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;</title><link>https://pawno-rus.com/topic/333-privetstvie-pri-vhode-na-server/</link><description><![CDATA[
<p>
	Проще этой системы, наверное, нет ничего. При входе на сервер появится gametext, который поприветствует игрока на сервере. 
</p>

<p>
	Находим паблик OnPlayerConnect и в него вставляем:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9878_4">
<span class="typ">GameTextForPlayer</span><span class="pun">(</span><span class="pln">playerid</span><span class="pun">,</span><span class="pln"> </span><span class="str">"~n~Welcome~n~ ~n~To ~r~ ~r~]RP]Ваш сервер]"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">18000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">);</span></pre>

<p>
	Получится примерно вот так:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="89" data-unique="ftihcbxzz" src="//storage.yandexcloud.net/pawnorus/monthly_2017_08/5986176eab2a2_watermarked-Screenshot_10.png.7e3fd6c3b140af205d9177f139c8a1d5.png" alt="watermarked - Screenshot_10.png"></p>
]]></description><guid isPermaLink="false">333</guid><pubDate>Sat, 05 Aug 2017 19:07:31 +0000</pubDate></item><item><title>&#x41F;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x435; &#x437;&#x430;&#x442;&#x435;&#x43C;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x430;</title><link>https://pawno-rus.com/topic/7410-plavnoe-zatemnenie-ekrana/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="color:#1c2837;">Данный скрипт добавляет возможность использовать плавно затухающий и проявляющий TextDraw на весь экран для переключения игрока между игровыми сценами. Подключать необходимо после стандартных библиотек.</span>
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="#include &lt;background&gt;">
<span><span class="mtk6">#include</span><span class="mtk1"> </span><span class="mtk6">&lt;</span><span class="mtk20">background</span><span class="mtk6">&gt;</span></span>
</pre>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="TogglePlayerBackground(playerid, pause=0, backgroundid=1)">
<span><span class="mtk1">TogglePlayerBackground(playerid, pause=</span><span class="mtk7">0</span><span class="mtk1">, backgroundid=</span><span class="mtk7">1</span><span class="mtk1">)</span></span>
</pre>

<ul style="color:#1c2837;">
<li>
		<span style="color:#8e44ad;"><strong>playerid</strong> </span>- ID игрока
	</li>
	<li>
		<span style="color:#8e44ad;"><strong>pause</strong> </span>- время паузы после полного затухания и начала проявления в миллисекундах<span> </span><em>(по умолчанию 0)</em>
	</li>
	<li>
		<span style="color:#8e44ad;"><strong>backgroundid</strong> </span>- ID сцены<span> </span><em>(по умолчанию 1, использовать меньший ID невозможно)</em>
	</li>
</ul>
<p style="text-align:center;">
	 
</p>

<p style="text-align:center;">
	<strong style="color:#1c2837;">Особенности</strong><span style="color:#1c2837;">:</span>
</p>

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

<ul>
<li>
		<strong><span style="color:#8e44ad;">Можно </span></strong>настроить время ожидания, при затемнении, для каждого игрока отдельно. Например, использовать для входа в интерьер, где необходимо прогрузить объекты.
	</li>
	<li>
		<strong><span style="color:#8e44ad;">Удобно </span></strong>настраивать действия при переходах благодаря статусу игрока:
	</li>
</ul>
<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="BACKGROUND_STATUS_OFF - затемнение не активно&#13;
BACKGROUND_STATUS_ON - затемнение активно">
<span><span class="mtk1">BACKGROUND_STATUS_OFF - затемнение не активно</span></span>
<span><span class="mtk1">BACKGROUND_STATUS_ON - затемнение активно</span></span>
</pre>

<ul>
<li style="color:#1c2837;">
		<span style="color:#8e44ad;"><strong>Возможно </strong></span>настроить плавность перехода по времени<span> </span><em>(по умолчанию 20 мс для смены цвета)</em>.
	</li>
	<li style="color:#1c2837;">
		<span style="color:#8e44ad;"><strong>Возможно </strong></span>настроить цвет фона<span> </span><em>(по умолчанию чёрный)</em>.
	</li>
	<li style="color:rgb(28,40,55);">
		<span style="color:#8e44ad;"><strong>Используется </strong></span>PlayerText для создания фона. Не перекрывается текст, созданный так же через PlayerText
	</li>
</ul>
<p style="color:rgb(28,40,55);text-align:center;">
	 
</p>

<p style="color:rgb(28,40,55);text-align:center;">
	<span style="color:#1c2837;"><strong>В скрипте реализованы автовызываемые функции:</strong></span>
</p>

<p style="color:rgb(28,40,55);text-align:center;">
	 
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="OnPlayerBackgroundUpdate(playerid, backgroundid, status) // вызывается при изменении статуса сцены игрока">
<span><span class="mtk1">OnPlayerBackgroundUpdate(playerid, backgroundid, </span><span class="mtk1">status) </span><span class="mtk8">// вызывается при изменении статуса сцены игрока</span></span>
</pre>

<p style="color: rgb(28, 40, 55);">
	<a class="ipsAttachLink" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=14164" data-fileid="14164" rel="">background.inc</a>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7410</guid><pubDate>Tue, 22 Aug 2023 14:13:49 +0000</pubDate></item><item><title>&#x412;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B; &#x43E;&#x442; &#x43B;&#x438;&#x446;&#x430; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44F; [dc_cmd/zcmd + sscanf2]</title><link>https://pawno-rus.com/topic/7412-vypolnenie-komandy-ot-lica-drugogo-polzovatelya-dc_cmdzcmd-sscanf2/</link><description><![CDATA[
<p>
	Эта команда позволит администратору написать в чат от имени другого игрока. Также можно писать команды, но результат выполнения будет отсылаться цели, а не админу.
</p>

<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="CMD:doas(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, &quot;Вы не админ!&quot;); // Замените на свою проверку админа
    new victim, text[120];
    if(sscanf(params, &quot;u&quot;, victim)) return SendClientMessage(playerid, -1, &quot;Вы не ввели пользователя!&quot;);      // Замените цвет
    if(sscanf(params, &quot;us[120]&quot;, victim, text)) return SendClientMessage(playerid, -1, &quot;Вы не ввели текст!&quot;); // Замените цвет
    if(text[0] == '/') // Проверка на команду
        DC_CMD(victim, text); // Отправление команды обработчику DC CMD
        OnPlayerCommandText(victim, text) // Если у вас ZCMD
    else // Если не команда
        OnPlayerText(victim, text); // Отправление текста вашему обработчику
    return 1;
}">
<span><span>CMD:doas(playerid, params[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(!IsPlayerAdmin(playerid)) </span><span>return</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Вы не админ!"</span><span>); </span><span>// Замените на свою проверку админа</span></span>
<span><span>    </span><span>new</span><span> victim, text[</span><span>120</span><span>];</span></span>
<span><span>    </span><span>if</span><span>(sscanf(params, </span><span>"u"</span><span>, victim)) </span><span>return</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Вы не ввели пользователя!"</span><span>);      </span><span>// Замените цвет</span></span>
<span><span>    </span><span>if</span><span>(sscanf(params, </span><span>"us[120]"</span><span>, victim, text)) </span><span>return</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Вы не ввели текст!"</span><span>); </span><span>// Замените цвет</span></span>
<span><span>    </span><span>if</span><span>(text[</span><span>0</span><span>] == </span><span>'/'</span><span>) </span><span>// Проверка на команду</span></span>
<span><span>        DC_CMD(victim, text); </span><span>// Отправление команды обработчику DC CMD</span></span>
<span><span>        OnPlayerCommandText(victim, text) </span><span>// Если у вас ZCMD</span></span>
<span><span>    </span><span>else</span><span> </span><span>// Если не команда</span></span>
<span><span>        OnPlayerText(victim, text); </span><span>// Отправление текста вашему обработчику</span></span>
<span><span>    </span><span>return</span><span> </span><span>1</span><span>;</span></span>
<span><span>}</span></span>
</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7412</guid><pubDate>Wed, 23 Aug 2023 06:06:45 +0000</pubDate></item><item><title>[&#x418;&#x43D;&#x43A;&#x43B;&#x443;&#x434;] Android Checker</title><link>https://pawno-rus.com/topic/7403-inklud-android-checker/</link><description><![CDATA[
<p>
	Вы хотите сделать вход только с андроид клиента? Не беда! Есть такой инклуд!
</p>

<p>
	[Mysql]
</p>

<p>
	<a class="ipsAttachLink" href="https://pawno-rus.com/applications/core/interface/file/attachment.php?id=14150" data-fileid="14150" rel="">android_checker.inc</a>
</p>
]]></description><guid isPermaLink="false">7403</guid><pubDate>Mon, 21 Aug 2023 16:57:20 +0000</pubDate></item><item><title>&#x423;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x430; &#x43F;&#x430;&#x440;&#x43E;&#x43B;&#x44F; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440; [dc_cmd + sscanf2]</title><link>https://pawno-rus.com/topic/7409-ustanovka-parolya-na-server-dc_cmd-sscanf2/</link><description><![CDATA[
<p>
	Вы можете поставить пароль на ваш сервер, не входя в RCon и чтобы уже играющие игроки тоже не могли продолжить играть.
</p>

<p>
	Если у вас возникли вопросы, пишите.
</p>

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

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode ipsCodeSubmitted" codelang="cpp" plaincode="// В место глобальных переменных
new slock_password[32] = &quot;&quot;;

// В ваш player enum
enum PlayerInfo
{
    ...
    pServerLockLogged = 0,
    ...
}

// В место с константами или в ваш dialog enum
#define DIALOG_SLOCK_INPUT Введите число
// ИЛИ
enum Dialogs
{
    ...
    DIALOG_SLOCK_INPUT,
    ...
}

// В место с командами
CMD:lockserver(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, &quot;Вы не RCon админ!&quot;); // Замените на вашу проверку админа
    if(params[0] == '\0') return SendClientMessage(playerid, -1, &quot;Вы не указали пароль!&quot;)     // Замените цвет
    slock_password = params;
    for(new i = 0; i &lt; MAX_PLAYERS; i++)
        if(IsPlayerConnected(playerid) &amp;&amp; !IsPlayerAdmin(playerid)) // Замените IsPlayerAdmin на вашу проверку админа
            ShowPlayerDialog(playerid, DIALOG_SLOCK_INPUT, DIALOG_STYLE_INPUT, &quot;Авторизация&quot;, &quot;Администратор установил пароль на сервер.\nВведите пароль чтобы продолжить играть.&quot;, &quot;Войти&quot;, &quot;Выйти&quot;);
}

public OnPlayerConnect(playerid)
{
    if(s_password[0] != '\0' &amp;&amp; !PlayerInfo[playerid][pServerLockLogged]) // Если у вас enum(замените имя на своё)
    if(s_password[0] != '\0' &amp;&amp; !GetPVarInt(playerid, &quot;slock_logged&quot;)     // Если у вас PVar
        ShowPlayerDialog(playerid, DIALOG_SLOCK_INPUT, DIALOG_STYLE_INPUT, &quot;Авторизация&quot;, &quot;Администратор установил пароль на сервер.\nВведите пароль чтобы продолжить авторизацию/регистрацию.&quot;, &quot;Войти&quot;, &quot;Выйти&quot;);
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    else if(dialogid == DIALOG_SLOCK_INPUT) // Если у вас if-elseif
    case DIALOG_SLOCK_INPUT:                // Если у вас switch
    {
        if(!response || inputtext[0] == '\0' || !strcmp(inputtext, slock_password)) // Если игрок нажал Esc, ничего не написал или неправильный пароль
            Kick(playerid); // Можно заменить, если у вас есть красивый кик на TextDraw или GameText
        else
        {
            SetPVarInt(playerid, &quot;slock_logged&quot;, 1);     // Если у вас PVar
            PlayerInfo[playerid][pServerLockLogged] = 1; // Если у вас enum(замените имя на своё)
            if(!PlayerInfo[playerid][pLogged])           // Замените на свою проверку на авторизованность
                OnPlayerConnect(playerid);
        }
    }
}">

<span><span>// В место глобальных переменных</span></span>
<span><span>new</span><span> slock_password[</span><span>32</span><span>] = </span><span>""</span><span>;</span></span>

<span><span>// В ваш player enum</span></span>
<span><span>enum</span><span> PlayerInfo</span></span>
<span><span>{</span></span>
<span><span>    ...</span></span>
<span><span>    pServerLockLogged = </span><span>0</span><span>,</span></span>
<span><span>    ...</span></span>
<span><span>}</span></span>

<span><span>// В место с константами или в ваш dialog enum</span></span>
<span><span>#define</span><span> DIALOG_SLOCK_INPUT Введите число</span></span>
<span><span>// ИЛИ</span></span>
<span><span>enum</span><span> Dialogs</span></span>
<span><span>{</span></span>
<span><span>    ...</span></span>
<span><span>    DIALOG_SLOCK_INPUT,</span></span>
<span><span>    ...</span></span>
<span><span>}</span></span>

<span><span>// В место с командами</span></span>
<span><span>CMD:lockserver(playerid, params[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(!IsPlayerAdmin(playerid)) </span><span>return</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Вы не RCon админ!"</span><span>); </span><span>// Замените на вашу проверку админа</span></span>
<span><span>    </span><span>if</span><span>(params[</span><span>0</span><span>] == </span><span>'</span><span>\</span><span>0</span><span>'</span><span>) </span><span>return</span><span> SendClientMessage(playerid, -</span><span>1</span><span>, </span><span>"Вы не указали пароль!"</span><span>)     </span><span>// Замените цвет</span></span>
<span><span>    slock_password = params;</span></span>
<span><span>    </span><span>for</span><span>(</span><span>new</span><span> i = </span><span>0</span><span>; i &lt; MAX_PLAYERS; i++)</span></span>
<span><span>        </span><span>if</span><span>(IsPlayerConnected(playerid) &amp;&amp; </span><span>!IsPlayerAdmin(playerid)) </span><span>// Замените IsPlayerAdmin на вашу проверку админа</span></span>
<span><span>            ShowPlayerDialog(playerid, </span><span>DIALOG_SLOCK_INPUT, DIALOG_STYLE_INPUT, </span><span>"Авторизация"</span><span>, </span><span>"Администратор установил пароль на </span><span>сервер.\nВведите пароль чтобы продолжить играть."</span><span>, </span><span>"Войти"</span><span>, </span><span>"Выйти"</span><span>);</span></span>
<span><span>}</span></span>

<span><span>public</span><span> OnPlayerConnect(playerid)</span></span>
<span><span>{</span></span>
<span><span>    </span><span>if</span><span>(s_password[</span><span>0</span><span>] != </span><span>'</span><span>\</span><span>0</span><span>'</span><span> &amp;&amp; !PlayerInfo[playerid][pServerLockLogged]) </span><span>// Если у вас enum(замените имя на своё)</span></span>
<span><span>    </span><span>if</span><span>(s_password[</span><span>0</span><span>] != </span><span>'</span><span>\</span><span>0</span><span>'</span><span> &amp;&amp; !GetPVarInt(playerid, </span><span>"slock_logged"</span><span>)     </span><span>// Если у вас PVar</span></span>
<span><span>        ShowPlayerDialog(playerid, </span><span>DIALOG_SLOCK_INPUT, DIALOG_STYLE_INPUT, </span><span>"Авторизация"</span><span>, </span><span>"Администратор установил пароль на </span><span>сервер.\nВведите пароль чтобы продолжить </span><span>авторизацию/регистрацию."</span><span>, </span><span>"Войти"</span><span>, </span><span>"Выйти"</span><span>);</span></span>
<span><span>}</span></span>

<span><span>public</span><span> OnDialogResponse(playerid, dialogid, response, li</span><span>stitem, inputtext[])</span></span>
<span><span>{</span></span>
<span><span>    </span><span>else</span><span> </span><span>if</span><span>(dialogid == DIALOG_SLOCK_INPUT) </span><span>// Если у вас if-elseif</span></span>
<span><span>    </span><span>case</span><span> DIALOG_SLOCK_INPUT:                </span><span>// Если у вас switch</span></span>
<span><span>    {</span></span>
<span><span>        </span><span>if</span><span>(!response || inputtext[</span><span>0</span><span>] == </span><span>'</span><span>\</span><span>0</span><span>'</span><span> || !strcmp(inputtext, slock_password)) </span><span>// Если игрок нажал Esc, ничего не написал или </span><span>неправильный пароль</span></span>
<span><span>            Kick(playerid); </span><span>// Можно заменить, если у вас есть красивый кик на </span><span>TextDraw или GameText</span></span>
<span><span>        </span><span>else</span></span>
<span><span>        {</span></span>
<span><span>            SetPVarInt(playerid, </span><span>"slock_logged"</span><span>, </span><span>1</span><span>);     </span><span>// Если у вас PVar</span></span>
<span><span>            </span><span>PlayerInfo[playerid][pServerLockLogged] = </span><span>1</span><span>; </span><span>// Если у вас enum(замените имя на своё)</span></span>
<span><span>            </span><span>if</span><span>(!PlayerInfo[playerid][pLogged])           </span><span>// Замените на свою проверку на авторизованность</span></span>
<span><span>                OnPlayerConnect(playerid);</span></span>
<span><span>        }</span></span>
<span><span>    }</span></span>
<span><span>}</span></span>
</pre>

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

<p>
	 
</p>
]]></description><guid isPermaLink="false">7409</guid><pubDate>Tue, 22 Aug 2023 12:24:07 +0000</pubDate></item></channel></rss>
