- Katılım
- 6 Kas 2021
- Mesajlar
- 4,600
- Tepkime puanı
- 5,841
- Puanları
- 113
- Yaş
- 32
- Konum
- Türkiye
- Dc
- fatihbulut
Kanal Bazlı Boss Regen Kapatma Sistemi
Belirli kanallarda (örn. CH3 / CH4) bossları tamamen devre dışı bırak. Tek binary, CONFIG'ten aç/kapa
Bazen belirli kanalları boss'suz yapmak isteriz, sadece 1-2 kanalda boss ekonomisi dönsün diye.
Bu sistemle her kanal, kendi CONFIG dosyasındaki tek bir satırla boss regen'ini açıp kapatabilir. Aynı derlenmiş binary'yi tüm kanallara atarsın; hangi kanalda kapalı olacağına CONFIG karar verir. Kanal numarası koda hardcode edilmez.
Sadece boss.txt regen'i kapanır. Normal av (regen.txt), metin taşları (stone.txt), NPC'ler (npc.txt) ve dungeon etkilenmez.
1) config.h
g_bChannel tanımının hemen altına ekle:
2) config.cpp
g_bChannel[/ICODE] değişkeninin altına tanımı ekle:
Ardından CONFIG okuma döngüsünde, TOKEN("channel") bloğunun altına yeni token'ı ekle:
3) sectree_manager.cpp
Boss'u kapatmak istediğin kanalın CONFIG dosyasına şu satırı ekle
Diğer kanallara hiçbir şey ekleme (satır yoksa varsayılan false = boss'lar normal çalışır). Core açılışında log'da doğrulamanı görürsün:
Geri açmak: satırı sil ya da 0 yap + core'u restart et.
Belirli kanallarda (örn. CH3 / CH4) bossları tamamen devre dışı bırak. Tek binary, CONFIG'ten aç/kapa
Nedir, Ne İşe Yarar?
Bazen belirli kanalları boss'suz yapmak isteriz, sadece 1-2 kanalda boss ekonomisi dönsün diye.
Bu sistemle her kanal, kendi CONFIG dosyasındaki tek bir satırla boss regen'ini açıp kapatabilir. Aynı derlenmiş binary'yi tüm kanallara atarsın; hangi kanalda kapalı olacağına CONFIG karar verir. Kanal numarası koda hardcode edilmez.
Sadece boss.txt regen'i kapanır. Normal av (regen.txt), metin taşları (stone.txt), NPC'ler (npc.txt) ve dungeon etkilenmez.
Kurulum (Game Source)
1) config.h
g_bChannel tanımının hemen altına ekle:
Kod:
extern BYTE g_bChannel;
extern bool g_bDisableBossRegen; // boss.txt regen kapatma bayragi
2) config.cpp
g_bChannel[/ICODE] değişkeninin altına tanımı ekle:
Kod:
BYTE g_bChannel = 0;
bool g_bDisableBossRegen = false;
Ardından CONFIG okuma döngüsünde, TOKEN("channel") bloğunun altına yeni token'ı ekle:
Kod:
TOKEN("channel")
{
str_to_number(g_bChannel, value_string);
continue;
}
// bu kanalda boss.txt regen'i yukleme
TOKEN("disable_boss_regen")
{
int iTmp = 0;
str_to_number(iTmp, value_string);
g_bDisableBossRegen = (iTmp != 0);
fprintf(stdout, "DISABLE_BOSS_REGEN: %d\n", g_bDisableBossRegen ? 1
continue;
}
3) sectree_manager.cpp
Kod:
snprintf(szFilename, sizeof(szFilename), "%s/%s/boss.txt", c_pszMapBasePath, szMapName);
if (!g_bDisableBossRegen)
regen_load(szFilename, setting.iIndex, setting.iBaseX, setting.iBaseY);
Boss'u kapatmak istediğin kanalın CONFIG dosyasına şu satırı ekle
Kod:
DISABLE_BOSS_REGEN: 1
Diğer kanallara hiçbir şey ekleme (satır yoksa varsayılan false = boss'lar normal çalışır). Core açılışında log'da doğrulamanı görürsün:
Kod:
DISABLE_BOSS_REGEN: 1
Geri açmak: satırı sil ya da 0 yap + core'u restart et.
- Quest/event boss'ları etkilenmez: mob.spawn, sppawn'lar boss.txt dışı olduğu için çalışmaya devam eder.Genelde istenen budur.
- Map dosyaları paylaşımlıysa: Kanallar aynı share/data/map klasörünü paylaşıyorsa boss.txt'yi elle silmek tüm kanalları vurur. Bu yüzden kod tarafı çözüm kanal-bazlı ve güvenli.
- boss.txt içeriğini teyit et: Konvansiyon "boss.txt = boss" ama bazı server'larda içine metin/başka spawn konabiliyor. O kanalda boss.txt'de ne varsa
spawn olmayacak.
