export type Notification = { id?: string title?: string message?: string } export type Asset = { key: string url: string group: 'tiles' | 'objects' | 'sprites' | 'sprite_animations' | 'sound' | 'music' | 'ui' | 'font' | 'other' frameCount?: number frameWidth?: number frameHeight?: number } export type Tile = { id: string name: string tags: any | null createdAt: Date updatedAt: Date } export type Object = { id: string name: string tags: any | null originX: number originY: number isAnimated: boolean frameSpeed: number frameWidth: number frameHeight: number createdAt: Date updatedAt: Date ZoneObject: ZoneObject[] } export type Item = { id: string name: string description: string | null stackable: boolean createdAt: Date updatedAt: Date characters: CharacterItem[] } export type Zone = { id: number name: string width: number height: number tiles: any | null pvp: boolean zoneEffects: ZoneEffects zoneEventTiles: ZoneEventTile[] zoneObjects: ZoneObject[] characters: Character[] chats: Chat[] createdAt: Date updatedAt: Date } export type ZoneEffects = { id: string zoneId: number zone: Zone effect: string strength: number } export type ZoneObject = { id: string zoneId: number zone: Zone objectId: string object: Object depth: number isRotated: boolean positionX: number positionY: number } export enum ZoneEventTileType { BLOCK = 'BLOCK', TELEPORT = 'TELEPORT', NPC = 'NPC', ITEM = 'ITEM' } export type ZoneEventTile = { id: string zoneId: number zone: Zone type: ZoneEventTileType positionX: number positionY: number teleport?: ZoneEventTileTeleport } export type ZoneEventTileTeleport = { id: string zoneEventTileId: string zoneEventTile: ZoneEventTile toZoneId: number toZone: Zone toPositionX: number toPositionY: number toRotation: number } export type User = { id: number username: string password: string characters: Character[] } export enum CharacterGender { MALE = 'MALE', FEMALE = 'FEMALE' } export enum CharacterRace { HUMAN = 'HUMAN', ELF = 'ELF', DWARF = 'DWARF', ORC = 'ORC', GOBLIN = 'GOBLIN' } export type CharacterType = { id: number name: string gender: CharacterGender race: CharacterRace characters: Character[] spriteId: string sprite: Sprite createdAt: Date updatedAt: Date } export type Character = { id: number userId: number user: User name: string hitpoints: number mana: number level: number experience: number alignment: number role: string positionX: number positionY: number rotation: number zoneId: number zone: Zone characterTypeId: number | null characterType: CharacterType | null chats: Chat[] items: CharacterItem[] } export type ExtendedCharacter = Character & { isMoving?: boolean } export type CharacterItem = { id: number characterId: number character: Character itemId: string item: Item quantity: number } export type Sprite = { id: string name: string createdAt: Date updatedAt: Date spriteActions: SpriteAction[] characterTypes: CharacterType[] } export type SpriteAction = { id: string spriteId: string sprite: Sprite action: string sprites: string[] originX: number originY: number isAnimated: boolean isLooping: boolean frameWidth: number frameHeight: number frameSpeed: number } export type Chat = { id: number characterId: number character: Character zoneId: number zone: Zone message: string createdAt: Date } export type ChatMessage = { character: Character message: string } export type WorldSettings = { date: Date isRainEnabled: boolean isFogEnabled: boolean fogDensity: number }