bc/server_modules/data.js
2025-05-13 04:14:01 +00:00

384 lines
21 KiB
JavaScript
Raw 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_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 объект создан/экспортирован.");