diff --git a/client/src/pages/CampaignView.tsx b/client/src/pages/CampaignView.tsx index 74dfde8..d509c48 100644 --- a/client/src/pages/CampaignView.tsx +++ b/client/src/pages/CampaignView.tsx @@ -312,7 +312,8 @@ export default function CampaignView() { } async function handleHpChange(characterId: number, hp: number) { - await updateCharacter(characterId, { hp_current: hp }); + const clampedHp = Math.max(0, hp); + await updateCharacter(characterId, { hp_current: clampedHp }); } async function handleStatChange( diff --git a/server/src/routes/characters.ts b/server/src/routes/characters.ts index 58807b1..b1a830b 100644 --- a/server/src/routes/characters.ts +++ b/server/src/routes/characters.ts @@ -721,9 +721,17 @@ router.post("/:id/rest", requireAuth, async (req, res, next) => { "DELETE FROM character_conditions WHERE character_id = ?", [req.params.id] ); - const io = req.app.get("io"); - const char = await getCharacterCampaignId(Number(req.params.id)); - io.to(String(char.campaign_id)).emit("character:rested", { characterId: Number(req.params.id) }); + const [charRow] = await db.execute( + "SELECT * FROM characters WHERE id = ?", + [req.params.id] + ); + const io: Server = req.app.get("io"); + broadcastToCampaign(io, Number(charRow[0].campaign_id), "character:updated", { + ...charRow[0], + overrides: parseJson(charRow[0].overrides), + conditions: [], + }); + io.to(String(charRow[0].campaign_id)).emit("character:rested", { characterId: Number(req.params.id) }); res.json({ ok: true }); } catch (err) { next(err); } });