OTP support for receive_update_broadcast_required_owner

This commit is contained in:
Open Toontown 2022-01-02 18:36:28 -05:00
parent f8b78ea12e
commit e5d612067c
1 changed files with 29 additions and 7 deletions

View File

@ -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);