Just read the "Orbiter Forum Space Station" thread and thought a thousandth time how good will it be to have a MMORPG-like multiplayer engine for Orbtier. Such a thing, unfortunately, will require core rewriting or extensive support from addon makers - both requirements seem unlikely to be satisfied in close perspective.
However, Artlav's dynamic satellites addon proved that the main concepts are not impossible. So, while a full multiplayer engine looks like being a quite scaled task, we can look forward for something a little less ambitious. So I've decided to express my ideas here - maybe someone will get inspired by it and we'll get one step closer to a integrated multi-pilot environment.
As a (hobby) developer and a software engineer, I know, how difficult it is to work without a clean task. So, this idea is formulated like a "requirements specification" for a programmer - so, if one will want to realize it, he will have a clear plan to start with.
So - let's wrap up with lyrics and go straight to dry descriptions.
Orbiter Common Register concept
Main objective:
To create a common vessel and base environment.
Components:
Client requirements:
- a common set of station components (e.g. Greg Burch's "Space Station Building Blocks 4.0") and other addons (like Dansteph's Prelude base)
System work may be split into 2 main modes:
Mode 1.Download
The SQL database is a central point of the system. Here are stored:
A server, which is run on the same or separate machine, serves requests from clients. On request, it gives out a full list of currently launched at current client MJD stations and satellites (see below).
On Orbiter startup, the plugin connects to the server and downloads the information about launched stations and satellites, and then repeats the request on a regular basis - e.g. every year of game time. Only stations that 1.are present at current MJD 2.are present in client addons are taken into account. So, for example:
- If you fly an Atlantis in 2000AD, you'll not see a new station, built in 2145
- If you take a two-year (sim-time, of course
) ride in Vespucci-class ship to Saturn, starting in 2144, you'll get a nice surprise when back - a shiny year-ago built station
Also, the client plugin should make its own cahce of data, so if the connection is not available, the player still gets an enjoyable environment.
Mode 2.Upload
More complex part.
When a VSA wants to create a space station, it should make a request to administrator. He will add a dummy module with given parameters to the database. Then, the VSA may begin to assemble the station. The process is as follows:
So, the client plugin should have (in a window opened by Ctrl+F4):
- Login window
- Refresh Now button (with a 3 minute delay timer to avoid DoS)
- "Add component..." menu, active only when logged in.
- "Delete component" menu.
The transaction log should help if a "saboteur" of one of groups maliciously deletes a VSA's property or fills the database with random vessels.
Waiting for comments.
However, Artlav's dynamic satellites addon proved that the main concepts are not impossible. So, while a full multiplayer engine looks like being a quite scaled task, we can look forward for something a little less ambitious. So I've decided to express my ideas here - maybe someone will get inspired by it and we'll get one step closer to a integrated multi-pilot environment.
As a (hobby) developer and a software engineer, I know, how difficult it is to work without a clean task. So, this idea is formulated like a "requirements specification" for a programmer - so, if one will want to realize it, he will have a clear plan to start with.
So - let's wrap up with lyrics and go straight to dry descriptions.
Orbiter Common Register concept
Main objective:
To create a common vessel and base environment.
Components:
- (My)SQL database
- standalone or PHP/ASP server
- administration interface
- client Orbiter plugin
Client requirements:
- a common set of station components (e.g. Greg Burch's "Space Station Building Blocks 4.0") and other addons (like Dansteph's Prelude base)
System work may be split into 2 main modes:
Mode 1.Download
The SQL database is a central point of the system. Here are stored:
- Logins/passwords
- User groups
- Station data. Precisely:
- Type, name and orbit elements
- Creation MJD
- Owner group
- Transaction (vessel creation/destruction) log
A server, which is run on the same or separate machine, serves requests from clients. On request, it gives out a full list of currently launched at current client MJD stations and satellites (see below).
On Orbiter startup, the plugin connects to the server and downloads the information about launched stations and satellites, and then repeats the request on a regular basis - e.g. every year of game time. Only stations that 1.are present at current MJD 2.are present in client addons are taken into account. So, for example:
- If you fly an Atlantis in 2000AD, you'll not see a new station, built in 2145
- If you take a two-year (sim-time, of course
Also, the client plugin should make its own cahce of data, so if the connection is not available, the player still gets an enjoyable environment.
Mode 2.Upload
More complex part.
When a VSA wants to create a space station, it should make a request to administrator. He will add a dummy module with given parameters to the database. Then, the VSA may begin to assemble the station. The process is as follows:
- a VSA authorized pilot logs in to the system. (see below)
- The pilot flies to the station and installs a module.
- After that he opens the plugin window and tells to add a module XXX, docked to dock #Z of module YYY, to the database
- Server checks if YYY belongs to that user group
- Server checks if YYY's dock #Z is free
- If everything is right, the server adds the new module XXX, owned by the VSA to the DB. Voila!..
So, the client plugin should have (in a window opened by Ctrl+F4):
- Login window
- Refresh Now button (with a 3 minute delay timer to avoid DoS)
- "Add component..." menu, active only when logged in.
- "Delete component" menu.
The transaction log should help if a "saboteur" of one of groups maliciously deletes a VSA's property or fills the database with random vessels.
Waiting for comments.
Last edited: