Action RPG Inventory System

@Pirate : Hi. Recent purchaser, just trying to get to grips with the system.

I followed your migration video to the letter. Was slightly disappointed you skipped over a couple of bits but no big deal once I’m familiar with the system I can integrate those bits.
However, Everything seems to be working, no errors on load anymore or anything else BUT when I mouse over the usables in the editor content browser I get this:
9f8a57c09914b1abb47242736f02c3628201fe10.jpeg

As I say, everything seems to work despite that spamming on the main window but I’m sure it can’t be good!
I know it’ll be hard for you to say seeing as you don’t know what I’ve done but I will say I followed your video and I used my own controller that I migrated the inventory logic over to, so I did all those bits too.

I can place the usables in the world and open them (pots are empty, but they’re supposed to be right?), skeleton’s have items I can loot and wear etc all working great.

Thx for any help you can give.

Daz

First let me say - what a great system! You have put a lot of work into this and I thank you for making it so affordable!

Second - I’m brand spanking new to it so I’m sorry if this is obvious or been answered before but - I want to make a usable actor - a Key - that opens another usable actor - a door — The key has a serial number and so does the door - so if they match the door opens - now I actually already have all that except for where I put that logic connected to the usable actor - I tried overriding the “ActorUsed” and a couple others - but then the item isn’t picked up from the level LOL s I am missing some basic step

Can you point me in the right direction?

Thanks a ton!

Inside the World_Actor the construction script basically takes the Item “ID” and reads from the data table to know what to set the mesh to.
**It seems the editor is triggering the construction script of the Actor when simply mousing over it in the editor. Are you using 4.14? **

Since the ID variable in the World_Actor is set by default to** None **and there is no item in the DataTable with an **ID **of **None **it is just printing the debug print strings I added to help people who created new items and maybe didn’t make the ID’s match up or forgot to assign a mesh. So they would know what the problem was when the items weren’t working when dropped.

I would suggest simply removing those debug print string from inside of the World_Actor or even better create an Item with the ID of “None” in your DataTable and just give it the good old sexy catbox mesh XD.

If you edit the Usable_Door actor you will want to fully override the OnActorUsed function. You will still need to setup the WasUsed logic you will find in the Parent Class Usable_Actor->OnActorUsed(). But now this will allow you to add your more advanced logic. (You can see in World_Actor how it interacts with the players inventory to pick up an item. You will probably want to make a “FindItem” type function in the InventoryManagerComponent to search for a key item and then check it’s KeyID)

You can add some simple variables like a Bool IsLocked/Lockable and then a Variable for a KeyID. Since the OnActorUsed function happens on the server you would simply want to just checked first if the door is locked. If it is then add logic to check the Inventory of the player who is using it (the PlayerController gets passed into the OnActorUsed function so you know who is using it. Simply cast to YourPlayerController to access the InventoryComponent) to see if they have a key item with that ID.

All in all it should be pretty basic to setup. I would suggest just getting basic functionality working then you can dive into making it so the player can lock/unlock/relock the door or consuming the key on use, etc.

Hope that helps give you some ideas :smiley:

Cool - thanks for the reply! I think I have the basics down - it’s a very easy system out of the gate to get rolling! I added the variables and my own door system - no problem :slight_smile: it’s when I tried to make the key object that I had problems - I could initially pick up the key, but when I overrode the functions then I could no longer pick up the key - I figured calling the OnActorUsed from the parent was enough to keep what functionality was already there and I’d just extend it - am I thinking about that wrong?

Thanks!
Jamie

What class are you overriding OnActorUsed? the pickup logic shouldn’t need to be changed. ooooh unless you are setting the KeyID on a Child Actor of World_Actor that you have placed in the world. But this method would make it so keys wouldn’t be normal items and potentially lootable. In most RPGS I believe each different key is a different Item entirely. So there are a few ways to tackle this. Sometimes it’s good to make sure you have the full design of the feature planned out first. Because depending on your end goals there are often many different ways to do the same thing.

OK I think I am close! LOL

I have my Key, I can pick it up and it goes in Inventory - and for now I put a simple printstring in the Overridden OnActorUsed for the Key (not even messing with the door yet) - and I want to be able to right click the key in inventory to fire off it’s functionality - I thought that woulf be “OnActorUsed” but when I right click the key, it goes away like I used it - but my printstring never fires

the printstring does fire when I pick up the key though - which is a little weird because I didn’t use it, just picked it up - but it won’t matter that much

@Pirate : Thanks for your help so far, you’ve been spot-on.

