- 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ü] İstemciden Sunucuya İstek Paketleri (0x6000 - 0x7FFF): Hareket, Eylem ve RPC Mimarisi
Silkroad Online protokolünde `0x6000 - 0x7FFF` sayısal bloğu, oyuncunun oyun dünyasında gerçekleştirdiği her türlü aktif eylemin sunucuya iletilmesinden sorumlu "İstemci İstek" (Client Request / RPC) katmanıdır. Oyuncunun fareyle arazide bir noktaya tıklamasından bir iksir içmesine, NPC ile ticaret yapmasından lonca kurmasına kadar tüm kullanıcı girdileri bu aralıktaki paketler aracılığıyla sunucuya (AgentServer / GameServer) taşınır.
Bu monografik rehberde, istemcinin sunucuya ilettiği temel eylem paketleri; hareket matematiği (`0x7021`), envanter eşya yönetimi (`0x7034`), hedef seçimi (`0x7045`), beceri/eylem yürütme (`0x7074`) ve karakter seçim akışı (`0x6103`, `0x7001`) eksiksiz olarak incelenmektedir.
1. İstemci İstek Paketlerinin Genel Taksonomisi
İstemci istekleri, sunucuya bir durum değişikliği talebinde bulunur. Sunucu bu istekleri alır, oyuncunun mevcut durumunu (ölü mü, sersemlemiş mi, mesafesi yetiyor mu, envanterinde yer var mı) doğrular ve eylemi ya onaylayarak `+0x4000` karşılık paketiyle döner ya da reddeder.
2. Hareket ve Koordinat Paketleme Matematiği (0x7021)
Silkroad Online motorunda arazi `RegionID` (16-bit) bazlı hücrelerden oluşur. Koordinat sistemi dosyalarda ve ağda (x, z, y) eksenindedir (burada Y yüksekliği temsil eder).
Bir oyuncu arazide bir noktaya tıkladığında `0x7021` paketi üretilir:
- `petUniqueID` (u32, 4B): Eğer oyuncu bir binek atı veya Fellow pet üzerindeyse bineğin UniqueID'si yazılır; yaya ise `0` geçilir.
- `MovementType` (u8, 1B): Hareket türü (Yürüme, Koşma, Binek).
- `RegionID` (u16, 2B): Hedeflenen noktanın bulunduğu harita sektör/bölge kimliği.
- `TargetX, TargetZ, TargetY` (i32 veya i16, 12B): Hedef koordinat bileşenleri.
Joymax Koordinat Ölçekleme İlkesi:
Ağ üzerindeki tamsayı koordinatlar yerel sektör içindeki 10 santimetrelik adımlarla temsil edilir (`world_coord = network_coord * 0.1f`). Sunucu bu koordinatları alır almaz NavMesh (.nvm) üzerinde ışın izleme (raycasting) yaparak arada duvar veya engel olup olmadığını doğrular.
3. Envanter ve Eşya Manipülasyonu (0x7034)
Eşya taşıma işlemleri tek bir genel paket yapısıyla yönetilir. Paketin ilk baytı operasyon alt türünü (`MovementType`) belirler:
- `0x00`: Envanter içi slot taşıma / yer değiştirme (`SlotFrom -> SlotTo`).
- `0x01`: Ekipman kuşanma (Envanterden -> Ekipman slotuna).
- `0x02`: Ekipman çıkarma (Ekipman slotundan -> Envantere).
- `0x03`: Depoya eşya koyma / Depodan eşya çekme.
- `0x07`: Yere eşya atma (Drop item).
- `0x08`: NPC dükkanına eşya satma.
4. İkili Kod Kanıtları ve C++ Struct Düzenleri
5. Özel Filtre ve Bot Geliştiricileri İçin Kritik Notlar
1. Movement Flood Engellemesi:** İstemci saniyede en fazla 5-6 hareket paketi gönderebilir. Bir saniyede 15'ten fazla `0x7021` gönderen istemciler doğrudan "Speed Hack / Teleport Hack" filtreleri tarafından engellenmelidir.
2. Slot İndeksleri:** Envanter slotları 0 tabanlı değildir; 13'ten başlar (1-12 arası donatılmış ekipman slotlarıdır). Bir eşyayı envantere taşırken hedef slotun `>= 13` ve `< InventoryCapacity` olduğu doğrulanmalıdır.
3. Action Request Zamanlaması (0x7074):** İstemcinin beceri kullanabilmesi için önceki becerinin animasyon süresinin (`CastTime` ve `ActionDuration`) tamamlanmış olması gerekir. Paket botlarının animasyonu beklemeden ardışık `0x7074` göndermesi sunucuda doğrudan "Action Failed" yanıtı üretir.
Silkroad Online protokolünde `0x6000 - 0x7FFF` sayısal bloğu, oyuncunun oyun dünyasında gerçekleştirdiği her türlü aktif eylemin sunucuya iletilmesinden sorumlu "İstemci İstek" (Client Request / RPC) katmanıdır. Oyuncunun fareyle arazide bir noktaya tıklamasından bir iksir içmesine, NPC ile ticaret yapmasından lonca kurmasına kadar tüm kullanıcı girdileri bu aralıktaki paketler aracılığıyla sunucuya (AgentServer / GameServer) taşınır.
Bu monografik rehberde, istemcinin sunucuya ilettiği temel eylem paketleri; hareket matematiği (`0x7021`), envanter eşya yönetimi (`0x7034`), hedef seçimi (`0x7045`), beceri/eylem yürütme (`0x7074`) ve karakter seçim akışı (`0x6103`, `0x7001`) eksiksiz olarak incelenmektedir.
1. İstemci İstek Paketlerinin Genel Taksonomisi
İstemci istekleri, sunucuya bir durum değişikliği talebinde bulunur. Sunucu bu istekleri alır, oyuncunun mevcut durumunu (ölü mü, sersemlemiş mi, mesafesi yetiyor mu, envanterinde yer var mı) doğrular ve eylemi ya onaylayarak `+0x4000` karşılık paketiyle döner ya da reddeder.
| Opcode | Mesaj Adı | Payload Boyutu | Birincil İşlevi | Sunucu Karşılık Opcode'u |
|---|---|---|---|---|
| 0x6103 | CLIENT_AUTH_REQUEST | Dinamik | Shard girişi, karakter listesi alma, oluşturma ve silme | 0xA103 |
| 0x7001 | CLIENT_CHARACTER_SELECTION_JOIN_REQUEST | Değişken | Seçilen karakterle oyun dünyasına giriş isteği | 0xB001 |
| 0x7021 | CLIENT_CHARACTER_MOVEMENT | 16-24 Bayt | Karakter veya binek hareket hedef koordinatları | 0xB021 (Echo / Broadcast) |
| 0x7024 | CLIENT_CHARACTER_MOVEMENT_ANGLE | 2 Bayt | Karakterin baktığı açının güncellenmesi | 0xB024 |
| 0x7025 | CLIENT_CHAT_REQUEST | Dinamik | Genel, Whisper, Parti, Guild, Global sohbet iletimi | 0xB025 |
| 0x7034 | CLIENT_INVENTORY_ITEM_MOVEMENT | Dinamik (Slot/Eşya) | Slot taşıma, giyme, çıkarma, yere atma, NPC satışı | 0xB034 |
| 0x7045 | CLIENT_ENTITY_SELECTION | 4 Bayt (UniqueID) | Fareyle bir hedefi (oyuncu, mob, NPC) seçme | 0xB045 |
| 0x704C | CLIENT_INVENTORY_ITEM_USE | Dinamik (Slot/Tip) | İksir, scroll, return scroll vb. eşyaların tüketimi | 0xB04C |
| 0x7050 / 51 | CLIENT_CHARACTER_ADD_STR / INT | Boş / Bayrak | Seviye atlandığında STR veya INT puanı verme | 0xB050 / 0xB051 |
| 0x7074 | CLIENT_CHARACTER_ACTION_REQUEST | Dinamik | Beceri kullanımı, normal vuruş, oturma/kalkma eylemleri | 0xB074 / 0xB070 |
2. Hareket ve Koordinat Paketleme Matematiği (0x7021)
Silkroad Online motorunda arazi `RegionID` (16-bit) bazlı hücrelerden oluşur. Koordinat sistemi dosyalarda ve ağda (x, z, y) eksenindedir (burada Y yüksekliği temsil eder).
Bir oyuncu arazide bir noktaya tıkladığında `0x7021` paketi üretilir:
- `petUniqueID` (u32, 4B): Eğer oyuncu bir binek atı veya Fellow pet üzerindeyse bineğin UniqueID'si yazılır; yaya ise `0` geçilir.
- `MovementType` (u8, 1B): Hareket türü (Yürüme, Koşma, Binek).
- `RegionID` (u16, 2B): Hedeflenen noktanın bulunduğu harita sektör/bölge kimliği.
- `TargetX, TargetZ, TargetY` (i32 veya i16, 12B): Hedef koordinat bileşenleri.
Joymax Koordinat Ölçekleme İlkesi:
Ağ üzerindeki tamsayı koordinatlar yerel sektör içindeki 10 santimetrelik adımlarla temsil edilir (`world_coord = network_coord * 0.1f`). Sunucu bu koordinatları alır almaz NavMesh (.nvm) üzerinde ışın izleme (raycasting) yaparak arada duvar veya engel olup olmadığını doğrular.
3. Envanter ve Eşya Manipülasyonu (0x7034)
Eşya taşıma işlemleri tek bir genel paket yapısıyla yönetilir. Paketin ilk baytı operasyon alt türünü (`MovementType`) belirler:
- `0x00`: Envanter içi slot taşıma / yer değiştirme (`SlotFrom -> SlotTo`).
- `0x01`: Ekipman kuşanma (Envanterden -> Ekipman slotuna).
- `0x02`: Ekipman çıkarma (Ekipman slotundan -> Envantere).
- `0x03`: Depoya eşya koyma / Depodan eşya çekme.
- `0x07`: Yere eşya atma (Drop item).
- `0x08`: NPC dükkanına eşya satma.
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 Filtre ve Bot Geliştiricileri İçin Kritik Notlar
1. Movement Flood Engellemesi:** İstemci saniyede en fazla 5-6 hareket paketi gönderebilir. Bir saniyede 15'ten fazla `0x7021` gönderen istemciler doğrudan "Speed Hack / Teleport Hack" filtreleri tarafından engellenmelidir.
2. Slot İndeksleri:** Envanter slotları 0 tabanlı değildir; 13'ten başlar (1-12 arası donatılmış ekipman slotlarıdır). Bir eşyayı envantere taşırken hedef slotun `>= 13` ve `< InventoryCapacity` olduğu doğrulanmalıdır.
3. Action Request Zamanlaması (0x7074):** İstemcinin beceri kullanabilmesi için önceki becerinin animasyon süresinin (`CastTime` ve `ActionDuration`) tamamlanmış olması gerekir. Paket botlarının animasyonu beklemeden ardışık `0x7074` göndermesi sunucuda doğrudan "Action Failed" yanıtı üretir.
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!



