if (GetResourceState("oxmysql") == "missing") then return end local tableName, colName = nil, nil local function GetOwnedVehiclesTableName() if (tableName ~= nil) then return tableName end tableName = (GetResourceState("es_extended") ~= "missing") and "owned_vehicles" or "player_vehicles" return tableName end local function GetStoredColumnName() if (colName ~= nil) then return colName end colName = (GetResourceState("es_extended") ~= "missing") and "stored" or "state" return colName end local oxmysql = exports["oxmysql"] local function DoesColumnExist(colName) return oxmysql:scalar_async([[ SELECT COUNT(*) FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = ? AND `COLUMN_NAME` = ?; ]], { "vehicle_parking", colName }) > 0 end Storage.Create = function() oxmysql:update_async([[ CREATE TABLE IF NOT EXISTS `vehicle_parking` ( `id` varchar(16) NOT NULL, `model` int(11) NOT NULL, `type` varchar(16) NOT NULL, `status` text NOT NULL, `tuning` text NOT NULL, `extraValues` text NOT NULL DEFAULT '[]', `stateBags` longtext NOT NULL DEFAULT '[]', `bucket` int(11) NOT NULL DEFAULT '0', `posX` float NOT NULL, `posY` float NOT NULL, `posZ` float NOT NULL, `rotX` float NOT NULL, `rotY` float NOT NULL, `rotZ` float NOT NULL, `lastUpdate` int(11) NOT NULL DEFAULT '0', `initialPlayer` varchar(50), `lastPlayer` varchar(50), PRIMARY KEY (`id`) ); ]]) -- v3 backwards compatibility if (not DoesColumnExist("bucket")) then oxmysql:update_async([[ ALTER TABLE `vehicle_parking` ADD COLUMN `bucket` INT(11) NOT NULL DEFAULT 0 AFTER `stateBags`; ]]) end if (not DoesColumnExist("initialPlayer")) then oxmysql:update_async([[ ALTER TABLE `vehicle_parking` ADD COLUMN `initialPlayer` varchar(50) AFTER `lastUpdate`; ]]) end if (not DoesColumnExist("lastPlayer")) then oxmysql:update_async([[ ALTER TABLE `vehicle_parking` ADD COLUMN `lastPlayer` varchar(50) AFTER `initialPlayer`; ]]) end if (not DoesColumnExist("extraValues")) then oxmysql:update_async([[ ALTER TABLE `vehicle_parking` ADD COLUMN `extraValues` TEXT NOT NULL DEFAULT '[]' AFTER `tuning`; ]]) end oxmysql:update_async([[ ALTER TABLE `vehicle_parking` MODIFY COLUMN `stateBags` longtext NOT NULL DEFAULT '[]'; ]]) end Storage.GetAllVehicles = function() return oxmysql:query_async([[ SELECT `id`, `model`, `type`, `status`, `tuning`, `extraValues`, `stateBags`, `bucket`, `posX`, `posY`, `posZ`, `rotX`, `rotY`, `rotZ`, `lastUpdate`, `initialPlayer`, `lastPlayer` FROM `vehicle_parking`; ]]) end Storage.DeleteById = function(id) oxmysql:update([[ DELETE FROM `vehicle_parking` WHERE `id` = ?; ]], { id }) end Storage.DeleteByIds = function(formattedIds) oxmysql:update(([[ DELETE FROM `vehicle_parking` WHERE `id` IN (%s); ]]):format(formattedIds)) end Storage.StoreVehicleInGarage = function(params) oxmysql:update(([[ UPDATE `%s` SET `%s` = 1 WHERE `plate` = ? OR `plate` = ?; ]]):format(GetOwnedVehiclesTableName(), GetStoredColumnName()), params) end Storage.InsertVehicle = function(params) oxmysql:insert([[ INSERT INTO `vehicle_parking` (`id`, `model`, `type`, `status`, `tuning`, `extraValues`, `stateBags`, `bucket`, `posX`, `posY`, `posZ`, `rotX`, `rotY`, `rotZ`, `lastUpdate`, `initialPlayer`, `lastPlayer`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); ]], params) end Storage.UpdateVehicle = function(params) oxmysql:update([[ UPDATE `vehicle_parking` SET `status` = ?, `tuning` = ?, `extraValues` = ?, `stateBags` = ?, `bucket` = ?, `posX` = ?, `posY` = ?, `posZ` = ?, `rotX` = ?, `rotY` = ?, `rotZ` = ?, `lastUpdate` = ?, `lastPlayer` = ? WHERE `id` = ?; ]], params) end Storage.UpdateBucket = function(bucket, id) oxmysql:update([[ UPDATE `vehicle_parking` SET `bucket` = ? WHERE `id` = ?; ]], { bucket, id }) end Storage.UpdateStatus = function(status, id) oxmysql:update([[ UPDATE `vehicle_parking` SET `status` = ? WHERE `id` = ?; ]], { status, id }) end Storage.UpdatePosition = function(position, rotation, id) oxmysql:update([[ UPDATE `vehicle_parking` SET `posX` = ?, `posY` = ?, `posZ` = ?, `rotX` = ?, `rotY` = ?, `rotZ` = ?, WHERE `id` = ?; ]], { position.x, position.y, position.z, rotation.x, rotation.y, rotation.z, id }) end Storage.UpdateStateBags = function(params) oxmysql:update([[ UPDATE `vehicle_parking` SET `stateBags` = ? WHERE `id` = ?; ]], params) end Storage.IsVehicleOwned = function(params) return oxmysql:scalar_async(([[ SELECT `plate` FROM `%s` WHERE `plate` = ? OR `plate` = ?; ]]):format(GetOwnedVehiclesTableName()), params) end Storage.DeleteAllVehicles = function() oxmysql:update("DELETE FROM `vehicle_parking`;") end