79 lines
2.6 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
}
|