Example #1
0
        // 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;
        }
Example #3
0
 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);
        }
Example #5
0
        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);
        }
Example #6
0
        // 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);
        }
Example #7
0
        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();
            }
        }
Example #8
0
        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);
 }