113 lines
4.1 KiB
Markdown
113 lines
4.1 KiB
Markdown
# Spell Processing System
|
|
|
|
Comprehensive spell casting engine managing all aspects of spell processing including timers, targeting, resource management, and heroic opportunities.
|
|
|
|
## Components
|
|
|
|
**SpellProcess** - Core engine managing active spells, cast/recast timers, interrupt queues, spell queues, and heroic opportunities
|
|
**SpellTargeting** - Target selection for all spell types (self, single, group, AOE, PBAE) with validation
|
|
**SpellResourceChecker** - Resource validation/consumption for power, health, concentration, savagery, dissonance
|
|
**SpellManager** - High-level coordinator integrating all systems with comprehensive casting API
|
|
|
|
## Key Data Structures
|
|
|
|
```go
|
|
// Active spell instance
|
|
type LuaSpell struct {
|
|
Spell *Spell // Spell definition
|
|
CasterID int32 // Casting entity
|
|
Targets []int32 // Target list
|
|
Timer SpellTimer // Duration/tick timing
|
|
NumCalls int32 // Tick count
|
|
Interrupted bool // Interrupt state
|
|
}
|
|
|
|
// Cast timing
|
|
type CastTimer struct {
|
|
CasterID int32 // Casting entity
|
|
SpellID int32 // Spell being cast
|
|
StartTime time.Time // Cast start
|
|
Duration time.Duration // Cast time
|
|
}
|
|
|
|
// Cooldown timing
|
|
type RecastTimer struct {
|
|
CasterID int32 // Entity with cooldown
|
|
SpellID int32 // Spell on cooldown
|
|
Duration time.Duration // Cooldown time
|
|
LinkedTimer int32 // Shared cooldown group
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
```go
|
|
// Main spell processing loop (50ms intervals)
|
|
spellManager.ProcessSpells()
|
|
|
|
// Cast spell with full validation
|
|
err := spellManager.CastSpell(casterID, targetID, spellID)
|
|
|
|
// Interrupt casting
|
|
spellManager.InterruptSpell(entityID, spellID, errorCode, canceled, fromMovement)
|
|
|
|
// Queue management
|
|
spellManager.AddSpellToQueue(spellID, casterID, targetID, priority)
|
|
spellManager.RemoveSpellFromQueue(spellID, casterID)
|
|
|
|
// Status checks
|
|
ready := spellManager.IsSpellReady(spellID, casterID)
|
|
recastTime := spellManager.GetSpellRecastTime(spellID, casterID)
|
|
canCast, reason := spellManager.CanCastSpell(casterID, targetID, spellID)
|
|
|
|
// Resource checking
|
|
resourceChecker := spellManager.GetResourceChecker()
|
|
powerResult := resourceChecker.CheckPower(luaSpell, customPowerReq)
|
|
allResults := resourceChecker.CheckAllResources(luaSpell, 0, 0)
|
|
success := resourceChecker.ConsumeAllResources(luaSpell, 0, 0)
|
|
|
|
// Targeting
|
|
targeting := spellManager.GetTargeting()
|
|
targetResult := targeting.GetSpellTargets(luaSpell, options)
|
|
```
|
|
|
|
## Effect Types (80+)
|
|
|
|
**Stat Modifications**: Health, power, stats (STR/AGI/STA/INT/WIS), resistances, attack, mitigation
|
|
**Spell Modifications**: Cast time, power req, range, duration, resistibility, crit chance
|
|
**Actions**: Damage, healing, DOT/HOT, resurrect, summon, mount, invisibility
|
|
**Control**: Stun, root, mez, fear, charm, blind, kill
|
|
**Special**: Change race/size/title, faction, exp, tradeskill bonuses
|
|
|
|
## Target Types
|
|
|
|
**TargetTypeSelf** (0) - Self-only spells
|
|
**TargetTypeSingle** (1) - Single target with validation
|
|
**TargetTypeGroup** (2) - Group members
|
|
**TargetTypeGroupAE** (3) - Group area effect
|
|
**TargetTypeAE** (4) - True area effect
|
|
**TargetTypePBAE** (5) - Point blank area effect
|
|
|
|
## Interrupt System
|
|
|
|
**Causes**: Movement, damage, stun, mesmerize, fear, manual cancellation, out of range
|
|
**Processing**: Queued interrupts processed every cycle with proper cleanup
|
|
**Error Codes**: Match client expectations for proper UI feedback
|
|
|
|
## Performance
|
|
|
|
- **50ms Processing**: Matches client update expectations
|
|
- **Efficient Indexing**: Fast lookups by caster, spell, target
|
|
- **Thread Safety**: Concurrent access with proper locking
|
|
- **Memory Management**: Cleanup of expired timers and effects
|
|
- **Batch Operations**: Multiple resource checks/targeting in single calls
|
|
|
|
## Integration Points
|
|
|
|
**Entity System**: Caster/target info, position data, combat state
|
|
**Zone System**: Position validation, line-of-sight, spawn management
|
|
**Group System**: Group member targeting and coordination
|
|
**Database**: Persistent spell data, character spell books
|
|
**Packet System**: Client communication for spell states
|
|
**LUA System**: Custom spell scripting (future)
|