// Package alt_advancement provides a complete alternate advancement system for EQ2Go servers. // // Features: // - Alternate advancement definitions with requirements and rewards // - Thread-safe master AA list for server-wide management // - Player-specific AA tracking and progression // - Database operations with internal database wrapper // // Basic Usage: // // // Create database connection // db, _ := database.NewSQLite("world.db") // // // Create new alternate advancement // aa := alt_advancement.New(db) // aa.NodeID = 1001 // aa.Name = "Dragon's Strength" // aa.Group = alt_advancement.AA_CLASS // aa.RankCost = 1 // aa.MaxRank = 5 // // // Save to database (insert or update automatically) // aa.Save() // // // Load alternate advancement by node ID // loaded, _ := alt_advancement.Load(db, 1001) // // // Update and save // loaded.Name = "Improved Dragon's Strength" // loaded.Save() // // // Delete alternate advancement // loaded.Delete() // // Master List Management: // // // Create master list for server-wide AA management // masterList := alt_advancement.NewMasterList() // // // Load all AAs from database // allAAs, _ := alt_advancement.LoadAll(db) // for _, aa := range allAAs { // masterList.AddAltAdvancement(aa) // } // // // Get AAs by group/tab // classAAs := masterList.GetAltAdvancementsByGroup(alt_advancement.AA_CLASS) // // // Get AAs by class requirement // fighterAAs := masterList.GetAltAdvancementsByClass(1) // Fighter class // // // Get AAs available at specific level // level20AAs := masterList.GetAltAdvancementsByLevel(20) // // Player AA Management: // // // Create player AA state // playerState := alt_advancement.NewAAPlayerState(characterID) // // // Award AA points // playerState.TotalPoints = 50 // playerState.AvailablePoints = 25 // // // Track AA progress // progress := &alt_advancement.PlayerAAData{ // CharacterID: characterID, // NodeID: 1001, // CurrentRank: 3, // PointsSpent: 3, // } // playerState.AAProgress[1001] = progress // // Thread Safety: // // All operations are thread-safe using the generic MasterList base: // - Read-heavy operations use RWMutex for optimal performance // - Atomic operations for simple counters and flags // - Proper lock ordering to prevent deadlocks // - Background processing with goroutines and channels package alt_advancement