RPG MMO Server System for UE4

Yep, I definitely want to support survival type games and those are stat block related. I am adding them right now. Thanks!

You are welcome. I guess to prevent relogging to get your health fixed also consider:

bool isBleeding

?

I believe this would be covered by my Character Status system. You would use the following two BP nodes:

GetCharacterStatuses() - Gets an array of statuses affecting this character
AddOrUpdateCharacterStatus(FString StatusName, int32 StatusValue, int32 StatusDurationMinutes) - Add or update a status on this character.

So to add IsBleeding for 5 minutes with a bleed of 2 HP per whatever periodic cycle you choose in your game you might call the following:

AddOrUpdateCharacterStatus(ā€œBleedā€, 2, 5)

Then when you call GetCharacterStatuses() the array would contain a row with ā€œBleedā€, 2, 5 where the 5 would automatically be reduced to the number of minutes remaining on the effect and the effect would be automatically removed from persistent storage after 5 minutes.

You would only put long running statuses into persistent storage. There is no need to persist a 10 second status as it would be gone by the time you logged out and back in. You will have to choose where the point between short term and long term effects is for your game, but I would suggest somewhere around 1 or 2 minutes.

Sounds good to me! Are you going to provide documentation on how to add to or create new nodes for persistent data storage? Sounds easy enough but I think reference material is always a plus.

@Arixsus

Yes, I will be providing documentation in addition to the starter project which will showcase how to use each of the blueprint nodes. Here is the in progress API reference. It still has a lot of missing content, but I will be updating it as I finalize the workings of each blueprint node.

http://rpgwebapi.sabredartstudios.com/Docs/API

When I release the first beta version I will also launch a Slack channel where you can ask me questions and get clarification on the workings of any of the blueprint nodes. We can also discuss strategies to integrate the system into your project.

Sounds reasonable to make a chat channel, but given how many UE4 devs already use the ā€œsemi officialā€ UE4 Discord, you might want to make a discord channel :slight_smile:

So far!

@HostileEnvironment

Ah, yes. I forgot the UE4 channel moved from Slack to Discord last year. I haven’t been on there in awhile. I will look into Discord. Thanks.

I added a Discord server:

https://discord.gg/RxMkuJF

Nice List, but its Missing:

[FONT=courier new]int32 Gold
[FONT=courier new]int32 Score

Hehe…

