Thank you!
I tried it a bit, it didn’t go very well No surprise there, I am still quite a noob in regards to BP. I will need little bit more time to go over it properly.
One thing i noticed, you are comparing widgets to see if they overlap. Isn’t it potentially risky? If there are a lots of items on the ground, comparing all of them against each other, isn’t it a recipe for sluggish performance?
Once more, thank you.
You’re right, the algorithm I use here is probably not the most optimized. Its complexity is more or less O(N*N). That said you generaly don’t have more than a few dozen of items on ground and you don’t enable item display all the time. In addition, the operation performed here is not very resource intensive. It’s just a little bit of maths and the change in widget location only appens when we detect the collision. So there are no real problem with performance here.
One thing you can probably do is listing connections between widgets and iterate over these connections. Doing that, you’ll have a linear complexity over the number of connection, which is a little bit better.
This optimization is on my TODO list for the next update for this product. I’m currently working on an update for my Dungeon Generator, but I think I’ll begin to work on an update for this product just after that. I have plenty of ideas to improve this product and add more features to it . By the way, don’t hesitate to tell me if you want to see a new feature/improvement for this product. I’ll see if I can integrate it in the future.
Thank you for this explanation! Every new answer gives me more stuff to google
I am still deep, deep in noob territory, but your help gives me direction to look for solutions. Thank you!
I’ve started to play around the multiplayer mechanics now, so before I start to rewrite some of the implementation you’ve made, I thought I’d ask:
As you explain in your documentation, you’ve taken the proxy and AIcontroller approach to movement explained here Does UE4 have client-side prediction built in? - Multiplayer & Networking - Unreal Engine Forums. But why did you implement it so, that the character is on the client and the proxy is on the server? I mean the guide on the answerhub tells to do it exactly the opposite, where the proxy exists on the client and the character exists on the server and is possessed by the AIcontroller. The guide’s version makes a lot more sense to me, since it allows the server to have total authority over position. Now you’ve had to implement a tick function that updates the position of the actual character and its components, instead of just the proxy which should only be a camera. I might be missing something here, and wanted to know why you had the character exist on the client and the proxy on the server.
Hello @Groatse
Here is the comparison between the two approaches :
I did it because I find it more intuitive to possess the “real” character with the “real” controller and let all the proxy magic stuff aside from it.
As you can see the implementations are very similare. The only difference is that in my solution the AIController controls the “ghost” character and it is the “real” controller which controls the “real” character (the one with the skeletal mesh and the components).
The only drawback is that the visual representation of the character is updated with the tick function. Doing this, maybe I miss some kind of optimisation performed by the AIController to smooth the character movement.
From what I understand, in both implementations the proxy and the character are both on client and server. They also both have a Tick() function to sync the location of the proxy so that it matches with the location of the warrior.
Yeah, I guess it’s 6 of one half dozen of other. For my purposes it made a bit more sense for the server to control the character directly so there is no mismatch in a multiplayer scenario - players are usually very sensitive to arrows seemingly going past them but then getting hit…In your version this can happen because the character on the client’s screen is always late - in the original version the states of all actors on screen get pushed down from the server at the same time, but in your version there is the added time, where the player updates the location of the character.
One more comment this far for all those looking to get this package.
This project’s character does NOT use the UE4_mannequin_Skeleton for characters. This skeleton it uses, mannequin_skeleton, looks like the Mixamo skeleton which is a bit of a drag, because the skeleton doesn’t have root. You definitely should consider changing this - or better yet include even both with complete BPs.
@Groatse Yep you are right, I used the Mixamo skeleton. I’m not an animator and I considere the animations I use to be more like placeholders to show that the system works fine. It’s up to you to add your own animations. It’s on my to-do list to add my own animations based on the UE4 skeleton.
I’ll will consider changing the proxy system if you say that the impact in multiplayer is noticeable.
Thanks for all the feedbacks ! I’ll try to make a first update before the end of the summer.
Here is my current todo list for the next updates :
- A little bit of refactoring for Item system to let you bypass the initialization of weapons/armors:… in tables,
- A character based on UE4 skeleton with more animations,
- Refactoring the proxy system,
- Little improvement on the item display algorithm,
- Move the travel functionnalities inside an ActorComponent,
- Remove every references to the TopDownRPGCharacter/Controller.
Thoughts for future updates :
- Add more mechanics, like items which can’t be equipped if you don’t have stats requirement,
- Add mechants,
- Add random item generation,
- Add more skills and spells.
Under severe network stress your system is a bit more jittery and annoying for the user, but in truth there isn’t that much more difference than I originally thought (I tested with your project and then a project where I had switched the proxies, set lag to 500 and packet loss up to 50%). I can’t actually say I could’ve detected the problem I was talking about earlier - it’s only possible under severe stress when frame times get long.
However, both systems suffer from input lag (naturally) - in your system this is a bit more easy to remove, because the character is owned by the client, so technically you could issue orders on both server and client and just correct the movement through the replication system that is built in the CharacterMovementComponent (you would have to tweak the order system though). So maybe it’s not worth changing it just yet.
Cant wait to see out of the box third person character and merchant update…how long do u think you will come with this update?
@Viking0077 I don’t know yet. I’ve started working on a first update which will focus on bug fixes and little improvements and will try to release it soon.
The updates which will include more features (like merchant or random item generation) will probably not be published until September.
Ok thanks!
Hello everyone ! I’ve added a roadmap for the next updates. Currently working on V1.1
Hi. Have you concider a crafting system in future update?
And are you going to add som extra features to the TPS mode, like when you loot chest a New widget comes up with the items in the chest, press E to open/pickup item on ground. I know this is more diablo style template you have made, im just asking;)
Ah ah Crafting System is far beyond the scope of this product :). I focus more on the RPG part (damage, skills, spells, inventories,…). If I implement such a system it would be a separate product.
You already have a widget which is displayed when you open a chest. It opens the player menu focusing on the “Chest” tab. And it shows you the content of the chest.
If I implement the FPS/TPS then I would have to modify a little bit things so that they can work in FPS/TPS. The two main things to modify are the combat system and the interaction with items. So yes I’ll probably add a key to pickup items on ground.
Ok. Thanks;)
Hi again. Would it be easy to impliment dynamic combat system from markedplace to your system?
thanks
@Viking0077 It’s always difficult to mix two assets which implement similar functionalities. That said, if you have good basis in Blueprints it should be doable.
I have an old version of this asset. From what I can see from this one, most of the functionalities are implemented inside the character itself. Your strategy to mix both assets would be to use his character and add my components to it, one by one.
Few functionalities are implemented in both products :
- For health and stamina, you would have to remove his implementation and use only my StatsComponent.
- For weapon equipment you would have to use my WeaponOwner component and bypass the weapon equipment code inside his Character.
- I see that he seems to have added inventory, items and other stuff inside it’s product. You would have to use my implementation for those kind of stuff.
- For the AnimBP we have a different implementation : He launches AnimMontage from blueprint, as a result his AnimBP doesn’t have much code in it. I choose to make a more complexe animBP with all anims stored in it and selected on the fly based on the weapons you have equipped. So you would have to tweak thinks here. Also, he chooses to implement his notifies as AnimNotifyStates.
One thing you can do for this AnimBP, is keeping all his stuff and modify my animationComponent to add a variable of type AnimMontage, which is repNotified, and a LaunchAnimMontage() function which will change this variable on the server. When this variable is changed on the server, the RepNotified function will be triggered. Here you send the animMontage to play to the AnimBP. It’s not very complicated and it keep stuff networked.
The good things to keep from his asset are :
- The character,
- The AI,
- The different visual assets (anims, sound,…)
- The collision system of the weapons which is nice
- The dynamic targeting system which works well
here are my first thoughts after taking a quick look at his product.
Keep in mind that his product don’t seems to work in multiplayer.
Sounds Nice…maybe since you have his asset you can help me and make a video tutorial how to do it when you have time? Im not using multiplayer…so that not a problem;)
New 1.1 version released !
Check the list of all modifications
Featured in 1.1 :
- All animations re-worked to work with the default UE4 mannequin
- Add feedback display for damages
- Add the ability to change the outline effect color based on what is selected
- Move all the travel functionalities into a separate ActorComponent
- Move all the player Save/Load functionalities into a separate ActorComponent
- StatsComponent handle the regeneration of health/stamina over time
- Inventories can react differently to mouse interactions based on where they are displayed
- Lot of improvements and bug fixes.
Hi. Any news on next update…TPS/FPS?