diff --git a/fxmanifest.lua b/fxmanifest.lua index 5bc1ec3..ba0f9b8 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -2,7 +2,7 @@ author "Andyyy#7666" description "ND Framework Core" -version "2.1.2" +version "2.2.9" fx_version "cerulean" game "gta5" diff --git a/server/commands.lua b/server/commands.lua index 79ccb9f..c0ffdf5 100644 --- a/server/commands.lua +++ b/server/commands.lua @@ -15,7 +15,7 @@ local moneyActions = { } lib.addCommand("setmoney", { - help = "Admin command, manage player money.", + help = "Admin command, set a players money.", restricted = "group.admin", params = { { @@ -164,7 +164,7 @@ lib.addCommand("setgroup", { end) lib.addCommand("skin", { - help = "Admin command, set player into character clothing menu.", + help = "Admin command, show character clothing menu for player.", restricted = "group.admin", params = { { @@ -178,7 +178,7 @@ lib.addCommand("skin", { end) lib.addCommand("character", { - help = "Admin command, set player into character selection menu.", + help = "Admin command, show character selection menu for player.", restricted = "group.admin", params = { { @@ -262,7 +262,7 @@ lib.addCommand("pay", { end) lib.addCommand("unlock", { - help = "Admin Command, force unlock vehicle.", + help = "Admin Command, force unlock a vehicle.", restricted = "group.admin", }, function(source, args, raw) local ped = GetPlayerPed(source) @@ -293,7 +293,7 @@ lib.addCommand("unlock", { end) lib.addCommand("revive", { - help = "Admin command, revive player.", + help = "Admin command, revive a player.", restricted = "group.admin", params = { { @@ -433,7 +433,7 @@ lib.addCommand("unfreeze", { end) lib.addCommand("vehicle", { - help = "Admin command, unfreeze a player.", + help = "Admin command, spawn a vehicle.", restricted = "group.admin", params = { { diff --git a/server/player.lua b/server/player.lua index da51b47..862f8bb 100644 --- a/server/player.lua +++ b/server/player.lua @@ -383,6 +383,7 @@ local function createCharacterTable(info) self.groups[name] = nil self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self), "groups") TriggerEvent("ND:updateCharacter", self, "groups") + TriggerEvent("ND:groupRemoved", self, group) lib.removePrincipal(self.source, ("group.%s"):format(name)) return group end diff --git a/server/vehicle.lua b/server/vehicle.lua index 340bf90..42c6dae 100644 --- a/server/vehicle.lua +++ b/server/vehicle.lua @@ -1,6 +1,7 @@ local ox_inventory local inventoryStarted = false local spawnedPlayerVehicles = {} +local vehicleTypes = json.decode(GetResourceKvpString("ND_Core:vehTypes") or "[]") NDCore.isResourceStarted("ox_inventory", function(started) inventoryStarted = started @@ -8,16 +9,24 @@ NDCore.isResourceStarted("ox_inventory", function(started) ox_inventory = exports.ox_inventory end) -local function getVehicleType(model) - local tempVehicle = CreateVehicle(model, 0, 0, 0, 0, true, true) +local function getVehicleType(coords, model) + if vehicleTypes[model] then + return vehicleTypes[model] + end + local tempVehicle = CreateVehicle(model, coords.x, coords.y, coords.z-5.0, coords.w, true, false) local time = os.time() - while not DoesEntityExist(tempVehicle) and os.time()-time < 5 do Wait(5) end - + + while not DoesEntityExist(tempVehicle) and os.time()-time < 5 do Wait(0) end if not DoesEntityExist(tempVehicle) then return end - local entityType = GetVehicleType(tempVehicle) + + local vehType = GetVehicleType(tempVehicle) DeleteEntity(tempVehicle) - return entityType + + vehicleTypes[model] = vehType + SetResourceKvp("ND_Core:vehTypes", json.encode(vehicleTypes)) + + return vehType end local function generatePlate() @@ -99,6 +108,15 @@ function NDCore.getVehicle(entity) DeleteEntity(entity) end + + -- remvoe vehicle from db. + function self.remove(keepEntity) + if not keepEntity and DoesEntityExist(entity) then + DeleteEntity(entity) + end + MySQL.query("DELETE FROM nd_vehicles WHERE id = ?", {self.id}) + end + --- set vehicle properties ---@param props table function self.setProperties(props) @@ -262,7 +280,7 @@ function NDCore.createVehicle(info) end local model = info.model or properties.model - local vehType = getVehicleType(model) + local vehType = getVehicleType(spawnCoords, model) if not vehType then return Citizen.Trace("NDCore.createVehicle", "vehType not found") end @@ -420,7 +438,8 @@ function NDCore.spawnOwnedVehicle(source, vehicleId, coords, heading) if not player then return end local vehicle = NDCore.getVehicleById(vehicleId) - if not vehicle or not vehicle.available or vehicle.owner ~= player.id then return end + if not vehicle or vehicle.owner ~= player.id then return end + if not vehicle.available and not vehicle.impounded then return end MySQL.query.await("UPDATE nd_vehicles SET stored = ? WHERE id = ?", {0, vehicleId}) @@ -710,6 +729,11 @@ RegisterNetEvent("ND_Vehicles:takeVehicle", function(vehId, locations) local vehicle = NDCore.getVehicleById(vehId) local player = NDCore.getPlayer(src) if not player or not vehicle or vehicle.owner ~= player.id then return end + + local info = NDCore.spawnOwnedVehicle(src, vehicle.id, isParkingAvailable(locations)) + if not info then return end + TriggerClientEvent("ND_Vehicles:blip", src, info.netId, true) + if vehicle.impounded then local reclaimPrice = vehicle.metadata.impoundReclaimPrice or 200 if not player.deductMoney("bank", reclaimPrice, "Vehicle impound reclaim") then @@ -728,10 +752,6 @@ RegisterNetEvent("ND_Vehicles:takeVehicle", function(vehId, locations) }) MySQL.query.await("UPDATE nd_vehicles SET impounded = ? WHERE id = ?", {0, vehicle.id}) end - - local info = NDCore.spawnOwnedVehicle(src, vehicle.id, isParkingAvailable(locations)) - if not info then return end - TriggerClientEvent("ND_Vehicles:blip", src, info.netId, true) end) lib.callback.register("ND_Vehicles:getOwnedVehicles", function(src)