112 lines
8.0 KiB
JavaScript
112 lines
8.0 KiB
JavaScript
// /server/core/config.js
|
||
|
||
const GAME_CONFIG = {
|
||
// --- Баланс Игры ---
|
||
BLOCK_DAMAGE_REDUCTION: 0.5, // Множитель урона при блоке (0.5 = 50% снижение)
|
||
DAMAGE_VARIATION_MIN: 0.9, // Минимальный множитель урона (0.9 = 90%)
|
||
DAMAGE_VARIATION_RANGE: 0.2, // Диапазон вариации урона (0.2 = от 90% до 110%)
|
||
HEAL_VARIATION_MIN: 0.8, // Минимальный множитель лечения (0.8 = 80%)
|
||
HEAL_VARIATION_RANGE: 0.4, // Диапазон вариации лечения (0.4 = от 80% до 120%)
|
||
NATURE_STRENGTH_MANA_REGEN: 10, // Количество маны, восстанавливаемое "Силой природы" (и ее аналогом)
|
||
|
||
// --- Условия ИИ и Игрока ---
|
||
OPPONENT_HEAL_THRESHOLD_PERCENT: 50, // Процент HP Баларда, НИЖЕ которого он будет пытаться лечиться (для AI)
|
||
PLAYER_MERCY_TAUNT_THRESHOLD_PERCENT: 60, // Процент HP Баларда, НИЖЕ которого Елена использует "доминирующие" насмешки (для AI/текстов)
|
||
PLAYER_HP_BLEED_THRESHOLD_PERCENT: 60, // % HP Елены, НИЖЕ которого Балард предпочитает Кровотечение Безмолвию (для AI)
|
||
BALARD_MANA_DRAIN_HIGH_MANA_THRESHOLD: 60, // % Маны Елены, ВЫШЕ которого Балард может использовать "Похищение Света" (для AI)
|
||
|
||
// --- Способности Баларда (AI) - Конфигурация ---
|
||
SILENCE_DURATION: 3, // Длительность Безмолвия в ходах Елены (после хода Баларда)
|
||
SILENCE_SUCCESS_RATE: 0.7, // Шанс успеха наложения Безмолвия (70%)
|
||
BALARD_SILENCE_ABILITY_COST: 15, // Стоимость "Эха Безмолвия" в Ярости
|
||
BALARD_SILENCE_INTERNAL_COOLDOWN: 5, // К-во ходов Баларда КД ПОСЛЕ успешного использования Безмолвия
|
||
// BALARD_BLEED_COST: 15, // Если будете добавлять способность Кровотечение
|
||
// BALARD_BLEED_POWER: 5,
|
||
// BALARD_BLEED_DURATION: 2,
|
||
// BALARD_BLEED_COOLDOWN: 3,
|
||
|
||
// --- Таймер Хода ---
|
||
TURN_DURATION_SECONDS: 60, // Длительность хода в секундах
|
||
TURN_DURATION_MS: 60 * 1000, // Длительность хода в миллисекундах
|
||
TIMER_UPDATE_INTERVAL_MS: 1000, // Интервал обновления таймера на клиенте (в мс)
|
||
RECONNECT_TIMEOUT_MS: 5000,
|
||
|
||
// --- Идентификаторы и Типы ---
|
||
PLAYER_ID: 'player', // Технический идентификатор для слота 'Игрок 1'
|
||
OPPONENT_ID: 'opponent', // Технический идентификатор для слота 'Игрок 2' / 'Противник'
|
||
ACTION_TYPE_HEAL: 'heal',
|
||
ACTION_TYPE_DAMAGE: 'damage',
|
||
ACTION_TYPE_BUFF: 'buff',
|
||
ACTION_TYPE_DISABLE: 'disable', // Тип для контроля (безмолвие, стан и т.п.)
|
||
ACTION_TYPE_DEBUFF: 'debuff', // Тип для ослаблений, DoT и т.п.
|
||
ACTION_TYPE_DRAIN: 'drain', // Тип для Похищения Света
|
||
|
||
// --- Строки для UI (могут быть полезны и на сервере для логов) ---
|
||
STATUS_READY: 'Готов(а)', // Сделал универсальным
|
||
STATUS_BLOCKING: 'Защищается',
|
||
|
||
// --- Типы Логов (для CSS классов на клиенте, и для структурирования на сервере) ---
|
||
LOG_TYPE_INFO: 'info',
|
||
LOG_TYPE_DAMAGE: 'damage',
|
||
LOG_TYPE_HEAL: 'heal',
|
||
LOG_TYPE_TURN: 'turn',
|
||
LOG_TYPE_SYSTEM: 'system',
|
||
LOG_TYPE_BLOCK: 'block',
|
||
LOG_TYPE_EFFECT: 'effect',
|
||
|
||
// --- CSS Классы (в основном для клиента, но константы могут быть полезны для согласованности) ---
|
||
CSS_CLASS_BLOCKING: 'blocking',
|
||
CSS_CLASS_NOT_ENOUGH_RESOURCE: 'not-enough-resource',
|
||
CSS_CLASS_BUFF_IS_ACTIVE: 'buff-is-active',
|
||
CSS_CLASS_ATTACK_BUFFED: 'attack-buffed',
|
||
CSS_CLASS_SHAKING: 'is-shaking',
|
||
CSS_CLASS_CASTING_PREFIX: 'is-casting-', // Например: is-casting-fireball
|
||
CSS_CLASS_HIDDEN: 'hidden',
|
||
CSS_CLASS_ABILITY_BUTTON: 'ability-button',
|
||
CSS_CLASS_ABILITY_SILENCED: 'is-silenced',
|
||
CSS_CLASS_ABILITY_ON_COOLDOWN: 'is-on-cooldown', // Для отображения кулдауна
|
||
|
||
// --- Задержки (в миллисекундах) ---
|
||
// Эти задержки теперь в основном будут управляться сервером при отправке событий или планировании AI ходов
|
||
DELAY_OPPONENT_TURN: 1200, // Задержка перед ходом AI
|
||
DELAY_AFTER_PLAYER_ACTION: 500, // Сервер может использовать это для паузы перед следующим событием
|
||
// DELAY_AFTER_BLOCK: 500, // Менее релевантно для сервера напрямую
|
||
DELAY_INIT: 100, // Для клиентской инициализации, если нужна
|
||
DELAY_BEFORE_VICTORY_MODAL: 1500, // Для клиента, после получения gameOver
|
||
MODAL_TRANSITION_DELAY: 10, // Для анимации модалки на клиенте
|
||
|
||
// --- Длительности анимаций (в миллисекундах, в основном для клиента, но сервер может знать для таймингов) ---
|
||
ANIMATION_SHAKE_DURATION: 400,
|
||
ANIMATION_CAST_DURATION: 600,
|
||
ANIMATION_DISSOLVE_DURATION: 6000, // var(--dissolve-duration) из CSS
|
||
|
||
// --- Внутренние ID способностей (для удобства в логике, нужны и на сервере, и на клиенте) ---
|
||
// Игрока (Елена)
|
||
ABILITY_ID_HEAL: 'heal', // Малое Исцеление
|
||
ABILITY_ID_FIREBALL: 'fireball', // Огненный Шар
|
||
ABILITY_ID_NATURE_STRENGTH: 'naturesStrength', // Сила Природы
|
||
ABILITY_ID_DEFENSE_AURA: 'defenseAura', // Аура Защиты
|
||
ABILITY_ID_HYPNOTIC_GAZE: 'hypnoticGaze', // Гипнотический взгляд
|
||
ABILITY_ID_SEAL_OF_WEAKNESS: 'sealOfWeakness', // Печать Слабости
|
||
|
||
// Противника (Балард - AI)
|
||
ABILITY_ID_BALARD_HEAL: 'darkPatronage', // Покровительство Тьмы
|
||
ABILITY_ID_BALARD_SILENCE: 'echoesOfSilence', // Эхо Безмолвия
|
||
ABILITY_ID_BALARD_MANA_DRAIN: 'manaDrainHeal', // Похищение Света
|
||
// ABILITY_ID_BALARD_BLEED: 'balardBleed', // Если будете добавлять
|
||
|
||
// Противника (Альмагест - PvP - зеркало Елены)
|
||
ABILITY_ID_ALMAGEST_HEAL: 'darkHeal', // Темное Восстановление (Аналог heal)
|
||
ABILITY_ID_ALMAGEST_DAMAGE: 'shadowBolt', // Теневой Сгусток (Аналог fireball)
|
||
ABILITY_ID_ALMAGEST_BUFF_ATTACK: 'shadowEmpowerment', // Усиление Тьмой (Аналог naturesStrength)
|
||
ABILITY_ID_ALMAGEST_BUFF_DEFENSE: 'voidShield', // Щит Пустоты (Аналог defenseAura)
|
||
ABILITY_ID_ALMAGEST_DISABLE: 'mindShatter', // Раскол Разума (Аналог hypnoticGaze)
|
||
ABILITY_ID_ALMAGEST_DEBUFF: 'curseOfDecay', // Проклятие Увядания (Аналог sealOfWeakness)
|
||
};
|
||
|
||
// Для использования в Node.js модулях
|
||
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
|
||
module.exports = GAME_CONFIG;
|
||
}
|
||
|
||
// console.log("config.js loaded from server/core/ and GAME_CONFIG object created/exported.");
|