public IEditableDictionary<IEditableScripts> CreateNewEditableScriptDictionary(string parent, string attribute, string key, IEditableScripts script, bool useTransaction) { if (useTransaction) { WorldModel.UndoLogger.StartTransaction(string.Format("Set '{0}' {1} to '{2}'", parent, attribute, script.DisplayString())); } Element element = (parent == null) ? null : m_worldModel.Elements.Get(parent); QuestDictionary<IScript> newDictionary = new QuestDictionary<IScript>(); if (key != null) { newDictionary.Add(key, (IScript)script.GetUnderlyingValue()); } if (element != null) { element.Fields.Set(attribute, newDictionary); // setting an element field will clone the value, so we want to return the new dictionary newDictionary = element.Fields.GetAsType<QuestDictionary<IScript>>(attribute); } IEditableDictionary<IEditableScripts> newValue = (IEditableDictionary<IEditableScripts>)WrapValue(newDictionary); if (useTransaction) { WorldModel.UndoLogger.EndTransaction(); } return newValue; }