İçeriğe geç
Türkiye'nin SRO tanıtım & topluluk platformu

vSro Paylaşım [Joymax Ağ Protokolü] Sunucu Yanıt Paketleri (0xA000 - 0xBFFF): Beceri Yürütme ve Hasar Hesaplama Döngüsü

Cevaplar0
Görüntüleme8
Ticaret Puanı
0
Katılım
19 Ocak 2026
Mesajlar
277
Tepkime puanı
225
Puanları
0
Web sitesi
www.youtube.com
Discord
ayzekk.
Mevcut Bakiye
4605 ₺
[Joymax Ağ Protokolü] Sunucu Yanıt Paketleri (0xA000 - 0xBFFF): Beceri Yürütme ve Hasar Hesaplama Döngüsü

Joymax ikili ağ protokolünde `0xA000 - 0xBFFF` aralığı, istemcinin başlattığı eylemlere (`0x6000 - 0x7FFF`) sunucunun verdiği resmi onay, ret veya sonuç paketlerine (RPC Responses) tahsis edilmiştir. İstemci ile sunucu arasındaki durum senkronizasyonu bu aralıktaki paketlerle mühürlenir. İstemci yerel tarafta bir animasyonu başlatsa dahi, sunucudan onay paketi gelmediği sürece envanterindeki eşya güncellenmez, can barı düşmez ve beceri hasarı hedefe yansıtılmaz.

Bu monografide, dövüş motorunun kalbi olan `0xB070 SERVER_ENTITY_SKILL_START`, hedef detaylarını taşıyan `0xB045 SERVER_ENTITY_SELECTION`, hareket yankısı `0xB021` ve hasar serileştirme alt yapısı (`DamageData`) incelenmektedir.


1. Deterministik Yanıt Mimarisi ve +0x4000 Eşleşmesi

Joymax mimarisinde sunucu yanıtları, istemci isteklerinin doğrudan fonksiyonel aynasıdır. Her istek opcode'u, sayısal değerine `0x4000` eklenerek sunucu yanıtına dönüştürülür:

İstemci İsteğiSunucu YanıtıYanıt Veri FormatıBaşarı / Hata Belirteci
0x6103 (Giriş Talebi)0xA103Sonuç Kodu (u8) + Hata Kodu / Shard Listesi0x01: Başarılı, 0x02: Hatalı Şifre, 0x04: Banlı
0x7001 (Karakter Seçimi)0xB001Sonuç Kodu (u8)0x01: Başarılı (Dünya yüklenir), 0x02: Başarısız
0x7021 (Hareket)0xB021Sonuç (u32) + hasMovement + Koordinat Echosuİstemcinin hareket yolunu onaylar ve çevreye yayınlar
0x7034 (Eşya Taşıma)0xB034Sonuç (u8) + Kaynak Slot + Hedef Slot + Adet0x01: Başarılı (Slotlar takas edilir)
0x7045 (Hedef Seçimi)0xB045UniqueID (u32) + Hedefin HP/MP/Buff Durumu (50 Bayt)Seçilen varlığın detaylı durum penceresini açar
0x7074 (Beceri Kullanımı)0xB070Success (bool) + CastType + DamageData Alt YapısıBecerinin başladığını ve vurulan hasarı iletir


2. Opcode 0xB070 — SERVER_ENTITY_SKILL_START ve Hasar Motoru

`sro_client.exe` binary'sinde `0x008A52F0` handler adresi tarafından işlenir. Bu paket, Silkroad'daki savaş mekaniğinin en sofistike veri yapısını barındırır.

Paket Başlığı:**
- `Success` (bool, 1B): Becerinin başarıyla başlatılıp başlatılmadığı. Eğer `false` ise paket sonlanır.
- `CastType` (u8, 1B): `0` = Buff / Güçlendirme, `2` = Saldırı / Attack.
- `AttackIndex` (u8, 1B): Kombo saldırılarında kaçıncı vuruş olduğu (0 = ilk vuruş).
- `SkillID` (u32, 4B): Kullanılan becerinin referans kimliği (`_RefSkill`).
- `SourceUniqueID` (u32, 4B): Beceriyi kullanan oyuncu veya canavar.
- `SkillUniqueID` (u32, 4B): Bu beceri kullanımı için sunucu tarafından atanan oturum kimliği.
- `TargetUniqueID` (u32, 4B): Birincil hedef varlık.


