fix: properly increment skill level
authorxangelo <me@xangelo.ca>
Fri, 25 Aug 2023 15:57:09 +0000 (11:57 -0400)
committerxangelo <me@xangelo.ca>
Fri, 25 Aug 2023 15:57:09 +0000 (11:57 -0400)
src/server/fight.ts
src/server/skills.ts

index 855589a2d06efb7b980447e70602e16c57b0b247..3ceb706031e1cf4520a18177b0fd0bcca53e9a46 100644 (file)
@@ -167,7 +167,7 @@ export async function fightRound(player: Player, monster: MonsterWithFaction,  d
     });
   });
 
-  await updatePlayerSkills(player.id, skillsUsed);
+  await updatePlayerSkills(player.id, playerSkills, skillsUsed);
 
   const playerFinalDamage = (data.action === 'cast' && !anyDamageSpells) ? 0 : Math.floor(playerDamage + playerDamageAfterMasteries);
   const playerFinalHeal = Math.floor(boost.hp + hpHealAfterMasteries);
index 131c1415bd2f553a774e92117b121f77a65d99c4..80a6405f4f9d4d6776fe05970ecabe248a9bc158 100644 (file)
@@ -1,4 +1,4 @@
-import {Skill, SkillID} from '../shared/skills';
+import {Skills, Skill, SkillID} from '../shared/skills';
 import { db } from './lib/db';
 import { each } from 'lodash';
 
@@ -20,11 +20,21 @@ export async function getPlayerSkillsAsObject(playerId: string): Promise<Map<Ski
   return skillMap;
 }
 
-export async function updatePlayerSkills(playerId: string, skills: Record<SkillID, number>) {
+export async function updatePlayerSkills(playerId: string, playerSkills:Map<SkillID, Skill>, skillExpDiff: Record<SkillID, number>) {
 
   const sql = [];
-  each(skills, (val, skillId) => {
-    sql.push(`update player_skills set exp = exp + ${val} where id = '${skillId}' and player_id = '${playerId}'`);
+  each(skillExpDiff, (val, skillId: SkillID) => {
+    const skill = playerSkills.get(skillId);
+    const def = Skills.get(skillId);
+    if(skill && def) {
+      skill.exp += val;
+      if(skill.exp >= def.expToLevel(skill.level + 1)) {
+        skill.level++;
+        skill.exp -= def.expToLevel(skill.level);
+        sql.push(`update player_skills set exp = ${skill.exp}, level = ${skill.level} where id = '${skillId}' and player_id = '${playerId}'`);
+      }
+    }
+
   });
 
   if(sql.length) {