model RaceAbilities {
id Int @id @default(autoincrement())
race Race
abilityId Int @map("ability_id")
category SkillCategory @default(SECONDARY)
bonus Int @default(0)
raceData Races @relation(fields: [race], references: [race], onDelete: Cascade)
ability Ability @relation(fields: [abilityId], references: [id], onDelete: Cascade)
@@unique([race, abilityId])
}Purpose: Racial ability bonuses
- Elves get +15 to Archery, +10 to Stealth
- Dwarves get +20 to Mining, +15 to Smithing
- Category system: PRIMARY, SECONDARY, RESTRICTED, FORBIDDEN
model ObjectAbilities {
id Int @id @default(autoincrement())
abilityId Int @map("ability_id")
level Int @default(1)
objectZoneId Int @map("object_zone_id")
objectId Int @map("object_id")
charges Int?
objects Objects @relation(fields: [objectZoneId, objectId], references: [zoneId, id], onDelete: Cascade)
ability Ability @relation(fields: [abilityId], references: [id], onDelete: Cascade)
@@unique([objectZoneId, objectId, abilityId])
}Purpose: Magical items that cast abilities
- Scrolls: Cast spell once
- Wands: Multiple charges
- Potions: Single use consumables
- Magical weapons: Infinite charges
Added two new relationships to the Ability model:
raceAbilities RaceAbilities[]
objectAbilities ObjectAbilities[]Added relationship to Races model:
raceAbilities RaceAbilities[]Added relationship to Objects model:
objectAbilities ObjectAbilities[]✅ Schema formatted successfully with npx prisma format
✅ No syntax errors
✅ All relationships properly defined
✅ Composite keys respected (objectZoneId + objectId)
-
Create migration:
cd /home/strider/Code/mud/muditor/packages/db pnpm db:migrate -
Generate Prisma clients:
pnpm db:generate
-
Seed data (examples in ABILITY_RESTORATION.md)
- No separate Auras table needed
- Effect model with JSON params handles persistent buffs/debuffs
- Fireball = damage effect + burning DOT effect
- Cleaner and more flexible for seed data
- Single
proficiencyfield (0-100) - Direct increments on ability use
- Capped by character level
- Simple, clear feedback loop
- No intermediate XP tracking needed
The spell/skill → ability refactoring is excellent:
✅ Unified system (one model, not two) ✅ Reusable effects via composition ✅ Clean targeting with enums instead of bitmasks ✅ Extensible (add new types without schema changes) ✅ RaceAbilities restored (racial bonuses) ✅ ObjectAbilities restored (magical items) ✅ Proficiency-based progression (use-based learning) ✅ Effect composition replaces Auras (more flexible)
All original functionality preserved or improved with cleaner design.