The PersistentActor to inherit from is excellent news for me, because a Multiplayer World & Entity Construction Framework is exactly what I’m developing first in TheGameDevStore.VR. I’ve been gearing up to develop multi-user Editors with the development of EyeManga3D. From this Multiplayer Construction Framework, the plan is to spawn Character Creators/Weapon Crafting/Fort Building Editors in the RPG/FPS/*Survival *GameLayer. I’m currently searching for hardware to build a Player Hosted Server to assist with testing.

@TechLord

I had a field for Gold and then removed it because I thought people would probably come up with their own currency systems, but I will add it back (I use gold in my game). I will also add a field for Score that can be used for whatever the developer wants. I am also planning on adding persistent storage for an achievement system that can be used for more complex scoring systems.

This Multiplayer World & Entity Construction Framework sounds interesting. We should discuss it sometime as I am interested in how it may be able to interact with PersistentActors. PM me and we can talk on Skype or you can join me on Discord (the link is a few posts above).

Thanks!

Wow. Thanks Dartanlla. I figured the name ā€˜gold’ is generic for game-based currency in RPGs, and ā€˜score’ is generic for any basic Scoring system. In my opinion, any Game with a basic Scoring System can be function in a ā€˜Tournament’ Contests. Skill-based Cash-Driven Tournament Games are the primary monetization model for ArcadeKomodo.com and Dragon’$ Gold (D$G) was my first Tournament Game. Both of those projects are on hold until get TheGameDevStore.VR up and running. The plan is reuse the subsystems developed for TheGameDevStore.VR in Dragon’$ Gold, which were originally intended in D$G anyways.

I would love to discuss Multiplayer World & Entity Construction Framework with you and who ever else is interested. I primary use Skype for external communications. I’ll give Discord a try, learn something new.
Skype ID: [FONT=courier new]techlord_on_skype (Best Available Times: 11pm to 4am Central M-F, Anytime Sat-Sun)

Quick Status Update:

Testing is going well. I have had a lot of great help from the community. First round of bug fixes are finished.

If you are interested in joining in on the testing to get a sneak peak or discuss how this system might work in your game project, join us on Discord:

Thanks!

Cannot stress enough how much stuff he already implemented.

Testing works out fine so far, he can apply fixes in a matter of minutes or hours and he is an all around very helpful person.

The Discord is frequently used and testing could always use a little bit more help, to test different machines and such!

So far this is looking to be a very performant backend solution for most of your MMO needs and you can just settle your game project on top of it without having to care too much about the server solution!

Also: Bump.

I did some testing this weekend and found that compiling a dedicated UE4 server instead of using the UE4Editor to run listen servers is significantly faster. The spin up time for a server instance went from 12 to 14 seconds using UE4Editor to less than 2 seconds with the compiled version! It is too bad that you have to compile the UE4 engine from GitHub to be able to build dedicated server instances though (also to build for Linux).

I did some testing with Amazon AWS. Surprisingly I was able to get 3 dedicated UE4 server instances running on a t2.micro and only use 38% of CPU. Each map server took 95 MB of RAM and as I added players the RAM was only going up by around 500K per connection. The t2.micro is Amazon’s weakest server and is available in the free tier, so you can try it out for yourself at no cost. Next time I will try a larger scale test using a more powerful AWS server. Here is a screeshot of it running on a t2.micro:

This weekend I also was able to get the World Server portion of my system running on Linux using Microsoft .NET Core. This means that you can run the system on cheaper Linux servers instead of more expensive Windows servers. Thanks to @Smartay for letting me use his CentOS 7 server to try it.

This week I am finishing up the Persistent Inventory system and I should have something to share soon.

awesome news!

Looking to hear more about this project! Really good project. Keep it up!

will this work with world composition? We have 1 large map that uses it.

Does it work with world composite together?

**Like the following: **


World Origin Shifting

The World Composition editor supports shifting of the world origin by some arbitrary amount. Shifting the world origin results in adding an offset vector to all registered Actors in the world. Each Actor has an ApplyWorldOffset function which can be overridden in the child classes to do additional things. In case you have created a new AActor derived class and store absolute position values in it, you have to override ApplyWorldOffset function to make it work correctly with world origin changes and shift your absolute values in it. Rendering and physics primitives will be shifted in parallel to Actors in game thread.
Big Worlds and Multiplayer

Right now world origin shifting is not supported in the multiplayer games. Here are two solutions that can be implemented for your specific needs:

** Implement your own server solution. MMO licensees mostly do this.**

Implement some layer between clients and unreal dedicated servers which will transform shifted absolute positions from the clients and route them to the right dedicated server, which only holds part of the world where client is. 

However if you disable world origin, shifting you can run a tiled world with a dedicated server. Dedicated servers will load all distance dependent levels, and each connected client will work as usual loading only level that satisfy streaming distance settings. A server holds a list of visible levels for each client and filters Actor replication by this list.


The new Zone system I just added today will work with World Composition (I just tested it). However, I don’t think you are going to want to do that for performance reasons. Even if you get the client to only stream the levels from the server that it needs (I was not able to get this working, but there is a new undocumented option for it in 4.14), by using world composition you will be forcing the server to run content you aren’t using. You will have to test the performance to see if it will be possible, but my guess is that it will be a waste of resources. The new Zone feature is in Test Version 8 which is up, so you can give it a try.

This is not correct. World Origin Shifting in multiplayer is now supported in UE4. Pull Request - World Origin Shifting in MP - Game Development - Epic Developer Community Forums

I tried to get world origin shifting working today. It kind of worked a little in editor, but crashed in a packaged build.

World Origin Shifting is kind of pointless anyway in my server system since the whole point of my system is to split up your world into smaller maps.

We did have some good news though. With a small engine modification we were able to use World Composition to bring up a 20km by 20km system in multiplayer and then use my new Zone portals to split it up across servers. I will share more information when the testing is complete.