Fix BinaryTree skip, small otb changes

This commit is contained in:
Henrique Santiago 2014-02-13 00:41:53 -02:00
parent 8dc831088e
commit b7b8fdfd0c
4 changed files with 22 additions and 8 deletions

View File

@ -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

View File

@ -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);

View File

@ -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();

View File

@ -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(); }