From f1c8d45921ddab8e520d10aad8a168dd85f33caf Mon Sep 17 00:00:00 2001 From: Mitchel <44533206+Mitchel@users.noreply.github.com> Date: Wed, 6 Sep 2023 17:32:55 +0200 Subject: [PATCH] temp commit --- client/blip.lua | 11 ++++ client/main.lua | 7 +++ client/menus.lua | 70 ++++++++++++++++++++++++ client/target.lua | 52 ++++++++++++++++++ client/tokens.lua | 28 ++++++++++ config.lua | 113 +++++++++++++++++++++++++++++++++++++++ fxmanifest.lua | 30 +++++++++++ gametoken.png | Bin 0 -> 23260 bytes html/css/img/monitor.png | Bin 0 -> 44658 bytes html/css/reset.css | 48 +++++++++++++++++ html/css/style.css | 54 +++++++++++++++++++ html/index.html | 29 ++++++++++ html/msdos.html | 79 +++++++++++++++++++++++++++ html/scripts/listener.js | 106 ++++++++++++++++++++++++++++++++++++ locales/en.lua | 31 +++++++++++ locales/nl.lua | 34 ++++++++++++ readme.md | 29 ++++++++++ server.lua | 29 ++++++++++ 18 files changed, 750 insertions(+) create mode 100644 client/blip.lua create mode 100644 client/main.lua create mode 100644 client/menus.lua create mode 100644 client/target.lua create mode 100644 client/tokens.lua create mode 100644 config.lua create mode 100644 fxmanifest.lua create mode 100644 gametoken.png create mode 100644 html/css/img/monitor.png create mode 100644 html/css/reset.css create mode 100644 html/css/style.css create mode 100644 html/index.html create mode 100644 html/msdos.html create mode 100644 html/scripts/listener.js create mode 100644 locales/en.lua create mode 100644 locales/nl.lua create mode 100644 readme.md create mode 100644 server.lua diff --git a/client/blip.lua b/client/blip.lua new file mode 100644 index 0000000..f88c1df --- /dev/null +++ b/client/blip.lua @@ -0,0 +1,11 @@ +CreateThread(function() + local blip = AddBlipForCoord(Config.blip.coords.x, Config.blip.coords.y, Config.blip.coords.z) + SetBlipSprite(blip, Config.blip.sprite) + SetBlipDisplay(blip, Config.blip.display) + SetBlipScale(blip, Config.blip.scale) + SetBlipColour(blip, Config.blip.color) + SetBlipAsShortRange(blip, true) + BeginTextCommandSetBlipName("STRING") + AddTextComponentString(Config.blip.label) + EndTextCommandSetBlipName(blip) +end) \ No newline at end of file diff --git a/client/main.lua b/client/main.lua new file mode 100644 index 0000000..dcb8df1 --- /dev/null +++ b/client/main.lua @@ -0,0 +1,7 @@ +RegisterNUICallback('exit', function() + SendNUIMessage({ + type = "off", + game = "", + }) + SetNuiFocus(false, false) +end) diff --git a/client/menus.lua b/client/menus.lua new file mode 100644 index 0000000..03012af --- /dev/null +++ b/client/menus.lua @@ -0,0 +1,70 @@ +local function GenerateOptions() + local options = {} + for i = 1, #Config.games, 1 do + options[#options + 1] = { + label = Config.games[i].label, + icon = Config.games[i].icon or 'fa-gamepad', -- WIP: Verplaatsen naar config voor fa-gamepad + } + end + return options +end + +local function GenerateHacks() + local options = {} + for i = 1, #Config.hacks, 1 do + options[#options + 1] = { + label = Config.hacks[i].label, + icon = Config.hacks[i].icon or 'fa-gamepad', -- WIP: Verplaatsen naar config voor fa-gamepad + } + end + return options +end + +CreateThread(function() + lib.registerMenu({ + id = 'arcade_machine', + title = Lang:t('menu.arcade'), + position = 'top-right', + options = GenerateOptions(), + }, function(selected, scrollIndex, args) + SendNUIMessage({ + type = "on", + game = Config.games[selected].args, + gpu = "ETX2080", + cpu = "U9_9900" + }) + SetNuiFocus(true, true) + end) + + lib.registerMenu({ + id = 'arcade_hacking', + title = Lang:t('menu.special'), + position = 'top-right', + options = GenerateHacks(), + }, function(selected, scrollIndex, args) + Config.hacks[selected].action() + end) + + lib.registerContext({ + id = 'arcade_purchase_token', + title = Lang:t('menu.purchase_token'):format(Config.TokenPrice), + options = {{ + title = Lang:t('menu.purchase_token'):format(Config.TokenPrice), + icon = 'fa-shopping-cart', + onSelect = function() + local amount = lib.inputDialog(Lang:t('menu.amount'), { + { + label = Lang:t('menu.amount'), + type = 'number', + min = 1, + required = true, + } + }) + if amount then + TriggerServerEvent('qb-arcade:server:buyToken', amount[1]) + end + end + + }} + }) +end) \ No newline at end of file diff --git a/client/target.lua b/client/target.lua new file mode 100644 index 0000000..b2bf5c9 --- /dev/null +++ b/client/target.lua @@ -0,0 +1,52 @@ +local models = {1876055757, -1501557515, -1502319666, 815879628, -1991361770, 1301167921, -538006270, 2303605526, 4185618299, 3756961026, 2793409781, 398786301, 568464183, 3067040863, 3171514707, 3899793496, 974001996, 4206216415, 1457191833, 3054877820, 4129005630, 3963576280, 3325005861, 543442061, 372224036, -1273554963} -- WIP: Verplaatsen naar config? + + +local function requireToken() + if not lib.callback.await('qb-arcade:server:hasToken') then + + lib.notify({ + title = Lang:t('error.no_token_title'), + description = Lang:t('error.no_token'), + type = 'error', + }) + + return false + end + + return true +end + +CreateThread(function() + + exports['qb-target']:AddTargetModel(models, { + options = { + { + num = 1, + icon = 'fas fa-gamepad', + label = Lang:t('target.arcade'), + action = function() + if not requireToken() then return end + lib.showMenu('arcade_machine') + end + }, + { + num = 2, + icon = 'fas fa-circle-dot', + label = Lang:t('target.special'), + action = function() + if not requireToken() then return end + lib.showMenu('arcade_hacking') + end + }, + }, + }) +end) + +AddEventHandler('onResourceStop', function(resource) + if resource == GetCurrentResourceName() then + for _, v in ipairs(models) do + exports['qb-target']:RemoveTargetModel(v, Lang:t('target.arcade')) + exports['qb-target']:RemoveTargetModel(v, Lang:t('target.special')) + end + end +end) \ No newline at end of file diff --git a/client/tokens.lua b/client/tokens.lua new file mode 100644 index 0000000..81e2328 --- /dev/null +++ b/client/tokens.lua @@ -0,0 +1,28 @@ +local function Nearby() + if IsControlJustPressed(0, 38) then + lib.showContext('arcade_purchase_token') + return + end +end + +CreateThread(function() + for _, v in ipairs(Config.Zones) do + lib.points.new({ + coords = v, + distance = 3, + + onEnter = function() + lib.showTextUI(Lang:t('interactions.enter_token_shop'), { + position = "left-center", + icon = 'e' + }) + end, + + onExit = function() + lib.hideTextUI() + end, + + nearby = Nearby + }) + end +end) \ No newline at end of file diff --git a/config.lua b/config.lua new file mode 100644 index 0000000..39b275b --- /dev/null +++ b/config.lua @@ -0,0 +1,113 @@ +Config = {} +QBCore = exports['qb-core']:GetCoreObject() + +-- Item that players get when they buy tokens and use to pay for a game. +Config.TokenItem = "gametoken" -- WIP (Item name: Game Token) +Config.TokenPrice = "5" +Config.PaymentType = "cash" -- WIP + +Config.Zones = { + vector3(-1654.7384033203, -1063.3900146484, 12.160423278809) +} + +Config.blip = { + coords = vector3(-1655.7844238281, -1066.8046875, 12.160425186157), + label = "Arcade", + sprite = 484, + color = 0, + scale = 0.7, + display = 2, +} + +Config.games = { + { + label = "Pacman", + args = "http://xogos.robinko.eu/PACMAN/", + icon = 'ghost' + }, + { + label = "Tetris", + args = "http://xogos.robinko.eu/TETRIS/", + icon = "cube" + }, + { + label = "Uno", + args = "https://duowfriends.eu/", + icon = "diamond" + }, + { + label = "FlappyParrot", + args = "http://xogos.robinko.eu/FlappyParrot/", + icon = "dove" + }, + { + label = 'slither', + args = 'http://slither.io', + icon = 'staff-snake', + }, + { + label = 'Duke Nukem 3D', + args = string.format("nui://qb-arcade/html/msdos.html?url=%s¶ms=%s", "https://www.retrogames.cz/dos/zip/duke3d.zip", "./DUKE3D.EXE"), + icon = 'gun' + }, + { + label = 'DOOM', + args = string.format("nui://qb-arcade/html/msdos.html?url=%s¶ms=%s", "https://www.retrogames.cz/dos/zip/Doom.zip", "./DOOM.EXE"), + icon = 'gun' + } +} + +Config.hacks = { + { + label = "Rondjes", + icon = 'fa-regular fa-circle', + action = function() + exports['ps-ui']:Circle(function(success) + if success then + QBCore.Functions.Notify("Je hebt de hack voltooid!", "success") + else + QBCore.Functions.Notify("Je hebt de hack gefaald!", "error") + end + end, 2, 20) -- NumberOfCircles, MS + end + }, + { + label = "Speurtocht", + icon = 'search', + action = function() + exports['ps-ui']:Maze(function(success) + if success then + QBCore.Functions.Notify("Je hebt de hack voltooid!", "success") + else + QBCore.Functions.Notify("Je hebt de hack gefaald!", "error") + end + end, 20) + end + }, + { + label = "VR", + icon = 'vr-cardboard', + action = function() + exports['ps-ui']:VarHack(function(success) + if success then + QBCore.Functions.Notify("Je hebt de hack voltooid!", "success") + else + QBCore.Functions.Notify("Je hebt de hack gefaald!", "error") + end + end, math.random(3,5), math.random(6,9)) + end + }, + { + label = "blokjes", + icon = 'fa-chess-board', + action = function() + exports['ps-ui']:Thermite(function(success) + if success then + QBCore.Functions.Notify("Je hebt de hack voltooid!", "success") + else + QBCore.Functions.Notify("Je hebt de hack gefaald!", "error") + end + end, 10, 5, 3) -- Time, Gridsize (5, 6, 7, 8, 9, 10), IncorrectBlocks + end + } +} \ No newline at end of file diff --git a/fxmanifest.lua b/fxmanifest.lua new file mode 100644 index 0000000..b0974a4 --- /dev/null +++ b/fxmanifest.lua @@ -0,0 +1,30 @@ +fx_version 'adamant' +game 'gta5' +lua54 'yes' + +client_scripts { + 'client/*', +} + +server_scripts { + 'server.lua', +} + +shared_scripts { + '@ox_lib/init.lua', + '@qb-core/shared/locale.lua', + 'locales/en.lua', + 'locales/*.lua', + 'config.lua' +} + +files { + "html/css/style.css", + "html/css/reset.css", + "html/css/img/monitor.png", + "html/css/img/table.png", + "html/*.html", + "html/scripts/listener.js", +} + +ui_page "html/index.html" \ No newline at end of file diff --git a/gametoken.png b/gametoken.png new file mode 100644 index 0000000000000000000000000000000000000000..164fc2c518b683121e68174aab8e35e91286e2cd GIT binary patch literal 23260 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 literal 0 HcmV?d00001 diff --git a/html/css/img/monitor.png b/html/css/img/monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..d686d3cd961cc5728ab165965d84535d3251e746 GIT binary patch literal 44658 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 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/html/msdos.html b/html/msdos.html new file mode 100644 index 0000000..b9726e2 --- /dev/null +++ b/html/msdos.html @@ -0,0 +1,79 @@ + + + + + +js-dos api + + +
+ + + + + + \ No newline at end of file diff --git a/html/scripts/listener.js b/html/scripts/listener.js new file mode 100644 index 0000000..0327de8 --- /dev/null +++ b/html/scripts/listener.js @@ -0,0 +1,106 @@ +var gaming = false; +$(function(){ + function display(bool) { + if (bool) { + $("#body").show(); + } else { + $("#body").hide(); + } + } + display(false); + + window.addEventListener('message', function(event) { + var item = event.data; + if (item.type === "on") + { + $("#loading").show(); + alreadydid = true; + display(true); + gaming = true; + if(item.gpu === "ETX660") + { + $("#cont").css('max-height',300); + $("#cont").css('max-width',500); + } + if(item.gpu === "ETX1050") + { + $("#cont").css('max-height',700); + $("#cont").css('max-width',1100); + } + if(item.gpu === "ETX2080") + { + $("#cont").css('max-height',800); + $("#cont").css('max-width',1600); + } + + if(item.cpu === "U9_9900") { loadGame(3*10); } + if(item.cpu === "U7_8700") { loadGame(10*10); } + if(item.cpu === "U3_6300") { loadGame(15*10); } + if(item.cpu === "BENTIUM") { loadGame(20*10); } + } + if (item.type === "off") { + display(false); + loadIframe(true, ""); + gaming = false; + $("#loading").hide(); + alreadydid = false; + time_seconds = 0; + kokotina = 0; + } + + loadIframe(false, item.game); + }) +}); + +var url_game = ""; +var alreadydid = false; +var time_seconds = 0,kokotina = 0; +function loadGame(seconds) +{ + time_seconds = seconds; + $('#loading').attr('value', 0); + $('#loading').attr('max', seconds / 10); +} + +function progress() +{ + if(time_seconds == 0) + { + if(alreadydid == true){ + loadIframe(true, url_game); + alreadydid = false; + $("#loading").hide(); + } + kokotina = 0; + } + else + { + kokotina += 0.1; + time_seconds --; + $('#loading').attr('value', kokotina); + } + + setTimeout(progress, 100); +} +setTimeout(progress, 100); + +$(document).keyup(function(e) { + if (e.keyCode === 27){ + $.post('https://qb-arcade/exit', JSON.stringify({})); + } +}); + + +$( "#off_pc" ).click(function() { + $.post('https://qb-arcade/exit', JSON.stringify({})); +}); +function loadIframe(give,url) { + url_game = url; + if(give == false) return false; + var $iframe = $('#browser'); + if ( $iframe.length ) { + $iframe.attr('src',url); + return false; + } + return true; +} \ No newline at end of file diff --git a/locales/en.lua b/locales/en.lua new file mode 100644 index 0000000..4f0ed26 --- /dev/null +++ b/locales/en.lua @@ -0,0 +1,31 @@ +local Translations = { + menu = { + arcade = "Arcade cabinet", + special = "Special button!", + + purchase_token = "Purchase token | Price %s", + amount = "Amount", + }, + + target = { + arcade = "Arcade cabinet", + special = "Special button!!", + }, + + interactions = { + enter_token_shop = "Purchase gametoken" + }, + + error = { + no_token_title = "Arcade Cabinet", + no_token = "You need a Game Token to use this.", + + not_enough_money_title = "Gametokens", + not_enough_money = "You don't have enough money to buy this amount of tokens.", + }, +} + +Lang = Lang or Locale:new({ + phrases = Translations, + warnOnMissing = true +}) diff --git a/locales/nl.lua b/locales/nl.lua new file mode 100644 index 0000000..922efc6 --- /dev/null +++ b/locales/nl.lua @@ -0,0 +1,34 @@ +local Translations = { + menu = { + arcade = "Arcade kast", + special = "Speciale knop", + + purchase_token = "Koop token | Prijs: %s", + amount = "Aantal", + }, + + target = { + arcade = "Arcade kast", + special = "Speciale knop kab00m!", + }, + + interactions = { + enter_token_shop = "Gametokens inkopen" + }, + + error = { + no_token_title = "Arcadekast", + no_token = "Je hebt een gametoken nodig om een spelletje te kunnen spelen.", + + not_enough_money_title = "Gametokens", + not_enough_money = "Je hebt niet voldoende geld om een gametoken te kopen.", + } +} + +if GetConvar('qb_locale', 'en') == 'nl' then + Lang = Locale:new({ + phrases = Translations, + warnOnMissing = true, + fallbackLang = Lang, + }) +end diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..d896a8a --- /dev/null +++ b/readme.md @@ -0,0 +1,29 @@ +WIP: +- Locales +- Token Item +- Token Price +- Zones waar je een item kan kopen (OX menu met informatie over de prijs en waar je aantal tokens kan instellen en dan koop knop.) +- Controle of je een token hebt om een spel te spelen. +- In kunnen stellen bij normale spellen hoeveel tokens het kost. +- In kunnen stellen bij hacks hoeveel tokens het kost. +- Wanner iemand niet beschikt over een token bij de game melding in de zin van "Je hebt X token(s) nodig om dit spel te kunnen spelen" (in locales). + + +-- Voor de uit eindelijke Readme. + +['gametoken'] = { + ['name'] = 'gametoken', + ['label'] = 'Game Token', + ['weight'] = 100, + ['type'] = 'item', + ['image'] = 'gametoken.png', + ['unique'] = false, + ['useable'] = false, + ['shouldClose'] = false, + ['combinable'] = nil, + ['description'] = 'Om een spelletje mee te spelen in de Arcade.' +}, + +MLO's +- Gabz Arcade +- https://www.gta5-mods.com/maps/arcade-bar-interior-mlo-fivem-sp \ No newline at end of file diff --git a/server.lua b/server.lua new file mode 100644 index 0000000..dd18e40 --- /dev/null +++ b/server.lua @@ -0,0 +1,29 @@ +lib.callback.register('qb-arcade:server:hasToken', function(source) + local src = source + local player = QBCore.Functions.GetPlayer(src) + local hasToken = player.Functions.GetItemByName(Config.TokenItem) + if hasToken ~= nil then + player.Functions.RemoveItem(Config.TokenItem, 1) + return true + else + return false + end +end) + +RegisterNetEvent('qb-arcade:server:buyToken', function(amount) + local price = Config.TokenPrice * amount + + local player = QBCore.Functions.GetPlayer(source) + + if not player then return end + if not player.Functions.RemoveMoney(Config.PaymentType, price, 'arcade-token-purchase') then + TriggerClientEvent('ox_lib:notify', source, { + title = Lang:t('error.not_enough_money_title'), + description = Lang:t('error.not_enough_money'), + type = 'error', + }) + return + end + + player.Functions.AddItem(Config.TokenItem, amount) +end) \ No newline at end of file