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;