MTA:SA sunucusunu kurmak işin kolay kısmıdır; sunucuyu gerçekten "sizin sunucunuz" yapan şey eklediğiniz scriptlerdir. Ama script eklemek, bir dosyayı klasöre atıp sunucuyu yeniden başlatmaktan ibaret değildir. MTA'da her script bir resource (kaynak) olarak çalışır ve doğru klasör yapısı, doğru meta.xml, doğru yetkilendirme olmadan sunucu o scripti hiç görmez ya da görür ama çalıştırmaz. Bu rehberde MTA sunucusuna script ekleme sürecini sıfırdan, hata ayıklamasıyla birlikte anlatıyoruz.
MTA:SA'da tek başına duran bir .lua dosyası çalışmaz. Sunucu, scriptleri resource adı verilen paketler halinde yönetir. Bir resource, kendi klasörü olan ve içinde en az bir meta.xml bulunan bir bütündür.
Tipik bir resource klasörü şöyle görünür:
meta.xml — resource'un kimlik kartı: hangi script dosyaları yüklenecek, hangi dosyalar istemciye gönderilecek, hangi fonksiyonlar dışa açılacak.server.lua — sunucu tarafında çalışan kod.client.lua — oyuncunun bilgisayarında çalışan kod.shared.lua, görseller, sesler, modeller gibi ek dosyalar.Bu ayrım önemlidir: sunucu tarafı kodu oyuncuya asla gönderilmez, istemci tarafı kodu ise gönderilir. Hassas bir mantığı yanlışlıkla client tarafına koymak, en sık yapılan güvenlik hatalarından biridir.
Henüz bir sunucunuz yoksa, önce MTA:SA sunucusunun sıfırdan nasıl açılacağını anlattığımız rehberi takip etmeniz mantıklı olur.
Arşivi açtığınızda kök dizinde bir meta.xml görüyorsanız, o klasörün kendisi resource'tur. Bazı arşivlerde birden fazla resource iç içe gelir; her birinin ayrı klasör olarak durması gerekir. Kodun içine hızlıca göz atın: tanımadığınız bir adrese bağlanan fetchRemote çağrıları ya da anlamsız şekilde şifrelenmiş bloklar varsa o scripti kullanmayın.
Resource klasörünü şu yola kopyalayın:
server/mods/deathmatch/resources/
Düzeni korumak için resource'ları alt klasörlere ayırabilirsiniz; örneğin resources/[gamemodes]/ veya resources/[custom]/. MTA köşeli parantezli klasörleri kategori olarak tanır ve içindeki tüm resource'ları otomatik tarar. Bu, onlarca script eklendiğinde dosya düzenini ayakta tutmanın en pratik yoludur.
Sade bir meta.xml şuna benzer:
— resource adı, yazarı, sürümü, tipi. — sunucu tarafı script. — istemci tarafı script. — istemciye indirilecek dosyalar. — başka resource'ların çağırabileceği fonksiyonlar.En sık yapılan hata, dosya adının meta.xml içinde yazandan farklı olmasıdır. Linux tabanlı sunucularda dosya adları büyük/küçük harfe duyarlıdır: Client.lua ile client.lua aynı şey değildir.
Resource'un sunucu açılışında otomatik başlaması için mtaserver.conf dosyasına şu satırı ekleyin:
Bir gamemode ekliyorsanız, onun diğer resource'lardan sonra başlaması genelde daha sağlıklıdır; sıralamayı buna göre düzenleyin.
Sunucuyu komple kapatmanıza gerek yok. Sunucu konsolunda ya da oyun içinde şu komutları kullanın:
refresh — yeni eklenen resource'ları taratır. Alt klasör eklediyseniz refreshall kullanın.start resource_adi — resource'u başlatır.restart resource_adi — kod değiştirdiğinizde yeniden yükler.stop resource_adi — durdurur.Konsolda Starting resource_adi satırını görüyorsanız iş tamamdır. Hata varsa yine burada belirir.
Script "çalışıyor ama hiçbir şey yapmıyor" diyorsanız, sorun büyük ihtimalle yetkidedir. MTA'da bazı fonksiyonlar (oyuncu banlama, kickleme, ACL değiştirme, sunucu ayarlarını okuma) yalnızca yetkili resource'lara açıktır.
Bunun için acl.xml içinde ilgili gruba resource'unuzu eklemeniz gerekir. Admin panelleri ve yönetim scriptleri neredeyse her zaman Admin grubuna nesne olarak eklenmek ister:
Değişiklikten sonra aclreload komutunu çalıştırın. Buradaki altın kural: ihtiyacı olmayan resource'a admin yetkisi vermeyin. Yetkilendirilmiş bir resource, kötü niyetli ya da özensiz yazıldığında sunucunun tamamını riske atar.
Roleplay sistemleri, hesap ve envanter scriptleri genelde MySQL ister. Bu tür bir resource ekliyorsanız:
.sql dosyasını veritabanına içe aktarın.root ile bağlanmaktan kaçının.Veritabanı yükü, özellikle yoğun roleplay sunucularında disk performansına doğrudan bağlıdır. NVMe M2 SSD ve DDR5 RAM barındıran Türkiye lokasyonlu VDS sunucuları bu tür senaryolarda gözle görülür fark yaratır. Roleplay altyapısı kuruyorsanız MTA roleplay sunucusu kurma rehberimiz tamamlayıcı bir kaynak olacaktır.
logs/server.log dosyası, hatanın hangi satırda olduğunu genellikle doğrudan söyler./debugscript 3 komutu, istemci ve sunucu tarafı hatalarını ekranda gösterir.onClientRender gibi her karede çalışan olayları gereksiz yere kullanmayın; ping ve FPS üzerindeki etkisi büyüktür. Bu konuyu sunucu ping'ini düşürme rehberimizde ayrıntılı ele aldık.Hazır resource eklemeyi öğrendiyseniz, kendi scriptinizi yazmak sandığınızdan yakındır. Yeni bir klasör açın, içine iki dosya koyun ve şu mantıkla ilerleyin:
ve bir satırı bile başlamak için yeterlidir.onPlayerJoin, onPlayerChat, onResourceStart gibi olaylara addEventHandler ile fonksiyon bağlarsınız.addCommandHandler ile oyuncuların yazabileceği kendi komutlarınızı tanımlarsınız.restart çalıştırıp sonucu görün. Büyük bir sistemi tek seferde yazıp sonra denemek, hata bulmayı katbekat zorlaştırır.Resource'lar arasında veri paylaşmanız gerektiğinde exports mekanizmasını kullanın; aynı kodu iki yere kopyalamak, ilerideki her değişikliği iki katına çıkarır.
Script sayısı arttıkça darboğaz genelde şu üç yerden birinde çıkar: tek çekirdek işlemci performansı, veritabanı disk erişimi ve bellek. MTA sunucu süreci ağırlıklı olarak tek çekirdek kullandığı için çok çekirdekli ama düşük saat hızlı bir işlemci beklediğiniz sonucu vermez; yüksek tek çekirdek performansı daha belirleyicidir. Oyuncu sayınıza göre bellek ihtiyacını hesaplamak için MTA sunucusu için kaç GB RAM gerektiğini anlattığımız yazıya bakabilirsiniz.
Hayır. Dosyaları yerleştirdikten sonra refresh ve start komutları çoğu durumda yeterlidir. Yalnızca mtaserver.conf gibi ana yapılandırma dosyalarında değişiklik yaptığınızda yeniden başlatma gerekir.
Sırasıyla şunları kontrol edin: klasör doğru dizinde mi, içinde meta.xml var mı, klasör adında Türkçe karakter veya boşluk var mı, refreshall komutunu çalıştırdınız mı. Bu dördü, vakaların büyük kısmını açıklar.
Bilinen topluluk kaynaklarından gelenler genellikle güvenlidir, ancak her scripti eklemeden önce gözden geçirin. Şifrelenmiş (compiled) Lua dosyaları içeren, kaynağı belirsiz paketlerden uzak durun; içeride ne olduğunu göremezsiniz.
Teknik bir üst sınır yoktur; sınır donanımınızdır. Ağır roleplay sistemleri onlarca resource çalıştırır ve bu noktada işlemci tek çekirdek performansı ile disk hızı belirleyici olur.
Son eklediğiniz resource'u mtaserver.conf içinden çıkarın ve sunucuyu başlatın. Ardından logları inceleyerek hatayı bulun. Yedeğiniz varsa geri dönmek dakikalar sürer; bu yüzden yedek almak ilk adımdır.
meta.xml dosyası olmadan tanınmaz.server/mods/deathmatch/resources/ altına yerleştirilir, mtaserver.conf ile otomatik başlatılır.refresh, start, restart komutlarıyla sunucuyu kapatmadan çalışırsınız.acl.xml içinde yetkilendirilmelidir; gereksiz yetki vermeyin.server.log ve /debugscript 3.Script yükü arttıkça sunucunuzun donanımı belirleyici hale gelir. Projenizi DDoS korumalı ağ altyapısı üzerinde, İstanbul lokasyonunda ve AMD Ryzen 9 9950X, DDR5 RAM ile NVMe M2 SSD donanımıyla çalıştırmak için MTA sunucu paketlerimizi ve oyun sunucusu çözümlerimizi inceleyebilir, kurulum desteği için 7/24 destek ekibimizle iletişime geçebilirsiniz.