Action RPG Inventory System

Hi can anyone help me?

When I right click on an item to equip it, I’ve checked what’s being equipped with a print string and It’s saying the thing i’m equipping (Armour blade shoulder) is being equipped then nothing is being equipped straight after, is this actually working then changing the mesh to nothing straight after?

Still don’t fully understand the blueprints, just enough to have an idea of what’s going on.

Any help?

[MENTION=331197]Lord Caine[/MENTION] i would think about a more generic crafting system which just takes items from your inventory rather than some type of sub-inventory.

This is what i have been working on using the ARPG Inventory.

Thats pretty cool. How do you handle recipes? How does your system know what items produce what when crafting?

The Crafting System is 100% universal in a similar way to the loots lists, you simply added a new item ID corresponding to the item in the item list to the craft list data table, and fill out its other requirements and that pretty much it i made it based on the same logic pirate used.

Crazy how fast you’re tackling all this. feels like every week you’ve got full new awesome systems in your project :slight_smile:
I wanted to ask you how you tackled the durability for items ? I’ve been messing around with that but I’m unsure where to build that in a clean way if that makes sense.

Crafting

Hi Overrated,

That is exactly what my intentions are. I couldn’t figure out how to get the item icon from the inventory to display in the hud. I finally figured that out this morning. I basically copied one of the hotbar slots and figured out what will was doing. My crafting system is going to be very simple to start. I will take just two items to make a third.

Regards,

Arthur

For the durability i incorporated it into the loot lists, what i did was in the item list i added a durability and a Max durability the max is needed when your creating the UMG logic as well, In the Loot Actor in GetRandomLootItems i added a GetRandomItemStats in here i did some random logic using the item stats, I also added some new variables to the loot lists like Min/Max grade and grade chance, To handle durability you can do this in a few ways from the player controller if its only a mesh based weapon or within the weapon if its a actor based weapon, I also added a hardness variable to the Usable Actor this will be used to apply different durability damage to your weapon if its a melee type, You also need to update the inventory item to world item and make sure you added your new stats you wish to carry over or when you pick your item up after dropping it the stats will just be set to the item list version of the weapon, In the next two weeks ill be working on some repair logic I’m still thinking up ideas on how i want this to be handled. Please let me know if i have missed any info you need.

Thanks so much for the quick reply ! That’s super helpful. I already had max durability and durability in the UMG side, but wasn’t too sure where to put the rest so it would make sense. I’ll give it a go !

For the repair system, since you’ve already got ressources and all that, perhaps adding something in your furnace where you can drop the required ressources or tools you need for the repair in one tab and the item to repair in the other could be neat if that makes sense ?
I’m personally a fan of simplicity so I’d probably just add a right click on the item => repair ? and show how much ressources you lose if you do accept the repairs.

f
Everything is working pretty well, as you said I’m having that issue when I drop items. Seems like the stats arn’t carrying over when dropped. I linked my 'current durability ’ in item to world item as you mentioned, but still having the same issue.
I added a variable in world actor and linked it as such as well. :

Make sure in the World Actor In Update Item Amount you also change that to also update the durability as your only passing the durability variable but nothing is actually setting it.

For the repairing i mite ether have repair kits which you can just drag onto a item or ill mite add logic to my tool bench so you can repair with it not sure yet :).

Yeah that did the trick. I ended up just duplicating the item amount and made an item durability macro and that worked as well. Still figuring out how to apply durability depending on which part is hit and depending on how long you have it equipped.

Repair kits are actually a great idea ! As long as they’re not a pain to craft and/or can be relatively easy to find, but then again that depends on how fast your items wear off I guess. I was having a discussion with somebody else on my team about how ‘fun’ repairing items can be or how painful it can be, depending on how it’s set up. Definitely going to playtest that a ton hah !

A great way to apply durability damage is to use the skeleton bones of the character, or you could setup collision boxes as well, I’m yet to set this up but i mite end up using Ramas Melee Weapon Plugin seeing its pretty much done for you, So you could adding some logic for which bones effect each part of equipment you have equipped.

Yeah i think i mite go with repair kits but i do like the bench idea as well.

Yeah I was thinking of doing that with the bones ! What I meant is I can’t figure out how to grab a specific item’s durability and modify it. For instance say ’ get equipped actor in head> get that actor’s durability> modify the durability ’ .

The bench is neat, but it can be a pain to use stuff like that if there’s the possibility of other players being around.

Create a function in your player controller that can handle this and shot it back to the inventory manager component and cast to it from your character if you need to, If your using actors for armor as well you could set a variable to the following item equipped, you can do this in the equipment inventory component where it sets the mesh, I probably will only use a actor for main-hand you can still set durability on a mesh only item, what you need to do is create a function that handles setting the durability on both the actor and the UMG version of the item, what i did to save on loops was add a variable to my item list called Inventory Slot then in added item i grab the slot and set it on the item, Now this is handy as you can just break the item and get its location without any looping, So your function just wants to get the item change its durability and then adds it over the top of your old item, and depending on its durability do your own logic like damage Nerf or destroy the item, handle that in your weapon actor or in the player controller for mesh based items.

Just a note make sure every one adds in a Is Falling check on the Input: Use Actor(Usable/Pickup/Container) or in mid air you can stop the character if you open a container lol.