So a couple of little things:
1> The edge-highlighting doesn’t work for me, regardless of if I put it on my camera post process or the global one?
2> When I drop an object, it does drop it but not in the way I’ve seen on your videos. It quite often disappears and I’m assuming going under the world. Are there controls for me to play with like an offset or location for ‘spawning’ the dropped item etc so I could manually tweak my way around it?
3> I followed your FPS tutorial and all went well, however there are times that the mouse cursor disappears and I have to left click to make it appear. I seems to happen once I’ve looted a container and I open another. the mouse cursor disappears, my movement is locked out correctly but I can;'t see the cursor until I left click anywhere on screen and the cursor appears again.

Hey guys, really liking the project. I was thinking of integrating this into the MMO Starter Kit from CodeSpartan. It might be too difficult/corrupt my build, but after a good backup I’m willing to try. Anybody who knows both kits have any advice?

What version of unreal are you using?

Right clicking to use a consumable fires different logic then the world actor OnActorUsed. You will want to look at the InventoryManagerComponent->UseConsumableItem() function to setup different logic for consumable items in the Inventory.

My bad for my previous post. Seems like I’m not the first person to ask a now redundant question about persistent multiplayer servers (Ark,Rust,Ect).

That’s actually exactly what I’ve been building (Fallout Roleplay Server). I’d seriously encourage you to consider a venture into persistent multiplayer. It’s a big gab for a lot of devs that’s hard to cross.

Ahh Haaa! :slight_smile: thanks for pointing me in the right direction - I see in that section that you haven’t wired up using a Misc item - so I am just going to call my Key a Misc Item and extend from there

Thanks for the help - and the great system - I’m sure I’ll be back later for more questions LOL

I am considering it :smiley:

+1 same here

Also Pirate I’m curious can you actually make a living off the asset store, or is this just a part time thing?

I’m sure the people selling animations and weapon models are making a fair bit. I guess it all depends on your cost of living and how many assets you have for sale :D.

I’ using 4.12.5 . I can’t really update due to using plugins that don’t have updated versions. Annoying!
Are there some features that behave differently in your content if not on 4.14?

My original questions in case you forgot:
So a couple of little things:
1> The edge-highlighting doesn’t work for me, regardless of if I put it on my camera post process or the global one?
2> When I drop an object, it does drop it but not in the way I’ve seen on your videos. It quite often disappears and I’m assuming going under the world. Are there controls for me to play with like an offset or location for ‘spawning’ the dropped item etc so I could manually tweak my way around it?
3> I followed your FPS tutorial and all went well, however there are times that the mouse cursor disappears and I have to left click to make it appear. I seems to happen once I’ve looted a container and I open another. the mouse cursor disappears, my movement is locked out correctly but I can;'t see the cursor until I left click anywhere on screen and the cursor appears again.

I apologize for missing your questions earlier.

1.) Custom Depth Outline - It looks like you may need to enable custom depth in your rendering options for your project. If you look at this guide you will see all the setup steps. This should get it working

2.) Item Drop Position - The drop logic for non physics mode is pretty basic. It just gets a location randomly offset from the player and drops it at their feet. You will probably want to change it if you are using hilly terrain and such to do a raycast and then plug in that location to the LocalLocation variable. You can edit the Drop position logic in the InventoryManagerComponent->RandomizeDropLocation() function.

3.) Looting Container Mouse Bug - This is caused by a bug introduced in 4.12 where the UI OnHovered states don’t clear any more when the widget is hidden. This still hasn’t been fixed as of version 4.14 and there is a bug report for it.
To fix it you just need to disable the custom logic in the demo for IsMouseOverUI in your Player Controller. Simply Edit the Right Mouse Button Input Event and remove the IsMouseOverUI Branch.
ff453620011bdfc2a05a3cc609bd87f3811a6526.jpeg

@Pirate : Thx mate, I’ll try all that out later!

Can you answer me a really silly question though please?

I am trying to do a melee damage system (I might do a simple one myself, or use Rama’s melee plugin) but my initial attempt didn’t work. I put the logic into my weapon Blueprint (it’s used in your inventory system) and it did an overlap check for enemies and I fire a few debug strings but none of them get triggered.
Onbviously the blueprint references the static mesh, but when the weapon gets equipped, does it use the skeletal mesh version of it and therefore the overlap/collision checks I’m doing won’t fire? Just a bit confused on where to put the logic, as for me it makes sense to have it on the individual weapons so I can customise the base damage on a per-weapon basis (or reference your in-built damage value, I assume?).

Sorry, I know this goes beyond what you’ve provided for us, but a bit of clarification on what happens to the item when I equip it etc might help me figure out where to put the logic?
From looking online, most put it on the player character and reference a melee capsule of some kind, but I’d prefer to use the actual weapon’s collision/physics to calculate the hit…

Thx for any help