From e5d612067ca4cdac07b2e4e4d600b2473cd44804 Mon Sep 17 00:00:00 2001 From: Open Toontown <57279094+opentoontown@users.noreply.github.com> Date: Sun, 2 Jan 2022 18:36:28 -0500 Subject: [PATCH] OTP support for receive_update_broadcast_required_owner --- direct/src/dcparser/dcClass_ext.cxx | 36 +++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/direct/src/dcparser/dcClass_ext.cxx b/direct/src/dcparser/dcClass_ext.cxx index f5285dfca3..4661722492 100644 --- a/direct/src/dcparser/dcClass_ext.cxx +++ b/direct/src/dcparser/dcClass_ext.cxx @@ -183,12 +183,32 @@ receive_update_broadcast_required_owner(PyObject *distobj, int num_fields = _this->get_num_inherited_fields(); for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) { DCField *field = _this->get_inherited_field(i); - if (field->as_molecular_field() == nullptr && - field->is_required() && (field->is_ownrecv() || field->is_broadcast())) { - packer.begin_unpack(field); - invoke_extension(field).receive_update(packer, distobj); - if (!packer.end_unpack()) { - break; + if (astron_support) + { + if (field->as_molecular_field() == nullptr && + field->is_required() && (field->is_ownrecv() || field->is_broadcast())) { + packer.begin_unpack(field); + invoke_extension(field).receive_update(packer, distobj); + if (!packer.end_unpack()) { + break; + } + } + } + else + { + if (field->as_molecular_field() == nullptr && + field->is_required()) { + packer.begin_unpack(field); + if (field->is_ownrecv()) { + invoke_extension(field).receive_update(packer, distobj); + } else { + // It's not an ownrecv field; skip over it. It's difficult to filter + // this on the server, ask Roger for the reason. + packer.unpack_skip(); + } + if (!packer.end_unpack()) { + break; + } } } } @@ -611,7 +631,9 @@ ai_format_generate(PyObject *distobj, DOID_TYPE do_id, // Parent is a bit overloaded; this parent is not about inheritance, this // one is about the visibility container parent, i.e. the zone parent: - packer.raw_pack_uint32(parent_id); + if (parent_id) { + packer.raw_pack_uint32(parent_id); + } packer.raw_pack_uint32(zone_id); packer.raw_pack_uint16(_this->_number); packer.raw_pack_uint32(do_id);