iSRO-R Paylaşım [Rehber] Silkroad — Bir Item'a Kırmızı "Proficiency Penalties" Yazısı Nasıl Eklenir? (ItemClass Sistemi A'dan Z'ye + SQL)

PortalDark

Sıkıldım

.
Aktiflik: 100%
3000 mesaj Lord
Katılım
6 Şub 2019
Mesajlar
3,845
Çözümler
83
Tepkime puanı
18,527
Puan
113
Konum
Steam
Thread owner
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.



Bir Item'a Kırmızı "Proficiency Penalties" Yazısı Nasıl Eklenir?
ItemClass Sistemi — A'dan Z'ye + Hazır SQL



🎯 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.

t8xsXek.png

(Örnek: kırmızı "Proficiency Penalties" yazısı)



📌 TEK CÜMLELİK KURAL

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)



⚠️ ÖNCE ŞUNU BİL: ItemClass = Item'ın "DERECE" Kimliğidir!

_RefObjItem tablosunda "Degree" diye ayrı bir kolon YOKTUR. Oyun, ekranda gösterdiği "Degree: X degrees" yazısını ItemClass'tan hesaplar:

Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

Derece ↔ ItemClass tablosu:
DereceABC
12343536
13373839
14404142
15434445
16464748
17495051

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):

Rich (BB code):
İçeriği görebilmek için Giriş yap ya da üye ol.

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:

Rich (BB code):
İçeriği görebilmek için Giriş yap ya da üye ol.

Kontrol et (Derece 17 görmelisin):

Rich (BB code):
İçeriği görebilmek için Giriş yap ya da üye ol.

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:

Rich (BB code):
İçeriği görebilmek için Giriş yap ya da üye ol.

Kontrol (65 satır olmalı):

Rich (BB code):
İçeriği görebilmek için Giriş yap ya da üye ol.

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.

  1. Dosya: media\server_dep\silkroad\textdata\refequipitempenalty.txt
  2. Format: 6 kolon, TAB ile ayrılır, kodlama UTF-16 (Unicode). Örnek satır:
    Kod:
    İçeriği görebilmek için Giriş yap ya da üye ol.
  3. ItemClass 45 satırlarını kopyala, 4. kolonu 51 yap, en alta yapıştır.
  4. Kaydederken kodlamayı UTF-16 LE / Unicode koru! ANSI/UTF-8 yapma.
  5. 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.



🔢 Satırdaki Sayılar Ne Demek?

Örnek satır: 1 | 0 | 101 | 51 | 36 | 2

KolonDeğerAnlamı
11Service — hep 1 (aktif)
20PenaltyEquipType — ekipman tip grubu, hep 0
3101PenaltyLevel = KARAKTER seviyesi (bu satır 101 lvl'e uygulanır)
451ItemClass = item'ın sınıfı (derece 17)
536PenaltyClass = "ceza grubu" (yazı DEĞİL!)
62MultipleValue = 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):
PenaltyClassPhy düşüşMgc düşüşSeviye
3684.5–97.1%95.3–107.5%hafif
39109–125%123–138%orta
42140–161%158–178%ağır
45179–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.



↩️ Geri Alma

Rich (BB code):
İçeriği görebilmek için Giriş yap ya da üye ol.
Media: refequipitempenalty.txt'ten eklediğin 51 satırlarını sil, repack et.



🔬 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:

  • SR_GameServer.exe içinde iki ref-sınıf RTTI ile birebir bulundu:
    CRefEquipItemPenalty ve CRefEquipItemPenaltyBalance
  • Bu sınıflar sırasıyla _RefEquipItemPenalty ve _RefEquipItemPenaltyBalance tablolarını yükler (CDBRecStream loader'ları decompile edildi).
  • SRO_Client.exe aynı iki dosyayı Media'dan yükler (refequipitempenalty.txt + refequipitempenaltybalance.txt) ve UIIT_STT_UPGRADE_EXPERT_PENALTY (metin id 5109) etiketini içerir → kırmızı yazıyı ekrana çizen taraf.
  • _RefObjItem tablosunda ayrı bir "Degree" kolonu olmadığı kod düzeyinde doğrulandı → derece tamamen ItemClass'tan hesaplanıyor.

Doğrulanan zincir:
Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

Ceza yüzdeleri (DB'den birebir, blade tipi):
PenaltyClassPhy düşüşMgc düşüş
36 (hafif)84.5–97.1%95.3–107.5%
39109–125%123–138%
42140–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.



🧮 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 (sub_7577E0):
Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

2) Stat ne kadar düşer (attack hesabı — her PenaltyClass için toplanır):
Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

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):
Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.
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; MultipleValue entry+4).



❓ Sık Karışan Noktalar

  • "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. 👑
 
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.




Bir Item'a Kırmızı "Proficiency Penalties" Yazısı Nasıl Eklenir?
ItemClass Sistemi — A'dan Z'ye + Hazır SQL



🎯 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.

t8xsXek.png

(Örnek: kırmızı "Proficiency Penalties" yazısı)



📌 TEK CÜMLELİK KURAL



İ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)


*** Gizli metin: alıntı yapılamaz. ***



Faydalı olduysa beğenmeyi unutma. 👑
Paylaşım için teşekkürler Hakan
 

Bu konuyu görüntüleyen kullanıcılar

Etiketler
Geri
Üst Alt