lookin good!
Will this be easy enough to modify so that the dungeon instancing system will also be able to handle adding an already made “group or raid” of players at a time?
lookin good!
Will this be easy enough to modify so that the dungeon instancing system will also be able to handle adding an already made “group or raid” of players at a time?
It should be fairly easy to use it however you want. Basically there is a PlayerGroup table in the database where you can add groups and add Players to those groups. Each group has a group name that you pick and a group type. Here are the Group Types:
1 Party
2 Raid
3 Guild
4 Team
5 Faction
6 FlightGroup
7 Alliance
8 Squad
99 Other
Then after you add players to the group you can call my Launch Dungeon blueprint node where you send in a Player Controller and a Map Name. Here is the BP to add a player to a group:
Then when I click on the Launch Dungeon button in the video it runs this BP code:
I just loop through an array of Character Names and then call Launch Dungeon on each of the Player Controllers. The first call to Launch Dungeon spins up the map and then the others go into a wait mode until it is ready to connect. The Event Notify Launch Dungeon node is called when the map instance is ready to connect to, and then I just call Travel to Map to transfer the player to the newly spun up map instance.
Let me know if there is any other functionality you need from this system.
very nice. haven’t seen the grouping list before
other functionality…
the immediate question that crossed my mind is what closes the instance? the time limit? players leaving? there are options on that and I can see that as a function of the game designer BUT some mechanism for closing would be good… otherwise having all those existing instances would wreck havoc on the servers
The number of players that can be added to a group or the minimum number to launch the dungeon can be limited by the developer in blueprints, so I don’t think I need any settings for those.
I am going to have a setting for Instance Time Limit (probably in minutes) before they get shutdown by garbage collection. This setting will be configurable per map.
Yeah, I am not 100% sure the best way to limit a player before they can enter a new instance of the same dungeon. What I will probably have to do is give you a blueprint node to get a list of all dungeon instances that a player has been a part of and the last date/time.
Right now the dungeon instance isn’t shut down until the Player Group is dissolved. Since Player Groups are persistent forever, I am going to need to add other ways to shut it down. I am going to add an Instance Time Limit and I think that will handle most cases, but to be sure I will probably give you a blueprint node to list all running Map Instances and then another blueprint node to shut down a Map Instance.
Thanks for the ideas. All good things to think about
The group transfer system is a very powerful feature. I’m getting really excited for this system. In fact, I anticipate a smaller groups of players (=> 8) visiting different ‘maps’ which equates many ue4 server instances, and several servers. So I’ve been pondering over ways to reduce my server cost.
My thought on this has been to leverage Player’s Hardware (on a voluntary basis of course) to spin up at least one new ue4 server instance to serve a min of 8 players. Its just an idea at this point, but I would be interested on your take if this is even possible.
I had this same thought. So if you are building a traditional style MMO where you are worried about cheating, then this really isn’t possible. However, if you are building a smaller Persistent World Multiplayer game where people just play with their friends then this is totally possible. In fact it is easy!
Because of how I built my World Server component, all you would have to do is bundle the World Server program (a small Windows EXE) with your game and then each player would be able to run dedicated server maps and you wouldn’t have to pay for any server hardware except the Management Server component which will be very cheap to run as it does not run UE4 and only runs my very light server software (.NET MVC service + SQL Database). When a player starts up the World Server app which would startup with your game, it registers them as an active World Server with the management system. When this happens you can set what is the maximum number of maps they can run. Then the management server will dynamically assign maps to their hardware as needed.
Added note: As far as performance, when I play my game with friends I run 3 or 4 dedicated map servers on my PC while I play the game with no noticeable FPS decrease. I have an AMD 1090T CPU from 2009 and 16 MB of RAM.
Holy Smokes Batman… Freakin Awesome! Security is always of concern, but, I do like having that option. Did you mentioned this feature previously? If not, this is a feature worthy of advertisement.
Yeah, I didn’t mention that before because I hadn’t planned on it working that way. I only thought of the idea when we started having the discussion about server cost and realized that the costs might be an issue for some people. The reason I wrote the World Server as a separate component is because I wanted to be able to run this system in a web farm. My day job for the past 10 years has been building .NET web services that run in large web farms and connect to SQL databases, so this type of thing is what I know best. Luckily it turns out that a large web farm is pretty much the same as running distributed across many client PC’s. So I really don’t have to change much of anything (maybe just a client setting where they can pick the maximum number of map instances they want to run) to get it to work that way if that is what you want. Obviously security and cheating are issues, but depending on the kind of game you want to build maybe it doesn’t matter. I play my game with just 4 of my close friends, so I shouldn’t have to worry about cheating… Although I did move the dice rolling into the game just to keep them honest
I’m liking it! Should be pretty simple set up transition portals I would assume? I.E. Player A walks into a portal and it spins up the instance. Players B-E take their time and eventually walk through the portal and see player A standing there angry at them. Sorta how WoW does it I guess. Splitting up game play events like this shouldn’t tax the core worlds as much and it gives players unique experiences to their group.
Over the past few days I’ve thought a lot of how to minimize server requirements and keep game play interesting. Going off what Bruno has stated I can say that ARK servers are required to be pretty hefty for 100 players, but at the same time a lot of the overall world is dynamic. Trees, rocks, sticks, AI, player housing and so on. I think stuff like this is what drives up the memory cost to what it is. If your world is more on the static side I think you’d be able to squeeze a lot more out of it since the server doesn’t have to keep tabs on them other then collision. This means to do something like ARK, Rust, H1Z1 or the like where everything is interactive you’d obviously sacrifice overall world player count for game play mechanics.
Ideally my world is pretty static except for players and AI, but the combat system is trace based. But as a back up I’ve been toying with a more traditional system with math checks for distance and angles then apply damage. This as well would reduce what the server has to keep track of but you lose out on other game play mechanics as well because the server has to keep EVERYTHING in memory. You could reduce cost by forcing players into a listen type setup but you really open up pandoras box that way.
At the end of the day, you basically have to pro/con gameplay vs server metal. Can you really afford what you want to do? The simpler the game play the less of a server burden. But as well people also need to take into consideration with any dedicated/hosted type server project how latency will effect the game play. A dedicated server isn’t something you can just plop onto a CDN and call it a day. As with any online game people will try and play it no matter the region its hosted so be prepared.
Does that also support player hosted servers connected to a hive kind of system? I would be so into this. Im struggling right now figuring out how I want to run dedicated servers with a centralized login. So this might come in really handy. Especially your licensing options seem very generous given how much effort and even more know how it takes. If you want I can help you test this at well once you are at that stage, but I guess you will do that first with people that you can trust.
So far
EDIT: This system should be able to create a total new era of games, with an open world kind of map, refined with group dungeons for people that reached a certain gear level, player level and so on!
Yes, building portals to dungeons will be easy. I am actually adding those portals to the starter project right now, so they will come included and you can modify them as needed for your type of game.
Server requirements are definitely a concern when working on the projected expenses in your business plan. However, I am not so sure that adding more connected players to a server will significantly increases the memory usage. Adding players should increase network usage and CPU usage, but my guess is that it will only have small effect on memory usage.
Right now I am working hard on getting an early release of my system out, so that I can get some developers to help me test it and provide feedback. After that I plan on spinning up some servers on AWS where I will test UE4 dedicated server performance and then I can give you a better idea of what your projected costs will be. However, as you say, in the end it all comes down to how well you build your game.
From the little bit of performance testing I have done, the only area I am concerned about is AI. Using the AI system in UE4 seems to hit the CPU really hard even with just a few dozen running at once. My guess is that if your game needs a lot of AI mobs you will have to write your game so it only runs AI when it is in range of someone viewing it. This is one of the reasons that for my game I opted to have smaller maps and then just chain a ton of them together.
While I hadn’t originally intended on supporting player hosted servers because of the whole cheating aspect, I am going to support it now. In fact when I run my game in development mode, I run the World Servers on my PC while the login/management server runs in the cloud. The World Server software will allow you to create a hive like system. Here is what the World Server program currently looks like:
This version is for you to install on your World Servers if you have a web farm. It is also for you to use while developing with this system. I will also make a version that you can distribute with your game where all the options are preset by you and not editable by the player. Then you just kick off this program when your game launches and then their PC is connected to the hive
Of course you can only use this method of running dedicated servers on player PC’s if you are not concerned about cheating. Because the servers would be running on player PC’s the players would be able to manipulate your world in any way they choose. So just something to keep in mind.
I was more looking at something like an arma3-esque game, so I dont care if they modify the dedicated server, I actually want them to be mod-able in some way at least. So each server owner can just have a bit of freedom over what they want to do with it :). The totally hived system with playerstat saving across all servers not really my plan right now. Even though it should be easily manageble with your system I reckon :). Ill keep watching this Thread, keep up the good work!
Sounds like you want more of a white listed master server list.
@Dartanlla I wasn’t saying specifically that players would drive up memory cost, but what is going on in your world will and you would have to sacrifice world “density” in order to keep overall ram costs down.
@Dartanlla I have one more question. Since you have all the querying already in place would it be possible to store dynamic objects placed in a world in a database? From the screenshots I couldnt figure that out.
Given from the graph you showed one would need another persistant storage hooked up to the world server right?
One of the next features I will be adding is a new class called PersistentActor. You will be able to inherit any of your blueprints from this class to make your actor persistent. Persistent actors will save their position and optional custom data across server sessions. Possible uses for persistent actors include building/construction systems and dropped items you don’t want to despawn.
My server system has a persistent storage database (Microsoft SQL Server Express) hooked up to the Login/Management Server. Your UE4 dedicated server instances communicate directly with the Login/Management Server which is able to interface with the persistent storage.
Currently only the player characters are saved on persistent storage, but I am adding persistent Inventory and also providing the PersistentActor class to allow you to add additional content to the persistent storage as needed.
I am working on finalizing the set of default persistently stored character stat fields. These are not the only fields you can store, these are just the ones that will be built in and will not require using custom data. These are only single field stats (no arrays) and Inventory and Buff/Debuff related fields are stored separately. Now is your chance to make your case for any fields you want added to this list
Default Persistent Character Data
FString CharacterName
float X
float Y
float Z
float RX (rotation)
float RY (rotation)
float RZ (rotation)
int32 CharacterLevel
int32 HitDie (HP per Level)
int32 MaxHP (if you want to calculate HP your way set to non-zero, otherwise set to zero to use automatic)
int32 Wounds (Current amount of damage that gets subtracted from the maximum HP if you want to use the CurrentHealth() function)
int32 Strength
int32 Dexterity
int32 Constitution
int32 Intellect
int32 Wisdom
int32 Charisma
int32 Spirit
int32 Magic
int32 Fortitude
int32 Reflex
int32 Willpower
int32 BaseAttackBonus
int32 Speed
int32 Initiative
int32 NaturalArmor
int32 Resistance
int32 TeamNumber
int32 Perception
int32 Acrobatics
int32 Climb
int32 Stealth
What about craft skills?
Well that would be a hell lot of Specific. I think too specific for this. How about:
int32 Thirst
int32 Hunger
For the more realistic MMO approach.
Since crafting skills are going to fairly specific for each game I am going to leave those to my Custom Data system. Basically I give you two BP nodes. One is called GetCustomCharacterData() that you can call and get an Array of all your custom data (name/value pairs) the other is AddOrUpdateCustomCharacterData(FString CustomFieldName, FString CustomValue) which will allow you to add or update custom data related to your character.