Exemplo n.º 1
0
            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);
            }
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
            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();
                }
            }
Exemplo n.º 4
0
            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)));
                    }
                }
            }
Exemplo n.º 5
0
 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);
     }
 }
Exemplo n.º 6
0
            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);
            }
Exemplo n.º 7
0
            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();
                        }
                    }
                }
            }