/** * Spell Validator - Core validation layer for spellcasting * Prevents LLM hallucination (CRIT-006) by validating: * - Spell exists in database * - Character knows/has prepared the spell * - Character has spell slots available * - Character can cast at the requested level * - Range and targeting requirements */ import type { Character } from '../../schema/character.js'; import type { Spell, CharacterClass, SpellSlots, SpellcastingAbility } from '../../schema/spell.js'; interface SpellcastingConfig { canCast: boolean; startLevel: number; ability: SpellcastingAbility; fullCaster: boolean; preparationRequired: boolean; pactMagic: boolean; } export interface SpellValidationError { code: string; message: string; } export interface SpellValidationResult { valid: boolean; error?: SpellValidationError; spell?: Spell; effectiveSlotLevel?: number; } /** * Get max spell level a character can cast based on class and level */ export declare function getMaxSpellLevel(characterClass: CharacterClass, level: number): number; /** * Get initial spell slots for a character based on class and level */ export declare function getInitialSpellSlots(characterClass: CharacterClass, level: number): SpellSlots; /** * Calculate spell save DC for a character * DC = 8 + proficiency bonus + spellcasting ability modifier */ export declare function calculateSpellSaveDC(character: Character): number; /** * Calculate spell attack bonus for a character * Attack = proficiency bonus + spellcasting ability modifier */ export declare function calculateSpellAttackBonus(character: Character): number; /** * Check if character can cast spells at all */ export declare function canCastSpells(character: Character): { canCast: boolean; reason?: string; }; /** * Check if character knows/has prepared a specific spell */ export declare function characterKnowsSpell(character: Character, spellName: string): { knows: boolean; reason?: string; }; /** * Check if character has spell slot available at the given level */ export declare function hasSpellSlotAvailable(character: Character, minLevel: number): { available: boolean; availableLevel?: number; reason?: string; }; /** * Check range for spell targeting */ export declare function validateSpellRange(spell: Spell, casterPosition: { x: number; y: number; }, targetPosition?: { x: number; y: number; }, options?: { casterId?: string; targetId?: string; }): { valid: boolean; reason?: string; }; /** * Main validation function - validates a spell cast request */ export declare function validateSpellCast(character: Character, spellName: string, requestedSlotLevel?: number, options?: { casterPosition?: { x: number; y: number; }; targetPosition?: { x: number; y: number; }; targetId?: string; }): SpellValidationResult; /** * Consume a spell slot after successful cast */ export declare function consumeSpellSlot(character: Character, slotLevel: number): Character; /** * Restore all spell slots (for long rest) */ export declare function restoreAllSpellSlots(character: Character): Character; /** * Restore warlock pact slots (for short rest) */ export declare function restorePactSlots(character: Character): Character; /** * Get spellcasting configuration for a class * Returns default non-caster config for unknown/custom classes */ export declare function getSpellcastingConfig(characterClass: string): SpellcastingConfig; export {}; //# sourceMappingURL=spell-validator.d.ts.map