Files
Hommie_RPG_Game/js/game/Skills.js
Maxim Dolgolyov fb5f09212b Initial commit: 3D Hommie RPG game
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 01:04:09 +03:00

79 lines
2.6 KiB
JavaScript

export class Skills {
constructor(game) {
this.game = game;
this.skills = {
scavenging: { name: 'Поиск', level: 1, xp: 0, xpNeeded: 10, desc: 'Шанс найти лучший лут' },
begging: { name: 'Убеждение', level: 1, xp: 0, xpNeeded: 8, desc: 'Шанс получить больше при попрошайничестве' },
survival: { name: 'Выживание', level: 1, xp: 0, xpNeeded: 15, desc: 'Медленнее теряете статы' },
trading: { name: 'Торговля', level: 1, xp: 0, xpNeeded: 12, desc: 'Лучшие цены в магазине' },
};
this.maxLevel = 10;
}
addXP(skillKey, amount) {
const skill = this.skills[skillKey];
if (!skill || skill.level >= this.maxLevel) return;
skill.xp += amount;
if (skill.xp >= skill.xpNeeded) {
skill.xp -= skill.xpNeeded;
skill.level++;
skill.xpNeeded = Math.floor(skill.xpNeeded * 1.5);
this.game.notify(`${skill.name} повышен до уровня ${skill.level}!`, 'good');
this.game.sound.playQuestComplete();
}
}
getLevel(skillKey) {
return this.skills[skillKey]?.level || 1;
}
// Модификаторы
getScavengeBonus() {
return 1 + (this.getLevel('scavenging') - 1) * 0.1;
}
getBegBonus() {
return 1 + (this.getLevel('begging') - 1) * 0.15;
}
getSurvivalModifier() {
return 1 - (this.getLevel('survival') - 1) * 0.05;
}
getTradeDiscount() {
return Math.max(0.6, 1 - (this.getLevel('trading') - 1) * 0.05);
}
getSaveData() {
const data = {};
for (const [key, skill] of Object.entries(this.skills)) {
data[key] = { level: skill.level, xp: skill.xp, xpNeeded: skill.xpNeeded };
}
return data;
}
loadSaveData(data) {
if (!data) return;
for (const [key, saved] of Object.entries(data)) {
if (this.skills[key]) {
this.skills[key].level = saved.level;
this.skills[key].xp = saved.xp;
this.skills[key].xpNeeded = saved.xpNeeded;
}
}
}
reset() {
for (const skill of Object.values(this.skills)) {
skill.level = 1;
skill.xp = 0;
skill.xpNeeded = skill === this.skills.scavenging ? 10 :
skill === this.skills.begging ? 8 :
skill === this.skills.survival ? 15 : 12;
}
}
}