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,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

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