Networking: issues with replication

I have some pickups in the world: health, armor, bullets… ecc…

Now, when I pickup an item (for example, the health), I use a Widget Blueprint to display the name of the item picked.
If I take the health, the HUD shows “Health picked!”, and so on.

It works, but only in single player mode.

On multiplayer it has a bug: when I take an item on the client, the HUD that shows the name of the item appears on both the client and the server.
I want that to happen ONLY on the client/player who picked up the item.

I would guess you have the way to find out which exact player pick up item, lets say is pawn controller.
So event which updates the Widget should be called from an object which is OWNED by this controller and Event has Replication set as “run on OWNING client”.
OWNER is a controller which set up on the object creation. Player controller, even while it have replicated copies on server, is a controller OWNED by the Game Client which it actually represent. Possessed Pawns have their OWNER set up by the Controller which possessed them.
So if you want something to happen only on Exact target Game Client, you should call the event “run on OWNING client” in object which being OWNED by the Controller of Exact Game Client.
You might notice how i highlight OWNING concept, because thats one of only few things which you really need to know about blueprint networking and this one wasn’t really highlighted in the video series.

update:
“Owner is a controller which set up on the object creation” is simple input http://puu.sh/l23A9.png
What: Update HUD widget.
When: doesn’t matter.
Where: Custom Event “run on Owning client” in the player controller which HUD you want be updated or any other object which was created or set with an Owner of this exact player.

To display the item that a player takes, I use a Widget called ItemPicked. The latter has a function called ChangeText that is called by a FirstPersonCharacter

This is the ChangeText function:

This is when the FirstPersonCharacter calls the ChangeText function

So, how to call the ChangeText function ONLY from the OWNING client?

i’ve made an Update ^^

I need to run the “ChangeText” function only on the client who takes the Item.

For this purpose, I created (inside the ItemPicked HUD) a new variable called OwningClient which is a PlayerController reference

Now, having the ChangeText function screen as shown above, how to say: “Hey, change the text only on the client that is pickin’ up the item”

https://drive.google.com/file/d/0B9-wGP04rKFmWTJjSXJCSUlFTWM/view?usp=sharing

when pawn step on the Q mark, widget get created for each player which around the cone.

Thanks a lot, that example helped me. As it seems, i need facts rather than words xD

Anyway, another problem.

When the server shoots the client, the client’s health decreases.
When the client shoots the server, server’s health doens’t decrease.

Why doesn’t the server updates his life HUD?

This is the LIFE HUD:

This is the Projectile part, when the character gets any damage from a bullet

And here is the FirstPersonCharacter function ApplyDamage (that I use in the previous screenshot)

Get damage event should be on server. 99334d22b089fa65f724759e6ccdd6393c3f63ae.jpeg
also there are “damage” nodes in engine, which can be used as a bridge between any objects.

How do i achieve this?

oh dear
did you even watch networking series?
watch all - https://www.youtube.com/watch?v=TbaOyvWfJE0
read all - Networking and Multiplayer in Unreal Engine | Unreal Engine 5.3 Documentation

project which i made for “guy from neighbor topic” https://drive.google.com/file/d/0B9-wGP04rKFmSU1yR0c5U21NVk0/view?usp=sharing