From 2c7ae6e521ef949a5b8ccefda78798e272eb8797 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Sun, 24 Jun 2012 12:44:33 -0300 Subject: [PATCH] Now otb reader is properly working --- src/framework/core/binarytree.cpp | 7 +++++-- src/framework/core/binarytree.h | 6 ++---- src/otclient/core/thingtypemanager.cpp | 15 +++++++-------- src/otclient/core/thingtypemanager.h | 2 -- src/otclient/core/thingtypeotb.cpp | 4 +--- src/otclient/core/thingtypeotb.h | 6 +++--- 6 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/framework/core/binarytree.cpp b/src/framework/core/binarytree.cpp index e2c2eda4..7dc50abf 100644 --- a/src/framework/core/binarytree.cpp +++ b/src/framework/core/binarytree.cpp @@ -25,8 +25,6 @@ void BinaryTree::unserialize(const FileStreamPtr& fin) { - m_type = fin->getU32(); - while(true) { uint8 byte = fin->getU8(); switch(byte) { @@ -48,6 +46,11 @@ void BinaryTree::unserialize(const FileStreamPtr& fin) } } +void BinaryTree::serialize(const FileStreamPtr& fin) +{ + +} + void BinaryTree::seek(uint pos) { if(pos > m_buffer.size()) diff --git a/src/framework/core/binarytree.h b/src/framework/core/binarytree.h index a872d344..b9a52c96 100644 --- a/src/framework/core/binarytree.h +++ b/src/framework/core/binarytree.h @@ -35,9 +35,10 @@ enum { class BinaryTree : public std::enable_shared_from_this { public: - BinaryTree(const BinaryTreePtr& parent = nullptr) : m_type(0), m_pos(0), m_parent(parent) { } + BinaryTree(const BinaryTreePtr& parent = nullptr) : m_pos(0), m_parent(parent) { } void unserialize(const FileStreamPtr& fin); + void serialize(const FileStreamPtr& fin); void seek(uint pos); void skip(uint len) { seek(tell() + len); } @@ -52,12 +53,9 @@ public: BinaryTreeVec getChildren() { return m_children; } BinaryTreePtr getParent() { return m_parent.lock(); } - uint32 getType() { return m_type; } bool canRead() { return m_pos < m_buffer.size(); } private: - void setParent(const BinaryTreePtr& parent) { m_parent = parent; } - uint m_type; uint m_pos; BinaryTreeVec m_children; diff --git a/src/otclient/core/thingtypemanager.cpp b/src/otclient/core/thingtypemanager.cpp index 683d8580..1ea9ad8f 100644 --- a/src/otclient/core/thingtypemanager.cpp +++ b/src/otclient/core/thingtypemanager.cpp @@ -39,12 +39,9 @@ void ThingTypeManager::init() { m_nullDatType = ThingTypeDatPtr(new ThingTypeDat); m_nullOtbType = ThingTypeOtbPtr(new ThingTypeOtb); - m_otbVersion = 0; m_datSignature = 0; - m_otbVersion = 0; m_otbMinorVersion = 0; m_otbMajorVersion = 0; - m_datSignature = 0; m_datLoaded = false; m_xmlLoaded = false; m_otbLoaded = false; @@ -97,15 +94,17 @@ bool ThingTypeManager::loadOtb(const std::string& file) { try { FileStreamPtr fin = g_resources.openFile(file); - if (!fin) - stdext::throw_exception("unable to open file"); - m_otbVersion = fin->getU32(); - if (m_otbVersion != 0x00) - stdext::throw_exception("invalid file version"); + uint signature = fin->getU32(); + if(signature != 0) + stdext::throw_exception("invalid otb file"); BinaryTreePtr root = fin->getBinaryTree(); + signature = root->getU32(); + if(signature != 0) + stdext::throw_exception("invalid otb file"); + root->getU32(); // flags m_otbMajorVersion = root->getU32(); diff --git a/src/otclient/core/thingtypemanager.h b/src/otclient/core/thingtypemanager.h index 7e37e79d..811cdd63 100644 --- a/src/otclient/core/thingtypemanager.h +++ b/src/otclient/core/thingtypemanager.h @@ -49,7 +49,6 @@ public: const ThingTypeOtbPtr& getOtbType(uint16 id); uint32 getDatSignature() { return m_datSignature; } - uint32 getOtbVersion() { return m_otbVersion; } uint32 getOtbMajorVersion() { return m_otbMajorVersion; } uint32 getOtbMinorVersion() { return m_otbMinorVersion; } @@ -71,7 +70,6 @@ private: bool m_xmlLoaded; bool m_otbLoaded; - uint32 m_otbVersion; uint32 m_otbMinorVersion; uint32 m_otbMajorVersion; uint32 m_datSignature; diff --git a/src/otclient/core/thingtypeotb.cpp b/src/otclient/core/thingtypeotb.cpp index 1227c2e3..4dbbaf2a 100644 --- a/src/otclient/core/thingtypeotb.cpp +++ b/src/otclient/core/thingtypeotb.cpp @@ -37,11 +37,9 @@ void ThingTypeOtb::unserialize(const BinaryTreePtr& node) { m_null = false; - uint8 zero = node->getU8(); - assert(zero == 0); m_category = (OtbCategory)node->getU8(); - node->getU32(); // skip flags + node->getU32(); // flags while(node->canRead()) { uint8 attr = node->getU8(); diff --git a/src/otclient/core/thingtypeotb.h b/src/otclient/core/thingtypeotb.h index 20ad5bda..f99360bf 100644 --- a/src/otclient/core/thingtypeotb.h +++ b/src/otclient/core/thingtypeotb.h @@ -28,7 +28,8 @@ #include enum OtbCategory { - OtbGround = 0, + OtbInvalidCateogry = 0, + OtbGround, OtbContainer, OtbWeapon, OtbAmmunition, @@ -41,8 +42,7 @@ enum OtbCategory { OtbSplash, OtbFluid, OtbDoor, - OtbLastCategory, - OtbInvalidCateogry = OtbLastCategory + OtbLastCategory }; enum OtbAttrib {