334 lines
7.2 KiB
Markdown
334 lines
7.2 KiB
Markdown
# TrinityCore PlayerBot - Server Startup Checklist
|
|||
|
|
|
||
|
|
## ✅ WHAT TO WATCH FOR DURING STARTUP
|
||
|
|
|
||
|
|
### 1. **Spatial Grid Initialization** (CRITICAL)
|
||
|
|
Look for these log messages:
|
||
|
|
|
||
|
|
```
|
||
|
|
[PLAYERBOT] SpatialGridManager initialized
|
||
|
|
[PLAYERBOT] DoubleBufferedSpatialGrid created for map [mapId]
|
||
|
|
[PLAYERBOT] Spatial grid initial population completed
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected**: No errors, grid initializes for each active map
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. **ThreadPool Startup** (CRITICAL)
|
||
|
|
Look for:
|
||
|
|
|
||
|
|
```
|
||
|
|
[PLAYERBOT] ThreadPool initialized with [N] worker threads
|
||
|
|
[PLAYERBOT] Work-stealing queue created
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected**: Worker thread count matches your CPU cores (typically 4-8)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. **Automated Population System**
|
||
|
|
Look for:
|
||
|
|
|
||
|
|
```
|
||
|
|
[PLAYERBOT] BotLevelDistribution initialized
|
||
|
|
[PLAYERBOT] BotGearFactory cache built: [N] items
|
||
|
|
[PLAYERBOT] BotTalentManager loaded [N] talent loadouts
|
||
|
|
[PLAYERBOT] BotWorldPositioner zone cache ready
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected**: All caches build successfully without errors
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 4. **DynamicObject & AreaTrigger Support** (NEW)
|
||
|
|
Look for:
|
||
|
|
|
||
|
|
```
|
||
|
|
Spatial grid updated: [N] creatures, [N] players, [N] gameobjects, [N] dynamicObjects, [N] areaTriggers
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected**: Non-zero counts for dynamicObjects and areaTriggers when spell effects are active
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 5. **Database Connectivity**
|
||
|
|
Look for:
|
||
|
|
|
||
|
|
```
|
||
|
|
Connected to MySQL database
|
||
|
|
DatabasePool [auth] opened with [N] connections
|
||
|
|
DatabasePool [characters] opened with [N] connections
|
||
|
|
DatabasePool [world] opened with [N] connections
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected**: All 3 databases connected successfully
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 6. **Map Loading**
|
||
|
|
Look for:
|
||
|
|
|
||
|
|
```
|
||
|
|
Loading map [mapId]
|
||
|
|
Grid (X,Y) loaded for map [mapId]
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected**: Maps load without "failed to load" errors
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⚠️ ERRORS TO WATCH FOR
|
||
|
|
|
||
|
|
### Critical Errors (Server Won't Start)
|
||
|
|
|
||
|
|
❌ **"Failed to initialize SpatialGridManager"**
|
||
|
|
- **Cause**: Spatial grid system failed
|
||
|
|
- **Action**: Check for missing dependencies, review error details
|
||
|
|
|
||
|
|
❌ **"ThreadPool initialization failed"**
|
||
|
|
- **Cause**: Thread creation failed
|
||
|
|
- **Action**: Check system resources, reduce worker thread count
|
||
|
|
|
||
|
|
❌ **"Database connection failed"**
|
||
|
|
- **Cause**: MySQL not running or wrong credentials
|
||
|
|
- **Action**: Verify MySQL service, check worldserver.conf
|
||
|
|
|
||
|
|
❌ **"SIGABRT" or "Segmentation fault"**
|
||
|
|
- **Cause**: Code crash during startup
|
||
|
|
- **Action**: Check for nullptr dereferences, review recent changes
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Warning Errors (Non-Critical)
|
||
|
|
|
||
|
|
⚠️ **"SpellInfo not found for spell [ID]"**
|
||
|
|
- **Cause**: Missing spell data in database
|
||
|
|
- **Impact**: Minor - that specific spell won't have proper detection
|
||
|
|
- **Action**: Update world database
|
||
|
|
|
||
|
|
⚠️ **"AreaTrigger has no spell"**
|
||
|
|
- **Cause**: Environmental AreaTrigger without spell (normal for some)
|
||
|
|
- **Impact**: None - these are marked as dangerous by default
|
||
|
|
- **Action**: None needed
|
||
|
|
|
||
|
|
⚠️ **"Gear cache: No items found for level [N]"**
|
||
|
|
- **Cause**: Missing item data for that level range
|
||
|
|
- **Impact**: Bots at that level won't get optimal gear
|
||
|
|
- **Action**: Check item_template table population
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 STARTUP SUCCESS CRITERIA
|
||
|
|
|
||
|
|
✅ **Server reaches "Ready to accept connections"**
|
||
|
|
✅ **No FATAL or ERROR messages**
|
||
|
|
✅ **Spatial grid initialized for all maps**
|
||
|
|
✅ **ThreadPool shows [N] worker threads**
|
||
|
|
✅ **DynamicObject/AreaTrigger counts > 0 (when effects active)**
|
||
|
|
✅ **Database pools all connected**
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 FIRST TESTS AFTER STARTUP
|
||
|
|
|
||
|
|
### Test 1: Spawn a Single Bot
|
||
|
|
```
|
||
|
|
.bot add [name] [class] [race]
|
||
|
|
```
|
||
|
|
|
||
|
|
**Watch for**:
|
||
|
|
- Bot spawns successfully
|
||
|
|
- Spatial grid logs show bot in grid
|
||
|
|
- No deadlock warnings
|
||
|
|
- Bot has gear (if level 5+)
|
||
|
|
|
||
|
|
### Test 2: Check Spatial Grid
|
||
|
|
```
|
||
|
|
.debug spatialindex
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected output**:
|
||
|
|
- Grid shows populated cells
|
||
|
|
- Entity counts displayed
|
||
|
|
- No "grid not initialized" errors
|
||
|
|
|
||
|
|
### Test 3: Check ThreadPool
|
||
|
|
```
|
||
|
|
.debug threadpool
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected output**:
|
||
|
|
- Active threads: [N]
|
||
|
|
- Queued tasks: 0 (initially)
|
||
|
|
- Completed tasks: 0 (initially)
|
||
|
|
|
||
|
|
### Test 4: Check Futures (CRITICAL FOR DEADLOCK TEST)
|
||
|
|
```
|
||
|
|
.debug futures
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected output**:
|
||
|
|
- All futures show "completed" or "running"
|
||
|
|
- No futures stuck for >5 seconds
|
||
|
|
- Futures 3-14 specifically should complete quickly
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚦 NEXT STEPS AFTER SUCCESSFUL STARTUP
|
||
|
|
|
||
|
|
### Phase 1: Spawn 100 Bots
|
||
|
|
|
||
|
|
**Method 1: Using .bot add command**
|
||
|
|
```
|
||
|
|
.bot add [name] [class] [race]
|
||
|
|
```
|
||
|
|
Repeat 100 times with different names
|
||
|
|
|
||
|
|
**Method 2: Using automated population (if configured)**
|
||
|
|
```
|
||
|
|
.bot populate alliance 100
|
||
|
|
```
|
||
|
|
|
||
|
|
**Monitor**:
|
||
|
|
- Memory usage in Task Manager
|
||
|
|
- CPU usage
|
||
|
|
- Log for errors
|
||
|
|
- All 100 bots spawn successfully
|
||
|
|
|
||
|
|
**Success Criteria**:
|
||
|
|
- ✅ 100 bots spawned
|
||
|
|
- ✅ No crashes
|
||
|
|
- ✅ No deadlocks
|
||
|
|
- ✅ Memory < 2GB
|
||
|
|
- ✅ CPU < 5%
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Phase 2: Basic Functionality Tests
|
||
|
|
|
||
|
|
**Quest Test**:
|
||
|
|
1. Find a quest NPC
|
||
|
|
2. Watch bots pick up quests
|
||
|
|
3. Check logs for ObjectAccessor deadlocks (should be ZERO)
|
||
|
|
|
||
|
|
**Gathering Test**:
|
||
|
|
1. Spawn bots near gathering nodes
|
||
|
|
2. Watch bots gather
|
||
|
|
3. Check spatial grid queries in logs
|
||
|
|
|
||
|
|
**Combat Test**:
|
||
|
|
1. Spawn bots near hostile NPCs
|
||
|
|
2. Watch bots engage combat
|
||
|
|
3. Check danger detection (bots should avoid AoE)
|
||
|
|
|
||
|
|
**Loot Test**:
|
||
|
|
1. Watch bots kill mobs
|
||
|
|
2. Check if bots loot corpses
|
||
|
|
3. Verify no loot deadlocks
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔍 LOG FILES TO MONITOR
|
||
|
|
|
||
|
|
**Server.log** - Main server log
|
||
|
|
```bash
|
||
|
|
tail -f Server.log | grep -i "playerbot\|spatial\|threadpool"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Error.log** - Error messages only
|
||
|
|
```bash
|
||
|
|
tail -f Error.log
|
||
|
|
```
|
||
|
|
|
||
|
|
**DBErrors.log** - Database errors
|
||
|
|
```bash
|
||
|
|
tail -f DBErrors.log
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⏱️ TIMING BENCHMARKS
|
||
|
|
|
||
|
|
**Expected Startup Times**:
|
||
|
|
- Database connection: <2 seconds
|
||
|
|
- Map loading: 5-15 seconds per map
|
||
|
|
- Spatial grid init: <1 second per map
|
||
|
|
- ThreadPool init: <0.5 seconds
|
||
|
|
- Total startup: 30-60 seconds (depending on maps)
|
||
|
|
|
||
|
|
**If Startup Takes >2 Minutes**:
|
||
|
|
- Check database connectivity
|
||
|
|
- Check map file loading
|
||
|
|
- Check for hung initialization
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🆘 TROUBLESHOOTING
|
||
|
|
|
||
|
|
### Server Hangs During Startup
|
||
|
|
|
||
|
|
**Symptom**: Server stops logging, appears frozen
|
||
|
|
|
||
|
|
**Common Causes**:
|
||
|
|
1. Database connection timeout
|
||
|
|
2. Map file loading stuck
|
||
|
|
3. Mutex deadlock in initialization
|
||
|
|
4. Infinite loop in startup code
|
||
|
|
|
||
|
|
**Actions**:
|
||
|
|
1. Check last log message before hang
|
||
|
|
2. Attach debugger and check stack trace
|
||
|
|
3. Kill and restart with more verbose logging
|
||
|
|
4. Check database connectivity
|
||
|
|
|
||
|
|
### Server Crashes Immediately
|
||
|
|
|
||
|
|
**Symptom**: Server starts then crashes with SIGABRT/SIGSEGV
|
||
|
|
|
||
|
|
**Common Causes**:
|
||
|
|
1. Nullptr dereference in initialization
|
||
|
|
2. Missing database tables
|
||
|
|
3. Corrupted configuration file
|
||
|
|
4. Memory corruption
|
||
|
|
|
||
|
|
**Actions**:
|
||
|
|
1. Review Error.log for crash location
|
||
|
|
2. Run with debugger to get stack trace
|
||
|
|
3. Verify all database tables exist
|
||
|
|
4. Check worldserver.conf syntax
|
||
|
|
|
||
|
|
### High Memory Usage at Startup
|
||
|
|
|
||
|
|
**Symptom**: >5GB memory used before bots spawn
|
||
|
|
|
||
|
|
**Common Causes**:
|
||
|
|
1. Memory leak in spatial grid initialization
|
||
|
|
2. Large gear cache
|
||
|
|
3. Map data loading issue
|
||
|
|
4. ThreadPool queue pre-allocation
|
||
|
|
|
||
|
|
**Actions**:
|
||
|
|
1. Profile memory usage
|
||
|
|
2. Check spatial grid cache size
|
||
|
|
3. Reduce gear cache size if needed
|
||
|
|
4. Check for memory leaks
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ READY TO TEST!
|
||
|
|
|
||
|
|
Once server starts successfully:
|
||
|
|
1. ✅ No errors in logs
|
||
|
|
2. ✅ Spatial grid initialized
|
||
|
|
3. ✅ ThreadPool running
|
||
|
|
4. ✅ Databases connected
|
||
|
|
|
||
|
|
**You're ready to proceed with Phase 1 testing (100 bots)!**
|
||
|
|
|
||
|
|
Refer to `TESTING_PLAN_5000_BOTS.md` for detailed test procedures.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
Good luck! 🚀
|