Forum rules - please read before posting.

[Feature Request] Integration for Adventure Creator and Ultimate Inventory System

After inquiring about this feature on the Opsive discord I come to make an official request on the forums itself.

We currently already have an integration for Ultimate Character Controller and Adventure Creator.
However we do not have an integration between Ultimate Inventory System and Adventure Creator yet. This integration could allow a modular approach to use either Ultimate Inventory or Adventure Creator inventory, maybe referecing one item to use in another system.
In my particular case, I intend to use Ultimate Inventory System fully, thus discarding the inventory manager from Adventure Creator. I still need to be able to reference the items I use in Adventure Creator, they usually are referenced through an ID number linked to their prefabs, that does work for Ultimate Character Controller but might conflict with Ultimate Inventory.
Adventure Creator also has menus, for saving, loading, main menu, which Ultimate Inventory also has. Having a clearer setup for both with an integration might be quite useful (specially for the UI which currently conflicts in my own project).
All in all, I intend to use Adventure Creator for puzzles/interactions/dialogs/cutscenes/MainMenu/Save_Load, that's pretty much it, this request might be redundant as Adventure Creator integration already handles a lot, though not anything related to Ultimate Inventory System I believe.
Thank you for time!

Comments

  • When two assets overlap in feature-sets, integrations are difficult to provide as the exact needs will vary from project to project.

    I'll need some details on your intended workflow. If you're looking to disregard AC's Inventory system in favour of UIS - interface included - what specifically are you needing the integration to handle?

  • edited April 2023

    Well for instance the conflict I currently have relates to the event system, while it's just a notification and not a game breaking issue I hope it's not a bad sign of things to come.

    In this case I have to setup the event system in the scene itself and not through a prefab (following UIS setup), so it ends up conflicting with AC which requires a prefab, I tried making the current setup a prefab but it doesn't work, that's one thing.

    Another I guess is the fact that I want AC to keep track of objects IDs, for that however I just need to add a component to each prefab I assume so that shouldn't conflict, shouldn't but could eventually considering this is just the beginning of the project.

    I'm calling myself a tad neurotic on this one, I admit, I don't have many issues but I'm worried I get more down the line, thus why I inquire about this before the project takes a bigger scale and I get flooded with issues that could have been resolved at the design stages.

    In terms of design I intend to make a Resident Evil 4 style inventory with UIS, I won't have any interaction with items from the menu and game world directly, meaning you won't have a case of:

    Press RMB on item, choose action, it interacts with door or whatever interactive item.

    Rather, I intend to have AC check for the item ID in the inventory then unlock the door/container the player interacts with and remove item from inventory (by unlock it can also trigger a puzzle or whatever is needed).

    I guess for most uses it doesn't create a conflict at all. Like I said I'm just a tad neurotic on this one. My previous project of 2 years wasn't really well prepared in the design stages so I just want to avoid a maximum of future headaches (even though it's game dev, they're bound to come some day).

    Thanks for reading my rant, it might mean this feature request is void, you decide!

  • edited April 2023

    Sounds like it's less a direct integration between the two, and more a case of making sure the two can work alongside one another.

    I have to setup the event system in the scene itself and not through a prefab

    You can ignore the warnings from AC on that one. While AC prefers to spawn in a prefab, you're welcome to use one in the scene.

    I want AC to keep track of objects IDs

    UIS has its own save system, but is able to save/load its data as part of a separate system (see the "NestedInventorySaver" example script in their docs here).

    One way to implement this would be to use Json to convert this data to/from a string, and store the value in a Global String variable in the way covered by this tutorial.

    I intend to have AC check for the item ID in the inventory then unlock the door/container the player interacts with and remove item from inventory

    As UIS has its own interaction system, it seems like there's a couple of ways you could do this:

    1. Bypass AC Hotspots in favour of UIS interactions, that run AC ActionLists when triggered.
    2. Stick to AC Hotspots, and run a custom Action that checks if a given item is in the Player's UIS Inventory.

    For the latter, the "Get an Item from an Item Collection" code snippet on this page would likely be the best starting point.

    I'm going only by Opsive's docs so this is untested, but it may be something along these lines:

    using UnityEngine;
    using Opsive.UltimateInventorySystem;
    #if UNITY_EDITOR
    using UnityEditor;
    #endif
    
    namespace AC
    {
    
        [System.Serializable]
        public class ActionUISCheck : ActionCheck
        {
    
            public override ActionCategory Category { get { return ActionCategory.Inventory; }}
            public override string Title { get { return "Check UIS"; }}
    
            public string collectionName = "Item collection";
            public string itemName;
    
            public override bool CheckCondition ()
            {
                var m_Inventory = KickStarter.player.GetComponent<Inventory> ();
                var itemCollection = m_Inventory.GetItemCollection(collectionName);
                var itemInfoResult = itemCollection.GetItemInfo(itemName);
                return itemInfoResult.HasValue;
            }
    
            #if UNITY_EDITOR
    
            public override void ShowGUI ()
            {
                collectionName = EditorGUILayout.TextField ("Collection name:", collectionName);
                itemName = EditorGUILayout.TextField ("Item name:", itemName);
            }
    
            #endif
    
        }
    
    }
    
  • It's already plenty to go from!

    I'll get on it right away, I had no idea I had to actually tweak the save system from UIS to fit AC, that makes perfect sense however.

    I'll also implement the other script you mentioned since I'm going for option 2 on this one, I want to keep everything outside the inventory to AC.

    I'll come back to this thread to share any hurdle I cannot fix myself then, I imagine the title "feature request" might not fit the thread anymore.

    Thanks again Chris.

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Welcome to the official forum for Adventure Creator.