mirror of
https://github.com/edubart/otclient.git
synced 2025-12-18 14:47:11 +01:00
Started 1050 implementation and fix ups:
* Dat now loads (new animations aren't yet functional). * Fixed the way we reference client versions. TODO: Write new animation functionality & find out protocol changes.
This commit is contained in:
@@ -132,7 +132,7 @@ uint16 BinaryTree::getU16()
|
||||
unserialize();
|
||||
if(m_pos+2 > m_buffer.size())
|
||||
stdext::throw_exception("BinaryTree: getU16 failed");
|
||||
uint16 v = stdext::readLE16(&m_buffer[m_pos]);
|
||||
uint16 v = stdext::readULE16(&m_buffer[m_pos]);
|
||||
m_pos += 2;
|
||||
return v;
|
||||
}
|
||||
@@ -142,7 +142,7 @@ uint32 BinaryTree::getU32()
|
||||
unserialize();
|
||||
if(m_pos+4 > m_buffer.size())
|
||||
stdext::throw_exception("BinaryTree: getU32 failed");
|
||||
uint32 v = stdext::readLE32(&m_buffer[m_pos]);
|
||||
uint32 v = stdext::readULE32(&m_buffer[m_pos]);
|
||||
m_pos += 4;
|
||||
return v;
|
||||
}
|
||||
@@ -152,7 +152,7 @@ uint64 BinaryTree::getU64()
|
||||
unserialize();
|
||||
if(m_pos+8 > m_buffer.size())
|
||||
stdext::throw_exception("BinaryTree: getU64 failed");
|
||||
uint64 v = stdext::readLE64(&m_buffer[m_pos]);
|
||||
uint64 v = stdext::readULE64(&m_buffer[m_pos]);
|
||||
m_pos += 8;
|
||||
return v;
|
||||
}
|
||||
@@ -193,14 +193,14 @@ void OutputBinaryTree::addU8(uint8 v)
|
||||
void OutputBinaryTree::addU16(uint16 v)
|
||||
{
|
||||
uint8 data[2];
|
||||
stdext::writeLE16(data, v);
|
||||
stdext::writeULE16(data, v);
|
||||
write(data, 2);
|
||||
}
|
||||
|
||||
void OutputBinaryTree::addU32(uint32 v)
|
||||
{
|
||||
uint8 data[4];
|
||||
stdext::writeLE32(data, v);
|
||||
stdext::writeULE32(data, v);
|
||||
write(data, 4);
|
||||
}
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@ uint16 FileStream::getU16()
|
||||
if(m_pos+2 > m_data.size())
|
||||
throwError("read failed");
|
||||
|
||||
v = stdext::readLE16(&m_data[m_pos]);
|
||||
v = stdext::readULE16(&m_data[m_pos]);
|
||||
m_pos += 2;
|
||||
}
|
||||
return v;
|
||||
@@ -222,7 +222,7 @@ uint32 FileStream::getU32()
|
||||
if(m_pos+4 > m_data.size())
|
||||
throwError("read failed");
|
||||
|
||||
v = stdext::readLE32(&m_data[m_pos]);
|
||||
v = stdext::readULE32(&m_data[m_pos]);
|
||||
m_pos += 4;
|
||||
}
|
||||
return v;
|
||||
@@ -237,7 +237,70 @@ uint64 FileStream::getU64()
|
||||
} else {
|
||||
if(m_pos+8 > m_data.size())
|
||||
throwError("read failed");
|
||||
v = stdext::readLE64(&m_data[m_pos]);
|
||||
v = stdext::readULE64(&m_data[m_pos]);
|
||||
m_pos += 8;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
int8 FileStream::get8()
|
||||
{
|
||||
int8 v = 0;
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_read(m_fileHandle, &v, 1, 1) != 1)
|
||||
throwError("read failed", true);
|
||||
} else {
|
||||
if(m_pos+1 > m_data.size())
|
||||
throwError("read failed");
|
||||
|
||||
v = m_data[m_pos];
|
||||
m_pos += 1;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
int16 FileStream::get16()
|
||||
{
|
||||
int16 v = 0;
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_readSLE16(m_fileHandle, &v) == 0)
|
||||
throwError("read failed", true);
|
||||
} else {
|
||||
if(m_pos+2 > m_data.size())
|
||||
throwError("read failed");
|
||||
|
||||
v = stdext::readSLE16(&m_data[m_pos]);
|
||||
m_pos += 2;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
int32 FileStream::get32()
|
||||
{
|
||||
int32 v = 0;
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_readSLE32(m_fileHandle, &v) == 0)
|
||||
throwError("read failed", true);
|
||||
} else {
|
||||
if(m_pos+4 > m_data.size())
|
||||
throwError("read failed");
|
||||
|
||||
v = stdext::readSLE32(&m_data[m_pos]);
|
||||
m_pos += 4;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
int64 FileStream::get64()
|
||||
{
|
||||
int64 v = 0;
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_readSLE64(m_fileHandle, (PHYSFS_sint64*)&v) == 0)
|
||||
throwError("read failed", true);
|
||||
} else {
|
||||
if(m_pos+8 > m_data.size())
|
||||
throwError("read failed");
|
||||
v = stdext::readSLE64(&m_data[m_pos]);
|
||||
m_pos += 8;
|
||||
}
|
||||
return v;
|
||||
@@ -306,7 +369,7 @@ void FileStream::addU16(uint16 v)
|
||||
throwError("write failed", true);
|
||||
} else {
|
||||
m_data.grow(m_pos + 2);
|
||||
stdext::writeLE16(&m_data[m_pos], v);
|
||||
stdext::writeULE16(&m_data[m_pos], v);
|
||||
m_pos += 2;
|
||||
}
|
||||
}
|
||||
@@ -318,7 +381,7 @@ void FileStream::addU32(uint32 v)
|
||||
throwError("write failed", true);
|
||||
} else {
|
||||
m_data.grow(m_pos + 4);
|
||||
stdext::writeLE32(&m_data[m_pos], v);
|
||||
stdext::writeULE32(&m_data[m_pos], v);
|
||||
m_pos += 4;
|
||||
}
|
||||
}
|
||||
@@ -330,7 +393,54 @@ void FileStream::addU64(uint64 v)
|
||||
throwError("write failed", true);
|
||||
} else {
|
||||
m_data.grow(m_pos + 8);
|
||||
stdext::writeLE64(&m_data[m_pos], v);
|
||||
stdext::writeULE64(&m_data[m_pos], v);
|
||||
m_pos += 8;
|
||||
}
|
||||
}
|
||||
|
||||
void FileStream::add8(int8 v)
|
||||
{
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_write(m_fileHandle, &v, 1, 1) != 1)
|
||||
throwError("write failed", true);
|
||||
} else {
|
||||
m_data.add(v);
|
||||
m_pos++;
|
||||
}
|
||||
}
|
||||
|
||||
void FileStream::add16(int16 v)
|
||||
{
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_writeSLE16(m_fileHandle, v) == 0)
|
||||
throwError("write failed", true);
|
||||
} else {
|
||||
m_data.grow(m_pos + 2);
|
||||
stdext::writeSLE16(&m_data[m_pos], v);
|
||||
m_pos += 2;
|
||||
}
|
||||
}
|
||||
|
||||
void FileStream::add32(int32 v)
|
||||
{
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_writeSLE32(m_fileHandle, v) == 0)
|
||||
throwError("write failed", true);
|
||||
} else {
|
||||
m_data.grow(m_pos + 4);
|
||||
stdext::writeSLE32(&m_data[m_pos], v);
|
||||
m_pos += 4;
|
||||
}
|
||||
}
|
||||
|
||||
void FileStream::add64(int64 v)
|
||||
{
|
||||
if(!m_caching) {
|
||||
if(PHYSFS_writeSLE64(m_fileHandle, v) == 0)
|
||||
throwError("write failed", true);
|
||||
} else {
|
||||
m_data.grow(m_pos + 8);
|
||||
stdext::writeSLE64(&m_data[m_pos], v);
|
||||
m_pos += 8;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,10 @@ public:
|
||||
uint16 getU16();
|
||||
uint32 getU32();
|
||||
uint64 getU64();
|
||||
int8 get8();
|
||||
int16 get16();
|
||||
int32 get32();
|
||||
int64 get64();
|
||||
std::string getString();
|
||||
BinaryTreePtr getBinaryTree();
|
||||
|
||||
@@ -63,6 +67,10 @@ public:
|
||||
void addU16(uint16 v);
|
||||
void addU32(uint32 v);
|
||||
void addU64(uint64 v);
|
||||
void add8(int8 v);
|
||||
void add16(int16 v);
|
||||
void add32(int32 v);
|
||||
void add64(int64 v);
|
||||
void addString(const std::string& v);
|
||||
void addPos(uint16 x, uint16 y, uint8 z) { addU16(x); addU16(y); addU8(z); }
|
||||
void addPoint(const Point& p) { addU8(p.x); addU8(p.y); }
|
||||
|
||||
Reference in New Issue
Block a user