IXMA
CS 1.6'daki AMX Mod X keyfini Counter-Strike 2'ye taşıdık — üstelik tamamen kendi geliştirdiğimiz eklenti sistemiyle. Kendi dilin, kendi derleyicin, kendi motorun. Eklentini yaz, panelden tek tıkla yükle.
Genel Bakış
IXMA Nedir?
IXMA, ServerIxa'nın Counter-Strike 2 için sıfırdan geliştirdiği eklenti ve scripting platformudur. AMX Mod X mantığında, Pawn'a benzer kendi dilimiz var: kaynak kodu .xma yazarsın, derleyici .ixma bytecode'una çevirir, sunucudaki native motor (VM) onu çalıştırır. Hepsini panelden yönetirsin — yükle, aç/kapat, sil.
Kendi dilin
AMX Mod X'i bilen herkese tanıdık. public forward'lar, native fonksiyonlar, new değişkenler.
Panelden yönet
Eklentini panelden yükle, tek tıkla aç/kapat. Sunucuya SSH/FTP gerekmez.
Çok dilli
Dil sözlükleri (.txt) ile %L — her oyuncuya kendi dilinde mesaj.
Altyapı
CS2 İzole Instance Sistemi
Her müşterinin CS2 sunucusu birbirinden tamamen bağımsızdır. Ortak bir ana sürüm (master) paylaşılır; config'in, haritaların, eklentilerin ve tüm yazdıkların ise yalnızca sana ait izole alanda tutulur. Bu sayede:
İzolasyon
Senin ayarların, başkalarını etkilemez; başkalarınınki seni etkilemez.
Hız & hafiflik
Ağır içerik tek yerde paylaşıldığı için sunucular hızlı açılır, az yer kaplar.
Anında güncelleme
CS2 güncellemeleri ana sürüme gelir gelmez tüm sunuculara yansır — sen uğraşmazsın.
Kısacası: ReHLDS (CS 1.6) tarafındaki kanıtlanmış master + instance modelini CS2'ye getirdik. Eklentilerin addons/ixma altında izole çalışır; yazdığın dosyalar her zaman kendi dizinine gider.
Adım Adım
Hızlı Başlangıç
- 1Eklenti dosyanı yazBir
.xmadosyası oluştur. En üstte#include <ixma>yaz — tüm API gelir. - 2register_plugin ile kaydet
plugin_init()içinderegister_plugin(ad, sürüm, yapımcı)çağır. - 3Panelden yüklePanel → Sunucu → Eklentiler → yükle. Derleme (.ixma) otomatik yapılır.
- 4Aç ve test etEklentiyi aktif et; sunucu çalışırken yeniden yüklenir. Konsola
print()ile log bas.
Temeller
Dil Temelleri
IXMA, Pawn/AMX Mod X ailesindendir. Birkaç temel kural:
- Değişken:
new sayi = 5, metin dizisi:new ad[32]. - Fonksiyon tanımı:
public ad(param) { ... }. Motorun çağırdıklarına forward denir. - Yerleşik (motor) fonksiyonlar native'dir — sen çağırırsın (örn
client_print). - Dahil etme:
#include <ixma>hepsini getirir; istersen#include <ixma_events>gibi tek tek. - Biçim:
%dsayı,%smetin,%Ldil anahtarı.
Motor Çağrıları
Forward'lar (otomatik çağrılır)
| Fonksiyon | Açıklama |
|---|---|
public plugin_init() | Eklenti yüklenince. register_plugin ve register_event burada. |
public plugin_end() | Eklenti kapatılırken. |
public client_connect(id) | Oyuncu sunucuya girince. |
public client_disconnect(id) | Oyuncu çıkınca. |
public client_say(id, text[]) | Oyuncu chat yazınca — ! komutları burada yakalanır. |
public <ad>(event) | register_event ile tanımlanan özel olay forward'ı. |
API
Fonksiyon Referansı
Aşağıdaki tüm fonksiyonlar #include <ixma> ile hazır gelir.
Çekirdek ixma_core
| Fonksiyon | Açıklama |
|---|---|
register_plugin(ad[], surum[], yapimci[]) | Eklentiyi kaydeder. plugin_init içinde ilk çağrılır. |
register_dictionary(dosya[]) | Dil sözlüğü (.txt) yükler: [tr]/[en] bölümleri, KEY = değer. %L ile kullanılır. |
print(metin[]) | Sunucu konsoluna yazar. |
format(hedef[], boyut, fmt[], ...) | Biçimlendirir: %d sayı, %s metin, %L dil anahtarı. |
equal(a[], b[]) | İki metni karşılaştırır → 1 / 0. |
str_to_num(s[]) | Metni sayıya çevirir. |
num_to_str(sayi, hedef[], boyut) | Sayıyı metne çevirir. |
Oyuncular ixma_players
| Fonksiyon | Açıklama |
|---|---|
client_print(id, fmt[], ...) | Oyuncuya chat mesajı. Dil: client_print(id, "%L", id, "ANAHTAR"). |
client_print_all(fmt[], ...) | Tüm bağlı oyunculara chat. |
get_user_name(id, hedef[], boyut) | Oyuncunun adını alır. |
get_user_steamid(id, hedef[], boyut) | Oyuncunun SteamID64 değerini alır. |
get_health(id) | Oyuncunun canını döndürür. |
get_player_count() | Bağlı oyuncu sayısı. |
is_user_connected(id) | Oyuncu bağlı mı → 1 / 0. |
Olaylar ixma_events
Sık olaylar: player_death, player_hurt, player_spawn, round_start,round_end, bomb_planted, bomb_defused, weapon_fire, item_pickup.
| Fonksiyon | Açıklama |
|---|---|
register_event(olay[], forward[]) | Oyun olayını dinler; tetiklenince public forward(event) çağrılır. |
event_get_int(event, key[]) | Olay alanını tam sayı okur (örn "dmg_health"). |
event_get_float(event, key[]) | Ondalık alanı okur (yuvarlanmış tam sayı döner). |
event_get_bool(event, key[]) | Boolean alan okur (örn "headshot"). |
event_get_player(event, key[]) | Oyuncu alanını slot olarak döndürür (-1 yoksa). Örn "attacker", "userid". |
event_get_string(event, key[], hedef[], boyut) | Metin alanını okur (örn "weapon"). |
Admin & Yardımcı ixma_admin
Yetki bayrakları CS 1.6 ile aynı: a immünite, c kick, d ban, e slay, i chat, u menü… Yetkiler configs/users.ini'de tutulur.
| Fonksiyon | Açıklama |
|---|---|
is_admin(id) | Oyuncu yetkili mi → 1 / 0. |
has_flag(id, bayrak[]) | Verilen yetki bayrağı var mı → 1 / 0 (a immunite, c kick, d ban...). |
get_user_flags(id, hedef[], boyut) | Yetki bayraklarını yazar. |
get_user_authid(id, hedef[], boyut) | STEAM_0:Y:Z kimliği. |
kick_user(id, sebep[]) | Oyuncuyu sebeple atar. |
ban_user(id, dakika) | Dakika cinsinden banlar (0 = kalıcı). |
server_cmd(cmd[]) | Sunucu komutu çalıştırır. |
reload_admins() | users.ini yetkililerini yeniden yükler. |
get_user_info(id, key[], hedef[], boyut) | Oyuncu client cvar okur (örn "_pw"). |
random_num(min, max) | [min, max] aralığında rastgele sayı. |
find_player(ad[]) | İsimden oyuncu slotu (-1 yoksa). |
set_user_data / get_user_data(id, key[], ...) | Per-oyuncu geçici veri (çıkışta silinir). |
Dosya & Config ixma_files
Tüm yollar addons/ixma altına kilitlidir (güvenlik). Okuma instance→master çözer; yazma kendi dizinine gider.
| Fonksiyon | Açıklama |
|---|---|
get_configsdir(hedef[], boyut) | Master configs dizinini (mutlak yol) verir. |
file_exists(yol[]) | Dosya var mı (instance→master çözümü) → 1 / 0. |
fopen(yol[], mod[]) | Dosya açar: "rt" oku, "wt" yaz, "at" ekle. Handle döner. |
fgets(handle, hedef[], boyut) | Bir satır okur. |
fputs(handle, metin[]) | Metin yazar (satır sonu için \n ekleyin). |
fclose(handle) / feof(handle) | Kapatır / dosya sonu kontrolü. |
read_cfg_str(dosya[], bolum[], key[], hedef[], boyut, def[]) | [bölüm] altındaki key değerini okur. |
read_cfg_num(dosya[], bolum[], key[], def) | [bölüm] altındaki key'i sayı okur. |
Tam Örnek
Örnek Eklenti — Hoş Geldin
Oyuncu girince diline göre hoş geldin mesajı atar ve !hp yazınca canını gösterir:
#include <ixma>
#define PLUGIN "Basit Hosgeldin"
#define VERSION "1.0"
#define AUTHOR "ServerIXA"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("hosgeldin.txt")
}
public client_connect(id)
{
// Oyuncunun diline göre hoş geldin (%L = dil araması)
client_print(id, "%L", id, "HOSGELDIN_MESAJI")
}
public client_say(id, text[])
{
if (equal(text, "!hp"))
{
new msg[128]
format(msg, 128, "Canın: %d", get_health(id))
client_print(id, msg)
}
}💡 Sırada ne var? Eklentini panele yükle, aktif et ve sunucunda test et. Daha fazla örnek ve dil sözlüğü (.txt) kullanımı için panelindeki hazır eklentileri (admin, bhop, istatistik) inceleyebilirsin.
CS2 sunucunu IXMA ile güçlendir
İzole instance altyapısı + kendi eklenti sistemin. Hepsi tek panelden.
CS2 Sunucusu Kur