# Spells System

Complete spell system for EverQuest II server emulation with spell definitions, casting mechanics, effects, and processing.

## Components

**Core System:**
- **SpellData/Spell** - Spell definitions with properties, levels, effects, LUA data
- **SpellEffectManager** - Active effects management (buffs, debuffs, bonuses)
- **MasterSpellList/SpellBook** - Global registry and per-character spell collections

**Spell Processing:**
- **SpellProcess** - Real-time casting engine (50ms intervals) with timers, queues, interrupts
- **SpellTargeting** - All target types: self, single, group, AOE, PBAE with validation
- **SpellResourceChecker** - Power, health, concentration, savagery, dissonance management
- **SpellManager** - High-level coordinator integrating all systems

## Key Features

- **Real-time Processing**: Cast/recast timers, active spell tracking, interrupt handling
- **Comprehensive Targeting**: Range, LOS, spell criteria validation for all target types
- **Resource Management**: All EQ2 resource types with validation and consumption
- **Effect System**: 30 maintained effects, 45 spell effects, detrimental effects
- **Heroic Opportunities**: Solo/group coordination with timing
- **Thread Safety**: Concurrent access with proper mutexes
- **80+ Effect Types**: All spell modifications from original C++ system

## Usage

```go
// Create and use spell manager
spellManager := spells.NewSpellManager()

// Cast spell with full validation
err := spellManager.CastSpell(casterID, targetID, spellID)
if err != nil {
    log.Printf("Spell failed: %v", err)
}

// Check spell readiness
canCast, reason := spellManager.CanCastSpell(casterID, targetID, spellID)

// Process spells in main loop
spellManager.ProcessSpells()

// Manage spell books
spellBook := spellManager.GetSpellBook(characterID)
spellBook.AddSpell(spell)
spellBook.SetSpellBarSlot(0, 1, spell)

// Effect management
sem := spells.NewSpellEffectManager()
sem.AddMaintainedEffect(maintainedEffect)
sem.AddSpellEffect(tempEffect)
```

## Files

**Core**: `constants.go`, `spell_data.go`, `spell.go`, `spell_effects.go`, `spell_manager.go`  
**Processing**: `process_constants.go`, `spell_process.go`, `spell_targeting.go`, `spell_resources.go`  
**Docs**: `README.md`, `SPELL_PROCESS.md`

## Integration

**Database**: Spell data loading, character spell book persistence  
**Packet System**: Spell info serialization, effect updates  
**Entity System**: SpellEffectManager embedded, stat integration  
**LUA Scripting**: Custom spell behaviors, effect calculations