From 863654ded141304f668435a2b5036c723c244a91 Mon Sep 17 00:00:00 2001 From: Andyyy7666 <86536434+Andyyy7666@users.noreply.github.com> Date: Fri, 31 Dec 2021 02:59:38 +0100 Subject: [PATCH] Update main.lua --- ND_Core/source/server/main.lua | 175 +++++++++++++++++++++++++++------ 1 file changed, 147 insertions(+), 28 deletions(-) diff --git a/ND_Core/source/server/main.lua b/ND_Core/source/server/main.lua index 6877a99..8007743 100644 --- a/ND_Core/source/server/main.lua +++ b/ND_Core/source/server/main.lua @@ -128,34 +128,6 @@ AddEventHandler("editCharacter", function(newCharacter) exports.oxmysql:query("UPDATE characters SET first_name = ?, last_name = ?, dob = ?, gender = ?, twt = ?, department = ? WHERE license = ? AND character_id = ?", {newCharacter.firstName, newCharacter.lastName, newCharacter.dateOfBirth, newCharacter.gender, newCharacter.twtName, newCharacter.department, GetPlayerIdentifierFromType("license", player), newCharacter.id}) end) --- Planning on moving everything money related to server. -RegisterNetEvent("bankPay") -AddEventHandler("bankPay", function(characterid, playerid, amount, playerSending, name) - local player = source - exports.oxmysql:query("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), characterid}) - TriggerClientEvent("receiveBank", playerid, amount, playerSending, name) - TriggerClientEvent("updateMoney", player) -end) -RegisterNetEvent("addBank") -AddEventHandler("addBank", function(amount, characterid) - local player = source - exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), characterid}) - TriggerClientEvent("updateMoney", player) -end) -RegisterNetEvent("cashPay") -AddEventHandler("cashPay", function(characterid, playerid, amount, playerSending, name) - local player = source - exports.oxmysql:query("UPDATE characters SET cash = cash - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), characterid}) - TriggerClientEvent("receiveCash", playerid, amount, playerSending, name) - TriggerClientEvent("updateMoney", player) -end) -RegisterNetEvent("addCash") -AddEventHandler("addCash", function(amount, characterid) - local player = source - exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), characterid}) - TriggerClientEvent("updateMoney", player) -end) - -- This is used to find out how much money the player has and use it in the client to show it on the ui. RegisterNetEvent("getMoney") AddEventHandler("getMoney", function(characterid) @@ -164,7 +136,154 @@ AddEventHandler("getMoney", function(characterid) if result then cash = result[1].cash bank = result[1].bank + onlinePlayers[player].cash = cash + onlinePlayers[player].bank = bank TriggerClientEvent("returnMoney", player, cash, bank) end end) end) + +-- onlinePlayers table. +onlinePlayers = {} + +-- add a player to the table. +RegisterNetEvent("characterOnline") +AddEventHandler("characterOnline", function(id) + local player = source + local license = GetPlayerIdentifierFromType("license", player) + exports.oxmysql:query("SELECT * FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), id}, function(result) + if result then + local i = result[1] + onlinePlayers[player] = { + characterId = id, + firstName = i.first_name, + lastName = i.last_name, + dob = i.dob, + gender = i.gender, + twt = i.twt, + dept = i.department, + cash = i.cash, + bank = i.bank + } + end + end) +end) + +-- paying command. +RegisterCommand(config.payCommand, function(source, args, raw) + local player = source + local target = tonumber(args[1]) + local amount = tonumber(args[2]) + + exports.oxmysql:query("SELECT bank FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result) + if result then + if player == target then + TriggerClientEvent("chat:addMessage", player, { + color = {255, 0, 0}, + args = {"Error", "You can't send money to yourself."} + }) + elseif GetPlayerPing(target) == 0 then + TriggerClientEvent("chat:addMessage", player, { + color = {255, 0, 0}, + args = {"Error", "That player does not exist."} + }) + elseif result[1].bank < amount then + TriggerClientEvent("chat:addMessage", player, { + color = {255, 0, 0}, + args = {"Error", "You don't have enough money."} + }) + else + exports.oxmysql:query("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}) + TriggerClientEvent("updateMoney", player) + exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", target), onlinePlayers[target].characterId}) + TriggerClientEvent("updateMoney", target) + + exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", target), onlinePlayers[target].characterId}, function(result) + if result then + TriggerClientEvent("chat:addMessage", player, { + color = {0, 255, 0}, + args = {"Success", "You paid " .. result[1].first_name .. " " .. result[1].last_name .. " $" .. amount .. "."} + }) + exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result) + if result then + TriggerClientEvent("receiveBank", target, amount, result[1].first_name .. " " .. result[1].last_name, player) + end + end) + end + end) + end + end + end) +end) + +-- Give money command. +RegisterCommand(config.giveCommand, function(source, args, raw) + local player = source + local amount = tonumber(args[1]) + + exports.oxmysql:query("SELECT cash FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result) + if result then + local playerFound = false + local playerCoords = GetEntityCoords(GetPlayerPed(player)) + if result[1].cash < amount then + TriggerClientEvent("chat:addMessage", player, { + color = {255, 0, 0}, + args = {"Error", "You don't have enough money."} + }) + else + for k, v in pairs(onlinePlayers) do + local targetCoords = GetEntityCoords(GetPlayerPed(k)) + if (#(playerCoords - targetCoords) < 2.0) and (k ~= player) and not playerFound then + exports.oxmysql:query("UPDATE characters SET cash = cash - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}) + TriggerClientEvent("updateMoney", player) + exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", k), tonumber(v.characterId)}) + TriggerClientEvent("updateMoney", k) + playerFound = true + exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", k), tonumber(v.characterId)}, function(result) + if result then + TriggerClientEvent("chat:addMessage", player, { + color = {0, 255, 0}, + args = {"Success", "You gave " .. result[1].first_name .. " " .. result[1].last_name .. " $" .. amount .. "."} + }) + exports.oxmysql:query("SELECT first_name, last_name FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result) + if result then + TriggerClientEvent("receiveCash", k, amount, result[1].first_name .. " " .. result[1].last_name, player) + end + end) + end + end) + end + end + if not playerFound then + TriggerClientEvent("chat:addMessage", player, { + color = {255, 0, 0}, + args = {"Error", "No players nearby."} + }) + end + playerFound = false + end + end + end) +end) + +-- Salary. +local salaryInterval = config.salaryInterval * 60000 +Citizen.CreateThread(function() + while true do + Citizen.Wait(salaryInterval) + for k, v in pairs(onlinePlayers) do + exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {config.salaryAmount, GetPlayerIdentifierFromType("license", k), v.characterId}) + TriggerClientEvent("receiveSalary", k, config.salaryAmount) + end + end +end) + +-- Remove player from onlinePlayers table when they leave. +AddEventHandler("playerDropped", function(reason) + local player = source + onlinePlayers[player] = nil +end) + +function getCharacterTable() + return onlinePlayers +end