Metin2 Regen Dosyaları: Canavar ve NPC Nasıl Yerleştirilir?
Hazırlayan: Metin2VIP Editörleri Yayın: 9 dk okuma
İçindekiler
- Dosyalar nerede, hangisi ne için?
- Bir regen satırı nasıl okunur?
- Satır türleri: m, g, ga, r, s ve e
- Koordinat, alan ve yön
- Süre ve adet: yeniden doğma gerçekte nasıl işler?
- group.txt: grupların tanımı
- group_group.txt: grup havuzu
- npc.txt: NPC'leri yerleştirmek
- boss.txt ve stone.txt
- Zindan ve etkinlik dosyaları
- Sık yapılan hatalar
Bir Metin2 haritasında canavarların, NPC'lerin, patronların ve metin taşlarının nerede ve ne sıklıkla çıkacağını haritanın klasöründeki dört dosya belirler: regen.txt, npc.txt, boss.txt ve stone.txt. Dördü de aynı biçimdedir: her satır 11 alandan oluşur ve bir canavarı, bir grubu ya da bir grup havuzunu haritadaki bir alana bağlar. Gruplar group.txt'de, grup havuzları group_group.txt'de tanımlanır.
Aşağıdaki kurallar game çekirdeğinin kaynak kodundan çıkarıldı; resmî yapıdan türeyen sunucuların çok büyük çoğunluğunda aynı işler. Örnek satırlar incelenen sunucunun harita dosyalarından alındı. Haritanın kendisini sunucuya ve istemciye tanıtmak harita ekleme yazısının konusu.
Dosyalar nerede, hangisi ne için?
Dosyalar share/locale/turkey/map/<harita klasörü>/ altında durur. Çekirdek açılırken yalnız kendi CONFIG'indeki MAP_ALLOW listesinde olan haritaların dosyalarını regen.txt, npc.txt, boss.txt, stone.txt sırasıyla okur. Dördü aynı okuyucudan geçer; bir satırın hangi dosyada durduğu oyun için fark etmez, ayrım düzen içindir. Dosyalardan biri yoksa çekirdek günlüğe not düşer ve devam eder.
- regen.txt: sıradan canavar grupları ve tek canavarlar.
- npc.txt: köy NPC'leri, ışınlanma NPC'leri, bazı etkinlik canavarları.
- boss.txt: patronlar ve mini patronlar.
- stone.txt: metin taşları.
Dosyalar yalnız açılışta okunur; çalışan çekirdeğe onları yeniden okutan bir komut yoktur. Bir satırı değiştirdikten sonra o haritayı açan çekirdeği yeniden başlatmak gerekir. CONFIG'de NO_REGEN satırı varsa ya da çekirdek -r seçeneğiyle başlatıldıysa dört dosyanın hiçbiri okunmaz; bu durumda canavarlarla birlikte köy NPC'leri de çıkmaz.
Bir regen satırı nasıl okunur?
Bazı dosyaların başında sütun adlarını veren bir yorum satırı bulunur. Yongan Bölgesi dosyalarından iki satırla birlikte:
//type cx cy sx sy z dir time percent count vnum
m 596 557 0 0 0 1 1m 100 1 9001
r 751 311 10 10 0 0 5s 100 1 101
| Sütun | Anlamı |
|---|---|
| type | Satır türü: m, g, ga, r, s, e |
| cx, cy | Alanın merkezi; haritanın kendi başlangıç noktasına göre metre |
| sx, sy | Merkezden iki yöne yarıçap, metre |
| z | Yükseklik (z) değeri; dosyalarda hep 0 |
| dir | Yön: 0 rastgele, 1-8 sabit |
| time | Kontrol aralığı: 30s, 10m, 1h30m |
| percent | Okunmaz |
| count | Aynı anda yaşayacak en fazla canavar ya da grup |
| vnum | Türe göre canavar, grup ya da havuz numarası |
İlk satır 596, 557 metre noktasına yönü sabit tek bir Silah Satıcısı koyar. İkinci satır 751, 311 merkezli 20×20 metrelik kareye group_group.txt'deki 101 numaralı havuzdan bir grup yerleştirir ve bu kareyi 5 saniyede bir kontrol eder.
Satır türleri: m, g, ga, r, s ve e
| Tür | Ne doğurur | vnum neyi gösterir |
|---|---|---|
| m | Tek canavar, NPC ya da metin taşı | mob_proto numarası |
| g | Bir grup: lider ve üyeleri | group.txt'deki Vnum |
| ga | g ile aynı, ama bütün üyeler saldırgan doğar | group.txt'deki Vnum |
| r | Havuzdan rastgele seçilen bir grup | group_group.txt'deki Vnum |
| s | Haritanın herhangi bir yerinde tek canavar | mob_proto numarası |
| e | İstisna alanı | yok |
ga grubunun üyeleri mob_proto'da saldırgan olmasalar da oyuncuyu görünce saldırır. ma diye bir tür ise yoktur: okuyucu m'de yalnız ilk harfe bakar, ma satırı düz m gibi işler. İncelenen dosyalarda 1.308 ma satırı var; hepsi 0s süreli olduğu için harita açılışında zaten doğmuyor.
s türü koordinat ve yarıçapı kullanmaz; canavarı haritanın yürünebilir ve güvenli bölge olmayan rastgele bir noktasına koyar. Birçok haritanın npc.txt dosyasında bulunan s 0 0 0 0 0 0 600s 100 10 5004 satırı 10 dakikada bir en fazla 10 Korsan Tanaka tamamlar. Bu canavar ile 5001 ve 5002 numaralı etkinlik canavarları ayrıca birer olay bayrağına bağlıdır (independence_day, japan_regen, newyear_mob); bayrak kapalıyken satır hiçbir şey doğurmaz.
e satırı altı alanlıdır (tür, merkez, yarıçap, z) ve bir alanı doğuşa kapatmak için düşünülmüştür. İncelenen kaynakta bu kontrol devre dışıdır; satır okunur ama etkisi yoktur.
Koordinat, alan ve yön
Koordinatlar haritanın kendi başlangıç noktasına göre metre cinsindendir. Çekirdek alanı merkezden iki yöne yarıçap kadar açar, 100 ile çarpıp oyun birimine çevirir ve haritanın Setting.txt'teki BasePosition değerini ekler.
Alanlı doğuşta çekirdek kare içinde 16 rastgele nokta dener. Yürünemez hücreler ve güvenli bölge (köy içi gibi PvP'nin kapalı olduğu alanlar) canavar ve metin taşı için reddedilir; 16 denemenin hepsi reddedilirse o turda doğuş olmaz. NPC ve ışınlanma NPC'leri bu kurala tabi değildir. Köyün güvenli bölgesine yazılan bir canavar satırı bu yüzden hiç doğmaz.
Yön alanı yalnız iki yarıçap da 0 olduğunda kullanılır: 0, 45 derecelik adımlarla rastgele bir yön; 1-8 arası değer 45 derecelik adımlarla sabit bir yöndür. Alanlı doğuşta yön her zaman rastgeledir; yüzünün belli bir yöne bakması istenen NPC'ler bu yüzden sıfır yarıçap ve 1-8 arası yönle yazılır. z alanı da yalnız sabit noktada kullanılır.
Süre ve adet: yeniden doğma gerçekte nasıl işler?
Süre alanı rakamlarla birim harflerinden oluşur: s saniye, m dakika, h saat. Parçalar toplanır; 1h30m 5.400 saniyedir. Birimler küçük harf olmalıdır, birimsiz sayı toplama girmez: 600 ya da 10M yazılan satırın süresi 0 olur.
Süresi 0 olan satır harita açılırken hiç doğmaz. Bu davranış bilerek de kullanılır: zindan ve etkinlik dosyalarındaki 0s satırları yalnız bir quest dosyayı tek seferlik yüklediğinde çıkar. Sıradan bir harita dosyasına yanlışlıkla birimsiz süre yazmak ise satırı sessizce devre dışı bırakır.
Süresi olan bir satır çekirdek açılırken hemen bir kez doğar. Sonra çekirdek satırı her time saniyede bir kontrol eder; yaşayan canavar ya da grup sayısı count değerinin altındaysa eksiği tamamlar. İlk kontrole 0-16 saniyelik rastgele bir ek konur, böylece aynı süreli satırlar aynı anda tetiklenmez.
Ölen canavar sayaçtan hemen değil, cesedi kalkınca düşer; bu yaklaşık 10 saniyedir. Grup satırlarında sayaç yalnız lidere bağlıdır: lider öldüğünde yanındakiler yaşasa bile yuva boşalır ve bir sonraki kontrolde yeni bir grup gelir.
count, m ve s satırlarında canavar sayısını, g, ga ve r satırlarında grup sayısını sınırlar. percent sütunu okunmaz; sık sık "doğma şansı" diye anlatılsa da değeri ne olursa olsun sonuç aynıdır.
GM komutu /respawn alanı GM'in durduğu noktayı kapsayan satırları hemen kontrol ettirir, /respawn all çekirdekteki bütün satırları. İkisi de yalnız eksikleri tamamlar, yaşayan canavarlara dokunmaz.
group.txt: grupların tanımı
group.txt sunucunun share/locale/turkey/ klasöründe durur. g ve ga satırlarının ve metin taşlarının çağırdığı gruplar buradan gelir. Bir grup şöyle yazılır (Korece grup adı sadeleştirildi):
Group L04_alfa_kurt
{
Leader Alpha-Wolf 103
Vnum 104
1 Wolf 102
2 Wolf 102
}
- Vnum: grubun numarası. Regen satırları ve metin taşları grubu bu numarayla çağırır. İki grup aynı numarayı alırsa ilk tanım geçerli olur, ikincisi sessizce yok sayılır.
- Leader: ad ve canavar numarası. Lider grubun ilk üyesidir.
- 1, 2 ...: üyeler. Numaralar 1'den başlayıp kesintisiz gitmelidir; okuyucu ilk eksik numarada durur, en fazla 255 üye okunur.
Lider ve üye satırlarında anahtardan sonraki ilk değer ad, ikinci değer canavar numarasıdır; ad yalnız okunurluk içindir. Adı boşluklu yazacaksan tırnak içine al ("Roter Keiler"); tırnaksız boşlukta adın ikinci kelimesi numara sanılır. Grup adında boşluk olamaz: Group satırı iki kelime değilse çekirdek "DO NOT SPACE IN NAME" diyerek kapanır.
Bu dosyada # yorum işaretidir, ama yalnız satır başında güvenlidir. Satırın ortasında # ile başlayan bir kelime satırın tamamını düşürür; 1 Kurt 102 # yorum satırı hiç okunmaz. Değeri olmayan tek kelimelik bir satır ayrıştırmayı keser ve dosyanın kalanı yüklenmez. BOM'lu kayıt da ilk Group satırını tanınmaz hâle getirir ve hiçbir grup yüklenmez. group.txt bulunamazsa çekirdek açılmaz.
Grup doğarken önce lider alanın rastgele bir noktasına konur, sonraki her üye bir öncekinin 3-5 metre çevresine yerleşir. Lider doğamazsa grup hiç çıkmaz. Örnekteki 104 numaralı grup bir Alfa Kurt ve iki Kurt'tan oluşur; Üzüntü Metini de canı düştükçe 104-109 aralığındaki grupları çağırır.
group_group.txt: grup havuzu
r satırları grubu doğrudan değil, bir havuzdan seçer:
Group a1_06
{
Vnum 106
1 118 10
2 119 10
3 120 10
4 121 10
5 122 10
6 180 15
7 181 15
8 182 15
9 183 15
}
Üye satırındaki birinci sayı group.txt'deki grup numarasıdır. İkinci sayı ağırlık olarak düşünülmüştür ve kodda bunun altyapısı vardır, ama incelenen kaynakta okunan değer seçime aktarılmaz: havuzdaki bütün gruplar eşit ihtimalle seçilir. a1_06 havuzunda dokuz grup bulunduğu için her biri 1/9 ihtimalle çıkar; 10 ile 15 farkı işlemez. Ağırlığı gerçekten kullanmak istiyorsan bu, kaynak kodda küçük bir düzeltme gerektirir.
Havuz numaraları group.txt numaralarından ayrı bir ad alanıdır: r satırındaki 101 (a1_01 havuzu) ile g satırındaki 101 numaralı grup farklı şeylerdir.
npc.txt: NPC'leri yerleştirmek
NPC'ler de m satırıyla konur. Köy NPC'lerinin çoğu iki yarıçap 0, yön 1-8 arası ve kısa bir süreyle (1m) yazılır; süre, NPC herhangi bir nedenle kaybolursa geri gelmesini sağlar.
m 596 557 0 0 0 1 1m 100 1 9001
m 405 73 0 0 0 0 1m 100 1 10001
İkinci satırdaki 10001, adı Jayang_Bölgesi 4002 8995 olan bir ışınlanma NPC'sidir; yaklaşan oyuncuyu bu küresel koordinata, yani Yayang Bölgesi'ne götürür. Hedef koordinatın canavar adına yazılması mob_proto yazısında anlatılıyor.
m satırındaki canavar NPC, WARP ya da GOTO türündeyse çekirdek onu haritanın NPC listesine ekler ve oyuncu haritaya girdiğinde bu listeyi istemciye yollar; büyük haritadaki NPC işaretleri buradan gelir. g satırıyla konan NPC'ler listeye girmez. mob_proto'da EMPIRE değeri 0 olan bir NPC, krallık haritasındaysa (1-60 numaralı haritalar) o haritanın krallığını alır. Market açan bir NPC için gereken diğer adımlar NPC marketi ekleme yazısında.
boss.txt ve stone.txt
Yongan Bölgesi'nin boss.txt dosyasından iki satır:
g 916 1023 100 100 0 0 1000s 100 1 317
m 418 684 100 100 0 0 600s 100 1 151
İlki 200×200 metrelik geniş bir alana Se-Rang liderliğindeki 317 numaralı grubu koyar ve alanı yaklaşık 17 dakikada bir kontrol eder. İkincisi Cung-Mok için aynı genişlikte bir alanı 10 dakikada bir kontrol eder; dosyada beş mini patronun on beş satırının süreleri 600 ile 614 saniye arasında birer saniye kaydırılmıştır. Patronların yerleri ve süreleri patronlar yazısında.
stone.txt'deki satırlar sıradan m satırıdır: m 752 301 10 10 0 0 600s 100 1 8001 bir Üzüntü Metini'ni 20×20 metrelik alanda 10 dakikada bir kontrol eder. Taşın kırılırken çağırdığı gruplar regen dosyasından değil, mob_proto'daki iki hız sütununun gösterdiği group.txt aralığından gelir; ayrıntılar metin taşları yazısında.
Zindan ve etkinlik dosyaları
Zindan questleri aynı satır biçimini kullanır, yalnız dosyayı harita açılırken değil quest çağırdığında yükler:
d.regen_file("dosya"): satırları zindana bir kez doğurur; süre kullanılmaz, bu yüzden dosyalarda genellikle0syazılır.d.set_regen_file("dosya"): satırları süreye göre zindan sürdükçe yeniden doğurur.regen_in_map(harita, "dosya"): bir haritaya tek seferlik doğuş; gruplar ve alanlı satırlar saldırgan doğar.
Dosya yolu çekirdeğin çalışma klasörüne göredir; incelenen sunucuda Şeytan Kulesi dosyaları data/dungeon/deviltower2_regen.txt gibi yollardadır. Bu çağrıların quest içindeki kullanımı quest fonksiyonları yazısında.
Sık yapılan hatalar
- Süreyi birimsiz ya da büyük harf birimle yazmak (
600,10M): satır hiç doğmaz. #ile yorum yazmak ya da dosyayı BOM'lu kaydetmek: çekirdek açılırken "unknown regen type" ile kapanır.- Bir satırı eksik alanla bırakmak: okuma kayar, çoğu zaman aynı hatayla sonuçlanır.
- g ve r satırlarına 0 yarıçap vermek: grup yerine tek canavar çıkar.
- Canavarı güvenli bölgeye ya da yürünemez alana yazmak: çekirdek yeri reddeder, canavar gelmez.
- group.txt'de aynı Vnum'u iki kez kullanmak ya da üye numarası atlamak: ikinci grup ya da atlanan numaradan sonraki üyeler yüklenmez.
- Nadirliği
percentsütunuyla ayarlamaya çalışmak: değer okunmaz; süreyi uzatmak ya da havuzdaki grup sayısını değiştirmek gerekir. - Değişiklikten sonra çekirdeği yeniden başlatmamak.
Sık sorulan sorular
- Regen satırına süre olarak 600 yazdım, canavar hiç doğmuyor. Neden?
- Süre alanı birim ister: s, m ya da h. Birimsiz sayı toplama girmez ve süre 0 olur; süresi 0 olan satır harita açılırken hiç doğmaz. 600s ya da 10m yazmalısın.
- Canavar öldükten kaç saniye sonra yeniden doğar?
- Sabit bir bekleme yoktur. Ceset yaklaşık 10 saniye sonra kalkınca yuva boşalır, eksik canavar satırın süresi her dolduğunda yapılan kontrolde tamamlanır. Bekleme bu yüzden yaklaşık 10 saniye ile 10 saniye artı satır süresi arasındadır.
- Regen dosyasına # ile yorum yazabilir miyim?
- Hayır. Regen dosyalarında yorum // ile yazılır. # ile başlayan kelime bilinmeyen satır türü sayılır ve çekirdek açılırken kapanır.
- group_group.txt'deki ikinci sayı grubun çıkma şansı mı?
- Ağırlık olarak düşünülmüş bir sütundur, ama incelenen kaynakta okunan değer seçime aktarılmaz. Havuzdaki bütün gruplar eşit ihtimalle seçilir.
İlgili sayfalar
- Metin2 Canavar Türleri: Rütbeler, Saldırgan Canavarlar ve Özel Yetenekler (Wiki)
- Metin2 Harita Ekleme: Sunucu ve Client Tarafı Adım Adım (Server kurma)
- Metin2 Metin Taşları: Çağrılan Canavarlar, Düşen Taşlar ve Metin Listesi (Wiki)
- Metin2 mob_proto Rehberi: Sütunlar, Rütbeler ve AI Bayrakları (Server kurma)
- Metin2 NPC Marketi Nasıl Eklenir? shop ve shop_item Tabloları (Server kurma)
Kategori: Server Kurma Proto ve Veri Dosyaları regen sunucu dosyaları npc.txt group.txt canavar yerleştirme
Bu sayfadaki bilgiler Metin2'nin sunucu yazılımındaki hesaplamalara ve standart oyun dosyalarına dayanır. Oyun dosyalarını değiştiren sunucularda değerler farklı olabilir. İçerikleri nasıl hazırlıyoruz?