private static void KKChaFileLoadFileHook(KoikatsuCharaFile.ChaFile file, BlockHeader header, BinaryReader reader) { var info = header.SearchInfo(Marker); if (info != null && info.version == Version.ToString()) { var originalPosition = reader.BaseStream.Position; var basePosition = originalPosition - header.lstInfo.Sum(x => x.size); reader.BaseStream.Position = basePosition + info.pos; var data = reader.ReadBytes((int)info.size); reader.BaseStream.Position = originalPosition; try { var dictionary = MessagePackDeserialize <Dictionary <string, PluginData> >(data); _internalCharaImportDictionary.Set(file, dictionary); } catch (Exception e) { Logger.Log(LogLevel.Warning, $"Invalid or corrupted extended data in card \"{file.charaFileName}\" - {e.Message}"); reader.BaseStream.Position = originalPosition; } } }
internal static void ConvertChaFilePostHook(ChaFileControl cfc, KoikatsuCharaFile.ChaFile kkfile) { // Move data from import dictionary to normal dictionary before the imported cards are saved so the imported data is written var result = _internalCharaImportDictionary.Get(kkfile); if (result != null) { CardImportEvent(result); internalCharaDictionary.Set(cfc, result); } }
public override void CharacterConvert_Load(string path, POINT pos, byte sex) { KoikatsuCharaFile.ChaFile kkfile = new KoikatsuCharaFile.ChaFile(); kkfile.LoadFile(path); ChaFileControl container = new ChaFileControl(); ConvertChaFile.ConvertCharaFile(container, kkfile); var filepath = GetTempPath(); container.SaveCharaFile(filepath, sex, false); Character_Load(filepath, pos, sex); File.Delete(filepath); }
internal static void KKChaFileLoadFilePostHook(KoikatsuCharaFile.ChaFile __instance, bool __result, BinaryReader br) { if (!__result) { return; } //Compatibility for ver 1 and 2 ext save data if (br.BaseStream.Position != br.BaseStream.Length) { long originalPosition = br.BaseStream.Position; try { string marker = br.ReadString(); int version = br.ReadInt32(); if (marker == "KKEx" && version == 2) { int length = br.ReadInt32(); if (length > 0) { byte[] bytes = br.ReadBytes(length); var dictionary = MessagePackDeserialize <Dictionary <string, PluginData> >(bytes); _internalCharaImportDictionary.Set(__instance, dictionary); } } else { br.BaseStream.Position = originalPosition; } } catch (EndOfStreamException) { /* Incomplete/non-existant data */ br.BaseStream.Position = originalPosition; } catch (SystemException) { /* Invalid/unexpected deserialized data */ br.BaseStream.Position = originalPosition; } } }