🛠️Installation
Database Installation
CREATE TABLE IF NOT EXISTS `trucker_players` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`display_name` VARCHAR(32) DEFAULT NULL,
`company_tag` VARCHAR(20) DEFAULT NULL,
`avatar_url` VARCHAR(255) DEFAULT NULL,
`level` INT(11) DEFAULT 1,
`xp` INT(11) DEFAULT 0,
`total_jobs` INT(11) DEFAULT 0,
`total_distance` FLOAT DEFAULT 0.0,
`total_revenue` INT(11) DEFAULT 0,
`total_time_played` INT(11) DEFAULT 0,
`skillpoints` INT(11) DEFAULT 0,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `citizenid` (`citizenid`),
KEY `level` (`level`),
KEY `total_jobs` (`total_jobs`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_skills` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`skill_type` VARCHAR(50) NOT NULL,
`skill_level` INT(11) DEFAULT 0,
`skill_data` TEXT DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `citizenid_skill` (`citizenid`, `skill_type`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_active_jobs` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`job_type` VARCHAR(20) NOT NULL,
`company` VARCHAR(50) NOT NULL,
`category` VARCHAR(50) NOT NULL,
`from_location` VARCHAR(100) NOT NULL,
`to_location` VARCHAR(100) NOT NULL,
`distance` FLOAT NOT NULL,
`reward` INT(11) NOT NULL,
`deposit` INT(11) DEFAULT 0,
`vehicle_model` VARCHAR(50) DEFAULT NULL,
`vehicle_plate` VARCHAR(20) DEFAULT NULL,
`progress` INT(11) DEFAULT 0,
`started_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `citizenid` (`citizenid`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_job_history` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`job_type` VARCHAR(20) NOT NULL,
`company` VARCHAR(50) NOT NULL,
`category` VARCHAR(50) NOT NULL,
`from_location` VARCHAR(100) NOT NULL,
`to_location` VARCHAR(100) NOT NULL,
`distance` FLOAT NOT NULL,
`reward` INT(11) NOT NULL,
`base_reward` INT(11) NOT NULL,
`damage_penalty` FLOAT DEFAULT 0.0,
`speeding_penalty` FLOAT DEFAULT 0.0,
`perfect_bonus` FLOAT DEFAULT 0.0,
`speeding_violations` INT(11) DEFAULT 0,
`vehicle_damage` FLOAT DEFAULT 0.0,
`time_taken` INT(11) DEFAULT 0,
`completed_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `citizenid` (`citizenid`),
KEY `completed_at` (`completed_at`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_achievements` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`achievement_id` VARCHAR(50) NOT NULL,
`progress` INT(11) DEFAULT 0,
`completed` TINYINT(1) DEFAULT 0,
`completed_at` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `citizenid_achievement` (`citizenid`, `achievement_id`),
KEY `citizenid` (`citizenid`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_statistics` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`stat_date` DATE NOT NULL,
`daily_revenue` INT(11) DEFAULT 0,
`daily_jobs` INT(11) DEFAULT 0,
`daily_distance` FLOAT DEFAULT 0.0,
`perfect_deliveries` INT(11) DEFAULT 0,
`failed_deliveries` INT(11) DEFAULT 0,
`avg_delivery_time` INT(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `citizenid_date` (`citizenid`, `stat_date`),
KEY `citizenid` (`citizenid`),
KEY `stat_date` (`stat_date`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_parties` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`party_id` VARCHAR(50) NOT NULL,
`leader_citizenid` VARCHAR(50) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`active` TINYINT(1) DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `party_id` (`party_id`),
KEY `leader` (`leader_citizenid`),
FOREIGN KEY (`leader_citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_party_members` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`party_id` VARCHAR(50) NOT NULL,
`citizenid` VARCHAR(50) NOT NULL,
`joined_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`is_leader` TINYINT(1) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `party_member` (`party_id`, `citizenid`),
KEY `citizenid` (`citizenid`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_hired_drivers` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`driver_id` VARCHAR(50) NOT NULL,
`driver_type` VARCHAR(50) DEFAULT 'rookie',
`driver_name` VARCHAR(100) NOT NULL,
`experience` INT(11) DEFAULT 20,
`total_jobs` INT(11) DEFAULT 0,
`total_revenue` INT(11) DEFAULT 0,
`hired_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`last_job_at` TIMESTAMP NULL,
`last_salary_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`assigned_vehicle` VARCHAR(50) NULL,
`vehicle_condition` INT(11) DEFAULT 100,
`active` TINYINT(1) DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `driver_id` (`driver_id`),
KEY `owner` (`citizenid`),
KEY `active_drivers` (`citizenid`, `active`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_driver_jobs` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`driver_id` VARCHAR(50) NOT NULL,
`job_type` VARCHAR(50) NOT NULL,
`cargo_type` VARCHAR(50) NOT NULL,
`distance` DECIMAL(10,2) DEFAULT 0.00,
`revenue` INT(11) DEFAULT 0,
`experience_gained` INT(11) DEFAULT 2,
`completed_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`success` TINYINT(1) DEFAULT 1,
PRIMARY KEY (`id`),
KEY `driver` (`driver_id`),
KEY `completed` (`completed_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_driver_salaries` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`driver_id` VARCHAR(50) NOT NULL,
`amount` INT(11) NOT NULL,
`paid_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`payment_type` VARCHAR(50) DEFAULT 'daily',
PRIMARY KEY (`id`),
KEY `employer` (`citizenid`),
KEY `driver` (`driver_id`),
KEY `paid_at` (`paid_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `trucker_vehicles` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`citizenid` VARCHAR(50) NOT NULL,
`vehicle_model` VARCHAR(50) NOT NULL,
`vehicle_plate` VARCHAR(20) NOT NULL,
`vehicle_name` VARCHAR(100) NOT NULL,
`purchase_price` INT(11) DEFAULT 0,
`current_condition` INT(11) DEFAULT 100,
`total_distance` FLOAT DEFAULT 0.0,
`total_jobs` INT(11) DEFAULT 0,
`out` TINYINT(1) DEFAULT 0,
`location` VARCHAR(100) DEFAULT 'garage',
`purchased_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`last_used` TIMESTAMP NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `vehicle_plate` (`vehicle_plate`),
KEY `owner` (`citizenid`),
KEY `out_status` (`citizenid`, `out`),
FOREIGN KEY (`citizenid`) REFERENCES `trucker_players`(`citizenid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE INDEX idx_leaderboard ON trucker_players(total_jobs DESC, total_distance DESC);
CREATE INDEX idx_recent_jobs ON trucker_job_history(citizenid, completed_at DESC);
CREATE INDEX idx_achievements ON trucker_achievements(citizenid, completed);
CREATE INDEX idx_statistics ON trucker_statistics(citizenid, stat_date DESC);
CREATE INDEX idx_active_parties ON trucker_parties(active, created_at DESC);
CREATE INDEX idx_active_drivers ON trucker_hired_drivers(citizenid, active, last_job_at);
CREATE INDEX idx_garage_vehicles ON trucker_vehicles(citizenid, out, last_used DESC);Last updated