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); }
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); }
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); }
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); }