mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-16 21:46:03 +01:00
Add files via upload
This commit is contained in:
114
ND_Core/config.lua
Normal file
114
ND_Core/config.lua
Normal file
@@ -0,0 +1,114 @@
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
-- --
|
||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6 --
|
||||
-- --
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
|
||||
config = {
|
||||
-- Server name to display on the ui.
|
||||
serverName = "Andy's Development",
|
||||
characterLimit = 100,
|
||||
changeCharacterCommand = "changecharacter", -- this is the command to open the ui again and change your character.
|
||||
|
||||
-- set your backgrounds, if you have more than 1 then it will randomly change everytime you open the ui.
|
||||
backgrounds = {
|
||||
"https://i.imgur.com/E51ckFx.png", -- Credits: Fuzzman270#0270
|
||||
"https://i.imgur.com/SeZD7TP.png", -- Credits: Fuzzman270#0270
|
||||
"https://i.imgur.com/ZWKfYD9.png", -- Credits: 2XRondo#6374
|
||||
"https://i.imgur.com/7jM5nZT.png" -- Credits: 2XRondo#6374
|
||||
},
|
||||
|
||||
-- discord bot token for permissions
|
||||
DiscordToken = "0", -- token
|
||||
GuildId = "0", -- discord guild id
|
||||
|
||||
-- set up your departments here, then set up the permissions for them below.
|
||||
departments = {
|
||||
"CIV",
|
||||
"SAHP",
|
||||
"LSPD",
|
||||
"BCSO",
|
||||
"LSFD"
|
||||
},
|
||||
|
||||
-- role id for each role of the department in your discord. 0 Gives the role to everyone.
|
||||
roles = {
|
||||
["ADMIN"] = "0", -- You can remove this if you don't want it but this should only be here for permisisons not as a department and it won't display as a department. This can be used for /setaop and other permissions.
|
||||
["CIV"] = "0",
|
||||
["SAHP"] = "0",
|
||||
["LSPD"] = "0",
|
||||
["BCSO"] = "0",
|
||||
["LSFD"] = "0"
|
||||
},
|
||||
|
||||
-- set up the spawn buttons for each department.
|
||||
spawns = {
|
||||
["CIV"] = {
|
||||
{x = -102.78, y = 6336.28, z = 31.49, name = "Dream View Motel (Paleto Bay)"},
|
||||
{x = 343.53, y = 2636.94, z = 43.94, name = "Eastern Motel (Sandy Shores)"},
|
||||
{x = 196.96, y = -934.54, z = 29.69, name = "Legion Square"},
|
||||
{x = -1616.69, y = -1073.81, z = 12.15, name = "Del Perro Pier"},
|
||||
{x = -1039.65, y = -2741.02, z = 12.89, name = "LSIA"}
|
||||
},
|
||||
["SAHP"] = {
|
||||
{x = -447.2, y = 6009.4, z = 30.72, name = "Paleto Bay Sheriff"},
|
||||
{x = 1849.4, y = 3688.6, z = 33.27, name = "Sandy Shores Sheriff"},
|
||||
{x = 437.6, y = -986.6, z = 29.69, name = "Mission Row PD"}
|
||||
},
|
||||
["LSPD"] = {
|
||||
{x = -447.2, y = 6009.4, z = 30.72, name = "Paleto Bay Sheriff"},
|
||||
{x = 1849.4, y = 3688.6, z = 33.27, name = "Sandy Shores Sheriff"},
|
||||
{x = 437.6, y = -986.6, z = 29.69, name = "Mission Row PD"}
|
||||
},
|
||||
["BCSO"] = {
|
||||
{x = -447.2, y = 6009.4, z = 30.72, name = "Paleto Bay Sheriff"},
|
||||
{x = 1849.4, y = 3688.6, z = 33.27, name = "Sandy Shores Sheriff"},
|
||||
{x = 437.6, y = -986.6, z = 29.69, name = "Mission Row Police "}
|
||||
},
|
||||
["LSFD"] = {
|
||||
{x = -384.07, y = 6117.9, z = 30.48, name = "Fire Station No1 (Paleto Bay)"},
|
||||
{x = 1691.5, y = 3597.95, z = 34.56, name = "Fire Station No2 (Sandy Shores)"},
|
||||
{x = 1194.71, y = -1474.14, z = 33.86, name = "Fire Station No7 (Los Santos)"}
|
||||
},
|
||||
},
|
||||
|
||||
-- Money related
|
||||
payCommand = "pay", -- Command to transfer someone money from bank account.
|
||||
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.
|
||||
|
||||
-- Shot spotter related, WARNING: Shot spotter will add a 0.01 ms.
|
||||
shotSpotterEnabled = true, -- will the shot spotter be enabled when a civilian shoots their weapon.
|
||||
shotSpotterDelay = 5, -- delay (in seconds) when cops will receive a notification that there has been a shooting.
|
||||
shotSpotterTimer = 25, -- How long should the shot spotter stay on the map.
|
||||
shotSpotterCooldown = 10, -- Cooldown for the next time a player can trigger it again.
|
||||
shotSpotterUsePostal = false, -- if you're using the nearest postal script turn this to true.
|
||||
|
||||
enableAopCommand = true,
|
||||
aopCommand = "setaop",
|
||||
checkAopCommand = "aop",
|
||||
defaultAop = "Unknown",
|
||||
|
||||
-- Hide reticle or default gta money and ammo dispaly. WARNING: turning all to true will add a 0.01 ms.
|
||||
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
|
||||
enableRichPrecence = true,
|
||||
updateIntervall = 60, -- how many seconds delay until it updates status.
|
||||
appId = 912361433273102356,
|
||||
largeLogo = "anyydevlogo",
|
||||
smallLogo = "anyydevlogo",
|
||||
firstButtonName = "DISCORD",
|
||||
firstButtonLink = "https://discord.gg/Z9Mxu72zZ6",
|
||||
secondButtonName = "TEBEX",
|
||||
secondButtonLink = "https://andyyy.tebex.io/category/fivem-scripts",
|
||||
|
||||
-- set to true for debug mode, this will print database and some other stuff in the console.
|
||||
debugMode = false
|
||||
}
|
||||
43
ND_Core/fxmanifest.lua
Normal file
43
ND_Core/fxmanifest.lua
Normal file
@@ -0,0 +1,43 @@
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
-- DO NOT EDIT IF YOU DON'T KNOW WHAT YOU'RE DOING --
|
||||
-- --
|
||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6 --
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
|
||||
fx_version "cerulean"
|
||||
game "gta5"
|
||||
lua54 "yes"
|
||||
|
||||
author "Andyyy#7666"
|
||||
description "ND Framework Core"
|
||||
version "1.0"
|
||||
|
||||
files {
|
||||
"source/ui/index.html",
|
||||
"source/ui/js/jquery-3.6.0.min.js",
|
||||
"source/ui/js/listener.js",
|
||||
"source/ui/Logo.png",
|
||||
"source/ui/style.css",
|
||||
}
|
||||
|
||||
ui_page "source/ui/index.html"
|
||||
|
||||
shared_script "config.lua"
|
||||
|
||||
server_scripts {
|
||||
"source/server/discord.lua",
|
||||
"source/server/main.lua",
|
||||
"source/server/commands.lua"
|
||||
}
|
||||
client_scripts {
|
||||
"source/client/main.lua",
|
||||
"source/client/commands.lua"
|
||||
}
|
||||
|
||||
exports {
|
||||
"getCharacterInfo", -- getCharacterInfo(int), 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.
|
||||
"sendBank", -- sendBank(sendingCharacterId, receiveingPlayerId, amount, sendingPlayerId)
|
||||
"sendCash" -- sendCash(sendingCharacterId, amount, sendingPlayerId)
|
||||
}
|
||||
15
ND_Core/query.sql
Normal file
15
ND_Core/query.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
CREATE TABLE `characters` (
|
||||
`license` VARCHAR(200) NOT NULL DEFAULT '0' COLLATE 'utf8mb4_general_ci',
|
||||
`character_id` INT(50) NULL DEFAULT NULL,
|
||||
`first_name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`last_name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`dob` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`gender` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`twt` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`department` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`cash` INT(11) NULL DEFAULT NULL,
|
||||
`bank` INT(11) NULL DEFAULT NULL
|
||||
)
|
||||
COLLATE='utf8mb4_general_ci'
|
||||
ENGINE=InnoDB
|
||||
;
|
||||
109
ND_Core/source/client/commands.lua
Normal file
109
ND_Core/source/client/commands.lua
Normal file
@@ -0,0 +1,109 @@
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
-- DO NOT EDIT IF YOU DON'T KNOW WHAT YOU'RE DOING --
|
||||
-- --
|
||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6 --
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
|
||||
-- Aop command
|
||||
if config.enableAopCommand then
|
||||
TriggerEvent("chat:addSuggestion", "/" .. config.aopCommand, "Change the Area of Play.", {
|
||||
{ name="Area", help="Area of Play" }
|
||||
})
|
||||
TriggerEvent("chat:addSuggestion", "/" .. config.checkAopCommand, "Check the current Area of Play.", {})
|
||||
RegisterCommand(config.checkAopCommand, function(source, args, raw)
|
||||
TriggerServerEvent("getAop")
|
||||
end, false)
|
||||
RegisterCommand(config.aopCommand, function(source, args, raw)
|
||||
if admin == true then
|
||||
TriggerServerEvent("registerAop", string.gsub(raw, config.aopCommand .. " ", ""))
|
||||
else
|
||||
TriggerEvent("chat:addMessage", {
|
||||
args = {"~r~You don't have permission to set the aop."}
|
||||
})
|
||||
end
|
||||
end, false)
|
||||
RegisterNetEvent("setAop")
|
||||
AddEventHandler("setAop", function(aop)
|
||||
SendNUIMessage({
|
||||
type = "aop",
|
||||
aop = "Current AOP: " .. aop
|
||||
})
|
||||
TriggerEvent("chat:addMessage", {
|
||||
args = {"~b~Aop has been changed to: " .. aop}
|
||||
})
|
||||
end)
|
||||
RegisterNetEvent("returnAop")
|
||||
AddEventHandler("returnAop", function(aop)
|
||||
SendNUIMessage({
|
||||
type = "aop",
|
||||
aop = "Current AOP: " .. aop
|
||||
})
|
||||
TriggerEvent("chat:addMessage", {
|
||||
args = {"~b~The current AOP is: " .. aop}
|
||||
})
|
||||
end)
|
||||
end
|
||||
|
||||
-- Money commands
|
||||
RegisterCommand(config.payCommand, function(source, args, raw)
|
||||
sendBank(mainCharaterId, args[1], args[2], GetPlayerServerId(PlayerId()))
|
||||
end)
|
||||
RegisterCommand(config.giveCommand, function(source, args, raw)
|
||||
sendCash(mainCharaterId, args[1], GetPlayerServerId(PlayerId()))
|
||||
end)
|
||||
|
||||
-- Twotter command
|
||||
RegisterCommand("twt", function(source, args, rawCommand)
|
||||
TriggerServerEvent("twt", GetPlayerServerId(PlayerId()), mainTwtName, string.gsub(rawCommand, "twt", ""))
|
||||
end, false)
|
||||
RegisterNetEvent("twt")
|
||||
AddEventHandler("twt", function(id, twtName, twt)
|
||||
TriggerEvent("chat:addMessage", {
|
||||
template = "<img src='data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxz%0D%0AdmcKICB2aWV3Ym94PSIwIDAgMjAwMCAxNjI1LjM2IgogIHdpZHRoPSIyMDAwIgogIGhlaWdodD0i%0D%0AMTYyNS4zNiIKICB2ZXJzaW9uPSIxLjEiCiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv%0D%0Ac3ZnIj4KICA8cGF0aAogICAgZD0ibSAxOTk5Ljk5OTksMTkyLjQgYyAtNzMuNTgsMzIuNjQgLTE1%0D%0AMi42Nyw1NC42OSAtMjM1LjY2LDY0LjYxIDg0LjcsLTUwLjc4IDE0OS43NywtMTMxLjE5IDE4MC40%0D%0AMSwtMjI3LjAxIC03OS4yOSw0Ny4wMyAtMTY3LjEsODEuMTcgLTI2MC41Nyw5OS41NyBDIDE2MDku%0D%0AMzM5OSw0OS44MiAxNTAyLjY5OTksMCAxMzg0LjY3OTksMCBjIC0yMjYuNiwwIC00MTAuMzI4LDE4%0D%0AMy43MSAtNDEwLjMyOCw0MTAuMzEgMCwzMi4xNiAzLjYyOCw2My40OCAxMC42MjUsOTMuNTEgLTM0%0D%0AMS4wMTYsLTE3LjExIC02NDMuMzY4LC0xODAuNDcgLTg0NS43MzksLTQyOC43MiAtMzUuMzI0LDYw%0D%0ALjYgLTU1LjU1ODMsMTMxLjA5IC01NS41NTgzLDIwNi4yOSAwLDE0Mi4zNiA3Mi40MzczLDI2Ny45%0D%0ANSAxODIuNTQzMywzNDEuNTMgLTY3LjI2MiwtMi4xMyAtMTMwLjUzNSwtMjAuNTkgLTE4NS44NTE5%0D%0ALC01MS4zMiAtMC4wMzksMS43MSAtMC4wMzksMy40MiAtMC4wMzksNS4xNiAwLDE5OC44MDMgMTQx%0D%0ALjQ0MSwzNjQuNjM1IDMyOS4xNDUsNDAyLjM0MiAtMzQuNDI2LDkuMzc1IC03MC42NzYsMTQuMzk1%0D%0AIC0xMDguMDk4LDE0LjM5NSAtMjYuNDQxLDAgLTUyLjE0NSwtMi41NzggLTc3LjIwMywtNy4zNjQg%0D%0ANTIuMjE1LDE2My4wMDggMjAzLjc1LDI4MS42NDkgMzgzLjMwNCwyODQuOTQ2IC0xNDAuNDI5LDEx%0D%0AMC4wNjIgLTMxNy4zNTEsMTc1LjY2IC01MDkuNTk3MiwxNzUuNjYgLTMzLjEyMTEsMCAtNjUuNzg1%0D%0AMSwtMS45NDkgLTk3Ljg4MjgsLTUuNzM4IDE4MS41ODYsMTE2LjQxNzYgMzk3LjI3LDE4NC4zNTkg%0D%0ANjI4Ljk4OCwxODQuMzU5IDc1NC43MzIsMCAxMTY3LjQ2MiwtNjI1LjIzOCAxMTY3LjQ2MiwtMTE2%0D%0ANy40NyAwLC0xNy43OSAtMC40MSwtMzUuNDggLTEuMiwtNTMuMDggODAuMTc5OSwtNTcuODYgMTQ5%0D%0ALjczOTksLTEzMC4xMiAyMDQuNzQ5OSwtMjEyLjQxIgogICAgc3R5bGU9ImZpbGw6IzAwYWNlZCIv%0D%0APgo8L3N2Zz4K' height='16'> <b>{0}</b>: {1}",
|
||||
multiline = true,
|
||||
args = {"^4@" .. twtName .. " (#" .. id .. ")", twt}
|
||||
})
|
||||
end)
|
||||
|
||||
-- Me command
|
||||
RegisterCommand("me", function(source, args, rawCommand)
|
||||
TriggerServerEvent("me", GetPlayerServerId(PlayerId()), mainFirstName .. " " .. mainLastName, string.gsub(rawCommand, "twt", ""), GetEntityCoords(PlayerPedId()))
|
||||
end, false)
|
||||
RegisterNetEvent("me")
|
||||
AddEventHandler("me", function(id, name, msg, coords)
|
||||
if #(coords - GetEntityCoords(PlayerPedId())) < 19.999 then
|
||||
TriggerEvent("chat:addMessage", {
|
||||
color = {255, 0, 0},
|
||||
args = {"^*ME | ^0" .. name .. " (#" .. id .. ")", msg}
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
-- Change character command
|
||||
TriggerEvent("chat:addSuggestion", "/" .. config.changeCharacterCommand, "Switch your framework character.", {})
|
||||
RegisterCommand(config.changeCharacterCommand, function()
|
||||
SwitchOutPlayer(PlayerPedId(), 0, 1)
|
||||
Citizen.Wait(2000)
|
||||
FreezeEntityPosition(ped, true)
|
||||
SetEntityVisible(ped, false, 0)
|
||||
SetDisplay(true, "ui")
|
||||
end, false)
|
||||
|
||||
-- Help command
|
||||
RegisterCommand("help", function(source, args, rawCommand)
|
||||
TriggerEvent("chat:addMessage", {
|
||||
color = {252, 186, 3},
|
||||
args = {"^*Help | ", "/twt, /ooc, /darkweb, /me, /setAop, /aop, /pay, /give, /changecharacter"}
|
||||
})
|
||||
end, false)
|
||||
|
||||
-- chat suggestions
|
||||
TriggerEvent("chat:addSuggestion", "/" .. config.payCommand, "Transfer money to player", {{ name="id", help="Player server id" }, { name="amount", help="amount to pay" }})
|
||||
TriggerEvent("chat:addSuggestion", "/" .. config.giveCommand, "Give money to closeby player", {{ name="amount", help="amount to give" }})
|
||||
TriggerEvent("chat:addSuggestion", "/twt", "Send a Twotter in game. (Global Chat)", {{ name="Message", help="Twotter Message."}})
|
||||
TriggerEvent("chat:addSuggestion", "/ooc", "Out Of Character chat Message. (Global Chat)", {{ name="Message", help="Put your questions or help request."}})
|
||||
TriggerEvent("chat:addSuggestion", "/darkweb", "Send a anonymous message in game. (Global Chat)", {{ name="Message", help="Anonymous Message."}})
|
||||
TriggerEvent("chat:addSuggestion", "/me", "Send message in the third person. (Proximity Chat)", {{ name="Action", help="action."}})
|
||||
TriggerEvent("chat:addSuggestion", "/help", "", {})
|
||||
454
ND_Core/source/client/main.lua
Normal file
454
ND_Core/source/client/main.lua
Normal file
@@ -0,0 +1,454 @@
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
-- DO NOT EDIT IF YOU DON'T KNOW WHAT YOU'RE DOING --
|
||||
-- --
|
||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6 --
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
|
||||
started = true
|
||||
registered = false
|
||||
admin = false
|
||||
|
||||
RegisterNetEvent("permsChecked")
|
||||
AddEventHandler("permsChecked", function(role, rolePermission)
|
||||
if rolePermission == true then
|
||||
if role == "ADMIN" then
|
||||
admin = true
|
||||
else
|
||||
SendNUIMessage({
|
||||
type = "givePerms",
|
||||
deptRole = role
|
||||
})
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while started do
|
||||
Citizen.Wait(200)
|
||||
local ped = PlayerPedId()
|
||||
if IsPedOnFoot(ped) or IsPedInVehicle(ped, GetVehiclePedIsIn(ped, false), false) then
|
||||
print("^0This framework is created by ^5Andyyy#7666 ^0for support you can join the ^5discord: ^0https://discord.gg/Z9Mxu72zZ6")
|
||||
for i = 1, #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", config.departments[i])
|
||||
end
|
||||
Citizen.Wait(10)
|
||||
TriggerServerEvent("checkPerms", "ADMIN")
|
||||
Citizen.Wait(10)
|
||||
TriggerServerEvent("getCharacters")
|
||||
Citizen.Wait(100)
|
||||
TriggerServerEvent("getAop")
|
||||
Citizen.Wait(10)
|
||||
SwitchOutPlayer(ped, 0, 1)
|
||||
FreezeEntityPosition(ped, true)
|
||||
SetEntityVisible(ped, false, 0)
|
||||
started = false
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNUICallback("exitGame", function(data)
|
||||
TriggerServerEvent("exitGame", GetPlayerServerId(PlayerId()))
|
||||
end)
|
||||
|
||||
RegisterNetEvent("returnCharacters")
|
||||
AddEventHandler("returnCharacters", function(characters)
|
||||
for i = 1, #characters do
|
||||
index = characters[i]
|
||||
if config.debugMode then
|
||||
print(index.id .. " " .. index.firstName .. " " .. index.lastName .. " " .. index.dob .. " " .. index.gender .. index.twt .. " " .. index.department .. " " .. index.cash .. " " .. index.bank)
|
||||
end
|
||||
SendNUIMessage({
|
||||
type = "character",
|
||||
id = index.id,
|
||||
firstName = index.firstName,
|
||||
lastName = index.lastName,
|
||||
dateOfBirth = index.dob,
|
||||
gender = index.gender,
|
||||
twtName = index.twt,
|
||||
department = index.department,
|
||||
startingCash = index.cash,
|
||||
startingBank = index.bank
|
||||
})
|
||||
end
|
||||
characterAmount = #characters
|
||||
if config.debugMode then
|
||||
print("Characters: " .. characterAmount .. "/" .. config.characterLimit)
|
||||
end
|
||||
SetDisplay(true, "ui")
|
||||
end)
|
||||
|
||||
RegisterNUICallback("newCharacter", function(data)
|
||||
if characterAmount < config.characterLimit then
|
||||
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)
|
||||
|
||||
RegisterNetEvent("returnNewCharacter")
|
||||
AddEventHandler("returnNewCharacter", function(id, character)
|
||||
characterAmount = characterAmount +1
|
||||
SendNUIMessage({
|
||||
type = "character",
|
||||
id = character.id,
|
||||
firstName = character.firstName,
|
||||
lastName = character.lastName,
|
||||
dateOfBirth = character.dob,
|
||||
gender = character.gender,
|
||||
twtName = character.twt,
|
||||
department = character.department,
|
||||
startingCash = character.cash,
|
||||
startingBank = character.bank,
|
||||
characterAmount = characterAmount .. "/" .. config.characterLimit
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNUICallback("editCharacter", function(data)
|
||||
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,
|
||||
id = data.id
|
||||
}
|
||||
TriggerServerEvent("editCharacter", newCharacter)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("delCharacter", function(data)
|
||||
TriggerServerEvent("delCharacter", data.character)
|
||||
characterAmount = characterAmount -1
|
||||
SendNUIMessage({
|
||||
characterAmount = characterAmount .. "/" .. config.characterLimit
|
||||
})
|
||||
end)
|
||||
|
||||
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
|
||||
|
||||
if config.debugMode then
|
||||
for k, v in pairs(data) do
|
||||
print(v)
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, #config.departments do
|
||||
validDept = config.departments[i]
|
||||
if mainDepartment == validDept then
|
||||
for i = 1, #config.spawns[validDept] do
|
||||
SendNUIMessage({
|
||||
type = "setSpawns",
|
||||
x = config.spawns[validDept][i].x,
|
||||
y = config.spawns[validDept][i].y,
|
||||
z = config.spawns[validDept][i].z,
|
||||
name = config.spawns[validDept][i].name
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
registered = true
|
||||
end)
|
||||
|
||||
RegisterNetEvent("returnMoney")
|
||||
AddEventHandler("returnMoney", function(cash, bank)
|
||||
while not registered do
|
||||
Citizen.Wait(100)
|
||||
end
|
||||
cash = cash
|
||||
bank = bank
|
||||
SendNUIMessage({
|
||||
type = "Money",
|
||||
cash = "Cash: $" .. cash,
|
||||
bank = "Bank: $" .. bank
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNUICallback("tpToLocation", function(data)
|
||||
local ped = PlayerPedId()
|
||||
FreezeEntityPosition(ped, false)
|
||||
SetEntityCoords(ped, tonumber(data.x), tonumber(data.y), tonumber(data.z), false, false, false, false)
|
||||
FreezeEntityPosition(ped, true)
|
||||
SwitchInPlayer(ped)
|
||||
Citizen.Wait(500)
|
||||
SetDisplay(false, "ui")
|
||||
Citizen.Wait(500)
|
||||
FreezeEntityPosition(ped, false)
|
||||
SetEntityVisible(ped, true, 0)
|
||||
TriggerServerEvent("getMoney", mainCharaterId)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("tpDoNot", function(data)
|
||||
local ped = PlayerPedId()
|
||||
SwitchInPlayer(ped)
|
||||
Citizen.Wait(500)
|
||||
SetDisplay(false, "ui")
|
||||
Citizen.Wait(500)
|
||||
SetEntityVisible(ped, true, 0)
|
||||
FreezeEntityPosition(ped, false)
|
||||
TriggerServerEvent("getMoney", mainCharaterId)
|
||||
end)
|
||||
|
||||
function SetDisplay(bool, typeName)
|
||||
SetNuiFocus(bool, bool)
|
||||
SendNUIMessage({
|
||||
type = typeName,
|
||||
background = config.backgrounds[math.random(1, #config.backgrounds)],
|
||||
status = bool,
|
||||
serverName = config.serverName,
|
||||
characterAmount = characterAmount .. "/" .. config.characterLimit
|
||||
})
|
||||
end
|
||||
|
||||
if config.enableRichPrecence == true then
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(config.updateIntervall * 1000)
|
||||
SetDiscordAppId(config.appId)
|
||||
if registered == true then
|
||||
SetRichPresence(" Playing : " .. config.serverName .. " as " .. mainFirstName .. " " .. mainLastName)
|
||||
SetDiscordRichPresenceAsset(config.largeLogo)
|
||||
SetDiscordRichPresenceAssetText("Playing: " .. config.serverName)
|
||||
SetDiscordRichPresenceAssetSmall(config.smallLogo)
|
||||
SetDiscordRichPresenceAssetSmallText("Playing as: " .. mainFirstName .. " " .. mainLastName)
|
||||
SetDiscordRichPresenceAction(0, config.firstButtonName, config.firstButtonLink)
|
||||
SetDiscordRichPresenceAction(1, config.secondButtonName, config.secondButtonLink)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Shot spotter
|
||||
if config.shotSpotterEnabled then
|
||||
local activateShotSpotter = false
|
||||
local alreadyShot = false
|
||||
RegisterNetEvent("shotSpotterReport")
|
||||
AddEventHandler("shotSpotterReport", function(x, y, z, postal)
|
||||
if registered then
|
||||
if mainDepartment == "SAHP" or mainDepartment == "LSPD" or mainDepartment == "BCSO" then
|
||||
activateShotSpotter = true
|
||||
while activateShotSpotter do
|
||||
Citizen.Wait(0)
|
||||
blip = AddBlipForCoord(x, y, z)
|
||||
SetBlipSprite(blip, 161)
|
||||
SetBlipAsShortRange(blip, true)
|
||||
BeginTextCommandSetBlipName("STRING")
|
||||
AddTextComponentString("Shot Spotter")
|
||||
EndTextCommandSetBlipName(blip)
|
||||
if not postal then
|
||||
msg = "~r~Dispatch: ~w~Shotspotter detected in " .. GetStreetNameFromHashKey(GetStreetNameAtCoord(x, y, z)) .. "."
|
||||
else
|
||||
msg = "~r~Dispatch: ~w~Shotspotter detected in " .. GetStreetNameFromHashKey(GetStreetNameAtCoord(x, y, z)) .. ", postal: " .. postal .. "."
|
||||
end
|
||||
TriggerEvent('chat:addMessage', {
|
||||
args = {msg}
|
||||
})
|
||||
Citizen.Wait(config.shotSpotterTimer * 1000)
|
||||
activateShotSpotter = false
|
||||
break
|
||||
end
|
||||
RemoveBlip(blip)
|
||||
end
|
||||
end
|
||||
end)
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
local ped = PlayerPedId()
|
||||
if registered then
|
||||
if mainDepartment == "CIV" then
|
||||
if IsPedShooting(ped) then
|
||||
if not alreadyShot then
|
||||
Citizen.Wait(config.shotSpotterDelay * 1000)
|
||||
pedCoords = GetEntityCoords(ped)
|
||||
if config.shotSpotterUsePostal then
|
||||
postal = exports["nearest_postal123"]:getPostal()
|
||||
else
|
||||
postal = false
|
||||
end
|
||||
TriggerServerEvent("shotSpotterActive", pedCoords.x, pedCoords.y, pedCoords.z, postal)
|
||||
if config.debugMode then
|
||||
print(pedCoords.x, pedCoords.y, pedCoords.z)
|
||||
end
|
||||
end
|
||||
alreadyShot = true
|
||||
Citizen.Wait(config.shotSpotterCooldown * 1000)
|
||||
alreadyShot = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- hide gta default cash, ammo and reticle hud.
|
||||
if config.hideAmmoAndMoney == true or config.hideReticle == true then
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
if config.hideAmmoAndMoney == true then
|
||||
HideHudComponentThisFrame(3) -- CASH
|
||||
HideHudComponentThisFrame(4) -- MP_CASH
|
||||
HideHudComponentThisFrame(13) -- CASH_CHANGE
|
||||
HideHudComponentThisFrame(2) -- WEAPON_ICON
|
||||
end
|
||||
if config.hideReticle == true then
|
||||
--if IsPlayerFreeAiming(PlayerPedId()) then
|
||||
HideHudComponentThisFrame(14) -- RETICLE
|
||||
--end
|
||||
end
|
||||
if config.customPauseMenu then
|
||||
if registered then
|
||||
if IsPauseMenuActive() then
|
||||
BeginScaleformMovieMethodOnFrontendHeader("SET_HEADING_DETAILS")
|
||||
AddTextEntry("FE_THDR_GTAO", config.serverName)
|
||||
ScaleformMovieMethodAddParamPlayerNameString(mainFirstName .. " " .. mainLastName)
|
||||
--PushScaleformMovieFunctionParameterString("Cash: $" .. cash)
|
||||
--PushScaleformMovieFunctionParameterString("Bank: $" .. bank)
|
||||
EndScaleformMovieMethod()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
RegisterNetEvent("receiveBank")
|
||||
AddEventHandler("receiveBank", function(amount, playerSending, name)
|
||||
if config.debugMode then
|
||||
print("Recived $" .. amount .. " from " .. name .. " [".. playerSending .."]")
|
||||
end
|
||||
SetNotificationTextEntry("STRING")
|
||||
AddTextComponentString("Recived $" .. amount .. " from " .. name .. " [".. playerSending .."]")
|
||||
SetNotificationMessage("CHAR_BANK_FLEECA", "CHAR_BANK_FLEECA", true, 9,"FleecaBank", "")
|
||||
TriggerServerEvent("addBank", amount, mainCharaterId)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("receiveCash")
|
||||
AddEventHandler("receiveCash", function(amount, playerSending, name)
|
||||
if config.debugMode then
|
||||
print("Recived $" .. amount .. " from " .. name .. " [".. playerSending .."]")
|
||||
end
|
||||
SetNotificationTextEntry("STRING")
|
||||
AddTextComponentString(name .. " gave you $" .. amount .. ".")
|
||||
SetNotificationMessage("CHAR_DEFAULT", "CHAR_DEFAULT", true, 9, name .. " [".. playerSending .."]", "")
|
||||
TriggerServerEvent("addCash", amount, mainCharaterId)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("updateMoney")
|
||||
AddEventHandler("updateMoney", function()
|
||||
TriggerServerEvent("getMoney", mainCharaterId)
|
||||
end)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(config.salaryInterval * 60000)
|
||||
if registered then
|
||||
TriggerServerEvent("addBank", config.salaryAmount, mainCharaterId)
|
||||
SetNotificationTextEntry("STRING")
|
||||
AddTextComponentString("Daily Salary + $" .. config.salaryAmount)
|
||||
SetNotificationMessage("CHAR_BANK_FLEECA", "CHAR_BANK_FLEECA", true, 9,"FleecaBank", "")
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function sendBank(sendingCharacterId, receiveingPlayerId, amount, sendingPlayerId)
|
||||
if registered then
|
||||
TriggerServerEvent("bankPay", sendingCharacterId, receiveingPlayerId, amount, sendingPlayerId, mainFirstName .. " " .. mainLastName)
|
||||
end
|
||||
end
|
||||
|
||||
function sendCash(sendingCharacterId, amount, sendingPlayerId)
|
||||
if registered then
|
||||
target, distance = GetClosestPlayer()
|
||||
if (distance ~= -1 and distance < 3) then
|
||||
TriggerServerEvent("cashPay", sendingCharacterId, GetPlayerServerId(target), amount, sendingPlayerId, mainFirstName .. " " .. mainLastName)
|
||||
else
|
||||
notify("No players nearby")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function notify(message)
|
||||
SetNotificationTextEntry("STRING")
|
||||
AddTextComponentString(message)
|
||||
DrawNotification(0,1)
|
||||
end
|
||||
|
||||
function GetClosestPlayer()
|
||||
local players = GetPlayers()
|
||||
local closestDistance = -1
|
||||
local closestPlayer = -1
|
||||
local ply = GetPlayerPed(-1)
|
||||
local plyCoords = GetEntityCoords(ply, 0)
|
||||
|
||||
for index,value in ipairs(players) do
|
||||
local target = GetPlayerPed(value)
|
||||
if(target ~= ply) then
|
||||
local targetCoords = GetEntityCoords(GetPlayerPed(value), 0)
|
||||
local distance = GetDistanceBetweenCoords(targetCoords["x"], targetCoords["y"], targetCoords["z"], plyCoords["x"], plyCoords["y"], plyCoords["z"], true)
|
||||
if(closestDistance == -1 or closestDistance > distance) then
|
||||
closestPlayer = value
|
||||
closestDistance = distance
|
||||
end
|
||||
end
|
||||
end
|
||||
return closestPlayer, closestDistance
|
||||
end
|
||||
|
||||
function GetPlayers()
|
||||
local players = {}
|
||||
|
||||
for i = 0, 255 do
|
||||
if NetworkIsPlayerActive(i) then
|
||||
table.insert(players, i)
|
||||
end
|
||||
end
|
||||
|
||||
return players
|
||||
end
|
||||
|
||||
function getCharacterInfo(int)
|
||||
if registered then
|
||||
if int == 1 then
|
||||
return mainFirstName
|
||||
elseif int == 2 then
|
||||
return mainLastName
|
||||
elseif int == 3 then
|
||||
return mainDateOfBirth
|
||||
elseif int == 4 then
|
||||
return mainGender
|
||||
elseif int == 5 then
|
||||
return mainTwtName
|
||||
elseif int == 6 then
|
||||
return mainDepartment
|
||||
elseif int == 7 then
|
||||
return mainStartingCash
|
||||
elseif int == 8 then
|
||||
return mainStartingBank
|
||||
elseif int == 9 then
|
||||
return mainCharaterId
|
||||
end
|
||||
end
|
||||
end
|
||||
52
ND_Core/source/server/commands.lua
Normal file
52
ND_Core/source/server/commands.lua
Normal file
@@ -0,0 +1,52 @@
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
-- DO NOT EDIT IF YOU DON'T KNOW WHAT YOU'RE DOING --
|
||||
-- --
|
||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6 --
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
|
||||
-- Aop command
|
||||
if config.enableAopCommand then
|
||||
RegisterNetEvent("registerAop")
|
||||
AddEventHandler("registerAop", function(aopRegistered)
|
||||
aop = aopRegistered
|
||||
TriggerClientEvent("setAop", -1, aop)
|
||||
end)
|
||||
RegisterNetEvent("getAop")
|
||||
AddEventHandler("getAop", function()
|
||||
local player = source
|
||||
if aop == nil then
|
||||
aop = config.defaultAop
|
||||
end
|
||||
TriggerClientEvent("returnAop", player, aop)
|
||||
end)
|
||||
end
|
||||
|
||||
-- Twotter command
|
||||
RegisterNetEvent("twt")
|
||||
AddEventHandler("twt", function(id, twtName, twt)
|
||||
TriggerClientEvent("twt", -1, id, twtName, twt)
|
||||
end)
|
||||
|
||||
-- Me command
|
||||
RegisterNetEvent("me")
|
||||
AddEventHandler("me", function(id, name, msg, coords)
|
||||
TriggerClientEvent("me", -1, id, name, msg, coords)
|
||||
end)
|
||||
|
||||
-- OOC command
|
||||
RegisterCommand("ooc", function(source, args, rawCommand)
|
||||
TriggerClientEvent("chat:addMessage", -1, {
|
||||
color = {150, 150, 150},
|
||||
args = {"^*OOC | ^0" .. GetPlayerName(source) .. " (#" .. source .. ")", string.gsub(rawCommand, "ooc", "")}
|
||||
})
|
||||
end, false)
|
||||
|
||||
-- Darkweb command
|
||||
RegisterCommand("darkweb", function(source, args, rawCommand)
|
||||
TriggerClientEvent("chat:addMessage", -1, {
|
||||
color = {0, 0, 0},
|
||||
args = {"^*Dark web | ^0Anonymous (#" .. source .. ")", string.gsub(rawCommand, "darkweb", "")}
|
||||
})
|
||||
end, false)
|
||||
100
ND_Core/source/server/discord.lua
Normal file
100
ND_Core/source/server/discord.lua
Normal file
@@ -0,0 +1,100 @@
|
||||
-- original discord roles author: https://forum.cfx.re/t/discord-roles-for-permissions-im-creative-i-know/233805?u=andyyy7666
|
||||
local FormattedToken = "Bot "..config.DiscordToken
|
||||
|
||||
function DiscordRequest(method, endpoint, jsondata)
|
||||
local data = nil
|
||||
PerformHttpRequest("https://discordapp.com/api/"..endpoint, function(errorCode, resultData, resultHeaders)
|
||||
data = {data=resultData, code=errorCode, headers=resultHeaders}
|
||||
end, method, #jsondata > 0 and json.encode(jsondata) or "", {["Content-Type"] = "application/json", ["Authorization"] = FormattedToken})
|
||||
|
||||
while data == nil do
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
|
||||
return data
|
||||
end
|
||||
|
||||
--[[ we don't use this in this resource.
|
||||
function GetRoles(user)
|
||||
local discordId = nil
|
||||
for _, id in ipairs(GetPlayerIdentifiers(user)) do
|
||||
if string.match(id, "discord:") then
|
||||
discordId = string.gsub(id, "discord:", "")
|
||||
print("Found discord id: "..discordId)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if discordId then
|
||||
local endpoint = ("guilds/%s/members/%s"):format(config.GuildId, discordId)
|
||||
local member = DiscordRequest("GET", endpoint, {})
|
||||
if member.code == 200 then
|
||||
local data = json.decode(member.data)
|
||||
local roles = data.roles
|
||||
local found = true
|
||||
return roles
|
||||
else
|
||||
print("Error occurred, maybe they are not in discord?")
|
||||
return false
|
||||
end
|
||||
else
|
||||
print("missing identifier")
|
||||
return false
|
||||
end
|
||||
end
|
||||
]]
|
||||
|
||||
function IsRolePresent(user, role)
|
||||
local discordId = nil
|
||||
for _, id in ipairs(GetPlayerIdentifiers(user)) do
|
||||
if string.match(id, "discord:") then
|
||||
discordId = string.gsub(id, "discord:", "")
|
||||
print("Found discord id: "..discordId)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local theRole = nil
|
||||
if type(role) == "number" then
|
||||
theRole = tostring(role)
|
||||
else
|
||||
theRole = config.roles[role]
|
||||
end
|
||||
|
||||
if theRole == "0" then
|
||||
print("Role Given (0 in config)")
|
||||
return true
|
||||
elseif discordId then
|
||||
local endpoint = ("guilds/%s/members/%s"):format(config.GuildId, discordId)
|
||||
local member = DiscordRequest("GET", endpoint, {})
|
||||
if member.code == 200 then
|
||||
local data = json.decode(member.data)
|
||||
local roles = data.roles
|
||||
local found = true
|
||||
for i=1, #roles do
|
||||
if roles[i] == theRole then
|
||||
print("Found role")
|
||||
return true
|
||||
end
|
||||
end
|
||||
print("Not found!")
|
||||
return false
|
||||
else
|
||||
print("Error occurred, maybe they are not in discord?")
|
||||
return false
|
||||
end
|
||||
else
|
||||
print("missing identifier")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
local guild = DiscordRequest("GET", "guilds/"..config.GuildId, {})
|
||||
if guild.code == 200 then
|
||||
local data = json.decode(guild.data)
|
||||
print("Permission system guild set to: "..data.name.." ("..data.id..")")
|
||||
else
|
||||
print("An error occured, please check your config and ensure everything is correct. Error: "..(guild.data or guild.code))
|
||||
end
|
||||
end)
|
||||
154
ND_Core/source/server/main.lua
Normal file
154
ND_Core/source/server/main.lua
Normal file
@@ -0,0 +1,154 @@
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
-- DO NOT EDIT IF YOU DON'T KNOW WHAT YOU'RE DOING --
|
||||
-- --
|
||||
-- For support join my discord: https://discord.gg/Z9Mxu72zZ6 --
|
||||
------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------
|
||||
|
||||
RegisterNetEvent("checkPerms")
|
||||
AddEventHandler("checkPerms", function(role)
|
||||
local player = source
|
||||
local role = role
|
||||
local rolePermission = IsRolePresent(player, role)
|
||||
TriggerClientEvent("permsChecked", player, role, rolePermission)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("exitGame")
|
||||
AddEventHandler("exitGame", function(Player)
|
||||
DropPlayer(Player, "Disconnected using framework.")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("getCharacters")
|
||||
AddEventHandler("getCharacters", function()
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("SELECT * FROM characters WHERE license = ?", {license}, function(result)
|
||||
if result then
|
||||
characters = {}
|
||||
for i = 1, #result do
|
||||
temp = result[i]
|
||||
table.insert(characters, {id = temp.character_id, firstName = temp.first_name, lastName = temp.last_name, dob = temp.dob, gender = temp.gender, twt = temp.twt, department = temp.department, cash = temp.cash, bank = temp.bank})
|
||||
end
|
||||
TriggerClientEvent("returnCharacters", player, characters)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("newCharacter")
|
||||
AddEventHandler("newCharacter", function(newCharacter)
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("SELECT MAX(character_id) AS nextID FROM characters WHERE license LIKE ?", {license}, function(result)
|
||||
if result then
|
||||
character_id = result[1].nextID
|
||||
if character_id == nil then
|
||||
character_id = 1
|
||||
else
|
||||
character_id = character_id + 1
|
||||
end
|
||||
exports.oxmysql:execute("INSERT INTO characters (license, character_id, first_name, last_name, dob, gender, twt, department, cash, bank) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", {license, character_id, newCharacter.firstName, newCharacter.lastName, newCharacter.dateOfBirth, newCharacter.gender, newCharacter.twtName, newCharacter.department, newCharacter.startingCash, newCharacter.startingBank}, function(id)
|
||||
if id then
|
||||
TriggerClientEvent("returnNewCharacter", player, id, newCharacter)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("delCharacter")
|
||||
AddEventHandler("delCharacter", function(character_id)
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("DELETE FROM characters WHERE license LIKE ? AND character_id LIKE ?", {license, character_id}, function(id)
|
||||
if id then
|
||||
print(id)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("editCharacter")
|
||||
AddEventHandler("editCharacter", function(newCharacter)
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("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, license, newCharacter.id}, function(id)
|
||||
if id then
|
||||
print(id)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
if config.shotSpotterEnabled then
|
||||
RegisterNetEvent("shotSpotterActive")
|
||||
AddEventHandler("shotSpotterActive", function(x, y, z, postal)
|
||||
TriggerClientEvent("shotSpotterReport", -1, x, y, z, postal)
|
||||
end)
|
||||
end
|
||||
|
||||
RegisterNetEvent("bankPay")
|
||||
AddEventHandler("bankPay", function(characterid, playerid, amount, playerSending, name)
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("UPDATE characters SET bank = bank - ? WHERE license = ? AND character_id = ?", {amount, license, characterid}, function(bank)
|
||||
if bank then
|
||||
print(bank)
|
||||
end
|
||||
end)
|
||||
TriggerClientEvent("receiveBank", playerid, amount, playerSending, name)
|
||||
TriggerClientEvent("updateMoney", player)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("addBank")
|
||||
AddEventHandler("addBank", function(amount, characterid)
|
||||
local player = source
|
||||
license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("UPDATE characters SET bank = bank + ? WHERE license = ? AND character_id = ?", {amount, license, characterid}, function(bank)
|
||||
if bank then
|
||||
print(bank)
|
||||
end
|
||||
end)
|
||||
TriggerClientEvent("updateMoney", player)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("cashPay")
|
||||
AddEventHandler("cashPay", function(characterid, playerid, amount, playerSending, name)
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("UPDATE characters SET cash = cash - ? WHERE license = ? AND character_id = ?", {amount, license, characterid}, function(cash)
|
||||
if cash then
|
||||
print(cash)
|
||||
end
|
||||
end)
|
||||
TriggerClientEvent("receiveCash", playerid, amount, playerSending, name)
|
||||
TriggerClientEvent("updateMoney", player)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("addCash")
|
||||
AddEventHandler("addCash", function(amount, characterid)
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("UPDATE characters SET cash = cash + ? WHERE license = ? AND character_id = ?", {amount, license, characterid}, function(cash)
|
||||
if cash then
|
||||
print(cash)
|
||||
end
|
||||
end)
|
||||
TriggerClientEvent("updateMoney", player)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("getMoney")
|
||||
AddEventHandler("getMoney", function(characterid)
|
||||
local player = source
|
||||
local license = GetPlayerIdentifier(player, 1)
|
||||
exports.oxmysql:execute("SELECT cash, bank FROM characters WHERE license = ? AND character_id = ?", {license, characterid}, function(result)
|
||||
if result then
|
||||
for i = 1, #result do
|
||||
cash = result[i].cash
|
||||
bank = result[i].bank
|
||||
print(cash)
|
||||
print(bank)
|
||||
end
|
||||
end
|
||||
end)
|
||||
Citizen.Wait(300)
|
||||
TriggerClientEvent("returnMoney", player, cash, bank)
|
||||
end)
|
||||
BIN
ND_Core/source/ui/Logo.png
Normal file
BIN
ND_Core/source/ui/Logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
180
ND_Core/source/ui/index.html
Normal file
180
ND_Core/source/ui/index.html
Normal file
@@ -0,0 +1,180 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<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="js/jquery-3.6.0.min.js" type="text/javascript"></script>
|
||||
<script src="js/listener.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<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://ND_Core/tpToLocation", JSON.stringify({
|
||||
x: x,
|
||||
y: y,
|
||||
z: z,
|
||||
name: name
|
||||
}));
|
||||
spawnMenu(false)
|
||||
setTimeout(function(){
|
||||
$("#spawnMenuContainer").empty();
|
||||
}, 550);
|
||||
return
|
||||
}
|
||||
</script>
|
||||
|
||||
<!--Main page design-->
|
||||
<section id="overlay">
|
||||
<div id="logoContainer">
|
||||
<img src="Logo.png" id="logo">
|
||||
</div>
|
||||
<div>
|
||||
<h1 id="serverName"></h1>
|
||||
<p id="aop" class="mainPage" style="margin-bottom: -1vh;"></p>
|
||||
<p class="mainPage">Select or create a character:</p>
|
||||
</div>
|
||||
<div>
|
||||
<button class="homeScreenButton" id="newCharacterButton"><a class="fas fa-plus-circle" style="color:white;"></a> Create New Character <a id="playerAmount"></a></button>
|
||||
<br>
|
||||
<button class="homeScreenButton" id="quitGameButton"><a class="fas fa-sign-out-alt" style="color:white;"></a> Quit Game</button>
|
||||
</div>
|
||||
<div id="charactersSection">
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--Create character menu design-->
|
||||
<form id="characterCreator" class="characterMenu">
|
||||
<div>
|
||||
<p id="characterCreatorTopText"><a class="fas fa-user-edit" style="color:white;"></a> Character Creation</p>
|
||||
<hr id="characterCreatorTopTextLine">
|
||||
</div>
|
||||
<div id="characterInfoContainer">
|
||||
<div>
|
||||
<label class="firstRowText" style="margin-right: 15.7vw;" for="firstname">First Name</label>
|
||||
<label class="firstRowText" style="margin-right: 15.7vw;" for="lastname">Last Name</label>
|
||||
<input id="firstName" class="firstRowInput" style="margin-right: 4.1vw;" type="text" placeholder="First Name" name="firstname" required>
|
||||
<input id="lastName" class="firstRowInput" style="margin-right: 4.1vw;" type="text" placeholder="Last Name" name="lastname" required>
|
||||
</div>
|
||||
<div>
|
||||
<label class="secondRowText" style="margin-right: 15vw;" for="dob">Date of Birth</label>
|
||||
<label class="secondRowText" style="margin-right: 15vw;" for="gender">Gender</label>
|
||||
<input id="dateOfBirth" class="secondRowInput" style="margin-right: 4.35vw;" type="date" name="dob" required>
|
||||
<select id="gender" class="secondRowInput" style="margin-right: 4.35vw;" name="gender" required>
|
||||
<option class="secondRowInput">Male</option>
|
||||
<option class="secondRowInput">Female</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label class="thirdRowText" style="margin-right: 14.38vw;" for="twotter">Twotter Name</label>
|
||||
<label class="thirdRowText" style="margin-right: 14.38vw;" for="department">Department</label>
|
||||
<input id="twtName" class="thirdRowInput" style="margin-right: 4.2vw;" type="text" placeholder="Twotter Name" name="twotter" required>
|
||||
<select id="department" class="thirdRowInput departments" style="margin-right: 4.2vw;" name="department" required></select>
|
||||
</div>
|
||||
<div>
|
||||
<label class="fourthRowText" style="margin-right: 18.2vw;" for="startingcash">Cash</label>
|
||||
<label class="fourthRowText" style="margin-right: 18.2vw;" for="startingbank">Bank</label>
|
||||
<input id="startingCash" class="fourthRowInput" style="margin-right: 4.2vw;" type="number" pattern="[0-9]+" placeholder="$2500" name="startingcash" required>
|
||||
<input id="startingBank" class="fourthRowInput" style="margin-right: 4.2vw;" type="number" pattern="[0-9]+" placeholder="$8000" name="startingbank" required>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<hr id="characterCreatorTopTextLine" style="margin-top: 5vh;">
|
||||
<button id="submitCharacterCreation" class="characterSubmitButton" type="submit" form="characterCreator"><a class="fas fa-plus-circle" style="color:white;"></a> Create Character</button>
|
||||
<button id="cancelCharacterCreation" class="characterResetButton" type="reset"><a class="fas fa-times-circle" style="color:white;"></a> Cancel</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!--Edit character menu design-->
|
||||
<form id="characterEditor" class="characterMenu">
|
||||
<div>
|
||||
<p id="characterCreatorTopText"><a class="fas fa-user-edit" style="color:white;"></a> Character Editor</p>
|
||||
<hr id="characterCreatorTopTextLine">
|
||||
</div>
|
||||
<div id="characterInfoContainer">
|
||||
<div>
|
||||
<label class="firstRowText" style="margin-right: 15.7vw;" for="firstname">First Name</label>
|
||||
<label class="firstRowText" style="margin-right: 15.7vw;" for="lastname">Last Name</label>
|
||||
<input id="newFirstName" class="firstRowInput" style="margin-right: 4.1vw;" type="text" placeholder="First Name" name="firstname" required>
|
||||
<input id="newLastName" class="firstRowInput" style="margin-right: 4.1vw;" type="text" placeholder="Last Name" name="lastname" required>
|
||||
</div>
|
||||
<div>
|
||||
<label class="secondRowText" style="margin-right: 15vw;" for="dob">Date of Birth</label>
|
||||
<label class="secondRowText" style="margin-right: 15vw;" for="gender">Gender</label>
|
||||
<input id="newDateOfBirth" class="secondRowInput" style="margin-right: 4.35vw;" type="date" name="dob" required>
|
||||
<select id="newGender" class="secondRowInput" style="margin-right: 4.35vw;" name="gender" required>
|
||||
<option class="secondRowInput">Male</option>
|
||||
<option class="secondRowInput">Female</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label class="thirdRowText" style="margin-right: 14.38vw;" for="twotter">Twotter Name</label>
|
||||
<label class="thirdRowText" style="margin-right: 14.38vw;" for="department">Department</label>
|
||||
<input id="newTwtName" class="thirdRowInput" style="margin-right: 4.2vw;" type="text" placeholder="Twotter Name" name="twotter" required>
|
||||
<select id="newDepartment" class="thirdRowInput departments" style="margin-right: 4.2vw;" name="department" required></select>
|
||||
</div>
|
||||
<!--
|
||||
<div>
|
||||
<label class="fourthRowText" style="margin-right: 18.2vw;" for="startingcash">Cash</label>
|
||||
<label class="fourthRowText" style="margin-right: 18.2vw;" for="startingbank">Bank</label>
|
||||
<input id="newStartingCash" class="fourthRowInput" style="margin-right: 4.2vw;" type="number" pattern="[0-9]+" placeholder="$2500" name="startingcash" required>
|
||||
<input id="newStartingBank" class="fourthRowInput" style="margin-right: 4.2vw;" type="number" pattern="[0-9]+" placeholder="$8000" name="startingbank" required>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
<div>
|
||||
<hr id="characterCreatorTopTextLine" style="margin-top: 5vh;">
|
||||
<button id="submitCharacterEditing" class="characterSubmitButton" type="submit" form="characterEditor"><a class="fas fa-plus-circle" style="color:white;"></a> Save Changes</button>
|
||||
<button id="cancelCharacterEditing" class="characterResetButton" type="reset"><a class="fas fa-times-circle" style="color:white;"></a> Cancel</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!--Character Spawn options-->
|
||||
<section id="spawnLocation" class="spawnMenu">
|
||||
<div>
|
||||
<p id="characterCreatorTopText"><a class="fas fa-map-marker-alt" style="color:white;"></a> Spawn Location</p>
|
||||
<hr id="characterCreatorTopTextLine">
|
||||
</div>
|
||||
<div id="spawnMenuContainer">
|
||||
</div>
|
||||
<div>
|
||||
<hr id="characterCreatorTopTextLine" style="margin-top: 3vh;">
|
||||
<button id="tpDoNot" class="characterSubmitButton" style="margin-left: 26vw; margin-bottom: 2vh;"><a class="fas fa-compass" style="color:white;"></a> Do not teleport</button>
|
||||
<button id="tpCancel" class="characterResetButton"><a class="fas fa-times-circle" style="color:white;"></a> Cancel</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--Confirm exit game menu design-->
|
||||
<section id="exitGameMenu" class="confirmationScreen">
|
||||
<p id="characterCreatorTopText">Are you sure you'd like to quit the game?</p>
|
||||
<hr id="characterCreatorTopTextLine">
|
||||
<button id="exitGameConfirm" class="confirmationScreenConfirm"><a class="fas fa-check-circle" style="color:white;"></a> Confirm</button>
|
||||
<button id="exitGameCancel" class="confirmationScreenCancel"><a class="fas fa-times-circle" style="color:white;"></a> Cancel</button>
|
||||
</section>
|
||||
|
||||
<!--Confirm delete character button-->
|
||||
<section id="deleteCharacterMenu" class="confirmationScreen">
|
||||
<p id="characterCreatorTopText">Are you sure you'd like to delete this character?</p>
|
||||
<hr id="characterCreatorTopTextLine">
|
||||
<button id="deleteCharacterConfirm" class="confirmationScreenConfirm"><a class="fas fa-check-circle" style="color:white;"></a> Confirm</button>
|
||||
<button id="deleteCharacterCancel" class="confirmationScreenCancel"><a class="fas fa-times-circle" style="color:white;"></a> Cancel</button>
|
||||
</section>
|
||||
|
||||
<!--Money hud-->
|
||||
<div id="money">
|
||||
<p id="cash" class="text"></p>
|
||||
<p id="bank" class="text"></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
2
ND_Core/source/ui/js/jquery-3.6.0.min.js
vendored
Normal file
2
ND_Core/source/ui/js/jquery-3.6.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
274
ND_Core/source/ui/js/listener.js
Normal file
274
ND_Core/source/ui/js/listener.js
Normal file
@@ -0,0 +1,274 @@
|
||||
$(function() {
|
||||
// Hide/show ui function
|
||||
function display(bool) {
|
||||
if (bool) {
|
||||
$("body").show();
|
||||
Money(false)
|
||||
} else {
|
||||
$("body").hide();
|
||||
}
|
||||
}
|
||||
function characterCreatorMenu(bool) {
|
||||
if (bool) {
|
||||
$("#characterCreator").fadeIn("slow");
|
||||
$("#characterEditor").hide();
|
||||
$("#exitGameMenu").hide();
|
||||
$("#deleteCharacterMenu").hide();
|
||||
$("#spawnLocation").hide();
|
||||
} else {
|
||||
$("#characterCreator").fadeOut("slow");
|
||||
}
|
||||
}
|
||||
function characterEditorMenu(bool) {
|
||||
if (bool) {
|
||||
$("#characterCreator").hide();
|
||||
$("#characterEditor").fadeIn("slow");
|
||||
$("#exitGameMenu").hide();
|
||||
$("#deleteCharacterMenu").hide();
|
||||
$("#spawnLocation").hide();
|
||||
} else {
|
||||
$("#characterEditor").fadeOut("slow");
|
||||
}
|
||||
}
|
||||
function exitGameMenu(bool) {
|
||||
if (bool) {
|
||||
$("#characterCreator").hide();
|
||||
$("#characterEditor").hide();
|
||||
$("#exitGameMenu").fadeIn("slow");
|
||||
$("#deleteCharacterMenu").hide();
|
||||
$("#spawnLocation").hide();
|
||||
} else {
|
||||
$("#exitGameMenu").fadeOut("slow");
|
||||
}
|
||||
}
|
||||
function confirmDeleteMenu(bool) {
|
||||
if (bool) {
|
||||
$("#characterCreator").hide();
|
||||
$("#characterEditor").hide();
|
||||
$("#exitGameMenu").hide();
|
||||
$("#deleteCharacterMenu").fadeIn("slow");
|
||||
$("#spawnLocation").hide();
|
||||
} else {
|
||||
$("#deleteCharacterMenu").fadeOut("slow");
|
||||
}
|
||||
}
|
||||
function spawnMenu(bool) {
|
||||
if (bool) {
|
||||
$("#characterCreator").hide();
|
||||
$("#characterEditor").hide();
|
||||
$("#exitGameMenu").hide();
|
||||
$("#deleteCharacterMenu").hide();
|
||||
$("#spawnLocation").fadeIn("slow");
|
||||
} else {
|
||||
$("#spawnLocation").fadeOut("slow");
|
||||
}
|
||||
}
|
||||
function Money(bool) {
|
||||
if (bool) {
|
||||
$("#money").show();
|
||||
$("body").css("background-image", "none");
|
||||
$("body").show();
|
||||
$("#overlay").hide();
|
||||
} else {
|
||||
$("#money").hide();
|
||||
$("#overlay").show();
|
||||
}
|
||||
}
|
||||
display(false)
|
||||
characterCreatorMenu(false)
|
||||
characterEditorMenu(false)
|
||||
exitGameMenu(false)
|
||||
confirmDeleteMenu(false)
|
||||
spawnMenu(false)
|
||||
Money(false)
|
||||
|
||||
window.addEventListener('message', function(event) {
|
||||
const item = event.data;
|
||||
if (item.type === "ui") {
|
||||
if (item.status == true) {
|
||||
$('#serverName').text(item.serverName);
|
||||
$("body").css("background-image", "url(" + item.background + ")");
|
||||
display(true)
|
||||
} else {
|
||||
display(false)
|
||||
}
|
||||
}
|
||||
|
||||
$('#playerAmount').text(item.characterAmount);
|
||||
|
||||
if (item.type === "character") {
|
||||
characterCreatorMenu(false)
|
||||
createCharacter(item.firstName, item.lastName, item.dateOfBirth, item.gender, item.twtName, item.department, item.startingCash, item.startingBank, item.id)
|
||||
}
|
||||
|
||||
if (item.type === "setSpawns") {
|
||||
createSpawnButtons(item.x, item.y, item.z, item.name)
|
||||
}
|
||||
|
||||
if (item.type === "givePerms") {
|
||||
$('.departments').append($('<option>', {
|
||||
text: item.deptRole
|
||||
}));
|
||||
}
|
||||
|
||||
if (item.type === "aop") {
|
||||
$("#aop").text(item.aop);
|
||||
}
|
||||
|
||||
if (item.type === "Money") {
|
||||
Money(true)
|
||||
$("#cash").text(item.cash);
|
||||
$("#bank").text(item.bank);
|
||||
}
|
||||
})
|
||||
|
||||
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>');
|
||||
$("#characterButton" + id).click(function() {
|
||||
spawnMenu(true)
|
||||
$.post("https://ND_Core/setMainCharacter", JSON.stringify({
|
||||
firstName: firstName,
|
||||
lastName: lastName,
|
||||
dateOfBirth: dateOfBirth,
|
||||
gender: gender,
|
||||
twtName: twtName,
|
||||
department: department,
|
||||
startingCash: startingCash,
|
||||
startingBank: startingBank,
|
||||
character: id
|
||||
}));
|
||||
return
|
||||
})
|
||||
$("#characterButtonEdit" + id).click(function() {
|
||||
characterEditorMenu(true)
|
||||
characterEdited = id
|
||||
return
|
||||
})
|
||||
$("#characterButtonDelete" + id).click(function() {
|
||||
confirmDeleteMenu(true)
|
||||
characterDeleting = id
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
/*
|
||||
function tp(x, y, z, name) {
|
||||
$.post("https://ND_Core/tpToLocation", JSON.stringify({
|
||||
x: x,
|
||||
y: y,
|
||||
z: z,
|
||||
name: name
|
||||
}));
|
||||
spawnMenu(false)
|
||||
setTimeout(function(){
|
||||
$("#spawnMenuContainer").empty();
|
||||
}, 550);
|
||||
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() {
|
||||
$.post("https://ND_Core/newCharacter", JSON.stringify({
|
||||
firstName: $("#firstName").val(),
|
||||
lastName: $("#lastName").val(),
|
||||
dateOfBirth: $("#dateOfBirth").val(),
|
||||
gender: $("#gender").val(),
|
||||
twtName: $("#twtName").val(),
|
||||
department: $("#department").val(),
|
||||
startingCash: $("#startingCash").val(),
|
||||
startingBank: $("#startingBank").val()
|
||||
}));
|
||||
characterCreatorMenu(false)
|
||||
return false
|
||||
})
|
||||
|
||||
$("#characterEditor").submit(function() {
|
||||
characterEditorMenu(false)
|
||||
$.post("https://ND_Core/editCharacter", JSON.stringify({
|
||||
firstName: $("#newFirstName").val(),
|
||||
lastName: $("#newLastName").val(),
|
||||
dateOfBirth: $("#newDateOfBirth").val(),
|
||||
gender: $("#newGender").val(),
|
||||
twtName: $("#newTwtName").val(),
|
||||
department: $("#newDepartment").val(),
|
||||
//startingCash: $("#newStartingCash").val(),
|
||||
//startingBank: $("#newStartingBank").val(),
|
||||
id: characterEdited
|
||||
}));
|
||||
$("#characterButton" + characterEdited).text($("#newFirstName").val() + " " + $("#newLastName").val() + " (" + $("#newDepartment").val() + ")");
|
||||
return false
|
||||
})
|
||||
|
||||
$("#deleteCharacterConfirm").click(function() {
|
||||
confirmDeleteMenu(false)
|
||||
$("#characterButton" + characterDeleting).fadeOut("slow",function(){
|
||||
$("#characterButton" + characterDeleting).remove();
|
||||
})
|
||||
$("#characterButtonEdit" + characterDeleting).fadeOut("slow",function(){
|
||||
$("#characterButtonEdit" + characterDeleting).remove();
|
||||
})
|
||||
$("#characterButtonDelete" + characterDeleting).fadeOut("slow",function(){
|
||||
$("#characterButtonDelete" + characterDeleting).remove();
|
||||
})
|
||||
$.post("https://ND_Core/delCharacter", JSON.stringify({
|
||||
character: characterDeleting
|
||||
}));
|
||||
return
|
||||
})
|
||||
|
||||
$("#newCharacterButton").click(function() {
|
||||
characterCreatorMenu(true)
|
||||
return
|
||||
})
|
||||
|
||||
$("#deleteCharacterCancel").click(function() {
|
||||
confirmDeleteMenu(false)
|
||||
return
|
||||
})
|
||||
$("#cancelCharacterCreation").click(function() {
|
||||
characterCreatorMenu(false)
|
||||
return
|
||||
})
|
||||
$("#cancelCharacterEditing").click(function() {
|
||||
characterEditorMenu(false)
|
||||
return
|
||||
})
|
||||
|
||||
$("#tpCancel").click(function() {
|
||||
spawnMenu(false)
|
||||
setTimeout(function(){
|
||||
$("#spawnMenuContainer").empty();
|
||||
}, 550);
|
||||
return
|
||||
})
|
||||
$("#tpDoNot").click(function() {
|
||||
$.post("https://ND_Core/tpDoNot", JSON.stringify({
|
||||
test: "test"
|
||||
}));
|
||||
spawnMenu(false)
|
||||
setTimeout(function(){
|
||||
$("#spawnMenuContainer").empty();
|
||||
}, 550);
|
||||
return
|
||||
})
|
||||
|
||||
$("#quitGameButton").click(function() {
|
||||
exitGameMenu(true)
|
||||
return
|
||||
})
|
||||
$("#exitGameCancel").click(function() {
|
||||
exitGameMenu(false)
|
||||
return
|
||||
})
|
||||
$("#exitGameConfirm").click(function() {
|
||||
$.post("https://ND_Core/exitGame", JSON.stringify({}));
|
||||
return
|
||||
})
|
||||
});
|
||||
281
ND_Core/source/ui/style.css
Normal file
281
ND_Core/source/ui/style.css
Normal file
@@ -0,0 +1,281 @@
|
||||
body {
|
||||
background-size: 105%;
|
||||
background-repeat: no-repeat;
|
||||
background-attachment: fixed;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
/* Main page */
|
||||
#overlay {
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 100vh;
|
||||
width: 30vw;
|
||||
background-color: rgba(2, 2, 2, 0.911);
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
#charactersSection {
|
||||
height: 50%;
|
||||
margin: none;
|
||||
padding: none;
|
||||
width: 83%;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
background: rgba(2, 2, 2, 0);
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: rgba(99, 99, 99, 0.575);
|
||||
border-radius: 10px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: rgb(128, 128, 128);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#logoContainer {
|
||||
margin-top: 3vh;
|
||||
margin-left: 10vw;
|
||||
}
|
||||
#logo {
|
||||
height: 10vw;
|
||||
width: 10vw;
|
||||
}
|
||||
|
||||
#serverName {
|
||||
color: white;
|
||||
font-size: 130%;
|
||||
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||
text-align: center;
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
.mainPage {
|
||||
color: white;
|
||||
font-size: 95%;
|
||||
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||
text-align: center;
|
||||
font-weight: lighter;
|
||||
}
|
||||
|
||||
.homeScreenButton, .createdButton, .createdButtonEdit, .createdButtonDelete {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
border: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#newCharacterButton {
|
||||
margin-left: 9vw;
|
||||
margin-bottom: 0.8vh;
|
||||
height: 4.5vh;
|
||||
width: 12vw;
|
||||
background: rgb(95,141,254);
|
||||
background-image: linear-gradient(90deg, rgba(95,141,254,1) 0%, rgba(142,104,219,1) 100%);
|
||||
border-radius: 5vw;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
#quitGameButton {
|
||||
margin-left: 10vw;
|
||||
margin-bottom: 5vh;
|
||||
height: 4.5vh;
|
||||
width: 10vw;
|
||||
background: rgb(255,110,100);
|
||||
background: linear-gradient(90deg, rgb(255, 100, 208) 0%, rgb(255, 60, 109) 100%);
|
||||
border-radius: 5vw;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.createdButton {
|
||||
display: inline-block;
|
||||
margin-bottom: 1vh;
|
||||
margin-left: 5.5vw;
|
||||
height: 3vh;
|
||||
width: 10vw;
|
||||
background-color: rgb(17, 113, 238);
|
||||
border: none;
|
||||
border-radius: 0.5vh;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.createdButtonEdit {
|
||||
margin-left: 0.2vw;
|
||||
height: 3vh;
|
||||
width: 4vw;
|
||||
background-color: rgb(128, 128, 128);
|
||||
border: none;
|
||||
border-radius: 0.5vh;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.createdButtonDelete {
|
||||
margin-left: 0.2vw;
|
||||
height: 3vh;
|
||||
width: 4vw;
|
||||
background-color: rgb(236, 19, 19);
|
||||
border: none;
|
||||
border-radius: 0.5vh;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
/* Button transitions */
|
||||
#newCharacterButton:hover, #quitGameButton:hover, .characterSubmitButton:hover, .characterResetButton:hover, .confirmationScreenConfirm:hover, .confirmationScreenCancel:hover, .createdButton:hover, .createdButtonEdit:hover, .createdButtonDelete:hover, .spawnButtons:hover {
|
||||
transition: 0.3s;
|
||||
opacity: 0.7;
|
||||
}
|
||||
#newCharacterButton:active, #quitGameButton:active, .characterSubmitButton:active, .characterResetButton:active, .confirmationScreenConfirm:active, .confirmationScreenCancel:active, .createdButton:active, .createdButtonEdit:active, .createdButtonDelete:active, .spawnButtons:active {
|
||||
transition: none;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* Character creator and Editor menu */
|
||||
.characterMenu {
|
||||
height: 60%;
|
||||
width: 50vw;
|
||||
margin-top: 15vh;
|
||||
margin-left: 40vw;
|
||||
background-color: rgba(2, 2, 2, 0.911);
|
||||
border-radius: 3vh;
|
||||
}
|
||||
|
||||
#characterCreatorTopText {
|
||||
padding-top: 2vh;
|
||||
margin-left: 3vw;
|
||||
color: white;
|
||||
font-size: 120%;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#characterCreatorTopTextLine {
|
||||
background: rgb(255, 255, 255);
|
||||
background: linear-gradient(90deg, rgba(0,0,0,1) 0%, rgba(255,255,255,1) 15%, rgba(255,255,255,1) 85%, rgba(0,0,0,1) 100%);
|
||||
height: 0.1vh;
|
||||
width: 95%;
|
||||
border: none;
|
||||
border-radius: 2vh;
|
||||
}
|
||||
|
||||
/* character info */
|
||||
#characterInfoContainer {
|
||||
margin-top: 2vh;
|
||||
margin-left: 6.5vw;
|
||||
}
|
||||
|
||||
.firstRowText, .secondRowText, .thirdRowText, .fourthRowText {
|
||||
color: white;
|
||||
display: inline-block;
|
||||
margin-top: 2vh;
|
||||
margin-bottom: 1vh;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.firstRowInput, .secondRowInput, .thirdRowInput, .fourthRowInput {
|
||||
background: white;
|
||||
color: black;
|
||||
display: inline-block;
|
||||
border: none;
|
||||
border-radius: 0.2vw;
|
||||
height: 4vh;
|
||||
width: 36%;
|
||||
}
|
||||
|
||||
.characterSubmitButton {
|
||||
margin-top: 1vh;
|
||||
margin-left: 30.3vw;
|
||||
margin-bottom: 2vh;
|
||||
width: 8vw;
|
||||
background-color: rgb(17, 113, 238);
|
||||
}
|
||||
|
||||
.characterResetButton {
|
||||
width: 4vw;
|
||||
background-color: rgb(231, 50, 50);
|
||||
}
|
||||
|
||||
.characterSubmitButton, .characterResetButton, .confirmationScreenConfirm, .confirmationScreenCancel, .spawnButtons {
|
||||
height: 4vh;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
border: none;
|
||||
border-radius: 1vh;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
/* confirmation Screen */
|
||||
.confirmationScreen {
|
||||
height: 25vh;
|
||||
width: 30vw;
|
||||
margin-top: 20vh;
|
||||
margin-left: 45vw;
|
||||
background-color: rgba(2, 2, 2, 0.911);
|
||||
border-radius: 3vh;
|
||||
}
|
||||
|
||||
.confirmationScreenConfirm {
|
||||
margin-top: 5vh;
|
||||
margin-left: 19%;
|
||||
margin-right: 5%;
|
||||
width: 8vw;
|
||||
background-color: rgb(17, 113, 238);
|
||||
}
|
||||
|
||||
.confirmationScreenCancel {
|
||||
width: 8vw;
|
||||
background-color: rgb(231, 50, 50);
|
||||
}
|
||||
|
||||
.spawnMenu {
|
||||
height: 39%;
|
||||
width: 40vw;
|
||||
margin-top: 15vh;
|
||||
margin-left: 40vw;
|
||||
background-color: rgba(2, 2, 2, 0.911);
|
||||
border-radius: 3vh;
|
||||
}
|
||||
|
||||
#spawnMenuContainer {
|
||||
margin-top: 3vh;
|
||||
margin-left: 5%;
|
||||
}
|
||||
|
||||
.spawnButtons {
|
||||
display: block;
|
||||
margin-left: 0;
|
||||
margin-bottom: 1vh;
|
||||
text-align: center;
|
||||
width: 95%;
|
||||
height: 4vh;
|
||||
background-color: rgb(17, 113, 238);
|
||||
}
|
||||
|
||||
.text {
|
||||
font-family: "Pricedown Bl", sans-serif;
|
||||
position: absolute;
|
||||
font-size: 1vw;
|
||||
color: rgba(255, 255, 255, 0.925);
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
padding: 0.15% 1.1%;
|
||||
background-color: rgba(2, 2, 2, 0.548);
|
||||
border-radius: 10vw;
|
||||
}
|
||||
|
||||
#cash {
|
||||
top: 5.5vh;
|
||||
right: 1.5vw;
|
||||
}
|
||||
|
||||
#bank {
|
||||
top: 9vh;
|
||||
right: 1.5vw;
|
||||
}
|
||||
Reference in New Issue
Block a user