feat: unequip items if they hit 0 ap in battle
authorxangelo <me@xangelo.ca>
Sat, 26 Aug 2023 03:14:55 +0000 (23:14 -0400)
committerxangelo <me@xangelo.ca>
Sat, 26 Aug 2023 03:14:55 +0000 (23:14 -0400)
src/server/equipment.ts
src/server/fight.ts
src/server/inventory.ts

index 9ebac7d80318be815dc91c6a212c51723c032247..d1a73bad9e06a9f640eaaecda037e19907bf96b4 100644 (file)
@@ -40,3 +40,9 @@ export async function unequip(player_id: string, item_id: string) {
     item_id
   }).delete();
 }
+
+export async function unequipItems(player_id: string, item_ids: string[]) {
+  return db('equipped').where({
+    player_id
+  }).whereIn('item_id', item_ids).delete();
+}
index 4f18e41eb5789efb6c22f2ff72ceb2f803407fa5..2c9383d19b361f22d2c36fbd40420f151c64a85c 100644 (file)
@@ -3,9 +3,9 @@ import { clearFight, loadMonster, getMonsterList, saveFightState, loadMonsterFro
 import { Player, expToLevel, maxHp, totalDefence, maxVigor } from '../shared/player';
 import { clearTravelPlan } from './map';
 import { updatePlayer } from './player';
-import { getEquippedItems, updateAp, deleteInventoryItem } from './inventory';
+import { getEquippedItems, updateAp } from './inventory';
 import { EquippedItemDetails } from '../shared/equipped';
-import { ArmourEquipmentSlot, EquipmentSlot } from '../shared/inventory';
+import { EquipmentSlot } from '../shared/inventory';
 import { MonsterWithFaction, MonsterForFight } from '../shared/monsters';
 import { getPlayerSkillsAsObject, updatePlayerSkills } from './skills';
 import { SkillID, Skills } from '../shared/skills';
@@ -209,9 +209,16 @@ export async function fightRound(player: Player, monster: MonsterWithFaction,  d
       player.vigor = 0;
     }
 
-    await updateAp(player.id, 1, equippedItems.map(i => i.item_id));
+    const unequippedItems = await updateAp(player.id, 1, equippedItems.map(i => i.item_id));
     await clearFight(player.id);
     await updatePlayer(player);
+
+    if(unequippedItems.length) {
+      unequippedItems.forEach(i => {
+        roundData.roundDetails.push(`Your ${i.name} was too damaged and was unequipped!`);
+      });
+    }
+
     return { roundData, monsters: potentialMonsters, player };
   }
 
@@ -239,10 +246,16 @@ export async function fightRound(player: Player, monster: MonsterWithFaction,  d
     roundData.roundDetails.push(`You were killed by the ${monster.name}`);
 
     await clearFight(player.id);
-    await updateAp(player.id, 5, equippedItems.map(i => i.item_id));
+    const unequippedItems = await updateAp(player.id, 5, equippedItems.map(i => i.item_id));
     await updatePlayer(player);
     await clearTravelPlan(player.id);
 
+    if(unequippedItems.length) {
+      unequippedItems.forEach(i => {
+        roundData.roundDetails.push(`Your ${i.name} was too damaged and was unequipped!`);
+      });
+    }
+
     return { roundData, monsters: [], player};
   }
 
index 33c496fac1f8bebfd0d085bdabd75ec12836ed19..71e5da0f3d34711c6b1edcca69522e5d4a12f741 100644 (file)
@@ -2,6 +2,7 @@ import {InventoryItem, ShopEquipment} from "../shared/inventory";
 import { v4 as uuid } from 'uuid';
 import { db} from './lib/db';
 import {EquippedItemDetails} from "../shared/equipped";
+import { unequipItems } from "./equipment";
 
 
 export async function addInventoryItem(playerId: string, item: ShopEquipment) {
@@ -78,11 +79,19 @@ export async function getEquippedItems(player_id: string): Promise<EquippedItemD
 }
 
 export async function updateAp(player_id: string, apDamage: number, itemIds: string[]) {
-  return db('inventory').where({
+  const res: {item_id: string, currentAp: number, name: string}[] = await db('inventory').where({
     player_id
   }).whereIn('item_id', itemIds).update({
       'currentAp': db.raw(`GREATEST("currentAp" - ${apDamage}, 0)`)
-    });
+    }).returning(['item_id', 'name', 'currentAp']);
+  
+  const itemsToUnequip = res.filter(i => i.currentAp <= 0);
+
+  if(itemsToUnequip.length) {
+    await unequipItems(player_id, itemsToUnequip.map(i => i.item_id));
+  }
+
+  return itemsToUnequip;
 }
 
 export async function deleteInventoryItem(player_id: string, item_id: string) {