update: colon and events

This commit is contained in:
Andyyy7666
2023-07-13 01:23:23 +02:00
parent 6f4ddba976
commit e19544c65e
3 changed files with 43 additions and 32 deletions

View File

@@ -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)

View File

@@ -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,10 +141,11 @@ local function createCharacterTable(info)
if licenses then if licenses then
self.metadata.licenses[#licenses+1] = license self.metadata.licenses[#licenses+1] = license
return else
end
self.metadata.licenses = {license} self.metadata.licenses = {license}
end end
self.triggerEvent("ND:updateCharacter", self)
end
---@param coords vector3|vector4 ---@param coords vector3|vector4
---@return boolean ---@return boolean
@@ -165,7 +169,6 @@ local function createCharacterTable(info)
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
TriggerClientEvent("ox_lib:notify", self.source, ...) TriggerClientEvent("ox_lib:notify", self.source, ...)
@@ -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

View File

@@ -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
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 = { state.keys = {
[player.id] = true [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