Ya, all the research I’ve done on the system I’ve seen that disclaimer posted, its fine to dig into and I’ll adapt as changes are added. I wasn’t creating the attributeset the way you do in your example which is probably part of the problem I had. I spent a while today playing around with it and I was able to get it working, well actually, it was working the whole time just not as expected.
Here is a screenshot of a simple test I made to check values:
I was using this code to initialize the Attributes using a data asset that gets selected in the editor:
Attributes = Cast<URTS_UnitAttributeSet>(InitStats(URTS_UnitAttributeSet::StaticClass(), AttributeData));
Which brings me to the conclusion that whatever InitStats() returns is not the object that receives replication updates. I discovered that if I wrote the code below in BeginPlay() it updated the Attributes property with the object that does receive replication updates.
Attributes = Cast<URTS_UnitAttributeSet>(GetAttributeSubobject(URTS_UnitAttributeSet::StaticClass()));
I haven’t thought to do it the way you explained even though I should have since that seems to be the standard way of initializing. It is working now using the above code in both snippets of the image now. I would have replied sooner but I just got it working a couple of hours ago. Thanks for the help.