Also, I think you misunderstood how to use the :GetPropertyChangedSignal(), you were supposed to add a string as a parameter and that string will be the one where it will see if it changes:
After many hours of trial and error, I have come up to the decision where I am able to make the player save the item when the player has bought it and when the player joins back again then the item will be obtained, thanks for that method you mentioned @Theyoloman1920, although I have made a similar method to yours… I have made it more effective due to datastore2.
Yeah I had to save a large dictionary using DataStore2 and actually add boolean values, theres a lot of logical stuff that I have added and it worked. It just confused me at first.