Note: This is not always accurate. Read my post further down for more information about the Sync natives. Usually, the player that responds the fastest to the sync is the host, but this is not always the case.
You either need to have a function called GameCache() which takes nothing and returns a gamecache variable or to replace the GameCache function with a global variable.
Background info: from what I've read, SyncStoredInteger is intended to sync the values in a campaign file with the in-game values. In multiplayer, after some testing, it can be used to sync a game cache entry for everyone in the game. If done properly, it will always sync to the value of the host of the game.
As for TriggerSyncStart and TriggerSyncReady, you must confirm that the value has synced for all players before continuing. Removing these apparantly causes the game to return values from the game cache from before it is sync'd, cause players to return different results from this functions (creating a possible desync, depending upon what you do with it).
An interesting side effect of this method is that, when the host drops, you can find the new effective host. Although the GetHost function isn't extremely thoroughly tested, it worked consistently through every test I'd made. Also, note that because of the TriggerSyncReady function, this function is not be instant, but it is still very fast.
The missonKey and key strings can be anything.