Files
project_vollidioten_website/types.ts

117 lines
2.5 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;
}