mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-15 18:57:08 +00:00
Prevent attached models from disappearing during parent reload (#4128)
This commit is contained in:
parent
9978d0796f
commit
ad163ee5c3
7 changed files with 62 additions and 32 deletions
|
@ -1567,8 +1567,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
std::istringstream is(data, std::ios::binary);
|
||||
// command
|
||||
u8 cmd = readU8(is);
|
||||
if(cmd == GENERIC_CMD_SET_PROPERTIES)
|
||||
{
|
||||
if (cmd == GENERIC_CMD_SET_PROPERTIES) {
|
||||
m_prop = gob_read_set_properties(is);
|
||||
|
||||
m_selection_box = m_prop.collisionbox;
|
||||
|
@ -1587,9 +1586,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
m_prop.nametag = m_name;
|
||||
|
||||
expireVisuals();
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_UPDATE_POSITION)
|
||||
{
|
||||
} else if (cmd == GENERIC_CMD_UPDATE_POSITION) {
|
||||
// Not sent by the server if this object is an attachment.
|
||||
// We might however get here if the server notices the object being detached before the client.
|
||||
m_position = readV3F1000(is);
|
||||
|
@ -1619,12 +1616,10 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
pos_translator.init(m_position);
|
||||
}
|
||||
updateNodePos();
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_SET_TEXTURE_MOD) {
|
||||
} else if (cmd == GENERIC_CMD_SET_TEXTURE_MOD) {
|
||||
std::string mod = deSerializeString(is);
|
||||
updateTextures(mod);
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_SET_SPRITE) {
|
||||
} else if (cmd == GENERIC_CMD_SET_SPRITE) {
|
||||
v2s16 p = readV2S16(is);
|
||||
int num_frames = readU16(is);
|
||||
float framelength = readF1000(is);
|
||||
|
@ -1636,8 +1631,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
m_tx_select_horiz_by_yawpitch = select_horiz_by_yawpitch;
|
||||
|
||||
updateTexturePos();
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_SET_PHYSICS_OVERRIDE) {
|
||||
} else if (cmd == GENERIC_CMD_SET_PHYSICS_OVERRIDE) {
|
||||
float override_speed = readF1000(is);
|
||||
float override_jump = readF1000(is);
|
||||
float override_gravity = readF1000(is);
|
||||
|
@ -1655,8 +1649,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
player->physics_override_sneak = sneak;
|
||||
player->physics_override_sneak_glitch = sneak_glitch;
|
||||
}
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_SET_ANIMATION) {
|
||||
} else if (cmd == GENERIC_CMD_SET_ANIMATION) {
|
||||
// TODO: change frames send as v2s32 value
|
||||
v2f range = readV2F1000(is);
|
||||
if (!m_is_local_player) {
|
||||
|
@ -1690,8 +1683,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
updateAnimation();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_SET_BONE_POSITION) {
|
||||
} else if (cmd == GENERIC_CMD_SET_BONE_POSITION) {
|
||||
std::string bone = deSerializeString(is);
|
||||
v3f position = readV3F1000(is);
|
||||
v3f rotation = readV3F1000(is);
|
||||
|
@ -1724,8 +1716,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
}
|
||||
|
||||
updateAttachments();
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_PUNCHED) {
|
||||
} else if (cmd == GENERIC_CMD_PUNCHED) {
|
||||
/*s16 damage =*/ readS16(is);
|
||||
s16 result_hp = readS16(is);
|
||||
|
||||
|
@ -1753,8 +1744,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
updateTextures("^[brighten");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(cmd == GENERIC_CMD_UPDATE_ARMOR_GROUPS) {
|
||||
} else if (cmd == GENERIC_CMD_UPDATE_ARMOR_GROUPS) {
|
||||
m_armor_groups.clear();
|
||||
int armor_groups_size = readU16(is);
|
||||
for(int i=0; i<armor_groups_size; i++)
|
||||
|
@ -1770,6 +1760,19 @@ void GenericCAO::processMessage(const std::string &data)
|
|||
if (m_nametag != NULL) {
|
||||
m_nametag->nametag_color = m_prop.nametag_color;
|
||||
}
|
||||
} else if (cmd == GENERIC_CMD_SPAWN_INFANT) {
|
||||
u16 child_id = readU16(is);
|
||||
u8 type = readU8(is);
|
||||
|
||||
if (GenericCAO *childobj = m_env->getGenericCAO(child_id)) {
|
||||
childobj->initialize(deSerializeLongString(is));
|
||||
} else {
|
||||
m_env->addActiveObject(child_id, type, deSerializeLongString(is));
|
||||
}
|
||||
} else {
|
||||
warningstream << FUNCTION_NAME
|
||||
<< ": unknown command or outdated client \""
|
||||
<< cmd << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue