178 lines
8.7 KiB
JavaScript
178 lines
8.7 KiB
JavaScript
// /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
|
||
}; |