SA-MP sunucularının tamamı Pawn ile yazılır. Bu rehber, hiç kod yazmamış birinin nereden başlayacağını ve ilk çalışan script'ini nasıl üreteceğini anlatıyor.
Pawn nedir?
Pawn, gömülü sistemler için tasarlanmış, C'ye benzeyen küçük bir script dilidir. SA-MP bu dili sunucu tarafı mantığı yazmak için kullanır.
Önemli bir gerçek: Pawn, SA-MP ekosistemi dışında pek karşına çıkmaz. Genel programlama öğrenmek istiyorsan başka dillerle başlamak daha mantıklı; ama SA-MP sunucusu yazmak istiyorsan başka seçenek yok.
Neye ihtiyacın var?
- SA-MP sunucu paketi — Pawn derleyicisi bununla birlikte gelir.
- Bir düzenleyici — Pakette gelen Pawno kullanılabilir; daha modern bir deneyim için Sublime Text veya VS Code gibi bir editör Pawn eklentisiyle kullanılabilir.
- Test sunucusu — Kendi bilgisayarında çalıştırabilirsin.
Dosya yapısını anla
Kod yazmaya başlamadan önce bu yapıyı bilmek gerekir:
gamemodes/— Ana oyun modu. Sunucunun ne olduğunu belirleyen kod burada.filterscripts/— Bağımsız çalışabilen yardımcı script'ler. Gamemode'u yeniden başlatmadan yüklenip kaldırılabilir.pawno/include/— Kütüphane dosyaları (.inc).scriptfiles/— Script'lerin okuyup yazdığı veri dosyaları.
.pwn uzantılı dosya kaynak kodudur; derlendiğinde .amx üretir. Sunucu .amx dosyasını çalıştırır.
İlk script'in
En basit çalışan gamemode iskeleti şöyle görünür:
#include <a_samp>
public OnGameModeInit()
{
SetGameModeText("Ilk Sunucum");
AddPlayerClass(0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, 0xFFFFFFFF, "Sunucuya hos geldin!");
return 1;
}
Burada olan şey:
#include <a_samp>— SA-MP'nin temel fonksiyonlarını kullanılabilir kılar. Her script'te olmalı.OnGameModeInit— Sunucu başladığında bir kez çalışır.AddPlayerClass— Oyuncunun doğacağı konum ve karakteri tanımlar.OnPlayerConnect— Bir oyuncu bağlandığında çalışır.
Kendi komutunu yaz
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/selam", true) == 0)
{
SendClientMessage(playerid, 0x00FF00FF, "Selam!");
return 1;
}
return 0;
}
Dikkat edilmesi gereken: fonksiyonun sonunda return 0 olmalı. Bu, "bu komutu tanımadım" anlamına gelir ve SA-MP'nin bilinmeyen komut mesajını göstermesini sağlar. Her durumda return 1 dönersen yanlış yazılan komutlar sessizce yutulur.
Derleme ve test
- Dosyayı
gamemodes/klasörüne.pwnuzantısıyla kaydet. - Pawno ile aç ve derle (F5). Hata varsa alt panelde görünür.
server.cfgdosyasındagamemode0satırını dosya adıyla güncelle (uzantısız).- Sunucuyu başlat ve
127.0.0.1:7777adresine bağlan.
Sunucu kurulumunun tamamı için sunucu açma rehberimize bakabilirsin.
Yeni başlayanların en sık yaptığı hatalar
- Derlemeyi unutmak.
.pwndosyasını değiştirip derlemezsen sunucu eski.amxdosyasını çalıştırmaya devam eder. "Değişikliğim görünmüyor" şikâyetinin bir numaralı sebebi budur. - Uyarıları görmezden gelmek. Derleyici uyarıları (warning) hata değildir ama çoğu zaman gerçek bir sorunu işaret eder.
- Devasa hazır gamemode ile başlamak. 30.000 satırlık bir kodu anlamadan değiştirmeye çalışmak, öğrenmenin en yavaş yoludur. Boş bir script'ten başlayıp üzerine eklemek çok daha etkilidir.
- Yedek almamak. Çalışan bir sürümü değiştirmeden önce kopyala.
- Kullanıcı girdisini doğrulamamak. Oyuncudan gelen her veriyi kontrol etmelisin; aksi halde sunucun kolayca çökertilebilir.
Nasıl ilerlemelisin?
Öneri sırası: önce basit komutlar yaz, sonra oyuncu verilerini dosyaya kaydetmeyi öğren, ardından veritabanı kullanmaya geç. Her adımda çalışan küçük bir şey üretmek, büyük bir projeyi yarıda bırakmaktan daha çok öğretir.
Takıldığın yerde SA-MP forumumuzda sorabilirsin — kodunun ilgili kısmını ve aldığın hata mesajını paylaşmak, cevap alma süreni ciddi biçimde kısaltır.