protected override void OnReload(GameMode currentGameMode) { TaskUnlock(); PluginData ExtendedData = GetExtendedData(); PartsInfo.Clear(); PartsResolveInfo.Clear(); FunctionEnable = false; AutoCopyToBlank = false; ReferralIndex = RefMax; MaterialEditor.Reset(); if (ExtendedData != null) { if (ExtendedData.data.TryGetValue("MoreAccessoriesExtdata", out object loadedMoreAccessoriesExtdata) && loadedMoreAccessoriesExtdata != null) { PartsInfo = MessagePackSerializer.Deserialize <Dictionary <int, ChaFileAccessory.PartsInfo> >((byte[])loadedMoreAccessoriesExtdata); } if (ExtendedData.data.TryGetValue("ResolutionInfoExtdata", out object loadedResolutionInfoExtdata) && loadedResolutionInfoExtdata != null) { PartsResolveInfo = MessagePackSerializer.Deserialize <Dictionary <int, ResolveInfo> >((byte[])loadedResolutionInfoExtdata); } foreach (string _name in SupportList) { if (ExtendedData.data.TryGetValue($"{_name}Extdata", out object loadedExtdata) && loadedExtdata != null) { if (_name == "HairAccessoryCustomizer") { Traverse.Create(this).Field(_name).Method("Load", new object[] { MessagePackSerializer.Deserialize <Dictionary <int, string> >((byte[])loadedExtdata) }).GetValue(); } else if (_name == "AccStateSync") { if (ExtendedData.version < 2) { Traverse.Create(this).Field(_name).Method("Migrate", new object[] { MessagePackSerializer.Deserialize <Dictionary <int, string> >((byte[])loadedExtdata) }).GetValue(); } else { Traverse.Create(this).Field(_name).Method("Load", new object[] { MessagePackSerializer.Deserialize <Dictionary <string, string> >((byte[])loadedExtdata) }).GetValue(); } } else if (_name == "MaterialEditor") { Traverse.Create(this).Field(_name).Method("Load", new object[] { MessagePackSerializer.Deserialize <Dictionary <string, string> >((byte[])loadedExtdata) }).GetValue(); } else if ((_name == "MaterialRouter") || (_name == "DynamicBoneEditor")) { Traverse.Create(this).Field(_name).Method("Load", new object[] { MessagePackSerializer.Deserialize <List <string> >((byte[])loadedExtdata) }).GetValue(); } } } if (ExtendedData.data.TryGetValue("FunctionEnable", out object loadedFunctionEnable) && loadedFunctionEnable != null) { FunctionEnable = (bool)loadedFunctionEnable; } if (ExtendedData.data.TryGetValue("AutoCopyToBlank", out object loadedAutoCopyToBlank) && loadedAutoCopyToBlank != null) { AutoCopyToBlank = (bool)loadedAutoCopyToBlank; } if (ExtendedData.data.TryGetValue("ReferralIndex", out object loadedReferralIndex) && loadedReferralIndex != null) { SetReferralIndex((int)loadedReferralIndex); } if (ExtendedData.data.TryGetValue("TextureContainer", out object loadedTextureContainer) && loadedTextureContainer != null) { MaterialEditor.TexContainer = MessagePackSerializer.Deserialize <Dictionary <int, byte[]> >((byte[])loadedTextureContainer); } foreach (KeyValuePair <int, ChaFileAccessory.PartsInfo> _part in PartsInfo) { if (!PartsResolveInfo.ContainsKey(_part.Key)) { continue; } if (PartsResolveInfo[_part.Key] == null) { continue; } ResolveInfo _info = PartsResolveInfo[_part.Key]; MigrateData(ref _info); if (_info != null) { if (!_info.GUID.IsNullOrEmpty()) { _info = UniversalAutoResolver.TryGetResolutionInfo(PartsResolveInfo[_part.Key].Slot, PartsResolveInfo[_part.Key].CategoryNo, PartsResolveInfo[_part.Key].GUID); } PartsResolveInfo[_part.Key] = _info.JsonClone() as ResolveInfo; _part.Value.id = _info.LocalSlot; } else { PartsResolveInfo[_part.Key] = null; } } } if (MakerAPI.InsideAndLoaded) { MakerToggleEnable.Value = FunctionEnable; MakerToggleAutoCopyToBlank.Value = AutoCopyToBlank; MakerDropdownRef.Value = ReferralIndex; } IEnumerator OnReloadCoroutine() { DebugMsg(LogLevel.Warning, $"[OnReloadCoroutine][{ChaControl.GetFullname()}] fired"); yield return(new WaitForEndOfFrame()); yield return(new WaitForEndOfFrame()); AutoCopyCheck(); } ChaControl.StartCoroutine(OnReloadCoroutine()); base.OnReload(currentGameMode); }