mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-18 14:26:03 +01:00
2.0.0
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
serverName = "Andy's Development", -- Server name to display on the ui.
|
serverName = "Andy's Development",
|
||||||
characterLimit = 15,
|
characterLimit = 15,
|
||||||
changeCharacterCommand = "changecharacter", -- this is the command to open the ui again and change your character.
|
changeCharacterCommand = "changecharacter", -- this is the command to open the ui again and change your character.
|
||||||
|
customPauseMenu = true, -- this will create a custom pause menu. It will display your money, characters name. And server name in the pause menu.
|
||||||
|
|
||||||
-- set your backgrounds, if you have more than 1 then it will randomly change everytime you open the ui.
|
-- set your backgrounds, if you have more than 1 then it will randomly change everytime you open the ui.
|
||||||
backgrounds = {
|
backgrounds = {
|
||||||
@@ -12,13 +13,12 @@ config = {
|
|||||||
"https://i.imgur.com/ZWKfYD9.png" -- Credits: 2XRondo#6374
|
"https://i.imgur.com/ZWKfYD9.png" -- Credits: 2XRondo#6374
|
||||||
},
|
},
|
||||||
|
|
||||||
-- set up the name of your departments and the discord role id for permission. A role id of 0 will allow anyone to choose that department.
|
|
||||||
departments = {
|
departments = {
|
||||||
["CIV"] = {"0"},
|
["CIV"] = {"872921520719142932"},
|
||||||
["SAHP"] = {"0"},
|
["SAHP"] = {"872921520719142932"},
|
||||||
["LSPD"] = {"0"},
|
["LSPD"] = {"872921520719142932"},
|
||||||
["BCSO"] = {"0"},
|
["BCSO"] = {"872921520719142932"},
|
||||||
["LSFD"] = {"0"}
|
["LSFD"] = {"872921520719142932"}
|
||||||
},
|
},
|
||||||
|
|
||||||
-- set up the spawn buttons for each department.
|
-- set up the spawn buttons for each department.
|
||||||
@@ -54,51 +54,14 @@ config = {
|
|||||||
|
|
||||||
-- Money related
|
-- Money related
|
||||||
enableMoneySystem = true,
|
enableMoneySystem = true,
|
||||||
legacyMoneyDisplay = false, -- set to tru if you want to use the hud from my standalone money system.
|
|
||||||
maxStartingCash = 2500,
|
maxStartingCash = 2500,
|
||||||
maxStartingBank = 8000,
|
maxStartingBank = 8000,
|
||||||
payCommand = "pay", -- Command to transfer someone money from bank account.
|
payCommand = "pay", -- Command to transfer someone money from bank account.
|
||||||
giveCommand = "give", -- Command to give someone close money from wallet.
|
giveCommand = "give", -- Command to give someone close money from wallet.
|
||||||
salaryAmount = 300, -- the daily amount that players will receive.
|
|
||||||
salaryInterval = 24, -- every x minutes the player will receive the salaryAmount.
|
|
||||||
|
|
||||||
-- Area of Play
|
|
||||||
enableAopCommand = true,
|
|
||||||
aopCommand = "setaop",
|
|
||||||
checkAopCommand = "aop",
|
|
||||||
defaultAop = "Sandy Shores",
|
|
||||||
canChangeAOP = { -- Roles that can change the aop.
|
|
||||||
["ADMIN"] = "0",
|
|
||||||
["STAFF"] = "0"
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Prority cooldown
|
|
||||||
enablePriorityCooldown = true,
|
|
||||||
enablePriorityDefaultHUD = true, -- this will remove the hud of the priority, if you're using ModernHUD set this to false and go into ModernHUD config and change it to true from there.
|
|
||||||
startPriorityCommand = "prio-start",
|
|
||||||
stopPriorityCommand = "prio-stop",
|
|
||||||
cooldownPriorityCommand = "prio-cd",
|
|
||||||
joinPriorityCommand = "prio-join",
|
|
||||||
leavePriorityCommand = "prio-leave",
|
|
||||||
cooldownAfterPriority = 10, -- This is how long a cooldown will start after a priority is stopped.
|
|
||||||
canSeePriority = { -- Departments that can see the priority status on their screen. (It's usually just useful for civs)
|
|
||||||
"CIV"
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Dark web
|
|
||||||
enableDarkweb = true,
|
|
||||||
canSeeDarkweb = { -- Departments that can see and use the darkweb command.
|
|
||||||
"CIV"
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Hide reticle or default gta money and ammo dispaly. WARNING: turning both to true will add a 0.01 to the resmon.
|
|
||||||
hideReticle = true, -- hide weapon reticle.
|
|
||||||
hideAmmoAndMoney = true, -- hides the default gta ammo & money.
|
|
||||||
customPauseMenu = true, -- this will create a custom pause menu. It will display your money, characters name. And server name in the pause menu.
|
|
||||||
|
|
||||||
-- Discord Rich precence
|
-- Discord Rich precence
|
||||||
enableRichPrecence = true,
|
enableRichPrecence = true,
|
||||||
updateIntervall = 10, -- how many seconds delay until it updates status.
|
updateIntervall = 60, -- how many seconds delay until it updates status.
|
||||||
appId = 858146067018416128,
|
appId = 858146067018416128,
|
||||||
largeLogo = "andyyy",
|
largeLogo = "andyyy",
|
||||||
smallLogo = "andyyy",
|
smallLogo = "andyyy",
|
||||||
@@ -106,4 +69,4 @@ config = {
|
|||||||
firstButtonLink = "https://discord.gg/Z9Mxu72zZ6",
|
firstButtonLink = "https://discord.gg/Z9Mxu72zZ6",
|
||||||
secondButtonName = "TEBEX",
|
secondButtonName = "TEBEX",
|
||||||
secondButtonLink = "https://andyyy.tebex.io/category/fivem-scripts"
|
secondButtonLink = "https://andyyy.tebex.io/category/fivem-scripts"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
||||||
|
|
||||||
server_config = {
|
server_config = {
|
||||||
DiscordToken = "0", -- discord bot token for permissions
|
discordServerToken = "OTAwODg1MDMxMDQ2Nzc0ODQ1.YXH0kQ.2m4oWEw5hYmqnM4YOGnd4bn2AKI", -- discord bot token for permissions
|
||||||
GuildId = "872496972454592523", -- discord guild id
|
guildId = "872496972454592523", -- discord guild id
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
||||||
|
|
||||||
author "Andyyy#7666"
|
author "Andyyy#7666"
|
||||||
description "ND Framework Core"
|
description "ND-Core"
|
||||||
version "1.4.0"
|
version "2.0.0"
|
||||||
|
|
||||||
fx_version "cerulean"
|
fx_version "cerulean"
|
||||||
game "gta5"
|
game "gta5"
|
||||||
@@ -10,29 +10,22 @@ lua54 "yes"
|
|||||||
|
|
||||||
files {
|
files {
|
||||||
"source/ui/index.html",
|
"source/ui/index.html",
|
||||||
"source/ui/js/jquery-3.6.0.min.js",
|
"source/ui/script.js",
|
||||||
"source/ui/js/listener.js",
|
"source/ui/style.css"
|
||||||
"source/ui/Logo.png",
|
|
||||||
"source/ui/style.css",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_page "source/ui/index.html"
|
ui_page "source/ui/index.html"
|
||||||
|
|
||||||
shared_script "config_client.lua"
|
shared_script "config_client.lua"
|
||||||
|
client_script "source/client.lua"
|
||||||
server_scripts {
|
server_scripts {
|
||||||
"config_server.lua",
|
"config_server.lua",
|
||||||
"source/server/discord.lua",
|
"source/server.lua"
|
||||||
"source/server/main.lua",
|
|
||||||
"source/server/commands.lua"
|
|
||||||
}
|
|
||||||
client_scripts {
|
|
||||||
"source/client/main.lua",
|
|
||||||
"source/client/commands.lua"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exports {
|
exports {
|
||||||
"getCharacterInfo", -- getCharacterInfo(infoType), 1 will return return FirstName, 2 LastName, 3 DateOfBirth, 4 Gender, 5 TwtName, 6 Department, 7 Cash, 8 Bank. 9 will return their character id.
|
"getCharacterInfo",
|
||||||
}
|
}
|
||||||
|
|
||||||
server_exports {
|
server_exports {
|
||||||
"transferBank", -- exports["ND_Core"]:transferBank(amount, player, target)
|
"transferBank", -- exports["ND_Core"]:transferBank(amount, player, target)
|
||||||
"giveCashToClosestTarget", -- exports["ND_Core"]:giveCashToClosestTarget(amount, player)
|
"giveCashToClosestTarget", -- exports["ND_Core"]:giveCashToClosestTarget(amount, player)
|
||||||
@@ -40,10 +33,11 @@ server_exports {
|
|||||||
"depositMoney", -- exports["ND_Core"]:depositMoney(amount, player)
|
"depositMoney", -- exports["ND_Core"]:depositMoney(amount, player)
|
||||||
"deductMoney", -- exports["ND_Core"]:deductMoney(amount, player, from)
|
"deductMoney", -- exports["ND_Core"]:deductMoney(amount, player, from)
|
||||||
"addMoney", -- exports["ND_Core"]:addMoney(amount, player, to)
|
"addMoney", -- exports["ND_Core"]:addMoney(amount, player, to)
|
||||||
|
|
||||||
"getCharacterTable" -- exports["ND_Core"]:getCharacterTable() this will return a table with all the online players and their info. View below on how to use this.
|
"getCharacterTable" -- exports["ND_Core"]:getCharacterTable() this will return a table with all the online players and their info. View below on how to use this.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependency "oxmysql"
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
Keys in the getCharacterTable:
|
Keys in the getCharacterTable:
|
||||||
|
|
||||||
@@ -60,4 +54,4 @@ server_exports {
|
|||||||
Usage:
|
Usage:
|
||||||
players = exports["ND_Core"]:getCharacterTable()
|
players = exports["ND_Core"]:getCharacterTable()
|
||||||
print(players[3].bank) this will print the bank account of the player with id 3.
|
print(players[3].bank) this will print the bank account of the player with id 3.
|
||||||
]]
|
]]
|
||||||
@@ -10,4 +10,4 @@ CREATE TABLE `characters` (
|
|||||||
`cash` INT(10) NULL DEFAULT '0',
|
`cash` INT(10) NULL DEFAULT '0',
|
||||||
`bank` INT(10) NULL DEFAULT '0',
|
`bank` INT(10) NULL DEFAULT '0',
|
||||||
PRIMARY KEY (`character_id`) USING BTREE
|
PRIMARY KEY (`character_id`) USING BTREE
|
||||||
);
|
);
|
||||||
@@ -1,58 +1,92 @@
|
|||||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
|
||||||
|
|
||||||
local background = config.backgrounds[math.random(1, #config.backgrounds)]
|
local selectedCharacter
|
||||||
local started = true
|
local characterAmount = 0
|
||||||
local priorityText = nil
|
|
||||||
registered = false
|
function SetDisplay(bool, typeName, bg)
|
||||||
cash = nil
|
if not bg then
|
||||||
bank = nil
|
background = config.backgrounds[math.random(1, #config.backgrounds)]
|
||||||
|
end
|
||||||
|
SetNuiFocus(bool, bool)
|
||||||
|
SendNUIMessage({
|
||||||
|
type = typeName,
|
||||||
|
background = background,
|
||||||
|
status = bool,
|
||||||
|
serverName = config.serverName,
|
||||||
|
characterAmount = characterAmount .. "/" .. config.characterLimit
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function getCharacterInfo()
|
||||||
|
return selectedCharacter
|
||||||
|
end
|
||||||
|
|
||||||
|
function start(switch)
|
||||||
|
TriggerServerEvent("checkPerms")
|
||||||
|
TriggerServerEvent("getCharacters")
|
||||||
|
TriggerServerEvent("getAop")
|
||||||
|
Citizen.Wait(100)
|
||||||
|
if switch then
|
||||||
|
local ped = PlayerPedId()
|
||||||
|
SwitchOutPlayer(ped, 0, 1)
|
||||||
|
FreezeEntityPosition(ped, true)
|
||||||
|
SetEntityVisible(ped, false, 0)
|
||||||
|
end
|
||||||
|
SendNUIMessage({
|
||||||
|
type = "onStart",
|
||||||
|
enableMoneySystem = config.enableMoneySystem,
|
||||||
|
maxStartingBank = config.maxStartingBank,
|
||||||
|
maxStartingCash = config.maxStartingCash
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
AddEventHandler("onResourceStart", function(resourceName)
|
||||||
|
if (GetCurrentResourceName() ~= resourceName) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
Citizen.Wait(1000)
|
||||||
|
start(false)
|
||||||
|
end)
|
||||||
|
|
||||||
|
AddEventHandler("playerSpawned", function()
|
||||||
|
print("^0This framework is created by ^5Andyyy#7666 ^0for support you can join the ^5discord: ^0https://discord.gg/Z9Mxu72zZ6")
|
||||||
|
start(true)
|
||||||
|
end)
|
||||||
|
|
||||||
-- This is used to add department drop down on the ui.
|
-- This is used to add department drop down on the ui.
|
||||||
RegisterNetEvent("permsChecked")
|
RegisterNetEvent("permsChecked")
|
||||||
AddEventHandler("permsChecked", function(role, rolePermission)
|
AddEventHandler("permsChecked", function(allowedRoles)
|
||||||
if rolePermission then
|
for _, dept in pairs(allowedRoles) do
|
||||||
SendNUIMessage({
|
SendNUIMessage({
|
||||||
type = "givePerms",
|
type = "givePerms",
|
||||||
deptRole = role
|
deptRole = dept
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
RegisterNetEvent("refreshCharacters")
|
-- Notification when you recieve money.
|
||||||
AddEventHandler("refreshCharacters", function()
|
RegisterNetEvent("receiveBank")
|
||||||
TriggerServerEvent("getCharacters")
|
AddEventHandler("receiveBank", function(amount, playerSending, playerId)
|
||||||
|
BeginTextCommandThefeedPost("STRING")
|
||||||
|
AddTextComponentSubstringPlayerName("Received $" .. amount .. " from " .. playerSending .. " [".. playerId .."]")
|
||||||
|
EndTextCommandThefeedPostMessagetext("CHAR_BANK_FLEECA", "CHAR_BANK_FLEECA", true, 9,"FleecaBank", "")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
Citizen.CreateThread(function()
|
-- Notification when you receive cash.
|
||||||
while started do
|
RegisterNetEvent("receiveCash")
|
||||||
Citizen.Wait(200)
|
AddEventHandler("receiveCash", function(amount, playerSending, playerId)
|
||||||
local ped = PlayerPedId()
|
BeginTextCommandThefeedPost("STRING")
|
||||||
if IsPedOnFoot(ped) or IsPedInVehicle(ped, GetVehiclePedIsIn(ped, false), false) then
|
AddTextComponentSubstringPlayerName(playerSending .. " gave you $" .. amount .. ".")
|
||||||
print("^0This framework is created by ^5Andyyy#7666 ^0for support you can join the ^5discord: ^0https://discord.gg/Z9Mxu72zZ6")
|
EndTextCommandThefeedPostMessagetext("CHAR_DEFAULT", "CHAR_DEFAULT", true, 9, playerSending .. " [".. playerId .."]", "")
|
||||||
for departmentName in pairs(config.departments) do -- if you have an error that says attempt to index a nil value (global 'config') it's beacuse you have edited the config wrong.
|
|
||||||
TriggerServerEvent("checkPerms", departmentName) -- check permissions for each department with the department names.
|
|
||||||
end
|
|
||||||
TriggerServerEvent("getCharacters")
|
|
||||||
Citizen.Wait(100)
|
|
||||||
TriggerServerEvent("getAop")
|
|
||||||
SwitchOutPlayer(ped, 0, 1)
|
|
||||||
FreezeEntityPosition(ped, true)
|
|
||||||
SetEntityVisible(ped, false, 0)
|
|
||||||
started = false
|
|
||||||
SendNUIMessage({
|
|
||||||
type = "onStart",
|
|
||||||
enableMoneySystem = config.enableMoneySystem,
|
|
||||||
maxStartingBank = config.maxStartingBank,
|
|
||||||
maxStartingCash = config.maxStartingCash
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
RegisterNUICallback("exitGame", function(data)
|
RegisterNetEvent("updateMoney")
|
||||||
TriggerServerEvent("exitGame")
|
AddEventHandler("updateMoney", function(cash, bank)
|
||||||
|
selectedCharacter.cash = cash
|
||||||
|
selectedCharacter.bank = bank
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- Gets all the characters and displays them on the ui.
|
||||||
RegisterNetEvent("returnCharacters")
|
RegisterNetEvent("returnCharacters")
|
||||||
AddEventHandler("returnCharacters", function(characters)
|
AddEventHandler("returnCharacters", function(characters)
|
||||||
characterAmount = 0
|
characterAmount = 0
|
||||||
@@ -77,59 +111,21 @@ AddEventHandler("returnCharacters", function(characters)
|
|||||||
SetDisplay(true, "ui", background)
|
SetDisplay(true, "ui", background)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Creating a character
|
-- Selecting a player from the iu.
|
||||||
RegisterNUICallback("newCharacter", function(data)
|
RegisterNUICallback("setMainCharacter", function(data)
|
||||||
if characterAmount < config.characterLimit then
|
selectedCharacter = {
|
||||||
newCharacter = {
|
|
||||||
firstName = data.firstName,
|
|
||||||
lastName = data.lastName,
|
|
||||||
dateOfBirth = data.dateOfBirth,
|
|
||||||
gender = data.gender,
|
|
||||||
twtName = data.twtName,
|
|
||||||
department = data.department,
|
|
||||||
startingCash = data.startingCash,
|
|
||||||
startingBank = data.startingBank
|
|
||||||
}
|
|
||||||
TriggerServerEvent("newCharacter", newCharacter)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- editing a character
|
|
||||||
RegisterNUICallback("editCharacter", function(data)
|
|
||||||
newCharacter = {
|
|
||||||
firstName = data.firstName,
|
firstName = data.firstName,
|
||||||
lastName = data.lastName,
|
lastName = data.lastName,
|
||||||
dateOfBirth = data.dateOfBirth,
|
dob = data.dateOfBirth,
|
||||||
gender = data.gender,
|
gender = data.gender,
|
||||||
twtName = data.twtName,
|
twt = data.twtName,
|
||||||
department = data.department,
|
department = data.department,
|
||||||
id = data.id
|
cash = data.startingCash,
|
||||||
|
bank = data.startingBank,
|
||||||
|
id = data.character
|
||||||
}
|
}
|
||||||
TriggerServerEvent("editCharacter", newCharacter)
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- deleting a character
|
for _, spawn in pairs(config.spawns[selectedCharacter.department]) do
|
||||||
RegisterNUICallback("delCharacter", function(data)
|
|
||||||
TriggerServerEvent("delCharacter", data.character)
|
|
||||||
characterAmount = characterAmount -1
|
|
||||||
SendNUIMessage({
|
|
||||||
characterAmount = characterAmount .. "/" .. config.characterLimit
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Once the player clicks on the character in the ui, it will be set as the main character or the current character. This info can be used later in exports or elsewhere in this resource.
|
|
||||||
RegisterNUICallback("setMainCharacter", function(data)
|
|
||||||
mainFirstName = data.firstName
|
|
||||||
mainLastName = data.lastName
|
|
||||||
mainDateOfBirth = data.dateOfBirth
|
|
||||||
mainGender = data.gender
|
|
||||||
mainTwtName = data.twtName
|
|
||||||
mainDepartment = data.department
|
|
||||||
mainStartingCash = data.startingCash
|
|
||||||
mainStartingBank = data.startingBank
|
|
||||||
mainCharaterId = data.character
|
|
||||||
|
|
||||||
for _, spawn in pairs(config.spawns[mainDepartment]) do
|
|
||||||
SendNUIMessage({
|
SendNUIMessage({
|
||||||
type = "setSpawns",
|
type = "setSpawns",
|
||||||
x = spawn.x,
|
x = spawn.x,
|
||||||
@@ -139,74 +135,54 @@ RegisterNUICallback("setMainCharacter", function(data)
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
TriggerServerEvent("characterOnline", mainCharaterId)
|
TriggerServerEvent("characterOnline", selectedCharacter.id)
|
||||||
TriggerServerEvent("getPriority")
|
TriggerEvent("characterChanged", selectedCharacter)
|
||||||
registered = true
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if config.enableMoneySystem then
|
-- Creating a character from the ui.
|
||||||
-- This will display the money that the player has.
|
RegisterNUICallback("newCharacter", function(data)
|
||||||
RegisterNetEvent("returnMoney")
|
if characterAmount < config.characterLimit then
|
||||||
AddEventHandler("returnMoney", function(newCash, newBank)
|
TriggerServerEvent("newCharacter", {
|
||||||
while not registered do
|
firstName = data.firstName,
|
||||||
Citizen.Wait(10)
|
lastName = data.lastName,
|
||||||
end
|
dateOfBirth = data.dateOfBirth,
|
||||||
cash = tostring(newCash)
|
gender = data.gender,
|
||||||
bank = tostring(newBank)
|
twtName = data.twtName,
|
||||||
if config.legacyMoneyDisplay then
|
department = data.department,
|
||||||
if registered then
|
startingCash = data.startingCash,
|
||||||
while true do
|
startingBank = data.startingBank
|
||||||
Citizen.Wait(0)
|
})
|
||||||
text("💵", 0.885, 0.028, 0.35, 7)
|
end
|
||||||
text("💳", 0.885, 0.068, 0.35, 7)
|
end)
|
||||||
text("~g~$~w~".. cash, 0.91, 0.03, 0.55, 7)
|
|
||||||
text("~b~$~w~".. bank, 0.91, 0.07, 0.55, 7)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
SendNUIMessage({
|
|
||||||
type = "Money",
|
|
||||||
cash = "Cash: $" .. cash,
|
|
||||||
bank = "Bank: $" .. bank
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- This is to update the players money on the ui.
|
-- editing a character from the ui.
|
||||||
RegisterNetEvent("updateMoney")
|
RegisterNUICallback("editCharacter", function(data)
|
||||||
AddEventHandler("updateMoney", function()
|
TriggerServerEvent("editCharacter", {
|
||||||
TriggerServerEvent("getMoney", mainCharaterId)
|
firstName = data.firstName,
|
||||||
end)
|
lastName = data.lastName,
|
||||||
|
dateOfBirth = data.dateOfBirth,
|
||||||
|
gender = data.gender,
|
||||||
|
twtName = data.twtName,
|
||||||
|
department = data.department,
|
||||||
|
id = data.id
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
|
||||||
-- Notification when you recieve money.
|
-- deleting a character from the ui.
|
||||||
RegisterNetEvent("receiveBank")
|
RegisterNUICallback("delCharacter", function(data)
|
||||||
AddEventHandler("receiveBank", function(amount, playerSending, playerId)
|
TriggerServerEvent("delCharacter", data.character)
|
||||||
BeginTextCommandThefeedPost("STRING")
|
characterAmount = characterAmount -1
|
||||||
AddTextComponentSubstringPlayerName("Received $" .. amount .. " from " .. playerSending .. " [".. playerId .."]")
|
SendNUIMessage({
|
||||||
EndTextCommandThefeedPostMessagetext("CHAR_BANK_FLEECA", "CHAR_BANK_FLEECA", true, 9,"FleecaBank", "")
|
characterAmount = characterAmount .. "/" .. config.characterLimit
|
||||||
end)
|
})
|
||||||
|
end)
|
||||||
|
|
||||||
-- Notification when you receive cash.
|
-- Quit button from ui.
|
||||||
RegisterNetEvent("receiveCash")
|
RegisterNUICallback("exitGame", function(data)
|
||||||
AddEventHandler("receiveCash", function(amount, playerSending, playerId)
|
TriggerServerEvent("exitGame")
|
||||||
BeginTextCommandThefeedPost("STRING")
|
end)
|
||||||
AddTextComponentSubstringPlayerName(playerSending .. " gave you $" .. amount .. ".")
|
|
||||||
EndTextCommandThefeedPostMessagetext("CHAR_DEFAULT", "CHAR_DEFAULT", true, 9, playerSending .. " [".. playerId .."]", "")
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Notification when receiving salary.
|
-- Teleporting using ui.
|
||||||
RegisterNetEvent("receiveSalary")
|
|
||||||
AddEventHandler("receiveSalary", function(amount)
|
|
||||||
if registered then
|
|
||||||
BeginTextCommandThefeedPost("STRING")
|
|
||||||
AddTextComponentSubstringPlayerName("Daily Salary + $" .. config.salaryAmount)
|
|
||||||
EndTextCommandThefeedPostMessagetext("CHAR_BANK_FLEECA", "CHAR_BANK_FLEECA", true, 9,"FleecaBank", "")
|
|
||||||
TriggerServerEvent("getMoney", mainCharaterId)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Teleporting
|
|
||||||
RegisterNUICallback("tpToLocation", function(data)
|
RegisterNUICallback("tpToLocation", function(data)
|
||||||
local ped = PlayerPedId()
|
local ped = PlayerPedId()
|
||||||
FreezeEntityPosition(ped, false)
|
FreezeEntityPosition(ped, false)
|
||||||
@@ -218,7 +194,7 @@ RegisterNUICallback("tpToLocation", function(data)
|
|||||||
Citizen.Wait(500)
|
Citizen.Wait(500)
|
||||||
FreezeEntityPosition(ped, false)
|
FreezeEntityPosition(ped, false)
|
||||||
SetEntityVisible(ped, true, 0)
|
SetEntityVisible(ped, true, 0)
|
||||||
TriggerServerEvent("getMoney", mainCharaterId)
|
TriggerServerEvent("getMoney", selectedCharacter.id)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Choosing the do not tp button.
|
-- Choosing the do not tp button.
|
||||||
@@ -230,128 +206,61 @@ RegisterNUICallback("tpDoNot", function()
|
|||||||
Citizen.Wait(500)
|
Citizen.Wait(500)
|
||||||
SetEntityVisible(ped, true, 0)
|
SetEntityVisible(ped, true, 0)
|
||||||
FreezeEntityPosition(ped, false)
|
FreezeEntityPosition(ped, false)
|
||||||
TriggerServerEvent("getMoney", mainCharaterId)
|
TriggerServerEvent("getMoney", selectedCharacter.id)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
function SetDisplay(bool, typeName, bg)
|
-- discord rich precense will show on a users profile.
|
||||||
if not bg then
|
|
||||||
background = config.backgrounds[math.random(1, #config.backgrounds)]
|
|
||||||
end
|
|
||||||
SetNuiFocus(bool, bool)
|
|
||||||
SendNUIMessage({
|
|
||||||
type = typeName,
|
|
||||||
background = background,
|
|
||||||
status = bool,
|
|
||||||
serverName = config.serverName,
|
|
||||||
characterAmount = characterAmount .. "/" .. config.characterLimit
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if config.enableRichPrecence then
|
if config.enableRichPrecence then
|
||||||
Citizen.CreateThread(function()
|
Citizen.CreateThread(function()
|
||||||
while true do
|
while true do
|
||||||
Citizen.Wait(config.updateIntervall * 1000)
|
|
||||||
SetDiscordAppId(config.appId)
|
SetDiscordAppId(config.appId)
|
||||||
if registered then
|
if selectedCharacter then
|
||||||
SetRichPresence(" Playing : " .. config.serverName .. " as " .. mainFirstName .. " " .. mainLastName)
|
SetRichPresence(" Playing : " .. config.serverName .. " as " .. selectedCharacter.firstName .. " " .. selectedCharacter.lastName)
|
||||||
SetDiscordRichPresenceAsset(config.largeLogo)
|
SetDiscordRichPresenceAsset(config.largeLogo)
|
||||||
SetDiscordRichPresenceAssetText("Playing: " .. config.serverName)
|
SetDiscordRichPresenceAssetText("Playing: " .. config.serverName)
|
||||||
SetDiscordRichPresenceAssetSmall(config.smallLogo)
|
SetDiscordRichPresenceAssetSmall(config.smallLogo)
|
||||||
SetDiscordRichPresenceAssetSmallText("Playing as: " .. mainFirstName .. " " .. mainLastName)
|
SetDiscordRichPresenceAssetSmallText("Playing as: " .. selectedCharacter.firstName .. " " .. selectedCharacter.lastName)
|
||||||
SetDiscordRichPresenceAction(0, config.firstButtonName, config.firstButtonLink)
|
SetDiscordRichPresenceAction(0, config.firstButtonName, config.firstButtonLink)
|
||||||
SetDiscordRichPresenceAction(1, config.secondButtonName, config.secondButtonLink)
|
SetDiscordRichPresenceAction(1, config.secondButtonName, config.secondButtonLink)
|
||||||
end
|
end
|
||||||
|
Citizen.Wait(config.updateIntervall * 1000)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
if config.enablePriorityCooldown then
|
-- show server name, first name, last name, and the amount of money the character has in the pause menu.
|
||||||
TriggerEvent("chat:addSuggestion", "/" .. config.startPriorityCommand, "Start a priority.")
|
if config.customPauseMenu then
|
||||||
TriggerEvent("chat:addSuggestion", "/" .. config.stopPriorityCommand, "Stop an active priority.")
|
|
||||||
TriggerEvent("chat:addSuggestion", "/" .. config.cooldownPriorityCommand, "Start a cooldown on priorities.", {
|
|
||||||
{name="Time", help="Time in minutes to start a cooldown"}
|
|
||||||
})
|
|
||||||
|
|
||||||
RegisterNetEvent("returnPriority")
|
|
||||||
AddEventHandler("returnPriority", function(priority)
|
|
||||||
priorityText = nil
|
|
||||||
for _, departmentName in pairs(config.canSeePriority) do
|
|
||||||
if departmentName == mainDepartment then
|
|
||||||
priorityText = priority
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
if config.hideAmmoAndMoney or config.hideReticle or config.customPauseMenu or config.enablePriorityCooldown then
|
|
||||||
Citizen.CreateThread(function()
|
Citizen.CreateThread(function()
|
||||||
while true do
|
while true do
|
||||||
Citizen.Wait(0)
|
Citizen.Wait(0)
|
||||||
if config.hideAmmoAndMoney then
|
if selectedCharacter then
|
||||||
HideHudComponentThisFrame(3) -- CASH
|
|
||||||
HideHudComponentThisFrame(4) -- MP_CASH
|
|
||||||
HideHudComponentThisFrame(13) -- CASH_CHANGE
|
|
||||||
HideHudComponentThisFrame(2) -- WEAPON_ICON
|
|
||||||
end
|
|
||||||
if config.hideReticle then
|
|
||||||
HideHudComponentThisFrame(14) -- RETICLE
|
|
||||||
end
|
|
||||||
if config.customPauseMenu and registered then
|
|
||||||
if IsPauseMenuActive() then
|
if IsPauseMenuActive() then
|
||||||
BeginScaleformMovieMethodOnFrontendHeader("SET_HEADING_DETAILS")
|
BeginScaleformMovieMethodOnFrontendHeader("SET_HEADING_DETAILS")
|
||||||
AddTextEntry("FE_THDR_GTAO", config.serverName)
|
AddTextEntry("FE_THDR_GTAO", config.serverName)
|
||||||
ScaleformMovieMethodAddParamPlayerNameString(mainFirstName .. " " .. mainLastName)
|
ScaleformMovieMethodAddParamPlayerNameString(selectedCharacter.firstName .. " " .. selectedCharacter.lastName)
|
||||||
if registered and config.enableMoneySystem then
|
if config.enableMoneySystem then
|
||||||
PushScaleformMovieFunctionParameterString("Cash: $" .. cash)
|
PushScaleformMovieFunctionParameterString("Cash: $" .. tostring(selectedCharacter.cash))
|
||||||
PushScaleformMovieFunctionParameterString("Bank: $" .. bank)
|
PushScaleformMovieFunctionParameterString("Bank: $" .. tostring(selectedCharacter.bank))
|
||||||
end
|
end
|
||||||
EndScaleformMovieMethod()
|
EndScaleformMovieMethod()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if config.enablePriorityCooldown and priorityText and config.enablePriorityDefaultHUD then
|
|
||||||
text(priorityText, 0.182, 0.891, 0.4, 4)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Notification above the map.
|
-- Change character command
|
||||||
function notify(message)
|
RegisterCommand(config.changeCharacterCommand, function()
|
||||||
BeginTextCommandThefeedPost("STRING")
|
SwitchOutPlayer(PlayerPedId(), 0, 1)
|
||||||
AddTextComponentSubstringPlayerName(message)
|
Citizen.Wait(2000)
|
||||||
EndTextCommandThefeedPostTicker(0,1)
|
FreezeEntityPosition(ped, true)
|
||||||
end
|
SetEntityVisible(ped, false, 0)
|
||||||
|
SetDisplay(true, "ui")
|
||||||
|
end, false)
|
||||||
|
|
||||||
function getCharacterInfo(infoType)
|
-- chat suggestions
|
||||||
if registered then
|
TriggerEvent("chat:addSuggestion", "/" .. config.changeCharacterCommand, "Switch your framework character.")
|
||||||
mainCharacter = {
|
if config.enableMoneySystem then
|
||||||
mainFirstName,
|
TriggerEvent("chat:addSuggestion", "/" .. config.payCommand, "Transfer money to player", {{name="id", help="Player server id" }, {name="amount", help="amount to pay"}})
|
||||||
mainLastName,
|
TriggerEvent("chat:addSuggestion", "/" .. config.giveCommand, "Give money to closeby player", {{name="amount", help="amount to give"}})
|
||||||
mainDateOfBirth,
|
end
|
||||||
mainGender,
|
|
||||||
mainTwtName,
|
|
||||||
mainDepartment,
|
|
||||||
cash,
|
|
||||||
bank,
|
|
||||||
mainCharaterId,
|
|
||||||
priorityText
|
|
||||||
}
|
|
||||||
return mainCharacter[infoType]
|
|
||||||
else
|
|
||||||
return "Error: Player not registered"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function text(text, x, y, scale, font)
|
|
||||||
SetTextFont(font)
|
|
||||||
SetTextProportional(0)
|
|
||||||
SetTextScale(scale, scale)
|
|
||||||
SetTextEdge(1, 0, 0, 0, 255)
|
|
||||||
SetTextDropShadow(0, 0, 0, 0,255)
|
|
||||||
SetTextOutline()
|
|
||||||
SetTextJustification(1)
|
|
||||||
SetTextEntry("STRING")
|
|
||||||
AddTextComponentString(text)
|
|
||||||
DrawText(x, y)
|
|
||||||
end
|
|
||||||
@@ -10,23 +10,26 @@ if resource ~= expectedName then
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- check if resource version is up to date
|
-- check if resource version is up to date
|
||||||
PerformHttpRequest("https://raw.githubusercontent.com/Andyyy7666/ND_Framework/main/ND_Core/fxmanifest.lua", function(error, res, head)
|
PerformHttpRequest("https://raw.githubusercontent.com/Andyyy7666/ND_Framework/main/ND_Core/fxmanifest.lua", function(errorCode, resultData, resultHeaders)
|
||||||
i, j = string.find(tostring(res), "version")
|
i, j = string.find(tostring(resultData), "version")
|
||||||
res = string.sub(tostring(res), i, j + 6)
|
resultData = string.sub(tostring(resultData), i, j + 12)
|
||||||
res = string.gsub(res, "version ", "")
|
resultData = string.gsub(resultData, "version \"", "")
|
||||||
res = string.gsub(res, '"', "")
|
i, j = string.find(resultData, "\"")
|
||||||
resp = tonumber(res)
|
resultData = string.sub(resultData, 1, i - 1)
|
||||||
verFile = GetResourceMetadata(expectedName, "version", 0)
|
local githubVersion = string.gsub(resultData, "%.", "")
|
||||||
|
local fileVersion = string.gsub(GetResourceMetadata(expectedName, "version", 0), "%.", "")
|
||||||
if verFile then
|
githubVersion = tonumber(githubVersion)
|
||||||
if tonumber(verFile) < resp then
|
fileVersion = tonumber(fileVersion)
|
||||||
|
|
||||||
|
if githubVersion and fileVersion then
|
||||||
|
if githubVersion > fileVersion then
|
||||||
print("^1[^4" .. expectedName .. "^1] WARNING^0")
|
print("^1[^4" .. expectedName .. "^1] WARNING^0")
|
||||||
print("^4" .. expectedName .. " ^0is outdated. Please update it from ^5https://github.com/Andyyy7666/ND_Framework ^0| Current Version: ^1" .. verFile .. " ^0| New Version: ^2" .. resp .. " ^0|")
|
print("^4" .. expectedName .. " ^0is outdated. Please update it from ^5https://github.com/Andyyy7666/ND_Framework ^0| Current Version: ^1" .. fileVersion .. " ^0| New Version: ^2" .. githubVersion .. " ^0|")
|
||||||
elseif tonumber(verFile) > tonumber(resp) then
|
elseif githubVersion < fileVersion then
|
||||||
print("^1[^4" .. expectedName .. "^1] WARNING^0")
|
print("^1[^4" .. expectedName .. "^1] WARNING^0")
|
||||||
print("^4" .. expectedName .. "s ^0version number is higher than we expected. | Current Version: ^3" .. verFile .. " ^0| Expected Version: ^2" .. resp .. " ^0|")
|
print("^4" .. expectedName .. " ^0version number is higher than expected | Current Version: ^3" .. fileVersion .. " ^0| Expected Version: ^2" .. githubVersion .. " ^0|")
|
||||||
else
|
else
|
||||||
print("^4" .. expectedName .. " ^0is up to date | Current Version: ^2" .. verFile .. " ^0|")
|
print("^4" .. expectedName .. " ^0is up to date | Current Version: ^2" .. fileVersion .. " ^0|")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
print("^1[^4" .. expectedName .. "^1] WARNING^0")
|
print("^1[^4" .. expectedName .. "^1] WARNING^0")
|
||||||
@@ -34,27 +37,43 @@ PerformHttpRequest("https://raw.githubusercontent.com/Andyyy7666/ND_Framework/ma
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- onlinePlayers table.
|
-- Used to retrive the players discord server nickname, discord name and tag, and the roles.
|
||||||
onlinePlayers = {}
|
function getUserDiscordInfo(discordUserId)
|
||||||
|
local data
|
||||||
-- Get player identifier function (This will not change the identifier all the time)
|
PerformHttpRequest("https://discordapp.com/api/guilds/" .. server_config.guildId .. "/members/" .. discordUserId, function(errorCode, resultData, resultHeaders)
|
||||||
function GetPlayerIdentifierFromType(type, source) -- Credits: xander1998, Post: https://forum.cfx.re/t/solved-is-there-a-better-way-to-get-lic-steam-and-ip-than-getplayeridentifiers/236243/2?u=andyyy7666
|
if errorCode ~= 200 then
|
||||||
local identifiers = {}
|
return
|
||||||
local identifierCount = GetNumPlayerIdentifiers(source)
|
end
|
||||||
|
local result = json.decode(resultData)
|
||||||
for a = 0, identifierCount do
|
local roles = {}
|
||||||
table.insert(identifiers, GetPlayerIdentifier(source, a))
|
for _, roleId in pairs(result.roles) do
|
||||||
end
|
roles[roleId] = roleId
|
||||||
|
end
|
||||||
for b = 1, #identifiers do
|
data = {
|
||||||
if string.find(identifiers[b], type, 1) then
|
nickname = result.nick,
|
||||||
return identifiers[b]
|
discordTag = tostring(result.user.username) .. "#" .. tostring(result.user.discriminator),
|
||||||
end
|
roles = roles
|
||||||
end
|
}
|
||||||
return nil
|
end, "GET", "", {["Content-Type"] = "application/json", ["Authorization"] = "Bot " .. server_config.discordServerToken})
|
||||||
|
while not data do
|
||||||
|
Citizen.Wait(0)
|
||||||
|
end
|
||||||
|
return data
|
||||||
end
|
end
|
||||||
|
|
||||||
function validateMoney(cash, bank)
|
-- Get player any identifier, available types: steam, license, xbl, ip, discord, live.
|
||||||
|
function GetPlayerIdentifierFromType(type, source)
|
||||||
|
local identifierCount = GetNumPlayerIdentifiers(source)
|
||||||
|
for count = 0, identifierCount do
|
||||||
|
local identifier = GetPlayerIdentifier(source, count)
|
||||||
|
if identifier and string.find(identifier, type) then
|
||||||
|
return identifier
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function validateMoney(cash, bank)
|
||||||
if tonumber(cash) > config.maxStartingCash or tonumber(bank) > config.maxStartingBank then
|
if tonumber(cash) > config.maxStartingCash or tonumber(bank) > config.maxStartingBank then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@@ -62,12 +81,13 @@ function validateMoney(cash, bank)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function validateDepartment(player, department)
|
function validateDepartment(player, department)
|
||||||
local rolePermission = false
|
|
||||||
local departmentExists = config.departments[department]
|
local departmentExists = config.departments[department]
|
||||||
if departmentExists then
|
if departmentExists then
|
||||||
for i = 1, #departmentExists do
|
local discordUserId = string.gsub(GetPlayerIdentifierFromType("discord", player), "discord:", "")
|
||||||
rolePermission = IsRolePresent(player, department, departmentExists[i], "start")
|
local roles = getUserDiscordInfo(discordUserId).roles
|
||||||
if rolePermission then
|
|
||||||
|
for _, roleId in pairs(departmentExists) do
|
||||||
|
if roles[roleId] or roleId == 0 then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -75,25 +95,22 @@ function validateDepartment(player, department)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Using the IsRolePresent function from discord.lua to check if the player has the roles.
|
|
||||||
RegisterNetEvent("checkPerms")
|
RegisterNetEvent("checkPerms")
|
||||||
AddEventHandler("checkPerms", function(role)
|
AddEventHandler("checkPerms", function()
|
||||||
local player = source
|
local player = source
|
||||||
local rolePermission = false
|
local discordUserId = string.gsub(GetPlayerIdentifierFromType("discord", player), "discord:", "")
|
||||||
for i = 1, #config.departments[role] do
|
local allowedRoles = {}
|
||||||
rolePermission = IsRolePresent(player, role, config.departments[role][i], "start")
|
local roles = getUserDiscordInfo(discordUserId).roles
|
||||||
if rolePermission then
|
|
||||||
break
|
for dept, roleTable in pairs(config.departments) do
|
||||||
|
for _, roleId in pairs(roleTable) do
|
||||||
|
if roles[roleId] or roleId == 0 then
|
||||||
|
table.insert(allowedRoles, dept)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
TriggerClientEvent("permsChecked", player, role, rolePermission)
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Disconnecting a player
|
TriggerClientEvent("permsChecked", player, allowedRoles)
|
||||||
RegisterNetEvent("exitGame")
|
|
||||||
AddEventHandler("exitGame", function()
|
|
||||||
local player = source
|
|
||||||
DropPlayer(player, "Disconnected using framework.")
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Inserting the players characters into characters table
|
-- Inserting the players characters into characters table
|
||||||
@@ -124,7 +141,7 @@ AddEventHandler("newCharacter", function(newCharacter)
|
|||||||
|
|
||||||
local startingCash = newCharacter.startingCash
|
local startingCash = newCharacter.startingCash
|
||||||
local startingBank = newCharacter.startingBank
|
local startingBank = newCharacter.startingBank
|
||||||
print(startingCash)
|
|
||||||
if config.enableMoneySystem then
|
if config.enableMoneySystem then
|
||||||
-- Don't trust the client, validate maximum amounts.
|
-- Don't trust the client, validate maximum amounts.
|
||||||
local moneyCheck = validateMoney(startingCash, startingBank)
|
local moneyCheck = validateMoney(startingCash, startingBank)
|
||||||
@@ -177,51 +194,8 @@ 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})
|
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)
|
end)
|
||||||
|
|
||||||
if config.enableMoneySystem then
|
-- onlinePlayers table, this is used to store all the players current character info on the server.
|
||||||
-- This is used to find out how much money the player has and use it in the client to show it on the ui.
|
onlinePlayers = {}
|
||||||
RegisterNetEvent("getMoney")
|
|
||||||
AddEventHandler("getMoney", function(characterid)
|
|
||||||
local player = source
|
|
||||||
local license = GetPlayerIdentifierFromType("license", player)
|
|
||||||
exports.oxmysql:query("SELECT cash, bank FROM characters WHERE license = ? AND character_id = ?", {license, characterid}, function(result)
|
|
||||||
if result then
|
|
||||||
local cash = result[1].cash
|
|
||||||
local bank = result[1].bank
|
|
||||||
onlinePlayers[player].cash = cash
|
|
||||||
onlinePlayers[player].bank = bank
|
|
||||||
TriggerClientEvent("returnMoney", player, cash, 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])
|
|
||||||
transferBank(amount, player, target)
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Give money command.
|
|
||||||
RegisterCommand(config.giveCommand, function(source, args, raw)
|
|
||||||
local player = source
|
|
||||||
local amount = tonumber(args[1])
|
|
||||||
giveCashToClosestTarget(amount, player)
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Salary.
|
|
||||||
local salaryInterval = config.salaryInterval * 60000
|
|
||||||
Citizen.CreateThread(function()
|
|
||||||
while true do
|
|
||||||
Citizen.Wait(salaryInterval)
|
|
||||||
for playerid, playerinfo in pairs(onlinePlayers) do
|
|
||||||
local license = GetPlayerIdentifierFromType("license", playerid)
|
|
||||||
exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {config.salaryAmount, license, playerinfo.characterId})
|
|
||||||
TriggerClientEvent("receiveSalary", playerid, config.salaryAmount)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- add a player to the table.
|
-- add a player to the table.
|
||||||
RegisterNetEvent("characterOnline")
|
RegisterNetEvent("characterOnline")
|
||||||
@@ -252,111 +226,174 @@ AddEventHandler("playerDropped", function(reason)
|
|||||||
onlinePlayers[player] = nil
|
onlinePlayers[player] = nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- Disconnecting a player
|
||||||
|
RegisterNetEvent("exitGame")
|
||||||
|
AddEventHandler("exitGame", function()
|
||||||
|
local player = source
|
||||||
|
DropPlayer(player, "Disconnected using framework.")
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- this is for the exports
|
||||||
function getCharacterTable()
|
function getCharacterTable()
|
||||||
return onlinePlayers
|
return onlinePlayers
|
||||||
end
|
end
|
||||||
|
|
||||||
function transferBank(amount, player, target)
|
function updateMoney(player)
|
||||||
exports.oxmysql:query("SELECT bank FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result)
|
local player = tonumber(player)
|
||||||
|
local license = GetPlayerIdentifierFromType("license", player)
|
||||||
|
exports.oxmysql:query("SELECT cash, bank FROM characters WHERE license = ? AND character_id = ?", {license, onlinePlayers[player].characterId}, function(result)
|
||||||
if result then
|
if result then
|
||||||
if player == target then
|
local cash = result[1].cash
|
||||||
TriggerClientEvent("chat:addMessage", player, {
|
local bank = result[1].bank
|
||||||
color = {255, 0, 0},
|
onlinePlayers[player].cash = cash
|
||||||
args = {"Error", "You can't send money to yourself."}
|
onlinePlayers[player].bank = bank
|
||||||
})
|
TriggerClientEvent("updateMoney", player, cash, bank)
|
||||||
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)
|
|
||||||
|
|
||||||
TriggerClientEvent("chat:addMessage", player, {
|
|
||||||
color = {0, 255, 0},
|
|
||||||
args = {"Success", "You paid " .. onlinePlayers[target].firstName .. " " .. onlinePlayers[target].lastName .. " $" .. amount .. "."}
|
|
||||||
})
|
|
||||||
TriggerClientEvent("receiveBank", target, amount, onlinePlayers[player].firstName .. " " .. onlinePlayers[player].lastName, player)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function transferBank(amount, player, target)
|
||||||
|
local amount = tonumber(amount)
|
||||||
|
local player = tonumber(player)
|
||||||
|
local target = tonumber(target)
|
||||||
|
if player == target then
|
||||||
|
TriggerClientEvent("chat:addMessage", player, {
|
||||||
|
color = {255, 0, 0},
|
||||||
|
args = {"Error", "You can't send money to yourself."}
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
elseif GetPlayerPing(target) == 0 then
|
||||||
|
TriggerClientEvent("chat:addMessage", player, {
|
||||||
|
color = {255, 0, 0},
|
||||||
|
args = {"Error", "That player does not exist."}
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
elseif onlinePlayers[player].bank < amount then
|
||||||
|
TriggerClientEvent("chat:addMessage", player, {
|
||||||
|
color = {255, 0, 0},
|
||||||
|
args = {"Error", "You don't have enough money."}
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
exports.oxmysql:query("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
|
updateMoney(player)
|
||||||
|
exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", target), onlinePlayers[target].characterId})
|
||||||
|
updateMoney(target)
|
||||||
|
|
||||||
|
TriggerClientEvent("chat:addMessage", player, {
|
||||||
|
color = {0, 255, 0},
|
||||||
|
args = {"Success", "You paid " .. onlinePlayers[target].firstName .. " " .. onlinePlayers[target].lastName .. " $" .. amount .. "."}
|
||||||
|
})
|
||||||
|
TriggerClientEvent("receiveBank", target, amount, onlinePlayers[player].firstName .. " " .. onlinePlayers[player].lastName, player)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function giveCashToClosestTarget(amount, player)
|
function giveCashToClosestTarget(amount, player)
|
||||||
exports.oxmysql:query("SELECT cash FROM characters WHERE license = ? AND character_id = ?", {GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId}, function(result)
|
local amount = tonumber(amount)
|
||||||
if result then
|
local player = tonumber(player)
|
||||||
local playerFound = false
|
local playerFound = false
|
||||||
local playerCoords = GetEntityCoords(GetPlayerPed(player))
|
local playerCoords = GetEntityCoords(GetPlayerPed(player))
|
||||||
if result[1].cash < amount then
|
if onlinePlayers[player].cash < amount then
|
||||||
|
TriggerClientEvent("chat:addMessage", player, {
|
||||||
|
color = {255, 0, 0},
|
||||||
|
args = {"Error", "You don't have enough money."}
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
for targetId, targetInfo in pairs(onlinePlayers) do
|
||||||
|
local targetCoords = GetEntityCoords(GetPlayerPed(targetId))
|
||||||
|
if (#(playerCoords - targetCoords) < 2.0) and (targetId ~= 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})
|
||||||
|
updateMoney(player)
|
||||||
|
exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", targetId), tonumber(targetInfo.characterId)})
|
||||||
|
updateMoney(targetId)
|
||||||
|
playerFound = true
|
||||||
TriggerClientEvent("chat:addMessage", player, {
|
TriggerClientEvent("chat:addMessage", player, {
|
||||||
color = {255, 0, 0},
|
color = {0, 255, 0},
|
||||||
args = {"Error", "You don't have enough money."}
|
args = {"Success", "You gave " .. onlinePlayers[targetId].firstName .. " " .. onlinePlayers[targetId].lastName .. " $" .. amount .. "."}
|
||||||
})
|
})
|
||||||
else
|
TriggerClientEvent("receiveCash", targetId, amount, onlinePlayers[player].firstName .. " " .. onlinePlayers[player].lastName, player)
|
||||||
for k, v in pairs(onlinePlayers) do
|
break
|
||||||
local targetCoords = GetEntityCoords(GetPlayerPed(k))
|
end
|
||||||
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
|
|
||||||
TriggerClientEvent("chat:addMessage", player, {
|
|
||||||
color = {0, 255, 0},
|
|
||||||
args = {"Success", "You gave " .. onlinePlayers[k].firstName .. " " .. onlinePlayers[k].lastName .. " $" .. amount .. "."}
|
|
||||||
})
|
|
||||||
TriggerClientEvent("receiveCash", k, amount, onlinePlayers[player].firstName .. " " .. onlinePlayers[player].lastName, player)
|
|
||||||
break
|
|
||||||
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)
|
if not playerFound then
|
||||||
|
TriggerClientEvent("chat:addMessage", player, {
|
||||||
|
color = {255, 0, 0},
|
||||||
|
args = {"Error", "No players nearby."}
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
playerFound = false
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function withdrawMoney(amount, player)
|
function withdrawMoney(amount, player)
|
||||||
exports.oxmysql:query("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
local amount = tonumber(amount)
|
||||||
exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
local player = tonumber(player)
|
||||||
TriggerClientEvent("updateMoney", player)
|
if onlinePlayers[player].bank >= amount then
|
||||||
|
exports.oxmysql:query("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
|
exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
|
Citizen.Wait(500)
|
||||||
|
updateMoney(player)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function depositMoney(amount, player)
|
function depositMoney(amount, player)
|
||||||
exports.oxmysql:query("UPDATE characters SET cash = cash - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
local amount = tonumber(amount)
|
||||||
exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
local player = tonumber(player)
|
||||||
TriggerClientEvent("updateMoney", player)
|
if onlinePlayers[player].cash >= amount then
|
||||||
|
exports.oxmysql:query("UPDATE characters SET cash = cash - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
|
exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
|
Citizen.Wait(500)
|
||||||
|
updateMoney(player)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function deductMoney(amount, player, from)
|
function deductMoney(amount, player, from)
|
||||||
|
local amount = tonumber(amount)
|
||||||
|
local player = tonumber(player)
|
||||||
if from == "bank" then
|
if from == "bank" then
|
||||||
exports.oxmysql:query("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
exports.oxmysql:query("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
TriggerClientEvent("updateMoney", player)
|
Citizen.Wait(500)
|
||||||
|
updateMoney(player)
|
||||||
elseif from == "cash" then
|
elseif from == "cash" then
|
||||||
exports.oxmysql:query("UPDATE characters SET cash = cash - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
exports.oxmysql:query("UPDATE characters SET cash = cash - ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
TriggerClientEvent("updateMoney", player)
|
Citizen.Wait(500)
|
||||||
|
updateMoney(player)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function addMoney(amount, player, to)
|
function addMoney(amount, player, to)
|
||||||
|
local amount = tonumber(amount)
|
||||||
|
local player = tonumber(player)
|
||||||
if to == "bank" then
|
if to == "bank" then
|
||||||
exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
exports.oxmysql:query("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
TriggerClientEvent("updateMoney", player)
|
Citizen.Wait(500)
|
||||||
|
updateMoney(player)
|
||||||
elseif to == "cash" then
|
elseif to == "cash" then
|
||||||
exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
exports.oxmysql:query("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, GetPlayerIdentifierFromType("license", player), onlinePlayers[player].characterId})
|
||||||
TriggerClientEvent("updateMoney", player)
|
Citizen.Wait(500)
|
||||||
|
updateMoney(player)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- paying command.
|
||||||
|
RegisterCommand(config.payCommand, function(source, args, raw)
|
||||||
|
local player = source
|
||||||
|
local target = tonumber(args[1])
|
||||||
|
local amount = math.floor(tonumber(args[2]))
|
||||||
|
transferBank(amount, player, target)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Give money command.
|
||||||
|
RegisterCommand(config.giveCommand, function(source, args, raw)
|
||||||
|
local player = source
|
||||||
|
local amount = math.floor(tonumber(args[1]))
|
||||||
|
giveCashToClosestTarget(amount, player)
|
||||||
|
end)
|
||||||
@@ -4,42 +4,14 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
<script src="https://use.fontawesome.com/releases/v5.15.4/js/all.js" data-auto-a11y="true"></script>
|
<script src="https://use.fontawesome.com/releases/v5.15.4/js/all.js" data-auto-a11y="true"></script>
|
||||||
<script src="js/jquery-3.6.0.min.js" type="text/javascript"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||||
<script src="js/listener.js" type="text/javascript"></script>
|
<script src="script.js" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
|
||||||
// spawning script
|
|
||||||
function spawnMenu(bool) {
|
|
||||||
if (bool) {
|
|
||||||
$("#characterCreator").hide();
|
|
||||||
$("#characterEditor").hide();
|
|
||||||
$("#exitGameMenu").hide();
|
|
||||||
$("#deleteCharacterMenu").hide();
|
|
||||||
$("#spawnLocation").fadeIn("slow");
|
|
||||||
} else {
|
|
||||||
$("#spawnLocation").fadeOut("slow");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function tp(x, y, z, name) {
|
|
||||||
$.post(`https://${GetParentResourceName()}/tpToLocation`, JSON.stringify({
|
|
||||||
x: x,
|
|
||||||
y: y,
|
|
||||||
z: z,
|
|
||||||
name: name
|
|
||||||
}));
|
|
||||||
spawnMenu(false)
|
|
||||||
setTimeout(function(){
|
|
||||||
$("#spawnMenuContainer").empty();
|
|
||||||
}, 550);
|
|
||||||
return
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!--Main page design-->
|
<!--Main page design-->
|
||||||
<section id="overlay">
|
<section id="overlay">
|
||||||
<div id="logoContainer">
|
<div id="logoContainer">
|
||||||
<img src="Logo.png" id="logo">
|
<img src="https://i.imgur.com/02A5Cgl.png" id="logo">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 id="serverName"></h1>
|
<h1 id="serverName"></h1>
|
||||||
@@ -197,4 +169,4 @@
|
|||||||
<p id="bank" class="text"></p>
|
<p id="bank" class="text"></p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -4,68 +4,53 @@ $(function() {
|
|||||||
// Hide/show ui function
|
// Hide/show ui function
|
||||||
function display(bool) {
|
function display(bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
displayOn = true
|
displayOn = true;
|
||||||
$("body").show();
|
$("body").show();
|
||||||
Money(false)
|
Money(false)
|
||||||
} else {
|
} else {
|
||||||
displayOn = false
|
displayOn = false;
|
||||||
$("body").hide();
|
$("body").hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function characterCreatorMenu(bool) {
|
function characterCreatorMenu(bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
$("#characterCreator").fadeIn("slow");
|
$("#characterCreator").fadeIn("slow");
|
||||||
$("#characterEditor").hide();
|
$("#characterEditor, #exitGameMenu, #deleteCharacterMenu, #spawnLocation").hide();
|
||||||
$("#exitGameMenu").hide();
|
return;
|
||||||
$("#deleteCharacterMenu").hide();
|
|
||||||
$("#spawnLocation").hide();
|
|
||||||
} else {
|
|
||||||
$("#characterCreator").fadeOut("slow");
|
|
||||||
}
|
}
|
||||||
|
$("#characterCreator").fadeOut("slow");
|
||||||
}
|
}
|
||||||
function characterEditorMenu(bool) {
|
function characterEditorMenu(bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
$("#characterCreator").hide();
|
|
||||||
$("#characterEditor").fadeIn("slow");
|
$("#characterEditor").fadeIn("slow");
|
||||||
$("#exitGameMenu").hide();
|
$("#characterCreator, #exitGameMenu, #deleteCharacterMenu, #spawnLocation").hide();
|
||||||
$("#deleteCharacterMenu").hide();
|
return;
|
||||||
$("#spawnLocation").hide();
|
|
||||||
} else {
|
|
||||||
$("#characterEditor").fadeOut("slow");
|
|
||||||
}
|
}
|
||||||
|
$("#characterEditor").fadeOut("slow");
|
||||||
}
|
}
|
||||||
function exitGameMenu(bool) {
|
function exitGameMenu(bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
$("#characterCreator").hide();
|
|
||||||
$("#characterEditor").hide();
|
|
||||||
$("#exitGameMenu").fadeIn("slow");
|
$("#exitGameMenu").fadeIn("slow");
|
||||||
$("#deleteCharacterMenu").hide();
|
$("#characterCreator, #characterEditor, #deleteCharacterMenu, #spawnLocation").hide();
|
||||||
$("#spawnLocation").hide();
|
return;
|
||||||
} else {
|
|
||||||
$("#exitGameMenu").fadeOut("slow");
|
|
||||||
}
|
}
|
||||||
|
$("#exitGameMenu").fadeOut("slow");
|
||||||
}
|
}
|
||||||
function confirmDeleteMenu(bool) {
|
function confirmDeleteMenu(bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
$("#characterCreator").hide();
|
|
||||||
$("#characterEditor").hide();
|
|
||||||
$("#exitGameMenu").hide();
|
|
||||||
$("#deleteCharacterMenu").fadeIn("slow");
|
$("#deleteCharacterMenu").fadeIn("slow");
|
||||||
$("#spawnLocation").hide();
|
$("#characterCreator, #characterEditor, #exitGameMenu, #spawnLocation").hide();
|
||||||
} else {
|
return;
|
||||||
$("#deleteCharacterMenu").fadeOut("slow");
|
|
||||||
}
|
}
|
||||||
|
$("#deleteCharacterMenu").fadeOut("slow");
|
||||||
}
|
}
|
||||||
function spawnMenu(bool) {
|
function spawnMenu(bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
$("#characterCreator").hide();
|
|
||||||
$("#characterEditor").hide();
|
|
||||||
$("#exitGameMenu").hide();
|
|
||||||
$("#deleteCharacterMenu").hide();
|
|
||||||
$("#spawnLocation").fadeIn("slow");
|
$("#spawnLocation").fadeIn("slow");
|
||||||
} else {
|
$("#characterCreator, #characterEditor, #exitGameMenu, #deleteCharacterMenu").hide();
|
||||||
$("#spawnLocation").fadeOut("slow");
|
return;
|
||||||
}
|
}
|
||||||
|
$("#spawnLocation").fadeOut("slow");
|
||||||
}
|
}
|
||||||
function Money(bool) {
|
function Money(bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
@@ -80,13 +65,13 @@ $(function() {
|
|||||||
$("#overlay").show();
|
$("#overlay").show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
display(false)
|
display(false);
|
||||||
characterCreatorMenu(false)
|
characterCreatorMenu(false);
|
||||||
characterEditorMenu(false)
|
characterEditorMenu(false);
|
||||||
exitGameMenu(false)
|
exitGameMenu(false);
|
||||||
confirmDeleteMenu(false)
|
confirmDeleteMenu(false);
|
||||||
spawnMenu(false)
|
spawnMenu(false);
|
||||||
Money(false)
|
Money(false);
|
||||||
|
|
||||||
window.addEventListener('message', function(event) {
|
window.addEventListener('message', function(event) {
|
||||||
const item = event.data;
|
const item = event.data;
|
||||||
@@ -94,21 +79,36 @@ $(function() {
|
|||||||
if (item.status) {
|
if (item.status) {
|
||||||
$('#serverName').text(item.serverName);
|
$('#serverName').text(item.serverName);
|
||||||
$("body").css("background-image", "url(" + item.background + ")");
|
$("body").css("background-image", "url(" + item.background + ")");
|
||||||
display(true)
|
display(true);
|
||||||
} else {
|
} else {
|
||||||
display(false)
|
display(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#playerAmount').text(item.characterAmount);
|
$('#playerAmount').text(item.characterAmount);
|
||||||
|
|
||||||
if (item.type === "character") {
|
if (item.type === "character") {
|
||||||
characterCreatorMenu(false)
|
characterCreatorMenu(false);
|
||||||
createCharacter(item.firstName, item.lastName, item.dateOfBirth, item.gender, item.twtName, item.department, item.startingCash, item.startingBank, item.id)
|
createCharacter(item.firstName, item.lastName, item.dateOfBirth, item.gender, item.twtName, item.department, item.startingCash, item.startingBank, item.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.type === "setSpawns") {
|
if (item.type === "setSpawns") {
|
||||||
createSpawnButtons(item.x, item.y, item.z, item.name)
|
$("#spawnMenuContainer").empty();
|
||||||
|
setTimeout(function(){
|
||||||
|
$("#spawnMenuContainer").append(`<button class="spawnButtons" data-x="${item.x}" data-y="${item.y}" data-z="${item.z}">${item.name}</button>`);
|
||||||
|
$(".spawnButtons").click(function() {
|
||||||
|
$.post(`https://${GetParentResourceName()}/tpToLocation`, JSON.stringify({
|
||||||
|
x: $(this).data("x"),
|
||||||
|
y: $(this).data("y"),
|
||||||
|
z: $(this).data("z")
|
||||||
|
}));
|
||||||
|
spawnMenu(false);
|
||||||
|
setTimeout(function(){
|
||||||
|
$("#spawnMenuContainer").empty();
|
||||||
|
}, 550);
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
}, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.type === "givePerms") {
|
if (item.type === "givePerms") {
|
||||||
@@ -127,7 +127,7 @@ $(function() {
|
|||||||
$("#bank").text(item.bank);
|
$("#bank").text(item.bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.type === "onStart" && item.enableMoneySystem === true) {
|
if (item.type === "onStart" && item.enableMoneySystem) {
|
||||||
$("#characterInfoContainerLeft").append('<label class="fourthRowText" for="startingcash">Cash</label><br><input id="startingCash" class="fourthRowInput" type="number" pattern="[0-9]+" placeholder="$2500" name="startingcash" required>');
|
$("#characterInfoContainerLeft").append('<label class="fourthRowText" for="startingcash">Cash</label><br><input id="startingCash" class="fourthRowInput" type="number" pattern="[0-9]+" placeholder="$2500" name="startingcash" required>');
|
||||||
$("#characterInfoContainerRight").append('<label class="fourthRowText" for="startingbank">Bank</label><br><input id="startingBank" class="fourthRowInput" type="number" pattern="[0-9]+" placeholder="$8000" name="startingbank" style="width: 93%;" required>');
|
$("#characterInfoContainerRight").append('<label class="fourthRowText" for="startingbank">Bank</label><br><input id="startingBank" class="fourthRowInput" type="number" pattern="[0-9]+" placeholder="$8000" name="startingbank" style="width: 93%;" required>');
|
||||||
$("#startingBank").attr({
|
$("#startingBank").attr({
|
||||||
@@ -144,8 +144,8 @@ $(function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
function createCharacter(firstName, lastName, dateOfBirth, gender, twtName, department, startingCash, startingBank, id) {
|
function createCharacter(firstName, lastName, dateOfBirth, gender, twtName, department, startingCash, startingBank, id) {
|
||||||
$("#charactersSection").append('<button id="characterButton' + id + '" class="createdButton" style="text-transform: capitalize;">' + firstName + " " + lastName + " (" + department +')</button><button id="characterButtonEdit' + id + '" class="createdButtonEdit"><a class="fas fa-edit"></a> Edit</button><button id="characterButtonDelete' + id + '" class="createdButtonDelete"><a class="fas fa-trash-alt"></a> Delete</button>');
|
$("#charactersSection").append(`<button id="characterButton${id}" class="createdButton">${firstName} ${lastName} (${department})</button><button id="characterButtonEdit${id}" class="createdButtonEdit"><a class="fas fa-edit"></a> Edit</button><button id="characterButtonDelete${id}" class="createdButtonDelete"><a class="fas fa-trash-alt"></a> Delete</button>`);
|
||||||
$("#characterButton" + id).click(function() {
|
$(`#characterButton${id}`).click(function() {
|
||||||
spawnMenu(true)
|
spawnMenu(true)
|
||||||
$.post(`https://${GetParentResourceName()}/setMainCharacter`, JSON.stringify({
|
$.post(`https://${GetParentResourceName()}/setMainCharacter`, JSON.stringify({
|
||||||
firstName: firstName,
|
firstName: firstName,
|
||||||
@@ -158,25 +158,24 @@ $(function() {
|
|||||||
startingBank: startingBank,
|
startingBank: startingBank,
|
||||||
character: id
|
character: id
|
||||||
}));
|
}));
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
$("#characterButtonEdit" + id).click(function() {
|
$(`#characterButtonEdit${id}`).click(function() {
|
||||||
characterEditorMenu(true)
|
characterEditorMenu(true)
|
||||||
|
$("#newFirstName").val(firstName);
|
||||||
|
$("#newLastName").val(lastName);
|
||||||
|
$("#newDateOfBirth").val(dateOfBirth);
|
||||||
|
$("#newGender").val(gender);
|
||||||
|
$("#newTwtName").val(twtName);
|
||||||
|
$("#newDepartment").val(department);
|
||||||
characterEdited = id
|
characterEdited = id
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
$("#characterButtonDelete" + id).click(function() {
|
$(`#characterButtonDelete${id}`).click(function() {
|
||||||
confirmDeleteMenu(true)
|
confirmDeleteMenu(true)
|
||||||
characterDeleting = id
|
characterDeleting = id
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
}
|
|
||||||
|
|
||||||
function createSpawnButtons(x, y, z, name) {
|
|
||||||
$("#spawnMenuContainer").empty();
|
|
||||||
setTimeout(function(){
|
|
||||||
$("#spawnMenuContainer").append(`<button class="spawnButtons" id="${x}, ${y}, ${z}, ${name}" onclick='tp("${x}", "${y}", "${z}", "${name}")' > ${name} </button>`);
|
|
||||||
}, 10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#characterCreator").submit(function() {
|
$("#characterCreator").submit(function() {
|
||||||
@@ -192,8 +191,8 @@ $(function() {
|
|||||||
}));
|
}));
|
||||||
characterCreatorMenu(false)
|
characterCreatorMenu(false)
|
||||||
$("#firstName, #lastName, #dateOfBirth, #twtName, #startingCash, #startingBank").val("")
|
$("#firstName, #lastName, #dateOfBirth, #twtName, #startingCash, #startingBank").val("")
|
||||||
return false
|
return false;
|
||||||
})
|
});
|
||||||
|
|
||||||
$("#characterEditor").submit(function() {
|
$("#characterEditor").submit(function() {
|
||||||
characterEditorMenu(false)
|
characterEditorMenu(false)
|
||||||
@@ -207,8 +206,8 @@ $(function() {
|
|||||||
id: characterEdited
|
id: characterEdited
|
||||||
}));
|
}));
|
||||||
$("#characterButton" + characterEdited).text($("#newFirstName").val() + " " + $("#newLastName").val() + " (" + $("#newDepartment").val() + ")");
|
$("#characterButton" + characterEdited).text($("#newFirstName").val() + " " + $("#newLastName").val() + " (" + $("#newDepartment").val() + ")");
|
||||||
return false
|
return false;
|
||||||
})
|
});
|
||||||
|
|
||||||
$("#deleteCharacterConfirm").click(function() {
|
$("#deleteCharacterConfirm").click(function() {
|
||||||
confirmDeleteMenu(false)
|
confirmDeleteMenu(false)
|
||||||
@@ -224,53 +223,53 @@ $(function() {
|
|||||||
$.post(`https://${GetParentResourceName()}/delCharacter`, JSON.stringify({
|
$.post(`https://${GetParentResourceName()}/delCharacter`, JSON.stringify({
|
||||||
character: characterDeleting
|
character: characterDeleting
|
||||||
}));
|
}));
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
|
|
||||||
$("#newCharacterButton").click(function() {
|
$("#newCharacterButton").click(function() {
|
||||||
characterCreatorMenu(true)
|
characterCreatorMenu(true)
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
|
|
||||||
$("#deleteCharacterCancel").click(function() {
|
$("#deleteCharacterCancel").click(function() {
|
||||||
confirmDeleteMenu(false)
|
confirmDeleteMenu(false)
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
$("#cancelCharacterCreation").click(function() {
|
$("#cancelCharacterCreation").click(function() {
|
||||||
characterCreatorMenu(false)
|
characterCreatorMenu(false)
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
$("#cancelCharacterEditing").click(function() {
|
$("#cancelCharacterEditing").click(function() {
|
||||||
characterEditorMenu(false)
|
characterEditorMenu(false)
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
|
|
||||||
$("#tpCancel").click(function() {
|
$("#tpCancel").click(function() {
|
||||||
spawnMenu(false)
|
spawnMenu(false)
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
$("#spawnMenuContainer").empty();
|
$("#spawnMenuContainer").empty();
|
||||||
}, 550);
|
}, 550);
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
$("#tpDoNot").click(function() {
|
$("#tpDoNot").click(function() {
|
||||||
$.post(`https://${GetParentResourceName()}/tpDoNot`);
|
$.post(`https://${GetParentResourceName()}/tpDoNot`);
|
||||||
spawnMenu(false)
|
spawnMenu(false)
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
$("#spawnMenuContainer").empty();
|
$("#spawnMenuContainer").empty();
|
||||||
}, 550);
|
}, 550);
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
|
|
||||||
$("#quitGameButton").click(function() {
|
$("#quitGameButton").click(function() {
|
||||||
exitGameMenu(true)
|
exitGameMenu(true)
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
$("#exitGameCancel").click(function() {
|
$("#exitGameCancel").click(function() {
|
||||||
exitGameMenu(false)
|
exitGameMenu(false)
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
$("#exitGameConfirm").click(function() {
|
$("#exitGameConfirm").click(function() {
|
||||||
$.post(`https://${GetParentResourceName()}/exitGame`);
|
$.post(`https://${GetParentResourceName()}/exitGame`);
|
||||||
return
|
return;
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
@@ -104,6 +104,7 @@ body {
|
|||||||
border-radius: 0.5vh;
|
border-radius: 0.5vh;
|
||||||
transition: 0.3s;
|
transition: 0.3s;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
text-transform: capitalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
.createdButtonEdit {
|
.createdButtonEdit {
|
||||||
@@ -283,4 +284,4 @@ body {
|
|||||||
#bank {
|
#bank {
|
||||||
top: 9vh;
|
top: 9vh;
|
||||||
right: 1.5vw;
|
right: 1.5vw;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user