From ad36f7e2861965396bc73b58717fb7b04eda0a59 Mon Sep 17 00:00:00 2001
From: Andyyy7666 <86536434+Andyyy7666@users.noreply.github.com>
Date: Fri, 8 Jul 2022 23:19:28 +0200
Subject: [PATCH] Add files via upload
---
ND_Banks/fxmanifest.lua | 20 +++
ND_Banks/source/client.lua | 153 ++++++++++++++++++++++
ND_Banks/source/server.lua | 20 +++
ND_Banks/source/ui/index.html | 46 +++++++
ND_Banks/source/ui/script.js | 136 +++++++++++++++++++
ND_Banks/source/ui/style.css | 237 ++++++++++++++++++++++++++++++++++
6 files changed, 612 insertions(+)
create mode 100644 ND_Banks/fxmanifest.lua
create mode 100644 ND_Banks/source/client.lua
create mode 100644 ND_Banks/source/server.lua
create mode 100644 ND_Banks/source/ui/index.html
create mode 100644 ND_Banks/source/ui/script.js
create mode 100644 ND_Banks/source/ui/style.css
diff --git a/ND_Banks/fxmanifest.lua b/ND_Banks/fxmanifest.lua
new file mode 100644
index 0000000..ee1cdd1
--- /dev/null
+++ b/ND_Banks/fxmanifest.lua
@@ -0,0 +1,20 @@
+-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
+
+author "Andyyy#7666"
+description "ND Framework Banks"
+version "2.0.0"
+
+fx_version "cerulean"
+game "gta5"
+lua54 "yes"
+
+ui_page "source/ui/index.html"
+
+files {
+ "source/ui/index.html",
+ "source/ui/script.js",
+ "source/ui/style.css"
+}
+
+server_script "source/server.lua"
+client_script "source/client.lua"
\ No newline at end of file
diff --git a/ND_Banks/source/client.lua b/ND_Banks/source/client.lua
new file mode 100644
index 0000000..c6141c9
--- /dev/null
+++ b/ND_Banks/source/client.lua
@@ -0,0 +1,153 @@
+-- For support join my discord: https://discord.gg/Z9Mxu72zZ6
+
+local display = false
+local nearModel = false
+
+local banks = {
+ vector3(1175.77, 2706.89, 38.09),
+ vector3(149.23, -1040.57, 29.36),
+ vector3(-2962.53, 482.25, 15.69),
+ vector3(-112.02, 6469.13, 31.62),
+ vector3(-351.56, -49.70, 49.02),
+ vector3(313.66, -278.90, 54.16),
+ vector3(-1213.08, -330.93, 37.77)
+}
+
+local days = {
+ "Sunday",
+ "Monday",
+ "Tuesday",
+ "Wednesday",
+ "Thursday",
+ "Friday",
+ "Saturday"
+}
+
+-- Get the time
+function getTime()
+ local hours = GetClockHours()
+ local minutes = GetClockMinutes()
+ if hours <= 9 then
+ hours = "0" .. hours
+ end
+ if minutes <= 9 then
+ minutes = "0" .. minutes
+ end
+ return hours .. ":" .. minutes
+end
+
+-- Hide/Show ui
+function SetDisplay(bool)
+ local playerInfo = exports["ND_Core"]:getCharacterInfo()
+ display = bool
+ SetNuiFocus(bool, bool)
+ SendNUIMessage({
+ status = bool,
+ playerName = playerInfo.firstName .. " " .. playerInfo.lastName,
+ balance = "Account Balance: $" .. playerInfo.bank .. ".00",
+ date = days[GetClockDayOfWeek() + 1],
+ time = getTime()
+ })
+end
+
+function drawText3D(coords, text)
+ local onScreen, _x, _y = World3dToScreen2d(coords.x, coords.y, coords.z + 0.3)
+ local pX, pY, pZ = table.unpack(GetGameplayCamCoords())
+ SetTextScale(0.4, 0.4)
+ SetTextFont(4)
+ SetTextProportional(1)
+ SetTextEntry("STRING")
+ SetTextCentre(true)
+ SetTextColour(255, 255, 255, 255)
+ SetTextOutline()
+ AddTextComponentString(text)
+ DrawText(_x, _y)
+end
+
+-- check if ped is close to a bank coordinate.
+function inRange(ped)
+ playerCoords = GetEntityCoords(ped)
+ for _, bank in pairs(banks) do
+ if (#(playerCoords - bank)) < 1.5 then
+ return bank
+ end
+ end
+ return false
+end
+
+Citizen.CreateThread(function()
+ while true do
+ Citizen.Wait(500)
+ ped = PlayerPedId()
+ nearModel = inRange(ped)
+ end
+end)
+
+Citizen.CreateThread(function()
+ while true do
+ Citizen.Wait(0)
+ if not display and nearModel then
+ drawText3D(nearModel, "~w~Press ~g~E ~w~to use the bank")
+ if IsControlJustPressed(0, 51) then
+ SetDisplay(true)
+ TriggerScreenblurFadeIn(1000)
+ end
+ end
+ end
+end)
+
+-- close the ui.
+RegisterNUICallback("close", function(data)
+ PlaySoundFrontend(-1, "PIN_BUTTON", "ATM_SOUNDS", 1)
+ SetDisplay(false)
+ TriggerScreenblurFadeOut(1000)
+end)
+
+-- makes a button sount for when the ui is clicked.
+RegisterNUICallback("sound", function(data)
+ PlaySoundFrontend(-1, "PIN_BUTTON", "ATM_SOUNDS", 1)
+end)
+
+-- deposit/withdraw
+RegisterNUICallback("useATM", function(data)
+ local action = string.gsub(data.action, " ", "")
+ if action == "WITHDRAW" then
+ if data.amount == "" then
+ Citizen.Wait(1000)
+ SendNUIMessage({
+ success = false
+ })
+ return
+ end
+ TriggerServerEvent("ND_Banks:withdraw", data.amount)
+ elseif action == "DEPOSIT" then
+ if data.amount == "" then
+ Citizen.Wait(1000)
+ SendNUIMessage({
+ success = false
+ })
+ return
+ end
+ TriggerServerEvent("ND_Banks:deposit", data.amount)
+ elseif action == "TRANSFER" then
+ if data.transferAmount == "" or data.transferTarget == "" then
+ Citizen.Wait(1000)
+ SendNUIMessage({
+ success = false
+ })
+ return
+ end
+ TriggerServerEvent("ND_Banks:transfer", data.transferAmount, data.transferTarget)
+ end
+end)
+
+-- update the balance on the ui and confirm if the deposit/withdraw was successful.
+RegisterNetEvent("ND_Banks:update")
+AddEventHandler("ND_Banks:update", function(status)
+ Citizen.Wait(1000)
+ local playerInfo = exports["ND_Core"]:getCharacterInfo()
+ SendNUIMessage({
+ balance = "Account Balance: $" .. playerInfo.bank .. ".00",
+ success = status
+ })
+end)
\ No newline at end of file
diff --git a/ND_Banks/source/server.lua b/ND_Banks/source/server.lua
new file mode 100644
index 0000000..e1c0eaf
--- /dev/null
+++ b/ND_Banks/source/server.lua
@@ -0,0 +1,20 @@
+RegisterNetEvent("ND_Banks:withdraw")
+AddEventHandler("ND_Banks:withdraw", function(amount)
+ local player = source
+ local update = exports["ND_Core"]:withdrawMoney(amount, player)
+ TriggerClientEvent("ND_Banks:update", player, update)
+end)
+
+RegisterNetEvent("ND_Banks:deposit")
+AddEventHandler("ND_Banks:deposit", function(amount)
+ local player = source
+ local update = exports["ND_Core"]:depositMoney(amount, player)
+ TriggerClientEvent("ND_Banks:update", player, update)
+end)
+
+RegisterNetEvent("ND_Banks:transfer")
+AddEventHandler("ND_Banks:transfer", function(amount, target)
+ local player = source
+ local update = exports["ND_Core"]:transferBank(amount, player, target)
+ TriggerClientEvent("ND_Banks:update", player, update)
+end)
\ No newline at end of file
diff --git a/ND_Banks/source/ui/index.html b/ND_Banks/source/ui/index.html
new file mode 100644
index 0000000..4bbb15e
--- /dev/null
+++ b/ND_Banks/source/ui/index.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
Welcome back
+
+
+
+
+
+
Are you sure you'd like to perform this action
+
+
+
+
+
Success!
+
+
+
+
Failed!
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ND_Banks/source/ui/script.js b/ND_Banks/source/ui/script.js
new file mode 100644
index 0000000..1735543
--- /dev/null
+++ b/ND_Banks/source/ui/script.js
@@ -0,0 +1,136 @@
+$(function() {
+ function display(bool) {
+ if (bool) {
+ $("#overlay").show();
+ } else {
+ $("#overlay").hide();
+ }
+ }
+ function atmDisplay(bool) {
+ if (bool) {
+ $("#atm").show();
+ $("#loader, #confirmationScreen, #successScreen, #failedScreen").hide();
+ return;
+ }
+ $("#atm").hide();
+ }
+ function loader(bool) {
+ if (bool) {
+ $("#loader").show();
+ $("#atm, #confirmationScreen, #successScreen, #failedScreen").hide();
+ return;
+ }
+ $("#loader").hide();
+ }
+ function confirmationScreen(bool) {
+ if (bool) {
+ $("#confirmationScreen").show();
+ $("#atm, #loader, #successScreen, #failedScreen").hide();
+ return;
+ }
+ $("#confirmationScreen").hide();
+ }
+ function successScreen(bool) {
+ if (bool) {
+ $("#successScreen").show()
+ $("#confirmationScreen, #atm, #loader, #failedScreen").hide();
+ return;
+ }
+ $("#successScreen").hide();
+ }
+ function failedScreen(bool) {
+ if (bool) {
+ $("#failedScreen").show()
+ $("#confirmationScreen, #atm, #loader, #successScreen").hide();
+ return;
+ }
+ $("#failedScreen").hide();
+ }
+ display(false);
+ atmDisplay(true);
+ loader(false);
+ confirmationScreen(false);
+ successScreen(false);
+
+ const today = new Date();
+ let action;
+
+ window.addEventListener("message", function(event) {
+ const item = event.data;
+ $("#balance").text(item.balance);
+ if (item.status) {
+ display(true);
+ $("#playername").text(item.playerName);
+ $("#date").text(`${item.date}, ${today.toLocaleDateString("en-US", {year: "numeric", month: "long", day: "numeric"})}`);
+ $("#time").text(item.time);
+ } else if (item.status === false) {
+ display(false);
+ }
+ if (item.success) {
+ loader(false);
+ successScreen(true);
+ } else if (item.success === false) {
+ loader(false);
+ failedScreen(true);
+ }
+ })
+
+ $("button[type=submit]").click(function () {
+ action = $(this).text();
+ });
+
+ $("#confirmButton").click(function() {
+ $.post(`https://${GetParentResourceName()}/sound`);
+ confirmationScreen(false);
+ loader(true);
+ $.post(`https://${GetParentResourceName()}/useATM`, JSON.stringify({
+ action: action,
+ amount: $("#enteredAmount").val(),
+ transferAmount: $("#transferAmount").val(),
+ transferTarget: $("#transferTarget").val()
+ }));
+ $("#enteredAmount").val("");
+ $("#transferAmount").val("");
+ $("#transferTarget").val("");
+ return false;
+ })
+
+ $("#cancelButton").click(function() {
+ $.post(`https://${GetParentResourceName()}/sound`);
+ confirmationScreen(false);
+ loader(true);
+ setTimeout(() => {
+ loader(false);
+ atmDisplay(true);
+ }, 300);
+ return false;
+ })
+
+ $("#atm").submit(function() {
+ $.post(`https://${GetParentResourceName()}/sound`);
+ atmDisplay(false);
+ loader(true);
+ setTimeout(() => {
+ loader(false);
+ confirmationScreen(true);
+ }, 300);
+ return false;
+ })
+
+ $(".mainMenuButton").click(function() {
+ $.post(`https://${GetParentResourceName()}/sound`);
+ successScreen(false);
+ failedScreen(false);
+ loader(true);
+ setTimeout(() => {
+ loader(false);
+ atmDisplay(true);
+ }, 300);
+ return false;
+ })
+
+ $("#closeButton").click(function() {
+ $.post(`https://${GetParentResourceName()}/close`);
+ return;
+ })
+});
\ No newline at end of file
diff --git a/ND_Banks/source/ui/style.css b/ND_Banks/source/ui/style.css
new file mode 100644
index 0000000..848506a
--- /dev/null
+++ b/ND_Banks/source/ui/style.css
@@ -0,0 +1,237 @@
+body {
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+#overlay {
+ display: none;
+ position: absolute;
+ height: 60vh;
+ width: 50vw;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ border-radius: 10px;
+ background-image: linear-gradient(rgb(255, 255, 255), rgb(199, 199, 199));
+ background-color: white;
+}
+
+#logo {
+ position: absolute;
+ width: 200px;
+ top: 2vh;
+ left: 6vw;
+ margin: auto;
+}
+
+#date {
+ position: absolute;
+ top: 3.5vh;
+ right: 6vw;
+ color: black;
+ font-size: 18px;
+}
+
+#time {
+ position: absolute;
+ font-weight: 500;
+ top: -0.7vh;
+ right: 6vw;
+ color: black;
+ font-size: 30px;
+}
+
+#balance {
+ position: absolute;
+ top: 23vh;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;;
+ font-weight: 500;
+ left: 0;
+ right: 0;
+ margin: auto;
+ color: black;
+ font-size: 20px;
+ text-align: center;
+}
+
+#confirmText {
+ position: absolute;
+ top: 26vh;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;;
+ font-weight: 500;
+ left: 0;
+ right: 0;
+ margin: auto;
+ color: black;
+ font-size: 20px;
+ text-align: center;
+}
+
+#greenline {
+ position: absolute;
+ height: 1vh;
+ width: 80%;
+ top: 9vh;
+ left: 0;
+ right: 0;
+ margin: auto;
+ background-color: green;
+ border-radius: 5px;
+ border: none;
+}
+
+#greenbox {
+ position: absolute;
+ height: 5vh;
+ width: 80%;
+ top: 11vh;
+ left: 0;
+ right: 0;
+ margin: auto;
+ background-color: green;
+ background-image: linear-gradient(rgb(2, 110, 2), green);
+ border-radius: 5px;
+ border: none;
+}
+
+#playername {
+ position: absolute;
+ top: 13vh;
+ left: 0;
+ right: 0;
+ margin: auto;
+ color: white;
+ text-align: center;
+}
+
+#welcome {
+ position: absolute;
+ top: 11.5vh;
+ left: 0;
+ right: 0;
+ margin: auto;
+ color: white;
+ text-align: center;
+}
+
+.input {
+ height: 4vh;
+ width: 7.3vw;
+ background-color: green;
+ font-weight: 1000;
+ color: white;
+ border: none;
+ border-radius: 5px;
+ margin: auto;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;;
+ transition: 50ms;
+}
+
+.input:hover {
+ transition: 50ms;
+ background-color: rgb(2, 110, 2);
+}
+
+
+#transferAmount {
+ position: absolute;
+ width: 12vw;
+ top: 28vh;
+ right: 22.55%;
+ color: black;
+ background-color: white;
+ text-align: center;
+}
+#transferTarget {
+ position: absolute;
+ width: 3vw;
+ top: 28vh;
+ right: 15%;
+ color: black;
+ background-color: white;
+ text-align: center;
+}
+#transferButton {
+ position: absolute;
+ width: 15.8vw;
+ top: 36.5vh;
+ right: 15%;
+}
+
+#enteredAmount {
+ position: absolute;
+ width: 15.8vw;
+ top: 28vh;
+ left: 15%;
+ color: black;
+ background-color: white;
+ text-align: center;
+}
+
+#withdrawButton {
+ position: absolute;
+ top: 36.5vh;
+ left: 15%;
+}
+
+#depositButton {
+ position: absolute;
+ top: 36.5vh;
+ left: 32%;
+}
+
+.mainMenuButton {
+ position: absolute;
+ width: 10vw;
+ top: 34vh;
+ right: 0;
+ left: 0;
+ margin: auto;
+}
+
+#closeButton {
+ position: absolute;
+ height: 4.8vh;
+ width: 80%;
+ top: 50vh;
+ left: 0;
+ right: 0;
+}
+
+#confirmButton{
+ position: absolute;
+ top: 33vh;
+ left: 17vw;
+}
+
+#cancelButton {
+ position: absolute;
+ top: 33vh;
+ right: 17vw;
+}
+
+#confirmationScreen {
+ display: none;
+}
+
+#loader {
+ display: none;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ margin: auto;
+ border: 16px solid #d1d1d1;
+ border-radius: 50%;
+ border-top: 16px solid green;
+ width: 120px;
+ height: 120px;
+ animation: spin 1s linear infinite;
+}
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
\ No newline at end of file