Fix BinaryTree skip, small otb changes
This commit is contained in:
parent
8dc831088e
commit
b7b8fdfd0c
|
@ -43,7 +43,8 @@ enum ItemCategory : uint8 {
|
|||
ItemCategorySplash = 11,
|
||||
ItemCategoryFluid = 12,
|
||||
ItemCategoryDoor = 13,
|
||||
ItemCategoryLast = 14
|
||||
ItemCategoryDeprecated = 14,
|
||||
ItemCategoryLast = 15
|
||||
};
|
||||
|
||||
enum ItemTypeAttr : uint8 {
|
||||
|
@ -76,7 +77,8 @@ enum ItemTypeAttr : uint8 {
|
|||
ItemTypeAttrLight2 = 42,
|
||||
ItemTypeAttrTopOrder = 43,
|
||||
ItemTypeAttrWrtiable3 = 44, // deprecated
|
||||
ItemTypeAttrLast = 45
|
||||
ItemTypeAttrWareId = 45,
|
||||
ItemTypeAttrLast = 46
|
||||
};
|
||||
|
||||
enum ClientVersion
|
||||
|
|
|
@ -178,17 +178,23 @@ void ThingTypeManager::loadOtb(const std::string& file)
|
|||
stdext::throw_exception("invalid otb file");
|
||||
|
||||
BinaryTreePtr root = fin->getBinaryTree();
|
||||
root->skip(1); // otb first byte is always 0
|
||||
|
||||
signature = root->getU32();
|
||||
if(signature != 0)
|
||||
stdext::throw_exception("invalid otb file");
|
||||
|
||||
root->skip(4);
|
||||
uint8 rootAttr = root->getU8();
|
||||
if(rootAttr == 0x01) { // OTB_ROOT_ATTR_VERSION
|
||||
uint16 size = root->getU16();
|
||||
if(size != 4 + 4 + 4 + 128)
|
||||
stdext::throw_exception("invalid otb root attr version size");
|
||||
|
||||
m_otbMajorVersion = root->getU32();
|
||||
m_otbMinorVersion = root->getU32();
|
||||
root->skip(4);
|
||||
root->skip(4); // buildNumber
|
||||
root->skip(128); // description
|
||||
}
|
||||
|
||||
m_reverseItemTypes.clear();
|
||||
m_itemTypes.resize(root->getChildren().size() + 1, m_nullItemType);
|
||||
|
|
|
@ -111,6 +111,12 @@ void BinaryTree::seek(uint pos)
|
|||
m_pos = pos;
|
||||
}
|
||||
|
||||
void BinaryTree::skip(uint len)
|
||||
{
|
||||
unserialize();
|
||||
seek(tell() + len);
|
||||
}
|
||||
|
||||
uint8 BinaryTree::getU8()
|
||||
{
|
||||
unserialize();
|
||||
|
|
|
@ -39,7 +39,7 @@ public:
|
|||
~BinaryTree();
|
||||
|
||||
void seek(uint pos);
|
||||
void skip(uint len) { seek(tell() + len); }
|
||||
void skip(uint len);
|
||||
uint tell() { return m_pos; }
|
||||
uint size() { unserialize(); return m_buffer.size(); }
|
||||
|
||||
|
|
Loading…
Reference in New Issue