public void SendFlag(string flagUrl) { //If it's a default flag skip the sending if (DefaultFlags.DefaultFlagList.Contains(flagUrl)) { return; } //If the flag is owned by someone else don't sync it if (ServerFlags.TryGetValue(flagUrl, out var existingFlag) && existingFlag.Owner != SettingsSystem.CurrentSettings.PlayerName) { return; } var textureInfo = GameDatabase.Instance.GetTextureInfo(flagUrl); if (textureInfo != null) { var filePath = CommonUtil.CombinePaths(MainSystem.KspPath, "GameData", $"{flagUrl}.png"); if (!File.Exists(filePath)) { LunaLog.LogError($"Cannot upload flag {Path.GetFileName(flagUrl)} file not found"); return; } var flagData = File.ReadAllBytes(filePath); if (flagData.Length > 1000000) { LunaLog.LogError($"Cannot upload flag {Path.GetFileName(flagUrl)} size is greater than 1Mb!"); return; } //Don't send the flag when the SHA sum already matches as that would mean that the server already has it if (existingFlag != null && existingFlag.ShaSum == Common.CalculateSha256Hash(flagData)) { return; } LunaLog.Log($"[LMP]: Uploading {Path.GetFileName(flagUrl)} flag"); MessageSender.SendMessage(MessageSender.GetFlagMessageData(flagUrl, flagData)); } }