Configuration
Configuration
Section titled “Configuration”Tarot configuration is managed through config/tarot/config.json.
Main Configuration
Section titled “Main Configuration”Location: config/tarot/config.json
Complete Structure
Section titled “Complete Structure”{ "debug": false, "bankEnabled": false, "shinyBoosts": [ { "uuid": "boost_uuid_here", "name": "Weekend Event", "multiplier": 2.0, "startTime": 1709280000000, "endTime": 1709366400000, "global": true, "playerUUIDs": [] } ], "playerLevelSpawnEquation": "math.floor(q.player_level * 0.8 + math.random(1, 10))", "mongoConnection": { "host": "localhost", "port": 27017, "database": "tarot", "username": "", "password": "", "authDatabase": "admin", "useAuth": false }}Configuration Options
Section titled “Configuration Options”Debug Mode
Section titled “Debug Mode”{ "debug": true}Enables detailed logging for troubleshooting.
Bank System
Section titled “Bank System”{ "bankEnabled": true}Enables the Pokemon bank storage system. Requires MongoDB setup.
Shiny Boosts
Section titled “Shiny Boosts”{ "shinyBoosts": [ { "uuid": "unique_boost_id", "name": "Community Event", "multiplier": 3.0, "startTime": 1709280000000, "endTime": 1709366400000, "global": true, "playerUUIDs": [] } ]}Boost Properties
Section titled “Boost Properties”- uuid: Unique identifier for the boost
- name: Display name
- multiplier: Shiny rate multiplier (2.0 = 2x chance)
- startTime: Unix timestamp (milliseconds) when boost starts
- endTime: Unix timestamp (milliseconds) when boost ends
- global: If true, applies to all players
- playerUUIDs: List of player UUIDs (if not global)
Time Conversion
Section titled “Time Conversion”Get Unix timestamps:
- Online: EpochConverter
- Command:
date +%s000(Linux/Mac)
Example:
October 1, 2025 12:00:00 PM = 1727784000000Player Level Spawns
Section titled “Player Level Spawns”{ "playerLevelSpawnEquation": "math.floor(q.player_level * 0.8 + math.random(1, 10))"}MoLang equation to calculate wild Pokemon levels based on player level.
Available Variables
Section titled “Available Variables”q.player_level: Player’s levelmath.floor(): Round downmath.ceil(): Round upmath.random(min, max): Random numbermath.min(): Minimum valuemath.max(): Maximum value
Example Equations
Section titled “Example Equations”Scaled to player level:
"math.floor(q.player_level * 0.8 + math.random(1, 10))"Level 50 player = Pokemon ~40-50
Fixed range:
"math.random(10, 30)"Always level 10-30
Progressive scaling:
"math.min(100, math.floor(q.player_level * 1.2))"Player level × 1.2, capped at 100
Level brackets:
"q.player_level < 20 ? math.random(5, 15) : q.player_level < 50 ? math.random(20, 40) : math.random(50, 75)"Different ranges based on player level
MongoDB Configuration
Section titled “MongoDB Configuration”Basic Connection
Section titled “Basic Connection”{ "mongoConnection": { "host": "localhost", "port": 27017, "database": "tarot", "useAuth": false }}Authenticated Connection
Section titled “Authenticated Connection”{ "mongoConnection": { "host": "your-mongo-server.com", "port": 27017, "database": "tarot", "username": "tarot_user", "password": "secure_password", "authDatabase": "admin", "useAuth": true }}MongoDB Atlas (Cloud)
Section titled “MongoDB Atlas (Cloud)”{ "mongoConnection": { "host": "cluster0.example.mongodb.net", "port": 27017, "database": "tarot", "username": "username", "password": "password", "authDatabase": "admin", "useAuth": true, "connectionString": "mongodb+srv://username:password@cluster0.example.mongodb.net/tarot?retryWrites=true&w=majority" }}Pokemon Scaling
Section titled “Pokemon Scaling”Pokemon size system is automatically enabled. Configure in the Scale enum:
enum class Scale(val weight: Int, val scalar: Double) { XXS(5, 0.6), XS(10, 0.75), S(20, 0.9), M(30, 1.0), L(20, 1.1), XL(10, 1.25), XXL(5, 1.5)}Weights determine spawn frequency:
- Higher weight = more common
- Scalar is the size multiplier
Shiny Boost Management
Section titled “Shiny Boost Management”Creating Time-Limited Boosts
Section titled “Creating Time-Limited Boosts”{ "shinyBoosts": [ { "uuid": "halloween_2025", "name": "Halloween Event", "multiplier": 5.0, "startTime": 1730419200000, "endTime": 1730851199000, "global": true, "playerUUIDs": [] } ]}Player-Specific Boosts
Section titled “Player-Specific Boosts”{ "shinyBoosts": [ { "uuid": "donor_boost", "name": "Donor Reward", "multiplier": 2.5, "startTime": 1709280000000, "endTime": 1711958400000, "global": false, "playerUUIDs": [ "069a79f4-44e9-4726-a5be-fca90e38aaf5", "f84c6a79-0a4e-45e0-879b-cd49ebd4c4e2" ] } ]}Stacking Boosts
Section titled “Stacking Boosts”Multiple active boosts stack multiplicatively:
Base Rate × Boost1 × Boost2 × Boost3 = Final RateExample:
- Base: 1/4096 (0.024%)
- Event 2x: 1/2048 (0.049%)
- Player 1.5x: 1/1365 (0.073%)
Reload Configuration
Section titled “Reload Configuration”Apply changes without restart:
/tarot reloadBest Practices
Section titled “Best Practices”Shiny Boosts
Section titled “Shiny Boosts”- Use descriptive UUIDs and names
- Set reasonable multipliers (2x-5x)
- Schedule around events
- Clean up expired boosts
- Monitor player engagement
Player Level Scaling
Section titled “Player Level Scaling”- Test equations with different levels
- Avoid Pokemon higher than players can handle
- Consider progression balance
- Provide variety in level ranges
Bank System
Section titled “Bank System”- Regular database backups
- Monitor storage growth
- Set player limits if needed
- Secure authentication
Performance
Section titled “Performance”- Disable debug mode in production
- Clean expired boost entries
- Monitor database size
- Optimize MongoDB queries
Example Configurations
Section titled “Example Configurations”Event Server
Section titled “Event Server”{ "debug": false, "bankEnabled": false, "shinyBoosts": [ { "uuid": "community_day", "name": "Community Day", "multiplier": 10.0, "startTime": 1730548800000, "endTime": 1730577600000, "global": true, "playerUUIDs": [] } ], "playerLevelSpawnEquation": "math.floor(q.player_level * 1.0)"}Competitive Server
Section titled “Competitive Server”{ "debug": false, "bankEnabled": true, "shinyBoosts": [], "playerLevelSpawnEquation": "math.min(100, math.floor(q.player_level * 1.5))", "mongoConnection": { "host": "localhost", "port": 27017, "database": "competitive_tarot", "useAuth": true, "username": "tarot_admin", "password": "secure_pass" }}Casual Server
Section titled “Casual Server”{ "debug": false, "bankEnabled": false, "shinyBoosts": [ { "uuid": "permanent_boost", "name": "Always Active", "multiplier": 3.0, "startTime": 1704067200000, "endTime": 2051222400000, "global": true, "playerUUIDs": [] } ], "playerLevelSpawnEquation": "math.random(10, 50)"}Troubleshooting
Section titled “Troubleshooting”Boosts Not Applying
Section titled “Boosts Not Applying”- Check start/end times are correct
- Verify UUID is unique
- Ensure global is true or playerUUIDs set
- Check system time is correct
Bank Not Working
Section titled “Bank Not Working”- Verify MongoDB is running
- Test connection details
- Check authentication credentials
- Review MongoDB logs
Level Scaling Issues
Section titled “Level Scaling Issues”- Test MoLang equation syntax
- Check for divide-by-zero
- Verify variable names
- Add debug logging