// /server/data/characterAbilities.js const GAME_CONFIG = require('../core/config'); // Путь к конфигу из server/data/ в server/core/ // Способности Игрока (Елена) const elenaAbilities = [ { id: GAME_CONFIG.ABILITY_ID_HEAL, name: 'Малое Исцеление', cost: 20, type: GAME_CONFIG.ACTION_TYPE_HEAL, power: 30, description: 'Восстанавливает ~30 HP' }, { id: GAME_CONFIG.ABILITY_ID_FIREBALL, name: 'Огненный Шар', cost: 30, type: GAME_CONFIG.ACTION_TYPE_DAMAGE, power: 25, description: 'Наносит ~25 урона врагу' }, { id: GAME_CONFIG.ABILITY_ID_NATURE_STRENGTH, name: 'Сила Природы', cost: 15, type: GAME_CONFIG.ACTION_TYPE_BUFF, duration: 4, // Общая длительность эффекта // Описание теперь может использовать configToUse (который будет GAME_CONFIG) descriptionFunction: (configToUse, opponentBaseStats) => `Восст. ${configToUse.NATURE_STRENGTH_MANA_REGEN} маны при след. атаке. Эффект длится ${4 - 1} хода после применения.`, isDelayed: true // Этот эффект применяется ПОСЛЕ следующей атаки, а не сразу }, { id: GAME_CONFIG.ABILITY_ID_DEFENSE_AURA, name: 'Аура Защиты', cost: 15, type: GAME_CONFIG.ACTION_TYPE_BUFF, duration: 3, grantsBlock: true, // Дает эффект блока на время действия descriptionFunction: (configToUse, opponentBaseStats) => `Снижает урон на ${configToUse.BLOCK_DAMAGE_REDUCTION * 100}% (${3} хода)` }, { id: GAME_CONFIG.ABILITY_ID_HYPNOTIC_GAZE, name: 'Гипнотический взгляд', cost: 30, type: GAME_CONFIG.ACTION_TYPE_DISABLE, effectDuration: 2, // Длительность безмолвия в ходах противника cooldown: 6, power: 5, // Урон в ход от взгляда description: 'Накладывает на противника полное безмолвие на 2 хода и наносит 5 урона каждый его ход. КД: 6 х.' }, { id: GAME_CONFIG.ABILITY_ID_SEAL_OF_WEAKNESS, name: 'Печать Слабости', cost: 30, type: GAME_CONFIG.ACTION_TYPE_DEBUFF, effectDuration: 3, // Длительность дебаффа power: 10, // Количество ресурса противника, сжигаемое каждый ход cooldown: 5, // Описание теперь может адаптироваться к ресурсу оппонента descriptionFunction: (configToUse, oppStats) => `Накладывает печать, сжигающую 10 ${oppStats ? oppStats.resourceName : 'ресурса'} противника каждый его ход в течение 3 ходов. КД: 5 х.` } ]; // Способности Противника (Балард - AI) const balardAbilities = [ { id: GAME_CONFIG.ABILITY_ID_BALARD_HEAL, name: 'Покровительство Тьмы', cost: 20, type: GAME_CONFIG.ACTION_TYPE_HEAL, power: 25, successRate: 0.60, // Шанс успеха description: 'Исцеляет ~25 HP с 60% шансом', // Условие для AI: HP ниже порога condition: (opSt, plSt, currentGameState, configToUse) => { return (opSt.currentHp / opSt.maxHp) * 100 < configToUse.OPPONENT_HEAL_THRESHOLD_PERCENT; } }, { id: GAME_CONFIG.ABILITY_ID_BALARD_SILENCE, name: 'Эхо Безмолвия', cost: GAME_CONFIG.BALARD_SILENCE_ABILITY_COST, type: GAME_CONFIG.ACTION_TYPE_DISABLE, descriptionFunction: (configToUse, opponentBaseStats) => `Шанс ${configToUse.SILENCE_SUCCESS_RATE * 100}% заглушить случайное заклинание Елены на ${configToUse.SILENCE_DURATION} х.`, condition: (opSt, plSt, currentGameState, configToUse) => { const hpPercent = (opSt.currentHp / opSt.maxHp) * 100; const isElenaAlreadySilenced = currentGameState?.player.disabledAbilities?.length > 0 || currentGameState?.player.activeEffects?.some(eff => eff.id.startsWith('playerSilencedOn_')); // Проверяем и специфичное, и общее безмолвие на цели const isElenaFullySilenced = currentGameState?.player.activeEffects?.some(eff => eff.isFullSilence && eff.turnsLeft > 0); return hpPercent >= configToUse.OPPONENT_HEAL_THRESHOLD_PERCENT && !isElenaAlreadySilenced && !isElenaFullySilenced && (opSt.silenceCooldownTurns === undefined || opSt.silenceCooldownTurns <= 0); }, successRateFromConfig: 'SILENCE_SUCCESS_RATE', durationFromConfig: 'SILENCE_DURATION', internalCooldownFromConfig: 'BALARD_SILENCE_INTERNAL_COOLDOWN' }, { id: GAME_CONFIG.ABILITY_ID_BALARD_MANA_DRAIN, name: 'Похищение Света', cost: 10, type: GAME_CONFIG.ACTION_TYPE_DRAIN, powerManaDrain: 5, powerDamage: 5, powerHealthGainFactor: 1.0, description: `Вытягивает 5 Маны у Елены, наносит 5 урона и восстанавливает себе здоровье (100% от украденного).`, condition: (opSt, plSt, currentGameState, configToUse) => { const playerManaPercent = (plSt.currentResource / plSt.maxResource) * 100; const playerHasHighMana = playerManaPercent > (configToUse.BALARD_MANA_DRAIN_HIGH_MANA_THRESHOLD || 60); return playerHasHighMana && (opSt.manaDrainCooldownTurns === undefined || opSt.manaDrainCooldownTurns <= 0); }, internalCooldownValue: 3 } ]; // Способности Альмагест (PvP - зеркало Елены) const almagestAbilities = [ { id: GAME_CONFIG.ABILITY_ID_ALMAGEST_HEAL, name: 'Темное Восстановление', cost: 20, type: GAME_CONFIG.ACTION_TYPE_HEAL, power: 30, description: 'Поглощает жизненные тени, восстанавливая ~30 HP' }, { id: GAME_CONFIG.ABILITY_ID_ALMAGEST_DAMAGE, name: 'Теневой Сгусток', cost: 30, type: GAME_CONFIG.ACTION_TYPE_DAMAGE, power: 25, description: 'Запускает сгусток чистой тьмы, нанося ~25 урона врагу' }, { id: GAME_CONFIG.ABILITY_ID_ALMAGEST_BUFF_ATTACK, name: 'Усиление Тьмой', cost: 15, type: GAME_CONFIG.ACTION_TYPE_BUFF, duration: 4, descriptionFunction: (configToUse, opponentBaseStats) => `Восст. ${configToUse.NATURE_STRENGTH_MANA_REGEN} Темной Энергии при след. атаке. Эффект длится ${4 - 1} хода после применения.`, isDelayed: true }, { id: GAME_CONFIG.ABILITY_ID_ALMAGEST_BUFF_DEFENSE, name: 'Щит Пустоты', cost: 15, type: GAME_CONFIG.ACTION_TYPE_BUFF, duration: 3, grantsBlock: true, descriptionFunction: (configToUse, opponentBaseStats) => `Создает щит, снижающий урон на ${configToUse.BLOCK_DAMAGE_REDUCTION * 100}% (${3} хода)` }, { id: GAME_CONFIG.ABILITY_ID_ALMAGEST_DISABLE, name: 'Раскол Разума', cost: 30, type: GAME_CONFIG.ACTION_TYPE_DISABLE, effectDuration: 2, cooldown: 6, power: 5, description: 'Вторгается в разум противника, накладывая полное безмолвие на 2 хода и нанося 5 урона каждый его ход. КД: 6 х.' }, { id: GAME_CONFIG.ABILITY_ID_ALMAGEST_DEBUFF, name: 'Проклятие Увядания', cost: 30, type: GAME_CONFIG.ACTION_TYPE_DEBUFF, effectDuration: 3, power: 10, cooldown: 5, descriptionFunction: (configToUse, oppStats) => `Накладывает проклятие, истощающее 10 ${oppStats ? oppStats.resourceName : 'ресурса'} противника каждый его ход в течение 3 ходов. КД: 5 х.` } ]; module.exports = { elenaAbilities, balardAbilities, almagestAbilities };