- 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:
Hem DumpProto hem de Client tarafında şu şekilde değiştirin:
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:
Şu şekilde değiştirin:
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:
Mevcut:
alanlarından sonra aşağıdaki sütunları ekleyin:
Mevcut item satırlarında ise bu yeni alanları boş bırakmak yerine örneğin şu şekilde doldurabilirsiniz:
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:
Bu örnekte eşyanın sabit bonusları arasında artık şunlar bulunuyor:
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:
Şu şekilde değiştirin:
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:
Yine src/db/src/ProtoReader.cpp içerisinde aşağıdaki kısmı bulun:
Yeni APPLY alanlarının da bonus tipi olarak okunması gerektiği için kodu şu şekilde genişletin:
Burada yeni bonus tiplerinin bulunduğu indexler:
ş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:
Şu şekilde değiştirin:
Çü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:
Sonuç
Bu işlemlerden sonra eşyalarda varsayılan olarak kullanılabilen sabit bonus slotu:
olacaktır.
Artık item_proto üzerinden bir eşyaya örneğin:
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.
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.
