RPCs, ownership and actor visibility

Hello.

I wanted to understand what should be the correct approach with the RPCs in a specific case.

Let’s say I’m developing a checkpoint race between clients. Each client can see only its checkpoints already passed and its next one (so if client A is at checkpoint 3 and client B is at checkpoint 5, client A can see only checkpoints 1, 2 and 3, client B can see only checkpoints 1, 2, 3, 4 and 5)

The server should obviously be in charge to activate the next checkpoint for each client, for security purpose.

What would be the correct approach?

Case 1) There is only 1 set of checkpoints, whose owner is the server, that are replicated to each client.
The checkpoints have a RPC method, “Activate”, with inputs a boolean and a pawn reference, multicast and reliable (since it’s gameplay-specific, right?). When “Activate” is called, a first check is made to verify that the pawn is the local player.

All the checkpoints starts spawned, but only the first one is not hidden.
When a client passes a checkpoint, the server activates the next checkpoint indicating the target pawn, every client checks the condition and in the only one that passes successfully I can make appear the next checkpoint.

In this case, how can I un-hide a checkpoint only for a client? Since they are server-owned, if I call the method from the server it happens in every client, while every method called in the client gets dropped (right? Or since the “Activate” was server-called, every node after the branch gets correctly executed even if called by the client, and in this client only?)

Case 2): each client has its own set of checkpoints, owned by the client. The server has a reference to every set of checkpoints of each client. Therefore, there is no need to spawn all the checkpoints at once, but I can spawn them one at time, everytime a client passes its current checkpoint.

First question: how should I spawn the checkpoints? Should I call a SpawnActor in the server, and set the owner to the client? Or should I call a multicast reliable function similar to the previous “Activate”, in which after the pawn check I spawn in the client a Checkpoint, passing then the result to the server so that it can have the reference?

Second question: can the server bind to events in these client-owned checkpoints, so that when an event is called in the client, the server gets notified? If not, how could the client tell the server that “I, client, passed checkpoint N” so that the server can spawn the following checkpoint actor in the client?

Thanks in advance

Did you ever found a solution for this ?

With the case 1.
The checkpoints are owned by the server, and using the player controller as a mediator I can tell each client to activate its checkpoint.

Thanks very much!