<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[HLPlayer.com | Half-Life ve CS 1.6 Oyun Forumu - Pluginler]]></title>
		<link>https://www.hlplayer.com/</link>
		<description><![CDATA[HLPlayer.com | Half-Life ve CS 1.6 Oyun Forumu - https://www.hlplayer.com]]></description>
		<pubDate>Wed, 09 Sep 2026 16:55:17 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Server Bilgi HUD plugini]]></title>
			<link>https://www.hlplayer.com/konu-server-bilgi-hud-plugini.html</link>
			<pubDate>Sat, 21 Mar 2026 11:37:33 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.hlplayer.com/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.hlplayer.com/konu-server-bilgi-hud-plugini.html</guid>
			<description><![CDATA[<img src="https://i.imgur.com/DFABD0c.png" loading="lazy"  alt="[Resim: DFABD0c.png]" class="mycode_img" /><br />
<br />
<br />
<div style="text-align: center;" class="mycode_align">🎮 Server Bilgi HUD Plugin (IP, Saat, FPS, Skor Gösterimi)</div>
<br />
<br />
Merhaba arkadaşlar,<br />
Sizlere kendi kodladığım kullanışlı bir <span style="font-weight: bold;" class="mycode_b">Server Bilgi HUD</span> pluginini paylaşıyorum.<br />
Bu plugin sayesinde oyuncular oyun içinde anlık olarak birçok bilgiyi HUD üzerinden görebilir.<br />
<br />
<br />
⚙️ Özellikler<br />
✔ Oyuncunun IP adresini gösterir<br />
✔ Kalan harita süresini gösterir<br />
✔ Gerçek saat bilgisi (HH:MM:SS)<br />
✔ Server FPS bilgisi<br />
✔ Oyuncunun skor bilgisi (öldürme / ölüm)<br />
✔ Admin olup olmadığını gösterir<br />
✔ Round sayısını gösterir<br />
✔ HUD renk ve konum ayarlanabilir<br />
<hr class="mycode_hr" />
🖼️ HUD İçeriği<br />
Oyuncular ekranda şu bilgileri görür:<ul class="mycode_list"><li>IP Adresi <br />
</li>
<li>Kalan süre <br />
</li>
<li>Saat <br />
</li>
<li>Server FPS <br />
</li>
<li>Kill / Death <br />
</li>
<li>Admin durumu <br />
</li>
<li>Round bilgisi <br />
</li>
</ul>
<hr class="mycode_hr" />
📥 Dosyalar<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">hlplayerserverhud.sma</span> (kaynak kod) <br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">hlplayerserverhud.amxx</span> (derlenmiş plugin) <br />
</li>
</ul>
<hr class="mycode_hr" />
🔧 Kurulum<br />
<ol type="1" class="mycode_list"><li><div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>hlplayerserverhud.amxx</code></div></div> dosyasını<br />
 👉 <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/plugins</code></div></div>klasörüne atın<br />
</li>
<li><div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>plugins.ini</code></div></div> dosyasını açın ve en alta ekleyin: <br />
</li>
</ol>
<br />
hlplayerserverhud.amxx<br />
<br />
<ol type="1" class="mycode_list"><li>Sunucuyu yeniden başlatın <br />
</li>
</ol>
<br />
<br />
⚙️ Cvar Ayarları<br />
<br />
srv_hud_rgb "0 255 0"    // HUD renk (R G B)<br />
srv_hud_x "0.11"        // X konumu<br />
srv_hud_y "0.01"        // Y konumu<br />
srv_hud_effects "0"      // HUD efektleri<br />
<br />
💡 Notlar<ul class="mycode_list"><li>Plugin sadece <span style="font-weight: bold;" class="mycode_b">yaşayan oyunculara</span> HUD gösterir <br />
</li>
<li>FPS bilgisi anlik hesaplanir <br />
</li>
<li>Admin kontrolu otomatik yapilir <br />
</li>
<li>Performans dostudur<br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.hlplayer.com/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=7" target="_blank" title="">hlplayer server hud plugini.zip</a> (Dosya Boyutu: 6.34 KB / İndirme Sayısı: 0)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<img src="https://i.imgur.com/DFABD0c.png" loading="lazy"  alt="[Resim: DFABD0c.png]" class="mycode_img" /><br />
<br />
<br />
<div style="text-align: center;" class="mycode_align">🎮 Server Bilgi HUD Plugin (IP, Saat, FPS, Skor Gösterimi)</div>
<br />
<br />
Merhaba arkadaşlar,<br />
Sizlere kendi kodladığım kullanışlı bir <span style="font-weight: bold;" class="mycode_b">Server Bilgi HUD</span> pluginini paylaşıyorum.<br />
Bu plugin sayesinde oyuncular oyun içinde anlık olarak birçok bilgiyi HUD üzerinden görebilir.<br />
<br />
<br />
⚙️ Özellikler<br />
✔ Oyuncunun IP adresini gösterir<br />
✔ Kalan harita süresini gösterir<br />
✔ Gerçek saat bilgisi (HH:MM:SS)<br />
✔ Server FPS bilgisi<br />
✔ Oyuncunun skor bilgisi (öldürme / ölüm)<br />
✔ Admin olup olmadığını gösterir<br />
✔ Round sayısını gösterir<br />
✔ HUD renk ve konum ayarlanabilir<br />
<hr class="mycode_hr" />
🖼️ HUD İçeriği<br />
Oyuncular ekranda şu bilgileri görür:<ul class="mycode_list"><li>IP Adresi <br />
</li>
<li>Kalan süre <br />
</li>
<li>Saat <br />
</li>
<li>Server FPS <br />
</li>
<li>Kill / Death <br />
</li>
<li>Admin durumu <br />
</li>
<li>Round bilgisi <br />
</li>
</ul>
<hr class="mycode_hr" />
📥 Dosyalar<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">hlplayerserverhud.sma</span> (kaynak kod) <br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">hlplayerserverhud.amxx</span> (derlenmiş plugin) <br />
</li>
</ul>
<hr class="mycode_hr" />
🔧 Kurulum<br />
<ol type="1" class="mycode_list"><li><div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>hlplayerserverhud.amxx</code></div></div> dosyasını<br />
 👉 <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/plugins</code></div></div>klasörüne atın<br />
</li>
<li><div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>plugins.ini</code></div></div> dosyasını açın ve en alta ekleyin: <br />
</li>
</ol>
<br />
hlplayerserverhud.amxx<br />
<br />
<ol type="1" class="mycode_list"><li>Sunucuyu yeniden başlatın <br />
</li>
</ol>
<br />
<br />
⚙️ Cvar Ayarları<br />
<br />
srv_hud_rgb "0 255 0"    // HUD renk (R G B)<br />
srv_hud_x "0.11"        // X konumu<br />
srv_hud_y "0.01"        // Y konumu<br />
srv_hud_effects "0"      // HUD efektleri<br />
<br />
💡 Notlar<ul class="mycode_list"><li>Plugin sadece <span style="font-weight: bold;" class="mycode_b">yaşayan oyunculara</span> HUD gösterir <br />
</li>
<li>FPS bilgisi anlik hesaplanir <br />
</li>
<li>Admin kontrolu otomatik yapilir <br />
</li>
<li>Performans dostudur<br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.hlplayer.com/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=7" target="_blank" title="">hlplayer server hud plugini.zip</a> (Dosya Boyutu: 6.34 KB / İndirme Sayısı: 0)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Counter Strike 1.6 Ultimate Parachute Gelişmiş Paraşüt Sistemi]]></title>
			<link>https://www.hlplayer.com/konu-counter-strike-1-6-ultimate-parachute-gelismis-parasut-sistemi.html</link>
			<pubDate>Sun, 08 Mar 2026 01:42:00 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.hlplayer.com/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.hlplayer.com/konu-counter-strike-1-6-ultimate-parachute-gelismis-parasut-sistemi.html</guid>
			<description><![CDATA[<img src="https://i.imgur.com/6Hj7mYF.jpeg" loading="lazy"  alt="[Resim: 6Hj7mYF.jpeg]" class="mycode_img" /><br />
<br />
<br />
🪂 HLPlayer.com Ultimate Parachute v1.0<br />
Gelişmiş Paraşüt Sistemi<br />
<span style="font-weight: bold;" class="mycode_b">Coder:</span> Y4S!N61<br />
<span style="font-weight: bold;" class="mycode_b">Platform:</span> Counter-Strike 1.6 / AMX Mod X<br />
<span style="font-weight: bold;" class="mycode_b">Versiyon:</span> 1.0<br />
<hr class="mycode_hr" />
📌 Plugin Hakkında<br />
HLPlayer.com Ultimate Parachute, Counter-Strike 1.6 sunucuları için geliştirilmiş <span style="font-weight: bold;" class="mycode_b">gelişmiş ve tamamen ayarlanabilir bir paraşüt sistemidir</span>.<br />
Klasik paraşüt pluginlerinden farklı olarak oyunculara <span style="font-weight: bold;" class="mycode_b">menü üzerinden birçok özelliği değiştirme imkanı sağlar.</span><br />
Oyuncular;<ul class="mycode_list"><li>Paraşüt açılma modunu<br />
</li>
<li>Düşüş hızını<br />
</li>
<li>Paraşüt modelini<br />
</li>
<li>Paraşüt iz efektini<br />
</li>
<li>İz rengini<br />
</li>
<li>İz uzunluğunu<br />
</li>
<li>Kamera modunu<br />
</li>
</ul>
kendileri seçebilir.<br />
Tüm ayarlar <span style="font-weight: bold;" class="mycode_b">nVault sistemi ile kayıt edilir</span> ve oyuncu tekrar girdiğinde aynı ayarlar yüklenir.<br />
<hr class="mycode_hr" />
⚙ Özellikler<br />
🪂 3 Farklı Paraşüt Açma Sistemi<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Basılı Tut</span> (E tuşu)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Tıkla Aç / Kapat</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Otomatik Açılma (Auto Deploy)</span><br />
</li>
</ul>
<hr class="mycode_hr" />
⚡ Ayarlanabilir Düşüş Hızı<br />
Config üzerinden sınırsız hız eklenebilir.<br />
Örnek:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[speeds]<br />
-100 "Normal"<br />
-60 "Yavaş"<br />
-20 "Ultra Slow"</code></div></div><hr class="mycode_hr" />
🎥 Kamera Sistemi<br />
Paraşüt kullanırken:<ul class="mycode_list"><li><ol type="1" class="mycode_list"><li>şahıs<br />
</li>
</ol>
</li>
<li><ol type="1" class="mycode_list"><li>şahıs<br />
</li>
</ol>
</li>
</ul>
kamera seçilebilir.<br />
<hr class="mycode_hr" />
🎨 Paraşüt Model Sistemi<br />
Config üzerinden sınırsız model eklenebilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[models]<br />
models/parachute1.mdl "Classic"<br />
models/parachute2.mdl "Military"<br />
models/parachute3.mdl "VIP"</code></div></div><hr class="mycode_hr" />
🌈 Trail (İz) Efekt Sistemi<br />
Paraşüt kullanırken oyuncunun arkasında <span style="font-weight: bold;" class="mycode_b">görsel iz efekti oluşur.</span><br />
Configten farklı sprite izleri eklenebilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[trails]<br />
sprites/smoke.spr "Smoke"<br />
sprites/laser.spr "Laser"</code></div></div><hr class="mycode_hr" />
🎨 İz Renk Sistemi<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[trail_colors]<br />
255 0 0 "Kırmızı"<br />
0 255 0 "Yeşil"<br />
0 0 255 "Mavi"<br />
255 255 0 "Sarı"</code></div></div><hr class="mycode_hr" />
📏 İz Uzunluğu<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[trail_lengths]<br />
10 "Kısa"<br />
30 "Orta"<br />
60 "Uzun"</code></div></div><hr class="mycode_hr" />
🔊 Paraşüt Açılma Sesi<br />
Configten özel ses eklenebilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>deploy_sound parachute/deploy.wav</code></div></div><hr class="mycode_hr" />
💾 Oyuncu Ayarlarını Kaydetme<br />
Plugin <span style="font-weight: bold;" class="mycode_b">nVault</span> kullanır.<br />
Oyuncunun şu ayarları kayıt edilir:<ul class="mycode_list"><li>Açılma modu<br />
</li>
<li>Düşüş hızı<br />
</li>
<li>Kamera modu<br />
</li>
<li>Model<br />
</li>
<li>Trail<br />
</li>
<li>Trail rengi<br />
</li>
<li>Trail uzunluğu<br />
</li>
</ul>
<hr class="mycode_hr" />
🔐 Yetki Sistemi<br />
Admin flag ile paraşüt kullanımı sınırlandırılabilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>access_flags "b"</code></div></div><hr class="mycode_hr" />
👥 Takım Yetkisi<br />
Sadece belirli takımlar kullanabilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>access_team_tt 1<br />
access_team_ct 1</code></div></div><hr class="mycode_hr" />
🔫 Paraşütte Silah Kullanımı<br />
Paraşüt açıkken silah kullanımı kapatılabilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>weapon_usage 0</code></div></div><br />
<br />
🔢 Round Başına Kullanım Limiti<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>deploys_per_round 3</code></div></div><br />
🕹 Oyuncu Komutu<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/parasut</code></div></div>Oyuncu paraşüt ayar menüsünü açar.<br />
<br />
📂 Config Dosyası<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/configs/ultimate_parachute.ini</code></div></div>Tüm ayarlar buradan yapılır.<br />
<br />
<br />
📦 Kurulum<br />
<br />
1️⃣ <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/plugins</code></div></div><br />
2️⃣<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>plugins.ini</code></div></div> içine ekleyin<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>ultimate_parachute.amxx</code></div></div><br />
3️⃣ Sunucuyu restart edin.<br />
<br />
<br />
<a href="https://disk.yandex.com.tr/d/JI7UQnhlJS9jiw" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: xx-large;" class="mycode_size"><span style="font-family: Impact;" class="mycode_font">İNDİRMEK İÇİN TIKLA</span></span></span></a><br />
<br />
<br />
📊 Uyumlu Sistemler<br />
✔ ReHLDS<br />
✔ ReGameDLL<br />
✔ AMX Mod X 1.8+<br />
✔ Steam / NoSteam<br />
<br />
<br />
👨‍💻 Geliştirici ; <span style="font-weight: bold;" class="mycode_b">Y4S!N61</span><br />
<br />
⭐ Not<br />
<br />
Plugin tamamen <span style="font-weight: bold;" class="mycode_b">config tabanlıdır</span> ve sunucular için maksimum esneklik sağlar.<br />
Forumlarda paylaşabilirsiniz ancak <span style="font-weight: bold;" class="mycode_b">coder bilgisi silinmemelidir.</span><br />
<br />
🎮 Keyifli Oyunlar!<br />
<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/*<br />
    Gelistirilmis, genis ozelliklere ve esnek ayarlara sahip parasut sistemi.<br />
    Coder: Y4S!N61<br />
*/<br />
<br />
#include &lt;amxmodx&gt;<br />
#include &lt;fakemeta&gt;<br />
#include &lt;engine&gt;<br />
#include &lt;fun&gt;<br />
#include &lt;hamsandwich&gt;<br />
#include &lt;nvault&gt;<br />
#include &lt;cstrike&gt;<br />
<br />
#pragma semicolon 1<br />
<br />
#define PLUGIN      "HLPlayer.com Ultimate Parachute"<br />
#define VERSION     "1.0"<br />
#define AUTHOR      "Y4S!N61"<br />
<br />
#define cm(%0)      ( sizeof(%0) - 1 )<br />
<br />
const XO_PLAYER            = 5;<br />
const m_flFallVelocity     = 251;<br />
<br />
#define MAX_SPEEDS   32<br />
#define MAX_MODELS   64<br />
<br />
#define MAX_TRAILS         64<br />
#define MAX_TRAIL_COLORS   32<br />
#define MAX_TRAIL_LENGTHS  32<br />
enum<br />
{<br />
    DEPLOY_HOLD = 0,<br />
    DEPLOY_TAP  = 1,<br />
    DEPLOY_AUTO = 2<br />
};<br />
<br />
new const g_szDeployModeName[3][] = { "Basili Tut", "Tikla (tekrar - kapat)", "Otomatik (tikla - kapat)" };<br />
<br />
new const PARA_CLASS[] = "parachute";<br />
<br />
#define TE_BEAMFOLLOW 22<br />
#define TE_KILLBEAM   99<br />
new g_szCfgPath[256];<br />
new g_szAccessFlags[32];<br />
new g_iAccessBits;<br />
<br />
new g_iAccessTeamTT;<br />
new g_iAccessTeamCT;<br />
<br />
new g_iWeaponUsage;<br />
new g_iDeployModeAccess;<br />
new g_iDeployModeDefault;<br />
<br />
new g_iFallSpeedAccess;<br />
new g_szFallSpeedDefault[32];<br />
<br />
new g_iThirdAccess;<br />
new g_iThirdDefault;<br />
<br />
new g_iModelAccess;<br />
new g_szModelDefault[128];<br />
<br />
new Float:g_flAutoThreshold;<br />
new g_iDeploysPerRound;<br />
new g_szDeploySound[128];<br />
<br />
new g_iSpeedsNum;<br />
new g_szSpeedName[MAX_SPEEDS][32];<br />
new Float:g_flSpeedValue[MAX_SPEEDS];<br />
<br />
new g_iModelsNum;<br />
new g_szModelPath[MAX_MODELS][128];<br />
new g_szModelName[MAX_MODELS][48];<br />
<br />
new g_iTrailAccess;<br />
new g_szTrailDefault[128];<br />
<br />
new g_iTrailColorAccess;<br />
new g_szTrailColorDefault[32];<br />
<br />
new g_iTrailLengthAccess;<br />
new g_szTrailLengthDefault[16];<br />
<br />
new g_iTrailsNum;<br />
new g_szTrailPath[MAX_TRAILS][128];<br />
new g_szTrailName[MAX_TRAILS][48];<br />
new g_iTrailSpriteIdx[MAX_TRAILS];<br />
<br />
new g_iTrailColorsNum;<br />
new g_szTrailColorName[MAX_TRAIL_COLORS][48];<br />
new g_iTrailColorRGB[MAX_TRAIL_COLORS][3];<br />
<br />
new g_iTrailLengthsNum;<br />
new g_szTrailLengthName[MAX_TRAIL_LENGTHS][48];<br />
new g_iTrailLengthVal[MAX_TRAIL_LENGTHS];<br />
<br />
new g_iDefaultTrailIndex;<br />
new g_iDefaultTrailColorIndex;<br />
new g_iDefaultTrailLengthIndex;<br />
<br />
new g_iTrailWidth = 10;<br />
<br />
new g_iTrailIndex[33];<br />
new g_iTrailColorIndex[33];<br />
new g_iTrailLengthIndex[33];<br />
<br />
new g_iTrailMenuPage[33];<br />
new g_iTrailColorMenuPage[33];<br />
new g_iTrailLengthMenuPage[33];<br />
<br />
new bool:g_bTrailActive[33];<br />
<br />
new g_iDefaultSpeedIndex;<br />
new g_iDefaultModelIndex;<br />
<br />
new g_iVault;<br />
<br />
new g_iParaEnt[33];<br />
new bool:g_bParaDeployed[33];<br />
new g_iDeployMode[33];<br />
new g_iSpeedIndex[33];<br />
new bool:g_bThird[33];<br />
new g_iModelIndex[33];<br />
new g_iModelMenuPage[33];<br />
<br />
new g_iLastWeapon[33];<br />
<br />
new g_iDeploysUsed[33];<br />
<br />
public plugin_precache()<br />
{<br />
    precache_model("models/rpgrocket.mdl");<br />
    BuildConfigPath();<br />
    LoadConfig(true);<br />
}<br />
<br />
public plugin_init()<br />
{<br />
    register_plugin(PLUGIN, VERSION, AUTHOR);<br />
<br />
    register_clcmd("say /parasut", "Cmd_Menu");<br />
    register_clcmd("say_team /parasut", "Cmd_Menu");<br />
<br />
    RegisterHam(Ham_Player_PreThink, "player", "OnPreThink", 0);<br />
    RegisterHam(Ham_Spawn, "player", "OnSpawnPost", 1);<br />
    RegisterHam(Ham_Killed, "player", "OnKilledPost", 1);<br />
<br />
    register_logevent("OnRoundStart", 2, "1=Round_Start");<br />
}<br />
<br />
public plugin_cfg()<br />
{<br />
    BuildConfigPath();<br />
    LoadConfig(false);<br />
<br />
    g_iVault = nvault_open("ultimate_parachute");<br />
    if (g_iVault == INVALID_HANDLE)<br />
        set_fail_state("Error opening nVault (ultimate_parachute)");<br />
}<br />
<br />
public plugin_end()<br />
{<br />
    if (g_iVault != INVALID_HANDLE)<br />
        nvault_close(g_iVault);<br />
}<br />
<br />
public OnSpawnPost(id)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    RemoveParachute(id, true);<br />
<br />
    g_iDeploysUsed[id] = 0;<br />
<br />
    LoadPlayerData(id);<br />
}<br />
<br />
public OnKilledPost(victim, attacker, shouldgib)<br />
{<br />
    if(!is_user_connected(victim)) return;<br />
    RemoveParachute(victim, true);<br />
}<br />
<br />
public OnRoundStart()<br />
{<br />
    for(new id=1; id&lt;=32; id++)<br />
    {<br />
        g_iDeploysUsed[id] = 0;<br />
        if(is_user_connected(id))<br />
            RemoveParachute(id, true);<br />
    }<br />
}<br />
<br />
public client_putinserver(id)<br />
{<br />
    ResetPlayerState(id);<br />
}<br />
<br />
public client_disconnected(id)<br />
{<br />
    SavePlayerData(id);<br />
    ResetPlayerState(id);<br />
}<br />
<br />
public OnPreThink(id)<br />
{<br />
    if(!is_user_alive(id))<br />
        return;<br />
<br />
    if(!HasParachuteAccess(id))<br />
    {<br />
        RemoveParachute(id, false);<br />
        return;<br />
    }<br />
<br />
    if(pev(id, pev_movetype) == MOVETYPE_FLY)<br />
    {<br />
        RemoveParachute(id, false);<br />
        return;<br />
    }<br />
<br />
    new buttons = pev(id, pev_button);<br />
    new oldbuttons = pev(id, pev_oldbuttons);<br />
    new flags = pev(id, pev_flags);<br />
<br />
    static Float:vel[3];<br />
    pev(id, pev_velocity, vel);<br />
<br />
    new bool:bDescending = (vel[2] &lt; 0.0);<br />
<br />
    switch(g_iDeployMode[id])<br />
    {<br />
        case DEPLOY_HOLD:<br />
        {<br />
            if( (buttons &amp; IN_USE) &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending )<br />
            {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!g_bParaDeployed[id])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!TryStartDeploy(id))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RemoveParachute(id, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_bParaDeployed[id] = true;<br />
                    StartTrailIfNeeded(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnsureEntity(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplyParachute(id, vel);<br />
            }<br />
            else<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
        }<br />
        case DEPLOY_TAP:<br />
        {<br />
            if( (buttons &amp; IN_USE) &amp;&amp; !(oldbuttons &amp; IN_USE) &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending )<br />
            {<br />
                if(!g_bParaDeployed[id])<br />
                {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!TryStartDeploy(id))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
<br />
                    EnsureEntity(id);<br />
                    g_bParaDeployed[id] = true;<br />
                    StartTrailIfNeeded(id);<br />
                }<br />
                else<br />
                {<br />
                    RemoveParachute(id, false);<br />
                }<br />
            }<br />
<br />
            if(g_bParaDeployed[id] &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending)<br />
            {<br />
                EnsureEntity(id);<br />
                ApplyParachute(id, vel);<br />
            }<br />
            else if(flags &amp; FL_ONGROUND)<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
        }<br />
        case DEPLOY_AUTO:<br />
        {<br />
            static Float:fallvel;<br />
            fallvel = get_pdata_float(id, m_flFallVelocity, XO_PLAYER);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!g_bParaDeployed[id] &amp;&amp; bDescending &amp;&amp; fallvel &gt;= g_flAutoThreshold &amp;&amp; !(flags &amp; FL_ONGROUND))<br />
            {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!TryStartDeploy(id))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
                EnsureEntity(id);<br />
                g_bParaDeployed[id] = true;<br />
                StartTrailIfNeeded(id);<br />
            }<br />
<br />
            if(g_bParaDeployed[id] &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending)<br />
            {<br />
                EnsureEntity(id);<br />
                ApplyParachute(id, vel);<br />
            }<br />
            else if(flags &amp; FL_ONGROUND)<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
<br />
            if(g_bParaDeployed[id] &amp;&amp; (buttons &amp; IN_USE) &amp;&amp; !(oldbuttons &amp; IN_USE) &amp;&amp; !(flags &amp; FL_ONGROUND))<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
        }<br />
    }<br />
<br />
    if(!(buttons &amp; IN_USE) &amp;&amp; (oldbuttons &amp; IN_USE))<br />
    {<br />
        RestoreGravityIfNeeded(id);<br />
    }<br />
}<br />
<br />
public Cmd_Menu(id)<br />
{<br />
    if(!is_user_connected(id)) return PLUGIN_HANDLED;<br />
<br />
    if(!HasParachuteAccess(id))<br />
    {<br />
        client_print(id, print_chat, "[Ultimate Parachute] Parasut yetkiniz yok.");<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(g_bParaDeployed[id] || g_iParaEnt[id] &gt; 0)<br />
        return PLUGIN_HANDLED;<br />
<br />
    new menu = menu_create("Parasut Ayarlari", "Menu_Handler");<br />
<br />
    new sz[192];<br />
<br />
    if(g_iDeployModeAccess)<br />
    {<br />
        formatex(sz, cm(sz), "Acilis Modu: %s", g_szDeployModeName[g_iDeployMode[id]]);<br />
        menu_additem(menu, sz, "0");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Acilis Modu: d%s", g_szDeployModeName[g_iDeployMode[id]]);<br />
        menu_additem(menu, sz, "0");<br />
    }<br />
<br />
    if(g_iThirdAccess)<br />
    {<br />
        formatex(sz, cm(sz), "Gorunus: %s", g_bThird[id] ? "3. Sahis" : "1. Sahis");<br />
        menu_additem(menu, sz, "1");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Gorunus: d%s", g_bThird[id] ? "3. Sahis" : "1. Sahis");<br />
        menu_additem(menu, sz, "1");<br />
    }<br />
<br />
    if(g_iFallSpeedAccess &amp;&amp; g_iSpeedsNum &gt; 0)<br />
    {<br />
        formatex(sz, cm(sz), "Dusus Hizi: %s", g_szSpeedName[g_iSpeedIndex[id]]);<br />
        menu_additem(menu, sz, "2");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Dusus Hizi: d%s", (g_iSpeedsNum &gt; 0) ? g_szSpeedName[g_iSpeedIndex[id]] : "liste yok");<br />
        menu_additem(menu, sz, "2");<br />
    }<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        new const szRandom[] = "Degisen model";<br />
        if(g_iModelIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Model: %s", szRandom);<br />
        else<br />
            formatex(sz, cm(sz), "Model: %s", g_szModelName[g_iModelIndex[id]]);<br />
<br />
        if(!g_iModelAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "3");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Model: dliste yok");<br />
        menu_additem(menu, sz, "3");<br />
    }<br />
<br />
    if(g_iTrailsNum &gt; 0)<br />
    {<br />
        new const szRandomTrail[] = "Degisen iz";<br />
        if(g_iTrailIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Iz: %s", szRandomTrail);<br />
        else<br />
            formatex(sz, cm(sz), "Iz: %s", g_szTrailName[g_iTrailIndex[id]]);<br />
<br />
        if(!g_iTrailAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "4");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Iz: dliste yok");<br />
        menu_additem(menu, sz, "4");<br />
    }<br />
<br />
    if(g_iTrailColorsNum &gt; 0)<br />
    {<br />
        new const szRandomColor[] = "Rastgele";<br />
        if(g_iTrailColorIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Iz Rengi: %s", szRandomColor);<br />
        else<br />
            formatex(sz, cm(sz), "Iz Rengi: %s", g_szTrailColorName[g_iTrailColorIndex[id]]);<br />
<br />
        if(!g_iTrailColorAccess || !g_iTrailAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "5");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Iz Rengi: dliste yok");<br />
        menu_additem(menu, sz, "5");<br />
    }<br />
<br />
    if(g_iTrailLengthsNum &gt; 0)<br />
    {<br />
        new const szRandomLen[] = "Rastgele";<br />
        if(g_iTrailLengthIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Iz Uzunlugu: %s", szRandomLen);<br />
        else<br />
            formatex(sz, cm(sz), "Iz Uzunlugu: %s", g_szTrailLengthName[g_iTrailLengthIndex[id]]);<br />
<br />
        if(!g_iTrailLengthAccess || !g_iTrailAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "6");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Iz Uzunlugu: dliste yok");<br />
        menu_additem(menu, sz, "6");<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);<br />
    menu_display(id, menu);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
public Menu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        SavePlayerData(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[8], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, cm(info), _, _, callback);<br />
    new key = str_to_num(info);<br />
<br />
    switch(key)<br />
    {<br />
        case 0:<br />
        {<br />
            if(g_iDeployModeAccess)<br />
            {<br />
                g_iDeployMode[id]++;<br />
                if(g_iDeployMode[id] &gt; DEPLOY_AUTO) g_iDeployMode[id] = DEPLOY_HOLD;<br />
            }<br />
        }<br />
        case 1:<br />
        {<br />
            if(g_iThirdAccess)<br />
            {<br />
                g_bThird[id] = !g_bThird[id];<br />
                if(!g_bThird[id]) set_view(id, CAMERA_NONE);<br />
            }<br />
        }<br />
        case 2:<br />
        {<br />
            if(g_iFallSpeedAccess &amp;&amp; g_iSpeedsNum &gt; 0)<br />
            {<br />
                g_iSpeedIndex[id]++;<br />
                if(g_iSpeedIndex[id] &gt;= g_iSpeedsNum) g_iSpeedIndex[id] = 0;<br />
            }<br />
        }<br />
        case 3:<br />
        {<br />
            if(g_iModelAccess &amp;&amp; g_iModelsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowModelMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
        case 4:<br />
        {<br />
            if(g_iTrailAccess &amp;&amp; g_iTrailsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowTrailMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
        case 5:<br />
        {<br />
            if(g_iTrailAccess &amp;&amp; g_iTrailColorAccess &amp;&amp; g_iTrailColorsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowTrailColorMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
        case 6:<br />
        {<br />
            if(g_iTrailAccess &amp;&amp; g_iTrailLengthAccess &amp;&amp; g_iTrailLengthsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowTrailLengthMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    Cmd_Menu(id);<br />
<br />
    SavePlayerData(id);<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock ShowModelMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iModelsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iModelMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Model Secimi", "ModelMenu_Handler");<br />
<br />
    menu_additem(menu, "Degisen model", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iModelsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szModelName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public ModelMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowModelMenu(id, g_iModelMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowModelMenu(id, g_iModelMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iModelIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iModelsNum)<br />
            g_iModelIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock bool:TryStartDeploy(id)<br />
{<br />
    if(g_iDeploysPerRound &gt; 0 &amp;&amp; g_iDeploysUsed[id] &gt;= g_iDeploysPerRound)<br />
        return false;<br />
<br />
    g_iDeploysUsed[id]++;<br />
<br />
    if(g_szDeploySound[0])<br />
        emit_sound(id, CHAN_ITEM, g_szDeploySound, 1.0, ATTN_NORM, 0, PITCH_NORM);<br />
<br />
    if(!g_iWeaponUsage)<br />
        DenyWeapons(id);<br />
<br />
    if(g_bThird[id])<br />
        set_view(id, CAMERA_3RDPERSON);<br />
<br />
    set_pev(id, pev_gravity, 0.1);<br />
<br />
    return true;<br />
}<br />
<br />
stock EnsureEntity(id)<br />
{<br />
    if(g_iParaEnt[id] &gt; 0 &amp;&amp; is_valid_ent(g_iParaEnt[id]))<br />
        return;<br />
<br />
    new ent = create_entity("info_target");<br />
    if(ent &lt;= 0) return;<br />
<br />
    entity_set_string(ent, EV_SZ_classname, PARA_CLASS);<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        new mdlIndex = g_iModelIndex[id];<br />
        if(mdlIndex &lt; 0) mdlIndex = random_num(0, g_iModelsNum - 1);<br />
        entity_set_model(ent, g_szModelPath[mdlIndex]);<br />
    }<br />
<br />
    entity_set_int(ent, EV_INT_movetype, MOVETYPE_FOLLOW);<br />
    entity_set_int(ent, EV_INT_solid, SOLID_NOT);<br />
    entity_set_edict(ent, EV_ENT_aiment, id);<br />
    entity_set_edict(ent, EV_ENT_owner, id);<br />
<br />
    entity_set_int(ent, EV_INT_sequence, 0);<br />
    entity_set_int(ent, EV_INT_gaitsequence, 1);<br />
    entity_set_float(ent, EV_FL_frame, 0.0);<br />
    entity_set_float(ent, EV_FL_fuser1, 0.0);<br />
<br />
    g_iParaEnt[id] = ent;<br />
}<br />
<br />
stock ShowTrailMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iTrailsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iTrailMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Iz Secimi", "TrailMenu_Handler");<br />
<br />
    menu_additem(menu, "Degisen iz", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iTrailsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szTrailName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public TrailMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailMenu(id, g_iTrailMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailMenu(id, g_iTrailMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iTrailIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iTrailsNum)<br />
            g_iTrailIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock ShowTrailColorMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iTrailColorsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iTrailColorMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Iz Rengi Secimi", "TrailColorMenu_Handler");<br />
<br />
    menu_additem(menu, "Rastgele", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iTrailColorsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szTrailColorName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public TrailColorMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailColorMenu(id, g_iTrailColorMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailColorMenu(id, g_iTrailColorMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iTrailColorIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iTrailColorsNum)<br />
            g_iTrailColorIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
stock ShowTrailLengthMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iTrailLengthsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iTrailLengthMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Iz Uzunlugu Secimi", "TrailLengthMenu_Handler");<br />
<br />
    menu_additem(menu, "Rastgele", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iTrailLengthsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szTrailLengthName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public TrailLengthMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailLengthMenu(id, g_iTrailLengthMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailLengthMenu(id, g_iTrailLengthMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iTrailLengthIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iTrailLengthsNum)<br />
            g_iTrailLengthIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock ApplyParachute(id, Float:vel[3])<br />
{<br />
    set_pev(id, pev_gravity, 0.1);<br />
<br />
    if(g_iSpeedsNum &gt; 0)<br />
    {<br />
        new i = g_iSpeedIndex[id];<br />
        new Float:target = g_flSpeedValue[i];<br />
<br />
        vel[2] = (vel[2] + 40.0 &lt; target) ? (vel[2] + 40.0) : target;<br />
        set_pev(id, pev_velocity, vel);<br />
    }<br />
<br />
    new ent = g_iParaEnt[id];<br />
    if(ent &gt; 0 &amp;&amp; is_valid_ent(ent))<br />
    {<br />
        new Float:frame;<br />
<br />
        if(entity_get_int(ent, EV_INT_sequence) == 0)<br />
        {<br />
            frame = entity_get_float(ent, EV_FL_fuser1) + 1.0;<br />
            entity_set_float(ent, EV_FL_fuser1, frame);<br />
            entity_set_float(ent, EV_FL_frame, frame);<br />
<br />
            if(frame &gt; 100.0)<br />
            {<br />
                entity_set_float(ent, EV_FL_animtime, 0.0);<br />
                entity_set_float(ent, EV_FL_framerate, 0.4);<br />
                entity_set_int(ent, EV_INT_sequence, 1);<br />
                entity_set_int(ent, EV_INT_gaitsequence, 1);<br />
                entity_set_float(ent, EV_FL_frame, 0.0);<br />
                entity_set_float(ent, EV_FL_fuser1, 0.0);<br />
            }<br />
        }<br />
    }<br />
}<br />
<br />
stock RemoveParachute(id, bool:bForce)<br />
{<br />
    if(g_iParaEnt[id] &gt; 0)<br />
    {<br />
        if(is_valid_ent(g_iParaEnt[id]))<br />
            remove_entity(g_iParaEnt[id]);<br />
        g_iParaEnt[id] = 0;<br />
    }<br />
<br />
    if(g_bParaDeployed[id] || bForce)<br />
    {<br />
        g_bParaDeployed[id] = false;<br />
<br />
        KillTrail(id);<br />
<br />
        set_view(id, CAMERA_NONE);<br />
<br />
        if(!g_iWeaponUsage)<br />
            RestoreWeapon(id);<br />
<br />
        RestoreGravityIfNeeded(id);<br />
    }<br />
}<br />
<br />
stock RestoreGravityIfNeeded(id)<br />
{<br />
    if(!is_user_alive(id)) return;<br />
<br />
    static Float:gr;<br />
    pev(id, pev_gravity, gr);<br />
<br />
    if(gr == 0.1)<br />
        set_pev(id, pev_gravity, 1.0);<br />
}<br />
<br />
stock KillTrail(id)<br />
{<br />
    if(!g_bTrailActive[id])<br />
        return;<br />
<br />
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);<br />
    write_byte(TE_KILLBEAM);<br />
    write_short(id);<br />
    message_end();<br />
<br />
    g_bTrailActive[id] = false;<br />
}<br />
<br />
stock StartTrailIfNeeded(id)<br />
{<br />
    if(!g_bParaDeployed[id])<br />
        return;<br />
<br />
    if(!g_iTrailAccess || g_iTrailsNum &lt;= 0 || g_iTrailLengthsNum &lt;= 0)<br />
        return;<br />
<br />
    new iLenIdx = g_iTrailLengthIndex[id];<br />
    if(iLenIdx == -1 &amp;&amp; g_iTrailLengthsNum &gt; 0)<br />
        iLenIdx = random_num(0, g_iTrailLengthsNum - 1);<br />
<br />
    if(iLenIdx &lt; 0 || iLenIdx &gt;= g_iTrailLengthsNum)<br />
        return;<br />
<br />
    new life = g_iTrailLengthVal[iLenIdx];<br />
    if(life &lt;= 0)<br />
    {<br />
        KillTrail(id);<br />
        return;<br />
    }<br />
<br />
    new iTrailIdx = g_iTrailIndex[id];<br />
    if(iTrailIdx == -1 &amp;&amp; g_iTrailsNum &gt; 0)<br />
        iTrailIdx = random_num(0, g_iTrailsNum - 1);<br />
<br />
    if(iTrailIdx &lt; 0 || iTrailIdx &gt;= g_iTrailsNum)<br />
        return;<br />
<br />
    new sprite = g_iTrailSpriteIdx[iTrailIdx];<br />
    if(sprite &lt;= 0)<br />
        return;<br />
<br />
    new iColorIdx = g_iTrailColorIndex[id];<br />
    if(iColorIdx == -1 &amp;&amp; g_iTrailColorsNum &gt; 0)<br />
        iColorIdx = random_num(0, g_iTrailColorsNum - 1);<br />
<br />
    new r = 255, g = 255, b = 255;<br />
    if(iColorIdx &gt;= 0 &amp;&amp; iColorIdx &lt; g_iTrailColorsNum)<br />
    {<br />
        r = g_iTrailColorRGB[iColorIdx][0];<br />
        g = g_iTrailColorRGB[iColorIdx][1];<br />
        b = g_iTrailColorRGB[iColorIdx][2];<br />
    }<br />
<br />
    KillTrail(id);<br />
<br />
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);<br />
    write_byte(TE_BEAMFOLLOW);<br />
    write_short(id);<br />
    write_short(sprite);<br />
    write_byte(clamp(life, 0, 255));<br />
    write_byte(g_iTrailWidth);<br />
    write_byte(r);<br />
    write_byte(g);<br />
    write_byte(b);<br />
    write_byte(255);<br />
    message_end();<br />
<br />
    g_bTrailActive[id] = true;<br />
}<br />
<br />
stock DenyWeapons(id)<br />
{<br />
    new weapon = get_user_weapon(id);<br />
    if(weapon != CSW_KNIFE)<br />
    {<br />
        g_iLastWeapon[id] = weapon;<br />
        engclient_cmd(id, "weapon_knife");<br />
    }<br />
<br />
    new buttons = pev(id, pev_button);<br />
    buttons &amp;= ~IN_ATTACK;<br />
    buttons &amp;= ~IN_ATTACK2;<br />
    set_pev(id, pev_button, buttons);<br />
}<br />
<br />
stock RestoreWeapon(id)<br />
{<br />
    if(g_iLastWeapon[id] &lt;= 0) return;<br />
<br />
    new szWpn[32];<br />
    get_weaponname(g_iLastWeapon[id], szWpn, cm(szWpn));<br />
    engclient_cmd(id, szWpn);<br />
    g_iTrailIndex[id] = (g_iTrailsNum &gt; 0) ? g_iDefaultTrailIndex : 0;<br />
    g_iTrailColorIndex[id] = (g_iTrailColorsNum &gt; 0) ? g_iDefaultTrailColorIndex : 0;<br />
    g_iTrailLengthIndex[id] = (g_iTrailLengthsNum &gt; 0) ? g_iDefaultTrailLengthIndex : 0;<br />
    g_bTrailActive[id] = false;<br />
<br />
g_iLastWeapon[id] = 0;<br />
}<br />
<br />
stock BuildConfigPath()<br />
{<br />
    new cfgdir[128];<br />
    get_localinfo("amxx_configsdir", cfgdir, cm(cfgdir));<br />
    formatex(g_szCfgPath, cm(g_szCfgPath), "%s/ultimate_parachute.ini", cfgdir);<br />
}<br />
<br />
stock LoadConfig(bool:bPrecacheOnly)<br />
{<br />
    g_szAccessFlags[0] = 0;<br />
    g_iAccessBits = 0;<br />
<br />
    g_iAccessTeamTT = 1;<br />
    g_iAccessTeamCT = 1;<br />
<br />
    g_iWeaponUsage = 1;<br />
    g_iDeployModeAccess = 1;<br />
    g_iDeployModeDefault = DEPLOY_HOLD;<br />
    g_flAutoThreshold = 350.0;<br />
    g_iDeploysPerRound = 0;<br />
<br />
    g_iFallSpeedAccess = 1;<br />
    g_szFallSpeedDefault[0] = 0;<br />
<br />
    g_iThirdAccess = 1;<br />
    g_iThirdDefault = 0;<br />
<br />
    g_iModelAccess = 1;<br />
    g_szModelDefault[0] = 0;<br />
    g_szDeploySound[0] = 0;<br />
<br />
    g_iSpeedsNum = 0;<br />
    g_iModelsNum = 0;<br />
<br />
    g_iTrailAccess = 1;<br />
    g_szTrailDefault[0] = 0;<br />
    g_iTrailColorAccess = 1;<br />
    g_szTrailColorDefault[0] = 0;<br />
    g_iTrailLengthAccess = 1;<br />
    g_szTrailLengthDefault[0] = 0;<br />
<br />
    g_iTrailsNum = 0;<br />
    g_iTrailColorsNum = 0;<br />
    g_iTrailLengthsNum = 0;<br />
    g_iDefaultSpeedIndex = 0;<br />
    g_iDefaultModelIndex = 0;<br />
<br />
    g_iDefaultTrailIndex = -1;<br />
    g_iDefaultTrailColorIndex = -1;<br />
    g_iDefaultTrailLengthIndex = 0;<br />
    if(!file_exists(g_szCfgPath))<br />
    {<br />
        return;<br />
    }<br />
<br />
    new line[256], section[32];<br />
    section[0] = 0;<br />
<br />
    new fp = fopen(g_szCfgPath, "rt");<br />
    if(!fp) return;<br />
<br />
    while(!feof(fp))<br />
    {<br />
        fgets(fp, line, cm(line));<br />
        trim(line);<br />
<br />
        if(!line[0]) continue;<br />
        if(line[0] == ';') continue;<br />
        if(line[0] == '/' &amp;&amp; line[1] == '/') continue;<br />
<br />
        if(line[0] == '[')<br />
        {<br />
            new iEnd = contain(line, "]");<br />
            if(iEnd &gt; 1)<br />
            {<br />
                new j = 0;<br />
                for(new i = 1; i &lt; iEnd &amp;&amp; j &lt; cm(section); i++)<br />
                    section[j++] = line[i];<br />
                section[j] = 0;<br />
                strtolower(section);<br />
            }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(equali(section, "settings"))<br />
        {<br />
            new k[64], v[192];<br />
            k[0]=0; v[0]=0;<br />
<br />
            parse(line, k, cm(k), v, cm(v));<br />
            strtolower(k);<br />
<br />
            StripQuotes(v);<br />
<br />
            if(equali(k, "access_flags"))<br />
            {<br />
                copy(g_szAccessFlags, cm(g_szAccessFlags), v);<br />
                g_iAccessBits = read_flags(g_szAccessFlags);<br />
            }<br />
            else if(equali(k, "access_team_tt"))<br />
            {<br />
                g_iAccessTeamTT = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "access_team_ct"))<br />
            {<br />
                g_iAccessTeamCT = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "weapon_usage"))<br />
            {<br />
                g_iWeaponUsage = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "deploy_mode_access"))<br />
            {<br />
                g_iDeployModeAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "deploy_mode_default"))<br />
            {<br />
                g_iDeployModeDefault = clamp(str_to_num(v), 0, 2);<br />
            }<br />
            else if(equali(k, "autodeploy_threshold"))<br />
            {<br />
                g_flAutoThreshold = floatclamp(str_to_float(v), 0.0, 9999.0);<br />
            }<br />
            else if(equali(k, "deploys_per_round"))<br />
            {<br />
                g_iDeploysPerRound = max(0, str_to_num(v));<br />
            }<br />
            else if(equali(k, "fall_speed_access"))<br />
            {<br />
                g_iFallSpeedAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "fall_speed_default"))<br />
            {<br />
                copy(g_szFallSpeedDefault, cm(g_szFallSpeedDefault), v);<br />
            }<br />
            else if(equali(k, "3rd_person_view_access"))<br />
            {<br />
                g_iThirdAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "3rd_person_view_default"))<br />
            {<br />
                g_iThirdDefault = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "model_access"))<br />
            {<br />
                g_iModelAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "model_default"))<br />
            {<br />
                copy(g_szModelDefault, cm(g_szModelDefault), v);<br />
            }<br />
            else if(equali(k, "trail_access"))<br />
            {<br />
                g_iTrailAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "trail_default"))<br />
            {<br />
                copy(g_szTrailDefault, cm(g_szTrailDefault), v);<br />
            }<br />
            else if(equali(k, "trail_color_access"))<br />
            {<br />
                g_iTrailColorAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "trail_color_default"))<br />
            {<br />
                copy(g_szTrailColorDefault, cm(g_szTrailColorDefault), v);<br />
            }<br />
            else if(equali(k, "trail_length_access"))<br />
            {<br />
                g_iTrailLengthAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "trail_length_default"))<br />
            {<br />
                copy(g_szTrailLengthDefault, cm(g_szTrailLengthDefault), v);<br />
            }<br />
            else if(equali(k, "trail_width"))<br />
            {<br />
                g_iTrailWidth = clamp(str_to_num(v), 0, 255);<br />
            }<br />
            else if(equali(k, "deploy_sound"))<br />
            {<br />
                copy(g_szDeploySound, cm(g_szDeploySound), v);<br />
            }<br />
        }<br />
        else if(equali(section, "speeds"))<br />
        {<br />
            if(g_iSpeedsNum &gt;= MAX_SPEEDS) continue;<br />
<br />
            new sSpeed[32], sName[64];<br />
            sSpeed[0]=0; sName[0]=0;<br />
            parse(line, sSpeed, cm(sSpeed), sName, cm(sName));<br />
            StripQuotes(sSpeed);<br />
            StripQuotes(sName);<br />
<br />
            if(!sSpeed[0] || !sName[0]) continue;<br />
<br />
            copy(g_szSpeedName[g_iSpeedsNum], cm(g_szSpeedName[]), sName);<br />
            g_flSpeedValue[g_iSpeedsNum] = str_to_float(sSpeed);<br />
            g_iSpeedsNum++;<br />
        }<br />
        else if(equali(section, "models"))<br />
        {<br />
            if(g_iModelsNum &gt;= MAX_MODELS) continue;<br />
<br />
            new path[160], name[64];<br />
            path[0]=0; name[0]=0;<br />
<br />
            parse(line, path, cm(path), name, cm(name));<br />
            StripQuotes(path);<br />
            StripQuotes(name);<br />
<br />
            if(!path[0]) continue;<br />
<br />
            copy(g_szModelPath[g_iModelsNum], cm(g_szModelPath[]), path);<br />
<br />
            if(name[0])<br />
                copy(g_szModelName[g_iModelsNum], cm(g_szModelName[]), name);<br />
            else<br />
                formatex(g_szModelName[g_iModelsNum], cm(g_szModelName[]), "Model %d", g_iModelsNum + 1);<br />
<br />
            if(bPrecacheOnly)<br />
            {<br />
                if(containi(path, ".mdl") != -1)<br />
                    precache_model(path);<br />
            }<br />
<br />
            g_iModelsNum++;<br />
        }<br />
<br />
        else if(equali(section, "trails"))<br />
        {<br />
            if(g_iTrailsNum &gt;= MAX_TRAILS) continue;<br />
<br />
            new path[160], name[64];<br />
            path[0]=0; name[0]=0;<br />
<br />
            parse(line, path, cm(path), name, cm(name));<br />
            StripQuotes(path);<br />
            StripQuotes(name);<br />
<br />
            if(!path[0]) continue;<br />
<br />
            copy(g_szTrailPath[g_iTrailsNum], cm(g_szTrailPath[]), path);<br />
<br />
            if(name[0])<br />
                copy(g_szTrailName[g_iTrailsNum], cm(g_szTrailName[]), name);<br />
            else<br />
                formatex(g_szTrailName[g_iTrailsNum], cm(g_szTrailName[]), "Iz %d", g_iTrailsNum + 1);<br />
<br />
            if(bPrecacheOnly)<br />
            {<br />
                if(containi(path, ".spr") != -1)<br />
                    g_iTrailSpriteIdx[g_iTrailsNum] = precache_model(path);<br />
            }<br />
            else<br />
            {<br />
                g_iTrailSpriteIdx[g_iTrailsNum] = engfunc(EngFunc_ModelIndex, path);<br />
            }<br />
<br />
            g_iTrailsNum++;<br />
        }<br />
        else if(equali(section, "trail_colors"))<br />
        {<br />
            if(g_iTrailColorsNum &gt;= MAX_TRAIL_COLORS) continue;<br />
<br />
            new rgb[32], name[64];<br />
            rgb[0]=0; name[0]=0;<br />
<br />
            parse(line, rgb, cm(rgb), name, cm(name));<br />
            StripQuotes(rgb);<br />
            StripQuotes(name);<br />
<br />
            if(!rgb[0]) continue;<br />
<br />
            new sr[8], sg[8], sb[8];<br />
            sr[0]=sg[0]=sb[0]=0;<br />
            parse(rgb, sr, cm(sr), sg, cm(sg), sb, cm(sb));<br />
<br />
            new r = clamp(str_to_num(sr), 0, 255);<br />
            new g = clamp(str_to_num(sg), 0, 255);<br />
            new b = clamp(str_to_num(sb), 0, 255);<br />
<br />
            g_iTrailColorRGB[g_iTrailColorsNum][0] = r;<br />
            g_iTrailColorRGB[g_iTrailColorsNum][1] = g;<br />
            g_iTrailColorRGB[g_iTrailColorsNum][2] = b;<br />
<br />
            if(name[0])<br />
                copy(g_szTrailColorName[g_iTrailColorsNum], cm(g_szTrailColorName[]), name);<br />
            else<br />
                formatex(g_szTrailColorName[g_iTrailColorsNum], cm(g_szTrailColorName[]), "Цвет %d", g_iTrailColorsNum + 1);<br />
<br />
            g_iTrailColorsNum++;<br />
        }<br />
        else if(equali(section, "trail_lengths"))<br />
        {<br />
            if(g_iTrailLengthsNum &gt;= MAX_TRAIL_LENGTHS) continue;<br />
<br />
            new lenStr[16], name[64];<br />
            lenStr[0]=0; name[0]=0;<br />
<br />
            parse(line, lenStr, cm(lenStr), name, cm(name));<br />
            StripQuotes(lenStr);<br />
            StripQuotes(name);<br />
<br />
            if(!lenStr[0]) continue;<br />
<br />
            g_iTrailLengthVal[g_iTrailLengthsNum] = max(0, str_to_num(lenStr));<br />
<br />
            if(name[0])<br />
                copy(g_szTrailLengthName[g_iTrailLengthsNum], cm(g_szTrailLengthName[]), name);<br />
            else<br />
                formatex(g_szTrailLengthName[g_iTrailLengthsNum], cm(g_szTrailLengthName[]), "Uzunluk %d", g_iTrailLengthsNum + 1);<br />
<br />
            g_iTrailLengthsNum++;<br />
        }<br />
<br />
    }<br />
<br />
    fclose(fp);<br />
<br />
    ResolveDefaults();<br />
<br />
    NormalizeDeploySound(bPrecacheOnly);<br />
}<br />
<br />
stock ResolveDefaults()<br />
{<br />
    g_iDefaultSpeedIndex = 0;<br />
    if(g_iSpeedsNum &gt; 0)<br />
    {<br />
        if(g_szFallSpeedDefault[0])<br />
        {<br />
            new bool:isIndex = true;<br />
            for(new j=0; g_szFallSpeedDefault[j]; j++)<br />
            {<br />
                if(g_szFallSpeedDefault[j] == '-' || g_szFallSpeedDefault[j] == '.' )<br />
                {<br />
                    isIndex = false;<br />
                    break;<br />
                }<br />
            }<br />
<br />
            if(isIndex)<br />
            {<br />
                new idx = str_to_num(g_szFallSpeedDefault);<br />
                if(idx &gt;= 0 &amp;&amp; idx &lt; g_iSpeedsNum)<br />
                    g_iDefaultSpeedIndex = idx;<br />
            }<br />
            else<br />
            {<br />
                new Float:f = str_to_float(g_szFallSpeedDefault);<br />
                for(new i=0;i&lt;g_iSpeedsNum;i++)<br />
                {<br />
                    if(floatabs(g_flSpeedValue[i] - f) &lt; 0.01)<br />
                    {<br />
                        g_iDefaultSpeedIndex = i;<br />
                        break;<br />
                    }<br />
                }<br />
            }<br />
        }<br />
        else<br />
        {<br />
            for(new i=0;i&lt;g_iSpeedsNum;i++)<br />
            {<br />
                if(floatabs(g_flSpeedValue[i] - (-100.0)) &lt; 0.01)<br />
                {<br />
                    g_iDefaultSpeedIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultModelIndex = -1;<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        if(g_szModelDefault[0])<br />
        {<br />
            for(new i=0;i&lt;g_iModelsNum;i++)<br />
            {<br />
                if(equali(g_szModelPath[i], g_szModelDefault))<br />
                {<br />
                    g_iDefaultModelIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultTrailIndex = -1;<br />
    if(g_iTrailsNum &gt; 0)<br />
    {<br />
        if(g_szTrailDefault[0])<br />
        {<br />
            for(new i=0;i&lt;g_iTrailsNum;i++)<br />
            {<br />
                if(equali(g_szTrailPath[i], g_szTrailDefault))<br />
                {<br />
                    g_iDefaultTrailIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultTrailColorIndex = -1;<br />
    if(g_iTrailColorsNum &gt; 0)<br />
    {<br />
        if(g_szTrailColorDefault[0])<br />
        {<br />
            new sr[8], sg[8], sb[8];<br />
            sr[0]=sg[0]=sb[0]=0;<br />
            parse(g_szTrailColorDefault, sr, cm(sr), sg, cm(sg), sb, cm(sb));<br />
<br />
            new dr = clamp(str_to_num(sr), 0, 255);<br />
            new dg = clamp(str_to_num(sg), 0, 255);<br />
            new db = clamp(str_to_num(sb), 0, 255);<br />
<br />
            for(new i=0;i&lt;g_iTrailColorsNum;i++)<br />
            {<br />
                if(g_iTrailColorRGB[i][0] == dr &amp;&amp; g_iTrailColorRGB[i][1] == dg &amp;&amp; g_iTrailColorRGB[i][2] == db)<br />
                {<br />
                    g_iDefaultTrailColorIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultTrailLengthIndex = 0;<br />
    if(g_iTrailLengthsNum &gt; 0)<br />
    {<br />
        if(g_szTrailLengthDefault[0])<br />
        {<br />
            new dl = max(0, str_to_num(g_szTrailLengthDefault));<br />
            for(new i=0;i&lt;g_iTrailLengthsNum;i++)<br />
            {<br />
                if(g_iTrailLengthVal[i] == dl)<br />
                {<br />
                    g_iDefaultTrailLengthIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
        if(g_iDefaultTrailLengthIndex &gt;= g_iTrailLengthsNum)<br />
            g_iDefaultTrailLengthIndex = 0;<br />
    }<br />
<br />
}<br />
<br />
stock NormalizeDeploySound(bool:bPrecacheOnly)<br />
{<br />
    if(!g_szDeploySound[0])<br />
        return;<br />
<br />
    if(containi(g_szDeploySound, "sound/") == 0)<br />
    {<br />
        new tmp[128];<br />
        copy(tmp, cm(tmp), g_szDeploySound[6]);<br />
        copy(g_szDeploySound, cm(g_szDeploySound), tmp);<br />
    }<br />
    else if(containi(g_szDeploySound, "sound&#92;") == 0)<br />
    {<br />
        new tmp2[128];<br />
        copy(tmp2, cm(tmp2), g_szDeploySound[6]);<br />
        copy(g_szDeploySound, cm(g_szDeploySound), tmp2);<br />
    }<br />
<br />
    if(bPrecacheOnly)<br />
        precache_sound(g_szDeploySound);<br />
}<br />
<br />
stock ResetPlayerState(id)<br />
{<br />
    g_iParaEnt[id] = 0;<br />
    g_bParaDeployed[id] = false;<br />
<br />
    g_iDeployMode[id] = g_iDeployModeDefault;<br />
    g_iSpeedIndex[id] = g_iDefaultSpeedIndex;<br />
    g_bThird[id] = (g_iThirdDefault != 0);<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        g_iModelIndex[id] = g_iDefaultModelIndex;<br />
        if(g_iModelIndex[id] &gt;= g_iModelsNum) g_iModelIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        g_iModelIndex[id] = 0;<br />
    }<br />
<br />
    g_iLastWeapon[id] = 0;<br />
}<br />
<br />
stock HasParachuteAccess(id)<br />
{<br />
    if(g_szAccessFlags[0] &amp;&amp; (get_user_flags(id) &amp; g_iAccessBits) == 0)<br />
        return false;<br />
<br />
    new CsTeams:t = cs_get_user_team(id);<br />
    if(t == CS_TEAM_T &amp;&amp; !g_iAccessTeamTT) return false;<br />
    if(t == CS_TEAM_CT &amp;&amp; !g_iAccessTeamCT) return false;<br />
<br />
    return true;<br />
}<br />
<br />
stock GetVaultKey(id, key[], keylen)<br />
{<br />
    new auth[32];<br />
    get_user_authid(id, auth, cm(auth));<br />
<br />
    if(equali(auth, "BOT") || equali(auth, "HLTV") || equali(auth, "STEAM_ID_LAN") || equali(auth, "VALVE_ID_LAN") || equali(auth, "STEAM_ID_PENDING"))<br />
    {<br />
        new ip[32];<br />
        get_user_ip(id, ip, cm(ip), 1);<br />
        formatex(key, keylen, "IP_%s", ip);<br />
        return;<br />
    }<br />
<br />
    formatex(key, keylen, "SID_%s", auth);<br />
}<br />
<br />
stock LoadPlayerData(id)<br />
{<br />
    ResetPlayerState(id);<br />
<br />
    if(g_iVault == INVALID_HANDLE)<br />
        return;<br />
<br />
    new key[64];<br />
    GetVaultKey(id, key, cm(key));<br />
<br />
    new data[128];<br />
    if(!nvault_get(g_iVault, key, data, cm(data)))<br />
        return;<br />
<br />
    new s1[8], s2[8], s3[8], s4[8], s5[8], s6[8], s7[8];<br />
    s1[0]=s2[0]=s3[0]=s4[0]=s5[0]=s6[0]=s7[0]=0;<br />
    parse(data, s1, cm(s1), s2, cm(s2), s3, cm(s3), s4, cm(s4), s5, cm(s5), s6, cm(s6), s7, cm(s7));<br />
<br />
    new m = str_to_num(s1);<br />
    new sp = str_to_num(s2);<br />
    new th = str_to_num(s3);<br />
    new md = str_to_num(s4);<br />
    new tr = str_to_num(s5);<br />
    new tc = str_to_num(s6);<br />
    new tl = str_to_num(s7);<br />
    g_iDeployMode[id] = clamp(m, 0, 2);<br />
<br />
    if(g_iSpeedsNum &gt; 0)<br />
        g_iSpeedIndex[id] = clamp(sp, 0, g_iSpeedsNum-1);<br />
    else<br />
        g_iSpeedIndex[id] = 0;<br />
<br />
    g_bThird[id] = (th != 0);<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        if(md &lt; 0)<br />
            g_iModelIndex[id] = -1;<br />
        else<br />
            g_iModelIndex[id] = clamp(md, 0, g_iModelsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iModelIndex[id] = 0;<br />
    }<br />
    if(g_iTrailsNum &gt; 0)<br />
    {<br />
        if(tr &lt; 0)<br />
            g_iTrailIndex[id] = -1;<br />
        else<br />
            g_iTrailIndex[id] = clamp(tr, 0, g_iTrailsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iTrailIndex[id] = 0;<br />
    }<br />
<br />
    if(g_iTrailColorsNum &gt; 0)<br />
    {<br />
        if(tc &lt; 0)<br />
            g_iTrailColorIndex[id] = -1;<br />
        else<br />
            g_iTrailColorIndex[id] = clamp(tc, 0, g_iTrailColorsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iTrailColorIndex[id] = 0;<br />
    }<br />
<br />
    if(g_iTrailLengthsNum &gt; 0)<br />
    {<br />
        if(tl &lt; 0)<br />
            g_iTrailLengthIndex[id] = -1;<br />
        else<br />
            g_iTrailLengthIndex[id] = clamp(tl, 0, g_iTrailLengthsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iTrailLengthIndex[id] = 0;<br />
    }<br />
}<br />
<br />
stock SavePlayerData(id)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
    if(!HasParachuteAccess(id)) return;<br />
<br />
    if(g_iVault == INVALID_HANDLE) return;<br />
<br />
    new key[64];<br />
    GetVaultKey(id, key, cm(key));<br />
<br />
    new data[128];<br />
    formatex(data, cm(data), "%d %d %d %d %d %d %d",<br />
        g_iDeployMode[id],<br />
        g_iSpeedIndex[id],<br />
        g_bThird[id] ? 1 : 0,<br />
        g_iModelIndex[id],<br />
        g_iTrailIndex[id],<br />
        g_iTrailColorIndex[id],<br />
        g_iTrailLengthIndex[id]<br />
    );<br />
<br />
    nvault_set(g_iVault, key, data);<br />
}<br />
<br />
stock StripQuotes(str[])<br />
{<br />
    if(!str[0]) return;<br />
<br />
    new len = strlen(str);<br />
    if(len &gt;= 2 &amp;&amp; str[0] == '"' &amp;&amp; str[len-1] == '"')<br />
    {<br />
        str[len-1] = 0;<br />
        for(new i=0; i&lt;len; i++)<br />
            str[i] = str[i+1];<br />
    }<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[<img src="https://i.imgur.com/6Hj7mYF.jpeg" loading="lazy"  alt="[Resim: 6Hj7mYF.jpeg]" class="mycode_img" /><br />
<br />
<br />
🪂 HLPlayer.com Ultimate Parachute v1.0<br />
Gelişmiş Paraşüt Sistemi<br />
<span style="font-weight: bold;" class="mycode_b">Coder:</span> Y4S!N61<br />
<span style="font-weight: bold;" class="mycode_b">Platform:</span> Counter-Strike 1.6 / AMX Mod X<br />
<span style="font-weight: bold;" class="mycode_b">Versiyon:</span> 1.0<br />
<hr class="mycode_hr" />
📌 Plugin Hakkında<br />
HLPlayer.com Ultimate Parachute, Counter-Strike 1.6 sunucuları için geliştirilmiş <span style="font-weight: bold;" class="mycode_b">gelişmiş ve tamamen ayarlanabilir bir paraşüt sistemidir</span>.<br />
Klasik paraşüt pluginlerinden farklı olarak oyunculara <span style="font-weight: bold;" class="mycode_b">menü üzerinden birçok özelliği değiştirme imkanı sağlar.</span><br />
Oyuncular;<ul class="mycode_list"><li>Paraşüt açılma modunu<br />
</li>
<li>Düşüş hızını<br />
</li>
<li>Paraşüt modelini<br />
</li>
<li>Paraşüt iz efektini<br />
</li>
<li>İz rengini<br />
</li>
<li>İz uzunluğunu<br />
</li>
<li>Kamera modunu<br />
</li>
</ul>
kendileri seçebilir.<br />
Tüm ayarlar <span style="font-weight: bold;" class="mycode_b">nVault sistemi ile kayıt edilir</span> ve oyuncu tekrar girdiğinde aynı ayarlar yüklenir.<br />
<hr class="mycode_hr" />
⚙ Özellikler<br />
🪂 3 Farklı Paraşüt Açma Sistemi<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Basılı Tut</span> (E tuşu)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Tıkla Aç / Kapat</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Otomatik Açılma (Auto Deploy)</span><br />
</li>
</ul>
<hr class="mycode_hr" />
⚡ Ayarlanabilir Düşüş Hızı<br />
Config üzerinden sınırsız hız eklenebilir.<br />
Örnek:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[speeds]<br />
-100 "Normal"<br />
-60 "Yavaş"<br />
-20 "Ultra Slow"</code></div></div><hr class="mycode_hr" />
🎥 Kamera Sistemi<br />
Paraşüt kullanırken:<ul class="mycode_list"><li><ol type="1" class="mycode_list"><li>şahıs<br />
</li>
</ol>
</li>
<li><ol type="1" class="mycode_list"><li>şahıs<br />
</li>
</ol>
</li>
</ul>
kamera seçilebilir.<br />
<hr class="mycode_hr" />
🎨 Paraşüt Model Sistemi<br />
Config üzerinden sınırsız model eklenebilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[models]<br />
models/parachute1.mdl "Classic"<br />
models/parachute2.mdl "Military"<br />
models/parachute3.mdl "VIP"</code></div></div><hr class="mycode_hr" />
🌈 Trail (İz) Efekt Sistemi<br />
Paraşüt kullanırken oyuncunun arkasında <span style="font-weight: bold;" class="mycode_b">görsel iz efekti oluşur.</span><br />
Configten farklı sprite izleri eklenebilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[trails]<br />
sprites/smoke.spr "Smoke"<br />
sprites/laser.spr "Laser"</code></div></div><hr class="mycode_hr" />
🎨 İz Renk Sistemi<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[trail_colors]<br />
255 0 0 "Kırmızı"<br />
0 255 0 "Yeşil"<br />
0 0 255 "Mavi"<br />
255 255 0 "Sarı"</code></div></div><hr class="mycode_hr" />
📏 İz Uzunluğu<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[trail_lengths]<br />
10 "Kısa"<br />
30 "Orta"<br />
60 "Uzun"</code></div></div><hr class="mycode_hr" />
🔊 Paraşüt Açılma Sesi<br />
Configten özel ses eklenebilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>deploy_sound parachute/deploy.wav</code></div></div><hr class="mycode_hr" />
💾 Oyuncu Ayarlarını Kaydetme<br />
Plugin <span style="font-weight: bold;" class="mycode_b">nVault</span> kullanır.<br />
Oyuncunun şu ayarları kayıt edilir:<ul class="mycode_list"><li>Açılma modu<br />
</li>
<li>Düşüş hızı<br />
</li>
<li>Kamera modu<br />
</li>
<li>Model<br />
</li>
<li>Trail<br />
</li>
<li>Trail rengi<br />
</li>
<li>Trail uzunluğu<br />
</li>
</ul>
<hr class="mycode_hr" />
🔐 Yetki Sistemi<br />
Admin flag ile paraşüt kullanımı sınırlandırılabilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>access_flags "b"</code></div></div><hr class="mycode_hr" />
👥 Takım Yetkisi<br />
Sadece belirli takımlar kullanabilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>access_team_tt 1<br />
access_team_ct 1</code></div></div><hr class="mycode_hr" />
🔫 Paraşütte Silah Kullanımı<br />
Paraşüt açıkken silah kullanımı kapatılabilir.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>weapon_usage 0</code></div></div><br />
<br />
🔢 Round Başına Kullanım Limiti<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>deploys_per_round 3</code></div></div><br />
🕹 Oyuncu Komutu<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/parasut</code></div></div>Oyuncu paraşüt ayar menüsünü açar.<br />
<br />
📂 Config Dosyası<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/configs/ultimate_parachute.ini</code></div></div>Tüm ayarlar buradan yapılır.<br />
<br />
<br />
📦 Kurulum<br />
<br />
1️⃣ <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/plugins</code></div></div><br />
2️⃣<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>plugins.ini</code></div></div> içine ekleyin<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>ultimate_parachute.amxx</code></div></div><br />
3️⃣ Sunucuyu restart edin.<br />
<br />
<br />
<a href="https://disk.yandex.com.tr/d/JI7UQnhlJS9jiw" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: xx-large;" class="mycode_size"><span style="font-family: Impact;" class="mycode_font">İNDİRMEK İÇİN TIKLA</span></span></span></a><br />
<br />
<br />
📊 Uyumlu Sistemler<br />
✔ ReHLDS<br />
✔ ReGameDLL<br />
✔ AMX Mod X 1.8+<br />
✔ Steam / NoSteam<br />
<br />
<br />
👨‍💻 Geliştirici ; <span style="font-weight: bold;" class="mycode_b">Y4S!N61</span><br />
<br />
⭐ Not<br />
<br />
Plugin tamamen <span style="font-weight: bold;" class="mycode_b">config tabanlıdır</span> ve sunucular için maksimum esneklik sağlar.<br />
Forumlarda paylaşabilirsiniz ancak <span style="font-weight: bold;" class="mycode_b">coder bilgisi silinmemelidir.</span><br />
<br />
🎮 Keyifli Oyunlar!<br />
<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/*<br />
    Gelistirilmis, genis ozelliklere ve esnek ayarlara sahip parasut sistemi.<br />
    Coder: Y4S!N61<br />
*/<br />
<br />
#include &lt;amxmodx&gt;<br />
#include &lt;fakemeta&gt;<br />
#include &lt;engine&gt;<br />
#include &lt;fun&gt;<br />
#include &lt;hamsandwich&gt;<br />
#include &lt;nvault&gt;<br />
#include &lt;cstrike&gt;<br />
<br />
#pragma semicolon 1<br />
<br />
#define PLUGIN      "HLPlayer.com Ultimate Parachute"<br />
#define VERSION     "1.0"<br />
#define AUTHOR      "Y4S!N61"<br />
<br />
#define cm(%0)      ( sizeof(%0) - 1 )<br />
<br />
const XO_PLAYER            = 5;<br />
const m_flFallVelocity     = 251;<br />
<br />
#define MAX_SPEEDS   32<br />
#define MAX_MODELS   64<br />
<br />
#define MAX_TRAILS         64<br />
#define MAX_TRAIL_COLORS   32<br />
#define MAX_TRAIL_LENGTHS  32<br />
enum<br />
{<br />
    DEPLOY_HOLD = 0,<br />
    DEPLOY_TAP  = 1,<br />
    DEPLOY_AUTO = 2<br />
};<br />
<br />
new const g_szDeployModeName[3][] = { "Basili Tut", "Tikla (tekrar - kapat)", "Otomatik (tikla - kapat)" };<br />
<br />
new const PARA_CLASS[] = "parachute";<br />
<br />
#define TE_BEAMFOLLOW 22<br />
#define TE_KILLBEAM   99<br />
new g_szCfgPath[256];<br />
new g_szAccessFlags[32];<br />
new g_iAccessBits;<br />
<br />
new g_iAccessTeamTT;<br />
new g_iAccessTeamCT;<br />
<br />
new g_iWeaponUsage;<br />
new g_iDeployModeAccess;<br />
new g_iDeployModeDefault;<br />
<br />
new g_iFallSpeedAccess;<br />
new g_szFallSpeedDefault[32];<br />
<br />
new g_iThirdAccess;<br />
new g_iThirdDefault;<br />
<br />
new g_iModelAccess;<br />
new g_szModelDefault[128];<br />
<br />
new Float:g_flAutoThreshold;<br />
new g_iDeploysPerRound;<br />
new g_szDeploySound[128];<br />
<br />
new g_iSpeedsNum;<br />
new g_szSpeedName[MAX_SPEEDS][32];<br />
new Float:g_flSpeedValue[MAX_SPEEDS];<br />
<br />
new g_iModelsNum;<br />
new g_szModelPath[MAX_MODELS][128];<br />
new g_szModelName[MAX_MODELS][48];<br />
<br />
new g_iTrailAccess;<br />
new g_szTrailDefault[128];<br />
<br />
new g_iTrailColorAccess;<br />
new g_szTrailColorDefault[32];<br />
<br />
new g_iTrailLengthAccess;<br />
new g_szTrailLengthDefault[16];<br />
<br />
new g_iTrailsNum;<br />
new g_szTrailPath[MAX_TRAILS][128];<br />
new g_szTrailName[MAX_TRAILS][48];<br />
new g_iTrailSpriteIdx[MAX_TRAILS];<br />
<br />
new g_iTrailColorsNum;<br />
new g_szTrailColorName[MAX_TRAIL_COLORS][48];<br />
new g_iTrailColorRGB[MAX_TRAIL_COLORS][3];<br />
<br />
new g_iTrailLengthsNum;<br />
new g_szTrailLengthName[MAX_TRAIL_LENGTHS][48];<br />
new g_iTrailLengthVal[MAX_TRAIL_LENGTHS];<br />
<br />
new g_iDefaultTrailIndex;<br />
new g_iDefaultTrailColorIndex;<br />
new g_iDefaultTrailLengthIndex;<br />
<br />
new g_iTrailWidth = 10;<br />
<br />
new g_iTrailIndex[33];<br />
new g_iTrailColorIndex[33];<br />
new g_iTrailLengthIndex[33];<br />
<br />
new g_iTrailMenuPage[33];<br />
new g_iTrailColorMenuPage[33];<br />
new g_iTrailLengthMenuPage[33];<br />
<br />
new bool:g_bTrailActive[33];<br />
<br />
new g_iDefaultSpeedIndex;<br />
new g_iDefaultModelIndex;<br />
<br />
new g_iVault;<br />
<br />
new g_iParaEnt[33];<br />
new bool:g_bParaDeployed[33];<br />
new g_iDeployMode[33];<br />
new g_iSpeedIndex[33];<br />
new bool:g_bThird[33];<br />
new g_iModelIndex[33];<br />
new g_iModelMenuPage[33];<br />
<br />
new g_iLastWeapon[33];<br />
<br />
new g_iDeploysUsed[33];<br />
<br />
public plugin_precache()<br />
{<br />
    precache_model("models/rpgrocket.mdl");<br />
    BuildConfigPath();<br />
    LoadConfig(true);<br />
}<br />
<br />
public plugin_init()<br />
{<br />
    register_plugin(PLUGIN, VERSION, AUTHOR);<br />
<br />
    register_clcmd("say /parasut", "Cmd_Menu");<br />
    register_clcmd("say_team /parasut", "Cmd_Menu");<br />
<br />
    RegisterHam(Ham_Player_PreThink, "player", "OnPreThink", 0);<br />
    RegisterHam(Ham_Spawn, "player", "OnSpawnPost", 1);<br />
    RegisterHam(Ham_Killed, "player", "OnKilledPost", 1);<br />
<br />
    register_logevent("OnRoundStart", 2, "1=Round_Start");<br />
}<br />
<br />
public plugin_cfg()<br />
{<br />
    BuildConfigPath();<br />
    LoadConfig(false);<br />
<br />
    g_iVault = nvault_open("ultimate_parachute");<br />
    if (g_iVault == INVALID_HANDLE)<br />
        set_fail_state("Error opening nVault (ultimate_parachute)");<br />
}<br />
<br />
public plugin_end()<br />
{<br />
    if (g_iVault != INVALID_HANDLE)<br />
        nvault_close(g_iVault);<br />
}<br />
<br />
public OnSpawnPost(id)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    RemoveParachute(id, true);<br />
<br />
    g_iDeploysUsed[id] = 0;<br />
<br />
    LoadPlayerData(id);<br />
}<br />
<br />
public OnKilledPost(victim, attacker, shouldgib)<br />
{<br />
    if(!is_user_connected(victim)) return;<br />
    RemoveParachute(victim, true);<br />
}<br />
<br />
public OnRoundStart()<br />
{<br />
    for(new id=1; id&lt;=32; id++)<br />
    {<br />
        g_iDeploysUsed[id] = 0;<br />
        if(is_user_connected(id))<br />
            RemoveParachute(id, true);<br />
    }<br />
}<br />
<br />
public client_putinserver(id)<br />
{<br />
    ResetPlayerState(id);<br />
}<br />
<br />
public client_disconnected(id)<br />
{<br />
    SavePlayerData(id);<br />
    ResetPlayerState(id);<br />
}<br />
<br />
public OnPreThink(id)<br />
{<br />
    if(!is_user_alive(id))<br />
        return;<br />
<br />
    if(!HasParachuteAccess(id))<br />
    {<br />
        RemoveParachute(id, false);<br />
        return;<br />
    }<br />
<br />
    if(pev(id, pev_movetype) == MOVETYPE_FLY)<br />
    {<br />
        RemoveParachute(id, false);<br />
        return;<br />
    }<br />
<br />
    new buttons = pev(id, pev_button);<br />
    new oldbuttons = pev(id, pev_oldbuttons);<br />
    new flags = pev(id, pev_flags);<br />
<br />
    static Float:vel[3];<br />
    pev(id, pev_velocity, vel);<br />
<br />
    new bool:bDescending = (vel[2] &lt; 0.0);<br />
<br />
    switch(g_iDeployMode[id])<br />
    {<br />
        case DEPLOY_HOLD:<br />
        {<br />
            if( (buttons &amp; IN_USE) &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending )<br />
            {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!g_bParaDeployed[id])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!TryStartDeploy(id))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RemoveParachute(id, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_bParaDeployed[id] = true;<br />
                    StartTrailIfNeeded(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnsureEntity(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplyParachute(id, vel);<br />
            }<br />
            else<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
        }<br />
        case DEPLOY_TAP:<br />
        {<br />
            if( (buttons &amp; IN_USE) &amp;&amp; !(oldbuttons &amp; IN_USE) &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending )<br />
            {<br />
                if(!g_bParaDeployed[id])<br />
                {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!TryStartDeploy(id))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
<br />
                    EnsureEntity(id);<br />
                    g_bParaDeployed[id] = true;<br />
                    StartTrailIfNeeded(id);<br />
                }<br />
                else<br />
                {<br />
                    RemoveParachute(id, false);<br />
                }<br />
            }<br />
<br />
            if(g_bParaDeployed[id] &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending)<br />
            {<br />
                EnsureEntity(id);<br />
                ApplyParachute(id, vel);<br />
            }<br />
            else if(flags &amp; FL_ONGROUND)<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
        }<br />
        case DEPLOY_AUTO:<br />
        {<br />
            static Float:fallvel;<br />
            fallvel = get_pdata_float(id, m_flFallVelocity, XO_PLAYER);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!g_bParaDeployed[id] &amp;&amp; bDescending &amp;&amp; fallvel &gt;= g_flAutoThreshold &amp;&amp; !(flags &amp; FL_ONGROUND))<br />
            {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!TryStartDeploy(id))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
                EnsureEntity(id);<br />
                g_bParaDeployed[id] = true;<br />
                StartTrailIfNeeded(id);<br />
            }<br />
<br />
            if(g_bParaDeployed[id] &amp;&amp; !(flags &amp; FL_ONGROUND) &amp;&amp; bDescending)<br />
            {<br />
                EnsureEntity(id);<br />
                ApplyParachute(id, vel);<br />
            }<br />
            else if(flags &amp; FL_ONGROUND)<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
<br />
            if(g_bParaDeployed[id] &amp;&amp; (buttons &amp; IN_USE) &amp;&amp; !(oldbuttons &amp; IN_USE) &amp;&amp; !(flags &amp; FL_ONGROUND))<br />
            {<br />
                RemoveParachute(id, false);<br />
            }<br />
        }<br />
    }<br />
<br />
    if(!(buttons &amp; IN_USE) &amp;&amp; (oldbuttons &amp; IN_USE))<br />
    {<br />
        RestoreGravityIfNeeded(id);<br />
    }<br />
}<br />
<br />
public Cmd_Menu(id)<br />
{<br />
    if(!is_user_connected(id)) return PLUGIN_HANDLED;<br />
<br />
    if(!HasParachuteAccess(id))<br />
    {<br />
        client_print(id, print_chat, "[Ultimate Parachute] Parasut yetkiniz yok.");<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(g_bParaDeployed[id] || g_iParaEnt[id] &gt; 0)<br />
        return PLUGIN_HANDLED;<br />
<br />
    new menu = menu_create("Parasut Ayarlari", "Menu_Handler");<br />
<br />
    new sz[192];<br />
<br />
    if(g_iDeployModeAccess)<br />
    {<br />
        formatex(sz, cm(sz), "Acilis Modu: %s", g_szDeployModeName[g_iDeployMode[id]]);<br />
        menu_additem(menu, sz, "0");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Acilis Modu: d%s", g_szDeployModeName[g_iDeployMode[id]]);<br />
        menu_additem(menu, sz, "0");<br />
    }<br />
<br />
    if(g_iThirdAccess)<br />
    {<br />
        formatex(sz, cm(sz), "Gorunus: %s", g_bThird[id] ? "3. Sahis" : "1. Sahis");<br />
        menu_additem(menu, sz, "1");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Gorunus: d%s", g_bThird[id] ? "3. Sahis" : "1. Sahis");<br />
        menu_additem(menu, sz, "1");<br />
    }<br />
<br />
    if(g_iFallSpeedAccess &amp;&amp; g_iSpeedsNum &gt; 0)<br />
    {<br />
        formatex(sz, cm(sz), "Dusus Hizi: %s", g_szSpeedName[g_iSpeedIndex[id]]);<br />
        menu_additem(menu, sz, "2");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Dusus Hizi: d%s", (g_iSpeedsNum &gt; 0) ? g_szSpeedName[g_iSpeedIndex[id]] : "liste yok");<br />
        menu_additem(menu, sz, "2");<br />
    }<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        new const szRandom[] = "Degisen model";<br />
        if(g_iModelIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Model: %s", szRandom);<br />
        else<br />
            formatex(sz, cm(sz), "Model: %s", g_szModelName[g_iModelIndex[id]]);<br />
<br />
        if(!g_iModelAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "3");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Model: dliste yok");<br />
        menu_additem(menu, sz, "3");<br />
    }<br />
<br />
    if(g_iTrailsNum &gt; 0)<br />
    {<br />
        new const szRandomTrail[] = "Degisen iz";<br />
        if(g_iTrailIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Iz: %s", szRandomTrail);<br />
        else<br />
            formatex(sz, cm(sz), "Iz: %s", g_szTrailName[g_iTrailIndex[id]]);<br />
<br />
        if(!g_iTrailAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "4");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Iz: dliste yok");<br />
        menu_additem(menu, sz, "4");<br />
    }<br />
<br />
    if(g_iTrailColorsNum &gt; 0)<br />
    {<br />
        new const szRandomColor[] = "Rastgele";<br />
        if(g_iTrailColorIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Iz Rengi: %s", szRandomColor);<br />
        else<br />
            formatex(sz, cm(sz), "Iz Rengi: %s", g_szTrailColorName[g_iTrailColorIndex[id]]);<br />
<br />
        if(!g_iTrailColorAccess || !g_iTrailAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "5");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Iz Rengi: dliste yok");<br />
        menu_additem(menu, sz, "5");<br />
    }<br />
<br />
    if(g_iTrailLengthsNum &gt; 0)<br />
    {<br />
        new const szRandomLen[] = "Rastgele";<br />
        if(g_iTrailLengthIndex[id] == -1)<br />
            formatex(sz, cm(sz), "Iz Uzunlugu: %s", szRandomLen);<br />
        else<br />
            formatex(sz, cm(sz), "Iz Uzunlugu: %s", g_szTrailLengthName[g_iTrailLengthIndex[id]]);<br />
<br />
        if(!g_iTrailLengthAccess || !g_iTrailAccess)<br />
            replace(sz, cm(sz), "y", "d");<br />
<br />
        menu_additem(menu, sz, "6");<br />
    }<br />
    else<br />
    {<br />
        formatex(sz, cm(sz), "Iz Uzunlugu: dliste yok");<br />
        menu_additem(menu, sz, "6");<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);<br />
    menu_display(id, menu);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
public Menu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        SavePlayerData(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[8], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, cm(info), _, _, callback);<br />
    new key = str_to_num(info);<br />
<br />
    switch(key)<br />
    {<br />
        case 0:<br />
        {<br />
            if(g_iDeployModeAccess)<br />
            {<br />
                g_iDeployMode[id]++;<br />
                if(g_iDeployMode[id] &gt; DEPLOY_AUTO) g_iDeployMode[id] = DEPLOY_HOLD;<br />
            }<br />
        }<br />
        case 1:<br />
        {<br />
            if(g_iThirdAccess)<br />
            {<br />
                g_bThird[id] = !g_bThird[id];<br />
                if(!g_bThird[id]) set_view(id, CAMERA_NONE);<br />
            }<br />
        }<br />
        case 2:<br />
        {<br />
            if(g_iFallSpeedAccess &amp;&amp; g_iSpeedsNum &gt; 0)<br />
            {<br />
                g_iSpeedIndex[id]++;<br />
                if(g_iSpeedIndex[id] &gt;= g_iSpeedsNum) g_iSpeedIndex[id] = 0;<br />
            }<br />
        }<br />
        case 3:<br />
        {<br />
            if(g_iModelAccess &amp;&amp; g_iModelsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowModelMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
        case 4:<br />
        {<br />
            if(g_iTrailAccess &amp;&amp; g_iTrailsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowTrailMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
        case 5:<br />
        {<br />
            if(g_iTrailAccess &amp;&amp; g_iTrailColorAccess &amp;&amp; g_iTrailColorsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowTrailColorMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
        case 6:<br />
        {<br />
            if(g_iTrailAccess &amp;&amp; g_iTrailLengthAccess &amp;&amp; g_iTrailLengthsNum &gt; 0)<br />
            {<br />
                menu_destroy(menu);<br />
                ShowTrailLengthMenu(id, 0);<br />
                return PLUGIN_HANDLED;<br />
            }<br />
        }<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    Cmd_Menu(id);<br />
<br />
    SavePlayerData(id);<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock ShowModelMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iModelsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iModelMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Model Secimi", "ModelMenu_Handler");<br />
<br />
    menu_additem(menu, "Degisen model", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iModelsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szModelName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public ModelMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowModelMenu(id, g_iModelMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowModelMenu(id, g_iModelMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iModelIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iModelsNum)<br />
            g_iModelIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock bool:TryStartDeploy(id)<br />
{<br />
    if(g_iDeploysPerRound &gt; 0 &amp;&amp; g_iDeploysUsed[id] &gt;= g_iDeploysPerRound)<br />
        return false;<br />
<br />
    g_iDeploysUsed[id]++;<br />
<br />
    if(g_szDeploySound[0])<br />
        emit_sound(id, CHAN_ITEM, g_szDeploySound, 1.0, ATTN_NORM, 0, PITCH_NORM);<br />
<br />
    if(!g_iWeaponUsage)<br />
        DenyWeapons(id);<br />
<br />
    if(g_bThird[id])<br />
        set_view(id, CAMERA_3RDPERSON);<br />
<br />
    set_pev(id, pev_gravity, 0.1);<br />
<br />
    return true;<br />
}<br />
<br />
stock EnsureEntity(id)<br />
{<br />
    if(g_iParaEnt[id] &gt; 0 &amp;&amp; is_valid_ent(g_iParaEnt[id]))<br />
        return;<br />
<br />
    new ent = create_entity("info_target");<br />
    if(ent &lt;= 0) return;<br />
<br />
    entity_set_string(ent, EV_SZ_classname, PARA_CLASS);<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        new mdlIndex = g_iModelIndex[id];<br />
        if(mdlIndex &lt; 0) mdlIndex = random_num(0, g_iModelsNum - 1);<br />
        entity_set_model(ent, g_szModelPath[mdlIndex]);<br />
    }<br />
<br />
    entity_set_int(ent, EV_INT_movetype, MOVETYPE_FOLLOW);<br />
    entity_set_int(ent, EV_INT_solid, SOLID_NOT);<br />
    entity_set_edict(ent, EV_ENT_aiment, id);<br />
    entity_set_edict(ent, EV_ENT_owner, id);<br />
<br />
    entity_set_int(ent, EV_INT_sequence, 0);<br />
    entity_set_int(ent, EV_INT_gaitsequence, 1);<br />
    entity_set_float(ent, EV_FL_frame, 0.0);<br />
    entity_set_float(ent, EV_FL_fuser1, 0.0);<br />
<br />
    g_iParaEnt[id] = ent;<br />
}<br />
<br />
stock ShowTrailMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iTrailsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iTrailMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Iz Secimi", "TrailMenu_Handler");<br />
<br />
    menu_additem(menu, "Degisen iz", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iTrailsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szTrailName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public TrailMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailMenu(id, g_iTrailMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailMenu(id, g_iTrailMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iTrailIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iTrailsNum)<br />
            g_iTrailIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock ShowTrailColorMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iTrailColorsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iTrailColorMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Iz Rengi Secimi", "TrailColorMenu_Handler");<br />
<br />
    menu_additem(menu, "Rastgele", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iTrailColorsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szTrailColorName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public TrailColorMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailColorMenu(id, g_iTrailColorMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailColorMenu(id, g_iTrailColorMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iTrailColorIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iTrailColorsNum)<br />
            g_iTrailColorIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
stock ShowTrailLengthMenu(id, page)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
<br />
    new const perPage = 7;<br />
<br />
    new totalItems = g_iTrailLengthsNum + 1;<br />
    new maxPage = 0;<br />
    if(totalItems &gt; 0)<br />
        maxPage = (totalItems - 1) / perPage;<br />
<br />
    if(page &lt; 0) page = 0;<br />
    if(page &gt; maxPage) page = maxPage;<br />
<br />
    g_iTrailLengthMenuPage[id] = page;<br />
<br />
    new menu = menu_create("Iz Uzunlugu Secimi", "TrailLengthMenu_Handler");<br />
<br />
    menu_additem(menu, "Rastgele", "R");<br />
<br />
    new sz[96], info[12];<br />
    for(new i = 0; i &lt; g_iTrailLengthsNum; i++)<br />
    {<br />
        formatex(sz, charsmax(sz), "%s", g_szTrailLengthName[i]);<br />
        formatex(info, charsmax(info), "%d", i);<br />
        menu_additem(menu, sz, info);<br />
    }<br />
<br />
    menu_setprop(menu, MPROP_PERPAGE, perPage);<br />
    menu_setprop(menu, MPROP_BACKNAME, "Geri");<br />
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");<br />
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");<br />
<br />
    menu_display(id, menu, page);<br />
}<br />
<br />
public TrailLengthMenu_Handler(id, menu, item)<br />
{<br />
    if(item == MENU_EXIT)<br />
    {<br />
        menu_destroy(menu);<br />
        Cmd_Menu(id);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    if(item == MENU_BACK)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailLengthMenu(id, g_iTrailLengthMenuPage[id] - 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
    if(item == MENU_MORE)<br />
    {<br />
        menu_destroy(menu);<br />
        ShowTrailLengthMenu(id, g_iTrailLengthMenuPage[id] + 1);<br />
        return PLUGIN_HANDLED;<br />
    }<br />
<br />
    new info[12], access, callback;<br />
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);<br />
<br />
    if(info[0] == 'R')<br />
    {<br />
        g_iTrailLengthIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        new idx = str_to_num(info);<br />
        if(idx &gt;= 0 &amp;&amp; idx &lt; g_iTrailLengthsNum)<br />
            g_iTrailLengthIndex[id] = idx;<br />
    }<br />
<br />
    menu_destroy(menu);<br />
    SavePlayerData(id);<br />
    Cmd_Menu(id);<br />
<br />
    return PLUGIN_HANDLED;<br />
}<br />
<br />
stock ApplyParachute(id, Float:vel[3])<br />
{<br />
    set_pev(id, pev_gravity, 0.1);<br />
<br />
    if(g_iSpeedsNum &gt; 0)<br />
    {<br />
        new i = g_iSpeedIndex[id];<br />
        new Float:target = g_flSpeedValue[i];<br />
<br />
        vel[2] = (vel[2] + 40.0 &lt; target) ? (vel[2] + 40.0) : target;<br />
        set_pev(id, pev_velocity, vel);<br />
    }<br />
<br />
    new ent = g_iParaEnt[id];<br />
    if(ent &gt; 0 &amp;&amp; is_valid_ent(ent))<br />
    {<br />
        new Float:frame;<br />
<br />
        if(entity_get_int(ent, EV_INT_sequence) == 0)<br />
        {<br />
            frame = entity_get_float(ent, EV_FL_fuser1) + 1.0;<br />
            entity_set_float(ent, EV_FL_fuser1, frame);<br />
            entity_set_float(ent, EV_FL_frame, frame);<br />
<br />
            if(frame &gt; 100.0)<br />
            {<br />
                entity_set_float(ent, EV_FL_animtime, 0.0);<br />
                entity_set_float(ent, EV_FL_framerate, 0.4);<br />
                entity_set_int(ent, EV_INT_sequence, 1);<br />
                entity_set_int(ent, EV_INT_gaitsequence, 1);<br />
                entity_set_float(ent, EV_FL_frame, 0.0);<br />
                entity_set_float(ent, EV_FL_fuser1, 0.0);<br />
            }<br />
        }<br />
    }<br />
}<br />
<br />
stock RemoveParachute(id, bool:bForce)<br />
{<br />
    if(g_iParaEnt[id] &gt; 0)<br />
    {<br />
        if(is_valid_ent(g_iParaEnt[id]))<br />
            remove_entity(g_iParaEnt[id]);<br />
        g_iParaEnt[id] = 0;<br />
    }<br />
<br />
    if(g_bParaDeployed[id] || bForce)<br />
    {<br />
        g_bParaDeployed[id] = false;<br />
<br />
        KillTrail(id);<br />
<br />
        set_view(id, CAMERA_NONE);<br />
<br />
        if(!g_iWeaponUsage)<br />
            RestoreWeapon(id);<br />
<br />
        RestoreGravityIfNeeded(id);<br />
    }<br />
}<br />
<br />
stock RestoreGravityIfNeeded(id)<br />
{<br />
    if(!is_user_alive(id)) return;<br />
<br />
    static Float:gr;<br />
    pev(id, pev_gravity, gr);<br />
<br />
    if(gr == 0.1)<br />
        set_pev(id, pev_gravity, 1.0);<br />
}<br />
<br />
stock KillTrail(id)<br />
{<br />
    if(!g_bTrailActive[id])<br />
        return;<br />
<br />
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);<br />
    write_byte(TE_KILLBEAM);<br />
    write_short(id);<br />
    message_end();<br />
<br />
    g_bTrailActive[id] = false;<br />
}<br />
<br />
stock StartTrailIfNeeded(id)<br />
{<br />
    if(!g_bParaDeployed[id])<br />
        return;<br />
<br />
    if(!g_iTrailAccess || g_iTrailsNum &lt;= 0 || g_iTrailLengthsNum &lt;= 0)<br />
        return;<br />
<br />
    new iLenIdx = g_iTrailLengthIndex[id];<br />
    if(iLenIdx == -1 &amp;&amp; g_iTrailLengthsNum &gt; 0)<br />
        iLenIdx = random_num(0, g_iTrailLengthsNum - 1);<br />
<br />
    if(iLenIdx &lt; 0 || iLenIdx &gt;= g_iTrailLengthsNum)<br />
        return;<br />
<br />
    new life = g_iTrailLengthVal[iLenIdx];<br />
    if(life &lt;= 0)<br />
    {<br />
        KillTrail(id);<br />
        return;<br />
    }<br />
<br />
    new iTrailIdx = g_iTrailIndex[id];<br />
    if(iTrailIdx == -1 &amp;&amp; g_iTrailsNum &gt; 0)<br />
        iTrailIdx = random_num(0, g_iTrailsNum - 1);<br />
<br />
    if(iTrailIdx &lt; 0 || iTrailIdx &gt;= g_iTrailsNum)<br />
        return;<br />
<br />
    new sprite = g_iTrailSpriteIdx[iTrailIdx];<br />
    if(sprite &lt;= 0)<br />
        return;<br />
<br />
    new iColorIdx = g_iTrailColorIndex[id];<br />
    if(iColorIdx == -1 &amp;&amp; g_iTrailColorsNum &gt; 0)<br />
        iColorIdx = random_num(0, g_iTrailColorsNum - 1);<br />
<br />
    new r = 255, g = 255, b = 255;<br />
    if(iColorIdx &gt;= 0 &amp;&amp; iColorIdx &lt; g_iTrailColorsNum)<br />
    {<br />
        r = g_iTrailColorRGB[iColorIdx][0];<br />
        g = g_iTrailColorRGB[iColorIdx][1];<br />
        b = g_iTrailColorRGB[iColorIdx][2];<br />
    }<br />
<br />
    KillTrail(id);<br />
<br />
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);<br />
    write_byte(TE_BEAMFOLLOW);<br />
    write_short(id);<br />
    write_short(sprite);<br />
    write_byte(clamp(life, 0, 255));<br />
    write_byte(g_iTrailWidth);<br />
    write_byte(r);<br />
    write_byte(g);<br />
    write_byte(b);<br />
    write_byte(255);<br />
    message_end();<br />
<br />
    g_bTrailActive[id] = true;<br />
}<br />
<br />
stock DenyWeapons(id)<br />
{<br />
    new weapon = get_user_weapon(id);<br />
    if(weapon != CSW_KNIFE)<br />
    {<br />
        g_iLastWeapon[id] = weapon;<br />
        engclient_cmd(id, "weapon_knife");<br />
    }<br />
<br />
    new buttons = pev(id, pev_button);<br />
    buttons &amp;= ~IN_ATTACK;<br />
    buttons &amp;= ~IN_ATTACK2;<br />
    set_pev(id, pev_button, buttons);<br />
}<br />
<br />
stock RestoreWeapon(id)<br />
{<br />
    if(g_iLastWeapon[id] &lt;= 0) return;<br />
<br />
    new szWpn[32];<br />
    get_weaponname(g_iLastWeapon[id], szWpn, cm(szWpn));<br />
    engclient_cmd(id, szWpn);<br />
    g_iTrailIndex[id] = (g_iTrailsNum &gt; 0) ? g_iDefaultTrailIndex : 0;<br />
    g_iTrailColorIndex[id] = (g_iTrailColorsNum &gt; 0) ? g_iDefaultTrailColorIndex : 0;<br />
    g_iTrailLengthIndex[id] = (g_iTrailLengthsNum &gt; 0) ? g_iDefaultTrailLengthIndex : 0;<br />
    g_bTrailActive[id] = false;<br />
<br />
g_iLastWeapon[id] = 0;<br />
}<br />
<br />
stock BuildConfigPath()<br />
{<br />
    new cfgdir[128];<br />
    get_localinfo("amxx_configsdir", cfgdir, cm(cfgdir));<br />
    formatex(g_szCfgPath, cm(g_szCfgPath), "%s/ultimate_parachute.ini", cfgdir);<br />
}<br />
<br />
stock LoadConfig(bool:bPrecacheOnly)<br />
{<br />
    g_szAccessFlags[0] = 0;<br />
    g_iAccessBits = 0;<br />
<br />
    g_iAccessTeamTT = 1;<br />
    g_iAccessTeamCT = 1;<br />
<br />
    g_iWeaponUsage = 1;<br />
    g_iDeployModeAccess = 1;<br />
    g_iDeployModeDefault = DEPLOY_HOLD;<br />
    g_flAutoThreshold = 350.0;<br />
    g_iDeploysPerRound = 0;<br />
<br />
    g_iFallSpeedAccess = 1;<br />
    g_szFallSpeedDefault[0] = 0;<br />
<br />
    g_iThirdAccess = 1;<br />
    g_iThirdDefault = 0;<br />
<br />
    g_iModelAccess = 1;<br />
    g_szModelDefault[0] = 0;<br />
    g_szDeploySound[0] = 0;<br />
<br />
    g_iSpeedsNum = 0;<br />
    g_iModelsNum = 0;<br />
<br />
    g_iTrailAccess = 1;<br />
    g_szTrailDefault[0] = 0;<br />
    g_iTrailColorAccess = 1;<br />
    g_szTrailColorDefault[0] = 0;<br />
    g_iTrailLengthAccess = 1;<br />
    g_szTrailLengthDefault[0] = 0;<br />
<br />
    g_iTrailsNum = 0;<br />
    g_iTrailColorsNum = 0;<br />
    g_iTrailLengthsNum = 0;<br />
    g_iDefaultSpeedIndex = 0;<br />
    g_iDefaultModelIndex = 0;<br />
<br />
    g_iDefaultTrailIndex = -1;<br />
    g_iDefaultTrailColorIndex = -1;<br />
    g_iDefaultTrailLengthIndex = 0;<br />
    if(!file_exists(g_szCfgPath))<br />
    {<br />
        return;<br />
    }<br />
<br />
    new line[256], section[32];<br />
    section[0] = 0;<br />
<br />
    new fp = fopen(g_szCfgPath, "rt");<br />
    if(!fp) return;<br />
<br />
    while(!feof(fp))<br />
    {<br />
        fgets(fp, line, cm(line));<br />
        trim(line);<br />
<br />
        if(!line[0]) continue;<br />
        if(line[0] == ';') continue;<br />
        if(line[0] == '/' &amp;&amp; line[1] == '/') continue;<br />
<br />
        if(line[0] == '[')<br />
        {<br />
            new iEnd = contain(line, "]");<br />
            if(iEnd &gt; 1)<br />
            {<br />
                new j = 0;<br />
                for(new i = 1; i &lt; iEnd &amp;&amp; j &lt; cm(section); i++)<br />
                    section[j++] = line[i];<br />
                section[j] = 0;<br />
                strtolower(section);<br />
            }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(equali(section, "settings"))<br />
        {<br />
            new k[64], v[192];<br />
            k[0]=0; v[0]=0;<br />
<br />
            parse(line, k, cm(k), v, cm(v));<br />
            strtolower(k);<br />
<br />
            StripQuotes(v);<br />
<br />
            if(equali(k, "access_flags"))<br />
            {<br />
                copy(g_szAccessFlags, cm(g_szAccessFlags), v);<br />
                g_iAccessBits = read_flags(g_szAccessFlags);<br />
            }<br />
            else if(equali(k, "access_team_tt"))<br />
            {<br />
                g_iAccessTeamTT = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "access_team_ct"))<br />
            {<br />
                g_iAccessTeamCT = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "weapon_usage"))<br />
            {<br />
                g_iWeaponUsage = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "deploy_mode_access"))<br />
            {<br />
                g_iDeployModeAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "deploy_mode_default"))<br />
            {<br />
                g_iDeployModeDefault = clamp(str_to_num(v), 0, 2);<br />
            }<br />
            else if(equali(k, "autodeploy_threshold"))<br />
            {<br />
                g_flAutoThreshold = floatclamp(str_to_float(v), 0.0, 9999.0);<br />
            }<br />
            else if(equali(k, "deploys_per_round"))<br />
            {<br />
                g_iDeploysPerRound = max(0, str_to_num(v));<br />
            }<br />
            else if(equali(k, "fall_speed_access"))<br />
            {<br />
                g_iFallSpeedAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "fall_speed_default"))<br />
            {<br />
                copy(g_szFallSpeedDefault, cm(g_szFallSpeedDefault), v);<br />
            }<br />
            else if(equali(k, "3rd_person_view_access"))<br />
            {<br />
                g_iThirdAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "3rd_person_view_default"))<br />
            {<br />
                g_iThirdDefault = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "model_access"))<br />
            {<br />
                g_iModelAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "model_default"))<br />
            {<br />
                copy(g_szModelDefault, cm(g_szModelDefault), v);<br />
            }<br />
            else if(equali(k, "trail_access"))<br />
            {<br />
                g_iTrailAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "trail_default"))<br />
            {<br />
                copy(g_szTrailDefault, cm(g_szTrailDefault), v);<br />
            }<br />
            else if(equali(k, "trail_color_access"))<br />
            {<br />
                g_iTrailColorAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "trail_color_default"))<br />
            {<br />
                copy(g_szTrailColorDefault, cm(g_szTrailColorDefault), v);<br />
            }<br />
            else if(equali(k, "trail_length_access"))<br />
            {<br />
                g_iTrailLengthAccess = clamp(str_to_num(v), 0, 1);<br />
            }<br />
            else if(equali(k, "trail_length_default"))<br />
            {<br />
                copy(g_szTrailLengthDefault, cm(g_szTrailLengthDefault), v);<br />
            }<br />
            else if(equali(k, "trail_width"))<br />
            {<br />
                g_iTrailWidth = clamp(str_to_num(v), 0, 255);<br />
            }<br />
            else if(equali(k, "deploy_sound"))<br />
            {<br />
                copy(g_szDeploySound, cm(g_szDeploySound), v);<br />
            }<br />
        }<br />
        else if(equali(section, "speeds"))<br />
        {<br />
            if(g_iSpeedsNum &gt;= MAX_SPEEDS) continue;<br />
<br />
            new sSpeed[32], sName[64];<br />
            sSpeed[0]=0; sName[0]=0;<br />
            parse(line, sSpeed, cm(sSpeed), sName, cm(sName));<br />
            StripQuotes(sSpeed);<br />
            StripQuotes(sName);<br />
<br />
            if(!sSpeed[0] || !sName[0]) continue;<br />
<br />
            copy(g_szSpeedName[g_iSpeedsNum], cm(g_szSpeedName[]), sName);<br />
            g_flSpeedValue[g_iSpeedsNum] = str_to_float(sSpeed);<br />
            g_iSpeedsNum++;<br />
        }<br />
        else if(equali(section, "models"))<br />
        {<br />
            if(g_iModelsNum &gt;= MAX_MODELS) continue;<br />
<br />
            new path[160], name[64];<br />
            path[0]=0; name[0]=0;<br />
<br />
            parse(line, path, cm(path), name, cm(name));<br />
            StripQuotes(path);<br />
            StripQuotes(name);<br />
<br />
            if(!path[0]) continue;<br />
<br />
            copy(g_szModelPath[g_iModelsNum], cm(g_szModelPath[]), path);<br />
<br />
            if(name[0])<br />
                copy(g_szModelName[g_iModelsNum], cm(g_szModelName[]), name);<br />
            else<br />
                formatex(g_szModelName[g_iModelsNum], cm(g_szModelName[]), "Model %d", g_iModelsNum + 1);<br />
<br />
            if(bPrecacheOnly)<br />
            {<br />
                if(containi(path, ".mdl") != -1)<br />
                    precache_model(path);<br />
            }<br />
<br />
            g_iModelsNum++;<br />
        }<br />
<br />
        else if(equali(section, "trails"))<br />
        {<br />
            if(g_iTrailsNum &gt;= MAX_TRAILS) continue;<br />
<br />
            new path[160], name[64];<br />
            path[0]=0; name[0]=0;<br />
<br />
            parse(line, path, cm(path), name, cm(name));<br />
            StripQuotes(path);<br />
            StripQuotes(name);<br />
<br />
            if(!path[0]) continue;<br />
<br />
            copy(g_szTrailPath[g_iTrailsNum], cm(g_szTrailPath[]), path);<br />
<br />
            if(name[0])<br />
                copy(g_szTrailName[g_iTrailsNum], cm(g_szTrailName[]), name);<br />
            else<br />
                formatex(g_szTrailName[g_iTrailsNum], cm(g_szTrailName[]), "Iz %d", g_iTrailsNum + 1);<br />
<br />
            if(bPrecacheOnly)<br />
            {<br />
                if(containi(path, ".spr") != -1)<br />
                    g_iTrailSpriteIdx[g_iTrailsNum] = precache_model(path);<br />
            }<br />
            else<br />
            {<br />
                g_iTrailSpriteIdx[g_iTrailsNum] = engfunc(EngFunc_ModelIndex, path);<br />
            }<br />
<br />
            g_iTrailsNum++;<br />
        }<br />
        else if(equali(section, "trail_colors"))<br />
        {<br />
            if(g_iTrailColorsNum &gt;= MAX_TRAIL_COLORS) continue;<br />
<br />
            new rgb[32], name[64];<br />
            rgb[0]=0; name[0]=0;<br />
<br />
            parse(line, rgb, cm(rgb), name, cm(name));<br />
            StripQuotes(rgb);<br />
            StripQuotes(name);<br />
<br />
            if(!rgb[0]) continue;<br />
<br />
            new sr[8], sg[8], sb[8];<br />
            sr[0]=sg[0]=sb[0]=0;<br />
            parse(rgb, sr, cm(sr), sg, cm(sg), sb, cm(sb));<br />
<br />
            new r = clamp(str_to_num(sr), 0, 255);<br />
            new g = clamp(str_to_num(sg), 0, 255);<br />
            new b = clamp(str_to_num(sb), 0, 255);<br />
<br />
            g_iTrailColorRGB[g_iTrailColorsNum][0] = r;<br />
            g_iTrailColorRGB[g_iTrailColorsNum][1] = g;<br />
            g_iTrailColorRGB[g_iTrailColorsNum][2] = b;<br />
<br />
            if(name[0])<br />
                copy(g_szTrailColorName[g_iTrailColorsNum], cm(g_szTrailColorName[]), name);<br />
            else<br />
                formatex(g_szTrailColorName[g_iTrailColorsNum], cm(g_szTrailColorName[]), "Цвет %d", g_iTrailColorsNum + 1);<br />
<br />
            g_iTrailColorsNum++;<br />
        }<br />
        else if(equali(section, "trail_lengths"))<br />
        {<br />
            if(g_iTrailLengthsNum &gt;= MAX_TRAIL_LENGTHS) continue;<br />
<br />
            new lenStr[16], name[64];<br />
            lenStr[0]=0; name[0]=0;<br />
<br />
            parse(line, lenStr, cm(lenStr), name, cm(name));<br />
            StripQuotes(lenStr);<br />
            StripQuotes(name);<br />
<br />
            if(!lenStr[0]) continue;<br />
<br />
            g_iTrailLengthVal[g_iTrailLengthsNum] = max(0, str_to_num(lenStr));<br />
<br />
            if(name[0])<br />
                copy(g_szTrailLengthName[g_iTrailLengthsNum], cm(g_szTrailLengthName[]), name);<br />
            else<br />
                formatex(g_szTrailLengthName[g_iTrailLengthsNum], cm(g_szTrailLengthName[]), "Uzunluk %d", g_iTrailLengthsNum + 1);<br />
<br />
            g_iTrailLengthsNum++;<br />
        }<br />
<br />
    }<br />
<br />
    fclose(fp);<br />
<br />
    ResolveDefaults();<br />
<br />
    NormalizeDeploySound(bPrecacheOnly);<br />
}<br />
<br />
stock ResolveDefaults()<br />
{<br />
    g_iDefaultSpeedIndex = 0;<br />
    if(g_iSpeedsNum &gt; 0)<br />
    {<br />
        if(g_szFallSpeedDefault[0])<br />
        {<br />
            new bool:isIndex = true;<br />
            for(new j=0; g_szFallSpeedDefault[j]; j++)<br />
            {<br />
                if(g_szFallSpeedDefault[j] == '-' || g_szFallSpeedDefault[j] == '.' )<br />
                {<br />
                    isIndex = false;<br />
                    break;<br />
                }<br />
            }<br />
<br />
            if(isIndex)<br />
            {<br />
                new idx = str_to_num(g_szFallSpeedDefault);<br />
                if(idx &gt;= 0 &amp;&amp; idx &lt; g_iSpeedsNum)<br />
                    g_iDefaultSpeedIndex = idx;<br />
            }<br />
            else<br />
            {<br />
                new Float:f = str_to_float(g_szFallSpeedDefault);<br />
                for(new i=0;i&lt;g_iSpeedsNum;i++)<br />
                {<br />
                    if(floatabs(g_flSpeedValue[i] - f) &lt; 0.01)<br />
                    {<br />
                        g_iDefaultSpeedIndex = i;<br />
                        break;<br />
                    }<br />
                }<br />
            }<br />
        }<br />
        else<br />
        {<br />
            for(new i=0;i&lt;g_iSpeedsNum;i++)<br />
            {<br />
                if(floatabs(g_flSpeedValue[i] - (-100.0)) &lt; 0.01)<br />
                {<br />
                    g_iDefaultSpeedIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultModelIndex = -1;<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        if(g_szModelDefault[0])<br />
        {<br />
            for(new i=0;i&lt;g_iModelsNum;i++)<br />
            {<br />
                if(equali(g_szModelPath[i], g_szModelDefault))<br />
                {<br />
                    g_iDefaultModelIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultTrailIndex = -1;<br />
    if(g_iTrailsNum &gt; 0)<br />
    {<br />
        if(g_szTrailDefault[0])<br />
        {<br />
            for(new i=0;i&lt;g_iTrailsNum;i++)<br />
            {<br />
                if(equali(g_szTrailPath[i], g_szTrailDefault))<br />
                {<br />
                    g_iDefaultTrailIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultTrailColorIndex = -1;<br />
    if(g_iTrailColorsNum &gt; 0)<br />
    {<br />
        if(g_szTrailColorDefault[0])<br />
        {<br />
            new sr[8], sg[8], sb[8];<br />
            sr[0]=sg[0]=sb[0]=0;<br />
            parse(g_szTrailColorDefault, sr, cm(sr), sg, cm(sg), sb, cm(sb));<br />
<br />
            new dr = clamp(str_to_num(sr), 0, 255);<br />
            new dg = clamp(str_to_num(sg), 0, 255);<br />
            new db = clamp(str_to_num(sb), 0, 255);<br />
<br />
            for(new i=0;i&lt;g_iTrailColorsNum;i++)<br />
            {<br />
                if(g_iTrailColorRGB[i][0] == dr &amp;&amp; g_iTrailColorRGB[i][1] == dg &amp;&amp; g_iTrailColorRGB[i][2] == db)<br />
                {<br />
                    g_iDefaultTrailColorIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
    }<br />
<br />
    g_iDefaultTrailLengthIndex = 0;<br />
    if(g_iTrailLengthsNum &gt; 0)<br />
    {<br />
        if(g_szTrailLengthDefault[0])<br />
        {<br />
            new dl = max(0, str_to_num(g_szTrailLengthDefault));<br />
            for(new i=0;i&lt;g_iTrailLengthsNum;i++)<br />
            {<br />
                if(g_iTrailLengthVal[i] == dl)<br />
                {<br />
                    g_iDefaultTrailLengthIndex = i;<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
        if(g_iDefaultTrailLengthIndex &gt;= g_iTrailLengthsNum)<br />
            g_iDefaultTrailLengthIndex = 0;<br />
    }<br />
<br />
}<br />
<br />
stock NormalizeDeploySound(bool:bPrecacheOnly)<br />
{<br />
    if(!g_szDeploySound[0])<br />
        return;<br />
<br />
    if(containi(g_szDeploySound, "sound/") == 0)<br />
    {<br />
        new tmp[128];<br />
        copy(tmp, cm(tmp), g_szDeploySound[6]);<br />
        copy(g_szDeploySound, cm(g_szDeploySound), tmp);<br />
    }<br />
    else if(containi(g_szDeploySound, "sound&#92;") == 0)<br />
    {<br />
        new tmp2[128];<br />
        copy(tmp2, cm(tmp2), g_szDeploySound[6]);<br />
        copy(g_szDeploySound, cm(g_szDeploySound), tmp2);<br />
    }<br />
<br />
    if(bPrecacheOnly)<br />
        precache_sound(g_szDeploySound);<br />
}<br />
<br />
stock ResetPlayerState(id)<br />
{<br />
    g_iParaEnt[id] = 0;<br />
    g_bParaDeployed[id] = false;<br />
<br />
    g_iDeployMode[id] = g_iDeployModeDefault;<br />
    g_iSpeedIndex[id] = g_iDefaultSpeedIndex;<br />
    g_bThird[id] = (g_iThirdDefault != 0);<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        g_iModelIndex[id] = g_iDefaultModelIndex;<br />
        if(g_iModelIndex[id] &gt;= g_iModelsNum) g_iModelIndex[id] = -1;<br />
    }<br />
    else<br />
    {<br />
        g_iModelIndex[id] = 0;<br />
    }<br />
<br />
    g_iLastWeapon[id] = 0;<br />
}<br />
<br />
stock HasParachuteAccess(id)<br />
{<br />
    if(g_szAccessFlags[0] &amp;&amp; (get_user_flags(id) &amp; g_iAccessBits) == 0)<br />
        return false;<br />
<br />
    new CsTeams:t = cs_get_user_team(id);<br />
    if(t == CS_TEAM_T &amp;&amp; !g_iAccessTeamTT) return false;<br />
    if(t == CS_TEAM_CT &amp;&amp; !g_iAccessTeamCT) return false;<br />
<br />
    return true;<br />
}<br />
<br />
stock GetVaultKey(id, key[], keylen)<br />
{<br />
    new auth[32];<br />
    get_user_authid(id, auth, cm(auth));<br />
<br />
    if(equali(auth, "BOT") || equali(auth, "HLTV") || equali(auth, "STEAM_ID_LAN") || equali(auth, "VALVE_ID_LAN") || equali(auth, "STEAM_ID_PENDING"))<br />
    {<br />
        new ip[32];<br />
        get_user_ip(id, ip, cm(ip), 1);<br />
        formatex(key, keylen, "IP_%s", ip);<br />
        return;<br />
    }<br />
<br />
    formatex(key, keylen, "SID_%s", auth);<br />
}<br />
<br />
stock LoadPlayerData(id)<br />
{<br />
    ResetPlayerState(id);<br />
<br />
    if(g_iVault == INVALID_HANDLE)<br />
        return;<br />
<br />
    new key[64];<br />
    GetVaultKey(id, key, cm(key));<br />
<br />
    new data[128];<br />
    if(!nvault_get(g_iVault, key, data, cm(data)))<br />
        return;<br />
<br />
    new s1[8], s2[8], s3[8], s4[8], s5[8], s6[8], s7[8];<br />
    s1[0]=s2[0]=s3[0]=s4[0]=s5[0]=s6[0]=s7[0]=0;<br />
    parse(data, s1, cm(s1), s2, cm(s2), s3, cm(s3), s4, cm(s4), s5, cm(s5), s6, cm(s6), s7, cm(s7));<br />
<br />
    new m = str_to_num(s1);<br />
    new sp = str_to_num(s2);<br />
    new th = str_to_num(s3);<br />
    new md = str_to_num(s4);<br />
    new tr = str_to_num(s5);<br />
    new tc = str_to_num(s6);<br />
    new tl = str_to_num(s7);<br />
    g_iDeployMode[id] = clamp(m, 0, 2);<br />
<br />
    if(g_iSpeedsNum &gt; 0)<br />
        g_iSpeedIndex[id] = clamp(sp, 0, g_iSpeedsNum-1);<br />
    else<br />
        g_iSpeedIndex[id] = 0;<br />
<br />
    g_bThird[id] = (th != 0);<br />
<br />
    if(g_iModelsNum &gt; 0)<br />
    {<br />
        if(md &lt; 0)<br />
            g_iModelIndex[id] = -1;<br />
        else<br />
            g_iModelIndex[id] = clamp(md, 0, g_iModelsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iModelIndex[id] = 0;<br />
    }<br />
    if(g_iTrailsNum &gt; 0)<br />
    {<br />
        if(tr &lt; 0)<br />
            g_iTrailIndex[id] = -1;<br />
        else<br />
            g_iTrailIndex[id] = clamp(tr, 0, g_iTrailsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iTrailIndex[id] = 0;<br />
    }<br />
<br />
    if(g_iTrailColorsNum &gt; 0)<br />
    {<br />
        if(tc &lt; 0)<br />
            g_iTrailColorIndex[id] = -1;<br />
        else<br />
            g_iTrailColorIndex[id] = clamp(tc, 0, g_iTrailColorsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iTrailColorIndex[id] = 0;<br />
    }<br />
<br />
    if(g_iTrailLengthsNum &gt; 0)<br />
    {<br />
        if(tl &lt; 0)<br />
            g_iTrailLengthIndex[id] = -1;<br />
        else<br />
            g_iTrailLengthIndex[id] = clamp(tl, 0, g_iTrailLengthsNum-1);<br />
    }<br />
    else<br />
    {<br />
        g_iTrailLengthIndex[id] = 0;<br />
    }<br />
}<br />
<br />
stock SavePlayerData(id)<br />
{<br />
    if(!is_user_connected(id)) return;<br />
    if(!HasParachuteAccess(id)) return;<br />
<br />
    if(g_iVault == INVALID_HANDLE) return;<br />
<br />
    new key[64];<br />
    GetVaultKey(id, key, cm(key));<br />
<br />
    new data[128];<br />
    formatex(data, cm(data), "%d %d %d %d %d %d %d",<br />
        g_iDeployMode[id],<br />
        g_iSpeedIndex[id],<br />
        g_bThird[id] ? 1 : 0,<br />
        g_iModelIndex[id],<br />
        g_iTrailIndex[id],<br />
        g_iTrailColorIndex[id],<br />
        g_iTrailLengthIndex[id]<br />
    );<br />
<br />
    nvault_set(g_iVault, key, data);<br />
}<br />
<br />
stock StripQuotes(str[])<br />
{<br />
    if(!str[0]) return;<br />
<br />
    new len = strlen(str);<br />
    if(len &gt;= 2 &amp;&amp; str[0] == '"' &amp;&amp; str[len-1] == '"')<br />
    {<br />
        str[len-1] = 0;<br />
        for(new i=0; i&lt;len; i++)<br />
            str[i] = str[i+1];<br />
    }<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Server Copyright ve Harita bilgi plugini]]></title>
			<link>https://www.hlplayer.com/konu-server-copyright-ve-harita-bilgi-plugini.html</link>
			<pubDate>Sat, 07 Feb 2026 01:07:13 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.hlplayer.com/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.hlplayer.com/konu-server-copyright-ve-harita-bilgi-plugini.html</guid>
			<description><![CDATA[<img src="https://www.hlplayer.com/attachment.php?aid=2" loading="lazy"  alt="[Resim: attachment.php?aid=2]" class="mycode_img" /><br />
<br />
🎮 Server Copyright – HUD Alt &amp; Üst Bilgi Plugin’i (AMXX)<br />
Merhaba arkadaşlar,<br />
Counter-Strike 1.6 / Half-Life tabanlı sunucular için <span style="font-weight: bold;" class="mycode_b">tamamen stabil</span>, titreme yapmayan, oyuncu ölünce kaybolmayan bir <span style="font-weight: bold;" class="mycode_b">HUD bilgi &amp; telif gösterim plugin’i</span> paylaşıyorum.<br />
Bu plugin sayesinde sunucunuzda:<br />
<br />
✅ Üst kısımda <span style="font-weight: bold;" class="mycode_b">sunucu adı + iletişim linki</span><br />
✅ Alt kısımda <span style="font-weight: bold;" class="mycode_b">aktif harita + kalan süre</span><br />
✅ Respawn sonrası <span style="font-weight: bold;" class="mycode_b">HUD kaybolmaz</span><br />
✅ ReHLDS + klasik HLDS uyumlu<br />
<br />
<br />
🔧 Özellikler<br />
🔹 <span style="font-weight: bold;" class="mycode_b">Üst Yazı (Sarı)</span><ul class="mycode_list"><li>Oyuncu doğduğunda 1 kere akar<br />
</li>
<li>Sabit kalır, silinmez<br />
</li>
<li>Sunucu ismi + web adresi gösterir<br />
</li>
</ul>
🔹 <span style="font-weight: bold;" class="mycode_b">Alt Yazı (Beyaz)</span><ul class="mycode_list"><li>Harita adı + kalan süre<br />
</li>
<li>5 saniyede bir güncellenir<br />
</li>
<li>Kanal çakışması yok<br />
</li>
<li>Ölünce kaybolmaz<br />
</li>
</ul>
<br />
⚙️ <span style="font-weight: bold;" class="mycode_b">Cvar Ayarları</span><br />
Sunucu üzerinden dilediğiniz gibi düzenleyebilirsiniz:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>copyright_nick     "Game Platform"<br />
copyright_contact  "https://hlplayer.com"</code></div></div><br />
<br />
📌 <span style="font-weight: bold;" class="mycode_b"><span style="font-family: Arial Black;" class="mycode_font">Kurulum </span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">kalansure.amxx dosyasını plugins dosyasının içine atın</span><br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/plugins/kalansure.amxx</code></div></div><br />
plugins.ini dosyasının içine kalansure.amxx ekleyin<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>#include &lt;amxmodx&gt;<br />
#include &lt;amxmisc&gt;<br />
#include &lt;hamsandwich&gt;<br />
<br />
#define PLUGIN "Server Copyright"<br />
#define VERSION "1.0"<br />
#define AUTHOR "Y4S!N61"<br />
<br />
new cvar1[32], cvar2[32]<br />
<br />
public plugin_init(){<br />
    register_plugin(PLUGIN, VERSION, AUTHOR);<br />
    <br />
    // HATALI OLAN KISIM DÜZELTİLDİ: register_cvar<br />
    register_cvar("copyright_nick", "Game Platform");<br />
    register_cvar("copyright_contact", "https://hlplayer.com");<br />
    <br />
    // Doğma (Respawn) kontrolü - Yazıların gitmemesi için<br />
    RegisterHam(Ham_Spawn, "player", "oyuncu_dogdu", 1);<br />
    <br />
    // Alt yazıyı 5 saniyede bir güncelliyoruz ki TİTREME (pır pır) yapmasın<br />
    set_task(5.0, "sabit_alt_guncelle", 0, "", 0, "b");<br />
}<br />
<br />
public oyuncu_dogdu(id){<br />
    if(!is_user_connected(id)) return;<br />
<br />
    get_cvar_string("copyright_nick", cvar1, 31);<br />
    get_cvar_string("copyright_contact", cvar2, 31);<br />
<br />
    // --- ÜST SATIR (SARI): 1 KERE KAYAR VE SABİT KALIR ---<br />
    // Kanal 1 | Efekt 2 (Daktilo) | HoldTime: 9999.0<br />
    set_hudmessage(255, 255, 0, -1.0, 0.01, 2, 0.1, 9999.0, 0.1, 0.1, 1);<br />
    show_hudmessage(id, "%s %s", cvar1, cvar2);<br />
    <br />
    // Alt yazıyı da doğar doğmaz göster<br />
    alt_yazi_bas(id);<br />
}<br />
<br />
public sabit_alt_guncelle(){<br />
    alt_yazi_bas(0); // Tüm oyunculara göster<br />
}<br />
<br />
public alt_yazi_bas(id){<br />
    new mapname[32], timeleft = get_timeleft();<br />
    get_mapname(mapname, 31);<br />
<br />
    // --- ALT SATIR (BEYAZ): SABİT DURUR, YANIP SÖNMEZ ---<br />
    // Efekt 0 (SABİT) | Kanal 2 | HoldTime 6.0<br />
    set_hudmessage(255, 255, 255, -1.0, 0.04, 0, 0.0, 6.0, 0.0, 0.0, 2);<br />
    show_hudmessage(id, "HARITA: %s | KALAN SURE: %d:%02d", mapname, timeleft / 60, timeleft % 60);<br />
}</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.hlplayer.com/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1" target="_blank" title="">hlplayerkalansure.zip</a> (Dosya Boyutu: 5.01 KB / İndirme Sayısı: 4)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.hlplayer.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2" target="_blank" title="">70_6.jpg</a> (Dosya Boyutu: 361.27 KB / İndirme Sayısı: 24)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<img src="https://www.hlplayer.com/attachment.php?aid=2" loading="lazy"  alt="[Resim: attachment.php?aid=2]" class="mycode_img" /><br />
<br />
🎮 Server Copyright – HUD Alt &amp; Üst Bilgi Plugin’i (AMXX)<br />
Merhaba arkadaşlar,<br />
Counter-Strike 1.6 / Half-Life tabanlı sunucular için <span style="font-weight: bold;" class="mycode_b">tamamen stabil</span>, titreme yapmayan, oyuncu ölünce kaybolmayan bir <span style="font-weight: bold;" class="mycode_b">HUD bilgi &amp; telif gösterim plugin’i</span> paylaşıyorum.<br />
Bu plugin sayesinde sunucunuzda:<br />
<br />
✅ Üst kısımda <span style="font-weight: bold;" class="mycode_b">sunucu adı + iletişim linki</span><br />
✅ Alt kısımda <span style="font-weight: bold;" class="mycode_b">aktif harita + kalan süre</span><br />
✅ Respawn sonrası <span style="font-weight: bold;" class="mycode_b">HUD kaybolmaz</span><br />
✅ ReHLDS + klasik HLDS uyumlu<br />
<br />
<br />
🔧 Özellikler<br />
🔹 <span style="font-weight: bold;" class="mycode_b">Üst Yazı (Sarı)</span><ul class="mycode_list"><li>Oyuncu doğduğunda 1 kere akar<br />
</li>
<li>Sabit kalır, silinmez<br />
</li>
<li>Sunucu ismi + web adresi gösterir<br />
</li>
</ul>
🔹 <span style="font-weight: bold;" class="mycode_b">Alt Yazı (Beyaz)</span><ul class="mycode_list"><li>Harita adı + kalan süre<br />
</li>
<li>5 saniyede bir güncellenir<br />
</li>
<li>Kanal çakışması yok<br />
</li>
<li>Ölünce kaybolmaz<br />
</li>
</ul>
<br />
⚙️ <span style="font-weight: bold;" class="mycode_b">Cvar Ayarları</span><br />
Sunucu üzerinden dilediğiniz gibi düzenleyebilirsiniz:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>copyright_nick     "Game Platform"<br />
copyright_contact  "https://hlplayer.com"</code></div></div><br />
<br />
📌 <span style="font-weight: bold;" class="mycode_b"><span style="font-family: Arial Black;" class="mycode_font">Kurulum </span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">kalansure.amxx dosyasını plugins dosyasının içine atın</span><br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>addons/amxmodx/plugins/kalansure.amxx</code></div></div><br />
plugins.ini dosyasının içine kalansure.amxx ekleyin<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>#include &lt;amxmodx&gt;<br />
#include &lt;amxmisc&gt;<br />
#include &lt;hamsandwich&gt;<br />
<br />
#define PLUGIN "Server Copyright"<br />
#define VERSION "1.0"<br />
#define AUTHOR "Y4S!N61"<br />
<br />
new cvar1[32], cvar2[32]<br />
<br />
public plugin_init(){<br />
    register_plugin(PLUGIN, VERSION, AUTHOR);<br />
    <br />
    // HATALI OLAN KISIM DÜZELTİLDİ: register_cvar<br />
    register_cvar("copyright_nick", "Game Platform");<br />
    register_cvar("copyright_contact", "https://hlplayer.com");<br />
    <br />
    // Doğma (Respawn) kontrolü - Yazıların gitmemesi için<br />
    RegisterHam(Ham_Spawn, "player", "oyuncu_dogdu", 1);<br />
    <br />
    // Alt yazıyı 5 saniyede bir güncelliyoruz ki TİTREME (pır pır) yapmasın<br />
    set_task(5.0, "sabit_alt_guncelle", 0, "", 0, "b");<br />
}<br />
<br />
public oyuncu_dogdu(id){<br />
    if(!is_user_connected(id)) return;<br />
<br />
    get_cvar_string("copyright_nick", cvar1, 31);<br />
    get_cvar_string("copyright_contact", cvar2, 31);<br />
<br />
    // --- ÜST SATIR (SARI): 1 KERE KAYAR VE SABİT KALIR ---<br />
    // Kanal 1 | Efekt 2 (Daktilo) | HoldTime: 9999.0<br />
    set_hudmessage(255, 255, 0, -1.0, 0.01, 2, 0.1, 9999.0, 0.1, 0.1, 1);<br />
    show_hudmessage(id, "%s %s", cvar1, cvar2);<br />
    <br />
    // Alt yazıyı da doğar doğmaz göster<br />
    alt_yazi_bas(id);<br />
}<br />
<br />
public sabit_alt_guncelle(){<br />
    alt_yazi_bas(0); // Tüm oyunculara göster<br />
}<br />
<br />
public alt_yazi_bas(id){<br />
    new mapname[32], timeleft = get_timeleft();<br />
    get_mapname(mapname, 31);<br />
<br />
    // --- ALT SATIR (BEYAZ): SABİT DURUR, YANIP SÖNMEZ ---<br />
    // Efekt 0 (SABİT) | Kanal 2 | HoldTime 6.0<br />
    set_hudmessage(255, 255, 255, -1.0, 0.04, 0, 0.0, 6.0, 0.0, 0.0, 2);<br />
    show_hudmessage(id, "HARITA: %s | KALAN SURE: %d:%02d", mapname, timeleft / 60, timeleft % 60);<br />
}</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.hlplayer.com/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1" target="_blank" title="">hlplayerkalansure.zip</a> (Dosya Boyutu: 5.01 KB / İndirme Sayısı: 4)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.hlplayer.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2" target="_blank" title="">70_6.jpg</a> (Dosya Boyutu: 361.27 KB / İndirme Sayısı: 24)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
	</channel>
</rss>