diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 8b2763fec8..28d07672a0 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -781,23 +781,18 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY(PROP_SCRIPT, QString, setScript); READ_ENTITY_PROPERTY(PROP_SCRIPT_TIMESTAMP, quint64, setScriptTimestamp); - bool previousOverwriteLocalDataValue = overwriteLocalData; + { + // We use this scope to work around an issue stopping server script changes + // from being received by an entity script server running a script that continously updates an entity. - if (!overwriteLocalData) { - // We've decided not to read the data in this update because we have a newer local state of the entity. - // In order to work around a bug stopping server script changes from being received by an entity script server - // running a script that continously updates an entity, we force the overwriting of the server scripts - // if we believe this update might have a newer version than the one we have locally. + // Basically, we'll allow recent changes to the server scripts even if there are local changes to other properties + // that have been made more recently. - if (_lastEditedFromRemote > _serverScriptsChangedTimestamp) { - overwriteLocalData = true; - } + bool overwriteLocalData = !ignoreServerPacket || (lastEditedFromBufferAdjusted > _serverScriptsChangedTimestamp); + + READ_ENTITY_PROPERTY(PROP_SERVER_SCRIPTS, QString, setServerScripts); } - READ_ENTITY_PROPERTY(PROP_SERVER_SCRIPTS, QString, setServerScripts); - - overwriteLocalData = previousOverwriteLocalDataValue; - READ_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, glm::vec3, updateRegistrationPoint); READ_ENTITY_PROPERTY(PROP_ANGULAR_DAMPING, float, updateAngularDamping); diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 718a399a39..b0389cf99f 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -518,7 +518,8 @@ protected: quint64 _scriptTimestamp{ ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP }; /// the script loaded property used for forced reload QString _serverScripts; - quint64 _serverScriptsChangedTimestamp; /// keep track of time when _serverScripts property was last changed + /// keep track of time when _serverScripts property was last changed + quint64 _serverScriptsChangedTimestamp { ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP }; /// the value of _scriptTimestamp when the last preload signal was sent // NOTE: on construction we want this to be different from _scriptTimestamp so we intentionally bump it