chore(release): 0.3.2
[risinglegends.git] / src / server / skills.ts
1 import {Skills, Skill, SkillID} from '../shared/skills';
2 import { db } from './lib/db';
3 import { each } from 'lodash';
4
5 export async function getPlayerSkills(playerId: string): Promise<Skill[]> {
6   return db.select('*').from<Skill>('player_skills').where({
7     player_id: playerId
8   });
9 }
10
11 export async function getPlayerSkillsAsObject(playerId: string): Promise<Map<SkillID, Skill>> {
12   const arr = await getPlayerSkills(playerId);
13
14   const skillMap = arr.reduce((acc, skill) => {
15     acc.set(skill.id, skill);
16     return acc;
17   }, new Map<SkillID, Skill>());
18
19
20   return skillMap;
21 }
22
23 export async function updatePlayerSkills(playerId: string, playerSkills:Map<SkillID, Skill>, skillExpDiff: Record<SkillID, number>) {
24   const sql = [];
25   each(skillExpDiff, (val, skillId: SkillID) => {
26     const skill = playerSkills.get(skillId);
27     const def = Skills.get(skillId);
28     if(skill && def) {
29       skill.exp += val;
30       if(skill.exp >= def.expToLevel(skill.level + 1)) {
31         skill.level++;
32         skill.exp -= def.expToLevel(skill.level);
33       }
34       sql.push(`update player_skills set exp = ${skill.exp}, level = ${skill.level} where id = '${skillId}' and player_id = '${playerId}'`);
35     }
36
37   });
38
39   if(sql.length) {
40     await db.raw(sql.join(';'));
41   }
42
43 }