mirror of
https://github.com/ceratic/project_vollidioten_website.git
synced 2026-05-14 00:16:47 +02:00
- 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
158 lines
3.2 KiB
TypeScript
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;
|
|
}
|