MMORPG Project

Options
freakyuno
freakyuno
edited October 2013 in Tutorials and Code Sharing
Hello Photon Community,

I know this is a heavily discussed topic, but I'm attempting to piece information together from many sources, and come up with a technology direction up front, to save time and costs down the road. I'm leading the efforts for an MMO that will be entering development in the next couple of months, and wondered if someone could point me in the right direction, or at least reassure me, that there are solutions to the requirements below using the Photon technology.

We will be using the Unity3d Pro game engine for our client side implementation, which will be published initially to a standalone player (on windows and mac most likely). Our hosting solution will be Windows Azure, and the rest is undecided.

We do however know we have the following requirements:
1.) Authoritative server (Semi or Full?): We're not sure if we need a semi or full auth server at this point, I'm leaning towards a semi auth server, as I'd really like to take advantage of Unity3d's built in physics. I've seen some implementations that support Authoritative servers using Photon, and plugging a physics engine into Photon, does that mean you disable the physics on the client? Do you send RPC calls to the client for the Physics? I guess I'm curious as to how this works out. If we want to fully use Unity physics, do we need to roll a semi-auth server?

2.) Seamless World: We're interested in creating a fully seamless world (with virtually no instancing). I've seen some talk about it being "possible" using Photon and interest areas, I'm curious to know if this is supported. I'm not necessarily looking for tutorials or anything like that at this point, mainly I'm just interested in knowing that it isn't going to be a problem.

3.) Persistent Worlds: I've seen some talk about "rooms" and such and them shutting down when the last player leaves. We're interested in a fully persistent world that does not shut down. We're aware of the need to use Time sampling and such to "catch up" objects while the servers may be down for maintenance or similar scenarios, but otherwise we want the worlds to be fully persistent whether there are players or not, is there an easy way to do this?

Thank you for your consideration and assistance on these questions. :)

EDIT: If this is in the wrong section, mod's please move it as appropriate. :)

Comments

  • freakyuno
    Options
    As an update to this, I'm seeing some references to the Legion plugin / framework which seems to have dropped off the face of the earth in 2011, did this get implemented in Photon or Unity out of the box, or did it change names?
  • Tobias
    Options
    It's good you take some time to investigate such stuff.

    1) About authoritative servers, we've now got this info page:
    http://doc.exitgames.com/photon-server/ ... -reference
    If you want Unity physics: It's possible but at least as much extra work as running another collision detection engine.

    2) The "MMO Application" is more or less our proof of concept that seamless worlds work in Photon. It's only in the Server SDK, comes with full code and was used as basis for several projects already. Depending on your requirements, you may need to come up with a solution when players move (and fight) in areas that are the border between two server machines.
    Photon does not have a "out of the box one fits all magic MMO Seamless World" solution but it's fully open, flexible and a solid base to work with.

    3) We focus on the short-lived rooms but persistent worlds are possible as well. You can use any C# library or and DB in our server to persist data. You can use either format, including serialization of data to binary via our libraries. Running a world logic is of course also no problem at all.

    Legion was a project of another company that never took off. It's not part of Photon.
  • freakyuno
    Options
    Thank you for the reply Tobias, it's helpful.

    I'm more than comfortable in C# and have looked briefly at the MMO project sources included in the SDK, but there is of course, a lot for me to learn still.

    So the method I'm leaning towards, for responsiveness on the client, as well as Price / Cost per player on the server is the simplified level (terrain) export, and using a physics library on the server for collision detection (we don't need more than collision detection). Possibly Recast or something similar for Pathfinding at the server level.

    My question is, do you have any recommendations on how to export the Unity3d terrain / level data for use in a simplified system, or know of any resources where someone has accomplished this?
  • Tobias
    Options
    No, sorry. I don't know how to export terrain.
    It will depend on the target collision engine you will use and on the type of terrain you got. You also need something completely different for flat terrain compared to real 3d maps.
  • freakyuno
    Options
    For others that find this thread, the scenario I'm going to be working with will be to use Recast Navigation and some commercial (available on the Unity Asset store) plugins that enable export of Unity, map data to files readable by the C# port to Recast.

    So my setup is like this:
    1.) Develop all client 3d in Unity
    2.) Export map / level data to binary
    3.) Run Photon server, reference the C# assemblies of Recast for pathing
    4.) Run fully authoritative which will indicate walkable / non-walkable areas for players, and path finding for NPCS and other moving game objects on the server, and prevent entry on the client

    links:
    http://forum.unity3d.com/threads/160656 ... rsion-to-C

    Recast navigation is included in Unity for path finding already, the plugin enables the export of the maps created in unity, so that they can be used on the server in a server authoritative setup. As far as I can tell, the map setups would be the same on the client and server (and because there's no physics involved directly) pathfinding would be deterministic, so client side prediction would be entirely possible as well.
  • Tobias
    Options
    Thanks for posting this. I didn't know there was a exporter in the Asset Store but it totally makes sense.
    Is Recast open enough to also do collision detection for moving entities? Or is that done based on the players' entities then?
  • freakyuno
    Options
    Recast can absolutly do player collision. It's not entirely built in, because recast doesn't understand bounding boxes by nature, but that wouldn't be hard to create a wrapper for. It does not have any physics built in, but it's absolutly open enough to include a physics library, and have it return physics calculations during path's or collision returns.
  • Tobias
    Options
    Thanks for the info.
    It looks absolutely interesting as tool to export the navmesh! Let us know how it works out for you in Photon.

    Link to Recast Navigation:
    http://code.google.com/p/recastnavigation
  • Lizzy
    Options
    Do you have ready-made code and example how to export terrain to a navmesh and example how recast works on server?
  • Tobias
    Options
    Lizzy: We don't have any of that. I guess freakyuno could provide some hints but I doubt there is the time to make a tutorial.
  • Just a heads-up:
    That person is CJRgaming.com and they have sample MMO implementation there.

    Do note that this is extensive coding.