- Renamed config key from GuildMealDuration to ClanMealDuration - Changed unit from minutes to seconds (matching upstream convention) - Updated handler to use seconds-based calculation - Updated documentation and examples This fixes the bug where clan meals were not being shared between guild members when using a config.json with the upstream naming.
17 KiB
Erupe Configuration Guide
This guide explains the important configuration sections in config.json. Use config.example.json as a template.
Table of Contents
- Basic Settings
- Development Mode
- Gameplay Options
- Logging
- Discord Integration
- In-Game Commands
- Courses
- Database
- Server Configuration
Basic Settings
{
"Host": "127.0.0.1",
"BinPath": "bin",
"Language": "en",
"DisableSoftCrash": false,
"HideLoginNotice": true
}
| Setting | Type | Description |
|---|---|---|
Host |
string | Server IP address. Leave empty to auto-detect. Use "127.0.0.1" for local hosting |
BinPath |
string | Path to binary game data (quests, scenarios, etc.) |
Language |
string | Server language. "en" for English, "jp" for Japanese |
DisableSoftCrash |
boolean | When true, server exits immediately on crash (useful for auto-restart scripts) |
HideLoginNotice |
boolean | Hide the Erupe welcome notice on login |
LoginNotices |
array | Custom MHFML-formatted login notices to display |
Additional Settings
PatchServerManifest: Override URL for patch manifest serverPatchServerFile: Override URL for patch file serverScreenshotAPIURL: Destination for screenshots uploaded to BBSDeleteOnSaveCorruption: Iftrue, corrupted save data will be flagged for deletion
Development Mode
{
"DevMode": true,
"DevModeOptions": {
"AutoCreateAccount": true,
"CleanDB": false,
"MaxLauncherHR": false,
"LogInboundMessages": false,
"LogOutboundMessages": false,
"MaxHexdumpLength": 256,
"DivaEvent": 0,
"FestaEvent": -1,
"TournamentEvent": 0,
"MezFesEvent": true,
"MezFesAlt": false,
"DisableTokenCheck": false,
"QuestDebugTools": false,
"SaveDumps": {
"Enabled": true,
"OutputDir": "savedata"
}
}
}
| Setting | Type | Description |
|---|---|---|
DevMode |
boolean | Enables development mode (more verbose logging, development logger format) |
AutoCreateAccount |
boolean | ⚠️ SECURITY RISK: Auto-create accounts on login (disable in production) |
CleanDB |
boolean | ⚠️ DESTRUCTIVE: Wipes database on server start |
MaxLauncherHR |
boolean | Sets launcher HR to HR7 to join non-beginner worlds |
LogInboundMessages |
boolean | Log all packets received from clients (very verbose) |
LogOutboundMessages |
boolean | Log all packets sent to clients (very verbose) |
MaxHexdumpLength |
number | Maximum bytes to display in packet hexdumps |
DivaEvent |
number | Diva Defense event status (0 = off, higher = active) |
FestaEvent |
number | Hunter's Festa event status (-1 = off, higher = active) |
TournamentEvent |
number | VS Tournament event status (0 = off, higher = active) |
MezFesEvent |
boolean | Enable/disable MezFes event |
MezFesAlt |
boolean | Swap Volpakkun for Tokotoko in MezFes |
DisableTokenCheck |
boolean | ⚠️ SECURITY RISK: Skip login token validation |
QuestDebugTools |
boolean | Enable quest debugging logs |
SaveDumps.Enabled |
boolean | Enable saving character data dumps |
SaveDumps.OutputDir |
string | Directory for save data dumps |
Gameplay Options
{
"GameplayOptions": {
"FeaturedWeapons": 1,
"MaximumNP": 100000,
"MaximumRP": 50000,
"DisableLoginBoost": false,
"DisableBoostTime": false,
"BoostTimeDuration": 120,
"ClanMealDuration": 3600,
"BonusQuestAllowance": 3,
"DailyQuestAllowance": 1
}
}
| Setting | Type | Description |
|---|---|---|
FeaturedWeapons |
number | Number of Active Feature weapons generated daily |
MaximumNP |
number | Maximum Network Points (NP) a player can hold |
MaximumRP |
number | Maximum Road Points (RP) a player can hold |
DisableLoginBoost |
boolean | Disable login boost system |
DisableBoostTime |
boolean | Disable daily NetCafe boost time |
BoostTimeDuration |
number | NetCafe boost time duration in minutes (default: 120) |
ClanMealDuration |
number | Clan meal activation duration in seconds (default: 3600) |
BonusQuestAllowance |
number | Daily Bonus Point Quest allowance |
DailyQuestAllowance |
number | Daily Quest allowance |
Logging
{
"Logging": {
"LogToFile": true,
"LogFilePath": "logs/erupe.log",
"LogMaxSize": 100,
"LogMaxBackups": 3,
"LogMaxAge": 28,
"LogCompress": true
}
}
Erupe uses lumberjack for automatic log rotation and compression.
| Setting | Type | Description |
|---|---|---|
LogToFile |
boolean | Enable file logging (logs to both console and file) |
LogFilePath |
string | Path to log file (directory will be created automatically) |
LogMaxSize |
number | Maximum log file size in MB before rotation (default: 100) |
LogMaxBackups |
number | Number of old log files to keep (default: 3) |
LogMaxAge |
number | Maximum days to retain old logs (default: 28) |
LogCompress |
boolean | Compress rotated log files with gzip |
Log Format:
- When
DevMode: true: Console format (human-readable) - When
DevMode: false: JSON format (production)
Log Analysis: Use the built-in log analyzer tool to analyze logs. See Log Analysis Guide or CLAUDE.md.
Discord Integration
{
"Discord": {
"Enabled": false,
"BotToken": "",
"RealtimeChannelID": ""
}
}
Erupe includes an optional Discord bot that posts real-time server activity to a Discord channel.
| Setting | Type | Description |
|---|---|---|
Enabled |
boolean | Enable Discord integration |
BotToken |
string | Discord bot token from Discord Developer Portal |
RealtimeChannelID |
string | Discord channel ID where activity messages will be posted |
How Discord Integration Works
When enabled, the Discord bot:
- Connects on Server Startup: The bot authenticates using the provided bot token
- Monitors Game Activity: Listens for in-game chat messages and events
- Posts to Discord: Sends formatted messages to the specified channel
What Gets Posted:
- Player chat messages (when sent to world/server chat)
- Player connection/disconnection events
- Quest completions
- Special event notifications
Setup Instructions
-
Create a Discord Bot:
- Go to Discord Developer Portal
- Create a new application
- Go to the "Bot" section and create a bot
- Copy the bot token
-
Get Channel ID:
- Enable Developer Mode in Discord (User Settings → Advanced → Developer Mode)
- Right-click the channel you want to use
- Click "Copy ID"
-
Add Bot to Server:
- Go to OAuth2 → URL Generator in the Developer Portal
- Select scopes:
bot - Select permissions:
Send Messages,Read Message History - Use the generated URL to invite the bot to your server
-
Configure Erupe:
{ "Discord": { "Enabled": true, "BotToken": "YOUR_BOT_TOKEN_HERE", "RealtimeChannelID": "YOUR_CHANNEL_ID_HERE" } }
Implementation Details:
- Bot code: server/discordbot/discord_bot.go
- Uses discordgo library
- Message normalization for Discord mentions and emojis
- Non-blocking message sending (errors are logged but don't crash the server)
In-Game Commands
{
"Commands": [
{
"Name": "Rights",
"Enabled": false,
"Prefix": "!rights"
},
{
"Name": "Raviente",
"Enabled": true,
"Prefix": "!ravi"
},
{
"Name": "Teleport",
"Enabled": false,
"Prefix": "!tele"
},
{
"Name": "Reload",
"Enabled": true,
"Prefix": "!reload"
},
{
"Name": "KeyQuest",
"Enabled": false,
"Prefix": "!kqf"
},
{
"Name": "Course",
"Enabled": true,
"Prefix": "!course"
}
]
}
In-game chat commands allow players to perform various actions by typing commands in the chat.
Available Commands
| Command | Prefix | Description | Usage |
|---|---|---|---|
| Rights | !rights |
Modify account rights/permissions | !rights <number> |
| Raviente | !ravi |
Control Raviente event | !ravi start, !ravi cm (check multiplier) |
| Teleport | !tele |
Teleport to locations | !tele <location> |
| Reload | !reload |
Reload all players and objects in current stage | !reload |
| KeyQuest | !kqf |
Get/set Key Quest flags | !kqf get, !kqf set <hex> |
| Course | !course |
Enable/disable subscription courses | !course <course_name> |
How Commands Work
- Player Types Command: Player sends a chat message starting with the command prefix
- Command Parser: Server checks if message matches any enabled command prefix
- Command Handler: Executes the command logic
- Response: Server sends feedback message to the player
Implementation Details:
- Commands are parsed in handlers_cast_binary.go:90
- Command map is initialized from config on server startup
- Each command has its own handler function
- Disabled commands return a "command disabled" message
Example Command Usage
Reload Command:
Player types: !reload
Server: "Reloading all players and objects..."
Server: Removes all other players/objects from view
Server: Re-adds all players/objects with updated data
Course Command:
Player types: !course premium
Server: "Premium Course enabled!"
Server: Updates player's account rights in database
Server: Updates player's rights in current session
KeyQuest Command:
Player types: !kqf get
Server: "Your KQF is: 0123456789ABCDEF"
Player types: !kqf set 0000000000000000
Server: "KQF set successfully!"
Security Considerations
- Rights Command: Can grant admin privileges - disable in production
- KeyQuest Command: Can unlock content - disable if not desired
- Commands are per-server configuration (can be different per channel server)
Courses
{
"Courses": [
{"Name": "HunterLife", "Enabled": true},
{"Name": "Extra", "Enabled": true},
{"Name": "Premium", "Enabled": true},
{"Name": "Assist", "Enabled": false},
{"Name": "N", "Enabled": false},
{"Name": "Hiden", "Enabled": false},
{"Name": "HunterSupport", "Enabled": false},
{"Name": "NBoost", "Enabled": false},
{"Name": "NetCafe", "Enabled": true},
{"Name": "HLRenewing", "Enabled": true},
{"Name": "EXRenewing", "Enabled": true}
]
}
Courses are subscription-based features in Monster Hunter Frontier (similar to premium subscriptions).
| Course | Description |
|---|---|
HunterLife |
Hunter Life Course - Basic subscription benefits |
Extra |
Extra Course - Additional benefits |
Premium |
Premium Course - Premium features |
Assist |
Assist Course - Helper features |
N |
N Course |
Hiden |
Hiden Course - Secret/hidden features |
HunterSupport |
Hunter Support Course |
NBoost |
N Boost Course |
NetCafe |
NetCafe Course - Internet cafe benefits |
HLRenewing |
Hunter Life Renewing Course |
EXRenewing |
Extra Renewing Course |
Note: When Enabled: true, players can toggle the course on/off using the !course command (if enabled). When Enabled: false, the course is completely locked and cannot be activated.
Database
{
"Database": {
"Host": "localhost",
"Port": 5432,
"User": "postgres",
"Password": "",
"Database": "erupe"
}
}
PostgreSQL database configuration.
| Setting | Type | Description |
|---|---|---|
Host |
string | Database host (default: localhost) |
Port |
number | Database port (default: 5432) |
User |
string | Database user |
Password |
string | Database password (required, must not be empty) |
Database |
string | Database name |
Setup:
- Install PostgreSQL
- Create database:
createdb erupe - Apply schema:
psql -U postgres -d erupe -f schema.sql - Apply patches in order:
psql -U postgres -d erupe -f patch-schema/01_patch.sql
See CLAUDE.md for more details.
Server Configuration
Sign Server (Authentication)
{
"Sign": {
"Enabled": true,
"Port": 53312
}
}
Legacy sign server for authentication and account management.
| Setting | Type | Description |
|---|---|---|
Enabled |
boolean | Enable the sign server |
Port |
number | Port number (default: 53312) |
SignV2 Server (Modern Authentication)
{
"SignV2": {
"Enabled": false,
"Port": 8080
}
}
Modern HTTP-based sign server (alternative to legacy sign server).
| Setting | Type | Description |
|---|---|---|
Enabled |
boolean | Enable the modern sign server |
Port |
number | Port number (default: 8080) |
Note: Only enable one sign server at a time (Sign OR SignV2, not both).
Channel Server
{
"Channel": {
"Enabled": true
}
}
Channel servers handle actual gameplay sessions, quests, and player interactions.
| Setting | Type | Description |
|---|---|---|
Enabled |
boolean | Enable channel servers (required for gameplay) |
Entrance Server
{
"Entrance": {
"Enabled": true,
"Port": 53310,
"Entries": [
{
"Name": "Newbie",
"Description": "",
"IP": "",
"Type": 3,
"Recommended": 2,
"AllowedClientFlags": 0,
"Channels": [
{ "Port": 54001, "MaxPlayers": 100 },
{ "Port": 54002, "MaxPlayers": 100 }
]
}
]
}
}
Entrance server manages world/server selection and character lists.
| Setting | Type | Description |
|---|---|---|
Enabled |
boolean | Enable entrance server (required) |
Port |
number | Entrance server port (default: 53310) |
Entrance Entries
Each entry represents a "world" in the server list.
| Field | Type | Description |
|---|---|---|
Name |
string | World name displayed to players |
Description |
string | World description (optional) |
IP |
string | Override IP (leave empty to use Host setting) |
Type |
number | World type: 1=Normal, 2=Cities, 3=Newbie, 4=Tavern, 5=Return, 6=MezFes |
Recommended |
number | Recommendation status: 0=None, 2=Recommended, 6=Special |
AllowedClientFlags |
number | Client version flags (0 = all allowed) |
Channels |
array | List of channel servers in this world |
Channel Configuration
| Field | Type | Description |
|---|---|---|
Port |
number | Channel server port (must be unique) |
MaxPlayers |
number | Maximum players per channel |
CurrentPlayers |
number | Current player count (auto-updated, can be set to 0) |
World Types Explained:
- Newbie (Type 3): For new players, typically recommended
- Normal (Type 1): Standard gameplay world
- Cities (Type 2): Social/town areas
- Tavern (Type 4): Bar/tavern areas
- Return (Type 5): For returning players
- MezFes (Type 6): MezFes event world
Complete Example
Here's a minimal production-ready configuration:
{
"Host": "",
"BinPath": "bin",
"Language": "en",
"DisableSoftCrash": true,
"HideLoginNotice": false,
"DevMode": false,
"DevModeOptions": {
"AutoCreateAccount": false
},
"GameplayOptions": {
"MaximumNP": 100000,
"MaximumRP": 50000
},
"Logging": {
"LogToFile": true,
"LogFilePath": "logs/erupe.log",
"LogMaxSize": 100,
"LogMaxBackups": 7,
"LogMaxAge": 30,
"LogCompress": true
},
"Discord": {
"Enabled": false
},
"Commands": [
{"Name": "Reload", "Enabled": true, "Prefix": "!reload"},
{"Name": "Course", "Enabled": true, "Prefix": "!course"}
],
"Database": {
"Host": "localhost",
"Port": 5432,
"User": "erupe",
"Password": "CHANGE_ME",
"Database": "erupe"
},
"Sign": {
"Enabled": true,
"Port": 53312
},
"Channel": {
"Enabled": true
},
"Entrance": {
"Enabled": true,
"Port": 53310,
"Entries": [
{
"Name": "Main",
"Type": 1,
"Channels": [
{ "Port": 54001, "MaxPlayers": 100 }
]
}
]
}
}
Additional Resources
- CLAUDE.md - Development guide
- config.example.json - Full example configuration
- Log Analyzer Tool - Log analysis utilities