export class Reputation { constructor(game) { this.game = game; this.value = 0; // -100 to +100 } change(amount) { const prevLevel = this.getLevel(); this.value = Math.max(-100, Math.min(100, this.value + amount)); const newLevel = this.getLevel(); if (newLevel !== prevLevel) { if (amount > 0) { this.game.notify(`Репутация: ${newLevel}`, 'good'); } else { this.game.notify(`Репутация: ${newLevel}`, 'bad'); } // Квест на репутацию if (this.value >= 50) { this.game.questSystem.onEvent('reputation_level'); } } } getLevel() { if (this.value <= -50) return 'Изгой'; if (this.value <= -20) return 'Подозрительный'; if (this.value < 20) return 'Незнакомец'; if (this.value < 50) return 'Знакомый'; if (this.value < 80) return 'Уважаемый'; return 'Свой человек'; } getColor() { if (this.value <= -50) return '#f44336'; if (this.value <= -20) return '#ff9800'; if (this.value < 20) return '#aaa'; if (this.value < 50) return '#8bc34a'; if (this.value < 80) return '#4caf50'; return '#ffd740'; } // Модификатор для попрошайничества getBegModifier() { let mod = 1; if (this.value >= 50) mod = 1.5; else if (this.value >= 20) mod = 1.2; else if (this.value <= -50) mod = 0.5; else if (this.value <= -20) mod = 0.7; // Низкая гигиена — прохожие брезгуют if (this.game.player && this.game.player.stats.hygiene < 30) { mod *= 0.7; } return mod; } // Модификатор оплаты за работу getJobPayModifier() { if (this.value >= 80) return 1.3; if (this.value >= 50) return 1.15; if (this.value >= 20) return 1.05; return 1; } // Модификатор цен в магазине getShopModifier() { if (this.value >= 80) return 0.85; if (this.value >= 50) return 0.92; if (this.value <= -50) return 1.2; return 1; } // Модификатор опасности (чаще нападают при низкой репутации) getDangerModifier() { if (this.value >= 50) return 0.5; if (this.value >= 20) return 0.8; if (this.value <= -50) return 1.5; if (this.value <= -20) return 1.3; return 1; } getSaveData() { return { value: this.value }; } loadSaveData(data) { if (data) this.value = data.value || 0; } reset() { this.value = 0; } }