model Tile { id String @id @default(uuid()) name String tags Json? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Object { id String @id @default(uuid()) name String tags Json? origin_x Decimal @default(0) origin_y Decimal @default(0) isAnimated Boolean @default(false) frameSpeed Int @default(0) frameWidth Int @default(0) frameHeight Int @default(0) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ZoneObject ZoneObject[] } model Item { id String @id @default(uuid()) name String description String? stackable Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt characters CharacterItem[] } model Zone { id Int @id @default(autoincrement()) name String width Int @default(10) height Int @default(10) tiles Json? pvp Boolean @default(false) zoneEventTiles ZoneEventTile[] zoneEventTileTeleports ZoneEventTileTeleport[] zoneObjects ZoneObject[] characters Character[] chats Chat[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ZoneObject { id String @id @default(uuid()) zoneId Int zone Zone @relation(fields: [zoneId], references: [id], onDelete: Cascade) objectId String object Object @relation(fields: [objectId], references: [id], onDelete: Cascade) depth Int @default(0) position_x Int @default(0) position_y Int @default(0) } enum ZoneEventTileType { BLOCK TELEPORT NPC ITEM } model ZoneEventTile { id String @id @default(uuid()) zoneId Int zone Zone @relation(fields: [zoneId], references: [id], onDelete: Cascade) type ZoneEventTileType position_x Int position_y Int teleportId String? @unique teleport ZoneEventTileTeleport? @relation("ZoneEventTileTeleport", fields: [teleportId], references: [id]) } model ZoneEventTileTeleport { id String @id @default(uuid()) zoneEventTile ZoneEventTile? @relation("ZoneEventTileTeleport") toZoneId Int toZone Zone @relation(fields: [toZoneId], references: [id], onDelete: Cascade) toPosition_x Int toPosition_y Int }