private void UpdateInstance(IValueEditor editor, object valueOverride, bool committedChange) { if (lstProperties.SelectedItem is EffectProperty effectProperty) { // Store this change in the Mini. if (frmPersistentEffectPropertyEditor != null) { Control childAtPoint = frmPersistentEffectPropertyEditor.GetChildAtPoint(new Point(4, 4)); if (childAtPoint is IValueEditor valueEditor) { BasePropertyChanger propertyChanger = valueEditor.GetPropertyChanger(); string saveValue = propertyChanger.Value; if (propertyChanger != null) { string[] paths = effectProperty.Paths.Split(';'); bool needToSave = true; foreach (string path in paths) { propertyChanger.FullPropertyPath = path; propertyChanger.ValueOverride = valueOverride; propertyChanger.ModifyProperty(Instance); if (needToSave) { if (committedChange) { needToSave = false; IOldPersistentEffect persistentEffect = Mini.GetPersistentEffect(); if (editor is IScriptEditor scriptEditor) { //Talespire.Log.Debug($""); //Talespire.Log.Warning($"editor is IScriptEditor scriptEditor!!!"); //Talespire.Log.Warning($"effectProperty.Type = {effectProperty.Type?.FullName}"); //Talespire.Log.Warning($"scriptEditor.LastSerializedData = \"{scriptEditor.LastSerializedData}\""); //Talespire.Log.Debug($""); if (persistentEffect is SuperPersistentEffect superPersistentEffect) { if (effectProperty.Type != null) { superPersistentEffect.ScriptData[effectProperty.Type.FullName] = scriptEditor.LastSerializedData; Mini.SavePersistentEffect(persistentEffect); } } } else { string propertyKey; if (effectProperty.Name.StartsWith("$")) { propertyKey = effectProperty.Name; } else { propertyKey = effectProperty.Paths; } if (persistentEffect != null) { Talespire.Log.Warning($"Properties[{propertyKey}] = \"{saveValue}\"!!!"); // TODO: Use the correct EffectProperties instead of Properties (based on the prefix of the selected control). // TODO: Change this to be indexed by the property NAME, not the path (to support multiple linked properties (to a single SmartProperty). persistentEffect.Properties[propertyKey] = saveValue; // valueOverride.ToString(); Talespire.Log.Debug($"Mini.SavePersistentEffect();"); Mini.SavePersistentEffect(persistentEffect); } else { Talespire.Log.Error($"persistentEffect is not found!!"); } } } else { //Talespire.Log.Warning($"Not a committed change! Not saving my friend!"); } } } } else { Talespire.Log.Error($"propertyChanger not found!!!"); } } else { Talespire.Log.Error($"childAtPoint is not a value editor!"); } } else { Talespire.Log.Error($"frmPersistentEffectPropertyEditor is null!"); } } else { Talespire.Log.Error($"effectProperty is NULL!!!"); } }