/// <summary> /// Must be used ONLY before bot cycle started as no parent item is accepted. Usually used while feeding by input file. /// </summary> /// <param name="item_type"></param> /// <param name="field_value_pairs"></param> /// <returns></returns> static internal bool Add2QueueBeforeStart(InputItemQueue queue, Type item_type, Dictionary <string, string> field2value) { InputItem item = (InputItem)FormatterServices.GetUninitializedObject(item_type); Dictionary <string, FieldInfo> serialized_field_name2serialized_field_fis = item_types2serialized_field_names2serialized_field_fi[item_type]; foreach (string field in field2value.Keys) { try { FieldInfo fi = serialized_field_name2serialized_field_fis[field]; fi.SetValue(item, Convert.ChangeType(field2value[field], fi.FieldType)); } catch (Exception e) { throw new Exception("Field '" + field + "' does not exist.\n" + e.Message); } } ConstructorInfo ci; if (item_types2constructor_info.TryGetValue(item_type, out ci)) { ci.Invoke(item, new object[] {}); } typeof(Item).GetField("__Id", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(item, Session.This.GetNewItemId()); return(item.add2queue(queue)); }
internal static InputItem Restore(InputItemQueue queue, Type item_type, string item_seed, int item_id, InputItem parent_item, Dictionary <string, TagItem> field2tag_items) { InputItem item = (InputItem)Item.Restore(item_type, item_seed, item_id); item.set_parent_members(parent_item); foreach (KeyValuePair <string, TagItem> kv in field2tag_items) { item_type.GetField(kv.Key).SetValue(item, kv.Value); } item.add2queue(queue); return(item); }