This project is for research and study purposes
JVM-based open-source server application for KMS version 1.2.31.
This project is derived from OdinMS and incorporates source code from a commercial game server. Contributions from OdinMS authors and numerous individual developers have been integrated into the original source code.
Perry is focused on providing an authentic gameplay experience. It excludes monetization, events, and donations, offering a pure, old-fashioned gaming experience. Registered trademarks and donation-related elements have been removed from the source code. Additionally, modern development APIs and libraries such as Kotlin, Dokka, and Ktor have been implemented.
Important
You must obtain the client files independently, as they are copyright-protected and not included in this project.
- Language: Kotlin
- Frameworks:
- Database Support: MySQL, MariaDB, MS SQL Server, PostgreSQL, SQLite, H2
- Build System: Gradle (Kotlin DSL)
- Documentation: Dokka
- Logging: Logback / Kotlin-logging
- Java Development Kit (JDK) 11 or higher.
- SQL Database: One of the supported databases (MySQL, PostgreSQL, MariaDB, MSSQL, etc.).
- Operating System: Any OS that supports Java 11 (Windows, Linux, macOS).
- Configure Database: Set up a database server of your choice.
- WZ Files: Convert your client WZ files into XML format.
- Settings: Create a
settings.jsonfile by copyingsettings.json.sampleand modifying it with your database credentials and paths.cp settings.json.sample settings.json
- Directory Structure: Ensure the
wz/,scripts/, andsettings.jsonare in the project root or the same directory as the executable.
Run the server directly:
./gradlew runRun tests:
./gradlew testCreate distribution packages (Zip or Tar):
./gradlew distZip
./gradlew distTarThe outputs will be located in build/distributions/.
Generate HTML documentation using Dokka:
./gradlew DokkaHtml- Server Main:
MainKt(insrc/main/kotlin/main.kt)- Supports
downloadsubcommand for fetching remote assets (WZ/Scripts).
- Supports
- Web API:
WebApiApplication(insrc/main/kotlin/webapi/WebApiApplication.kt)
Key configuration areas in settings.json:
database: Connection details (host, port, user, password, type).worlds: Server rates (exp, meso, drop) and channel counts.wzPath: Path to the XML WZ data.webApi: Toggle and port for the Ktor-based Web API.logging: Directory and retention policy for logs.
configPath: (Optional) System property to specify a custom path forsettings.json. Default is./settings.json.
.
├── build.gradle.kts # Gradle build configuration
├── settings.json # Main configuration (you must create this)
├── src/main/kotlin # Core server logic (Kotlin)
├── src/main/java # Legacy or utility code (Java)
├── src/main/resources # Static resources and web assets
├── src/test # Unit and integration tests
├── scripts/ # Game scripts (NPC, Portal, Reactor, etc.)
├── wz/ # Game data in XML format
└── logs/ # Server logs
Refer to the GitBook documentation for detailed API information.
- Complete JavaDoc documentation using Dokka
- Fully implement Web API support
- Resolve NPC interaction issues during quest acceptance
- Separate Login, World, and Channel servers for independent operation
Refer to the LICENSE file for full details.
- JVM: AdoptOpenJDK 11 (OpenJ9), Trava OpenJDK 11
- OS: Windows 10, Fedora 34
- DB: MSSQL 2019, Azure SQL, Yugabyte, PostgreSQL 14, MariaDB 10.6