Installation guide — please follow each step carefully and exactly as described to ensure the script works correctly on your server. Skipping or modifying steps may cause the system to not function properly, so follow it step by step.
This script requires some mandatory dependencies to function correctly. Make sure to download and extract them inside your server’s main directory, keeping their original folder structure intact.
This script includes an essential database required for its operation.You must import it before starting your server, preferably using HeidiSQL or any other manager compatible with MariaDB/MySQL.
ESX
sql
ALTER TABLE `users` ADD IF NOTEXISTS `crime_house_inside` INT(5) NULL;
INSERT INTO
`datastore` (name, label, shared)
VALUES
('crime_house', 'Crime House', 0);
CREATE TABLE IF NOTEXISTS `qs_crime_organizations` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`color` VARCHAR(7) DEFAULT'#000000',
`entry_coords` LONGTEXT DEFAULTNULL,
`garage_coords` LONGTEXT DEFAULTNULL,
`locations_coords` LONGTEXT DEFAULTNULL,
`zone_points` LONGTEXT DEFAULTNULL,
`interior_type` VARCHAR(10) DEFAULT'',
`interior_data` LONGTEXT DEFAULTNULL,
`mlo_data` LONGTEXT DEFAULTNULL,
`ipl_data` LONGTEXT DEFAULTNULL,
`blip_data` LONGTEXT DEFAULTNULL,
`vault_codes` LONGTEXT DEFAULTNULL,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_ranks` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`label` VARCHAR(255) NOT NULL,
`permissions` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_members` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`rank_id` INT(11) DEFAULTNULL,
`is_boss` BOOLEANNOT NULLDEFAULTFALSE,
`joined_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_identifier` (`organization_id`, `identifier`),
INDEX `organization_id` (`organization_id`),
INDEX `identifier` (`identifier`),
INDEX `rank_id` (`rank_id`),
INDEX `is_boss` (`is_boss`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`rank_id`) REFERENCES `qs_crime_organization_ranks`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_finance` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`clean_money` INT(11) NOT NULLDEFAULT0,
`dirty_money` INT(11) NOT NULLDEFAULT0,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `organization_id` (`organization_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_transactions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`type` ENUM('deposit', 'withdraw', 'sale', 'expense') NOT NULL,
`amount` INT(11) NOT NULL,
`money_type` VARCHAR(20) NOT NULLDEFAULT'money',
`description` TEXT DEFAULTNULL,
`reference` VARCHAR(255) DEFAULTNULL,
`identifier` VARCHAR(50) DEFAULTNULL,
`name` VARCHAR(255) DEFAULTNULL,
`status` ENUM('completed', 'pending', 'failed', 'cancelled') NOT NULLDEFAULT'completed',
`metadata` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `type` (`type`),
INDEX `status` (`status`),
INDEX `created_at` (`created_at`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_territories` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`organization_id` INT(11) DEFAULTNULL,
`zone_data` LONGTEXT NOT NULL,
`color` VARCHAR(7) DEFAULT'#eab308',
`creator` VARCHAR(50) DEFAULTNULL,
`war_protection_until` DATETIME DEFAULTNULL,
`last_war_at` DATETIME DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `creator` (`creator`),
INDEX `war_protection_until` (`war_protection_until`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_taxing` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`payment_count_min` INT(11) NOT NULLDEFAULT1,
`payment_count_max` INT(11) NOT NULLDEFAULT1,
`location` LONGTEXT DEFAULTNULL,
`ped_model` VARCHAR(64) DEFAULTNULL,
`territory_id` INT(11) DEFAULTNULL,
`time_type` VARCHAR(20) DEFAULT'daily',
`time_value` INT(11) DEFAULT1,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `creator` (`creator`),
INDEX `territory_id` (`territory_id`),
FOREIGN KEY (`territory_id`) REFERENCES `qs_crime_territories`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `qs_crime_taxing` ADDCOLUMN IF NOTEXISTS `ped_model` VARCHAR(64) NULL AFTER `location`;
CREATE TABLE IF NOTEXISTS `qs_crime_taxing_collections` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`taxing_id` INT(11) NOT NULL,
`territory_id` INT(11) DEFAULTNULL,
`organization_id` INT(11) NOT NULL,
`collector_identifier` VARCHAR(50) NOT NULL,
`collector_name` VARCHAR(255) NOT NULL,
`amount` INT(11) NOT NULL,
`next_collectable_at` DATETIME NOT NULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `taxing_id` (`taxing_id`),
INDEX `territory_id` (`territory_id`),
INDEX `organization_id` (`organization_id`),
INDEX `next_collectable_at` (`next_collectable_at`),
FOREIGN KEY (`taxing_id`) REFERENCES `qs_crime_taxing`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`territory_id`) REFERENCES `qs_crime_territories`(`id`) ONDELETESETNULL,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_season_pass` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`price` INT(11) NOT NULLDEFAULT0,
`end_date` DATETIME NOT NULL,
`rewards` LONGTEXT NOT NULL,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_graffiti` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`font` VARCHAR(100) NOT NULLDEFAULT'SignPainter-HouseScript',
`coords` LONGTEXT NOT NULL,
`rotation` LONGTEXT NOT NULL,
`scale` FLOATNOT NULLDEFAULT1.0,
`color` VARCHAR(9) DEFAULT'FFFFFFFF',
`owner_identifier` VARCHAR(50) DEFAULTNULL,
`owner_name` VARCHAR(255) DEFAULTNULL,
`organization_id` INT(11) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `owner_identifier` (`owner_identifier`),
INDEX `organization_id` (`organization_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_upgrades` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`upgrade_name` VARCHAR(100) NOT NULL,
`level` INT(11) NOT NULLDEFAULT0,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_upgrade` (`organization_id`, `upgrade_name`),
INDEX `organization_id` (`organization_id`),
INDEX `upgrade_name` (`upgrade_name`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_vehicles` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`vehicle_model` VARCHAR(50) NOT NULL,
`vehicle_label` VARCHAR(255) NOT NULL,
`plate` VARCHAR(10) NOT NULL,
`vehicle_props` LONGTEXT DEFAULTNULL,
`stored` BOOLEANNOT NULLDEFAULTTRUE,
`state` ENUM('garage', 'out', 'impound') NOT NULLDEFAULT'garage',
`metadata` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `plate` (`plate`),
INDEX `organization_id` (`organization_id`),
INDEX `state` (`state`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_vehicle_activities` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`vehicle_id` INT(11) NOT NULL,
`vehicle_label` VARCHAR(255) NOT NULL,
`plate` VARCHAR(10) NOT NULL,
`action` ENUM('spawn', 'store', 'sell', 'retrieve_impound') NOT NULL,
`player_name` VARCHAR(255) NOT NULL,
`identifier` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `vehicle_id` (`vehicle_id`),
INDEX `created_at` (`created_at`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`vehicle_id`) REFERENCES `qs_crime_organization_vehicles`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_vehicle_store` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`vehicle_model` VARCHAR(50) NOT NULL,
`vehicle_label` VARCHAR(255) NOT NULL,
`description` TEXT DEFAULTNULL,
`image` VARCHAR(500) DEFAULTNULL,
`price` INT(11) NOT NULLDEFAULT0,
`limited` BOOLEANNOT NULLDEFAULTFALSE,
`limited_end_date` DATETIME DEFAULTNULL,
`limited_quantity` INT(11) DEFAULTNULL,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `vehicle_model` (`vehicle_model`),
INDEX `limited` (`limited`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organizations_stats` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`level` INT(11) NOT NULLDEFAULT1,
`xp` INT(11) NOT NULLDEFAULT0,
`total_missions` INT(11) NOT NULLDEFAULT0,
`total_territory_wars_won` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `organization_id` (`organization_id`),
INDEX `level` (`level`),
INDEX `xp` (`xp`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_seasonpass_progress` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`season_pass_id` INT(11) NOT NULL,
`level` INT(11) NOT NULLDEFAULT1,
`xp` INT(11) NOT NULLDEFAULT0,
`has_premium` TINYINT(1) NOT NULLDEFAULT0,
`claimed_rewards` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_seasonpass` (`organization_id`, `season_pass_id`),
INDEX `organization_id` (`organization_id`),
INDEX `season_pass_id` (`season_pass_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`season_pass_id`) REFERENCES `qs_crime_season_pass`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_territory_wars` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`territory_id` INT(11) NOT NULL,
`status` ENUM('pending', 'active', 'finished') NOT NULLDEFAULT'pending',
`started_by_org_id` INT(11) NOT NULL,
`started_at` DATETIME NOT NULL,
`ends_at` DATETIME NOT NULL,
`winner_org_id` INT(11) DEFAULTNULL,
`start_cost` INT(11) NOT NULLDEFAULT0,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `territory_id` (`territory_id`),
INDEX `status` (`status`),
INDEX `started_by_org_id` (`started_by_org_id`),
INDEX `winner_org_id` (`winner_org_id`),
INDEX `ends_at` (`ends_at`),
FOREIGN KEY (`territory_id`) REFERENCES `qs_crime_territories`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`started_by_org_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`winner_org_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_territory_war_scores` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`war_id` INT(11) NOT NULL,
`organization_id` INT(11) NOT NULL,
`score` INT(11) NOT NULLDEFAULT0,
`tax_stolen` INT(11) NOT NULLDEFAULT0,
`drugs_sold` INT(11) NOT NULLDEFAULT0,
`graffiti_sprayed` INT(11) NOT NULLDEFAULT0,
`graffiti_removed` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `war_org` (`war_id`, `organization_id`),
INDEX `war_id` (`war_id`),
INDEX `organization_id` (`organization_id`),
INDEX `score` (`score`),
FOREIGN KEY (`war_id`) REFERENCES `qs_crime_territory_wars`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_missions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`mission_id` VARCHAR(100) NOT NULL,
`progress` INT(11) NOT NULLDEFAULT0,
`target_value` INT(11) NOT NULL,
`completed_at` DATETIME DEFAULTNULL,
`pending_rewards` LONGTEXT DEFAULTNULL,
`status` ENUM('active', 'completed') NOT NULLDEFAULT'active',
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `mission_id` (`mission_id`),
INDEX `status` (`status`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `qs_crime_organization_missions` ADDCOLUMN IF NOTEXISTS `started_by_identifier` VARCHAR(128) NULLDEFAULTNULL;
CREATE INDEX IF NOTEXISTS `idx_org_missions_owner` ON `qs_crime_organization_missions` (`organization_id`, `started_by_identifier`, `status`);
CREATE TABLE IF NOTEXISTS `qs_crime_mission_history` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`mission_id` VARCHAR(100) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`completed_at` DATETIME NOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `mission_id` (`mission_id`),
INDEX `identifier` (`identifier`),
INDEX `completed_at` (`completed_at`),
INDEX `org_mission_date` (`organization_id`, `mission_id`, `completed_at`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_member_stats` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`total_xp_earned` INT(11) NOT NULLDEFAULT0,
`total_missions_completed` INT(11) NOT NULLDEFAULT0,
`total_territory_wars_participated` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_identifier` (`organization_id`, `identifier`),
INDEX `organization_id` (`organization_id`),
INDEX `identifier` (`identifier`),
INDEX `total_xp_earned` (`total_xp_earned`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_house_junks` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`house` VARCHAR(255) NOT NULL,
`model` VARCHAR(255) NOT NULL,
`coords` LONGTEXT NULLDEFAULTNULL,
`created_at` TIMESTAMPNULLDEFAULTCURRENT_TIMESTAMP(),
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_house` (`house`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1;
CREATE TABLE IF NOTEXISTS `qs_crime_house_decorations` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NULLDEFAULTNULL,
`creator` VARCHAR(70) NOT NULLDEFAULT'0',
`modelName` VARCHAR(50) NOT NULLDEFAULT'0',
`coords` TEXT NULLDEFAULTNULL,
`rotation` TEXT NOT NULLDEFAULT'',
`inStash` TINYINT(1) NOT NULLDEFAULT'0',
`inHouse` TINYINT(1) UNSIGNED NOT NULLDEFAULT'0',
`uniq` VARCHAR(50) NULLDEFAULTNULL,
`created` TIMESTAMPNULLDEFAULTNULL,
`lightData` TEXT NULLDEFAULTNULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `id` (`id`, `house`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
CREATE TABLE IF NOTEXISTS `qs_crime_pvp_battles` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`start_date` DATETIME NOT NULL,
`duration` INT(11) NOT NULL,
`zone_points` LONGTEXT DEFAULTNULL,
`center_coords` LONGTEXT DEFAULTNULL,
`rewards` LONGTEXT DEFAULTNULL,
`allowed_organizations` LONGTEXT DEFAULTNULL,
`status` ENUM('pending', 'active', 'finished') NOT NULLDEFAULT'pending',
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `status` (`status`),
INDEX `start_date` (`start_date`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_pvp_participants` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`pvp_battle_id` INT(11) NOT NULL,
`organization_id` INT(11) NOT NULL,
`status` ENUM('invited', 'accepted', 'cancelled') NOT NULLDEFAULT'invited',
`accepted_by` VARCHAR(50) DEFAULTNULL,
`accepted_at` DATETIME DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `pvp_org` (`pvp_battle_id`, `organization_id`),
INDEX `pvp_battle_id` (`pvp_battle_id`),
INDEX `organization_id` (`organization_id`),
INDEX `status` (`status`),
FOREIGN KEY (`pvp_battle_id`) REFERENCES `qs_crime_pvp_battles`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_pvp_scores` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`pvp_battle_id` INT(11) NOT NULL,
`organization_id` INT(11) NOT NULL,
`score` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `pvp_org_score` (`pvp_battle_id`, `organization_id`),
INDEX `pvp_battle_id` (`pvp_battle_id`),
INDEX `organization_id` (`organization_id`),
INDEX `score` (`score`),
FOREIGN KEY (`pvp_battle_id`) REFERENCES `qs_crime_pvp_battles`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_war_history` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`war_type` VARCHAR(16) NOT NULL,
`territory_id` INT(11) DEFAULTNULL,
`pvp_battle_id` INT(11) DEFAULTNULL,
`memory_war_id` INT(11) DEFAULTNULL,
`attacker_org_id` INT(11) DEFAULTNULL,
`defender_org_id` INT(11) DEFAULTNULL,
`winner_org_id` INT(11) DEFAULTNULL,
`started_at` DATETIME NOT NULL,
`ended_at` DATETIME NOT NULL,
`scores_json` LONGTEXT DEFAULTNULL,
`metadata` LONGTEXT DEFAULTNULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_pvp_battle` (`pvp_battle_id`),
INDEX `idx_ended` (`ended_at`),
INDEX `idx_winner` (`winner_org_id`),
INDEX `idx_attacker` (`attacker_org_id`),
INDEX `idx_defender` (`defender_org_id`),
INDEX `idx_territory` (`territory_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_war_requests` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`from_organization_id` INT(11) NOT NULL,
`to_organization_id` INT(11) NOT NULL,
`request_type` VARCHAR(32) NOT NULLDEFAULT'territory',
`territory_id` INT(11) DEFAULTNULL,
`objective_type` VARCHAR(24) NOT NULLDEFAULT'classic_score',
`objective_amount` INT(11) NOT NULLDEFAULT0,
`reward_clean_money` INT(11) NOT NULLDEFAULT0,
`status` VARCHAR(16) NOT NULLDEFAULT'pending',
`message` VARCHAR(512) DEFAULTNULL,
`created_by_identifier` VARCHAR(80) NOT NULL,
`created_at` DATETIME NOT NULLDEFAULTCURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
`expires_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
INDEX `idx_to_pending` (`to_organization_id`, `status`),
INDEX `idx_from` (`from_organization_id`),
INDEX `idx_expires` (`expires_at`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_money_laundering_daily` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`completed_count` INT(11) NOT NULLDEFAULT0,
`total_laundered` INT(11) NOT NULLDEFAULT0,
`last_reset_date` DATENOT NULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_player_date` (`organization_id`, `identifier`, `last_reset_date`),
INDEX `organization_id` (`organization_id`),
INDEX `identifier` (`identifier`),
INDEX `last_reset_date` (`last_reset_date`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `qs_crime_organization_members`
ADDCOLUMN IF NOTEXISTS `avatar` LONGTEXT NULLDEFAULTNULL AFTER `joined_at`;
ALTER TABLE `qs_crime_organization_members`
ADDCOLUMN IF NOTEXISTS `is_darkchat_anonymous` TINYINT(1) NOT NULLDEFAULT0 AFTER `avatar`;
CREATE TABLE IF NOTEXISTS `qs_crime_darkchat_messages` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`author_identifier` VARCHAR(80) NOT NULL,
`body` VARCHAR(2000) NOT NULL,
`is_anonymous` TINYINT(1) NOT NULLDEFAULT0,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_darkchat_created` (`created_at`),
INDEX `idx_darkchat_org` (`organization_id`),
CONSTRAINT `fk_darkchat_organization` FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_listings` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`seller_organization_id` INT(11) NOT NULL,
`seller_identifier` VARCHAR(80) NOT NULL,
`seller_name` VARCHAR(255) NOT NULLDEFAULT'',
`item_name` VARCHAR(100) NOT NULL,
`item_label` VARCHAR(255) NOT NULLDEFAULT'',
`original_quantity` INT(11) NOT NULL,
`remaining_quantity` INT(11) NOT NULL,
`unit_price` INT(11) NOT NULL,
`status` ENUM('active', 'cancelled', 'expired', 'sold_out') NOT NULLDEFAULT'active',
`expires_at` DATETIME DEFAULTNULL,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_bm_status_created` (`status`, `created_at`),
INDEX `idx_bm_item_status` (`item_name`, `status`),
INDEX `idx_bm_seller_status` (`seller_identifier`, `status`),
INDEX `idx_bm_org_status` (`seller_organization_id`, `status`),
INDEX `idx_bm_expires` (`expires_at`, `status`),
CONSTRAINT `fk_bm_listing_org` FOREIGN KEY (`seller_organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_trades` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`listing_id` BIGINT(20) NOT NULL,
`buyer_identifier` VARCHAR(80) NOT NULL,
`buyer_organization_id` INT(11) NOT NULL,
`seller_identifier` VARCHAR(80) NOT NULL,
`seller_organization_id` INT(11) NOT NULL,
`item_name` VARCHAR(100) NOT NULL,
`quantity` INT(11) NOT NULL,
`unit_price` INT(11) NOT NULL,
`total_price` INT(11) NOT NULL,
`status` ENUM('completed', 'failed') NOT NULLDEFAULT'completed',
`fail_reason` VARCHAR(64) DEFAULTNULL,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_bm_trade_buyer` (`buyer_identifier`, `created_at`),
INDEX `idx_bm_trade_seller` (`seller_identifier`, `created_at`),
INDEX `idx_bm_trade_listing` (`listing_id`),
CONSTRAINT `fk_bm_trade_buyer_org` FOREIGN KEY (`buyer_organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE,
CONSTRAINT `fk_bm_trade_seller_org` FOREIGN KEY (`seller_organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_listing_history` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`listing_id` BIGINT(20) NOT NULL,
`actor_identifier` VARCHAR(80) NOT NULL,
`action` ENUM('create', 'update_price', 'update_quantity', 'cancel', 'expire', 'purchase', 'rollback_stock') NOT NULL,
`details` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_bm_hist_listing` (`listing_id`),
INDEX `idx_bm_hist_actor` (`actor_identifier`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_payout_queue` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`trade_id` BIGINT(20) NOT NULL,
`seller_identifier` VARCHAR(80) NOT NULL,
`amount` INT(11) NOT NULL,
`payment_account_type` VARCHAR(32) NOT NULLDEFAULT'black_money',
`status` ENUM('pending', 'collected') NOT NULLDEFAULT'pending',
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
`collected_at` TIMESTAMPNULLDEFAULTNULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_bm_payout_trade` (`trade_id`),
INDEX `idx_bm_payout_seller_status` (`seller_identifier`, `status`),
CONSTRAINT `fk_bm_payout_trade` FOREIGN KEY (`trade_id`) REFERENCES `qs_crime_blackmarket_trades` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
QB
sql
ALTER TABLE `players` ADD IF NOTEXISTS `crime_house_inside` INT(5) NULL;
CREATE TABLE IF NOTEXISTS `qs_crime_organizations` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`color` VARCHAR(7) DEFAULT'#000000',
`entry_coords` LONGTEXT DEFAULTNULL,
`garage_coords` LONGTEXT DEFAULTNULL,
`locations_coords` LONGTEXT DEFAULTNULL,
`zone_points` LONGTEXT DEFAULTNULL,
`interior_type` VARCHAR(10) DEFAULT'',
`interior_data` LONGTEXT DEFAULTNULL,
`mlo_data` LONGTEXT DEFAULTNULL,
`ipl_data` LONGTEXT DEFAULTNULL,
`blip_data` LONGTEXT DEFAULTNULL,
`vault_codes` LONGTEXT DEFAULTNULL,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_ranks` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`label` VARCHAR(255) NOT NULL,
`permissions` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_members` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`rank_id` INT(11) DEFAULTNULL,
`is_boss` BOOLEANNOT NULLDEFAULTFALSE,
`joined_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_identifier` (`organization_id`, `identifier`),
INDEX `organization_id` (`organization_id`),
INDEX `identifier` (`identifier`),
INDEX `rank_id` (`rank_id`),
INDEX `is_boss` (`is_boss`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`rank_id`) REFERENCES `qs_crime_organization_ranks`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_finance` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`clean_money` INT(11) NOT NULLDEFAULT0,
`dirty_money` INT(11) NOT NULLDEFAULT0,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `organization_id` (`organization_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_transactions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`type` ENUM('deposit', 'withdraw', 'sale', 'expense') NOT NULL,
`amount` INT(11) NOT NULL,
`money_type` VARCHAR(20) NOT NULLDEFAULT'money',
`description` TEXT DEFAULTNULL,
`reference` VARCHAR(255) DEFAULTNULL,
`identifier` VARCHAR(50) DEFAULTNULL,
`name` VARCHAR(255) DEFAULTNULL,
`status` ENUM('completed', 'pending', 'failed', 'cancelled') NOT NULLDEFAULT'completed',
`metadata` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `type` (`type`),
INDEX `status` (`status`),
INDEX `created_at` (`created_at`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_territories` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`organization_id` INT(11) DEFAULTNULL,
`zone_data` LONGTEXT NOT NULL,
`color` VARCHAR(7) DEFAULT'#eab308',
`creator` VARCHAR(50) DEFAULTNULL,
`war_protection_until` DATETIME DEFAULTNULL,
`last_war_at` DATETIME DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `creator` (`creator`),
INDEX `war_protection_until` (`war_protection_until`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_taxing` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`payment_count_min` INT(11) NOT NULLDEFAULT1,
`payment_count_max` INT(11) NOT NULLDEFAULT1,
`location` LONGTEXT DEFAULTNULL,
`ped_model` VARCHAR(64) DEFAULTNULL,
`territory_id` INT(11) DEFAULTNULL,
`time_type` VARCHAR(20) DEFAULT'daily',
`time_value` INT(11) DEFAULT1,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `creator` (`creator`),
INDEX `territory_id` (`territory_id`),
FOREIGN KEY (`territory_id`) REFERENCES `qs_crime_territories`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `qs_crime_taxing` ADDCOLUMN IF NOTEXISTS `ped_model` VARCHAR(64) NULL AFTER `location`;
CREATE TABLE IF NOTEXISTS `qs_crime_taxing_collections` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`taxing_id` INT(11) NOT NULL,
`territory_id` INT(11) DEFAULTNULL,
`organization_id` INT(11) NOT NULL,
`collector_identifier` VARCHAR(50) NOT NULL,
`collector_name` VARCHAR(255) NOT NULL,
`amount` INT(11) NOT NULL,
`next_collectable_at` DATETIME NOT NULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `taxing_id` (`taxing_id`),
INDEX `territory_id` (`territory_id`),
INDEX `organization_id` (`organization_id`),
INDEX `next_collectable_at` (`next_collectable_at`),
FOREIGN KEY (`taxing_id`) REFERENCES `qs_crime_taxing`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`territory_id`) REFERENCES `qs_crime_territories`(`id`) ONDELETESETNULL,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_season_pass` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`price` INT(11) NOT NULLDEFAULT0,
`end_date` DATETIME NOT NULL,
`rewards` LONGTEXT NOT NULL,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_graffiti` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`font` VARCHAR(100) NOT NULLDEFAULT'SignPainter-HouseScript',
`coords` LONGTEXT NOT NULL,
`rotation` LONGTEXT NOT NULL,
`scale` FLOATNOT NULLDEFAULT1.0,
`color` VARCHAR(9) DEFAULT'FFFFFFFF',
`owner_identifier` VARCHAR(50) DEFAULTNULL,
`owner_name` VARCHAR(255) DEFAULTNULL,
`organization_id` INT(11) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `owner_identifier` (`owner_identifier`),
INDEX `organization_id` (`organization_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_upgrades` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`upgrade_name` VARCHAR(100) NOT NULL,
`level` INT(11) NOT NULLDEFAULT0,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_upgrade` (`organization_id`, `upgrade_name`),
INDEX `organization_id` (`organization_id`),
INDEX `upgrade_name` (`upgrade_name`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_vehicles` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`vehicle_model` VARCHAR(50) NOT NULL,
`vehicle_label` VARCHAR(255) NOT NULL,
`plate` VARCHAR(10) NOT NULL,
`vehicle_props` LONGTEXT DEFAULTNULL,
`stored` BOOLEANNOT NULLDEFAULTTRUE,
`state` ENUM('garage', 'out', 'impound') NOT NULLDEFAULT'garage',
`metadata` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `plate` (`plate`),
INDEX `organization_id` (`organization_id`),
INDEX `state` (`state`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_vehicle_activities` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`vehicle_id` INT(11) NOT NULL,
`vehicle_label` VARCHAR(255) NOT NULL,
`plate` VARCHAR(10) NOT NULL,
`action` ENUM('spawn', 'store', 'sell', 'retrieve_impound') NOT NULL,
`player_name` VARCHAR(255) NOT NULL,
`identifier` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `vehicle_id` (`vehicle_id`),
INDEX `created_at` (`created_at`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`vehicle_id`) REFERENCES `qs_crime_organization_vehicles`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_vehicle_store` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`vehicle_model` VARCHAR(50) NOT NULL,
`vehicle_label` VARCHAR(255) NOT NULL,
`description` TEXT DEFAULTNULL,
`image` VARCHAR(500) DEFAULTNULL,
`price` INT(11) NOT NULLDEFAULT0,
`limited` BOOLEANNOT NULLDEFAULTFALSE,
`limited_end_date` DATETIME DEFAULTNULL,
`limited_quantity` INT(11) DEFAULTNULL,
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `vehicle_model` (`vehicle_model`),
INDEX `limited` (`limited`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organizations_stats` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`level` INT(11) NOT NULLDEFAULT1,
`xp` INT(11) NOT NULLDEFAULT0,
`total_missions` INT(11) NOT NULLDEFAULT0,
`total_territory_wars_won` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `organization_id` (`organization_id`),
INDEX `level` (`level`),
INDEX `xp` (`xp`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_seasonpass_progress` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`season_pass_id` INT(11) NOT NULL,
`level` INT(11) NOT NULLDEFAULT1,
`xp` INT(11) NOT NULLDEFAULT0,
`has_premium` TINYINT(1) NOT NULLDEFAULT0,
`claimed_rewards` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_seasonpass` (`organization_id`, `season_pass_id`),
INDEX `organization_id` (`organization_id`),
INDEX `season_pass_id` (`season_pass_id`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`season_pass_id`) REFERENCES `qs_crime_season_pass`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_territory_wars` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`territory_id` INT(11) NOT NULL,
`status` ENUM('pending', 'active', 'finished') NOT NULLDEFAULT'pending',
`started_by_org_id` INT(11) NOT NULL,
`started_at` DATETIME NOT NULL,
`ends_at` DATETIME NOT NULL,
`winner_org_id` INT(11) DEFAULTNULL,
`start_cost` INT(11) NOT NULLDEFAULT0,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `territory_id` (`territory_id`),
INDEX `status` (`status`),
INDEX `started_by_org_id` (`started_by_org_id`),
INDEX `winner_org_id` (`winner_org_id`),
INDEX `ends_at` (`ends_at`),
FOREIGN KEY (`territory_id`) REFERENCES `qs_crime_territories`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`started_by_org_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`winner_org_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETESETNULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_territory_war_scores` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`war_id` INT(11) NOT NULL,
`organization_id` INT(11) NOT NULL,
`score` INT(11) NOT NULLDEFAULT0,
`tax_stolen` INT(11) NOT NULLDEFAULT0,
`drugs_sold` INT(11) NOT NULLDEFAULT0,
`graffiti_sprayed` INT(11) NOT NULLDEFAULT0,
`graffiti_removed` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `war_org` (`war_id`, `organization_id`),
INDEX `war_id` (`war_id`),
INDEX `organization_id` (`organization_id`),
INDEX `score` (`score`),
FOREIGN KEY (`war_id`) REFERENCES `qs_crime_territory_wars`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_missions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`mission_id` VARCHAR(100) NOT NULL,
`progress` INT(11) NOT NULLDEFAULT0,
`target_value` INT(11) NOT NULL,
`completed_at` DATETIME DEFAULTNULL,
`pending_rewards` LONGTEXT DEFAULTNULL,
`status` ENUM('active', 'completed') NOT NULLDEFAULT'active',
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `mission_id` (`mission_id`),
INDEX `status` (`status`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `qs_crime_organization_missions` ADDCOLUMN IF NOTEXISTS `started_by_identifier` VARCHAR(128) NULLDEFAULTNULL;
CREATE INDEX IF NOTEXISTS `idx_org_missions_owner` ON `qs_crime_organization_missions` (`organization_id`, `started_by_identifier`, `status`);
CREATE TABLE IF NOTEXISTS `qs_crime_mission_history` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`mission_id` VARCHAR(100) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`completed_at` DATETIME NOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `organization_id` (`organization_id`),
INDEX `mission_id` (`mission_id`),
INDEX `identifier` (`identifier`),
INDEX `completed_at` (`completed_at`),
INDEX `org_mission_date` (`organization_id`, `mission_id`, `completed_at`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_organization_member_stats` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`total_xp_earned` INT(11) NOT NULLDEFAULT0,
`total_missions_completed` INT(11) NOT NULLDEFAULT0,
`total_territory_wars_participated` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_identifier` (`organization_id`, `identifier`),
INDEX `organization_id` (`organization_id`),
INDEX `identifier` (`identifier`),
INDEX `total_xp_earned` (`total_xp_earned`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_house_junks` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`house` VARCHAR(255) NOT NULL,
`model` VARCHAR(255) NOT NULL,
`coords` LONGTEXT NULLDEFAULTNULL,
`created_at` TIMESTAMPNULLDEFAULTCURRENT_TIMESTAMP(),
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_house` (`house`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1;
CREATE TABLE IF NOTEXISTS `qs_crime_house_decorations` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NULLDEFAULTNULL,
`creator` VARCHAR(70) NOT NULLDEFAULT'0',
`modelName` VARCHAR(50) NOT NULLDEFAULT'0',
`coords` TEXT NULLDEFAULTNULL,
`rotation` TEXT NOT NULLDEFAULT'',
`inStash` TINYINT(1) NOT NULLDEFAULT'0',
`inHouse` TINYINT(1) UNSIGNED NOT NULLDEFAULT'0',
`uniq` VARCHAR(50) NULLDEFAULTNULL,
`created` TIMESTAMPNULLDEFAULTNULL,
`lightData` TEXT NULLDEFAULTNULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `id` (`id`, `house`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
CREATE TABLE IF NOTEXISTS `qs_crime_pvp_battles` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`label` VARCHAR(255) NOT NULL,
`start_date` DATETIME NOT NULL,
`duration` INT(11) NOT NULL,
`zone_points` LONGTEXT DEFAULTNULL,
`center_coords` LONGTEXT DEFAULTNULL,
`rewards` LONGTEXT DEFAULTNULL,
`allowed_organizations` LONGTEXT DEFAULTNULL,
`status` ENUM('pending', 'active', 'finished') NOT NULLDEFAULT'pending',
`creator` VARCHAR(50) DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `status` (`status`),
INDEX `start_date` (`start_date`),
INDEX `creator` (`creator`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_pvp_participants` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`pvp_battle_id` INT(11) NOT NULL,
`organization_id` INT(11) NOT NULL,
`status` ENUM('invited', 'accepted', 'cancelled') NOT NULLDEFAULT'invited',
`accepted_by` VARCHAR(50) DEFAULTNULL,
`accepted_at` DATETIME DEFAULTNULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `pvp_org` (`pvp_battle_id`, `organization_id`),
INDEX `pvp_battle_id` (`pvp_battle_id`),
INDEX `organization_id` (`organization_id`),
INDEX `status` (`status`),
FOREIGN KEY (`pvp_battle_id`) REFERENCES `qs_crime_pvp_battles`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_pvp_scores` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`pvp_battle_id` INT(11) NOT NULL,
`organization_id` INT(11) NOT NULL,
`score` INT(11) NOT NULLDEFAULT0,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `pvp_org_score` (`pvp_battle_id`, `organization_id`),
INDEX `pvp_battle_id` (`pvp_battle_id`),
INDEX `organization_id` (`organization_id`),
INDEX `score` (`score`),
FOREIGN KEY (`pvp_battle_id`) REFERENCES `qs_crime_pvp_battles`(`id`) ONDELETE CASCADE,
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_war_history` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`war_type` VARCHAR(16) NOT NULL,
`territory_id` INT(11) DEFAULTNULL,
`pvp_battle_id` INT(11) DEFAULTNULL,
`memory_war_id` INT(11) DEFAULTNULL,
`attacker_org_id` INT(11) DEFAULTNULL,
`defender_org_id` INT(11) DEFAULTNULL,
`winner_org_id` INT(11) DEFAULTNULL,
`started_at` DATETIME NOT NULL,
`ended_at` DATETIME NOT NULL,
`scores_json` LONGTEXT DEFAULTNULL,
`metadata` LONGTEXT DEFAULTNULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_pvp_battle` (`pvp_battle_id`),
INDEX `idx_ended` (`ended_at`),
INDEX `idx_winner` (`winner_org_id`),
INDEX `idx_attacker` (`attacker_org_id`),
INDEX `idx_defender` (`defender_org_id`),
INDEX `idx_territory` (`territory_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_war_requests` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`from_organization_id` INT(11) NOT NULL,
`to_organization_id` INT(11) NOT NULL,
`request_type` VARCHAR(32) NOT NULLDEFAULT'territory',
`territory_id` INT(11) DEFAULTNULL,
`objective_type` VARCHAR(24) NOT NULLDEFAULT'classic_score',
`objective_amount` INT(11) NOT NULLDEFAULT0,
`reward_clean_money` INT(11) NOT NULLDEFAULT0,
`status` VARCHAR(16) NOT NULLDEFAULT'pending',
`message` VARCHAR(512) DEFAULTNULL,
`created_by_identifier` VARCHAR(80) NOT NULL,
`created_at` DATETIME NOT NULLDEFAULTCURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
`expires_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
INDEX `idx_to_pending` (`to_organization_id`, `status`),
INDEX `idx_from` (`from_organization_id`),
INDEX `idx_expires` (`expires_at`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_money_laundering_daily` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`identifier` VARCHAR(50) NOT NULL,
`completed_count` INT(11) NOT NULLDEFAULT0,
`total_laundered` INT(11) NOT NULLDEFAULT0,
`last_reset_date` DATENOT NULL,
`created_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `org_player_date` (`organization_id`, `identifier`, `last_reset_date`),
INDEX `organization_id` (`organization_id`),
INDEX `identifier` (`identifier`),
INDEX `last_reset_date` (`last_reset_date`),
FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `qs_crime_organization_members`
ADDCOLUMN IF NOTEXISTS `avatar` LONGTEXT NULLDEFAULTNULL AFTER `joined_at`;
ALTER TABLE `qs_crime_organization_members`
ADDCOLUMN IF NOTEXISTS `is_darkchat_anonymous` TINYINT(1) NOT NULLDEFAULT0 AFTER `avatar`;
CREATE TABLE IF NOTEXISTS `qs_crime_darkchat_messages` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NOT NULL,
`author_identifier` VARCHAR(80) NOT NULL,
`body` VARCHAR(2000) NOT NULL,
`is_anonymous` TINYINT(1) NOT NULLDEFAULT0,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_darkchat_created` (`created_at`),
INDEX `idx_darkchat_org` (`organization_id`),
CONSTRAINT `fk_darkchat_organization` FOREIGN KEY (`organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_listings` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`seller_organization_id` INT(11) NOT NULL,
`seller_identifier` VARCHAR(80) NOT NULL,
`seller_name` VARCHAR(255) NOT NULLDEFAULT'',
`item_name` VARCHAR(100) NOT NULL,
`item_label` VARCHAR(255) NOT NULLDEFAULT'',
`original_quantity` INT(11) NOT NULL,
`remaining_quantity` INT(11) NOT NULL,
`unit_price` INT(11) NOT NULL,
`status` ENUM('active', 'cancelled', 'expired', 'sold_out') NOT NULLDEFAULT'active',
`expires_at` DATETIME DEFAULTNULL,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_bm_status_created` (`status`, `created_at`),
INDEX `idx_bm_item_status` (`item_name`, `status`),
INDEX `idx_bm_seller_status` (`seller_identifier`, `status`),
INDEX `idx_bm_org_status` (`seller_organization_id`, `status`),
INDEX `idx_bm_expires` (`expires_at`, `status`),
CONSTRAINT `fk_bm_listing_org` FOREIGN KEY (`seller_organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_trades` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`listing_id` BIGINT(20) NOT NULL,
`buyer_identifier` VARCHAR(80) NOT NULL,
`buyer_organization_id` INT(11) NOT NULL,
`seller_identifier` VARCHAR(80) NOT NULL,
`seller_organization_id` INT(11) NOT NULL,
`item_name` VARCHAR(100) NOT NULL,
`quantity` INT(11) NOT NULL,
`unit_price` INT(11) NOT NULL,
`total_price` INT(11) NOT NULL,
`status` ENUM('completed', 'failed') NOT NULLDEFAULT'completed',
`fail_reason` VARCHAR(64) DEFAULTNULL,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_bm_trade_buyer` (`buyer_identifier`, `created_at`),
INDEX `idx_bm_trade_seller` (`seller_identifier`, `created_at`),
INDEX `idx_bm_trade_listing` (`listing_id`),
CONSTRAINT `fk_bm_trade_buyer_org` FOREIGN KEY (`buyer_organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE,
CONSTRAINT `fk_bm_trade_seller_org` FOREIGN KEY (`seller_organization_id`) REFERENCES `qs_crime_organizations` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_listing_history` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`listing_id` BIGINT(20) NOT NULL,
`actor_identifier` VARCHAR(80) NOT NULL,
`action` ENUM('create', 'update_price', 'update_quantity', 'cancel', 'expire', 'purchase', 'rollback_stock') NOT NULL,
`details` LONGTEXT DEFAULTNULL,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_bm_hist_listing` (`listing_id`),
INDEX `idx_bm_hist_actor` (`actor_identifier`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_crime_blackmarket_payout_queue` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`trade_id` BIGINT(20) NOT NULL,
`seller_identifier` VARCHAR(80) NOT NULL,
`amount` INT(11) NOT NULL,
`payment_account_type` VARCHAR(32) NOT NULLDEFAULT'black_money',
`status` ENUM('pending', 'collected') NOT NULLDEFAULT'pending',
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
`collected_at` TIMESTAMPNULLDEFAULTNULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_bm_payout_trade` (`trade_id`),
INDEX `idx_bm_payout_seller_status` (`seller_identifier`, `status`),
CONSTRAINT `fk_bm_payout_trade` FOREIGN KEY (`trade_id`) REFERENCES `qs_crime_blackmarket_trades` (`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Before continuing with this documentation, it is important to understand the concept behind this system and how it is designed to be used on your server.
Quasar Crime Creator is not a simple gang script.
Advanced FiveM gang management dashboard from Quasar Crime Creator showing gang system UI, missions, territories and criminal progression for ESX, QBcore and Qbox roleplay servers
This system is designed to create living criminal organizations that evolve over time through progression, missions, and territorial control.
Instead of spawning gangs that simply sit in a neighborhood doing nothing, the idea is to build a complete criminal ecosystem where gangs start from scratch and grow through activity.
A gang typically begins with a basic organization and an empty base. Administrators can assign them a territory and a headquarters using a housing-style system similar to qs-housing, allowing gangs to decorate their base, organize storage, and create their own criminal headquarters.
FiveM crime gang system interface displaying gang stats, missions, territory control and criminal organization management for ESX QBcore Qbox servers
From that point forward, gangs must actively progress.
Members will need to complete missions, participate in criminal activities, and advance through the Season Pass system to unlock rewards such as vehicles, upgrades, and new gameplay features.
Quasar Crime Creator gang panel interface for FiveM showing criminal organization management, missions system and gang progression mechanics
As gangs grow stronger, they will also be able to expand their influence across the city by conquering territories and controlling key illegal operations such as:
Money laundering locations
Illegal doctors
Strategic criminal zones
This system transforms gangs from static groups into progression-driven criminal organizations that compete, expand, and dominate the map through gameplay.
FiveM crime mission system and season pass progression interface from Quasar Crime Creator showing gang rewards, missions and criminal progression mechanics
Take a moment to understand this philosophy before continuing with the rest of the documentation, as it will help you configure the system in the most immersive and effective way for your server.