I would like to present UniVerse MMO Framework. UniVerse is a Fast, Reliable UDP based Networking Framework built on top of a Customized version of the Lidgren Networking Library.
UniVerse features:
-
UniVerse Lobby - A full complete Lobby System complete with a Console based Lobby Server, Game Server SDK and Client SDK with example Unity based GUI.
-
Console based Authentication Server
-
MySQL Persistence layer
-
IronPython Scripting Engine built into the UniVerse Core so it can be accessed from a Server or Client
-
Server SDK which can be used in ANY C# based Application (Unity3D, Console, WinForms, XNA, ect). The Server SDK holds no dependencies on Unity.
-
Unity3D based Client SDK. (More Client SDKs to be added in the future including our own Custom Client using Ogre3D and other opensource Libraries).
-
Custom Messaging System that allows you to register to receive specific message types in different parts of your code
-
Game Logic based around Server and Client side Plugins which register to receive the message types they care about.
Example HelloWorld Server Plugin:
class HelloWorldPlugin : IPlugin
{
public void Start()
{
}
public string getName()
{
return "HelloWorldPlugin";
}
public void onActivate()
{
UniVerseCore.EngineCore.RegisterMessage(HelloWorldClient.MSG_HELLO_WORLD, HelloWorldHandler);
}
public void onDeactivate()
{
}
public void HelloWorldHandler(object obj)
{
NetIncomingMessage msg = (NetIncomingMessage)obj;
Debug.LogError(msg.ReadString());
NetOutgoingMessage outMsg = UniVerseUnity.Instance.CreateMessage();
outMsg.Write("helloworld.helloback");
outMsg.Write("This is a message from the Server!");
UniVerseUnity.Instance.getServer().getServer().SendMessage(outMsg, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered);
}
}
class HelloWorldClient
{
public static MessageType MSG_HELLO_WORLD = new MessageType("helloworld.hello");
}
I have created some basic Demos with typical MMO features and the demo runs great. I needed more work on AI, and player/mob Movement but I had combat looking great and other features. I am currently developing a Lobby based game called “City Life” with UniVerse and I’m doing some Prototypes. I haven’t done any large scale testing as of yet to see how many players are supported on a single Server but that will come as I continue development of City Life.
City Life’s Forum Thread: CityLife MORPG - Community Showcases - Unity Discussions
I plan on packaging the whole system into a MORPG or MMORPG (Depending on my testing) Development Kit that will include ALL of the features of a typical Class based WoW Style MMO. Developers will then be able to script their own Quests, Items, Mobs, ect. using Python.
Sounds pretty interesting. Surprised not much responses but guess there is a little bit of competition in this area or most Unity games are probably single player
I am release a early Alpha Version of UniVerse with in the next few hours and I have created a Forum to discuss UniVerse’s Development located at: http://dev.riseofheroesmmo.com/
Made our first release…
http://dev.riseofheroesmmo.com/releases/UniVerse.zip
Been following your work and sounds great
was trying to test but, do not know where to start, no docs 
does the server run inside a unity instance too?
how does it work? client connect to lobby, then lobby connects users to server , can it be several servers connected to lobby for a zoned mmo type of game, can the servers intercommunicate eachothers for handling players acrossed them?
or is this some sort of room based game being a unity server instance a single room where the lobby links current rooms connected?
any chance for a demo project or at least a quick guide, instructions or description on how it works, example of mysql db dump etc…
thanks
Also, i fired up the UniVerseLobby.exe
but it seems to be a CPU resource hungry little app, eats more than 50% of my cpu cores when running,
any advise on how to make it idle while waiting for connections?
unless this idles once a server is connected??
please advise
The Lobby Server is optional. You can create a MMO with out using the Lobby Server. I’ll have to work on improving performance of the Lobby Server.
The package comes with some example Plugins both for the Server and the Client. The Authentication Plugin shows current use of MySQL. I believe there are also example on how to set up the Python Scripting Engine. I’ll add Documentation as I further Develop UniVerse. The best I can offer right now is to come join our forum and ask any questions you run into there.
Uploaded a fix for the Lobby Server. It should take much less CPU now.
http://dev.riseofheroesmmo.com/releases/UniVerseLobby0.1.1.zip
ohh yeah, the new lobby now idles beautifully. 1% cpu load 
at least it idles correctly and performance will depend now on current connection load and not the actual app idling high.
thanks for the quick update.
regarding the client and server plugins,
what i meant is a very quick doc about how to put it all together, the current files for client and server are just plugin folder and script folders, no scenes in the files no components attached etc…
so my questions was a request for a quick startup doc.
like:
what script goes where to initialize the server and what script goes after etc… to connect server to lobby etc…
so far they are just scripts and I am just guessing what goes first and where and how, so a very quick tut or maybe a very basic unity package with demo scene where we see all components added to see the actual flow.
not sure if i am explaining myself correctly.
thanks in advanced.
Ok here is an example for use with the Lobby. This uses the scripts provided in the initial release. It requires the use of Python for configuring your Game Server and it requires access to MySQL if your going to use the Authentication Plugin.
The Data folder that is included you will need to make sure you add to your Compiled Game’s data folder (“You Application”_data located in the root directory with your exe).
http://dev.riseofheroesmmo.com/releases/LobbyExample.zip
The Config Python file looks like this:
from Configuration import *
GameConfig.Config.serverName = “(Official) Prototype Server v1”
GameConfig.Config.serverHost = “127.0.0.1”
GameConfig.Config.mapName = “smallCityCenter”
GameConfig.Config.serverPort = 12345
GameConfig.Config.maxPlayers = 10
GameConfig.Config.playerCount = 0
I think this is pretty self explanatory.
thanks,
well, before you showed this lobbyExample project , i was playing with the files and started to attach components to the scene whatever made sense and i had several compiling errors and was confused, so hence the reason i was requesting a quick demo.
but now with the demo , i think i was close to what i was doing, altho still getting the same compiling errors i had before.
so here is my compiling error which i cant not seem to overcome or find why in the server project?
I see the Data folder and config files there in the server but still getting the compile error.
i loked on the hierarchy project and all public vars are being used, looked at the file where it references the Data folder for the config , but it is all there.
so what am i missing?
any advise on what is happening here?
thanks
Do you have the Game Configuration Script attached?
line 27 is this: GameConfiguration.config.ServerHost = GameConfig.Config.serverHost;
Which tells me you don’t have the GameConfiguration Script attached or you do have the Data Folder as part of your project. In order to get it working in your Editor you need to add the Data folder to your root Assets folder as well.
yup it is attached,
but:
it is right infront of my nose, lol, I missed the reference link:
is this hardcoded into the compiled .dll plugins?
cant seem to find in scripts.
but, nnow that you mentioned,
the data folder is inside my project, do i need to do another copy of the Data folder outside the Asset folder?
well, i just reconfirm and started from scratch, i am using the server example, the Data folder is inside my Assets folder of my project, also the game configuration file is attached and still getting the same error.
:
this reference might be hardcoded in the plugins .dlls files since i do not have a user in my windows setup named: ElectricCrowGaming so this should be your windows user where it might be hardcoded somewhere in the compiled .dlls files
so i think this is why this error popus up
No, no other copy of the Data folder is needed until you go to compile it. As long as your running it from with in the Editor you only need the one Data folder in your Assets folder.
GameConfig.Config.dataPath = DataPath() + “/Data/”;
PythonScript.getInstance().setScriptDirectory(GameConfig.Config.dataPath + “Configs/”);
PythonScript.getInstance().runConfig(“/config.py”);
public string DataPath()
{
string path = Application.dataPath;
if (Application.platform == RuntimePlatform.OSXPlayer)
{
path += “/…/…/”;
}
else if (Application.platform == RuntimePlatform.WindowsPlayer)
{
path += “/…/”;
}
return path;
}
There’s how it’s getting the Data path. Nothing is hard coded. It’s getting Application’s Data Path which should be pointing to your data path.
so i dont understand why i am getting this path :
C:/Users/ElectricCrowGaming
in the error, it sure is not my windows user, something is hardcoded somewhere that references this windows user path
Try deleting all of the Meta files and see if it corrects the paths.
Try this Unity Package and see if it works.
1676959–105084–ExampleGameServer.unitypackage (1.48 MB)
nope, still same error,
i imported the ExampleGameServer.unitypackage into a new freshly created empty project, opened up the LobbyExample scene,
in the scene hierarchy selected Lobby game object, and added my server info to the already attached Game Configuration component script ie:
server name, server host, map, port max users etc… hit play button from my editor and same nullreference error below:
just dont understand whats up.
maybe someone else can try it out in their system, to make sure it is not just my pc setup the issue.
Ok try commenting out the following lines and see if it works:
GameConfiguration.config.ServerHost = GameConfig.Config.serverHost;
GameConfiguration.config.ServerName = GameConfig.Config.serverName;
GameConfiguration.config.MapName = GameConfig.Config.mapName;
GameConfiguration.config.MaxPlayers = GameConfig.Config.maxPlayers;
GameConfiguration.config.ServerPort = GameConfig.Config.serverPort;
GameConfiguration.config.PlayerCount = GameConfig.Config.playerCount;