# TrinityCore Playerbot User Guide **Version:** WoW 11.2 Compatible **Target Audience:** Server administrators, developers, and power users **Module:** Optional TrinityCore enhancement --- ## Table of Contents 1. [Introduction](#introduction) 2. [Getting Started](#getting-started) 3. [Configuration Guide](#configuration-guide) 4. [Chat Commands](#chat-commands) 5. [Common Use Cases](#common-use-cases) 6. [Troubleshooting](#troubleshooting) 7. [Advanced Topics](#advanced-topics) 8. [FAQ](#faq) --- ## Introduction ### What is TrinityCore Playerbot? TrinityCore Playerbot is an optional module that adds AI-controlled player characters (bots) to your World of Warcraft server. It enables: - **Single-Player Experience**: Play the full MMORPG without other human players - **Dungeon Practice**: Run dungeons with AI-controlled party members - **Testing**: Test raid mechanics, quests, and game systems - **Population Enhancement**: Add life to low-population servers ### Key Features - **5000 Bot Capacity**: Designed to support up to 5000 concurrent bots - **13 Classes Supported**: All WoW classes with specialized AI - **Smart Following**: Bots automatically follow group leaders - **Combat Assistance**: Bots engage in combat when group members fight - **Quest Automation**: Bots can pickup and complete quests (when idle) - **Group Coordination**: Proper role-based positioning and targeting - **Performance Optimized**: <10% server impact with proper configuration ### System Requirements **Minimum:** - TrinityCore 11.2+ (master branch) - 8 GB RAM (for ~100 bots) - 4 CPU cores - MySQL 9.4+ **Recommended (500+ bots):** - 32 GB RAM - 8+ CPU cores - SSD storage - MySQL 9.4+ with optimized configuration --- ## Getting Started ### Step 1: Compilation The Playerbot module is **optional** and disabled by default. To enable it: #### Windows (Visual Studio) ```powershell # Navigate to build directory cd C:\TrinityCore\build # Generate with Playerbot enabled cmake .. -DBUILD_PLAYERBOT=1 # Open solution and build start TrinityCore.sln # Build → Build Solution (F7) ``` #### Linux/Mac (Make) ```bash # Navigate to build directory cd ~/TrinityCore/build # Generate with Playerbot enabled cmake .. -DBUILD_PLAYERBOT=1 # Compile make -j$(nproc) # Install make install ``` **Verification:** ```bash # Check if module compiled ls -la server/game/libplayerbot.a # Linux/Mac dir server\game\playerbot.lib # Windows ``` ### Step 2: Configuration File The Playerbot module uses a **separate configuration file** from `worldserver.conf`. #### Create Configuration File 1. **Locate Template:** ``` etc/playerbots.conf.dist ``` 2. **Copy to Active Config:** ```bash # Linux/Mac cp etc/playerbots.conf.dist etc/playerbots.conf # Windows copy etc\playerbots.conf.dist etc\playerbots.conf ``` 3. **Edit Configuration:** Open `etc/playerbots.conf` in your preferred text editor. #### Essential Settings ```ini ################################################################################################### # ESSENTIAL SETTINGS - Must Configure ################################################################################################### # Enable the playerbot system Playerbot.Enable = 1 # Maximum bots allowed globally (adjust based on RAM) # Guideline: 100 bots ≈ 1 GB RAM Playerbot.GlobalMaxBots = 100 # Maximum bots per player account Playerbot.MaxBotsPerAccount = 5 # Bot-to-player ratio (2.0 = 2 bots per real player) # Set to 0 to disable dynamic spawning Playerbot.BotToPlayerRatio = 2.0 # Enable dynamic spawning (auto-spawn based on player count) Playerbot.EnableDynamicSpawning = 1 ``` ### Step 3: Database Setup The Playerbot module can use either: 1. **Existing characters database** (recommended) 2. **Separate playerbot database** (advanced) #### Option 1: Use Existing Characters Database (Recommended) No additional setup required. Bots will be stored in the standard `characters` database. #### Option 2: Create Separate Database (Advanced) ```sql -- Create database CREATE DATABASE `playerbot_characters` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Grant permissions GRANT ALL PRIVILEGES ON `playerbot_characters`.* TO 'trinity'@'localhost'; FLUSH PRIVILEGES; ``` **Update Configuration:** ```ini Playerbot.Database.Name = "playerbot_characters" ``` ### Step 4: First Launch 1. **Start worldserver:** ```bash ./worldserver ``` 2. **Check Logs:** Look for initialization messages: ``` [INFO] PlayerbotConfig: Successfully loaded from ./etc/playerbots.conf [INFO] BotSpawner initialized - Max Total: 100, Max Per Zone: 10, Max Per Map: 50 [INFO] Playerbot: Module loaded successfully ``` 3. **Login to Game:** Use your GM account (security level 3+) 4. **Verify Module:** Type in-game: ``` .bot ``` You should see available bot commands. --- ## Configuration Guide ### Core Configuration ```ini ################################################################################################### # CORE SETTINGS ################################################################################################### # Enable/disable entire playerbot system # Values: 0 (disabled), 1 (enabled) # Default: 0 Playerbot.Enable = 1 # Global maximum bots (server-wide) # Higher values require more RAM # Guideline: 100 bots ≈ 1 GB RAM, 1000 bots ≈ 10 GB RAM # Default: 500 # Recommended: 100 (low-end), 500 (mid-range), 1000 (high-end) Playerbot.GlobalMaxBots = 500 # Maximum bots per player account # Default: 10 # Recommended: 5-10 for normal play, 50+ for testing Playerbot.MaxBotsPerAccount = 10 ``` ### Performance Tuning ```ini ################################################################################################### # PERFORMANCE SETTINGS ################################################################################################### # Bot update interval (milliseconds) # Lower = more responsive, higher = better performance # Range: 50-1000 ms # Default: 100 # Recommended: 100 (smooth), 200 (balanced), 500 (performance) Playerbot.UpdateInterval = 100 # AI decision time limit (milliseconds) # Maximum time AI can spend per decision # Prevents lag from complex AI calculations # Default: 50 # Recommended: 50 (normal), 100 (complex AI) Playerbot.AIDecisionTimeLimit = 50 # Spawn batch size (bots spawned per batch) # Larger batches = faster spawning but brief lag spikes # Default: 10 # Recommended: 5 (smooth), 10 (balanced), 20 (fast) Playerbot.SpawnBatchSize = 10 # Delay between spawn batches (milliseconds) # Higher values = smoother spawning # Default: 100 # Recommended: 100-500 Playerbot.SpawnBatchDelay = 100 ``` ### Dynamic Spawning ```ini ################################################################################################### # DYNAMIC SPAWNING ################################################################################################### # Enable dynamic spawning (auto-spawn based on players) # Values: 0 (disabled), 1 (enabled) # Default: 1 Playerbot.EnableDynamicSpawning = 1 # Bot-to-player ratio # How many bots to spawn per real player # 0.0 = no automatic spawning # 2.0 = 2 bots per player (recommended) # 5.0 = 5 bots per player (crowded) # Default: 2.0 Playerbot.BotToPlayerRatio = 2.0 # Minimum bots per zone (even with 0 players) # Keeps zones populated for testing # Default: 10 Playerbot.MinimumBotsPerZone = 5 # Maximum bots per zone # Prevents overcrowding # Default: 50 Playerbot.MaxBotsPerZone = 50 # Maximum bots per map # Global limit per continent/instance # Default: 200 Playerbot.MaxBotsPerMap = 200 ``` ### Database Configuration ```ini ################################################################################################### # DATABASE SETTINGS ################################################################################################### # Database connection timeout (seconds) # Default: 30 Playerbot.Database.Timeout = 30 # Enable connection pooling (recommended) # Improves performance for many bots # Default: 1 Playerbot.Database.EnablePooling = 1 # Maximum database connections for bot operations # Higher = better performance with many bots # Too high = MySQL connection limit issues # Default: 10 # Recommended: 5 (< 100 bots), 10 (100-500 bots), 20 (500+ bots) Playerbot.Database.MaxConnections = 10 ``` ### Logging Configuration ```ini ################################################################################################### # LOGGING SETTINGS ################################################################################################### # Log level (higher = more detailed) # 0 = Disabled # 1 = Fatal errors only # 2 = Errors # 3 = Warnings # 4 = Info (recommended for normal use) # 5 = Debug (for troubleshooting) # 6 = Trace (very detailed, huge logs) # Default: 4 Playerbot.Log.Level = 4 # Log file path (relative to worldserver binary) # Default: "Playerbot.log" Playerbot.Log.File = "Playerbot.log" # Enable timestamp in logs # Default: 1 Playerbot.Log.Timestamp = 1 # Separate log files by category # Creates files like Playerbot_AI.log, Playerbot_Combat.log # Useful for debugging specific systems # Default: 0 Playerbot.Log.SeparateCategories = 0 ``` ### Security Settings ```ini ################################################################################################### # SECURITY SETTINGS ################################################################################################### # Prevent direct login to bot accounts # Bots can only be controlled via commands # Recommended: 1 # Default: 1 Playerbot.Security.PreventBotLogin = 1 # Log all bot actions for audit trail # Creates large logs, use only for debugging # Default: 0 Playerbot.Security.LogBotActions = 0 # Maximum gold a bot can carry (prevents exploits) # Default: 1000 (in copper, = 10 gold) # 0 = no limit Playerbot.Security.MaxGoldPerBot = 100000 ``` ### AI Behavior ```ini ################################################################################################### # AI BEHAVIOR SETTINGS ################################################################################################### # Follow distance (yards) # How far behind leader bots should follow # Default: 5.0 Playerbot.AI.FollowDistance = 5.0 # Combat assist range (yards) # Distance at which bots assist group members in combat # Default: 30.0 Playerbot.AI.CombatAssistRange = 30.0 # Auto-loot enabled # Bots automatically loot corpses # Default: 1 Playerbot.AI.AutoLoot = 1 # Auto-accept group invites # Bots automatically accept group invitations # Default: 1 Playerbot.AI.AutoAcceptGroupInvites = 1 # Quest automation enabled (when idle) # Bots pickup and complete quests when not in combat/following # Default: 0 (disabled for now - experimental) Playerbot.AI.EnableQuestAutomation = 0 ``` --- ## Chat Commands ### Command Prefix All bot commands start with `.bot` or `.pbot`: ``` .bot [arguments] .pbot [arguments] ``` ### Basic Commands #### `.bot spawn ` Creates a new bot character and spawns it. **Parameters:** - `class` - Character class name (warrior, paladin, hunter, rogue, priest, shaman, mage, warlock, druid, deathknight, monk, demonhunter, evoker) - `race` - Race name (human, orc, dwarf, nightelf, undead, tauren, gnome, troll, bloodelf, draenei, worgen, goblin, pandaren, etc.) - `gender` - Gender (male, female) - `name` - Character name (must be unique) **Examples:** ``` .bot spawn warrior human male BotWarrior .bot spawn priest nightelf female HealBot .bot spawn mage bloodelf female Fireblast .bot spawn paladin dwarf male HolyTank ``` **What Happens:** 1. Creates new character in database 2. Spawns character in starting zone 3. Bot immediately enters world 4. Character appears in `.bot list` --- #### `.bot add ` Adds an existing character as a bot. **Parameters:** - `characterName` - Name of existing character on your account **Example:** ``` .bot add MyExistingMage ``` **Requirements:** - Character must exist in database - Character must belong to your account - Character must not already be logged in **Use Case:** Convert your alt characters to bots --- #### `.bot remove ` Removes one or all bots. **Parameters:** - `name` - Specific bot name - `all` - Remove all your bots **Examples:** ``` .bot remove BotWarrior # Remove specific bot .bot remove all # Remove all your bots ``` **What Happens:** 1. Bot logs out gracefully 2. Removes from active bot list 3. Character remains in database (can re-add later) --- #### `.bot list` Lists all your active bots. **Output:** ``` Your active bots (3): - BotWarrior (Level 80 Warrior) - HealBot (Level 70 Priest) - Fireblast (Level 60 Mage) ``` **Shows:** - Bot name - Level - Class --- #### `.bot info ` Displays detailed bot information. **Example:** ``` .bot info BotWarrior ``` **Output:** ``` Bot Information: BotWarrior Class: Warrior Race: Human Level: 80 Specialization: Arms Health: 45000 / 50000 (90%) Resource: 80 / 100 Rage AI State: FOLLOWING Group: [GroupName] (Tank role) Current Action: Following [YourCharacter] Active Strategies: follow, group_combat Performance: - Average Update Time: 0.8ms - Actions Executed: 1523 - Total Updates: 15234 ``` --- #### `.bot stats` Shows global bot statistics. **Output:** ``` Playerbot System Statistics: Total Spawned: 150 Currently Active: 45 Peak Concurrent: 52 Failed Spawns: 2 Success Rate: 98.7% Average Spawn Time: 125ms Total Despawned: 105 Performance Metrics: Average Update Time: 1.2ms Total Memory Usage: ~450MB Database Queries/sec: 42 ``` --- ### Control Commands #### `.bot follow` Makes all your bots follow you. **Example:** ``` .bot follow ``` **Effect:** - All your bots activate "follow" strategy - Bots move to follow distance behind you - Bots maintain formation based on role **Note:** Bots automatically follow when invited to your group --- #### `.bot stay` Makes all your bots stop following. **Example:** ``` .bot stay ``` **Effect:** - Deactivates "follow" strategy - Bots stop moving - Bots stay at current location --- #### `.bot attack` Makes all your bots attack your current target. **Example:** ``` .bot attack ``` **Requirements:** - You must have a target selected - Target must be attackable **Effect:** - Bots engage your target - Uses appropriate class rotation - Continues attacking until target dies or combat ends --- #### `.bot defend` Makes bots defend you from attackers. **Example:** ``` .bot defend ``` **Effect:** - Bots attack anything attacking you - Prioritizes threats to you - Stays near you for protection --- #### `.bot heal` Makes healer bots focus on healing. **Example:** ``` .bot heal ``` **Effect:** - Healer bots prioritize healing - Focus on lowest health targets - Uses efficient healing rotation **Note:** Only affects healer classes (Priest, Paladin, Shaman, Druid, Monk, Evoker) --- ### Debug Commands #### `.bot debug ` Enables detailed logging for specific bot. **Example:** ``` .bot debug BotWarrior on # Enable debug .bot debug BotWarrior off # Disable debug ``` **Output Location:** `Playerbot.log` with DEBUG level entries **Use Case:** Troubleshooting AI behavior, combat issues, movement problems --- ## Common Use Cases ### Solo Dungeon Practice **Goal:** Practice dungeon mechanics with AI party. **Setup:** 1. **Spawn a balanced group:** ``` .bot spawn warrior human male Tank # Tank .bot spawn priest nightelf female Healer # Healer .bot spawn mage human female DPS1 # DPS .bot spawn rogue human male DPS2 # DPS ``` 2. **Invite to group:** - Use standard group invitation (`/invite BotName`) - Bots auto-accept and start following 3. **Enter dungeon:** - Queue for dungeon or enter manually - Bots follow and engage in combat when you fight **Tips:** - Ensure "follow" strategy is active (`.bot follow`) - Pull carefully - bots will assist but may not kite - Healer bots prioritize lowest health ally - Tank bots use threat abilities when spec supports it --- ### Testing Raid Mechanics **Goal:** Test raid encounter mechanics with bots. **Setup:** 1. **Spawn raid-sized group:** ```bash # Use a script to spawn 10-25 bots for i in {1..10}; do .bot spawn warrior human male Tank$i .bot spawn priest human female Healer$i .bot spawn mage human male DPS$i done ``` 2. **Form raid:** - Create raid group - Invite all bots - Assign roles in raid frames 3. **Enter raid instance:** - Bots follow raid leader - Engage when raid leader attacks **Limitations:** - Bots may not handle complex mechanics (don't move from fire, etc.) - Best for testing basic encounter flow - Advanced mechanics require manual control --- ### Leveling with Bots **Goal:** Level with AI companions. **Setup:** 1. **Spawn appropriate level bots:** ``` .bot spawn hunter human male BowBot .bot spawn priest human female HealyBot ``` 2. **Invite to group:** - Standard group invitation - Bots follow and assist in combat 3. **Quest together:** - Bots help kill quest mobs - Share quest completion credit - Healers keep you alive **Tips:** - Bots scale to nearby player levels (if enabled in config) - Bring a healer bot for safety - Bots automatically loot if configured --- ### Populating Low-Pop Server **Goal:** Add life to empty zones. **Configuration:** ```ini # In playerbots.conf Playerbot.EnableDynamicSpawning = 1 Playerbot.BotToPlayerRatio = 5.0 Playerbot.MinimumBotsPerZone = 20 Playerbot.GlobalMaxBots = 500 ``` **Effect:** - Bots spawn automatically in popular zones - When players login, more bots spawn (ratio 5:1) - Zones feel populated even with few players - Bots despawn when players logout to conserve resources **Management:** - Monitor via `.bot stats` - Adjust ratio based on performance - Use lower ratios on weaker servers --- ### Testing New Content **Goal:** Test quest chains, dungeons, raids with bots. **Setup:** 1. **Create test characters:** ``` .bot spawn warrior human male TestTank .bot spawn priest human female TestHeal ``` 2. **Set to max level (GM command):** ``` .character level TestTank 80 .character level TestHeal 80 ``` 3. **Gear them:** ``` .additem [item_id] ``` 4. **Test content:** - Invite to group - Run through quest chains - Enter dungeons/raids - Observe bot behavior **Benefits:** - Fast iteration on encounter design - No need for human testers - Consistent testing environment --- ## Troubleshooting ### Bot Not Spawning **Symptoms:** - Command completes but bot doesn't appear - Error message: "Failed to spawn bot" **Diagnosis:** ``` # Check logs tail -f Playerbot.log # Check active bots .bot stats ``` **Common Causes:** 1. **Global bot limit reached** ```ini # In playerbots.conf Playerbot.GlobalMaxBots = 500 # Increase this ``` 2. **Account bot limit reached** ```ini Playerbot.MaxBotsPerAccount = 10 # Increase this ``` 3. **Database connection failure** - Check `Playerbot.log` for database errors - Verify MySQL is running - Check database credentials in `worldserver.conf` 4. **Invalid character data** - Ensure race/class combination is valid - Check name doesn't already exist - Verify character creation limits **Solutions:** ```bash # Increase limits vi etc/playerbots.conf # Edit GlobalMaxBots and MaxBotsPerAccount # Restart worldserver killall worldserver ./worldserver # Verify database mysql -u trinity -p > USE characters; > SELECT COUNT(*) FROM characters WHERE account = [your_account_id]; ``` --- ### Bots Not Following **Symptoms:** - Bots invited to group but don't move - Bots stay in one place - Message: "Bot is following" but no movement **Diagnosis:** ``` .bot info BotName ``` Check "Active Strategies" - should include "follow" **Common Causes:** 1. **Follow strategy not activated** ``` .bot follow # Manually activate ``` 2. **Bot stuck in combat state** - Kill all nearby mobs - Wait for combat to end - Bot should resume following 3. **Pathfinding failure** - Bot can't find path to you - Teleport closer: `.appear BotName` - Or teleport bot to you: `.summon BotName` 4. **Group not properly formed** - Re-invite bot to group - Check bot appears in group frames - Verify group leader is set **Solutions:** ``` # Force follow activation .bot follow # Summon bot if stuck .summon BotName # Re-invite to group /invite BotName # Check AI state .bot info BotName # AI State should be: FOLLOWING ``` --- ### Bots Not Attacking **Symptoms:** - Bots follow but don't engage in combat - Bots stand idle while you fight **Diagnosis:** ``` .bot info BotName ``` Check "Active Strategies" - should include "group_combat" **Common Causes:** 1. **Combat strategy not activated** - Happens if bot joined group before system was ready - Solution: Re-invite bot or restart worldserver 2. **Bot out of range** - Check combat assist range in config ```ini Playerbot.AI.CombatAssistRange = 30.0 # Increase if needed ``` 3. **No valid target** - Bot needs clear line of sight - Remove obstacles between bot and enemy 4. **Class-specific issues** - Mages may be out of mana - Melee may be too far from target - Healers prioritize healing over DPS **Solutions:** ``` # Manually command attack .bot attack # Check combat range vi etc/playerbots.conf # Increase Playerbot.AI.CombatAssistRange # Summon bot closer .summon BotName # Re-invite to refresh strategies /invite BotName ``` --- ### Performance Issues / Lag **Symptoms:** - Server lag with many bots - High CPU usage - Slow response times **Diagnosis:** ```bash # Check server stats .server info # Check bot stats .bot stats # Monitor CPU top -p $(pgrep worldserver) # Check memory free -h ``` **Common Causes:** 1. **Too many bots for hardware** - Reduce `Playerbot.GlobalMaxBots` - Lower `Playerbot.BotToPlayerRatio` 2. **Update interval too low** ```ini # In playerbots.conf Playerbot.UpdateInterval = 100 # Increase to 200-500 ``` 3. **Database bottleneck** - Increase connection pool size - Optimize MySQL configuration - Use SSD for database 4. **Memory exhaustion** - Each bot uses ~10 MB - 500 bots = ~5 GB minimum - Check with `free -h` **Solutions:** **Quick Fix (Reduce Load):** ```ini # In playerbots.conf Playerbot.GlobalMaxBots = 50 # Reduce from 500 Playerbot.UpdateInterval = 200 # Increase from 100 Playerbot.SpawnBatchSize = 5 # Reduce from 10 ``` **Database Optimization:** ```sql -- In MySQL SET GLOBAL max_connections = 200; SET GLOBAL innodb_buffer_pool_size = 2G; SET GLOBAL query_cache_size = 128M; ``` **System Tuning:** ```bash # Increase file descriptors ulimit -n 65536 # Use performance CPU governor cpupower frequency-set -g performance ``` **Monitoring:** ```bash # Watch resource usage watch -n 1 'free -h && ps aux | grep worldserver | head -n 1' ``` --- ### Database Errors **Symptoms:** - Errors in `Playerbot.log` - "Failed to execute query" - "Database connection timeout" **Diagnosis:** ```bash # Check Playerbot.log tail -n 100 Playerbot.log | grep -i "error\|failed" # Test MySQL connection mysql -u trinity -p -h localhost ``` **Common Errors:** 1. **"Too many connections"** ```sql -- In MySQL SHOW VARIABLES LIKE 'max_connections'; SET GLOBAL max_connections = 500; ``` 2. **"Prepared statement failed"** - Outdated database schema - Missing table indexes - Corrupted prepared statements **Solution:** ```bash # Re-run database updates mysql -u trinity -p world < sql/updates/world/*.sql ``` 3. **"Lock wait timeout exceeded"** - Database deadlock - Too many concurrent queries **Solution:** ```ini # In playerbots.conf Playerbot.Database.Timeout = 60 # Increase from 30 Playerbot.Database.MaxConnections = 20 # Increase pool ``` 4. **"Access denied"** - Wrong database credentials - Missing permissions **Solution:** ```sql GRANT ALL PRIVILEGES ON characters.* TO 'trinity'@'localhost'; GRANT ALL PRIVILEGES ON world.* TO 'trinity'@'localhost'; FLUSH PRIVILEGES; ``` --- ### Compilation Errors **Symptoms:** - Build fails with Playerbot-related errors - Linker errors mentioning Playerbot classes **Common Errors:** 1. **"BUILD_PLAYERBOT not defined"** ```bash # Solution: Add flag to cmake cmake .. -DBUILD_PLAYERBOT=1 ``` 2. **"Cannot find playerbots.conf"** - Module compiled but config missing ```bash # Copy config file cp etc/playerbots.conf.dist etc/playerbots.conf ``` 3. **Linker errors (unresolved symbols)** - Incomplete compilation ```bash # Clean and rebuild make clean cmake .. -DBUILD_PLAYERBOT=1 make -j$(nproc) ``` 4. **CMake errors** ``` CMake Error: The following variables are used but not set: BUILD_PLAYERBOT ``` **Solution:** ```bash # Explicitly set cmake .. -DBUILD_PLAYERBOT=ON ``` --- ## Advanced Topics ### Creating Custom AI Strategies For developers who want to extend bot behavior: **1. Create Strategy Class:** ```cpp // src/modules/Playerbot/AI/Strategy/MyCustomStrategy.h #include "Strategy.h" namespace Playerbot { class MyCustomStrategy : public Strategy { public: std::string GetName() const override { return "my_custom"; } bool IsActive(BotAI const* ai) const override { // Determine when strategy should be active return true; } void UpdateBehavior(BotAI* ai, uint32 diff) override { // Implement custom behavior Player* bot = ai->GetBot(); // ... custom logic } }; } // namespace Playerbot ``` **2. Register Strategy:** ```cpp // In BotAI.cpp or custom initializer void InitializeCustomStrategies(BotAI* ai) { auto customStrategy = std::make_unique(); ai->AddStrategy(std::move(customStrategy)); ai->ActivateStrategy("my_custom"); } ``` **3. Use Strategy:** ``` # In-game (if added to commands) .bot strategy activate my_custom ``` --- ### Performance Profiling **Enable Detailed Logging:** ```ini # In playerbots.conf Playerbot.Log.Level = 5 # Debug level Playerbot.Performance.EnableMonitoring = 1 ``` **Analyze Performance:** ```cpp // Access performance metrics SpawnStats const& stats = sBotSpawner->GetStats(); TC_LOG_INFO("module.playerbot", "Performance Report:"); TC_LOG_INFO("module.playerbot", " Average Update: {:.2f}ms", stats.GetAverageSpawnTime()); TC_LOG_INFO("module.playerbot", " Peak Concurrent: {}", stats.peakConcurrent.load()); ``` **Monitor in Real-Time:** ```bash # Watch Playerbot.log for performance entries tail -f Playerbot.log | grep "Performance\|Update Time" ``` --- ### Contributing to Playerbot **Development Workflow:** 1. **Fork Repository:** ```bash git clone https://github.com/YourUsername/TrinityCore.git cd TrinityCore git checkout playerbot-dev # Development branch ``` 2. **Create Feature Branch:** ```bash git checkout -b feature/my-improvement ``` 3. **Make Changes:** - Edit files in `src/modules/Playerbot/` - Follow existing code style - Add comments and documentation 4. **Test Changes:** ```bash # Rebuild cmake .. -DBUILD_PLAYERBOT=1 make -j$(nproc) # Test in-game ./worldserver # ... test your changes ``` 5. **Submit Pull Request:** ```bash git add . git commit -m "Add feature: improved bot targeting" git push origin feature/my-improvement # Create PR on GitHub ``` **Code Style:** - Follow TrinityCore C++ coding standards - Use namespace `Playerbot` - Add logging with `TC_LOG_*` macros - Include comprehensive error handling --- ### MySQL Optimization for High Bot Counts **For 500+ bots, optimize MySQL:** **1. Configuration (`my.cnf` or `my.ini`):** ```ini [mysqld] # Connection limits max_connections = 500 # Buffer pool (set to 50-70% of available RAM) innodb_buffer_pool_size = 4G # Query cache query_cache_size = 256M query_cache_limit = 2M # Threads thread_cache_size = 100 # Temporary tables tmp_table_size = 128M max_heap_table_size = 128M # InnoDB settings innodb_log_file_size = 512M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 2 # Faster, slightly less safe # Query optimization join_buffer_size = 4M sort_buffer_size = 4M ``` **2. Index Optimization:** ```sql -- Add indexes for bot queries ALTER TABLE characters ADD INDEX idx_bot_account_online (account, online); ALTER TABLE characters ADD INDEX idx_bot_level_class (level, class); -- Optimize tables periodically OPTIMIZE TABLE characters; OPTIMIZE TABLE item_instance; ``` **3. Monitoring:** ```sql -- Check connection usage SHOW STATUS LIKE 'Threads_connected'; SHOW STATUS LIKE 'Max_used_connections'; -- Check slow queries SHOW VARIABLES LIKE 'slow_query_log'; SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; # Log queries > 1 second ``` --- ## FAQ ### General Questions **Q: How many bots can I run on my server?** **A:** Depends on hardware: - **Low-end** (4 GB RAM, 2 cores): 50-100 bots - **Mid-range** (8 GB RAM, 4 cores): 200-500 bots - **High-end** (16+ GB RAM, 8+ cores): 500-1000 bots - **Server-grade** (32+ GB RAM, 16+ cores): 1000-5000 bots Rule of thumb: **100 bots ≈ 1 GB RAM** --- **Q: Can bots do quests automatically?** **A:** Partially. Bots can: - ✅ Pick up quests (when idle) - ✅ Kill quest mobs - ✅ Turn in quests - ❌ Navigate complex quest chains - ❌ Use quest items properly - ❌ Complete escort quests Currently experimental. Enable with: ```ini Playerbot.AI.EnableQuestAutomation = 1 ``` --- **Q: Do bots work in PvP/Battlegrounds?** **A:** Limited support: - ✅ Can enter battlegrounds - ✅ Will attack enemy players - ✅ Follow group in BGs - ❌ Don't understand objectives (flags, bases) - ❌ Limited tactical awareness - ❌ May not use PvP abilities optimally Best for testing, not competitive PvP. --- **Q: Can I make money (gold) with bots?** **A:** Not recommended: - Bots can farm mobs (slowly) - Auction house automation is disabled by default - Exploiting bots for gold is against spirit of module - Security limits prevent excessive gold accumulation **Intended use:** Enhancing gameplay, not gold farming. --- **Q: Will bots work with my custom scripts/modules?** **A:** Usually yes: - Bots use standard TrinityCore APIs - Compatible with most server modifications - May conflict with other AI systems - Test thoroughly before production use --- **Q: How do I update bots after server restart?** **A:** Bots persist in database: ```sql -- Bots remain in characters table SELECT name, class, level FROM characters WHERE account IN ( SELECT account_id FROM playerbot_accounts ); ``` After restart: 1. Worldserver starts 2. Playerbot module initializes 3. Bots automatically log back in (if dynamic spawning enabled) 4. Or manually re-add: `.bot add BotName` --- ### Technical Questions **Q: Are bots visible to other players?** **A:** Yes: - Bots appear as normal players - Other players can: - See bots in world - Target bots - Trade with bots (if enabled) - Invite bots to groups - Communicate with bots (limited responses) --- **Q: Do bots use resources (bandwidth, CPU) like real players?** **A:** Partially: - **CPU:** Yes, ~0.1% per bot (AI calculations) - **Memory:** Yes, ~10 MB per bot (Player objects) - **Bandwidth:** No (socketless, no network packets sent) - **Database:** Yes (queries for character data, updates) **Bots are much lighter than real players** (no network overhead). --- **Q: Can bots learn from player behavior?** **A:** Experimental: - Machine learning module exists - Pattern recognition for player movements - Adaptive difficulty based on player skill - Currently disabled by default Enable with: ```ini Playerbot.Experimental.BehaviorLearning = 1 ``` **Warning:** Very CPU-intensive, not recommended for production. --- **Q: How do I backup bot data?** **A:** ```bash # Backup characters database (includes bots) mysqldump -u trinity -p characters > characters_backup.sql # Backup specific bot accounts mysqldump -u trinity -p characters --where="account IN (SELECT account_id FROM playerbot_accounts)" > bots_backup.sql # Restore mysql -u trinity -p characters < characters_backup.sql ``` --- **Q: Can I control individual bot abilities?** **A:** Not directly via commands (yet). But you can: 1. **Modify AI scripts** in `src/modules/Playerbot/AI/ClassAI/` 2. **Create custom strategies** (see Advanced Topics) 3. **Use debug mode** to see what abilities bots use 4. **Disable certain abilities** in class AI code --- **Q: Why do my bots keep dying?** **A:** Common reasons: 1. **No healer in group** - Add a healer bot 2. **Pulling too many mobs** - Bots have limited survival instincts 3. **Undergeared** - Equip bots with appropriate gear 4. **Wrong spec** - Check bot specialization matches role 5. **Not using cooldowns** - Some class AIs need tuning **Debug:** ``` .bot info BotName # Check health, buffs, spec .bot debug BotName on # Enable detailed combat logging ``` --- ## Getting Help ### Official Channels - **GitHub Issues:** https://github.com/TrinityCore/TrinityCore/issues - **Discord:** TrinityCore Discord server (#playerbot-module channel) - **Forum:** TrinityCore forums (Module Development section) ### Reporting Bugs **Include:** 1. TrinityCore version/commit hash 2. Playerbot module version 3. Server specs (RAM, CPU, OS) 4. Number of bots when issue occurred 5. Relevant log excerpts from `Playerbot.log` 6. Steps to reproduce 7. Expected vs actual behavior **Example:** ``` **Bug:** Bots not following after group invite **Environment:** - TrinityCore: 11.2.0 (commit ae80d8c) - Playerbot: Latest (commit ae80d8c) - Server: Ubuntu 22.04, 16 GB RAM, 8 cores - Bots: 45 active **Steps:** 1. Spawn bot: .bot spawn warrior human male TestBot 2. Invite to group: /invite TestBot 3. Bot accepts but doesn't move **Logs:** [2025-10-03 14:23:45] BotAI: OnGroupJoined() called for TestBot [2025-10-03 14:23:45] Strategy "follow" activated [2025-10-03 14:23:45] ERROR: LeaderFollowBehavior - No group leader found **Expected:** Bot should follow me **Actual:** Bot stands still ``` --- ## Conclusion The TrinityCore Playerbot module provides a powerful way to enhance your World of Warcraft server experience with AI-controlled players. Whether you're running a solo server, testing content, or adding life to a low-population realm, the Playerbot system offers flexible, performant bot management. **Remember:** - Start with low bot counts and scale up - Monitor performance regularly - Keep logs for troubleshooting - Report bugs to help improve the module - Have fun! **Happy Botting!** --- **Document Version:** 1.0 **Last Updated:** 2025-10-03 **For:** TrinityCore 11.2 + Playerbot Module