feat(isac): add weapon mod data management
This commit is contained in:
+74
-1
@@ -221,7 +221,7 @@ INSERT OR IGNORE INTO role_permissions(role_id,permission_id) VALUES('role-moder
|
||||
CREATE TABLE IF NOT EXISTS oauth_states (state_hash TEXT PRIMARY KEY, provider TEXT NOT NULL, mode TEXT NOT NULL, user_id TEXT REFERENCES users(id) ON DELETE CASCADE, expires_at TEXT NOT NULL, created_at TEXT NOT NULL);
|
||||
CREATE TABLE IF NOT EXISTS data_change_proposals (
|
||||
id TEXT PRIMARY KEY,
|
||||
module TEXT NOT NULL CHECK(module IN ('configuration','attributes','talents','brands','gear','weapons','protocols','skillchips')),
|
||||
module TEXT NOT NULL CHECK(module IN ('configuration','attributes','talents','brands','gear','weapons','weaponmods','protocols','skillchips')),
|
||||
action TEXT NOT NULL,
|
||||
entity_id TEXT,
|
||||
draft_entity_id TEXT,
|
||||
@@ -611,6 +611,79 @@ CREATE TABLE IF NOT EXISTS skill_chip_talent_effects (
|
||||
UNIQUE(talent_id, stat_attribute_id),
|
||||
UNIQUE(talent_id, sort_order)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mods (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
slot_type TEXT NOT NULL CHECK(slot_type IN ('Optics','Muzzle','Underbarrel','Magazine','Barrel','Upper Receiver','Lower Receiver','Trigger')),
|
||||
exotic_weapon_id TEXT REFERENCES weapons(id),
|
||||
active INTEGER NOT NULL DEFAULT 1 CHECK(active IN (0,1)),
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS weapon_mods_name_nocase_idx ON weapon_mods(name COLLATE NOCASE);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_compatible_categories (
|
||||
weapon_mod_id TEXT NOT NULL REFERENCES weapon_mods(id) ON DELETE CASCADE,
|
||||
weapon_category TEXT NOT NULL CHECK(weapon_category IN ('shotgun','rifle','mmr','ar','lmg','smg')),
|
||||
PRIMARY KEY(weapon_mod_id,weapon_category)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_slots (
|
||||
weapon_id TEXT NOT NULL REFERENCES weapons(id) ON DELETE CASCADE,
|
||||
tier INTEGER NOT NULL CHECK(tier BETWEEN 0 AND 2),
|
||||
slot_type TEXT NOT NULL CHECK(slot_type IN ('Optics','Muzzle','Underbarrel','Magazine','Barrel','Upper Receiver','Lower Receiver','Trigger')),
|
||||
PRIMARY KEY(weapon_id,tier,slot_type)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_quality_values (
|
||||
weapon_mod_id TEXT NOT NULL REFERENCES weapon_mods(id) ON DELETE CASCADE,
|
||||
quality TEXT NOT NULL CHECK(quality IN ('Standard','Specialized','Superior','High-end')),
|
||||
primary_level_1_min REAL NOT NULL,
|
||||
primary_level_1_max REAL NOT NULL,
|
||||
primary_level_20_min REAL NOT NULL,
|
||||
primary_level_20_max REAL NOT NULL,
|
||||
PRIMARY KEY(weapon_mod_id,quality),
|
||||
CHECK(primary_level_1_max>=primary_level_1_min),
|
||||
CHECK(primary_level_20_max>=primary_level_20_min),
|
||||
CHECK(primary_level_20_min>=primary_level_1_min),
|
||||
CHECK(primary_level_20_max>=primary_level_1_max)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_secondary_options (
|
||||
weapon_mod_id TEXT NOT NULL REFERENCES weapon_mods(id) ON DELETE CASCADE,
|
||||
stat_attribute_id TEXT NOT NULL REFERENCES stat_attributes(id),
|
||||
PRIMARY KEY(weapon_mod_id,stat_attribute_id)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_secondary_quality_values (
|
||||
weapon_mod_id TEXT NOT NULL,
|
||||
stat_attribute_id TEXT NOT NULL,
|
||||
quality TEXT NOT NULL CHECK(quality IN ('Standard','Specialized','Superior','High-end')),
|
||||
min_value REAL NOT NULL,
|
||||
max_value REAL NOT NULL,
|
||||
PRIMARY KEY(weapon_mod_id,stat_attribute_id,quality),
|
||||
FOREIGN KEY(weapon_mod_id,stat_attribute_id) REFERENCES weapon_mod_secondary_options(weapon_mod_id,stat_attribute_id) ON DELETE CASCADE,
|
||||
CHECK(max_value>=min_value)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_exotic_attributes (
|
||||
id TEXT PRIMARY KEY,
|
||||
weapon_mod_id TEXT NOT NULL REFERENCES weapon_mods(id) ON DELETE CASCADE,
|
||||
stat_attribute_id TEXT NOT NULL REFERENCES stat_attributes(id),
|
||||
level_1_value REAL NOT NULL,
|
||||
level_20_value REAL NOT NULL,
|
||||
sort_order INTEGER NOT NULL CHECK(sort_order BETWEEN 1 AND 12),
|
||||
UNIQUE(weapon_mod_id,stat_attribute_id),
|
||||
UNIQUE(weapon_mod_id,sort_order)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_effects (
|
||||
id TEXT PRIMARY KEY,
|
||||
weapon_mod_id TEXT NOT NULL REFERENCES weapon_mods(id) ON DELETE CASCADE,
|
||||
stat_attribute_id TEXT NOT NULL REFERENCES stat_attributes(id),
|
||||
sort_order INTEGER NOT NULL CHECK(sort_order BETWEEN 1 AND 2),
|
||||
UNIQUE(weapon_mod_id,stat_attribute_id),
|
||||
UNIQUE(weapon_mod_id,sort_order)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS weapon_mod_effect_quality_values (
|
||||
effect_id TEXT NOT NULL REFERENCES weapon_mod_effects(id) ON DELETE CASCADE,
|
||||
quality TEXT NOT NULL CHECK(quality IN ('Standard','Specialized','Superior','High-end')),
|
||||
value REAL NOT NULL,
|
||||
PRIMARY KEY(effect_id,quality)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS game_data_icons (
|
||||
entity_type TEXT NOT NULL CHECK(entity_type IN ('talent', 'brand_set', 'os_protocol', 'skill_chip')),
|
||||
entity_id TEXT NOT NULL,
|
||||
|
||||
Reference in New Issue
Block a user