/// <summary> /// Check map errors /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void debugButton_Click(object sender, EventArgs e) { const string OUTPUT_ERROR_FILENAME = "Debug_errors.txt"; // This function iterates over all maps in the game and verifies that we recognize all their props // It is meant to use by the developer(s) to speed up the process of adjusting this program for different MapleStory versions string wzPath = pathBox.Text; short version = -1; WzMapleVersion fileVersion = WzTool.DetectMapleVersion(Path.Combine(wzPath, "Item.wz"), out version); InitializeWzFiles(wzPath, fileVersion); MultiBoard mb = new MultiBoard(); Board mapBoard = new Board( new Microsoft.Xna.Framework.Point(), new Microsoft.Xna.Framework.Point(), mb, null, MapleLib.WzLib.WzStructure.Data.ItemTypes.None, MapleLib.WzLib.WzStructure.Data.ItemTypes.None); foreach (string mapid in Program.InfoManager.Maps.Keys) { string mapcat = "Map" + mapid.Substring(0, 1); WzImage mapImage = Program.WzManager.FindMapImage(mapid, mapcat); if (mapImage == null) { continue; } mapImage.ParseImage(); if (mapImage["info"]["link"] != null) { mapImage.UnparseImage(); continue; } MapLoader.VerifyMapPropsKnown(mapImage, true); MapInfo info = new MapInfo(mapImage, null, null, null); try { mapBoard.CreateMapLayers(); MapLoader.LoadLayers(mapImage, mapBoard); MapLoader.LoadLife(mapImage, mapBoard); MapLoader.LoadFootholds(mapImage, mapBoard); MapLoader.GenerateDefaultZms(mapBoard); MapLoader.LoadRopes(mapImage, mapBoard); MapLoader.LoadChairs(mapImage, mapBoard); MapLoader.LoadPortals(mapImage, mapBoard); MapLoader.LoadReactors(mapImage, mapBoard); MapLoader.LoadToolTips(mapImage, mapBoard); MapLoader.LoadBackgrounds(mapImage, mapBoard); MapLoader.LoadMisc(mapImage, mapBoard); //MapLoader.LoadBackgrounds(mapImage, board); //MapLoader.LoadMisc(mapImage, board); // Check background to ensure that its correct List <BackgroundInstance> allBackgrounds = new List <BackgroundInstance>(); allBackgrounds.AddRange(mapBoard.BoardItems.BackBackgrounds); allBackgrounds.AddRange(mapBoard.BoardItems.FrontBackgrounds); foreach (BackgroundInstance bg in allBackgrounds) { if (bg.type != MapleLib.WzLib.WzStructure.Data.BackgroundType.Regular) { if (bg.cx < 0 || bg.cy < 0) { string error = string.Format("Negative CX/ CY moving background object. CX='{0}', CY={1}, Type={2}, {3}{4}", bg.cx, bg.cy, bg.type.ToString(), Environment.NewLine, mapImage.ToString() /*overrides, see WzImage.ToString*/); ErrorLogger.Log(ErrorLevel.IncorrectStructure, error); } } } allBackgrounds.Clear(); } catch (Exception exp) { string error = string.Format("Exception occured loading {0}{1}{2}{3}{4}", mapcat, Environment.NewLine, mapImage.ToString() /*overrides, see WzImage.ToString*/, Environment.NewLine, exp.ToString()); ErrorLogger.Log(ErrorLevel.Crash, error); } finally { mapBoard.Dispose(); mapBoard.BoardItems.BackBackgrounds.Clear(); mapBoard.BoardItems.FrontBackgrounds.Clear(); mapImage.UnparseImage(); // To preserve memory, since this is a very memory intensive test } if (ErrorLogger.NumberOfErrorsPresent() > 200) { ErrorLogger.SaveToFile(OUTPUT_ERROR_FILENAME); } } ErrorLogger.SaveToFile(OUTPUT_ERROR_FILENAME); MessageBox.Show(string.Format("Check for map errors completed. See '{0}' for more information.", OUTPUT_ERROR_FILENAME)); }
/// <summary> /// Get background by name /// </summary> /// <param name="graphicsDevice">The graphics device that the backgroundInfo is to be rendered on (loading spine)</param> /// <param name="bS"></param> /// <param name="type">Select type</param> /// <param name="no"></param> /// <returns></returns> public static BackgroundInfo Get(GraphicsDevice graphicsDevice, string bS, BackgroundInfoType type, string no) { if (!Program.InfoManager.BackgroundSets.ContainsKey(bS)) { return(null); } WzImage bsImg = Program.InfoManager.BackgroundSets[bS]; WzImageProperty bgInfoProp = bsImg[type == BackgroundInfoType.Animation ? "ani" : type == BackgroundInfoType.Spine ? "spine" : "back"]?[no]; if (bgInfoProp == null) { string logError = string.Format("Background image {0}/{1} is null, {2}", bS, no, bsImg.ToString()); MapleLib.Helpers.ErrorLogger.Log(ErrorLevel.IncorrectStructure, logError); return(null); } if (type == BackgroundInfoType.Spine) { if (bgInfoProp.HCTagSpine == null) { bgInfoProp.HCTagSpine = Load(graphicsDevice, bgInfoProp, bS, type, no); } return((BackgroundInfo)bgInfoProp.HCTagSpine); } else { if (bgInfoProp.HCTag == null) { bgInfoProp.HCTag = Load(graphicsDevice, bgInfoProp, bS, type, no); } return((BackgroundInfo)bgInfoProp.HCTag); } }