Data storage for mystery/stealth game

I am trying to create a randomly generated mystery game that requires the player to solves crimes in the selected map.

I want the player to discover facts and evidence about the NPC in the level. I could just reference the NPC add Booleans to tell the player if he discovered the specific fact or not, but I know that is not the correct way and if I decide to make competitive multiplayer this will not work.

Where and how can I store this information?

Store the data on the player character(non replicated of course) as an array of booleans if you want(then its a unique array per character, even in a live multiplayer session).
Each index in the array will be a question and the result is whether they have the fact/evidence

When you save your state, say in a competitive environment, output to your master server using SQL or something similar.

sorry for the late reply.
basically I have 2 structs, one is for fact info the other is for validation and NPC reference.