3. DamageData Alt Veri Yapısı ve Alan Etkisi (AOE)

Eğer `CastType == 2` (Saldırı) ise, paket doğrudan `DamageData` yapısını okumaya başlar. Bu yapı tekli veya çoklu (AOE) hedeflere vurulan hasarı, kritik vuruşları, bloklamaları ve geri savrulmaları (KnockBack) tek bir ağ mesajında birleştirir.

Alan AdıVeri TipiAçıklama
HasDamageboolHasar verisi var mı?
HitCountuint8_tTek seferde vuran darbe adedi
TargetCountuint8_tHasar alan toplam hedef sayısı (AOE durumunda > 1)
TargetUniqueIDuint32_tHasar alan hedef varlık
DamageEffectuint8_t1=KnockBack, 2=Block, 4=Position, 8=Cancel, 128=Dead
DamageTypeuint8_t1=Normal, 2=Critical, 4=Status Effect (Zehir/Donma)
DamageValueuint32_tHedefe vurulan net hasar miktarı
AbsorbedDamageuint8_tKalkan veya buff tarafından emilen hasar oranı
ReflectedFlaguint8_tHasar yansıtması (reflect) aktif mi?


4. İkili Kod Kanıtları ve C++ Struct Düzenleri

Bu gizli bloğun içeriği yalnızca şu üyeler tarafından görülebilir. Bu İçerik Premium Üyelere Özeldir. Engelsiz Tüm Gizli İçerikleri Görmek İçin Premium Üyelik satın alabilirsiniz. Ücretli Üyelikler



5. Özel Sunucu ve Bot Geliştiricileri İçin Kritik Kurallar

1. Animasyon ve Ağ Asenkronisi:** Silkroad'da hasar animasyondan önce ağda çözülür. İstemci `0xB070` paketini aldığı anda hedefin canını düşürür; ancak ekrandaki vuruş animasyonu 1-2 saniye sürebilir. Bot geliştirirken karakterin serbest kaldığını anlamak için `0xB070` değil, `0xB071 SERVER_ENTITY_SKILL_END` paketi dinlenmelidir.
2. Ölüm Bayrağı (Effect == 128):** Eğer bir vuruşta `DamageEffect` değeri `128` (0x80) gelirse, hedef o darbeyle ölmüştür ve arkasından hasar baytları okunmaz. Bu kontrolü atlayan paket okuyucular deseralizasyon hatası alarak çöker.
3. Blok ve İptal (Block/Cancel):** `DamageEffect` içinde `Block (0x02)` veya `Cancel (0x08)` bayrakları varsa sunucu hasar değerini (`DamageValue`) pakete yazmaz; çünkü hedef 0 hasar almıştır.

🙏 Silkroad Geliştirici Camiasına Teşekkür ve Saygı

Bu kapsamlı teknik dokümantasyon, tersine mühendislik mimarisi ve protokol analizlerinin gün ışığına çıkmasında Silkroad ekosistemine yıllardır karşılıksız devasa emekler veren ve bu mirası ileriye taşımaya devam eden öncü geliştiricilerimize en içten teşekkürlerimizi sunarız:

⭐ DaxterSoul — Paket filtreleme, proxy mimarileri ve sunucu güvenliğindeki temel çalışmaları ve topluluğa kazandırdığı standartlar için,
⭐ florian0 — İstemci (Client) ve GameServer ikili (binary) tersine mühendisliği, hook ve assembly düzeyindeki rehber niteliğindeki araştırmaları için,
⭐ JellyBitz — Açık kaynak Silkroad araçları, paket analiz kütüphaneleri ve geliştirici ekosistemine sunduğu paha biçilmez açık kaynak yazılımlar için,
⭐ ferdoran — İstemci-sunucu protokol analizlerinin, opcode referanslarının ve teknik dokümantasyonun derlenip topluluğa kazandırılmasındaki büyük gayretleri için.

Silkroad geliştirici topluluğuna kattığınız değer, paylaştığınız bilgi birikimi ve sunduğunuz vizyon için sonsuz teşekkürler. İyi ki varsınız!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Şu anda sitemizde 17,787 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,209
Mesajlar 4,051
Kullanıcılar 1,597
Son üye serkankacan
Geri
Üst