Hmmm...is there somehow a nested limit for update ...
# master
n
Hmmm...is there somehow a nested limit for update fields? Very early mock code
Copy code
cpp
void GameObject::SetDye(int32 dyeId1, int32 dyeId2, int32 dyeId3)
{
    if (!m_housingDecorData.has_value())
        m_entityFragments.Add(WowCS::EntityFragment::FHousingDecor_C, IsInWorld());

    auto gameObjectGuid = GetGUID();
    auto decorGuid = m_housingDecorData ? m_housingDecorData->DecorGUID : ObjectGuid::Empty;
    if (decorGuid == ObjectGuid::Empty)
        decorGuid = ObjectGuid::Create<HighGuid::Housing>(HousingSubType::Decor, gameObjectGuid.GetRealmId(), 378, 0, gameObjectGuid.GetCounter());

    SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_housingDecorData, 0).ModifyValue(&UF::HousingDecorData::DecorGUID), decorGuid);
    SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_housingDecorData, 0).ModifyValue(&UF::HousingDecorData::AttachParentGUID), ObjectGuid::Empty);
    SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_housingDecorData, 0).ModifyValue(&UF::HousingDecorData::Flags), 0);
    SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_housingDecorData, 0).ModifyValue(&UF::HousingDecorData::Field_68), ObjectGuid::Empty);

    SetUpdateFieldValue(
        m_values
        .ModifyValue(&GameObject::m_housingDecorData, 0)
        .ModifyValue(&UF::HousingDecorData::PersistedData, 0)
        .ModifyValue(&UF::DecorStoragePersistedData::HouseGUID),
    ObjectGuid::Empty);

    SetUpdateFieldValue(
        m_values
        .ModifyValue(&GameObject::m_housingDecorData, 0)
        .ModifyValue(&UF::HousingDecorData::PersistedData, 0)
        .ModifyValue(&UF::DecorStoragePersistedData::Field_20),
    0);

    SetUpdateFieldValue(
        m_values
        .ModifyValue(&GameObject::m_housingDecorData, 0)
        .ModifyValue(&UF::HousingDecorData::PersistedData, 0)
        .ModifyValue(&UF::DecorStoragePersistedData::Dyes, 0)
        .ModifyValue(&UF::DecorStoragePersistedDataDyes::DyeColorID, 0),
    dyeId1);

    SetUpdateFieldValue(
        m_values
        .ModifyValue(&GameObject::m_housingDecorData, 0)
        .ModifyValue(&UF::HousingDecorData::PersistedData, 0)
        .ModifyValue(&UF::DecorStoragePersistedData::Dyes, 0)
        .ModifyValue(&UF::DecorStoragePersistedDataDyes::DyeColorID, 1),
    dyeId1);

    SetUpdateFieldValue(
        m_values
        .ModifyValue(&GameObject::m_housingDecorData, 0)
        .ModifyValue(&UF::HousingDecorData::PersistedData, 0)
        .ModifyValue(&UF::DecorStoragePersistedData::Dyes, 0)
        .ModifyValue(&UF::DecorStoragePersistedDataDyes::DyeColorID, 2),
    dyeId1);
}
Currently the ChangesMask get correcly set for DecorGUID, AttachParentGUID and Field_68 (Everything on the Toplevel of HousingDecorData) Anything else nested inside PersistedData has a ChangesMask of 0 https://cdn.discordapp.com/attachments/376457124726702080/1452112817514877049/image.png?ex=6948a0f2&is=69474f72&hm=be4f115206190eec19d797cfb2a4e765fc5a0c957e0e6c17cc036700e1e58b9b&