bc/server/data/characterAbilities.js

178 lines
8.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// /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
};