client: API layer — types and client updates for new server fields
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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<InventoryResponse>('/inventory'),
|
||||
|
||||
// Missions
|
||||
missionsAvailable: () => request<{ missions: Mission[] }>('/missions/available'),
|
||||
missionsAvailable: () => request<{ missions: AvailableMission[] }>('/missions/available'),
|
||||
missionsActive: () => request<{ missions: ActiveMission[] }>('/missions/active'),
|
||||
startMission: (missionId: string) =>
|
||||
request<StartMissionResponse>(`/missions/${missionId}/start`, { method: 'POST' }),
|
||||
claimMission: (playerMissionId: string) =>
|
||||
request<ClaimMissionResponse>(`/missions/${playerMissionId}/claim`, { method: 'POST' }),
|
||||
abandonMission: (playerMissionId: string) =>
|
||||
request<AbandonMissionResponse>(`/missions/${playerMissionId}/abandon`, { method: 'POST' }),
|
||||
|
||||
// Events
|
||||
events: () => request<{ events: WorldEvent[] }>('/events/current'),
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user