Wearflag Değerini 64 Bit’e Genişletme - uint64_t

Aethre

www.pvpers.gg
Katılım
19 Haz 2024
Konular
395
Mesajlar
495
Beğeniler
938
GG Coin
17,099
Ticaret Değeri - 0%
0   0   0
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.
 
Geri
Üst Alt