Çok eski bir web tarayıcısı kullanıyorsunuz. Bu veya diğer siteleri görüntülemekte sorunlar yaşayabilirsiniz.. Tarayıcınızı güncellemeli veya alternatif bir tarayıcı kullanmalısınız.
GELİŞTİRİYORUM1097 Server Files Sourceden 1298 Versionuna Geçiş
1097 LoginServer AIServer Ebenezer Aujard kaynak kodu ve 1298 client packet akışı temel alınmıştır ve Server Files Sourceler 1298 uygun şekilde Tamamlanmıştır.
Önemli:
- Bu kaynak kod, arşiv içerisinde bulunan Visual Studio 2022 projesi için hazırlanmıştır.
- Proje PlatformToolset v143 ve WindowsTargetPlatformVersion 10.0 kullanmaktadır.
- Bu Linux ortamında Windows/MFC Visual Studio derlemesi çalıştırılamadığı için bu arşiv, kaynak kod seviyesinde derlemeye hazırdır
-------------------------
KnightImperia 1298 - R Attack Düzeltmesi
Ebenezer/User.cpp
- GM normal R saldırısı m_nGameMasterRHitDamage kullanır; varsayılan değer 30000'dur.
- Normal kullanıcılar normal PvP R saldırı formülünü kullanmaya devam eder.
- GM sabit hasarı, magic/AC/PvP /3 işlemlerinden önce döndürülür; böylece hasar tam olarak 30000 kalır.
Ebenezer/EbenezerDlg.cpp
- GAME_MASTER_DAMAGE varsayılan değeri 300'den 30000'e değiştirildi. GameServer.ini üzerinden yine değiştirilebilir:
[SETTINGS]
GAME_MASTER_DAMAGE=30000
AIServer/User.cpp
- GM'nin NPC'ye yaptığı R saldırısı tam olarak 30000 hasar kullanır.
- Normal kullanıcılar standart NPC R saldırı formülünü kullanmaya devam eder.
Bu kaynak kodundaki önemli Authority eşleştirmesi:
- AUTHORITY_GAME_MASTER = 0
- AUTHORITY_PLAYER = 1
Bu nedenle normal hesapların server USERDATA/TB_USER verilerinde Authority=1 olması gerekir. Normal bir hesapta Authority=0 varsa server bu hesabı kasıtlı olarak GM olarak sınıflandıracaktır.
KnightImperia 1298 - R Attack + Evt Düzeltmesi
1) NPC konuşma/event dosyaları
- Ebenezer EVENT::LoadEvent() artık önce .\Evt\<zone>.evt dosyasını yüklüyor.
- MAP ve Ebenezer_MAP yedek kaynak olarak kullanılmaya devam ediyor.
- Evt klasörü paketin ana dizinine dahil edildi.
2) AIServer R saldırısı Authority hatası
- Orijinal eşleştirme: m_bIsGM = (bIsGM != 0)
- Bu nedenle Authority 1 (normal oyuncu) yanlışlıkla GM olarak kabul ediliyordu.
- Şu şekilde düzeltildi: m_bIsGM = (bIsGM == MANAGER_USER)
- Authority 0 = GM, Authority 1 = normal oyuncu.
- GM'nin NPC'ye normal R saldırısı 30000 hasardır.
- Normal oyuncular normal HitB/R saldırı formülünü kullanır.
3) Ebenezer oyuncu-vs-oyuncu R saldırısı
- Sabit hasar override işlemi SADECE m_bAuthority == AUTHORITY_GAME_MASTER (0) olduğunda uygulanır.
- Normal oyuncular GM sabit hasar kod bloğuna girmez.
- Varsayılan GAME_MASTER_DAMAGE değeri 30000'dur.
4) Derleme
- Ebenezer solution ve AIServer solution dosyalarını Visual Studio'da açın.
- Önce Clean Solution, ardından Rebuild Solution yapın.
- Ebenezer'ın .\\Evt\\<zone>.evt dosyasına erişebildiği bir dizinden çalıştırın.
Forgotten Temple incelemesi
Önemli bulgular
-------------------------
1. MONSTER_CHALLENGE DB üzerinden yükleniyor.
2. bStartTime1, bStartTime2 ve bStartTime3 alanları SAAT olarak kabul ediliyor.
OpenKO timer bu değerleri mevcut saat ve dakika ile karşılaştırıyor.
3. Üç level aralığı bLevelMin değerine göre belirleniyor:
30 -> challenge time 1
46 -> challenge time 2
60 -> challenge time 3
4. Beş dakika öncesi duyurusu HH-1:55:00 zamanında gönderiliyor.
5. İkinci duyuru HH-1:59:40 zamanında gönderiliyor.
6. Event HH:00'da açılıyor.
7. Monster challenge, event açıldıktan 300 saniye sonra başlıyor.
8. Monster dalgaları arasında 45 saniye bulunuyor.
9. Zafer durumunda challenge'a özel treasure chest veriliyor.
10. Kapatma duyurusu banish aşamasının 30. saniyesinde gönderiliyor ve event
230 saniye sonra sıfırlanıyor.
11. Ebenezer, IDS_MONSTER_CHALLENGE_* resource ID'lerini doğrudan
Announcement() switch'ine gönderiyor. Önceki özel 0x11..0x15 tipleri
mevcut KnightImperia Announcement() fonksiyonunun boş metin üretmesinin nedeniydi:
çünkü bu değerler switch içerisinde işlenmiyordu.
Ebeenzer 30 değerini saat olarak kabul ettiği için 30 geçersizdir. Düzeltilmiş timer,
30 saatlik bir dönüşüm uydurmak yerine geçersiz başlangıç saati değerlerini yok sayar.
Duyuru resource sırası
---------------------
KnightImperia resource değeri:
"#### Notice : At %d Level %d to %d Lost Temple will begin. ####"
Bu nedenle KnightImperia Announcement() bunu şu şekilde formatlar:
startHour, levelMin, levelMax
AIServer bağımlılığı
-------------------
Sağlanan Ebenezer/KnightImperia arşivi yalnızca Ebenezer/GameServer
kaynak kodunu içeriyor. Forgotten Temple monster spawn sistemi şunları kullanıyor:
AG_NPC_SPAWN_REQ = 14
AG_NPC_KILL_REQ = 15
Ebenerzer tarafındaki request fonksiyonları dahil edilmiş durumda, ancak sağlanan arşiv
bu iki request için AIServer tarafında handler içermiyor. Çalışan
AIServer, monsterların gerçekten spawn olması
ve öldürülebilmesi için aynı packet formatını desteklemelidir. Bu ZIP,
sağlanan kaynak kodda bulunmayan bir AIServer implementasyonu eklememektedir.
Manuel komut
--------------
GM komutu aynı şekilde:
+openft
+openft 1
+openft 2
+openft 3
Manuel komut, INI schedule değerleri yerine DB'den yüklenen level aralığını
kullanır.
Önemli: Bu patch özellikle 30/32/33 için WIZ_ZONEABILITY eklemez ve Party/Exchange/cross-nation oyuncu kurallarını değiştirmez.
Monster/Boss monster AI korunmuştur. Monster olmayan NPC'ler bu zone'larda NPC hedef/hostility işlemleri açısından neutral olarak değerlendirilir.
Bu test branch'inde uygulanan değişiklikler:
1. AIServer: ZONE_MORADON=21 fallback define eklendi.
2. AIServer: Monster olmayan NPC'ler Moradon'da oyuncuları düşman olarak seçmez. Monsterlar mevcut nation/AI kurallarını korur.
3. AIServer: Monster olmayan NPC'ler (guardlar dahil) Moradon'da oyuncu ChangeTarget işlemini reddeder.
4. AIServer: Neutral Moradon NPC'leri User::HealAreaCheck hostile targeting yolunda atlanır.
5. Ebenezer: Moradon'da cross-nation PartyRequest'e izin verildi; aynı zone kontrolü eklendi.
6. Ebenezer: Party BBS cross-nation filtresi yalnızca Moradon'da devre dışı bırakıldı; aynı zone kontrolü korundu.
7. Ebenezer: ExchangeReq cross-nation işlemi yalnızca Moradon'da izinli; aynı zone kontrolü eklendi.
8. Ebenezer: Moradon ZoneChange sonrasında WIZ_ZONEABILITY neutral paketi gönderiliyor (trade=1, neutral type=0, talk=1).
9. Ebenezer: NPC ItemTrade; NPC type, zone, range ve selling group kontrollerini yapıyor ve cross-nation neutrality korunuyor.
Kasıtlı olarak değiştirilmedi:
- Moradon'daki Monster AI nation kuralları (normal kalması istendiği için).
- NPC m_byGroup DB kullanır.
- Merchant/Warehouse NpcEvent nation değerleri; bunlarda doğrudan nation engeli bulunmuyordu.
- Moradon dışındaki genel PvP/war zone davranışları.
- Border Defense War (BDW) sistemi Ebenezer/GameServer tarafına eklendi.
- BDW event başlatma ve aktiflik kontrolleri eklendi.
- BDW oyuncu kayıt sistemi eklendi.
- Oyuncular artık BDW event kullanıcı listesine eklenebiliyor.
- Oyuncular event kullanıcı listesinden çıkarılabiliyor.
- Karus / El Morad oyuncu sayıları takip ediliyor.
- Toplam BDW oyuncu sayısı takip ediliyor.
- Event Room bilgisi oyuncuya atanıyor.
- Oyuncunun BDW event kullanıcısı olup olmadığını kontrol eden sistem eklendi.
- TEMPLE_EVENT_JOIN desteği eklendi.
- TEMPLE_EVENT_DISBAND desteği eklendi.
- Oyuncu BDW'ye kayıt olduğunda event kullanıcı listesine ekleniyor.
- Oyuncu eventten ayrıldığında event kullanıcı listesinden çıkarılıyor.
- Nation bazlı oyuncu sayıları güncelleniyor.
- BDW Join Screen güncelleme desteği eklendi.
========================================================
3. BDW ZONE CHANGE
========================================================
- BDW zone değişimleri için ZoneChange() sistemi kullanılıyor.
- Karus oyuncular için BDW spawn koordinatları:
X = 207.0
Z = 175.0
- El Morad oyuncular için BDW spawn koordinatları:
X = 43.0
Z = 69.0
- Oyuncunun BDW başlangıç koordinatları nation bilgisine göre belirleniyor.
- ZoneChange sırasında oyuncunun zone bilgisi güncelleniyor.
- Region bilgisi güncelleniyor.
- Party bağlantısı güncelleniyor.
- Gerekli durumlarda Server Change işlemi gerçekleştiriliyor.
- AI Server'a AG_ZONE_CHANGE gönderiliyor.
- BDW UI event sistemi client ve server tarafında kullanılacak şekilde hazırlandı.
- BDW başladığında mevcut kayıt ekranının kapanması normal event akışının bir parçası olarak kabul ediliyor.
- Oyuncu BDW zone'una teleport edildikten sonra UI'nin tekrar gösterilmesi için çalışma yapıldı.
- UI tekrar açılırken client/server packet formatı kontrol ediliyor.
- BDW kalan süresinin StartTime üzerinden hesaplanması planlandı.
- Kalan süre hesaplaması:
- Toplam BDW event süresi 600 saniye olarak ayarlanmıştır.
NOT:
BDW UI paketinin doğrudan ZoneChange() içerisinde gönderilmesi test sırasında
Ebenezer crash sorununa neden oldu. Bu yöntemin tekrar kontrol edilmesi gerekiyor.
UI'nin client tarafında zone tamamen yüklendikten sonra gönderilmesi gerekiyor.
========================================================
5. BDW EVENT USER SYSTEM
========================================================
- _TEMPLE_EVENT_USER yapısı kullanılıyor.
- Event kullanıcıları m_TempleEventUserArray üzerinden takip ediliyor.
- AddEventUser() eklendi.
- RemoveEventUser() eklendi.
- UpdateEventUser() eklendi.
- isEventUser() kontrolü eklendi.
- Event Room bilgisi oyuncu ile senkronize ediliyor.
BDW event packet yapısı,
client tarafından beklenen 1298 packet formatına göre kontrol ediliyor.
========================================================
7. ZONE CHANGE GÜVENLİK KONTROLLERİ
========================================================
- Geçersiz zone index kontrolleri eklendi.
- Null map kontrolleri eklendi.
- Server down kontrolleri eklendi.
- Nation zone kontrolleri eklendi.
- Frontier level kontrolleri eklendi.
- Frontier savaşları sırasında zone engelleme kontrolleri eklendi.
- Çift zone değişimini engellemek için ZoneChange flag kullanılıyor.
========================================================
8. MEVCUT DURUM
========================================================
BDW:
[+] Event system
[+] Join / Disband
[+] Event user registration system
[+] Nation player counts
[+] Event Room
[+] BDW zone teleport
[+] Karus spawn coordinates
[+] El Morad spawn coordinates
[+] ZoneChange process
[+] AI Server zone change notification
ŞU ANDA ÜZERİNDE ÇALIŞILIYOR:
[ ] Teleport sonrasında BDW UI'nin güvenli şekilde tekrar açılması
[ ] Teleport sonrasında gerçek kalan sürenin gösterilmesi
[ ] Client / Server WIZ_TEMPLE packet uyumluluğu
[ ] BDW başladıktan sonra oyuna giren oyuncuların UI'yi görebilmesi
========================================================
9. ÖNEMLİ NOT
========================================================
BDW UI paketi ZoneChange() içerisinde yanlış zamanda gönderilirse
Ebenezer crash meydana gelebilir.
Bu nedenle UI'nin doğrudan ZoneChange() içerisinde açılması yerine,
UI, zone değişimi ve client'ın
GameStart işlemi tamamen tamamlandıktan sonra gönderilmelidir.
Hedeflenen akış:
BDW başlar
->
Oyuncu teleport edilir
->
Zone tamamen yüklenir
->
BDW UI tekrar gösterilir
->
Gerçek kalan süre gösterilir