protected override void OnCoordinateBeingLoaded(ChaFileCoordinate coordinate) { Logger.Log(DebugLogLevel, $"[OnCoordinateBeingLoaded][{ChaControl.chaFile.parameter?.fullname}] Fired!!"); CurOutfitTriggerInfo = null; PluginData ExtendedData = GetCoordinateExtendedData(coordinate); if (ExtendedData != null && ExtendedData.data.TryGetValue("OutfitTriggerInfo", out var loadedOutfitTriggerInfo) && loadedOutfitTriggerInfo != null) { bool LoadFlag = true; if (MakerAPI.InsideMaker) { CoordinateLoadFlags LoadFlags = MakerAPI.GetCoordinateLoadFlags(); if ((!(bool)LoadFlags?.Accessories) && (LoadFlags != null)) { LoadFlag = false; } } if (LoadFlag) { CharaTriggerInfo[CurrentCoordinateIndex] = MessagePackSerializer.Deserialize <OutfitTriggerInfo>((byte[])loadedOutfitTriggerInfo); Logger.Log(DebugLogLevel, $"[OnCoordinateBeingLoaded][{ChaControl.chaFile.parameter?.fullname}] CharaTriggerInfo[{CurrentCoordinateIndex}] loaded from extdata"); } CurOutfitTriggerInfo = CharaTriggerInfo[CurrentCoordinateIndex]; Logger.Log(DebugLogLevel, $"[OnCoordinateBeingLoaded] CurOutfitTriggerInfo.Parts count: {CurOutfitTriggerInfo.Parts.Count()}"); } InitCurOutfitTriggerInfo(); base.OnCoordinateBeingLoaded(coordinate); }
protected override void OnCoordinateBeingSaved(ChaFileCoordinate coordinate) { Logger.Log(DebugLogLevel, $"[OnCoordinateBeingSaved][{ChaControl.chaFile.parameter?.fullname}] Fired!!"); CurOutfitTriggerInfo = CharaTriggerInfo.ElementAtOrDefault(CurrentCoordinateIndex); Logger.Log(DebugLogLevel, $"[OnCoordinateBeingSaved] CurOutfitTriggerInfo.Parts count: {CurOutfitTriggerInfo.Parts.Count()}"); SyncOutfitTriggerInfo(CurrentCoordinateIndex); PluginData ExtendedData = new PluginData(); ExtendedData.data.Add("OutfitTriggerInfo", MessagePackSerializer.Serialize(CurOutfitTriggerInfo)); SetCoordinateExtendedData(coordinate, ExtendedData); }
internal void InitCurOutfitTriggerInfo() { Logger.Log(DebugLogLevel, $"[InitCurOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] Fired!!"); TriggerEnabled = false; CurOutfitTriggerInfo = CharaTriggerInfo?.ElementAtOrDefault(CurrentCoordinateIndex); if (CurOutfitTriggerInfo == null) { Logger.Log(DebugLogLevel, "[InitCurOutfitTriggerInfo] CurOutfitTriggerInfo is Null"); return; } if (MakerAPI.InsideMaker) { CheckOutfitTriggerInfoCount(CurrentCoordinateIndex); } if (CurOutfitTriggerInfo.Parts.Count() < 20) { Logger.Log(DebugLogLevel, $"[InitOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] TriggerEnabled false"); return; } TriggerEnabled = true; VirtualGroupStates.Clear(); // CurSlotTriggerInfo = new AccTriggerInfo(0); FillVirtualGroupStates(); if (MakerAPI.InsideMaker) { if (AccessoriesApi.SelectedMakerAccSlot > CurOutfitTriggerInfo.Parts.Count()) { AccSlotChangedHandler(0, true); } else { AccSlotChangedHandler(AccessoriesApi.SelectedMakerAccSlot, true); } } else if (KKAPI.Studio.StudioAPI.InsideStudio) { UpdateStudioUI(); SyncAllAccToggle(); } else { UpdateHUI(); SyncAllAccToggle(); } }
public static void Migrate(int _coordinate, OutfitTriggerInfo _outfitTriggerInfo, Dictionary <string, VirtualGroupInfo> _outfitVirtualGroupInfo, ref List <TriggerProperty> _outputTriggerProperty, ref List <TriggerGroup> _outputTriggerGroup) { if (_outfitTriggerInfo == null) { return; } if (_outfitVirtualGroupInfo == null) { _outfitVirtualGroupInfo = new Dictionary <string, VirtualGroupInfo>(); } Dictionary <string, int> _mapping = new Dictionary <string, int>(); int _refBase = 9; List <AccTriggerInfo> _parts = _outfitTriggerInfo.Parts.Values.OrderBy(x => x.Kind).ThenBy(x => x.Group).ThenBy(x => x.Slot).ToList(); foreach (AccTriggerInfo _part in _parts) { if (MathfEx.RangeEqualOn(0, _part.Kind, 8)) { for (int i = 0; i < 4; i++) { _outputTriggerProperty.Add(new TriggerProperty(_coordinate, _part.Slot, _part.Kind, i, _part.State[i], 0)); } } else if (_part.Kind >= 9) { if (!_mapping.ContainsKey(_part.Group)) { _mapping[_part.Group] = _refBase; _refBase++; } _outputTriggerProperty.Add(new TriggerProperty(_coordinate, _part.Slot, _mapping[_part.Group], 0, _part.State[0], 0)); _outputTriggerProperty.Add(new TriggerProperty(_coordinate, _part.Slot, _mapping[_part.Group], 1, _part.State[3], 0)); } } foreach (KeyValuePair <string, int> x in _mapping) { if (!_outfitVirtualGroupInfo.ContainsKey(x.Key)) { string _label = _accessoryParentNames.ContainsKey(x.Key) ? _accessoryParentNames[x.Key] : x.Key; _outputTriggerGroup.Add(new TriggerGroup(_coordinate, x.Value, _label)); } else { VirtualGroupInfo _group = _outfitVirtualGroupInfo[x.Key]; _outputTriggerGroup.Add(new TriggerGroup(_coordinate, x.Value, _group.Label, (_group.State ? 0 : 1), 0, (_group.Secondary ? 1 : -1))); } } }
public static void Migrate(Dictionary <int, OutfitTriggerInfo> _charaTriggerInfo, Dictionary <int, Dictionary <string, VirtualGroupInfo> > _charaVirtualGroupInfo, ref List <TriggerProperty> _outputTriggerProperty, ref List <TriggerGroup> _outputTriggerGroup) { for (int _coordinate = 0; _coordinate < 7; _coordinate++) { OutfitTriggerInfo _outfitTriggerInfo = _charaTriggerInfo.ContainsKey(_coordinate) ? _charaTriggerInfo[_coordinate] : new OutfitTriggerInfo(_coordinate); Dictionary <string, VirtualGroupInfo> _outfitVirtualGroupInfo = null; if (!_charaVirtualGroupInfo.ContainsKey(_coordinate) || _charaVirtualGroupInfo[_coordinate]?.Count == 0) { _outfitVirtualGroupInfo = new Dictionary <string, VirtualGroupInfo>(); } else { _outfitVirtualGroupInfo = _charaVirtualGroupInfo[_coordinate]; } Migrate(_coordinate, _outfitTriggerInfo, _outfitVirtualGroupInfo, ref _outputTriggerProperty, ref _outputTriggerGroup); } }
internal static OutfitTriggerInfo UpgradeOutfitTriggerInfoV1(OutfitTriggerInfoV1 _oldOutfitTriggerInfo) { OutfitTriggerInfo _outfitTriggerInfo = new OutfitTriggerInfo(_oldOutfitTriggerInfo.Index); if (_oldOutfitTriggerInfo.Parts.Count() > 0) { for (int j = 0; j < _oldOutfitTriggerInfo.Parts.Count(); j++) { AccTriggerInfo Itrigger = _oldOutfitTriggerInfo.Parts[j]; if (Itrigger.Kind > -1) { _outfitTriggerInfo.Parts[j] = new AccTriggerInfo(j); CopySlotTriggerInfo(Itrigger, _outfitTriggerInfo.Parts[j]); } } } return(_outfitTriggerInfo); }
internal static void ConvertOutfitPluginData(int _coordinate, PluginData _pluginData, ref List <TriggerProperty> _outputTriggerProperty, ref List <TriggerGroup> _outputTriggerGroup) { OutfitTriggerInfo _outfitTriggerInfo = null; Dictionary <string, VirtualGroupInfo> _outfitVirtualGroupInfo = new Dictionary <string, VirtualGroupInfo>(); _pluginData.data.TryGetValue("OutfitTriggerInfo", out object _loadedOutfitTriggerInfo); if (_loadedOutfitTriggerInfo == null) { return; } if (_pluginData.version < 2) { OutfitTriggerInfoV1 _oldCharaTriggerInfo = MessagePackSerializer.Deserialize <OutfitTriggerInfoV1>((byte[])_loadedOutfitTriggerInfo); _outfitTriggerInfo = UpgradeOutfitTriggerInfoV1(_oldCharaTriggerInfo); } else { _outfitTriggerInfo = MessagePackSerializer.Deserialize <OutfitTriggerInfo>((byte[])_loadedOutfitTriggerInfo); } if (_outfitTriggerInfo == null) { return; } if (_pluginData.version < 5) { if (_pluginData.data.TryGetValue("OutfitVirtualGroupNames", out object _loadedOutfitVirtualGroupNames) && _loadedOutfitVirtualGroupNames != null) { Dictionary <string, string> _outfitVirtualGroupNames = MessagePackSerializer.Deserialize <Dictionary <string, string> >((byte[])_loadedOutfitVirtualGroupNames); _outfitVirtualGroupInfo = UpgradeVirtualGroupNamesV2(_outfitVirtualGroupNames); } } else { if (_pluginData.data.TryGetValue("OutfitVirtualGroupInfo", out object _loadedOutfitVirtualGroupInfo) && _loadedOutfitVirtualGroupInfo != null) { _outfitVirtualGroupInfo = MessagePackSerializer.Deserialize <Dictionary <string, VirtualGroupInfo> >((byte[])_loadedOutfitVirtualGroupInfo); } } Migrate(_coordinate, _outfitTriggerInfo, _outfitVirtualGroupInfo, ref _outputTriggerProperty, ref _outputTriggerGroup); }
internal void AccessoryTransferredHandler(int SourceSlotIndex, int DestinationSlotIndex, int CoordinateIndex) { if (!MakerAPI.InsideAndLoaded) { return; } Logger.Log(DebugLogLevel, $"[AccessoryTransferredHandler][{ChaControl.chaFile.parameter?.fullname}] Fired!!"); CheckOutfitTriggerInfoCount(CoordinateIndex); if (!TriggerEnabled) { Logger.Log(DebugLogLevel, $"[AccessoryTransferredHandler][{ChaControl.chaFile.parameter?.fullname}] TriggerEnabled false"); return; } OutfitTriggerInfo Todo = CharaTriggerInfo.ElementAtOrDefault(CoordinateIndex); CopySlotTriggerInfo(Todo.Parts[SourceSlotIndex], Todo.Parts[DestinationSlotIndex]); Todo.Parts[DestinationSlotIndex].Slot = DestinationSlotIndex; }
internal void SyncOutfitTriggerInfo(int CoordinateIndex) { if (!TriggerEnabled) { Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] TriggerEnabled false"); return; } List <ChaFileAccessory.PartsInfo> PartsInfo = MoreAccessories_Support.GetCoordinatePartsInfo(ChaControl, CoordinateIndex); OutfitTriggerInfo OutfitTriggerInfo = CharaTriggerInfo.ElementAtOrDefault(CoordinateIndex); Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}]Process OutfitTriggerInfo for Coordinate {CoordinateIndex}"); List <AccTriggerInfo> TriggerParts = OutfitTriggerInfo.Parts; int PartsInfoCount = PartsInfo.Count(); int TriggerPartsCount = TriggerParts.Count(); Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}][{CoordinateIndex}] Count {TriggerPartsCount} : {PartsInfoCount}"); if (TriggerPartsCount > PartsInfoCount) { CharaTriggerInfo[CoordinateIndex].Parts = CharaTriggerInfo[CoordinateIndex].Parts.Take(PartsInfoCount).ToList(); Logger.LogWarning($"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] AccTriggerInfo for Coordinate {CoordinateIndex} Slot {TriggerPartsCount} -> {PartsInfoCount}"); } else if (TriggerPartsCount < PartsInfoCount) { for (int j = TriggerPartsCount; j < PartsInfoCount; j++) { CharaTriggerInfo[CoordinateIndex].Parts.Add(new AccTriggerInfo(j)); } Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] AccTriggerInfo for Coordinate {CoordinateIndex} Slot {TriggerPartsCount} -> {PartsInfoCount - 1}"); } for (int i = 0; i < PartsInfoCount; i++) { AccTriggerInfo TriggerPart = TriggerParts.ElementAtOrDefault(i); if ((TriggerPart.Kind != -1) && (PartsInfo[i].type == 120)) { CharaTriggerInfo[CoordinateIndex].Parts[i] = new AccTriggerInfo(i); Logger.LogMessage($"AccTriggerInfo for Coordinate {CoordinateIndex} Slot {i + 1:00} has been reset"); } else { if (TriggerPart.Kind == -1) { CharaTriggerInfo[CoordinateIndex].Parts[i] = new AccTriggerInfo(i); } else if (MathfEx.RangeEqualOn(0, TriggerPart.Kind, 7)) { CharaTriggerInfo[CoordinateIndex].Parts[i].Group = ""; } else if (TriggerPart.Kind == 9) { CharaTriggerInfo[CoordinateIndex].Parts[i].Group = PartsInfo[i].parentKey; } else if (TriggerPart.Kind > 9) { CharaTriggerInfo[CoordinateIndex].Parts[i].Group = "custom_" + (TriggerPart.Kind - 9).ToString(); } } } }