Announcement

Collapse
No announcement yet.

Action RPG Inventory System

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • replied
    Originally posted by Rotahn View Post
    Hi all,

    Firstly i'd like to say thanks to Pirate for creating this system and the question im asking below is to ask for help in what we might have done wrong rather than something not working as it should in the inventory system . I should mention now that we have compared function by function, macro by macro, event by event between our current development version of the inventory system and a clean project version of the inventory system and they are both the same. I'm making this point for 2 reasons, first that there isnt anything wrong with this system..its brilliant in fact..secondly to highlight that we haven't touched the core functionality of the system. This bug has us stumped at the moment.

    TLDR

    when a container is opened,closed and re-opened it appears to lose sync on the clients to the server. client to server is fine as server knows the correct information all the time its just the replication / updating of each of the clients as the clients go out of sync.

    The video will explain it far far better than i can here.

    https://youtu.be/ZT-FEkt6FZA

    Any help in pointing us in the right direction would be great.

    Cheers
    Just to be safe I double checked this on the ARPGIS in 4.12 to make sure it wasn't a bug with 4.12 and everything worked as expected.



    After reading what you wrote and watching the video you are correct in that the server is updated properly and is moving the item into the right place and it's seems to be just the clients container window getting out of sync after reopening the container. Not sure what you have changed in your own project but I can point you to the places where this logic happens and with a few print strings and breakpoint debugging it should hopefully be a simple fix.

    If you look in the InventoryManagerComponent on the Event Graph there is a Green Comment Box called Client: Container UI Events
    Each of these events calls a similar named function to run as the client. Sometimes these functions are ran in other functions that are already running on the client and by pass these initial event calls.
    (Note: there is also a type and the Red Comment Box is also labeled as the Client: Container Events and should read Server: Container Events. I will fix this typo in the next version)

    Client: Container UI Events
    Client_OpenContainer is triggered by the server when the client has "used" a container and when the server has validated the action it triggers this event on the client which called the LoadContainerSlots() function.
    This function removes all the slots on the "hidden" container UI window and then recreates the slots based on the number of loot items or if it's a container the container size. After it recreates the Container Slots it loads the ItemUI data that was sent from the server in the LocalItemInformation struct array and loops through each Item calling the SetContainerSlotItem() function to set the item to the Container Slot.

    I would create a print string during the loop and output the array index and item number and see if this changes between when it works the first time and when the player opens the container again. Make sure the server isn't sending different ItemInformation Struct Array data the 2nd time. (If you put a print string in the SetContainerSlotItem(); and Clear ContainerSlotItem(); you will get debug feedback when you move the item around as well)
    I have no idea why that would happen but there are a lot of struct bugs with unreal and sometimes deleting the struct variables and adding them back in helps fix things so try that if this is the issue .


    Client_CloseContainer
    This simply hides the Container Window and clears and ToolTips if you were hovering at the time. I don't see it being the cause.

    Client_SetContainerSlotItem
    This event is what is triggered when the server wants to tell a client what slot the UIInventoryItem (Icon/client data for tooltip) should be placed in.


    Client_ClearContainerSlotItem
    This event is what is triggered when the server wants to tell a client what slot the UIInventoryItem (Icon/client data for tooltip) should be placed in.


    Let me know if the server is or isn't sending the exact same data to the client when he opens it the 2nd time and has issues.
    This will let us know if it's a Server issue or if something with the UI is causing the bug when reopening the container window.

    It may also be better to send me an email at support@vanguardinteractive.com as it's easier for me to help you work through issues in your own project this way as often I am out and about and I can get alerts and reply on my phone faster
    Last edited by Pirate; 07-16-2016, 12:06 AM.

    Leave a comment:


  • replied
    Hi all,

    Firstly i'd like to say thanks to Pirate for creating this system and the question im asking below is to ask for help in what we might have done wrong rather than something not working as it should in the inventory system . I should mention now that we have compared function by function, macro by macro, event by event between our current development version of the inventory system and a clean project version of the inventory system and they are both the same. I'm making this point for 2 reasons, first that there isnt anything wrong with this system..its brilliant in fact..secondly to highlight that we haven't touched the core functionality of the system. This bug has us stumped at the moment.

    okay..now the odd problem..

    We created our crafting system with all new functions so as not to alter the core RPG system as it handles everything we needed. We just noticed however that when moving items between inventory and containers something goes pear shaped . i will try and lay it out so it's easy to understand as its an odd one.

    2 clients
    Client 1 -> adds item to container while Client 2 viewing - Everything works as it should, the item gets removed from Client 1 inventory and added to the container and also replicates to Client 2...so all good there
    Client 1 -> adds item to container while Client 2 viewing, then (Client 1) closes the container and re-opens it (Client 2 STILL has the container open) - Both clients still show the item as being in the container... so all good there

    the problem

    Client 1 -> adds item to container while Client 2 viewing (still hasnt closed its view), then (Client 1) closes the container and re-opens it then moves the item out into his inventory - result - item appears in inventory however the Icon for the item is still showing in the container. This cant be a valid item as when hovering over it the tooltip doesnt display either. Through all this the server knows exactly where the item is/should be.

    It appears that the problem is either when closing or opening the container that the reference to the container is lost or that something odd is happening in the playerstate.

    TLDR

    when a container is opened,closed and re-opened it appears to lose sync on the clients to the server. client to server is fine as server knows the correct information all the time its just the replication / updating of each of the clients as the clients go out of sync.

    The video will explain it far far better than i can here.

    https://youtu.be/ZT-FEkt6FZA

    Any help in pointing us in the right direction would be great.

    Cheers

    Leave a comment:


  • replied
    Originally posted by MrWilson13 View Post
    Be pretty interested in getting this. But just a question I got.

    I've got myself a sidescroller (3d) version. Is it possible to open the container when in proximity to it instead of having to look at it? So > character near container > hold E to open container. Obviously this would be done with a box collision but i'm wondering if its an easy thing to switch over and do?

    anyway look forward to your answer and thanks!

    You could replace the RayCast in the InventoryPlayerController to use a volume overlap instead or any other method really.
    Interacting with the containers is just as simple as telling the server to call that actors on used function.



    Originally posted by Haoris View Post
    Hi,
    My windows disappear when I drag them. I can move them but once released, they disappear.
    Do you have any other UI elements that might be blocking the UI HIT when you drop the widgets? Make sure that when you drop the widgets that are hitting the InventoryLayout UI as that has the code to handle the "OnDrop".
    UMG UI can be a little confusing at first, but if you take a bit of time to learn and understand how the UI Hit Tests work and Z Order of widgets should help you solve this issue very quickly in your project.


    Originally posted by GameMaster79 View Post
    Hi Pirate,

    I moved the RPG Inventory and Top Down Kit assets into my project. Thank you for the video on that! I did have one error I thought you might have some thoughts on. I'm getting the error messages off the world actor "Item not found in item list" and "Item has no world Mesh". It's being run in the construction script so the error is going all the time when I'm in the folder with the world actor. When I look at the imported items they have ID's, and the ID's are on the ItemList. It seems like it should all be working. Any thoughts on what that might be?

    Thanks!
    Hrmmm that's a little odd. Do the items in game have the correct meshes and when you pick them up the right stats? That error should only print out if it's trying to load something that doesn't exist in the ItemsList and then show a default mesh. please send me an email to support@vanguardinteractive.com

    Leave a comment:


  • replied
    Hi Pirate,

    I moved the RPG Inventory and Top Down Kit assets into my project. Thank you for the video on that! I did have one error I thought you might have some thoughts on. I'm getting the error messages off the world actor "Item not found in item list" and "Item has no world Mesh". It's being run in the construction script so the error is going all the time when I'm in the folder with the world actor. When I look at the imported items they have ID's, and the ID's are on the ItemList. It seems like it should all be working. Any thoughts on what that might be?

    Thanks!

    Leave a comment:


  • replied
    Hi,
    My windows disappear when I drag them. I can move them but once released, they disappear.

    Leave a comment:


  • replied
    Be pretty interested in getting this. But just a question I got.

    I've got myself a sidescroller (3d) version. Is it possible to open the container when in proximity to it instead of having to look at it? So > character near container > hold E to open container. Obviously this would be done with a box collision but i'm wondering if its an easy thing to switch over and do?

    anyway look forward to your answer and thanks!

    Leave a comment:


  • replied
    Originally posted by 7Autechre7 View Post
    Nvm I figured it out lol, with Solder->EquipmentCharacter->SoldierBp the default mesh was being used from inventory system which doesn't have a camera bone. Now it works hopefully it doesnt cause any odd error in the future though
    It shouldn't , it's just keeping all the equiplogic clean and separate from your other logic by having it in the EquipmentCharacter class

    Leave a comment:


  • replied
    Nvm I figured it out lol, with Solder->EquipmentCharacter->SoldierBp the default mesh was being used from inventory system which doesn't have a camera bone. Now it works hopefully it doesnt cause any odd error in the future though

    Leave a comment:


  • replied
    Im not entirely sure but I think the problem is from the camera attatch script since the camera is now attached at the wrong position near the feet:

    {
    Camera = ObjectInitializer.CreateDefaultSubobject<UCameraComponent>(this, TEXT("Camera"));
    Camera->AttachParent = GetMesh();
    Camera->AttachSocketName = FName(TEXT("camera_socket"));
    Camera->bUsePawnControlRotation = false;
    FPostProcessSettings & PPS = Camera->PostProcessSettings;
    PPS.bOverride_FilmSaturation = true;
    PPS.bOverride_SceneFringeIntensity = true;
    PPS.bOverride_VignetteIntensity = true;
    //PPS.bOverride_MotionBlurAmount = true;
    //PPS.MotionBlurAmount = 0.f;

    CameraBoom = ObjectInitializer.CreateDefaultSubobject<USpringArmComponent>(this, TEXT("CameraBoom"));
    CameraBoom->AttachParent = GetCapsuleComponent();
    //CameraBoom->AttachSocketName = FName(TEXT("root"));
    //CameraBoom->bUsePawnControlRotation = true;
    CameraBoom->TargetArmLength = 100.f;
    CameraBoom->SocketOffset = FVector(0.f, 30.f, 80.f);

    CameraTP = ObjectInitializer.CreateDefaultSubobject<UCameraComponent>(this, TEXT("CameraTP"));
    CameraTP->AttachParent = CameraBoom;
    CameraTP->bUsePawnControlRotation = false;

    Leave a comment:


  • replied
    Hello Im trying to get this to work with my Fps Kit and I had a quick question. In the tutorial im supposed to parent mycharacterbp to the equipmentcharacter, except mycharacterbp parent option is already set to 'Soldier' and I cannot switch this option to equipment character else my scene wont work. Soldier is a C++ script. So Soldier.h is pawn, the SoldierBP has this as its parent option. How may I add the equipment character to this? ty

    Leave a comment:


  • replied
    Wow, that was so simple. In case someone need it, all I had to do was to go to "Inventory_slot" blueprint, open "OnMouseButtonDown" function and change "Drag Key" to " Touch 1". Know I need to find how to click through the HUD canvas so I can use virtual joysticks/buttons

    Leave a comment:


  • replied
    Thanks for your help. I edited your "InventoryPlayerController" to use touch input but I didn't know where you called all mouse inputs. For you they are all in UI/Blueprints ( and player controller )? I will look there

    Leave a comment:


  • replied
    Originally posted by Haoris View Post
    Hi,
    I want to use your inventory system on a mobile game projet but I don't know how and where to replace mouse input with touch input, I'm lost in all those files/directory. I added virtual joysticks and button so I can move, open inventory, interact, etc. but I can't "clic" on icons to use/equip items nor drag them.
    Any help please?
    I haven't done any touch input with unreal but if you edit the UI blueprints it should be pretty straight forward to convert it from a drag and drop system with right click use to a mobile friendly one as you will only need to edit the UI files.

    Look in
    InventorySystem/UI/Blueprints
    InventorySystem/UI/Blueprints/Inventory


    If you look at the event graph you will see how the UI is calling events on the inventory for things like Move and Use. Replacing some of that logic with your games touch control logic should get you started.

    Leave a comment:


  • replied
    Hi,
    I want to use your inventory system on a mobile game projet but I don't know how and where to replace mouse input with touch input, I'm lost in all those files/directory. I added virtual joysticks and button so I can move, open inventory, interact, etc. but I can't "clic" on icons to use/equip items nor drag them.
    Any help please?

    Leave a comment:


  • replied
    Originally posted by Rhynedahll View Post
    After I gave this some thought, I recalled another bit of advice that [MENTION=39476]Pirate[/MENTION] had once given (I think in a tutorial) and simply re-compiled and saved each offending function in the components. This corrected the cook errors for me without having to change the types and reconnect.

    Perhaps you might try this the next time this particular problem crops up for you.

    In future, if I make any changes to Blueprint structs, I'm just going to automatically re-compile all the functions that use them.
    There seems to be a few issues like this with structs in 4.12 from what I have heard.
    Best to always report the bugs you find in unreal on answerhub so that hopefully Epic is aware of them and can fix them quicker.

    I am glad that solution helped.

    Leave a comment:

Working...
X