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? originX Decimal @default(0) originY Decimal @default(0) isAnimated Boolean @default(false) frameRate Int @default(0) frameWidth Int @default(0) frameHeight Int @default(0) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ZoneObject ZoneObject[] } model Zone { id Int @id @default(autoincrement()) name String width Int @default(10) height Int @default(10) tiles Json? pvp Boolean @default(false) zoneEffects ZoneEffect[] zoneEventTiles ZoneEventTile[] zoneEventTileTeleports ZoneEventTileTeleport[] zoneObjects ZoneObject[] characters Character[] chats Chat[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ZoneEffect { id String @id @default(uuid()) zoneId Int zone Zone @relation(fields: [zoneId], references: [id], onDelete: Cascade) effect String strength Int } 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) isRotated Boolean @default(false) positionX Int @default(0) positionY 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 positionX Int positionY Int teleport ZoneEventTileTeleport? } model ZoneEventTileTeleport { id String @id @default(uuid()) zoneEventTileId String @unique zoneEventTile ZoneEventTile @relation(fields: [zoneEventTileId], references: [id], onDelete: Cascade) toZoneId Int toZone Zone @relation(fields: [toZoneId], references: [id], onDelete: Cascade) toRotation Int toPositionX Int toPositionY Int }