From 91250c1078dc5dc5f48bba2b309920edd6cdfe68 Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Sun, 9 Oct 2016 20:40:29 +0300 Subject: [PATCH] Fix crash on attaching player to entity Rename "refresh" to "processInitData" --- src/content_cao.cpp | 43 +++++++++++++++++++++---------------------- src/content_cao.h | 2 ++ 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index a8e03d6701e1..88ed43a8c8a3 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -613,13 +613,28 @@ bool GenericCAO::collideWithObjects() void GenericCAO::initialize(const std::string &data) { infostream<<"GenericCAO: Got init data"<getLocalPlayer(); + if (player && strcmp(player->getName(), m_name.c_str()) == 0) { + m_is_local_player = true; + m_is_visible = false; + player->setCAO(this); + } + m_env->addPlayerName(m_name.c_str()); + } +} + +void GenericCAO::processInitData(const std::string &data) +{ std::istringstream is(data, std::ios::binary); int num_messages = 0; // version u8 version = readU8(is); // check version - if(version == 1) // In PROTOCOL_VERSION 14 - { + if (version == 1) { // In PROTOCOL_VERSION 14 m_name = deSerializeString(is); m_is_player = readU8(is); m_id = readS16(is); @@ -627,42 +642,26 @@ void GenericCAO::initialize(const std::string &data) m_yaw = readF1000(is); m_hp = readS16(is); num_messages = readU8(is); - } - else if(version == 0) // In PROTOCOL_VERSION 13 - { + } else if (version == 0) { // In PROTOCOL_VERSION 13 m_name = deSerializeString(is); m_is_player = readU8(is); m_position = readV3F1000(is); m_yaw = readF1000(is); m_hp = readS16(is); num_messages = readU8(is); - } - else - { + } else { errorstream<<"GenericCAO: Unsupported init data version" <getLocalPlayer(); - if (player && strcmp(player->getName(), m_name.c_str()) == 0) { - m_is_local_player = true; - m_is_visible = false; - player->setCAO(this); - } - m_env->addPlayerName(m_name.c_str()); - } } GenericCAO::~GenericCAO() @@ -1761,7 +1760,7 @@ void GenericCAO::processMessage(const std::string &data) u8 type = readU8(is); if (GenericCAO *childobj = m_env->getGenericCAO(child_id)) { - childobj->initialize(deSerializeLongString(is)); + childobj->processInitData(deSerializeLongString(is)); } else { m_env->addActiveObject(child_id, type, deSerializeLongString(is)); } diff --git a/src/content_cao.h b/src/content_cao.h index cf14a1e18faf..5b34718140c7 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -125,6 +125,8 @@ class GenericCAO : public ClientActiveObject void initialize(const std::string &data); + void processInitData(const std::string &data); + ClientActiveObject *getParent(); bool getCollisionBox(aabb3f *toset);