chore(release): 0.3.1
[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
25   const sql = [];
26   each(skillExpDiff, (val, skillId: SkillID) => {
27     const skill = playerSkills.get(skillId);
28     const def = Skills.get(skillId);
29     if(skill && def) {
30       skill.exp += val;
31       if(skill.exp >= def.expToLevel(skill.level + 1)) {
32         skill.level++;
33         skill.exp -= def.expToLevel(skill.level);
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
40   if(sql.length) {
41     await db.raw(sql.join(';'));
42   }
43
44 }