Summary
Classes in many games have specializations (subclasses) that determine how a class fulfills a role. For example, a WoW Mage has three specs: Arcane, Fire, and Frost — all DPS. A Druid can be Balance (DPS), Feral (DPS/Tank), Restoration (Healer), or Guardian (Tank).
Currently bbGuild has classes and roles but no layer between them. This means we can't express "this player plays a Frost Mage" — only "this player is a Mage" and separately "this player's role is DPS".
Proposed design
New bb_specializations table:
| Column |
Type |
Description |
| spec_id |
INT (PK, auto) |
Primary key |
| game_id |
VARCHAR |
Game identifier |
| class_id |
INT |
FK to bb_classes |
| role_id |
INT |
FK to bb_gameroles |
| spec_name |
VARCHAR |
Display name (via bb_language) |
| spec_icon |
VARCHAR |
Icon filename |
Design questions to resolve
- Is a spec always tied to exactly one role? In WoW, yes — each spec has a fixed role. Other games may differ.
- Can a class have zero subclasses? Custom game or simpler games shouldn't require them. The feature should be optional per game.
- Should the player model track current spec? Add
player_spec_id to bb_players (nullable).
- Should recruitment specify spec or just class+role? Currently recruitment is class+role. Spec-level recruitment would be more precise.
- How do game plugins seed specs? WoW plugin would provide all specs; Custom game would have none. The installer pattern already supports this.
Scope of changes
- New migration:
bb_specializations table + bb_language entries + nullable player_spec_id on bb_players
- Model: new
specialization class in model/games/rpg/
- ACP: manage specs per class on the Edit Game page (nested under classes)
- Game plugins: WoW plugin seeds all specs; other plugins opt-in
- Roster: optionally display spec alongside class
- Recruitment: optionally recruit by spec
- Player edit (ACP/UCP): spec dropdown filtered by selected class
Phase
Phase 2 feature. Not blocking any current functionality.
Terminology
Different games use different terms:
- WoW: Specialization (spec)
- FFXIV: Job (with base class)
- GW2: Elite Specialization / Trait Line
- Generic: Subclass
The UI label should come from the game plugin (default: "Specialization").
Summary
Classes in many games have specializations (subclasses) that determine how a class fulfills a role. For example, a WoW Mage has three specs: Arcane, Fire, and Frost — all DPS. A Druid can be Balance (DPS), Feral (DPS/Tank), Restoration (Healer), or Guardian (Tank).
Currently bbGuild has classes and roles but no layer between them. This means we can't express "this player plays a Frost Mage" — only "this player is a Mage" and separately "this player's role is DPS".
Proposed design
New
bb_specializationstable:Design questions to resolve
player_spec_idtobb_players(nullable).Scope of changes
bb_specializationstable +bb_languageentries + nullableplayer_spec_idonbb_playersspecializationclass inmodel/games/rpg/Phase
Phase 2 feature. Not blocking any current functionality.
Terminology
Different games use different terms:
The UI label should come from the game plugin (default: "Specialization").