v83 MapleStory Server emulator written in TypeScript. Inspired by projects like HeavenMS.
This project has been sidetracked for @perion/perion.
- 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
- Fork the repository
- Run
npm install
in the project directory to install the dependencies
- 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 thetest/
directory
- Run the server with
npm run start
- Run the unit tests with
npm run test
- Download the client files here
- 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
- 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)
- 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