mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-17 05:56:01 +01:00
update: colon and events
This commit is contained in:
@@ -116,7 +116,7 @@ AddEventHandler("playerDropped", function()
|
|||||||
local src = source
|
local src = source
|
||||||
local char = ActivePlayers[src]
|
local char = ActivePlayers[src]
|
||||||
if char then
|
if char then
|
||||||
char:unload()
|
char.unload()
|
||||||
end
|
end
|
||||||
PlayersInfo[src] = nil
|
PlayersInfo[src] = nil
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ local function createCharacterTable(info)
|
|||||||
local amount = tonumber(amount)
|
local amount = tonumber(amount)
|
||||||
if not amount or account ~= "bank" and account ~= "cash" then return end
|
if not amount or account ~= "bank" and account ~= "cash" then return end
|
||||||
self[account] -= amount
|
self[account] -= amount
|
||||||
if self.source then
|
if ActivePlayers[self.source] then
|
||||||
|
self.triggerEvent("ND:updateMoney", self.cash, self.bank)
|
||||||
TriggerEvent("ND:moneyChange", self.source, account, amount, "remove", reason)
|
TriggerEvent("ND:moneyChange", self.source, account, amount, "remove", reason)
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
@@ -40,7 +41,8 @@ local function createCharacterTable(info)
|
|||||||
local amount = tonumber(amount)
|
local amount = tonumber(amount)
|
||||||
if not amount or account ~= "bank" and account ~= "cash" then return end
|
if not amount or account ~= "bank" and account ~= "cash" then return end
|
||||||
self[account] += amount
|
self[account] += amount
|
||||||
if self.source then
|
if ActivePlayers[self.source] then
|
||||||
|
self.triggerEvent("ND:updateMoney", self.cash, self.bank)
|
||||||
TriggerEvent("ND:moneyChange", self.source, account, amount, "add", reason)
|
TriggerEvent("ND:moneyChange", self.source, account, amount, "add", reason)
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
@@ -67,6 +69,7 @@ local function createCharacterTable(info)
|
|||||||
---@return table
|
---@return table
|
||||||
function self.setMetadata(key, value)
|
function self.setMetadata(key, value)
|
||||||
self.metadata[key] = value
|
self.metadata[key] = value
|
||||||
|
self.triggerEvent("ND:updateCharacter", self)
|
||||||
return self.metadata
|
return self.metadata
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -81,7 +84,7 @@ local function createCharacterTable(info)
|
|||||||
|
|
||||||
-- Unload and save character
|
-- Unload and save character
|
||||||
function self.unload()
|
function self.unload()
|
||||||
if not self.source then return end
|
if not ActivePlayers[self.source] then return end
|
||||||
local ped = GetPlayerPed(self.source)
|
local ped = GetPlayerPed(self.source)
|
||||||
if ped then
|
if ped then
|
||||||
local coords = GetEntityCoords(ped)
|
local coords = GetEntityCoords(ped)
|
||||||
@@ -138,9 +141,10 @@ local function createCharacterTable(info)
|
|||||||
|
|
||||||
if licenses then
|
if licenses then
|
||||||
self.metadata.licenses[#licenses+1] = license
|
self.metadata.licenses[#licenses+1] = license
|
||||||
return
|
else
|
||||||
|
self.metadata.licenses = {license}
|
||||||
end
|
end
|
||||||
self.metadata.licenses = {license}
|
self.triggerEvent("ND:updateCharacter", self)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param coords vector3|vector4
|
---@param coords vector3|vector4
|
||||||
@@ -164,7 +168,6 @@ local function createCharacterTable(info)
|
|||||||
TriggerClientEvent(eventName, self.source, ...)
|
TriggerClientEvent(eventName, self.source, ...)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function self.notify(...)
|
function self.notify(...)
|
||||||
if not self.source then return end
|
if not self.source then return end
|
||||||
@@ -182,7 +185,7 @@ local function createCharacterTable(info)
|
|||||||
function self.active()
|
function self.active()
|
||||||
local char = ActivePlayers[self.source]
|
local char = ActivePlayers[self.source]
|
||||||
if char and char.id == self.id then return true end
|
if char and char.id == self.id then return true end
|
||||||
if char then char:unload() end
|
if char then char.unload() end
|
||||||
ActivePlayers[self.source] = self
|
ActivePlayers[self.source] = self
|
||||||
TriggerEvent("ND:characterLoaded", self)
|
TriggerEvent("ND:characterLoaded", self)
|
||||||
TriggerClientEvent("ND:characterLoaded", self.source, self)
|
TriggerClientEvent("ND:characterLoaded", self.source, self)
|
||||||
@@ -199,6 +202,7 @@ local function createCharacterTable(info)
|
|||||||
rankName = groupInfo.ranks[rank] or rank,
|
rankName = groupInfo.ranks[rank] or rank,
|
||||||
rank = rank
|
rank = rank
|
||||||
}
|
}
|
||||||
|
self.triggerEvent("ND:updateCharacter", self)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -211,6 +215,7 @@ local function createCharacterTable(info)
|
|||||||
---@param name string
|
---@param name string
|
||||||
function self.removeGroup(name)
|
function self.removeGroup(name)
|
||||||
self.groups[name] = nil
|
self.groups[name] = nil
|
||||||
|
self.triggerEvent("ND:updateCharacter", self)
|
||||||
end
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
@@ -307,7 +312,7 @@ end
|
|||||||
---@return table
|
---@return table
|
||||||
function NDCore.setActiveCharacter(src, id)
|
function NDCore.setActiveCharacter(src, id)
|
||||||
local char = ActivePlayers[src]
|
local char = ActivePlayers[src]
|
||||||
if char then char:unload() end
|
if char then char.unload() end
|
||||||
|
|
||||||
local character = NDCore.fetchCharacter(id)
|
local character = NDCore.fetchCharacter(id)
|
||||||
character.source = src
|
character.source = src
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ function NDCore.transferVehicle(vehicleID, fromSource, toSource)
|
|||||||
if not playerOwnedVehicles[vehicleID] then return end
|
if not playerOwnedVehicles[vehicleID] then return end
|
||||||
local veh = NetworkGetEntityFromNetworkId(playerOwnedVehicles[vehicleID].netid)
|
local veh = NetworkGetEntityFromNetworkId(playerOwnedVehicles[vehicleID].netid)
|
||||||
if not veh then
|
if not veh then
|
||||||
playerFrom:notify({
|
playerFrom.notify({
|
||||||
title = "Ownership transfered",
|
title = "Ownership transfered",
|
||||||
description = "Vehicle ownership of has been transfered.",
|
description = "Vehicle ownership of has been transfered.",
|
||||||
type = "success",
|
type = "success",
|
||||||
position = "bottom-right",
|
position = "bottom-right",
|
||||||
duration = 4000
|
duration = 4000
|
||||||
})
|
})
|
||||||
playerTo:notify({
|
playerTo.notify({
|
||||||
title = "Ownership received",
|
title = "Ownership received",
|
||||||
description = "Received vehicle ownership.",
|
description = "Received vehicle ownership.",
|
||||||
type = "inform",
|
type = "inform",
|
||||||
@@ -67,16 +67,16 @@ function NDCore.transferVehicle(vehicleID, fromSource, toSource)
|
|||||||
[playerTo.id] = true
|
[playerTo.id] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
playerFrom:triggerEvent("ND_Vehicles:blip", playerOwnedVehicles[vehicleID].netid, false)
|
playerFrom.triggerEvent("ND_Vehicles:blip", playerOwnedVehicles[vehicleID].netid, false)
|
||||||
|
|
||||||
playerFrom:notify({
|
playerFrom.notify({
|
||||||
title = "Ownership transfered",
|
title = "Ownership transfered",
|
||||||
description = ("Vehicle ownership of %s has been transfered."):format(GetVehicleNumberPlateText(veh)),
|
description = ("Vehicle ownership of %s has been transfered."):format(GetVehicleNumberPlateText(veh)),
|
||||||
type = "success",
|
type = "success",
|
||||||
position = "bottom-right",
|
position = "bottom-right",
|
||||||
duration = 4000
|
duration = 4000
|
||||||
})
|
})
|
||||||
playerTo:notify({
|
playerTo.notify({
|
||||||
title = "Ownership received",
|
title = "Ownership received",
|
||||||
description = ("Received vehicle ownership of %s."):format(GetVehicleNumberPlateText(veh)),
|
description = ("Received vehicle ownership of %s."):format(GetVehicleNumberPlateText(veh)),
|
||||||
type = "inform",
|
type = "inform",
|
||||||
@@ -91,7 +91,7 @@ function NDCore.setVehicleOwned(src, properties, stored)
|
|||||||
properties.plate = plate
|
properties.plate = plate
|
||||||
local id = MySQL.insert.await("INSERT INTO vehicles (owner, plate, properties, stored) VALUES (?, ?, ?, ?)", {player.id, properties.plate, json.encode(properties), stored and 1 or 0})
|
local id = MySQL.insert.await("INSERT INTO vehicles (owner, plate, properties, stored) VALUES (?, ?, ?, ?)", {player.id, properties.plate, json.encode(properties), stored and 1 or 0})
|
||||||
local vehicles = getVehicles(player.id)
|
local vehicles = getVehicles(player.id)
|
||||||
player:triggerEvent("ND_Vehicles:returnVehicles", vehicles)
|
player.triggerEvent("ND_Vehicles:returnVehicles", vehicles)
|
||||||
return id
|
return id
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -109,14 +109,14 @@ function NDCore.giveVehicleKeys(vehicle, source, target)
|
|||||||
local targetPlayer = NDCore.getPlayer(target)
|
local targetPlayer = NDCore.getPlayer(target)
|
||||||
state.keys[targetPlayer.id] = true
|
state.keys[targetPlayer.id] = true
|
||||||
|
|
||||||
player:notify({
|
player.notify({
|
||||||
title = "Keys shared",
|
title = "Keys shared",
|
||||||
description = ("You've shared vehicle keys to %s."):format(GetVehicleNumberPlateText(vehicle)),
|
description = ("You've shared vehicle keys to %s."):format(GetVehicleNumberPlateText(vehicle)),
|
||||||
type = "success",
|
type = "success",
|
||||||
position = "bottom-right",
|
position = "bottom-right",
|
||||||
duration = 4000
|
duration = 4000
|
||||||
})
|
})
|
||||||
targetPlayer:notify({
|
targetPlayer.notify({
|
||||||
title = "Keys received",
|
title = "Keys received",
|
||||||
description = ("Received vehicle keys to %s."):format(GetVehicleNumberPlateText(vehicle)),
|
description = ("Received vehicle keys to %s."):format(GetVehicleNumberPlateText(vehicle)),
|
||||||
type = "inform",
|
type = "inform",
|
||||||
@@ -126,7 +126,7 @@ function NDCore.giveVehicleKeys(vehicle, source, target)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
function NDCore.giveVehicleAccess(source, vehicle)
|
function NDCore.giveVehicleAccess(source, vehicle, access)
|
||||||
local state = Entity(vehicle).state
|
local state = Entity(vehicle).state
|
||||||
if not state then return end
|
if not state then return end
|
||||||
|
|
||||||
@@ -135,15 +135,15 @@ function NDCore.giveVehicleAccess(source, vehicle)
|
|||||||
|
|
||||||
if not state.keys then
|
if not state.keys then
|
||||||
state.keys = {
|
state.keys = {
|
||||||
[player.id] = true
|
[player.id] = access
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
local keys = state.keys
|
local keys = state.keys
|
||||||
keys[player.id] = true
|
keys[player.id] = access
|
||||||
state.keys = keys
|
state.keys = keys
|
||||||
end
|
end
|
||||||
|
|
||||||
player:triggerEvent("ND_Vehicles:setOwnedIfNot", NetworkGetNetworkIdFromEntity(vehicle))
|
player.triggerEvent("ND_Vehicles:setOwnedIfNot", NetworkGetNetworkIdFromEntity(vehicle))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function isParkingAvailable(source, coords)
|
local function isParkingAvailable(source, coords)
|
||||||
@@ -175,7 +175,7 @@ function NDCore.spawnOwnedVehicle(source, vehicleID, coords)
|
|||||||
if type(coords) == "table" then
|
if type(coords) == "table" then
|
||||||
spawnCoords = isParkingAvailable(source, coords)
|
spawnCoords = isParkingAvailable(source, coords)
|
||||||
if not spawnCoords then
|
if not spawnCoords then
|
||||||
player:notify({
|
player.notify({
|
||||||
title = "Can't bring out vehicle",
|
title = "Can't bring out vehicle",
|
||||||
description = "No parking spot available for your vehicle. It's still in your garage.",
|
description = "No parking spot available for your vehicle. It's still in your garage.",
|
||||||
type = "error",
|
type = "error",
|
||||||
@@ -190,7 +190,7 @@ function NDCore.spawnOwnedVehicle(source, vehicleID, coords)
|
|||||||
for _, vehicle in pairs(vehicles) do
|
for _, vehicle in pairs(vehicles) do
|
||||||
if vehicle.owner == player.id and vehicle.id == vehicleID then
|
if vehicle.owner == player.id and vehicle.id == vehicleID then
|
||||||
MySQL.query.await("UPDATE vehicles SET stored = ? WHERE id = ?", {0, vehicleID})
|
MySQL.query.await("UPDATE vehicles SET stored = ? WHERE id = ?", {0, vehicleID})
|
||||||
player:triggerEvent("ND_VehicleSystem:returnVehicles", getVehicles(player.id))
|
player.triggerEvent("ND_VehicleSystem:returnVehicles", getVehicles(player.id))
|
||||||
|
|
||||||
local veh = CreateVehicleServerSetter(vehicle.properties.model, getVehicleType(vehicle.properties.model), spawnCoords.x, spawnCoords.y, spawnCoords.z, spawnCoords.w)
|
local veh = CreateVehicleServerSetter(vehicle.properties.model, getVehicleType(vehicle.properties.model), spawnCoords.x, spawnCoords.y, spawnCoords.z, spawnCoords.w)
|
||||||
while not DoesEntityExist(veh) do Wait(0) end
|
while not DoesEntityExist(veh) do Wait(0) end
|
||||||
@@ -203,9 +203,19 @@ function NDCore.spawnOwnedVehicle(source, vehicleID, coords)
|
|||||||
state.owner = vehicle.owner
|
state.owner = vehicle.owner
|
||||||
state.id = vehicle.id
|
state.id = vehicle.id
|
||||||
state.props = vehicle.properties
|
state.props = vehicle.properties
|
||||||
state.keys = {
|
|
||||||
[player.id] = true
|
if Config.useInventoryForKeys then
|
||||||
}
|
exports.ox_inventory:AddItem(source, "keys", 1, {
|
||||||
|
vehOwner = vehicle.owner,
|
||||||
|
vehId = vehicle.id,
|
||||||
|
vehPlate = vehicle.properties and vehicle.properties.plate,
|
||||||
|
vehModel = vehicle.properties and vehicle.properties.model
|
||||||
|
})
|
||||||
|
else
|
||||||
|
state.keys = {
|
||||||
|
[player.id] = true
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@@ -222,7 +232,7 @@ function NDCore.returnVehicleToGarage(source, veh, properties)
|
|||||||
for _, vehicle in pairs(vehicles) do
|
for _, vehicle in pairs(vehicles) do
|
||||||
if vehicle.owner == player.id and vehicle.id == vehID then
|
if vehicle.owner == player.id and vehicle.id == vehID then
|
||||||
MySQL.query.await("UPDATE vehicles SET properties = ?, stored = ? WHERE id = ?", {json.encode(properties), 1, vehID})
|
MySQL.query.await("UPDATE vehicles SET properties = ?, stored = ? WHERE id = ?", {json.encode(properties), 1, vehID})
|
||||||
player:triggerEvent("ND_Vehicles:returnVehicles", getVehicles(player.id))
|
player.triggerEvent("ND_Vehicles:returnVehicles", getVehicles(player.id))
|
||||||
DeleteEntity(veh)
|
DeleteEntity(veh)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@@ -261,10 +271,6 @@ if Config.useInventoryForKeys then
|
|||||||
if not owner or owner ~= player.id then return end
|
if not owner or owner ~= player.id then return end
|
||||||
|
|
||||||
local props = state.props
|
local props = state.props
|
||||||
local keys = state.keys
|
|
||||||
keys[player.id] = true
|
|
||||||
state.keys = keys
|
|
||||||
|
|
||||||
exports.ox_inventory:AddItem(source, "keys", 1, {
|
exports.ox_inventory:AddItem(source, "keys", 1, {
|
||||||
vehOwner = owner,
|
vehOwner = owner,
|
||||||
vehId = state.id,
|
vehId = state.id,
|
||||||
@@ -285,6 +291,6 @@ else
|
|||||||
if veh == 0 then return end
|
if veh == 0 then return end
|
||||||
end
|
end
|
||||||
|
|
||||||
giveKeys(veh, src, target)
|
NDCore.giveVehicleKeys(veh, src, target)
|
||||||
end, false)
|
end, false)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user