mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-17 05:56:01 +01:00
Merge branch 'ND-Framework:main' into fix-vehicle-metadata
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
author "Andyyy#7666"
|
author "Andyyy#7666"
|
||||||
description "ND Framework Core"
|
description "ND Framework Core"
|
||||||
version "2.1.2"
|
version "2.2.9"
|
||||||
|
|
||||||
fx_version "cerulean"
|
fx_version "cerulean"
|
||||||
game "gta5"
|
game "gta5"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ local moneyActions = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lib.addCommand("setmoney", {
|
lib.addCommand("setmoney", {
|
||||||
help = "Admin command, manage player money.",
|
help = "Admin command, set a players money.",
|
||||||
restricted = "group.admin",
|
restricted = "group.admin",
|
||||||
params = {
|
params = {
|
||||||
{
|
{
|
||||||
@@ -164,7 +164,7 @@ lib.addCommand("setgroup", {
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
lib.addCommand("skin", {
|
lib.addCommand("skin", {
|
||||||
help = "Admin command, set player into character clothing menu.",
|
help = "Admin command, show character clothing menu for player.",
|
||||||
restricted = "group.admin",
|
restricted = "group.admin",
|
||||||
params = {
|
params = {
|
||||||
{
|
{
|
||||||
@@ -178,7 +178,7 @@ lib.addCommand("skin", {
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
lib.addCommand("character", {
|
lib.addCommand("character", {
|
||||||
help = "Admin command, set player into character selection menu.",
|
help = "Admin command, show character selection menu for player.",
|
||||||
restricted = "group.admin",
|
restricted = "group.admin",
|
||||||
params = {
|
params = {
|
||||||
{
|
{
|
||||||
@@ -262,7 +262,7 @@ lib.addCommand("pay", {
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
lib.addCommand("unlock", {
|
lib.addCommand("unlock", {
|
||||||
help = "Admin Command, force unlock vehicle.",
|
help = "Admin Command, force unlock a vehicle.",
|
||||||
restricted = "group.admin",
|
restricted = "group.admin",
|
||||||
}, function(source, args, raw)
|
}, function(source, args, raw)
|
||||||
local ped = GetPlayerPed(source)
|
local ped = GetPlayerPed(source)
|
||||||
@@ -293,7 +293,7 @@ lib.addCommand("unlock", {
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
lib.addCommand("revive", {
|
lib.addCommand("revive", {
|
||||||
help = "Admin command, revive player.",
|
help = "Admin command, revive a player.",
|
||||||
restricted = "group.admin",
|
restricted = "group.admin",
|
||||||
params = {
|
params = {
|
||||||
{
|
{
|
||||||
@@ -433,7 +433,7 @@ lib.addCommand("unfreeze", {
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
lib.addCommand("vehicle", {
|
lib.addCommand("vehicle", {
|
||||||
help = "Admin command, unfreeze a player.",
|
help = "Admin command, spawn a vehicle.",
|
||||||
restricted = "group.admin",
|
restricted = "group.admin",
|
||||||
params = {
|
params = {
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -383,6 +383,7 @@ local function createCharacterTable(info)
|
|||||||
self.groups[name] = nil
|
self.groups[name] = nil
|
||||||
self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self), "groups")
|
self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self), "groups")
|
||||||
TriggerEvent("ND:updateCharacter", self, "groups")
|
TriggerEvent("ND:updateCharacter", self, "groups")
|
||||||
|
TriggerEvent("ND:groupRemoved", self, group)
|
||||||
lib.removePrincipal(self.source, ("group.%s"):format(name))
|
lib.removePrincipal(self.source, ("group.%s"):format(name))
|
||||||
return group
|
return group
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
local ox_inventory
|
local ox_inventory
|
||||||
local inventoryStarted = false
|
local inventoryStarted = false
|
||||||
local spawnedPlayerVehicles = {}
|
local spawnedPlayerVehicles = {}
|
||||||
|
local vehicleTypes = json.decode(GetResourceKvpString("ND_Core:vehTypes") or "[]")
|
||||||
|
|
||||||
NDCore.isResourceStarted("ox_inventory", function(started)
|
NDCore.isResourceStarted("ox_inventory", function(started)
|
||||||
inventoryStarted = started
|
inventoryStarted = started
|
||||||
@@ -8,16 +9,24 @@ NDCore.isResourceStarted("ox_inventory", function(started)
|
|||||||
ox_inventory = exports.ox_inventory
|
ox_inventory = exports.ox_inventory
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local function getVehicleType(model)
|
local function getVehicleType(coords, model)
|
||||||
local tempVehicle = CreateVehicle(model, 0, 0, 0, 0, true, true)
|
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()
|
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
|
if not DoesEntityExist(tempVehicle) then return end
|
||||||
local entityType = GetVehicleType(tempVehicle)
|
|
||||||
|
local vehType = GetVehicleType(tempVehicle)
|
||||||
DeleteEntity(tempVehicle)
|
DeleteEntity(tempVehicle)
|
||||||
return entityType
|
|
||||||
|
vehicleTypes[model] = vehType
|
||||||
|
SetResourceKvp("ND_Core:vehTypes", json.encode(vehicleTypes))
|
||||||
|
|
||||||
|
return vehType
|
||||||
end
|
end
|
||||||
|
|
||||||
local function generatePlate()
|
local function generatePlate()
|
||||||
@@ -99,6 +108,15 @@ function NDCore.getVehicle(entity)
|
|||||||
DeleteEntity(entity)
|
DeleteEntity(entity)
|
||||||
end
|
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
|
--- set vehicle properties
|
||||||
---@param props table
|
---@param props table
|
||||||
function self.setProperties(props)
|
function self.setProperties(props)
|
||||||
@@ -262,7 +280,7 @@ function NDCore.createVehicle(info)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local model = info.model or properties.model
|
local model = info.model or properties.model
|
||||||
local vehType = getVehicleType(model)
|
local vehType = getVehicleType(spawnCoords, model)
|
||||||
if not vehType then
|
if not vehType then
|
||||||
return Citizen.Trace("NDCore.createVehicle", "vehType not found")
|
return Citizen.Trace("NDCore.createVehicle", "vehType not found")
|
||||||
end
|
end
|
||||||
@@ -420,7 +438,8 @@ function NDCore.spawnOwnedVehicle(source, vehicleId, coords, heading)
|
|||||||
if not player then return end
|
if not player then return end
|
||||||
|
|
||||||
local vehicle = NDCore.getVehicleById(vehicleId)
|
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})
|
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 vehicle = NDCore.getVehicleById(vehId)
|
||||||
local player = NDCore.getPlayer(src)
|
local player = NDCore.getPlayer(src)
|
||||||
if not player or not vehicle or vehicle.owner ~= player.id then return end
|
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
|
if vehicle.impounded then
|
||||||
local reclaimPrice = vehicle.metadata.impoundReclaimPrice or 200
|
local reclaimPrice = vehicle.metadata.impoundReclaimPrice or 200
|
||||||
if not player.deductMoney("bank", reclaimPrice, "Vehicle impound reclaim") then
|
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})
|
MySQL.query.await("UPDATE nd_vehicles SET impounded = ? WHERE id = ?", {0, vehicle.id})
|
||||||
end
|
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)
|
end)
|
||||||
|
|
||||||
lib.callback.register("ND_Vehicles:getOwnedVehicles", function(src)
|
lib.callback.register("ND_Vehicles:getOwnedVehicles", function(src)
|
||||||
|
|||||||
Reference in New Issue
Block a user