// Convert item public ExtendedItemData(ItemDrop.ItemData from) { m_stack = from.m_stack; m_durability = from.m_durability; m_quality = from.m_quality; m_variant = from.m_variant; m_shared = from.m_shared; m_crafterID = from.m_crafterID; m_crafterName = from.m_crafterName; m_gridPos = from.m_gridPos; m_equiped = from.m_equiped; m_dropPrefab = from.m_dropPrefab; m_lastAttackTime = from.m_lastAttackTime; m_lastProjectile = from.m_lastProjectile; if (from is ExtendedItemData fromExtendedItemData) { ExtendedItemDataFramework.LogWarning($"Copying ExtendedItemData ({from.m_shared.m_name})"); Components.AddRange(fromExtendedItemData.Components); } else { ExtendedItemDataFramework.LogWarning($"Converting old ItemData to new ExtendedItemData ({from.m_shared.m_name})"); var crafterNameData = new CrafterNameData(this) { CrafterName = from.m_crafterName }; Components.Add(crafterNameData); NewExtendedItemData?.Invoke(this); } Save(); }
private void OnDestroy() { ExtendedItemData.NewExtendedItemData -= UniqueItemData.OnNewExtendedItemData; ExtendedItemData.LoadExtendedItemData -= UniqueItemData.OnLoadExtendedItemData; _harmony?.UnpatchAll(PluginId); _instance = null; }
public static bool Prefix(ItemDrop.ItemData __instance, ref ItemDrop.ItemData __result) { if (__instance.IsExtended()) { ExtendedItemDataFramework.Log($"Cloning extended item {__instance.m_shared.m_name}"); __result = __instance.Extended().ExtendedClone(); return(false); } ExtendedItemDataFramework.Log($"Cloning DEFAULT item {__instance.m_shared.m_name}"); return(true); }
private void Awake() { _instance = this; _enabledConfig = Config.Bind("General", "Enabled", true, "Turn off to disable this mod. When uninstalling, load and quit a game once with this option set to false."); _loggingEnabled = Config.Bind("General", "Logging Enabled", false, "Enables log output from the mod."); DisplayUniqueItemIDInTooltip = Config.Bind("General", "Display UniqueItemID in Tooltip", false, "Displays the item's unique id in magenta text at the bottom of the tooltip."); ExtendedItemData.NewExtendedItemData += UniqueItemData.OnNewExtendedItemData; ExtendedItemData.LoadExtendedItemData += UniqueItemData.OnLoadExtendedItemData; _harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), PluginId); }
public T AddComponent <T>(/*params object[] constructorArgs*/) where T : BaseExtendedItemComponent { if (GetComponent <T>() == null) { //var args = (new object[] {this}).Concat(constructorArgs).ToArray(); //var newComponent = Activator.CreateInstance(typeof(T), args) as T; var newComponent = Activator.CreateInstance(typeof(T), this) as T; Components.Add(newComponent); return(newComponent); } ExtendedItemDataFramework.LogWarning($"Tried to add component ({typeof(T)}) to item ({m_shared.m_name}) but a component of that type already exists!"); return(null); }
// Load item from save data public ExtendedItemData(ItemDrop.ItemData prefab, int stack, float durability, Vector2i pos, bool equiped, int quality, int variant, long crafterID, string extendedData) { ExtendedItemDataFramework.LogWarning($"Loading ExtendedItemData from data ({prefab.m_shared.m_name}), data: {extendedData}"); m_stack = Mathf.Min(stack, prefab.m_shared.m_maxStackSize); m_durability = durability; m_quality = quality; m_variant = variant; m_shared = prefab.m_shared; m_crafterID = crafterID; m_crafterName = extendedData; m_gridPos = pos; m_equiped = equiped; m_dropPrefab = prefab.m_dropPrefab; m_lastAttackTime = prefab.m_lastAttackTime; m_lastProjectile = prefab.m_lastProjectile; Load(); LoadExtendedItemData?.Invoke(this); }
public void Load() { if (m_crafterName.StartsWith(StartDelimiter)) { Components.Clear(); var serializedComponents = m_crafterName.Split(new [] { StartDelimiter }, StringSplitOptions.RemoveEmptyEntries); ExtendedItemDataFramework.Log($"(Found component save data: {serializedComponents.Length})"); foreach (var component in serializedComponents) { var parts = component.Split(new[] { EndDelimiter }, StringSplitOptions.None); var typeString = RestoreDataText(parts[0]); var data = parts.Length == 2 ? parts[1] : string.Empty; ExtendedItemDataFramework.Log($" Component: type: {typeString}, data: {data}"); if (_customTypeRegistry.ContainsKey(typeString)) { typeString = _customTypeRegistry[typeString]; } var type = Type.GetType(typeString); if (type == null) { ExtendedItemDataFramework.LogError($"Could not deserialize ExtendedItemComponent type ({typeString})"); continue; } var newComponent = Activator.CreateInstance(type, this) as BaseExtendedItemComponent; if (newComponent == null) { ExtendedItemDataFramework.LogError($"Could not instantiate extended item component type ({type}) while loading object ({m_shared.m_name})"); continue; } newComponent.Deserialize(RestoreDataText(data)); Components.Add(newComponent); } } else { ExtendedItemDataFramework.Log($"Loaded item from data, but it was not extended. Initializing now ({m_shared.m_name})"); Initialize(); } }
public void Save() { if (!ExtendedItemDataFramework.Enabled) { var crafterNameComponent = GetComponent <CrafterNameData>(); m_crafterName = crafterNameComponent?.CrafterName ?? string.Empty; ExtendedItemDataFramework.Log($"Reverted data to non-extended mode for item ({m_shared.m_name}). m_crafterName: ({m_crafterName})"); return; } _sb.Clear(); foreach (var component in Components) { _sb.Append($"{StartDelimiter}{EscapeDataText(component.TypeName)}{EndDelimiter}"); var serializedComponent = component.Serialize(); _sb.Append(EscapeDataText(serializedComponent)); } m_crafterName = _sb.ToString(); ExtendedItemDataFramework.LogWarning($"Saved Extended Item ({m_shared.m_name}). Data: {m_crafterName}"); }
public static void Postfix(ObjectDB __instance) { ExtendedItemDataFramework.TryConvertItemPrefabs(__instance); }