From 25376553e763a392e30c8783dadb80ad963f4470 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Wed, 10 Jun 2026 00:11:44 +0200 Subject: [PATCH] =?UTF-8?q?client:=20API=20layer=20=E2=80=94=20types=20and?= =?UTF-8?q?=20client=20updates=20for=20new=20server=20fields?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add AvailableMission (extends Mission with estimatedSuccessChance, canStart), AbandonMissionResponse type. Extend Mission with description, minLevel, rewardItemName/Quantity; ClaimMissionResponse with moneyChange, fine, lootItem fields; City with mapX/mapY; MarketEntry with basePrice. Add abandonMission() API call. Co-Authored-By: Claude Sonnet 4.6 --- client/src/api/api.ts | 7 +++++-- client/src/api/types.ts | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/client/src/api/api.ts b/client/src/api/api.ts index b2922ad..ad092d1 100644 --- a/client/src/api/api.ts +++ b/client/src/api/api.ts @@ -1,13 +1,14 @@ import { request } from './http'; import type { + AbandonMissionResponse, ActiveMission, AuthResponse, + AvailableMission, City, ClaimMissionResponse, InventoryResponse, LeaderboardResponse, MarketResponse, - Mission, PlayerMeResponse, StartMissionResponse, TradeResponse, @@ -44,12 +45,14 @@ export const api = { inventory: () => request('/inventory'), // Missions - missionsAvailable: () => request<{ missions: Mission[] }>('/missions/available'), + missionsAvailable: () => request<{ missions: AvailableMission[] }>('/missions/available'), missionsActive: () => request<{ missions: ActiveMission[] }>('/missions/active'), startMission: (missionId: string) => request(`/missions/${missionId}/start`, { method: 'POST' }), claimMission: (playerMissionId: string) => request(`/missions/${playerMissionId}/claim`, { method: 'POST' }), + abandonMission: (playerMissionId: string) => + request(`/missions/${playerMissionId}/abandon`, { method: 'POST' }), // Events events: () => request<{ events: WorldEvent[] }>('/events/current'), diff --git a/client/src/api/types.ts b/client/src/api/types.ts index 88b4a3d..c446c6b 100644 --- a/client/src/api/types.ts +++ b/client/src/api/types.ts @@ -27,6 +27,8 @@ export type City = { riskLevel: number; policePressure: number; economyModifier: number; + mapX: number; + mapY: number; travelCost: number; }; @@ -54,6 +56,7 @@ export type MarketEntry = { name: string; buyPrice: number; sellPrice: number; + basePrice: number; demand: number; supply: number; rarity: number; @@ -96,8 +99,10 @@ export type Mission = { id: string; cityId: string; title: string; + description: string; type: 'DELIVERY' | 'THEFT' | 'SMUGGLING' | 'INTEL'; difficulty: number; + minLevel: number; durationSeconds: number; rewardMoney: number; rewardXp: number; @@ -105,9 +110,17 @@ export type Mission = { requiredItemId: string | null; requiredItemName: string | null; requiredItemQuantity: number | null; + rewardItemName: string | null; + rewardItemQuantity: number | null; expiresAt: string; }; +/** Missione disponibile, arricchita con la stima calcolata per il giocatore. */ +export type AvailableMission = Mission & { + estimatedSuccessChance: number; + canStart: boolean; +}; + export type ActiveMission = { playerMissionId: string; status: 'STARTED' | 'COMPLETED' | 'FAILED'; @@ -130,11 +143,21 @@ export type ClaimMissionResponse = { successChance: number; rewardMoney: number; rewardXp: number; + moneyChange: number; + fine: number; + lootItemName: string | null; + lootItemQuantity: number | null; reputationChange: number; levelsGained: number; player: Player; }; +export type AbandonMissionResponse = { + playerMissionId: string; + reputationChange: number; + player: Player; +}; + export type LeaderboardEntry = { rank: number; playerId: string;