@Neutronux Yes that is correct there is nothing preventing a client from moving away from the container once its open, the inventory reference to the container has already been set, so ether add that extra node to check or force close it if the client moves away.
A server only solution would just be to move the close container call away from being input based and have a check run on the server to see if the characters position has changed(or velocity, etc) and if there is a valid container reference then call the close container logic and set the container reference to null. Easy peasy.
The ARPGIS demo content is just showing how to use the modular Inventory System. Please feel free to make changes to the existing InventoryPlayerController as the controller just sets up the inventory system as has some basic extras in there. It was never meant to be a fully finished game template that requires no changes, it’s purpose is just to demo one way to use the component based modular Inventory System.
To weigh in on @Neutronux and @OverRated_AU convo about security - typically in a multiplayer game you want to reduce as much info as possible being sent between Client and Server.
No checks need to be done on the Server side for what the Client is doing in terms of making sure Client-only things like UI close off or particle effects activate, etc. Leaving the Client to determine how it closes is fine and if someone hacks their Client to have weird UI behaviour then that isn’t going to be a security issue.
The security issue comes in to play if the client is still getting updates of container changes (new items placed in there, etc) when it shouldn’t be or if they can still drag items out of it and into their inventory and have it replicated to the Server. The way this is generally handled is by having the Server do a simple check on whether or not the interaction is still valid on the Server-side (whether it be based on character position or other parameters) and ensuring it does not send out container updates to character’s that cannot interact with it.
Having the Client tell the Server when it has moved or having the Server actively checking this is unnecessary, the Server should act independently in this scenario and when it runs any logic for the container it determines who it is updating or whether an interaction is valid when one is requested by a Client.
In regards to Neutronux’s valid query, he was wondering if there are possible security checks done somewhere else that isn’t directly apparent. While he doesn’t directly answer the question, the developer seems to imply that there isn’t with saying that it was not designed as a solution but as an example; though, I’m not sure why it is stated having multiplayer-support when he is saying the multiplayer is actually implemented as a demo example (although likely the multiplayer-support just implies replication of inventory and nothing further, though that leaves it as an incomplete multiplayer system).
If you’re developing a serious game that you don’t want hackers to exploit and want more perspective on it - I’d advise scrapping any downloaded multiplayer logic and implementing your own, rather than relying on a Marketplace developer to make it hack-proof; especially as they can’t always cover everyone’s use-cases. It is best to save using implementations provided by others as a reference, rather than as a solution; however, a valid use-case would be for a prototype where flaws and design-oversights are not of any concern.
Pirate the developer has always stated the UI is for demoing the inventory only, if people want to use this as a starting point there free to but it was never intended to be used out of the box, adding a server check on a server function isn’t going to add anymore bandwidth all the server is doing is looking to see if the client is valid before using these functions, your statement is pointless and has no meaning, the client role is to call these server events and if these server event has no way of knowing if the client is valid to use them is just plan dumb which is what you pretty much just said.
100% multiplayer support does not mean only replication… at least not for everybody. The setup for the player controller might be demo … but all those Server do something with your container events are part of the framework and don’t verify (as some other Server events do). So in my opinion they deserved a bit more love regarding cheat prevention. Anyway it is like it is… and I think it’s not all bad. I still don’t regret my purchase at all. However adding cheat prevention is a bit like using a non-threadsafe library in a multithreading environment. It’s not always just that easy like to put a mutex on the top afterwards.
I think he don’t means the server check but how the gui gets closed. As far I remember actually the clients sends the server that he should close the inventory and (only) then the server sends back the client that he should close the GUI. This “close GUI” could be a predicted client only implemention as well as the “may use container” should be a server only implemention. But I don’t care that much regarding this one more event as it does not happen every frame.
100% multiplayer supported means the inventory system was designed with optimizations for MP in mind and following good design patterns. I’m not really sure what the problem is on your end.
But saying it doesn’t support multiplayer and it’s bad is your opinion and I respect that. If you would like a refund let me know and contact epic.
There is a lot of inaccurate assumptions being made on this topic and unfortunately I’m at the airport and not able to call out and respond to every point.
When you send the client command to the server to close the inventory it invalidates the reference so the problem you seem to really have is with the server just telling the client it’s finished processing the clients request then the client closes the UI.
If you want to trigger the client UI close first then call the server logic that’s your choice. But going out of your way to say it’s completely hackable because the UI closes last not first is simply untrue. The ARPGIS was also built with the assumption most people buying it aren’t programmers or understand networking in bluepeints I made the choice to flow the logic in a way to help people understand sending commands and recieving a response from the server if the command is validated. This design is consistant in all of the ARPGIS and allows simply following the flow of logic making it easy to understand and practically self documents what is going on. This design choice does not add any real networking bandwidth overhead for the benefits of readability and understanding of logic gained.
I think you misunderstood that. Nobody said that. The gui does not matter regarding security. Its hackable if the server still allows the client to do things when he should not be able to do it anymore or depends on the client to make this decision. This is the case in the player controller of the demo that sends an event after movement (good) but a (ClientTo)Server event (bad). Anyway this was discussed already and you are right you could fix this via invalidating the container reference (triggered from the server - instead of the client as it’s the case right now). I’ve fixed that already. So far I just gave an answer to the post of OverRated_AU as an answer to Furinyx… because I don’t think his plans was dumb as he wrote.
Yes it looks clean. Thanks. This was even one reason why I choosed to continue without recreating it from scratch. Its easy to oversee some paths if you did not create something yourself regarding security.
Hmm, for some reason I am able to add an item to my character’s inventory but when I check for it, it isn’t returning as there. I duplicated the Misc_Human_Skull item and customized its inventory item properties and then made it so that when I use a certain actor it will give the player that new item. I am able to see the item in my inventory, drop it, pick it back up, etc. Problem is that when I call CheckInventoryForItemAmount with the new item’s ItemID and an amount of 1, HasItemAmount returns false. Any ideas?
is the check being done as the server or the client? It has to be done by the server. A good way to debug is with the print string node as it will output Server: first if the command is run on the server.
I have problem when loot a body after that my camera not moves at all
It is being run from the server so I am at a loss. Edit: It is able to see the inventory as I can get its size which returns 28. When I do a loop and print out the inventory’s contents, one of the slots says it contains the correct item.
if set parameter “Max loot items” == “Inventory size” - you see message error
You sure? I have my max loot items to 4 and inventory size to 4 and no infinite loop.
Ensure that your actor that is derived from the loot_actor has a proper loot table, and that the probabilities of obtaining an item is actually possible.
Check out the functions “Loot_Actor>Get Loot List” which is called from “Loot_Actor>Get Random Loot Items” and if you are returning a proper local loot list, ensure as I said above, that the probabilities are in a realistic range. Check out the Loot_Common data table for the DropChance which is used in assigning items to the loot list.
Hope this helps.
What version of the ARPGIS are you using? A bug introduced in Unreal made the hover states not reset when a widget is hidden.
Please check in your InventoryPlayerController that you have applied this workaround fix until epic resolves the bug.
Yes as @Zeiten says you need to make sure the loot list has enough items in the list to be less than or equal to your max items specified in the loot actor.
Can you please send me a support email with screenshots of your logic so I can try to see why things aren’t working. I can’t think of any reason why that function would be failing in your project.
ActionRPGInventory merging with Character Stats Kit
Almost done merging the ActionRPGInventory System with the Character Stats Kit from Panda Studios.
The Inventory does no effect the stats yet , but I am still working on it.
Here is a Link to my video.
Some time game run and no respond to error. I see this error after 4.14.3 update. I dont edit nothing… Only parameter from first post, and see error. Back count to 3 - game play. But some time i see again this report error…
That fixed it tnx
I find ERROR. In my Loot_Hero table one item have “drop chance” == 0.001 in code minimal value 0.01. And in item list i have 5 items not 6