Files
Lars Behrends 065a6e657d feat: add world map functionality and admin map management
- Added world map page with interactive marker display
- Implemented admin map management for marker CRUD operations
- Added map layers and markers seed data to database
- Integrated new routes for map functionality
- Updated database configuration for production environment
- Added documentation page route
- Enhanced package.json with required dependencies for map features
2026-01-02 05:08:07 +01:00

158 lines
3.2 KiB
TypeScript

export interface Item {
id: string;
name: string;
count: number;
type: 'tool' | 'block' | 'consumable' | 'misc';
rarity?: 'common' | 'uncommon' | 'rare' | 'epic';
nbtSummary?: string;
}
export interface MinecraftStats {
char: {
health: number;
maxHealth: number;
foodLevel: number;
xpLevel: number;
position: {
x: number;
y: number;
z: number;
};
};
statistics: {
general: { [key: string]: number };
kills: { [key: string]: number };
killed_by: { [key: string]: number };
};
advancements: Array<{
id: string;
title: string;
}>;
lastSync: number;
}
export interface PlayerStats {
playtimeHours: number;
level: number;
role: string;
}
export interface Player {
uuid: string;
username: string;
skinUrl?: string; // Placeholder in a real app
inventory: (Item | null)[];
stats: PlayerStats;
minecraftStats?: MinecraftStats;
storyMarkdown: string;
tags: string[];
isOnline: boolean;
organizationId?: string;
}
export interface CityStats {
taxRate: number;
biome: string;
defenseRating: number; // 0-10
government: string;
specialty: string;
}
export interface Organization {
id: string;
name: string;
type: 'City' | 'Guild' | 'Company';
description: string;
memberCount: number;
status: 'active' | 'archived';
bannerUrl?: string;
gallery?: string[];
establishedYear?: string;
mayor?: string;
cityStats?: CityStats;
}
export interface ShopItem {
id: string;
name: string;
description?: string;
price: number;
currency: 'Gold' | 'Credits' | 'Barter' | 'Diamonds';
stock: number;
type: 'item' | 'service' | 'blueprint';
imageUrl?: string;
materialsRequired?: string; // e.g. "Customer provides Stone"
}
export interface GalleryImage {
id: string;
url: string;
}
export interface Project {
id: string;
title: string;
description: string;
category: 'Enterprise' | 'Service' | 'Story Arc' | 'Faction' | 'Black Market';
status: 'active' | 'recruiting' | 'private' | 'completed';
progress: number; // For story arcs completion or company reputation
owner: string;
employees: string[];
hiring: boolean;
foundedDate?: string;
associatedOrgId?: string; // Links this project to a city or guild
shopCatalog?: ShopItem[];
gallery?: GalleryImage[];
bannerUrl?: string;
logoUrl?: string;
}
export interface DiscordUser {
id: string;
username: string;
discriminator: string;
avatarUrl: string;
linkedPlayerUuid?: string | null;
isAdmin?: boolean;
}
export interface MapMarker {
id: string;
name: string;
type: 'city' | 'poi' | 'player_home' | 'waypoint';
x_coord: number;
z_coord: number;
description: string;
linked_entity_type?: string;
linked_entity_id?: string;
icon_type: string;
color: string;
is_public: boolean;
created_at: string;
updated_at: string;
coordinates?: {
x: number;
y: number;
pixelX: number;
pixelY: number;
};
}
export interface MapLayer {
id: string;
name: string;
description: string;
is_active: boolean;
order_index: number;
created_at: string;
}
export interface MapMetadata {
width: number;
height: number;
offsetX: number;
offsetZ: number;
tileSize: number;
lastUpdated?: string;
}