Skip to content

Commit

Permalink
Fix crash on attaching player to entity
Browse files Browse the repository at this point in the history
Rename "refresh" to "processInitData"
  • Loading branch information
Foghrye4 authored and nerzhul committed Oct 19, 2016
1 parent 0d740c5 commit 91250c1
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 22 deletions.
43 changes: 21 additions & 22 deletions src/content_cao.cpp
Expand Up @@ -613,56 +613,55 @@ bool GenericCAO::collideWithObjects()
void GenericCAO::initialize(const std::string &data)
{
infostream<<"GenericCAO: Got init data"<<std::endl;
processInitData(data);

if (m_is_player) {
// Check if it's the current player
LocalPlayer *player = m_env->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);
m_position = readV3F1000(is);
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"
<<std::endl;
return;
}

for(int i=0; i<num_messages; i++)
{
for (int i = 0; i < num_messages; i++) {
std::string message = deSerializeLongString(is);
processMessage(message);
}

pos_translator.init(m_position);
updateNodePos();

if (m_is_player) {
// Check if it's the current player
LocalPlayer *player = m_env->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()
Expand Down Expand Up @@ -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));
}
Expand Down
2 changes: 2 additions & 0 deletions src/content_cao.h
Expand Up @@ -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);
Expand Down

0 comments on commit 91250c1

Please sign in to comment.