/omega

MapleStory v83 Server emulator written in TypeScript.

Primary LanguageTypeScript

omega

v83 MapleStory Server emulator written in TypeScript. Inspired by projects like HeavenMS.

This project has been sidetracked for @perion/perion.

Features

  • Easy development environment
  • Uses a microservice architecture where state is decoupled into center, login, shop, and channel servers
  • Currently runs as a cluster of processes, with future support for running each service independently
  • Advanced metrics using Prometheus
  • Will support both the NX and WZ format
  • Will use multithreading to delegate compute-heavy tasks
  • Will use token-based authentication for intraserver communication

Setup and contribution

  • Fork the repository
  • Run npm install in the project directory to install the dependencies

Convention

  • Class names will use PascalCase
  • Filenames, functions, and variable names will use camelCase
  • SQL tables and columns will use snake_case
  • Tests will be written as *.test.ts and placed in the test/ directory

Running the server

  • Run the server with npm run start
  • Run the unit tests with npm run test

Client files

  • Download the client files here

Checklist

Milestones

  • Login
    • Get to login screen (handshake)
    • Auto register
    • Password verification
    • Accept TOS
    • Register gender
    • Register pin
    • Pin verification
    • Select a world
    • Select a channel
    • Character list
    • Create a character
    • Register PIC
    • Select a character
    • Delete a character
    • PIC verification

Short goals

  • Server infrastructure
    • Bootstrap process
    • Implement CenterServer
    • Implement LoginServer
    • Implement ChannelServer
    • Implement ShopServer
    • Implement packet delegation
    • Implement packet handling
  • Encryption
    • Implement AES encryption
    • Implement Shanda encryption
  • Implement packet readers/writers with Buffer
    • Output classes/interfaces
    • Input classes/interfaces
  • Implement WZ loading
    • Parse a single WZ XML file
    • Parse a WZ directory
  • Implement NX loading
    • Parse a single NX file
  • Scripting engine
  • Anti-cheat measures
    • Implement token authentication for intraserver communication
    • Implement multiclient check
  • Implement database layer
  • Implement logging
  • Implement configuration
  • Integrate Prometheus (performance benchmarking/metrics)

Long goals

  • Design cluster system to fork worker processes
  • De-couple state in order to achieve micro-service architecture
  • Use Redis as a memory store, and have a task to periodically update the DB
  • Design worker_threads system to delegate compute-heavy tasks
  • Docker support