aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-06-27 00:37:17 +0200
committerShauren <shauren.trinity@gmail.com>2014-06-27 00:37:17 +0200
commita2b860b7814ca216565a432e07579dd77f004a86 (patch)
tree60fcc2a134c0da23572a42d9e02a88599b4adf51 /src/server/shared
parent21687aa85709d4909d41fd93909a00b18b940237 (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.cpp14
-rw-r--r--src/server/shared/DataStores/DBCFileLoader.h15
-rw-r--r--src/server/shared/DataStores/DBCStore.h8
-rw-r--r--src/server/shared/Define.h21
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