You have several ways to do it, and you should chose depending on what you intend your game to be in the end. Here is one way:
In your NPCs blueprint, you can have an event which is triggered whenever the player uses its scan vision, and another triggered when it stops to use it. Otherwise, you can have a reference to the player in an actor variable in every NPC and check on EventTick if the scan vision is being used currently (with a simple boolean check). Another way to do so is to have a function in your NPCs blueprint that you call thanks to a NPCs register in your Level blueprint, but that’s not easier.
Either way, if the scan vision is used, you should use the blueprint node SetHidden (or something like that, I can’t remember) on the billboard component. You can also use some other nodes to change the texture of the billboard.
I recommand the following for your visibility update:
In the Player blueprint, manage all the logic of scan vision and make it so it displays or hide the markers above NPC’s head, but don’t bother about the image/color/size of the marker for now.
In the NPCs blueprint, on EventTick (and only when scan vision is used if you want to save some performance), check the nearest Player actor and if it’s in a certain range. Then, use a Line Trace or Sphere Trace (look for tutorials, there are plenty) from the NPC to the player in order to check if there’s a wall hiding the player or something like that. If the trace doesn’t hit anything but the player, then it means the player is fully visible by the NPC.
Then, if you want to add Assassin’s Creed like behaviour, you would have to make the NPC logic more complicated, with a memory of player’s actions, and update it whenever the player is jumping, running, hitting some allies or foes…