A visual editor for Endless Online quest files (.eqf)
Features • Installation • Usage • Configuration • Credits • License
Note: This project is a fork of OakTree by CoderDan, modified to focus specifically on quest editing functionality.
A quest creation tool for Endless Online servers.
- Node-Based Flow Diagram — Design quest flows visually with drag-and-drop states
- Auto-Layout — Automatic graph layout using the Dagre algorithm
- Click-to-Edit — Double-click any state node to edit its properties
- Visual Connections — See rule transitions between states at a glance
- Unified Actions & Rules — Actions and rules displayed in a single section with color-coded borders (green for actions, blue for rules)
- Drag-and-Drop Reordering — Interleave actions and rules in any order with persistent ordering
- Save as Template — Quickly save states as reusable templates
- Load Template - Quickly load from a state template
- Reset State — Clear all actions/rules and start fresh
- Monaco Editor — Professional code editor with syntax highlighting
- EQF Language Support — Custom syntax highlighting for quest files
- Auto-Completion — IntelliSense for actions and rules
- Go-to Navigation — Click state references to jump to definitions
- Split View — Edit in both visual and text modes simultaneously
- Quest List — Browse and search all quests in your project
- Quick Create — Create new quests with custom ID, name, and version
- Quest Templates — Browse, create, and manage reusable quest templates (Fetch, Kill, Delivery, etc.)
- State Templates — Define and organize state templates for common quest patterns
- Custom Templates — All templates are saved as
.eqffiles in~/.EndlessQuestWriter/config/
- Actions Editor — Edit server actions configuration directly within the application
- Rules Editor — Modify server rules configuration with a dedicated editor interface
- Drag-and-Drop Reordering — Reorder items with changes persisted to config files
- Server Linking — Link directly to your game server's directory
- Auto-Discovery — Automatically finds quests in
data/quests/ - 5-Digit Auto Naming — Quest files use standard naming (
00001.eqfto99999.eqf) - Multiple Projects — Switch between different server directories
- Dark/Light Theme — Toggle between themes in settings
- Auto-Save — Changes save automatically when using the visual editor
- Keyboard Shortcuts — Quick save with Ctrl+S
- Status Indicators — See last saved time and quest statistics
- Node.js 16+ and npm
# Clone the repository
git clone https://github.com/3818919/EndlessQuestWriter.git
cd EndlessQuestWriter
# Install dependencies
npm install
# Run in development mode
npm run devDownload the latest release for your platform from the Releases page:
- Windows:
.exeinstaller - macOS:
.dmgdisk image - Linux:
.AppImageportable application
- Launch the Application
- Link a Server Directory — Click "Link Server Directory" and select your game server's root folder
- Browse Quests — Your existing quests will appear in the left panel
- Create or Edit — Select a quest to edit or click "New Quest" to create one
| Mode | Description |
|---|---|
| Visual | Node-based flow diagram editor (default) |
| Split | Side-by-side visual and text editors |
| Text | Full-screen Monaco text editor |
- Click the + New Quest button
- Enter a Quest ID (1-99999, next available is suggested)
- Enter a Quest Name
- Set the Version number
- Optionally mark as Hidden
- Click Create Quest
- Open a quest in Visual or Split mode
- Click the Load Template... dropdown
- Select a template (Fetch Quest, Kill Quest, etc.)
- The template will replace the current quest content
On first launch, default configuration files are copied to your user directory:
| Platform | Location |
|---|---|
| Linux | ~/.EndlessQuestWriter/config/ |
| macOS | ~/.EndlessQuestWriter/config/ |
| Windows | C:\Users\<username>\.EndlessQuestWriter\config\ |
Define available quest actions:
[AddNpcText]
signature = `AddNpcText(npcQuestId, "message")`
description = Displays dialog text from an NPC in the quest dialog window.
[GiveItem]
signature = `GiveItem(itemId, amount)`
description = Gives the player a specified amount of an item.Define available quest rules:
[TalkedToNpc]
signature = `TalkedToNpc(npcQuestId)`
description = Satisfied when the player talks to the specified NPC.
[GotItems]
signature = `GotItems(itemId, amount)`
description = Satisfied when the player has the specified items.Add custom quest templates as .eqf files:
~/.EndlessQuestWriter/config/templates/
├── Delivery Quest.eqf
├── Empty Quest.eqf
├── Fetch Quest.eqf
├── Kill Quest.eqf
└── My Custom Quest.eqf ← Your custom template
The filename (without .eqf) becomes the template name in the dropdown.
The editor expects your game server to have this structure:
server/
├── data/
│ └── quests/
│ ├── 00001.eqf
│ ├── 00002.eqf
│ ├── 00003.eqf
│ └── ...
└── ...
Quest files use the EQF format:
Main
{
questname "My Quest Name"
version 1
}
State Begin
{
desc "Starting state description"
action AddNpcText(1, "Hello, adventurer!");
action ShowHint("Talk to the NPC to begin.");
rule TalkedToNpc(1) goto QuestAccepted
}
State QuestAccepted
{
desc "Player accepted the quest"
action AddNpcText(1, "Bring me 5 apples.");
action SetQuestState("Collect 5 Apples");
rule GotItems(100, 5) goto QuestComplete
}
State QuestComplete
{
desc "Quest completion"
action AddNpcText(1, "Thank you!");
action RemoveItem(100, 5);
action GiveExp(500);
action End();
}
Build distributable packages for each platform:
# Build for current platform
npm run build
# Build for specific platforms
npm run build:win # Windows (.exe)
npm run build:mac # macOS (.dmg)
npm run build:linux # Linux (.AppImage)Output files are placed in the build/ directory.
| Technology | Purpose |
|---|---|
| Electron | Desktop application framework |
| React 18 | UI framework |
| TypeScript | Type-safe JavaScript |
| Monaco Editor | Code editor component |
| React Flow | Node-based diagram editor |
| Dagre | Graph auto-layout algorithm |
| Vite | Build tool |
| electron-builder | Application packaging |
OakTree — A comprehensive Endless Online pub editor
Created by CoderDan (@do4k)
Endless Quest Writer — Focused quest editing with enhanced visual tools
Modified by Vexx — vexx.info
- Icons from Material UI
This project is licensed under the MIT License — see the LICENSE file for details.
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Made with ❤️ for the Endless Online community
