The damage variable and the Montage work because that object with those values exists on both the client and the server. They aren’t replicating. You wouldn’t want them replicating because that would be a lot of info that could be reduced to some object ID (like a UClass reference or a replicated Actor). Client and server are passing back and forth the ID of an object that they’ve agreed exists. It might actually be very slow the way its doing this if they have to send the whole object path back and forth.
You are wanting to replicate too much. I don’t know how to use an asset manager so I can’t give you advice on how to specifically deal with that, but you need to have owning client replicate input to the server, with the server then trying to determine what move that input corresponds to and if that move contributes to the combo. The server should then only replicate to clients what move was performed as well as other state information that is specific to that frame, like damage done or combo multiplier. Look at my FRepMove again.
Building a UObject that is replicated is clunky and you’ll end up replicating more than is necessary. You should never need to replicate more than a few bytes really related to this really. I can’t help you more without a more complete picture of your code or project, but I don’t know that I have time to solve these issues for you. My recommendation is to stop trying to replicate UObjects. Stick to Actor and Component property replication and RPCs. I’m working on a large game and haven’t once needed to replicate a UObject like you’re looking to do.