From e19544c65e0d62006f9809162133ece8110e0c35 Mon Sep 17 00:00:00 2001 From: Andyyy7666 <86536434+Andyyy7666@users.noreply.github.com> Date: Thu, 13 Jul 2023 01:23:23 +0200 Subject: [PATCH] update: colon and events --- server/main.lua | 2 +- server/player.lua | 21 ++++++++++++------- server/vehicle.lua | 52 ++++++++++++++++++++++++++-------------------- 3 files changed, 43 insertions(+), 32 deletions(-) diff --git a/server/main.lua b/server/main.lua index f2e85eb..4fc8470 100644 --- a/server/main.lua +++ b/server/main.lua @@ -116,7 +116,7 @@ AddEventHandler("playerDropped", function() local src = source local char = ActivePlayers[src] if char then - char:unload() + char.unload() end PlayersInfo[src] = nil end) diff --git a/server/player.lua b/server/player.lua index ec34dee..fb1ad2f 100644 --- a/server/player.lua +++ b/server/player.lua @@ -26,7 +26,8 @@ local function createCharacterTable(info) local amount = tonumber(amount) if not amount or account ~= "bank" and account ~= "cash" then return end 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) end return true @@ -40,7 +41,8 @@ local function createCharacterTable(info) local amount = tonumber(amount) if not amount or account ~= "bank" and account ~= "cash" then return end 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) end return true @@ -67,6 +69,7 @@ local function createCharacterTable(info) ---@return table function self.setMetadata(key, value) self.metadata[key] = value + self.triggerEvent("ND:updateCharacter", self) return self.metadata end @@ -81,7 +84,7 @@ local function createCharacterTable(info) -- Unload and save character function self.unload() - if not self.source then return end + if not ActivePlayers[self.source] then return end local ped = GetPlayerPed(self.source) if ped then local coords = GetEntityCoords(ped) @@ -138,9 +141,10 @@ local function createCharacterTable(info) if licenses then self.metadata.licenses[#licenses+1] = license - return + else + self.metadata.licenses = {license} end - self.metadata.licenses = {license} + self.triggerEvent("ND:updateCharacter", self) end ---@param coords vector3|vector4 @@ -164,7 +168,6 @@ local function createCharacterTable(info) TriggerClientEvent(eventName, self.source, ...) return true end - function self.notify(...) if not self.source then return end @@ -182,7 +185,7 @@ local function createCharacterTable(info) function self.active() local char = ActivePlayers[self.source] 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 TriggerEvent("ND:characterLoaded", self) TriggerClientEvent("ND:characterLoaded", self.source, self) @@ -199,6 +202,7 @@ local function createCharacterTable(info) rankName = groupInfo.ranks[rank] or rank, rank = rank } + self.triggerEvent("ND:updateCharacter", self) return true end @@ -211,6 +215,7 @@ local function createCharacterTable(info) ---@param name string function self.removeGroup(name) self.groups[name] = nil + self.triggerEvent("ND:updateCharacter", self) end return self @@ -307,7 +312,7 @@ end ---@return table function NDCore.setActiveCharacter(src, id) local char = ActivePlayers[src] - if char then char:unload() end + if char then char.unload() end local character = NDCore.fetchCharacter(id) character.source = src diff --git a/server/vehicle.lua b/server/vehicle.lua index ad8351f..d824cc5 100644 --- a/server/vehicle.lua +++ b/server/vehicle.lua @@ -44,14 +44,14 @@ function NDCore.transferVehicle(vehicleID, fromSource, toSource) if not playerOwnedVehicles[vehicleID] then return end local veh = NetworkGetEntityFromNetworkId(playerOwnedVehicles[vehicleID].netid) if not veh then - playerFrom:notify({ + playerFrom.notify({ title = "Ownership transfered", description = "Vehicle ownership of has been transfered.", type = "success", position = "bottom-right", duration = 4000 }) - playerTo:notify({ + playerTo.notify({ title = "Ownership received", description = "Received vehicle ownership.", type = "inform", @@ -67,16 +67,16 @@ function NDCore.transferVehicle(vehicleID, fromSource, toSource) [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", description = ("Vehicle ownership of %s has been transfered."):format(GetVehicleNumberPlateText(veh)), type = "success", position = "bottom-right", duration = 4000 }) - playerTo:notify({ + playerTo.notify({ title = "Ownership received", description = ("Received vehicle ownership of %s."):format(GetVehicleNumberPlateText(veh)), type = "inform", @@ -91,7 +91,7 @@ function NDCore.setVehicleOwned(src, properties, stored) 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 vehicles = getVehicles(player.id) - player:triggerEvent("ND_Vehicles:returnVehicles", vehicles) + player.triggerEvent("ND_Vehicles:returnVehicles", vehicles) return id end @@ -109,14 +109,14 @@ function NDCore.giveVehicleKeys(vehicle, source, target) local targetPlayer = NDCore.getPlayer(target) state.keys[targetPlayer.id] = true - player:notify({ + player.notify({ title = "Keys shared", description = ("You've shared vehicle keys to %s."):format(GetVehicleNumberPlateText(vehicle)), type = "success", position = "bottom-right", duration = 4000 }) - targetPlayer:notify({ + targetPlayer.notify({ title = "Keys received", description = ("Received vehicle keys to %s."):format(GetVehicleNumberPlateText(vehicle)), type = "inform", @@ -126,7 +126,7 @@ function NDCore.giveVehicleKeys(vehicle, source, target) return true end -function NDCore.giveVehicleAccess(source, vehicle) +function NDCore.giveVehicleAccess(source, vehicle, access) local state = Entity(vehicle).state if not state then return end @@ -135,15 +135,15 @@ function NDCore.giveVehicleAccess(source, vehicle) if not state.keys then state.keys = { - [player.id] = true + [player.id] = access } else local keys = state.keys - keys[player.id] = true + keys[player.id] = access state.keys = keys end - player:triggerEvent("ND_Vehicles:setOwnedIfNot", NetworkGetNetworkIdFromEntity(vehicle)) + player.triggerEvent("ND_Vehicles:setOwnedIfNot", NetworkGetNetworkIdFromEntity(vehicle)) end local function isParkingAvailable(source, coords) @@ -175,7 +175,7 @@ function NDCore.spawnOwnedVehicle(source, vehicleID, coords) if type(coords) == "table" then spawnCoords = isParkingAvailable(source, coords) if not spawnCoords then - player:notify({ + player.notify({ title = "Can't bring out vehicle", description = "No parking spot available for your vehicle. It's still in your garage.", type = "error", @@ -190,7 +190,7 @@ function NDCore.spawnOwnedVehicle(source, vehicleID, coords) for _, vehicle in pairs(vehicles) do if vehicle.owner == player.id and vehicle.id == vehicleID then 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) while not DoesEntityExist(veh) do Wait(0) end @@ -203,9 +203,19 @@ function NDCore.spawnOwnedVehicle(source, vehicleID, coords) state.owner = vehicle.owner state.id = vehicle.id 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 end @@ -222,7 +232,7 @@ function NDCore.returnVehicleToGarage(source, veh, properties) for _, vehicle in pairs(vehicles) do 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}) - player:triggerEvent("ND_Vehicles:returnVehicles", getVehicles(player.id)) + player.triggerEvent("ND_Vehicles:returnVehicles", getVehicles(player.id)) DeleteEntity(veh) return true end @@ -261,10 +271,6 @@ if Config.useInventoryForKeys then if not owner or owner ~= player.id then return end local props = state.props - local keys = state.keys - keys[player.id] = true - state.keys = keys - exports.ox_inventory:AddItem(source, "keys", 1, { vehOwner = owner, vehId = state.id, @@ -285,6 +291,6 @@ else if veh == 0 then return end end - giveKeys(veh, src, target) + NDCore.giveVehicleKeys(veh, src, target) end, false) end