diff options
| author | Shauren <shauren.trinity@gmail.com> | 2014-06-27 00:37:17 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2014-06-27 00:37:17 +0200 |
| commit | a2b860b7814ca216565a432e07579dd77f004a86 (patch) | |
| tree | 60fcc2a134c0da23572a42d9e02a88599b4adf51 /src/server/shared | |
| parent | 21687aa85709d4909d41fd93909a00b18b940237 (diff) | |
Core/DataStores: Implemented uint64 field type for DBC files and fixed structure of Achievement_Criteria.dbc
Diffstat (limited to 'src/server/shared')
| -rw-r--r-- | src/server/shared/DataStores/DBCFileLoader.cpp | 14 | ||||
| -rw-r--r-- | src/server/shared/DataStores/DBCFileLoader.h | 15 | ||||
| -rw-r--r-- | src/server/shared/DataStores/DBCStore.h | 8 | ||||
| -rw-r--r-- | src/server/shared/Define.h | 21 |
4 files changed, 42 insertions, 16 deletions
diff --git a/src/server/shared/DataStores/DBCFileLoader.cpp b/src/server/shared/DataStores/DBCFileLoader.cpp index ab46bca9b72..f8c8693216d 100644 --- a/src/server/shared/DataStores/DBCFileLoader.cpp +++ b/src/server/shared/DataStores/DBCFileLoader.cpp @@ -90,8 +90,10 @@ bool DBCFileLoader::Load(const char* filename, const char* fmt) for (uint32 i = 1; i < fieldCount; ++i) { fieldsOffset[i] = fieldsOffset[i - 1]; - if (fmt[i - 1] == 'b' || fmt[i - 1] == 'X') // byte fields + if (fmt[i - 1] == FT_BYTE || fmt[i - 1] == FT_NA_BYTE) // byte fields fieldsOffset[i] += sizeof(uint8); + else if (fmt[i - 1] == FT_LONG) + fieldsOffset[i] += sizeof(uint64); else // 4 byte fields (int32/float/strings) fieldsOffset[i] += sizeof(uint32); } @@ -152,6 +154,9 @@ uint32 DBCFileLoader::GetFormatRecordSize(const char* format, int32* index_pos) case FT_BYTE: recordsize += sizeof(uint8); break; + case FT_LONG: + recordsize += sizeof(uint64); + break; case FT_NA: case FT_NA_BYTE: break; @@ -242,6 +247,10 @@ char* DBCFileLoader::AutoProduceData(const char* format, uint32& records, char** *((uint8*)(&dataTable[offset])) = getRecord(y).getUInt8(x); offset += sizeof(uint8); break; + case FT_LONG: + *((uint64*)(&dataTable[offset])) = getRecord(y).getUInt64(x); + offset += sizeof(uint64); + break; case FT_STRING: *((char**)(&dataTable[offset])) = NULL; // will replace non-empty or "" strings in AutoProduceStrings offset += sizeof(char*); @@ -288,6 +297,9 @@ char* DBCFileLoader::AutoProduceStrings(const char* format, char* dataTable) case FT_BYTE: offset += sizeof(uint8); break; + case FT_LONG: + offset += sizeof(uint64); + break; case FT_STRING: { // fill only not filled entries diff --git a/src/server/shared/DataStores/DBCFileLoader.h b/src/server/shared/DataStores/DBCFileLoader.h index 84ee6e93e68..f05e7800d3b 100644 --- a/src/server/shared/DataStores/DBCFileLoader.h +++ b/src/server/shared/DataStores/DBCFileLoader.h @@ -36,21 +36,26 @@ class DBCFileLoader float getFloat(size_t field) const { assert(field < file.fieldCount); - float val = *reinterpret_cast<float*>(offset+file.GetOffset(field)); + float val = *reinterpret_cast<float*>(offset + file.GetOffset(field)); EndianConvert(val); return val; } uint32 getUInt(size_t field) const { assert(field < file.fieldCount); - uint32 val = *reinterpret_cast<uint32*>(offset+file.GetOffset(field)); + uint32 val = *reinterpret_cast<uint32*>(offset + file.GetOffset(field)); EndianConvert(val); return val; } uint8 getUInt8(size_t field) const { assert(field < file.fieldCount); - return *reinterpret_cast<uint8*>(offset+file.GetOffset(field)); + return *reinterpret_cast<uint8*>(offset + file.GetOffset(field)); + } + uint64 getUInt64(size_t field) const + { + assert(field < file.fieldCount); + return *reinterpret_cast<uint64*>(offset + file.GetOffset(field)); } const char *getString(size_t field) const @@ -63,8 +68,8 @@ class DBCFileLoader private: Record(DBCFileLoader &file_, unsigned char *offset_): offset(offset_), file(file_) { } - unsigned char *offset; - DBCFileLoader &file; + unsigned char* offset; + DBCFileLoader& file; friend class DBCFileLoader; diff --git a/src/server/shared/DataStores/DBCStore.h b/src/server/shared/DataStores/DBCStore.h index 9d5836fcf0b..055a8691a87 100644 --- a/src/server/shared/DataStores/DBCStore.h +++ b/src/server/shared/DataStores/DBCStore.h @@ -186,6 +186,10 @@ class DBCStorage *reinterpret_cast<uint8*>(&sqlDataTable[offset]) = uint8(0); offset += 1; break; + case FT_LONG: + *reinterpret_cast<uint64*>(&sqlDataTable[offset]) = uint64(0); + offset += 8; + break; case FT_STRING: // Beginning of the pool - empty string *reinterpret_cast<char**>(&sqlDataTable[offset]) = stringPoolList.back(); @@ -211,6 +215,10 @@ class DBCStorage *reinterpret_cast<uint8*>(&sqlDataTable[offset]) = fields[sqlColumnNumber].GetUInt8(); offset += 1; break; + case FT_LONG: + *reinterpret_cast<uint64*>(&sqlDataTable[offset]) = fields[sqlColumnNumber].GetUInt64(); + offset += 8; + break; case FT_STRING: TC_LOG_ERROR("server.loading", "Unsupported data type in table '%s' at char %d", sql->sqlTableName.c_str(), columnNumber); return false; diff --git a/src/server/shared/Define.h b/src/server/shared/Define.h index 0d62ccb4e83..1e2a9676cd5 100644 --- a/src/server/shared/Define.h +++ b/src/server/shared/Define.h @@ -89,16 +89,17 @@ typedef ACE_UINT8 uint8; enum DBCFormer { - FT_NA='x', //not used or unknown, 4 byte size - FT_NA_BYTE='X', //not used or unknown, byte - FT_STRING='s', //char* - FT_FLOAT='f', //float - FT_INT='i', //uint32 - FT_BYTE='b', //uint8 - FT_SORT='d', //sorted by this field, field is not included - FT_IND='n', //the same, but parsed to data - FT_SQL_PRESENT='p', //Used in sql format to mark column present in sql dbc - FT_SQL_ABSENT='a' //Used in sql format to mark column absent in sql dbc + FT_NA = 'x', //not used or unknown, 4 byte size + FT_NA_BYTE = 'X', //not used or unknown, byte + FT_STRING = 's', //char* + FT_FLOAT = 'f', //float + FT_INT = 'i', //uint32 + FT_BYTE = 'b', //uint8 + FT_LONG = 'l', //uint64 + FT_SORT = 'd', //sorted by this field, field is not included + FT_IND = 'n', //the same, but parsed to data + FT_SQL_PRESENT = 'p', //Used in sql format to mark column present in sql dbc + FT_SQL_ABSENT = 'a' //Used in sql format to mark column absent in sql dbc }; #endif //TRINITY_DEFINE_H |
