Not Denenmedi Rigid bulunmuyor bilgisayarda eğer test edip aynısını eksiksiz yaptığınız halde olmuyorsa söyleyin kaldırtayım konuyu
Not yapay zeka hazırladı konuyu hatalıysa söyleyin kaldırtayım.
Bu Rehber Ne İşe Yarar?
Oyunda bazı itemlerin tooltip'inde kırmızı "Proficiency Penalties" yazısını gördün mü? İşte bu yazıyı istediğin herhangi bir item'a nasıl ekleyeceğini adım adım anlatıyorum. Hiçbir şey bilmesen bile takip edip yapabilirsin.
(Örnek: kırmızı "Proficiency Penalties" yazısı)
TEK CÜMLELİK KURAL
İlgili yerler:
ÖNCE ŞUNU BİL: ItemClass = Item'ın "DERECE" Kimliğidir!
Derece ↔ ItemClass tablosu:
DİKKAT: Bir item'ın ItemClass'ını elle 45 yaparsan, oyun onu "derece 15 / C" sanır ve "Degree: 15 degrees" yazar. Yani 17 dereceli bir silaha 45 verirsen derecesi 15'e düşer! Bu yüzden ItemClass'ı rastgele değiştirme.
İki Yol Var — Hangisi Senin Durumun?
YOL A (Kolay ama derece değişir):
Item'a direkt 34–45 arası bir ItemClass ver. Penalty otomatik gelir. AMA item'ın derecesi de o ItemClass'ın derecesi olur. Sadece derecesi zaten 12–15 olan itemler için uygundur.
YOL B (Doğru yol — dereceyi KORUYARAK penalty ekleme):
Item kendi gerçek ItemClass'ında kalsın (örn. derece 17 = 51, "Degree: 17" korunur). Penalty tablosuna o ItemClass için yeni satırlar ekle. Derece 16+ itemlere bunu kullan.
Aşağıdaki adımlar YOL B'yi anlatır (örnek: derece 17 / C = ItemClass 51). Farklı bir değer istersen "51" yazan yerleri kendi değerinle değiştir.
ADIM ADIM (SQL kopyala-yapıştır)
ADIM 0 — Önce Yedek Al
Hata olursa geri dönebilmek için (bir kere çalıştır):
ADIM 1 — Item'ın ItemClass'ını Doğru Ayarla
Derece 17/C = 51. 'ITEM_...' kısmını kendi item kod adınla değiştir:
Kontrol et (Derece 17 görmelisin):
ADIM 2 — Penalty Satırlarını DB'ye Ekle
Derece 15'in (ItemClass 45) ceza desenini derece 17'ye (51) kopyalar. İki kez çalışsa bile çakışmasın diye önce eskiyi siler:
Kontrol (65 satır olmalı):
ADIM 3 — Media (Client) Tarafına Aynı Satırları Ekle
Yazının EKRANDA çıkması için şart! Kırmızı yazıyı client çizer ve bunu Media'daki dosyadan okur.
ADIM 4 — Paketle + Yenile
ADIM 5 — Test Et
Satırdaki Sayılar Ne Demek?
Örnek satır:
Bunlar farklı yazı çeşitleri DEĞİL! Kırmızı yazı her zaman aynı tek yazıdır. Bu sayılar sadece cezanın ne kadar olduğunu ayarlar.
PenaltyClass (36/39/42/45) → yüzde karşılığı (blade):
MultipleValue: karakter seviyesi yükseldikçe küçülür, ceza erir. 130 seviyede satır kalmaz → ceza 0, yazı kaybolur.
Geri Alma
Media:
Bu Bilgi Nereden Kesin? (IDA + Ghidra Decompile Kanıtı)
Bu rehber tahmin değil. Sunucu ve client binary'leri IDA Pro (Hex-Rays) ve Ghidra ile decompile edilip, sonuçlar veritabanı (DB) ile çapraz doğrulandı. İki bağımsız tool da aynı sonucu verdi:
Doğrulanan zincir:
Ceza yüzdeleri (DB'den birebir, blade tipi):
Byte-Kesin Formül (decompile'dan sökülen gerçek kod)
Client'ta ceza matematiği fonksiyon fonksiyon takip edildi. IDA ve Ghidra tıpatıp aynı sonucu verdi. İşte kodun yaptığı:
1) Kırmızı yazı ne zaman çıkar (
2) Stat ne kadar düşer (attack hesabı — her PenaltyClass için toplanır):
Açık formül:
Örnek (blade, ItemClass 45, karakter seviye 101 → satırlar: 36×2, 39×10, 42×10, 45×10):
Yani item'ın Phy atk min'i ~4459 puan düşer; karakter level attıkça bu erir.
Sık Karışan Noktalar
Not yapay zeka hazırladı konuyu hatalıysa söyleyin kaldırtayım.
Bir Item'a Kırmızı "Proficiency Penalties" Yazısı Nasıl Eklenir?
ItemClass Sistemi — A'dan Z'ye + Hazır SQL
ItemClass Sistemi — A'dan Z'ye + Hazır SQL
Oyunda bazı itemlerin tooltip'inde kırmızı "Proficiency Penalties" yazısını gördün mü? İşte bu yazıyı istediğin herhangi bir item'a nasıl ekleyeceğini adım adım anlatıyorum. Hiçbir şey bilmesen bile takip edip yapabilirsin.
(Örnek: kırmızı "Proficiency Penalties" yazısı)
Bu yazıyı belirleyen TEK şey, item'ın ItemClass değeridir. Item'ın ItemClass'ı "penalty tablosunda" kayıtlı bir değerse → o item'da kırmızı yazı çıkar. Başka hiçbir param/flag yoktur.
İlgili yerler:
- Penalty tablosu:
_RefEquipItemPenalty(Media:refequipitempenalty.txt) - Yüzde/denge tablosu:
_RefEquipItemPenaltyBalance(Media:refequipitempenaltybalance.txt) - Item'ın ItemClass'ı:
_RefObjItem.ItemClass(Media:itemdata_*.txt→ 62. kolon)
_RefObjItem tablosunda "Degree" diye ayrı bir kolon YOKTUR. Oyun, ekranda gösterdiği "Degree: X degrees" yazısını ItemClass'tan hesaplar:Derece ↔ ItemClass tablosu:
| Derece | A | B | C |
| 12 | 34 | 35 | 36 |
| 13 | 37 | 38 | 39 |
| 14 | 40 | 41 | 42 |
| 15 | 43 | 44 | 45 |
| 16 | 46 | 47 | 48 |
| 17 | 49 | 50 | 51 |
DİKKAT: Bir item'ın ItemClass'ını elle 45 yaparsan, oyun onu "derece 15 / C" sanır ve "Degree: 15 degrees" yazar. Yani 17 dereceli bir silaha 45 verirsen derecesi 15'e düşer! Bu yüzden ItemClass'ı rastgele değiştirme.
YOL A (Kolay ama derece değişir):
Item'a direkt 34–45 arası bir ItemClass ver. Penalty otomatik gelir. AMA item'ın derecesi de o ItemClass'ın derecesi olur. Sadece derecesi zaten 12–15 olan itemler için uygundur.
YOL B (Doğru yol — dereceyi KORUYARAK penalty ekleme):
Item kendi gerçek ItemClass'ında kalsın (örn. derece 17 = 51, "Degree: 17" korunur). Penalty tablosuna o ItemClass için yeni satırlar ekle. Derece 16+ itemlere bunu kullan.
Aşağıdaki adımlar YOL B'yi anlatır (örnek: derece 17 / C = ItemClass 51). Farklı bir değer istersen "51" yazan yerleri kendi değerinle değiştir.
ADIM 0 — Önce Yedek Al
Hata olursa geri dönebilmek için (bir kere çalıştır):
ADIM 1 — Item'ın ItemClass'ını Doğru Ayarla
Derece 17/C = 51. 'ITEM_...' kısmını kendi item kod adınla değiştir:
Kontrol et (Derece 17 görmelisin):
ADIM 2 — Penalty Satırlarını DB'ye Ekle
Derece 15'in (ItemClass 45) ceza desenini derece 17'ye (51) kopyalar. İki kez çalışsa bile çakışmasın diye önce eskiyi siler:
Kontrol (65 satır olmalı):
Not: Kullandığımız PenaltyClass'lar (36, 39, 42, 45) için_RefEquipItemPenaltyBalance'ta yüzde satırları zaten var. Ekstra bir şey eklemene gerek yok; hem yazı çıkar hem ceza hesaplanır.
ADIM 3 — Media (Client) Tarafına Aynı Satırları Ekle
Yazının EKRANDA çıkması için şart! Kırmızı yazıyı client çizer ve bunu Media'daki dosyadan okur.
- Dosya:
media\server_dep\silkroad\textdata\refequipitempenalty.txt - Format: 6 kolon, TAB ile ayrılır, kodlama UTF-16 (Unicode). Örnek satır:
- ItemClass 45 satırlarını kopyala, 4. kolonu 51 yap, en alta yapıştır.
- Kaydederken kodlamayı UTF-16 LE / Unicode koru! ANSI/UTF-8 yapma.
- Item'ın itemdata'sındaki 62. kolon (ItemClass) da 51 olmalı.
ADIM 4 — Paketle + Yenile
- Media.pk2'yi yeniden paketle.
- GameServer'ı restart et (veya ref-reload).
- Client'ı tamamen kapatıp aç.
ADIM 5 — Test Et
- 101 seviye ve üstü bir karakterle item'a bak → "Proficiency Penalties" görmelisin.
- Hatırlatma: 101 seviyenin altındaki karakter bu yazıyı asla göremez (penalty verisi 101'den başlar). Test için mutlaka 101+ karakter kullan.
Örnek satır:
1 | 0 | 101 | 51 | 36 | 2| Kolon | Değer | Anlamı |
| 1 | 1 | Service — hep 1 (aktif) |
| 2 | 0 | PenaltyEquipType — ekipman tip grubu, hep 0 |
| 3 | 101 | PenaltyLevel = KARAKTER seviyesi (bu satır 101 lvl'e uygulanır) |
| 4 | 51 | ItemClass = item'ın sınıfı (derece 17) |
| 5 | 36 | PenaltyClass = "ceza grubu" (yazı DEĞİL!) |
| 6 | 2 | MultipleValue = o grubun ağırlığı / kaç katı |
Bunlar farklı yazı çeşitleri DEĞİL! Kırmızı yazı her zaman aynı tek yazıdır. Bu sayılar sadece cezanın ne kadar olduğunu ayarlar.
PenaltyClass (36/39/42/45) → yüzde karşılığı (blade):
| PenaltyClass | Phy düşüş | Mgc düşüş | Seviye |
| 36 | 84.5–97.1% | 95.3–107.5% | hafif |
| 39 | 109–125% | 123–138% | orta |
| 42 | 140–161% | 158–178% | ağır |
| 45 | 179–206% | 202–228% | en ağır |
MultipleValue: karakter seviyesi yükseldikçe küçülür, ceza erir. 130 seviyede satır kalmaz → ceza 0, yazı kaybolur.
Pratik: Sadece kırmızı yazının çıkmasını istiyorsan bu sayılara dokunma, olduğu gibi bırak. Sayılar sadece "ceza ne kadar sert olsun" ayarıdır.
Media:
refequipitempenalty.txt'ten eklediğin 51 satırlarını sil, repack et.Bu rehber tahmin değil. Sunucu ve client binary'leri IDA Pro (Hex-Rays) ve Ghidra ile decompile edilip, sonuçlar veritabanı (DB) ile çapraz doğrulandı. İki bağımsız tool da aynı sonucu verdi:
- SR_GameServer.exe içinde iki ref-sınıf RTTI ile birebir bulundu:
CRefEquipItemPenaltyveCRefEquipItemPenaltyBalance - Bu sınıflar sırasıyla
_RefEquipItemPenaltyve_RefEquipItemPenaltyBalancetablolarını yükler (CDBRecStream loader'ları decompile edildi). - SRO_Client.exe aynı iki dosyayı Media'dan yükler (
refequipitempenalty.txt+refequipitempenaltybalance.txt) veUIIT_STT_UPGRADE_EXPERT_PENALTY(metin id 5109) etiketini içerir → kırmızı yazıyı ekrana çizen taraf. _RefObjItemtablosunda ayrı bir "Degree" kolonu olmadığı kod düzeyinde doğrulandı → derece tamamen ItemClass'tan hesaplanıyor.
Doğrulanan zincir:
Ceza yüzdeleri (DB'den birebir, blade tipi):
| PenaltyClass | Phy düşüş | Mgc düşüş |
| 36 (hafif) | 84.5–97.1% | 95.3–107.5% |
| 39 | 109–125% | 123–138% |
| 42 | 140–161% | 158–178% |
| 45 (ağır) | 179.8–206.7% | 202.9–228.7% |
Yani "kırmızı yazı + hangi item + ne kadar ceza" tamamen bu üç tablodan okunur.
Client'ta ceza matematiği fonksiyon fonksiyon takip edildi. IDA ve Ghidra tıpatıp aynı sonucu verdi. İşte kodun yaptığı:
1) Kırmızı yazı ne zaman çıkar (
sub_7577E0):2) Stat ne kadar düşer (attack hesabı — her PenaltyClass için toplanır):
Açık formül:
- Ceza =
Balance_değeri × MultipleValue(mutlak attack-puanı olarak, yüzde değil) - Aynı seviyede birden fazla PenaltyClass varsa hepsi toplanır
- Sonuç item'ın Phy/Mag attack min–max değerinden çıkarılır
- Seviye yükseldikçe MultipleValue küçülür + satırlar azalır → ceza erir → 130'da biter
Örnek (blade, ItemClass 45, karakter seviye 101 → satırlar: 36×2, 39×10, 42×10, 45×10):
Yani item'ın Phy atk min'i ~4459 puan düşer; karakter level attıkça bu erir.
Doğrulama:sub_A79150(IDA) =FUN_00a79150(Ghidra) → aynı kod, aynı offset'ler (+0x08/+0x0C/+0x10/+0x14= 4 balance değeri; MultipleValueentry+4).
- "Yazı çıktı ama derece değişti": ItemClass'ı değiştirdin → derece de değişir. Dereceyi korumak için item'ın ItemClass'ına dokunma, penalty tablosuna satır ekle (YOL B).
- "Yazı hiç çıkmıyor": (a) Karakter 101+ mı? (b) Media dosyasına satırları ekleyip UTF-16 kaydettin mi? (c) Repack + client restart? (d) itemdata 62. kolon ile penalty ItemClass'ı aynı mı?
- "Durability düşmüyor": Normaldir. Bu ceza durability'yi düşürmez; sadece attack power ve reinforce %'yi kısar.
- ItemClass reinforce/upgrade denetimlerinde de kullanılır; item'ın gerçek derecesine uygun değer ver.
- DB ve Media her zaman aynı olmalı.
Faydalı olduysa beğenmeyi unutma.
