- Discord
- pvpers.gg
Wearflag Sınırını 64'e Çıkarmak (uint64_t Dönüşümü)
Metin2'de varsayılan olarak wearflag 32-bit ile sınırlıdır ve bu da yalnızca 32 farklı flag kullanılabileceği anlamına gelir. Eğer bu sınırı aşmak ve 64 flag'e kadar destek vermek istiyorsanız, ilgili değişkenin veri tipini uint64_t olarak güncellemeniz gerekir.
Veritabanı Güncellemesi
Aşağıdaki SQL sorgusunu veritabanınızda çalıştırın:
Kod:
ALTER TABLE item_proto MODIFY wearflag BIGINT UNSIGNED NOT NULL DEFAULT 0;
Sunucu ve Client Source Güncellemeleri
common/item_length.h:
// Enum'u uint64_t olarak değiştirin ve shift işlemlerini 1ULL ile yapın
enum EItemWearableFlag : uint64_t
{
WEARABLE_BODY = (1ULL << 0), // 1 yerine 1ULL kullanarak devam edin...
...,
};
GameLib/ItemData.h:
// Ekleyin:
#include <cstdint>
// Enum'u uint64_t yapın
enum EItemWearableFlag : uint64_t
{
WEARABLE_BODY = (1ULL << 0),
...,
}
// Değiştirin:
DWORD dwWearFlags;
// Şu şekilde:
uint64_t dwWearFlags; // Değişken adını koruyarak daha az dosya değiştirilebilir
// Değiştirin:
BOOL IsWearableFlag(DWORD dwFlag) const;
// Şu şekilde:
BOOL IsWearableFlag(uint64_t dwFlag) const;
// Değiştirin:
DWORD GetWearFlags() const;
// Şu şekilde:
uint64_t GetWearFlags() const;
common/tables.h:
// Değiştirin:
DWORD dwWearFlags;
// Şu şekilde:
uint64_t dwWearFlags;
game/item.h:
// Değiştirin:
DWORD GetWearFlag() { return m_pProto ? m_pProto->dwWearFlags : 0; }
// Şu şekilde:
uint64_t GetWearFlag() { return m_pProto ? m_pProto->dwWearFlags : 0; }
GameLib/ItemData.cpp:
// Değiştirin:
BOOL CItemData::IsWearableFlag(DWORD dwFlag) const
// Şu şekilde:
BOOL CItemData::IsWearableFlag(uint64_t dwFlag) const
// Değiştirin:
DWORD CItemData::GetWearFlags() const
// Şu şekilde:
uint64_t CItemData::GetWearFlags() const
UserInterface/PythonItemModule.cpp:
// Eğer WEARABLE_XXX sabiti 2^31'i geçiyorsa, değiştirin:
PyModule_AddIntConstant(poModule, "WEARABLE_BODY", CItemData::WEARABLE_BODY);
// Şu şekilde:
PyObject* pyValue = PyLong_FromUnsignedLongLong(static_cast<uint64_t>(CItemData::WEARABLE_BODY));
PyModule_AddObject(poModule, "WEARABLE_BODY", pyValue);
dump_proto Güncellemeleri
dump_proto.cpp:
// Değiştirin:
DWORD dwWearFlags;
// Şu şekilde:
uint64_t dwWearFlags;
// Değiştirin:
fprintf(stdout, "ITEM #%-5u ... WEAR %u ...\n",
// Şu şekilde:
fprintf(stdout, "ITEM #%-5u ... WEAR %I64u ...\n",
ItemCSVReader.h:
// Değiştirin:
int get_Item_WearFlag_Value(std::string inputString);
// Şu şekilde:
uint64_t get_Item_WearFlag_Value(std::string inputString);
ItemCSVReader.cpp:
// Değiştirin:
int get_Item_WearFlag_Value(std::string inputString)
// Şu şekilde:
uint64_t get_Item_WearFlag_Value(std::string inputString)
// Değiştirin:
int retValue = 0;
// Şu şekilde:
uint64_t retValue = 0;
// Değiştirin:
retValue = retValue + pow((float)2,(float)i);
// Şu şekilde:
retValue += (1ULL << i);
DB Kaynakları
ProtoReader.cpp:
// Değiştirin:
int get_Item_WearFlag_Value(string inputString)
// Şu şekilde:
uint64_t get_Item_WearFlag_Value(std::string inputString)
// Değiştirin:
int retValue = 0;
// Şu şekilde:
uint64_t retValue = 0;
// Değiştirin:
retValue = retValue + pow((float)2,(float)i);
// Şu şekilde:
retValue |= (1ULL << i);
// Ekle:
uint64_t wearFlags = 0;
// Değiştirin:
dataArray[i] = get_Item_WearFlag_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
// Şu şekilde:
wearFlags = get_Item_WearFlag_Value(csvTable.AsStringByIndex(col));
dataArray[i] = 0;
validCheck = 0;
// Değiştirin:
itemTable->dwWearFlags = dataArray[7];
// Şu şekilde:
itemTable->dwWearFlags = wearFlags;
ProtoReader.h:
// Değiştirin:
int get_Item_WearFlag_Value(std::string inputString);
// Şu şekilde:
uint64_t get_Item_WearFlag_Value(std::string inputString);
ClientManagerBoot.cpp:
// Değiştirin:
str_to_number(item_table->dwWearFlags, data[col++]);
// Şu şekilde:
item_table->dwWearFlags = strtoull(data[col++], nullptr, 10);
mysql2proto
mysql2proto.cpp:
// Değiştirin:
str_to_number(pItemTable->dwWearFlags, data[col++]);
// Şu şekilde:
pItemTable->dwWearFlags = strtoull(data[col++], nullptr, 10);
Sonuç
Bu işlemler tamamlandığında artık itemlerin wearflag değerlerinde 64 farklı wearflag kullanmanız mümkün hale gelir. Böylelikle karmaşık eşya türlerini sınıflandırmak için daha fazla alanınız olur.