/// <summary>
        /// We received an achievement message so update the scenario file accordingly
        /// </summary>
        public static void WriteAchievementDataToFile(ShareProgressAchievementsMsgData achievementMsg)
        {
            Task.Run(() =>
            {
                lock (Semaphore.GetOrAdd("ProgressTracking", new object()))
                {
                    if (!ScenarioStoreSystem.CurrentScenarios.TryGetValue("ProgressTracking", out var scenario))
                    {
                        return;
                    }

                    var progressNodeHeader = scenario.GetNode("Progress").Value;
                    if (progressNodeHeader != null)
                    {
                        var specificNode = progressNodeHeader.GetNode(achievementMsg.Id);
                        var receivedNode = new ConfigNode(Encoding.UTF8.GetString(achievementMsg.Data, 0, achievementMsg.NumBytes))
                        {
                            Name = achievementMsg.Id
                        };
                        if (specificNode != null)
                        {
                            progressNodeHeader.ReplaceNode(specificNode.Value, receivedNode);
                        }
                        else
                        {
                            progressNodeHeader.AddNode(receivedNode);
                        }
                    }
                }
            });
        }
        public static void AchievementsReceived(ClientStructure client, ShareProgressAchievementsMsgData data)
        {
            LunaLog.Debug($"Achievements data received: {data.Id}");

            //send the achievements update to all other clients
            MessageQueuer.RelayMessage <ShareProgressSrvMsg>(client, data);
            ScenarioDataUpdater.WriteAchievementDataToFile(data);
        }
        /// <summary>
        /// We received a achievement message so update the scenario file accordingly
        /// </summary>
        public static void WriteAchievementDataToFile(ShareProgressAchievementsMsgData techMsg)
        {
            Task.Run(() =>
            {
                lock (Semaphore.GetOrAdd("ProgressTracking", new object()))
                {
                    if (!ScenarioStoreSystem.CurrentScenariosInXmlFormat.TryGetValue("ProgressTracking", out var xmlData))
                    {
                        return;
                    }

                    var updatedText = UpdateScenarioWithAchievementData(xmlData, techMsg.Achievements);
                    ScenarioStoreSystem.CurrentScenariosInXmlFormat.TryUpdate("ProgressTracking", updatedText, xmlData);
                }
            });
        }