@@ -696,6 +696,9 @@ model Mobs {
696696 classId Int ? @map (" class_id " )
697697 race Race @default (HUMANOID )
698698 mobFlags MobFlag []
699+ // Lua expression defining who this mob attacks on sight
700+ // Examples: "target.alignment <= -350", "target.race == 'HUMAN'", "true" (attacks all)
701+ aggroCondition String ? @map (" aggro_condition " )
699702 effectFlags EffectFlag []
700703 position Position @default (STANDING )
701704 defaultPosition Position @default (STANDING )
@@ -725,8 +728,7 @@ model Mobs {
725728 characterClass CharacterClass ? @relation (fields : [classId ] , references : [id ] )
726729 zones Zones @relation (fields : [zoneId ] , references : [id ] , onDelete : Cascade )
727730 shops Shops []
728- triggers Triggers [] // Legacy direct FK (deprecated)
729- mobTriggers MobTriggers [] // Proper many-to-many via junction table
731+ mobTriggers MobTriggers [] // Trigger attachments via junction table
730732 shopMobs ShopMobs [] // Mobs for sale at pet/mount shops
731733 // Quest system relations
732734 questsAsTrigger Quests [] @relation (" questTriggerMob " ) // MOB trigger type quests
@@ -832,6 +834,13 @@ model Objects {
832834 concealment Int @default (0 )
833835 values Json @default (" {}" )
834836 zoneId Int @map (" zone_id " )
837+
838+ // Permanent fixture: If set, this object always exists in this room (no reset needed)
839+ // Use for fountains, signs, furniture, etc. that never move or despawn
840+ fixtureRoomZoneId Int ? @map (" fixture_room_zone_id " )
841+ fixtureRoomId Int ? @map (" fixture_room_id " )
842+ fixtureRoom Room ? @relation (" roomFixtures " , fields : [fixtureRoomZoneId , fixtureRoomId ] , references : [zoneId , id ] )
843+
835844 createdAt DateTime @default (now () ) @map (" created_at " )
836845 updatedAt DateTime @updatedAt @map (" updated_at " )
837846 deletedAt DateTime ? @map (" deleted_at " )
@@ -863,8 +872,7 @@ model Objects {
863872 objectResistances ObjectResistance [] // Resistance bonuses granted by this item
864873 zones Zones @relation (fields : [zoneId ] , references : [id ] , onDelete : Cascade )
865874 shopItems ShopItems []
866- triggers Triggers [] // Legacy direct FK (deprecated)
867- objectTriggers ObjectTriggers [] // Proper many-to-many via junction table
875+ objectTriggers ObjectTriggers [] // Trigger attachments via junction table
868876 objectAbilities ObjectAbilities [] // Cast spells (quaff potion → cast spell)
869877 consumableEffects ConsumableEffect [] // Direct effects (eat food → apply effect)
870878 accountItems AccountItems []
@@ -975,6 +983,7 @@ model RoomExit {
975983 roomZoneId Int @map (" room_zone_id " )
976984 roomId Int @map (" room_id " )
977985 flags ExitFlag [] @default ([] )
986+ defaultState ExitState @default (OPEN ) @map (" default_state " ) // State on zone reset
978987
979988 // FLAG REORGANIZATION FIELDS (NEW)
980989 // Replaces CLOSED/LOCKED runtime flags with default state (restored on zone reset)
@@ -1026,6 +1035,7 @@ model Room {
10261035 entrances RoomExit [] @relation (" roomEntrances " )
10271036 roomExtraDescriptions RoomExtraDescriptions []
10281037 zones Zones @relation (fields : [zoneId ] , references : [id ] , onDelete : Cascade )
1038+ fixtures Objects [] @relation (" roomFixtures " ) // Permanent objects in this room
10291039 // Quest system relations
10301040 questObjectives QuestObjectives []
10311041 questTriggerRoom Quests [] @relation (" questTriggerRoom " )
0 commit comments