you can now flee a battle
authorxangelo <git@xangelo.ca>
Fri, 2 Jun 2023 18:44:04 +0000 (14:44 -0400)
committerxangelo <git@xangelo.ca>
Fri, 2 Jun 2023 18:44:04 +0000 (14:44 -0400)
src/server/api.ts

index d990e1fa6ec7f1c302a4c9ca3328162b4b4979ec..3df5fac7d02ca56c71ff6663a858c913ac85518c 100644 (file)
@@ -277,6 +277,25 @@ io.on('connection', async socket => {
 
   socket.on('fight', async (data: {action: 'attack' | 'cast' | 'flee', target: 'head' | 'body' | 'arms' | 'legs'}) => {
     const monster = await loadMonsterFromFight(player.id);
+    const roundData: FightRound = {
+      monster,
+      player,
+      winner: 'in-progress',
+      roundDetails: [],
+      rewards: {
+        exp: 0,
+        gold: 0,
+        levelIncrease: false
+      }
+    };
+    if(data.action === 'flee') {
+      roundData.roundDetails.push(`You managed to escape from the ${monster.name}!`)
+      roundData.winner = 'monster';
+      await clearFight(player.id);
+
+      socket.emit('fight-over', {roundData, monsters: []});
+      return;
+    }
     const equippedItems = await getEquippedItems(player.id);
 
     // we only use this if the player successfully defeated the monster 
@@ -325,18 +344,6 @@ io.on('connection', async socket => {
       boost.damage += item.boost_damage;
     });
 
-    const roundData: FightRound = {
-      monster,
-      player,
-      winner: 'in-progress',
-      roundDetails: [],
-      rewards: {
-        exp: 0,
-        gold: 0,
-        levelIncrease: false
-      }
-    };
-
     const primaryStat = data.action === 'attack' ? player.strength : player.constitution;
     const boostStat = data.action === 'attack' ? boost.strength : boost.constitution;
     const attackType = data.action === 'attack' ? 'physical' : 'magical';