private static bool MaybeEnableLevel(string levelIdHash, Action <string, bool> log) { string disabledFilename = FindDisabledLevel(levelIdHash); if (disabledFilename == null) { return(false); } if (!DisableDifferentVersion(levelIdHash, log)) { return(true); // abort } string orgFilename = MapHiddenMarkerRE.Replace(disabledFilename, ""); try { File.Move(disabledFilename, orgFilename); } catch (Exception ex) { MenuManager.AddMpStatus("ENABLING " + Path.GetFileName(orgFilename) + " FAILED, " + ex.Message); return(false); // try download } AddMPLevel(orgFilename); if (FindLevelIndex(GetMPLevels(), levelIdHash) < 0) { log("ENABLING " + Path.GetFileName(orgFilename) + " FAILED, LEVEL NOT IN FILE", true); // not possible? would be bug in FindDisabledLevel } else { log("ENABLING " + Path.GetFileName(orgFilename) + " SUCCEEDED", false); } return(true); }
private static IEnumerable <string> LookupAndDownloadLevel(string levelIdHash) { var li = levelIdHash.IndexOf(".MP"); MenuManager.AddMpStatus("SEARCHING " + levelIdHash.Substring(0, li), 1f, 9); string lastData = null; foreach (var x in NetworkMatch.Get("mpget", new Dictionary <string, string> { { "level", levelIdHash } }, "https://www.overloadmaps.com/api/")) { lastData = x; yield return(null); } JObject ret = null; try { ret = JObject.Parse(lastData); } catch (Exception ex) { Debug.Log(ex); } if (ret == null || !ret.TryGetValue("url", out JToken urlVal)) { string msg = ret == null ? "OVERLOADMAPS.COM LOOKUP FAILED" : "LEVEL NOT FOUND ON OVERLOADMAPS.COM"; Debug.Log(msg); MenuManager.AddMpStatus(msg, 2f, 9); yield return(msg); yield break; } string url = urlVal.GetString(); var i = url.LastIndexOf('/'); MenuManager.AddMpStatus("DOWNLOADING " + url.Substring(i + 1), 1f, 9); string lastMsg = null; foreach (var msg in MaybeDownloadLevel(url, levelIdHash)) { if (msg != lastMsg) { MenuManager.AddMpStatus(msg, 1f, 9); lastMsg = msg; } yield return(msg); } Debug.Log("DoGetLevel last download status: " + lastMsg); }
public static void UpdateLobbyStatus() { if (ProjDataExists) { MenuManager.AddMpStatus("USING CUSTOM PROJDATA FOR THIS MATCH", 1f, 21); } else { // Clear status 21 so it doesn't incorrectly persist between lobbies var idx = Array.IndexOf(MenuManager.m_mp_status_id, 21); if (idx >= 0) { MenuManager.m_mp_status_details[idx] = String.Empty; MenuManager.m_mp_status_flash[idx] = 0f; MenuManager.m_mp_status_id[idx] = -1; } } }
public static void UpdateLobbyStatus() { if (!MPModifiers.PlayerModifiersValid(Player.Mp_modifier1, Player.Mp_modifier2)) { if (Array.IndexOf(MenuManager.m_mp_status_id, 20) == -1) { MenuManager.AddMpStatus("MODIFIER(S) DISALLOWED, CHECK CUSTOMIZE MENU", 1f, 20); } } else { var idx = Array.IndexOf(MenuManager.m_mp_status_id, 20); if (idx >= 0) { MenuManager.m_mp_status_details[idx] = String.Empty; MenuManager.m_mp_status_flash[idx] = 0f; MenuManager.m_mp_status_id[idx] = -1; } } }
private static IEnumerator DoGetLevel(string levelIdHash) { Debug.Log("DoGetLevel " + levelIdHash); string errMsg = null, lastMsg = null; if (MaybeEnableLevel(levelIdHash, (msg, isError) => { Debug.Log(msg); MenuManager.AddMpStatus(msg); if (isError) { errMsg = msg; } })) { if (errMsg != null) { DownloadFailed(errMsg); DownloadBusy = false; yield break; } } else { foreach (var msg in LookupAndDownloadLevel(levelIdHash)) { lastMsg = msg; yield return(null); } } if (Overload.NetworkManager.IsServer()) { int idx = GameManager.MultiplayerMission.FindAddOnLevelNumByIdStringHash(levelIdHash); if (idx < 0) { DownloadFailed(lastMsg); // if we don't have the level the last message was the error message } else { typeof(NetworkMatch).GetField("m_match_force_playlist_level_idx", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, idx); } } DownloadBusy = false; }
private static void OnAddMpStatus(NetworkMessage msg) { MenuManager.AddMpStatus(msg.ReadMessage <StringMessage>().value); }