Hi @Pirate. I figured out the problem. The objects always were spawning under the terrain and below the ground. Then I added 45 more unreal units up in the Z axis connected in ‘randomizedroplocation’ node inside ‘DropIten’ function in ‘InvetoryManagerComponent’. I do not know if it’s the best way to achieve this, but it worked.

Hi @ToxinGaming
I’d love testing his theory, you could demonstrate the node sequence using a screenshoot or a better explanation. I tried using a ‘timer’ function connected on the end of the ‘eventBeginPlay’ to try bypassing the ‘event tick’. But I do not know what you mean by ‘every X (<.05)’. This is an Branch using conditional ‘float < float’? And what kind of timer function?

In your Set Timer by Function Name node, there is a time float that sets how often to run the function. That is what I meant by setting that value to 0.05 or less, but it actually should just be set to every couple of frames.

But I actually tried testing this out on the default Inventory Player Controller and the default map that comes with the pack. It didn’t seem to make a difference at all, so I would just ignore the timer function and keep it on the tick. The main reason you would want to take it off the tick function is that if you actually want to be able to stop and start the hit scans to save some client actions.

The only reason the item would be spawning under the ground to start with, would be because the Random drop location is probably isn’t getting the right actors location, and why are breaking the transform inside the function? you can just adjust the location within the Randomize Drop Location Function using the “Drop At Our Feet location”

 @exphrasis 

When you get more in-depth you can do some think like this create a new structure to hold your data your passing to the world item then update the item to store the passed data.

Now if you place items in the world your data will be set to whats in the items blueprint is rather than the item table for the following variables, you can add a check if you wish to use that data still or you can also add random stats for placed items to, what i did was create the random stats function in my blueprints library, the item list in my game will have the highest grade items so when you do weapon spawning you can spawn the best version of that item, when the world generated items will be random.

d4570ad7033f64e22163bca17e4026e033257c5f.jpeg

Thanks a lot for taking the time to explain all this. I’m still struggling to figure out where to set my modified durability. Tried in a couple different ways but still no success.

For now I have everything working on the UI side, and loot to world item still keeps its durability.
If I understood well, what you’re suggesting to do is to (ignoring events from the controller for now), first set durability in equipmentinventorycomponent>SetInventoryItem.

Then, change that variable and set it (to add or remove values to it dynamically), in inventorymanagercomponent>updateequippedstats (I imagine ?).

I also don’t understand why you added Inventory Slot, since items alreay have ’ equipment slot ’ by default in the item list ?

Thank you again for taking the time to share all this with us and I appreciate you going out of your way to help.

Ill try to explain how my logic works a bit more to try to help, I set the items durability inside the items actor then pass it back to the inventory now this probably isn’t the best way, to save on bandwidth you mite only want to update it in the inventory when you open it, As you can actually see the Durability on my items i need to update it to display the current Durability, but as i removed the default hotbar i made my own which is a extension of the characters inventory, I also removed the main-hand slot and inside the equipment inventory component i do a on-rep of the selected item rather than than a on-rep of the main-hand skeletal mesh.

I added a Inventory Slot variable to the item so i can return the slot number to locate the item in the characters inventory, inside the item actor when its spawned it the i can cast the update the item directly using the Inventory Slot variable, the equipment slots are only used to restrict items to a slot but you could make a simple function to return the inventory item slot using them seeing each type is limited to a inventory slot, but for my type of inventory this wont work as the equipped item can be in a number of slots.

Its no problem i don’t mind helping people willing to learn :).

Hey everyone,

I’m sorry for the lack of responses the past week.

Just a quick update, the current version of the Action RPG Inventory System is already compatible with 4.12.
(I would personally hold off updating, because as of 4.12.1 many people are still experiencing crashes compiling blueprints and other little bugs introduced in 4.12)

I have also submitted the next update that removes all the Make InventoryItem nodes so that when you make changes to your **InventoryItem **structs you won’t have to jump through a few places and hook up your new variables between the Break/Make InventoryItem nodes.

The update should be released by Epic whenever they feel like it.

Version 1.6 - Submitted June 8th 2016
------- Update Notes -------

This update replaces all the Make InventoryItem nodes in the project with Set Member in struct nodes.

[SPOILER]
[InventoryManagerComponent]
SetItemAmount();
- Replaced the Make InventoryItem node with Set Member in InventoryItem node
AddToItemAmount();
- Replaced the Make InventoryItem node with Set Member in InventoryItem node

[InventoryPlayerController]
ServerLoadPlayerItems();
- Replaced the Make InventoryItem node with Set Member in InventoryItem node

[World_Actor]
UpdateItemAmount();
- Replaced the Make InventoryItem node with Set Member in InventoryItem node

[Loot_Actor]
SetItemAmount
*- Replaced macro with a function of the same name
(you can also if you want just add the exec in and out pins to the macro instead of making it a function in your own project);

  • Replaced the Make InventoryItem node with Set Member in InventoryItem node*

GetRandomLootItems()
- Replaced old renamed macro with the new SetItemAmount() function

DEMO CONTENT

[Muppet]
GetRandomLootItems();
- Replaced old Break/Make InventoryItem nodes with Set member in InventoryItem node to update the amount.

[NPC]
LoadNPCEquipmentAndItems();
- Replaced old* Break/Make InventoryItem** nodes with Set member in InventoryItem node to update the amount.*

[/SPOILER]

With this update I will be removing support from 4.10 as 4.11 is a better base version and will keep supporting 4.11+ until a new version comes along that is a very drastic change.