private static bool HEditDataSaveHook(bool __result, HEditData __instance, ref BinaryWriter _writer, ref YS_Node.NodeControl _nodeControl, ref bool _isInitUserID)
        {
            ExtendedSave.HEditDataWriteEvent(__instance);

            ExtendedSave.Logger.Log(LogLevel.Debug, "MapInfo hook!");

            var extendedData = ExtendedSave.GetAllExtendedData(__instance);

            if (extendedData == null || extendedData.Count == 0)
            {
                return(__result);
            }

            var originalLength   = _writer.BaseStream.Length;
            var originalPosition = _writer.BaseStream.Position;

            try
            {
                var bytes = ExtendedSave.MessagePackSerialize(extendedData);

                _writer.Write(Marker);
                _writer.Write(Version);
                _writer.Write(bytes.Length);
                _writer.Write(bytes);
            }
            catch (Exception e)
            {
                ExtendedSave.Logger.Log(LogLevel.Warning, $"Failed to save extended data in card. {e.Message}");
                _writer.BaseStream.Position = originalPosition;
                _writer.BaseStream.SetLength(originalLength);
            }

            return(__result);
        }
Esempio n. 2
0
        public static void SaveFileHook(ChaFile __instance, bool __result, BinaryWriter bw, bool savePng)
        {
            if (!__result)
            {
                return;
            }

            ExtendedSave.writeEvent(__instance);

            Dictionary <string, PluginData> extendedData = ExtendedSave.GetAllExtendedData(__instance);

            if (extendedData == null)
            {
                return;
            }

            byte[] bytes = MessagePackSerializer.Serialize(extendedData);

            bw.Write(Marker);
            bw.Write(Version);
            foreach (KeyValuePair <string, PluginData> kv in extendedData)
            {
                PluginData dict = kv.Value as PluginData;
            }

            bw.Write((int)bytes.Length);
            bw.Write(bytes);
        }
Esempio n. 3
0
        public static void ChaFileSaveFileHook(ChaFile file, BlockHeader header, ref long[] array3)
        {
            Dictionary <string, PluginData> extendedData = ExtendedSave.GetAllExtendedData(file);

            if (extendedData == null)
            {
                currentlySavingData = null;
                return;
            }

            currentlySavingData = MessagePackSerializer.Serialize(extendedData);

            //get offset
            long offset = array3.Sum();
            long length = currentlySavingData.LongLength;

            //insert our custom data length at the end
            Array.Resize(ref array3, array3.Length + 1);
            array3[array3.Length - 1] = length;

            //add info about our data to the block header
            BlockHeader.Info info = new BlockHeader.Info
            {
                name    = Marker,
                version = Version.ToString(),
                pos     = offset,
                size    = length
            };

            header.lstInfo.Add(info);
        }
Esempio n. 4
0
        public static void ChaFileCoordinateSaveHook(ChaFileCoordinate file, BinaryWriter bw)
        {
            ExtendedSave.coordinateWriteEvent(file);

            BepInEx.Logger.Log(BepInEx.Logging.LogLevel.Debug, "Coordinate hook!");

            Dictionary <string, PluginData> extendedData = ExtendedSave.GetAllExtendedData(file);

            if (extendedData == null)
            {
                return;
            }

            byte[] data = MessagePackSerializer.Serialize(extendedData);

            bw.Write(Marker);
            bw.Write(Version);
            bw.Write(data.Length);
            bw.Write(data);
        }