Neler yeni
XenForo Bannerlar
Modern AdBlock Uyarısı

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kod Eşyalardaki Varsayılan Bonus Limitini Artırma (ITEM_APPLY_MAX_NUM)

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
4,521
Tepkime puanı
5,799
Puanları
113
Yaş
32
Konum
Türkiye
Dc
fatihbulut
Eşyalardaki Varsayılan Bonus Limitini Artırma (ITEM_APPLY_MAX_NUM)

Bu sistemde eşyalara tanımlanabilen varsayılan bonus sayısını artıracağız.

Yani ITEM_APPLY_MAX_NUM değerini yükselteceğiz.

Normalde örneğin bir silah üzerinde sadece saldırı değeri, büyülü saldırı değeri ve saldırı hızı gibi sınırlı sayıda sabit bonus bulunabiliyor.

Bu değişiklikten sonra kritik, delici, HP, STR, DEX, saldırı değeri gibi daha fazla sabit bonusu doğrudan item_proto üzerinden tanımlayabileceğiz.

Source içerisinde varsayılan limit 3.

Bu örnekte limiti 7 yapacağız.



DUMPPROTO & CLIENT

Öncelikle DumpProto kullanıyorsanız DumpProto tarafında ve Client içerisinde:

GameLib/ItemData.h

dosyasında aşağıdaki satırı bulun:

Kod:
ITEM_APPLY_MAX_NUM = 3,

Hem DumpProto hem de Client tarafında şu şekilde değiştirin:

Kod:
ITEM_APPLY_MAX_NUM = 7,

Client tarafında yapılacak temel değişiklik bu kadar.

SERVER

Şimdi Server tarafına geçiyoruz.

src/common/item_length.h

dosyasını açın.

Aşağıdaki satırı bulun:

Kod:
ITEM_APPLY_MAX_NUM = 3,

Şu şekilde değiştirin:

Kod:
ITEM_APPLY_MAX_NUM = 7,

Böylece Server tarafı da artık eşyalarda toplam 7 adet sabit bonus slotu bekleyecek.


ITEM_PROTO DÜZENLEMESİ

Server tarafındaki item_proto dosyasına toplam 8 yeni sütun eklememiz gerekiyor.

Sebebi:


  • []4 yeni APPLY_TYPE
    [
    ]4 yeni APPLY_VALUE

Mevcut:

Kod:
ADDON_TYPE2 ADDON_VALUE2

alanlarından sonra aşağıdaki sütunları ekleyin:

Kod:
ADDON_TYPE3 ADDON_VALUE3 ADDON_TYPE4 ADDON_VALUE4 ADDON_TYPE5 ADDON_VALUE5 ADDON_TYPE6 ADDON_VALUE6

Mevcut item satırlarında ise bu yeni alanları boş bırakmak yerine örneğin şu şekilde doldurabilirsiniz:

Kod:
APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0

Yani yeni bonus kullanılmayan eşyalarda 4 yeni bonus slotu da APPLY_NONE ve 0 olarak kalabilir.

Örneğin VNUM'u 11 olan bir eşyaya 4 yeni sabit bonus daha eklemek istersek satır şu şekilde olabilir:

Kod:
11 µµ+1 ITEM_WEAPON WEAPON_SWORD 2 ANTI_MUDANG ITEM_TUNABLE WEAR_WEAPON NONE 100 100 12 2 15 LEVEL 0 LIMIT_NONE 0 APPLY_ATT_SPEED 22 APPLY_STR 10 APPLY_DEX 10 APPLY_MAX_HP 1000 APPLY_CRITICAL_PCT 10 APPLY_PENETRATE_PCT 10 APPLY_ATT_GRADE_BONUS 50 0 15 19 13 15 7 0 1 0

Bu örnekte eşyanın sabit bonusları arasında artık şunlar bulunuyor:


  • []Saldırı Hızı
    [
    ]STR
    []DEX
    [
    ]Maksimum HP
    []Kritik Vuruş
    [
    ]Delici Vuruş
  • Saldırı Değeri

Yeni 8 sütunu item_proto dosyanıza istediğiniz yöntemle ekleyebilirsiniz.

Ben bu işlem için bir CSV editörü kullandım.



PROTOREADER DÜZENLEMESİ

Şimdi Server tarafındaki ProtoReader dosyasını düzenleyeceğiz.

src/db/src/ProtoReader.cpp

dosyasını açın.

Aşağıdaki satırı bulun:

Kod:
int dataArray[33];

Şu şekilde değiştirin:

Kod:
int dataArray[41];

Burada daha önce 33 adet alan bulunuyordu.

4 yeni bonus tipi ve 4 yeni bonus değeri eklediğimiz için toplamda +8 alan eklenmiş oldu.

Yani:

Kod:
33 + 8 = 41

Yine src/db/src/ProtoReader.cpp içerisinde aşağıdaki kısmı bulun:

Kod:
} else if (i==18) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==20) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==22) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else {
str_to_number(dataArray[i], csvTable.AsStringByIndex(col));
}

Yeni APPLY alanlarının da bonus tipi olarak okunması gerektiği için kodu şu şekilde genişletin:

Kod:
} else if (i==18) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==20) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==22) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==24) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==26) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==28) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==30) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else {
str_to_number(dataArray[i], csvTable.AsStringByIndex(col));
}

Burada yeni bonus tiplerinin bulunduğu indexler:

Kod:
18
20
22
24
26
28
30

şeklinde okunmaktadır.



INDEXLERİ GÜNCELLEME

Yeni 8 sütun eklendiği için ProtoReader içerisinde sonraki alanların indexleri de +8 kayacaktır.

Aynı dosyada aşağıdaki satırları bulun:

Kod:
itemTable->alValues[i] = dataArray[24+i];
itemTable->bGainSocketPct = dataArray[31];
itemTable->sAddonType = dataArray[32];

Şu şekilde değiştirin:

Kod:
itemTable->alValues[i] = dataArray[32+i];
itemTable->bGainSocketPct = dataArray[39];
itemTable->sAddonType = dataArray[40];

Çünkü item_proto içerisine 8 yeni sütun eklediğimiz için eski indexlerin devamındaki tüm alanlar 8 sıra ileri kaymıştır.

Yani:

Kod:
24 → 32
31 → 39
32 → 40

Sonuç

Bu işlemlerden sonra eşyalarda varsayılan olarak kullanılabilen sabit bonus slotu:

Kod:
3 → 7

olacaktır.

Artık item_proto üzerinden bir eşyaya örneğin:

  • Saldırı Hızı
  • STR
  • DEX
  • HP
  • Kritik
  • Delici
  • Saldırı Değeri

gibi toplam 7 farklı sabit bonus tanımlayabilirsiniz.

Dikkat:

Client, Server, DumpProto ve item_proto yapısındaki ITEM_APPLY_MAX_NUM değerlerinin birbiriyle uyumlu olması gerekir.

Bir tarafta 3, diğer tarafta 7 bırakılırsa proto okuma hataları, bozuk item verileri veya client/server uyumsuzluğu oluşabilir.

Kolay gelsin. :)

1788170653843.png
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar