// /server_modules/data.js const GAME_CONFIG = require('./config'); // Подключаем конфиг для ID способностей и других значений // --- Базовые Статы Персонажей --- const playerBaseStats = { id: GAME_CONFIG.PLAYER_ID, // Технический ID слота characterKey: 'elena', // Уникальный ключ персонажа name: "Елена", maxHp: 120, maxResource: 150, attackPower: 15, resourceName: "Мана", avatarPath: 'images/elena_avatar.webp' // Пример пути к аватару }; const opponentBaseStats = { // Балард (для AI) id: GAME_CONFIG.OPPONENT_ID, // Технический ID слота characterKey: 'balard', // Уникальный ключ персонажа name: "Балард", maxHp: 140, maxResource: 100, attackPower: 20, resourceName: "Ярость", avatarPath: 'images/balard_avatar.jpg' // Пример пути к аватару }; const almagestBaseStats = { // Альмагест (для PvP) id: GAME_CONFIG.OPPONENT_ID, // Технический ID слота (занимает слот оппонента) characterKey: 'almagest', // Уникальный ключ персонажа name: "Альмагест", maxHp: 120, // Статы как у Елены для зеркальности maxResource: 150, attackPower: 15, resourceName: "Темная Энергия", avatarPath: 'images/almagest_avatar.webp' // Пример пути к аватару (нужно создать изображение) }; // --- Способности Персонажей --- // Способности Игрока (Елена) const playerAbilities = [ { 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, descriptionFunction: (config) => `Восст. ${config.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: (config) => `Снижает урон на ${config.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: (config, oppStats) => `Накладывает печать, сжигающую 10 ${oppStats.resourceName} противника каждый его ход в течение 3 ходов. КД: 5 х.` } ]; // Способности Противника (Балард - AI) const opponentAbilities = [ { id: GAME_CONFIG.ABILITY_ID_BALARD_HEAL, name: 'Покровительство Тьмы', cost: 20, type: GAME_CONFIG.ACTION_TYPE_HEAL, power: 25, successRate: 0.60, // Можно вынести в GAME_CONFIG description: 'Исцеляет ~25 HP с 60% шансом', condition: (opSt, plSt, currentGameState, config) => { return (opSt.currentHp / opSt.maxHp) * 100 < config.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: (config) => `Шанс ${config.SILENCE_SUCCESS_RATE * 100}% заглушить случайное заклинание Елены на ${config.SILENCE_DURATION} х.`, condition: (opSt, plSt, currentGameState, config) => { const hpPercent = (opSt.currentHp / opSt.maxHp) * 100; const isElenaAlreadySilenced = currentGameState?.player.disabledAbilities?.length > 0 || currentGameState?.player.activeEffects?.some(eff => eff.id.startsWith('playerSilencedOn_')); // Условие для Баларда использовать безмолвие (только против Елены) return hpPercent >= config.OPPONENT_HEAL_THRESHOLD_PERCENT && !isElenaAlreadySilenced && currentGameState.opponent.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, config) => { const playerManaPercent = (plSt.currentResource / plSt.maxResource) * 100; const playerHasHighMana = playerManaPercent > (config.BALARD_MANA_DRAIN_HIGH_MANA_THRESHOLD || 60); // Условие для Баларда использовать (только против Елены) return playerHasHighMana && currentGameState.opponent.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: (config) => `Восст. ${config.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: (config) => `Создает щит, снижающий урон на ${config.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: (config, oppStats) => `Накладывает проклятие, истощающее 10 ${oppStats.resourceName} противника каждый его ход в течение 3 ходов. КД: 5 х.` } ]; // --- Система Насмешек Елены (Переработанная) --- // Ключи верхнего уровня: 'aiBalard' для игры против Баларда (AI) // 'pvpAlmagest' для игры против Альмагест (PvP) const elenaTauntSystem = { aiBalard: { // Насмешки против Баларда (AI) - существующая логика base: { mercifulAttack: [ "Балард, прошу, остановись. Еще не поздно.", /* ... другие ... */ ], mercifulCast: [ "Даже сейчас, я пытаюсь исцелить не только тело...", /* ... другие ... */ ], dominating: { creatorVsCreation: [ "Глина не спорит с гончаром, Балард! Прекрати жалкое сопротивление!", /* ... другие ... */ ], betrayalOfLight: [ "Ты мог ходить в сиянии Света! Ты ИЗБРАЛ эту гниль! Получай возмездие!", /* ... другие ... */ ], ingratitudeContempt: [ "Самый страшный грех - грех неблагодарности!", /* ... другие ... */ ], unmakingThreats: [ "Я сотру тебя с лика этой земли, как досадную ошибку!", /* ... другие ... */ ] } }, onPlayerCast: { [GAME_CONFIG.ABILITY_ID_HEAL]: [ "Свет лечит, Балард. Но не искаженную завистью искру.", /* ... другие ... */ ], [GAME_CONFIG.ABILITY_ID_FIREBALL]: [ "Прими очищающее пламя Света!", /* ... другие ... */ ], [GAME_CONFIG.ABILITY_ID_NATURE_STRENGTH]: [ "Сама земля отвергает тебя, я черпаю её силу!", /* ... другие ... */ ], [GAME_CONFIG.ABILITY_ID_DEFENSE_AURA]: [ "Порядок восторжествует над твоим хаосом.", /* ... другие ... */ ], [GAME_CONFIG.ABILITY_ID_HYPNOTIC_GAZE]: [ "Смотри мне в глаза, Балард. И слушай тишину.", /* ... другие ... */ ], [GAME_CONFIG.ABILITY_ID_SEAL_OF_WEAKNESS]: [ "Твоя ярость иссякнет, как вода в песке, Балард!", /* ... другие ... */ ] }, onOpponentAction: { // Действия Баларда [GAME_CONFIG.ABILITY_ID_BALARD_HEAL]: [ "Пытаешься отсрочить неизбежное жалкой темной силой?", /* ... другие ... */ ], [GAME_CONFIG.ABILITY_ID_BALARD_SILENCE]: { success: [ "(Сдавленный вздох)... Ничтожная попытка заглушить Слово!", /* ... другие ... */ ], fail: [ "Твой шепот Тьмы слаб против Света Истины!", /* ... другие ... */ ] }, [GAME_CONFIG.ABILITY_ID_BALARD_MANA_DRAIN]: [ "Ты питаешься Светом, как паразит?!", /* ... другие ... */ ], attackBlocked: [ "Твои удары тщетны перед щитом Порядка.", /* ... другие ... */ ], attackHits: [ "(Шипение боли)... Боль – лишь напоминание о твоем предательстве.", /* ... другие ... */ ] }, onBattleState: { startMerciful: [ "Балард, есть ли еще путь назад?", /* ... другие ... */ ], opponentNearDefeat: [ "Конец близок, Балард. Прими свою судьбу.", /* ... другие ... */ ] } }, pvpAlmagest: { // Насмешки против Альмагест (PvP) - НОВАЯ ЛОГИКА base: { generalAttack: [ // Общие фразы при атаке "Тьма не победит, Альмагест!", "Твои иллюзии рассеются перед Светом!", "Пока я стою, порядок будет восстановлен!", "Не думай, что твои трюки остановят меня.", "За каждую искаженную душу - получишь сторицей!", "Сражайся честно, если осмелишься!", "Даже тень боится истинного Света." ], generalCast: [ // Общие фразы при касте Еленой "Сила Света на моей стороне!", "Гармония мира укрепит меня.", "Твоя магия хаоса бессильна здесь.", "Истинная сила - в созидании, не в разрушении.", "Я призываю чистую энергию!", "Свет очистит эту землю от твоей скверны." ] }, onPlayerCast: { // Реакция на конкретные касты Елены [GAME_CONFIG.ABILITY_ID_HEAL]: [ "Я исцеляюсь Светом, который ты отвергла.", "Жизнь восторжествует над твоей некромантией!", "Мое сияние не померкнет." ], [GAME_CONFIG.ABILITY_ID_FIREBALL]: [ "Очищающий огонь для твоей тьмы!", "Почувствуй гнев праведного Света!", "Это пламя ярче твоих теней!" ], [GAME_CONFIG.ABILITY_ID_NATURE_STRENGTH]: [ "Природа дает мне силу, а тебе - лишь презрение.", "Я черпаю из источника жизни, ты - из могилы.", "Естественный порядок против твоего искажения." ], [GAME_CONFIG.ABILITY_ID_DEFENSE_AURA]: [ "Мой щит отразит твою злобу.", "Свет - лучшая защита.", "Твои темные чары не пройдут!" ], [GAME_CONFIG.ABILITY_ID_HYPNOTIC_GAZE]: [ "Смотри в глаза Истине, колдунья!", "Твои лживые речи умолкнут!", "Хватит прятаться за иллюзиями!", "Я вижу твою истинную, уродливую суть." ], [GAME_CONFIG.ABILITY_ID_SEAL_OF_WEAKNESS]: [ "Твоя темная сила иссякнет!", "Я ослабляю твою связь с бездной!", "Почувствуй, как тает твоя энергия!" ] }, onOpponentAction: { // Реакция на действия Альмагест [GAME_CONFIG.ABILITY_ID_ALMAGEST_HEAL]: [ "Лечишь раны тьмой? Она лишь глубже проникнет в тебя.", "Твоя магия несет лишь порчу, даже исцеляя.", "Жалкие попытки отсрочить возмездие." ], [GAME_CONFIG.ABILITY_ID_ALMAGEST_DAMAGE]: [ "Твоя тень лишь царапает, не ранит.", "Слабый удар! Тьма делает тебя немощной.", "Думала, это причинит мне боль?", "Свет поглотит твой мрак!" ], [GAME_CONFIG.ABILITY_ID_ALMAGEST_BUFF_ATTACK]: [ "Черпаешь силы из бездны? Она поглотит и тебя.", "Твое усиление - лишь агония искаженной энергии.", "Сколько бы ты ни копила тьму, Свет сильнее." ], [GAME_CONFIG.ABILITY_ID_ALMAGEST_BUFF_DEFENSE]: [ "Щит из теней? Он рассыплется прахом!", "Твоя защита иллюзорна, как и твоя сила.", "Не спрячешься от Света за этой ширмой!" ], [GAME_CONFIG.ABILITY_ID_ALMAGEST_DISABLE]: [ // Если попала под Раскол Разума "(Сдавленно) Твои ментальные атаки отвратительны!", "Тьма в моей голове... я вырвусь!", "Не сломить мой дух твоими фокусами!" ], [GAME_CONFIG.ABILITY_ID_ALMAGEST_DEBUFF]: [ // Если попала под Проклятие Увядания "Истощаешь мою силу? Я восстановлю ее Светом!", "Твое проклятие слабо.", "Чувствую холод... но он лишь закаляет волю!" ], attackBlocked: [ "Твоя атака разбилась о мой щит Света!", "Предсказуемо и слабо, Альмагест.", "Моя защита безупречна." ], attackHits: [ "(Резкий вздох) Коснулась... Но Свет исцелит рану.", "Эта царапина - ничто!", "Ты заплатишь за это!", "Боль лишь укрепляет мою решимость!" ] }, onBattleState: { start: [ // Начало PvP боя "Альмагест! Твоим темным делам пришел конец!", "Во имя Света, я остановлю тебя!", "Приготовься к битве, служительница тьмы!", "Эта дуэль решит судьбу многих." ], opponentNearDefeat: [ // Альмагест почти побеждена "Твоя тьма иссякает, колдунья!", "Сдавайся, пока Свет не испепелил тебя!", "Конец твоим злодеяниям близок!", "Прими свое поражение!" ] } } }; // --- Экспорт Данных --- const gameData = { // Базовые статы playerBaseStats, opponentBaseStats, // Балард almagestBaseStats, // Альмагест // Способности playerAbilities, // Елена opponentAbilities, // Балард almagestAbilities, // Альмагест // Система насмешек (с разделением) elenaTauntSystem }; if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { module.exports = gameData; } // console.log("data.js загружен и gameData объект создан/экспортирован.");