Wiki - simply-Gamic/test GitHub Wiki

API

Endpoints:

  • Register --> Registers a new user (Email, password, invite key)

  • Authenticate --> Authenticates a user (Email, password)

  • Verify User Key --> Checks the databank for the given user (User Key)

  • Get all users --> Lists the entire user databank (User Key) | Can be filtered via ID and also via email ending (example: @gmail.com)

  • Get user data --> Retrieves user data (User Key, Target User ID)

  • Update User --> Updates the users databank entry (User Key, Target User ID) | Possible updates: add_/set_cubits, add_/set_water, add_/set_tylium, add_/set_titanium, add_/set_experience

  • Add Server --> Adds a new server in the API databank (Name, shortname, address, port, User Key)

  • Get Servers --> Gets all servers stored in the API databank (User Key)

  • Get Server --> Gets the data of a specific server (shortname)

  • Get Server Status --> Gets the current status of a server (shortname)

  • Set Server Status --> Start/Stop/Restart a server (user key, shortname, status) | Every call takes a max of 1 minute to be effective as the server only checks for this endpoint on a per minute basis

  • Set Server --> sets the user to a server (user key, server id)

  • Generate Invite Key --> generates an invite key for registration (user key)

  • Get pending invites --> lists all unused invite keys (user key)

  • Connection Cooldown Log --> shows users on cooldown (user key)

[!IMPORTANT] For every API call you need to provide the API Key!

Everything is envisioned to run via the API. Stuff like gameports, specific data etc. should run locally on our API and the Gameserver as well as the Client and Launcher don't store any data, they only call the API for the data they need. This ensures safety and let's us control every move made on the Server as all runs through the API. It also simplifies Moderation Tools as you can wrap those into a Website


Client

Changes:

  • Port selection is changed to take the port from a command line argument to be able to have multiple servers through the launcher

  • Chat port was changed from static to the game server port given through the argument +1 to have one chat for every game server. Example: Launcher takes game port from API, here 78010, client starts with game port 78010 and chat port 78011

  • In the future the developer console will be changed to be more useful

Client is taken from the last published version of BSGO. Goal is to keep it as far as og a possible to keep credibility and trust. If we can ever revert our changes back it would be nice.

Future changes in order to add new ships, new weapons, buffs, systems etc. are possible but harder to do.


Game Server

Overall structure:

  • Written in c# with netcore 7.0+

  • Uses MongoDB

  • Server authorative structure --> everything is managed Server side which ensures the Client can't be modified in a destructive way, as the Server verifies all of the data first before working with it

  • The databank for Players items etc is stored in a big databank which will theoretically make it possible to have cross server player accounts

  • there will be a seperate databank accessed by each server, which holds all the item IDs etc. and serves the Servers individually


Chat Server

Overall structure:

  • Written in Python (Future plans to port to c#)
  • Stores each Client Connection and also stores faction/clan/moderator level
  • When a Client enters a System, he sends "meta data" and get's sorted into the Right "System Chat room"
  • Chat Server manages all the meta data (where someone is, which channels he should have access to etc.)
  • This Server authoritive setup allows everyone with the right metadata structure to communicate with the Chat Server --> discord Integration is possible as well as inter Server communication from one Chat to another
  • theoretically there's some flaws like the abuse of the Client sending metadata which could enable users to send wrong metadata in order to access Chats they shouldn't be able to see
  • Every message to and from the chat server ends with "#" to ensure the full correct message was send. If the # (end of message character) is missing, the message was either not formated correctly or the message wasn't send correctly and is thus dismissed.

Discord integration

Overall:

  • Discord is integrated into each Server step
  • Server Status can be shown in a Discord Server as well as direct Discord to Game Chat communication which also allows to run commands from discord via the Chat Server. Discord Rich Presence would also be possible with this Setup.
  • The Game Chat is also completely backed up through discord as each message gets logged in discord --> Unlimited space for logs opposed to logging the Chat on our own servers

Vision

Future goals:

  • a

Launcher:

  • the launcher is basically just a big API wrapper with a UI. It fetches everything via the API and the user key given from the Login into the launcher. It then starts the game via a .bat command like:

[!Note] D: & cd BSGO\client\live & .\bsgo.exe +projectID 1 +userID 1 +sessionID c7faac2379e35f6404eced5f484210ba +trackingID 6cc3a6e78a753f29ccabaa0f79b7041b +gameServer 127.0.0.1 +port 27080 +cdn client/live +language en +session b1b23d2fa2769bd59d4c1b67554599b88381afd653b156aa54cb689969ab4fc1 +version 3b27980a3b7dd77e597872106ca98000

  • the goal for the launcher is to be as secure as possible and packed as a non reversable .exe in order to ensure saftey. It will also hold certain values and mechanics to verify the game client is not modified to prevent hacking/modding
  • Essentially a web based launcher would be the endgoal.

Vision:

The ultimate endgoal is having a product which enables anyone to open their own private BSGO Server but have it all be linked by a central API and databank. This then enables Players to choose their favourite Server to Play on but are able to Change Servers at anytime without losing Progress and without needing several launchers etc. Also having all Servers in one launcher gives an easy overview over available Servers and news for each one


Security:

Security is a big concern and we already have several ideas on how to achieve maximum Security on each Point (Server, Client, Launcher) This is an important Point and should Always be a Focus


Ideas:

!News for serve inside API (be able to Show News like new updates etc via API)!

Current Status:

  • Login
  • Character creation (Faction, Name, Appearance
  • All ships
  • Players see each other in system
  • Jump between systems
  • Basic chat
  • Database with users
  • Basic Launcher
  • Movement
  • Outposts/Dock & Undock
  • Basic chat