diff --git a/resources/[notify]/okokNotify/.gitattributes b/resources/[notify]/okokNotify/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/resources/[notify]/okokNotify/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/resources/[notify]/okokNotify/README.md b/resources/[notify]/okokNotify/README.md deleted file mode 100644 index 93460351e..000000000 --- a/resources/[notify]/okokNotify/README.md +++ /dev/null @@ -1,62 +0,0 @@ -Hi, thank you for buying my script, I'm very grateful! - -To display a notification you should call it like below: - -# Client side - -exports['okokNotify']:Alert("Title", "Message", Time, 'type') - -# Server side - -TriggerClientEvent('okokNotify:Alert', source, "Title", "Message", Time, 'type') - - -[Time] - 1000 = 1 second | 5000 = 5 seconds - -Types: - - success (green) - - info (blue) - - warning (yellow) - - error (red) - - phone (orange) - - neutral (grey) - -How to add new colors: - -1. Open styles.css and add the following to the last line. - -/* Example Notification */ - -.example-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f11c"; - color: #color_code; -} - -.example { - background-color: rgba(20, 20, 20, 0.85); - color: #color_code; - padding: 5px 5px 5px 5px; -} - -.example-border { - border-left: 4px solid #color_code; -} - -To know the content code navigate to https://fontawesome.com/v5.15/icons?d=gallery&p=2, select an icon and copy it's code. - -2. Open scripts.js and add the following to the line 76. - -else if (event.data.type == 'type') { - $(`.title-${number}`).html(event.data.title).css({ - "font-size": "16px", - "font-weight": "600" - }) - $(`.notification_main-${number}`).addClass('type-icon') - $(`.wrapper-${number}`).addClass('type type-border') - sound.play(); -} - -Don't forget to change the type to the same name as you choose for "example". - -If you need help contact me on discord: https://discord.gg/Knw8UyqxbQ \ No newline at end of file diff --git a/resources/[notify]/okokNotify/client.lua b/resources/[notify]/okokNotify/client.lua deleted file mode 100644 index ad8698768..000000000 --- a/resources/[notify]/okokNotify/client.lua +++ /dev/null @@ -1,40 +0,0 @@ -function Alert(title, message, time, type) - SendNUIMessage({ - action = 'open', - title = title, - type = type, - message = message, - time = time, - }) -end - -RegisterNetEvent('okokNotify:Alert') -AddEventHandler('okokNotify:Alert', function(title, message, time, type) - Alert(title, message, time, type) -end) - --- Example Commands - Delete them - -RegisterCommand('success', function() - exports['okokNotify']:Alert("SUCCESS", "You have sent 420€ to Tommy!", 5000, 'success') -end) - -RegisterCommand('info', function() - exports['okokNotify']:Alert("INFO", "The Casino has opened!", 5000, 'info') -end) - -RegisterCommand('error', function() - exports['okokNotify']:Alert("ERROR", "Please try again later!", 5000, 'error') -end) - -RegisterCommand('warning', function() - exports['okokNotify']:Alert("WARNING", "You are getting nervous!", 5000, 'warning') -end) - -RegisterCommand('phone', function() - exports['okokNotify']:Alert("SMS", "Tommy: Where are you?", 5000, 'phonemessage') -end) - -RegisterCommand('longtext', function() - exports['okokNotify']:Alert("LONG MESSAGE", "Lorem ipsum dolor sit amet, consectetur adipiscing elit e pluribus unum.", 5000, 'neutral') -end) \ No newline at end of file diff --git a/resources/[notify]/okokNotify/fxmanifest.lua b/resources/[notify]/okokNotify/fxmanifest.lua deleted file mode 100644 index d789b4b43..000000000 --- a/resources/[notify]/okokNotify/fxmanifest.lua +++ /dev/null @@ -1,19 +0,0 @@ -fx_version 'adamant' - -game 'gta5' - -author 'okok' -- Discord: okok#3488 -description 'okokNotify' -version '1.0' - -ui_page 'html/ui.html' - -client_scripts { - 'client.lua', -} - -files { - 'html/*.*' -} - -export 'Alert' \ No newline at end of file diff --git a/resources/[notify]/okokNotify/html/scripts.js b/resources/[notify]/okokNotify/html/scripts.js deleted file mode 100644 index 128af9c8c..000000000 --- a/resources/[notify]/okokNotify/html/scripts.js +++ /dev/null @@ -1,94 +0,0 @@ -$(function () { - var sound = new Audio('sound.mp3'); - sound.volume = 0.2; - window.addEventListener('message', function (event) { - if (event.data.action == 'open') { - var number = Math.floor((Math.random() * 1000) + 1); - $('.toast').append(` -
-
-
-
- ${event.data.message} -
-
-
`) - $(`.wrapper-${number}`).css({ - "margin-bottom": "10px", - "width": "275px", - "margin": "0 0 8px -180px", - "border-radius": "10px" - }) - $('.notification_main-'+number).addClass('main') - $('.text-'+number).css({ - "font-size": "14px" - }) - - if (event.data.type == 'success') { - $(`.title-${number}`).html(event.data.title).css({ - "font-size": "16px", - "font-weight": "600" - }) - $(`.notification_main-${number}`).addClass('success-icon') - $(`.wrapper-${number}`).addClass('success success-border') - - } else if (event.data.type == 'info') { - $(`.title-${number}`).html(event.data.title).css({ - "font-size": "16px", - "font-weight": "600" - }) - $(`.notification_main-${number}`).addClass('info-icon') - $(`.wrapper-${number}`).addClass('info info-border') - } else if (event.data.type == 'error') { - $(`.title-${number}`).html(event.data.title).css({ - "font-size": "16px", - "font-weight": "600" - }) - $(`.notification_main-${number}`).addClass('error-icon') - $(`.wrapper-${number}`).addClass('error error-border') - sound.play(); - - } else if (event.data.type == 'warning') { - $(`.title-${number}`).html(event.data.title).css({ - "font-size": "16px", - "font-weight": "600" - }) - $(`.notification_main-${number}`).addClass('warning-icon') - $(`.wrapper-${number}`).addClass('warning warning-border') - sound.play(); - } else if (event.data.type == 'phonemessage') { - $(`.title-${number}`).html(event.data.title).css({ - "font-size": "16px", - "font-weight": "600" - }) - $(`.notification_main-${number}`).addClass('phonemessage-icon') - $(`.wrapper-${number}`).addClass('phonemessage phonemessage-border') - } else if (event.data.type == 'neutral') { - $(`.title-${number}`).html(event.data.title).css({ - "font-size": "16px", - "font-weight": "600" - }) - $(`.notification_main-${number}`).addClass('neutral-icon') - $(`.wrapper-${number}`).addClass('neutral neutral-border') - - } - anime({ - targets: `.wrapper-${number}`, - translateX: -50, - duration: 750, - easing: 'spring(1, 70, 100, 10)', - }) - setTimeout(function () { - anime({ - targets: `.wrapper-${number}`, - translateX: 500, - duration: 750, - easing: 'spring(1, 80, 100, 0)' - }) - setTimeout(function () { - $(`.wrapper-${number}`).remove() - }, 750) - }, event.data.time) - } - }) -}) \ No newline at end of file diff --git a/resources/[notify]/okokNotify/html/sound.mp3 b/resources/[notify]/okokNotify/html/sound.mp3 deleted file mode 100644 index dcf02928e..000000000 Binary files a/resources/[notify]/okokNotify/html/sound.mp3 and /dev/null differ diff --git a/resources/[notify]/okokNotify/html/styles.css b/resources/[notify]/okokNotify/html/styles.css deleted file mode 100644 index ddfcee9e1..000000000 --- a/resources/[notify]/okokNotify/html/styles.css +++ /dev/null @@ -1,139 +0,0 @@ -body { - margin-top: 100px; - font-family: 'Roboto', sans-serif; - overflow: hidden; -} - -.toast { - width: 100px; - float: right; -} - -.wrapper { - width: 100px; - height: auto; - background-color: #1e1e1e; - float: right; -} - -.main { - margin: 12px 16px 12px 56px; - position: relative; -} - -.main::before { - font-size: 24px; - top: calc(50% - 12px); - left: -40px; - line-height: 24px; - position: absolute; -} - -/* Success Notification*/ - -.success-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f058"; - color: #47cf73; -} - -.success { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; -} - -.success-border { - border-left: 4px solid #47cf73; -} - -/* Info Notification*/ - -.info-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #2f83ff; -} - -.info { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; -} - -.info-border { - border-left: 4px solid #2f83ff; -} - -/* Warning Notification */ - -.warning-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f071"; - color: #ffc107; -} - -.warning { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; -} - -.warning-border { - border-left: 4px solid #ffc107; -} - -/* Error Notification */ - - -.error-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f06a"; - color: #dc3545; -} - -.error { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; -} - -.error-border { - border-left: 4px solid #dc3545; -} - -/* SMS Notification */ - -.phonemessage-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f7cd"; - color: #f38847; -} - -.phonemessage { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; -} - -.phonemessage-border { - border-left: 4px solid #f38847; -} - -/* Long Text Notification */ - -.neutral-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f11c"; - color: #6c757d; -} - -.neutral { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; -} - -.neutral-border { - border-left: 4px solid #6c757d; -} \ No newline at end of file diff --git a/resources/[notify]/okokNotify/html/ui.html b/resources/[notify]/okokNotify/html/ui.html deleted file mode 100644 index 803a4734d..000000000 --- a/resources/[notify]/okokNotify/html/ui.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - -
- - - - - - - diff --git a/resources/[notify]/okokTextUI/README.md b/resources/[notify]/okokTextUI/README.md deleted file mode 100644 index 9ff41e434..000000000 --- a/resources/[notify]/okokTextUI/README.md +++ /dev/null @@ -1,166 +0,0 @@ -Hi, thank you for buying my script, I'm very grateful! - -If you need help contact me on discord: okok#3488 -Discord server: https://discord.gg/FauTgGRUku - -# To display a text UI - -exports['okokTextUI']:Open('[Key] Message', 'color', 'position') - -Colors: - - lightblue; - - lightgreen; - - lightred; - - lightgrey; - - darkblue; - - darkgreen; - - darkred; - - darkgrey. - -Positions: - - right; - - left. - -To make the text bold: exports['okokTextUI']:Open('[Key] Message', 'color', 'position') -To insert multiple lines/commands in a text UI: exports['okokTextUI']:Open('[Key] Message 1
[Key] Message 2', 'color', 'position') - -NOTE: 'color' and 'position' should be placed between '' - -# To hide a text UI - -exports['okokTextUI']:Close() - -How to add new colors: - -1. Open styles.css and add the following to the last line. - -/* Example Notification */ - -.example-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f11c"; - color: #color_code; -} - -.example { - background-color: rgba(20, 20, 20, 0.85); - color: #color_code; - padding: 5px 5px 5px 5px; -} - -.example-border { - border-left: 4px solid #color_code; -} - -/* Example */ - -.examplecolor-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #color_code; - font-size: 28px; -} - -.examplecolor { - background-color: rgba(240, 240, 240, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.examplecolor-border { - border-left: 4px solid #color_code; -} - -If you want to set if the background color is light or dark, simply change the background-color on .examplecolor: - - background-color: rgba(240, 240, 240, 1); /* LIGHT BACKGROUND */ - - background-color: rgba(20, 20, 20, 1); /* DARK BACKGROUND */ - - -2. Open scripts.js and add the following to the line 64. - -else if (event.data.color == 'examplecolor') { // Example Color - removeClass(); - $('#main').addClass('examplecolor-icon'); - $('#wrapper').addClass('examplecolor examplecolor-border'); -} - -3. In order to make esx_doorlock functional change the code of the function started in the line 69 (client.lua) and do the following: - -``` -Citizen.CreateThread(function() - local inZone = false - local locked = true - local hasAuth = false - local shown = false - local size, displayText = 1, _U('unlocked') - local color - - while true do - Citizen.Wait(0) - local letSleep = true - inZone = false - for k,v in ipairs(Config.DoorList) do - if v.distanceToPlayer and v.distanceToPlayer < 50 then - letSleep = false - - if v.doors then - for k2,v2 in ipairs(v.doors) do - FreezeEntityPosition(v2.object, v.locked) - end - else - FreezeEntityPosition(v.object, v.locked) - end - end - - if v.distanceToPlayer and v.distanceToPlayer < v.maxDistance then - inZone = true - - - if v.size then - size = v.size - end - if v.locked then - locked = true - else - locked = false - end - if v.isAuthorized then - hasAuth = true - elseif not v.isAuthorized then - hasAuth = false - end - - if IsControlJustReleased(0, 38) then - if v.isAuthorized then - v.locked = not v.locked - locked = v.locked - TriggerServerEvent('esx_doorlock:updateState', k, v.locked) -- broadcast new state of the door to everyone - shown = false - end - end - end - end - - if inZone and not shown then - shown = true - if locked and hasAuth then - exports['okokTextUI']:Open('[E] Locked', 'lightred', 'left') - elseif not locked and hasAuth then - exports['okokTextUI']:Open('[E] Unlocked', 'lightgreen', 'left') - elseif locked then - exports['okokTextUI']:Open('Locked', 'lightred', 'left') - else - exports['okokTextUI']:Open('Unlocked', 'lightgreen', 'left') - end - elseif not inZone and shown then - exports['okokTextUI']:Close() - shown = false - end - - if letSleep then - Citizen.Wait(500) - end - end -end) -``` diff --git a/resources/[notify]/okokTextUI/client.lua b/resources/[notify]/okokTextUI/client.lua deleted file mode 100644 index 3503ee6f1..000000000 --- a/resources/[notify]/okokTextUI/client.lua +++ /dev/null @@ -1,31 +0,0 @@ -function Open(message, color, position) - SendNUIMessage({ - action = 'open', - message = message, - color = color, - position = position, - }) -end - -function Close() - SendNUIMessage({ - action = 'close' - }) -end - -RegisterNetEvent('okokTextUI:Open') -AddEventHandler('okokTextUI:Open', function(message, color, position) - SendNUIMessage({ - action = 'open', - message = message, - color = color, - position = position, - }) -end) - -RegisterNetEvent('okokTextUI:Close') -AddEventHandler('okokTextUI:Close', function() - SendNUIMessage({ - action = 'close' - }) -end) \ No newline at end of file diff --git a/resources/[notify]/okokTextUI/fxmanifest.lua b/resources/[notify]/okokTextUI/fxmanifest.lua deleted file mode 100644 index 25ed12dc8..000000000 --- a/resources/[notify]/okokTextUI/fxmanifest.lua +++ /dev/null @@ -1,20 +0,0 @@ -fx_version 'adamant' - -game 'gta5' - -author 'okok' -- Discord: okok#3488 -description 'okokTextUI' -version '1.0' - -ui_page 'web/ui.html' - -client_scripts { - 'client.lua', -} - -files { - 'web/*.*' -} - -export 'Open' -export 'Close' \ No newline at end of file diff --git a/resources/[notify]/okokTextUI/web/scripts.js b/resources/[notify]/okokTextUI/web/scripts.js deleted file mode 100644 index 0cc026a08..000000000 --- a/resources/[notify]/okokTextUI/web/scripts.js +++ /dev/null @@ -1,89 +0,0 @@ -played_sound = false -position = '' - -function removeClass() { - $("#main").removeClass(); - $("#wrapper").removeClass(); -} - -window.addEventListener('message', function(event) { - var sound = new Audio('sound.mp3'); - sound.volume = 0.2; - - if (event.data.action == 'open') { - position = event.data.position; - message = event.data.message; - - $('#message').html(message); - - if (position == 'right') { - $('#ui').css('left', ''); - $('#ui').css('right', '1%'); - $('#ui').removeClass('hideright'); - $('#ui').addClass('showright'); - } - if (position == 'left') { - $('#ui').css('right', ''); - $('#ui').css('left', '1%'); - $('#ui').removeClass('hideleft'); - $('#ui').addClass('showleft'); - } - - if (event.data.color == 'lightblue') { // Light Blue - removeClass(); - $('#main').addClass('lightblue-icon'); - $('#wrapper').addClass('lightblue lightblue-border'); - } else if (event.data.color == 'lightgreen') { // Light Green - removeClass(); - $('#main').addClass('lightgreen-icon'); - $('#wrapper').addClass('lightgreen lightgreen-border'); - } else if (event.data.color == 'lightred') { // Light Red - removeClass(); - $('#main').addClass('lightred-icon'); - $('#wrapper').addClass('lightred lightred-border'); - } else if (event.data.color == 'lightgrey') { // Light Red - removeClass(); - $('#main').addClass('lightgrey-icon'); - $('#wrapper').addClass('lightgrey lightgrey-border'); - } else if (event.data.color == 'darkblue') { // Dark Blue - removeClass(); - $('#main').addClass('darkblue-icon'); - $('#wrapper').addClass('darkblue darkblue-border'); - } else if (event.data.color == 'darkgreen') { // Dark Green - removeClass(); - $('#main').addClass('darkgreen-icon'); - $('#wrapper').addClass('darkgreen darkgreen-border'); - } else if (event.data.color == 'darkred') { // Dark Red - removeClass(); - $('#main').addClass('darkred-icon'); - $('#wrapper').addClass('darkred darkred-border'); - } else if (event.data.color == 'darkgrey') { // Dark Grey - removeClass(); - $('#main').addClass('darkgrey-icon'); - $('#wrapper').addClass('darkgrey darkgrey-border'); - } - - if (played_sound == false) { - played_sound = true; - } - - } else if (event.data.action == 'close') { - - if (position == 'right') { - $('#ui').removeClass('hideleft'); - $('#ui').removeClass('showleft'); - $('#ui').removeClass('showright'); - $('#ui').addClass('hideright'); - } - - if (position == 'left') { - $('#ui').removeClass('hideright'); - $('#ui').removeClass('showright'); - $('#ui').removeClass('showleft'); - $('#ui').addClass('hideleft'); - } - } - - played_sound = false; -}) - diff --git a/resources/[notify]/okokTextUI/web/sound.mp3 b/resources/[notify]/okokTextUI/web/sound.mp3 deleted file mode 100644 index d0794795a..000000000 Binary files a/resources/[notify]/okokTextUI/web/sound.mp3 and /dev/null differ diff --git a/resources/[notify]/okokTextUI/web/styles.css b/resources/[notify]/okokTextUI/web/styles.css deleted file mode 100644 index e69ea9dc6..000000000 --- a/resources/[notify]/okokTextUI/web/styles.css +++ /dev/null @@ -1,268 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Poppins:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i&subset=devanagari,latin-ext'); - -html, body{ - font-family: 'Poppins', sans-serif; - overflow: hidden; -} - -@keyframes showright { - 0% { - transform: translateX(100%); - } - 40% { - transform: translateX(0%); - } - 80%, 100% { - opacity: 1; - transform: translateX(0px); - } -} - -.showright { - animation: showright 1s ease forwards; -} - -@keyframes hideright { - 0% { - transform: translateX(0px); - } - 40% { - transform: translateX(-5%); - } - 80%, 100% { - opacity: 0; - pointer-events: none; - transform: translateX(100%); - } -} - -.hideright { - animation: hideright 1s ease forwards; -} - -@keyframes showleft { - 0% { - transform: translateX(-100%); - } - 40% { - transform: translateX(0%); - } - 80%, 100% { - opacity: 1; - transform: translateX(0px); - } -} - -.showleft { - animation: showleft 1s ease forwards; -} - -@keyframes hideleft { - 0% { - transform: translateX(0px); - } - 40% { - transform: translateX(5%); - } - 80%, 100% { - opacity: 0; - pointer-events: none; - transform: translateX(-100%); - } -} - -.hideleft { - animation: hideleft 1s ease forwards; -} - - -#ui { - position: absolute; - top: 50%; -} - -#wrapper { - height: auto; - margin-bottom: 10px; - min-width: 275px; - margin: 0 0 8px 0; - border-radius: 10px; -} - -#main { - margin: 12px 16px 12px 56px; - position: relative; -} - -#main::before { - font-size: 24px; - top: calc(50% - 12px); - left: -40px; - line-height: 24px; - position: absolute; -} - -#message { - font-size: 16px; - font-weight: 600; -} - -/* Light Blue */ - -.lightblue-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #234799; - font-size: 28px; -} - -.lightblue { - background-color: rgba(240, 240, 240, 0.85); - color: #234799; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.lightblue-border { - border-left: 4px solid #234799; -} - -/* Light Green */ - -.lightgreen-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #20ab4d; - font-size: 28px; -} - -.lightgreen { - background-color: rgba(240, 240, 240, 0.85); - color: #20ab4d; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.lightgreen-border { - border-left: 4px solid #20ab4d; -} - -/* Light Red */ - -.lightred-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #dc3545; - font-size: 28px; -} - -.lightred { - background-color: rgba(240, 240, 240, 0.85); - color: #dc3545; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.lightred-border { - border-left: 4px solid #dc3545; -} - -/* Light Grey */ - -.lightgrey-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #646464; - font-size: 28px; -} - -.lightgrey { - background-color: rgba(240, 240, 240, 0.85); - color: #646464; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.lightgrey-border { - border-left: 4px solid #646464; -} - -/* Dark Blue */ - -.darkblue-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #2f83ff; - font-size: 28px; -} - -.darkblue { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.darkblue-border { - border-left: 4px solid #2f83ff; -} - -/* Dark Green */ - -.darkgreen-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #47cf73; - font-size: 28px; -} - -.darkgreen { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.darkgreen-border { - border-left: 4px solid #47cf73; -} - -/* Dark Red */ - -.darkred-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #dc3545; - font-size: 28px; -} - -.darkred { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.darkred-border { - border-left: 4px solid #dc3545; -} - -/* Dark Grey */ - -.darkgrey-icon::before { - font-family: "Font Awesome 5 Free"; - content: "\f05a"; - color: #969696; - font-size: 28px; -} - -.darkgrey { - background-color: rgba(20, 20, 20, 0.85); - color: #fff; - padding: 5px 5px 5px 5px; - margin-bottom: 5px; -} - -.darkgrey-border { - border-left: 4px solid #969696; -} \ No newline at end of file diff --git a/resources/[notify]/okokTextUI/web/ui.html b/resources/[notify]/okokTextUI/web/ui.html deleted file mode 100644 index ae22eb828..000000000 --- a/resources/[notify]/okokTextUI/web/ui.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - -
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/resources/[standalone]/okokChatV2/.fxap b/resources/[standalone]/okokChatV2/.fxap deleted file mode 100644 index 98465e731..000000000 Binary files a/resources/[standalone]/okokChatV2/.fxap and /dev/null differ diff --git a/resources/[standalone]/okokChatV2/README.md b/resources/[standalone]/okokChatV2/README.md deleted file mode 100644 index e71fb11b5..000000000 --- a/resources/[standalone]/okokChatV2/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Hi, thank you for buying okokChat! :) - -If you need help contact me on discord: okok#3488 -Discord server: https://discord.gg/okok -Docs: https://docs.okokscripts.io/ - --> Installation Guide: https://docs.okokscripts.io/scripts/okokchat \ No newline at end of file diff --git a/resources/[standalone]/okokChatV2/client.lua b/resources/[standalone]/okokChatV2/client.lua deleted file mode 100644 index 8bda12623..000000000 --- a/resources/[standalone]/okokChatV2/client.lua +++ /dev/null @@ -1,225 +0,0 @@ -local players = {} -local defaultScale = 0.7 -- Text scale -local displayTime = 3500 -- Duration to display the text (in ms) -local distToDraw = 250 -- Min. distance to draw - -local pedDisplaying = {} - -local function DrawText3D(coords, text, color) - local camCoords = GetGameplayCamCoord() - local dist = #(coords - camCoords) - local scale = 200 / (GetGameplayCamFov() * dist) - SetTextColour(color.r, color.g, color.b, color.a) - SetTextScale(0.0, defaultScale * scale) - SetTextDropshadow(0, 0, 0, 0, 55) - SetTextDropShadow() - SetTextFont(6) - SetTextCentre(true) - BeginTextCommandDisplayText("STRING") - AddTextComponentSubstringPlayerName(text) - SetDrawOrigin(coords, 0) - EndTextCommandDisplayText(0.0, 0.0) - ClearDrawOrigin() -end - -local function Display(ped, text, color) - local playerPed = PlayerPedId() - local playerCoords = GetEntityCoords(playerPed) - local pedCoords = GetEntityCoords(ped) - local dist = #(playerCoords - pedCoords) - if dist <= distToDraw then - pedDisplaying[ped] = (pedDisplaying[ped] or 1) + 1 - local display = true - Citizen.CreateThread(function() - Wait(displayTime) - display = false - end) - local offset = 0.7 + pedDisplaying[ped] * 0.15 - while display do - if HasEntityClearLosToEntity(playerPed, ped, 17 ) then - local x, y, z = table.unpack(GetEntityCoords(ped)) - z = z + offset - DrawText3D(vector3(x, y, z), text, color) - end - Wait(0) - end - pedDisplaying[ped] = pedDisplaying[ped] - 1 - end -end - --- For 3dme: -RegisterNetEvent('okokChat:3dme') -AddEventHandler('okokChat:3dme', function(text, serverId) - local player = GetPlayerFromServerId(serverId) - if player ~= -1 then - local ped = GetPlayerPed(player) - local color = { r = 0, g = 0, b = 255, a = 255 } -- blue color - Display(ped, text, color) - end -end) - --- For 3ddo: -RegisterNetEvent('okokChat:3ddo') -AddEventHandler('okokChat:3ddo', function(text, serverId) - local player = GetPlayerFromServerId(serverId) - if player ~= -1 then - local ped = GetPlayerPed(player) - local color = { r = 222, g = 255, b = 0, a = 255 } -- yellow color - Display(ped, text, color) - end -end) - -exports('Message', function(background, color, icon, title, playername, message, target, image) - TriggerServerEvent('okokChat:ServerMessage', background, color, icon, title, playername, message, target, image) -end) - -AddEventHandler('playerSpawned', function() - TriggerServerEvent('okokChat:onPlayerSpawn') -end) - -RegisterNetEvent("okokChat:getAllPlayers") -AddEventHandler("okokChat:getAllPlayers", function() - local coords = GetEntityCoords(PlayerPedId()) - local closePlayers = {} - local allPlayers = GetActivePlayers() - local playerCount = 1 - local pedID = PlayerPedId() - - for i = 1, #allPlayers do - local playerId = allPlayers[i] - local playerPed = GetPlayerPed(playerId) - local playerCoords = GetEntityCoords(playerPed) - - table.insert(closePlayers, GetPlayerServerId(playerId)) - playerCount += 1 - end - - TriggerServerEvent("okokChat:SetClosePlayers", closePlayers) -end) - -RegisterNetEvent("okokChat:checkDeathStatus") -AddEventHandler("okokChat:checkDeathStatus", function() - local ped = GetPlayerPed(-1) - TriggerServerEvent('okokChat:deathStatus', IsEntityDead(ped)) -end) - -RegisterNetEvent("okokChat:Notification") -AddEventHandler("okokChat:Notification", function(info, text) - exports['okokNotify']:Alert(info.title, text, info.time, info.type) -end) - -Citizen.CreateThread(function() - - if Config.JobChat then - TriggerEvent('chat:addSuggestion', '/'..Config.JobCommand, 'JOB message', { - { name="message", help="message to send" }, - }) - end - - if Config.EnableOOC then - TriggerEvent('chat:addSuggestion', '/'..Config.OOCCommand, 'OOC message', { - { name="message", help="message to send" }, - }) - end - - if Config.AllowPlayersToClearTheirChat then - TriggerEvent('chat:addSuggestion', '/'..Config.ClearChatCommand, 'Clear chat', {}) - end - - if Config.EnableHideChat then - TriggerEvent('chat:addSuggestion', '/'..Config.HideChatCommand, 'Hide chat', {}) - end - - if Config.EnableStaffCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.StaffCommand, 'Send a message as staff', { - { name="message", help="message to send" }, - }) - end - - if Config.AllowStaffsToClearEveryonesChat then - TriggerEvent('chat:addSuggestion', '/'..Config.ClearEveryonesChatCommand, "Clear everyone's chat", {}) - end - - if Config.EnableStaffOnlyCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.StaffOnlyCommand, 'Staff only chat', { - { name="message", help="message to send" }, - }) - end - - if Config.EnableAdvertisementCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.AdvertisementCommand, 'Make an advertisement', { - { name="ad", help="advertisement message" }, - }) - end - - if Config.EnableAnonymousCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.AnonymousCommand, 'Send an anonymous message', { - { name="message", help="message to send" }, - }) - end - - if Config.EnableTwitchCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.TwitchCommand, 'Twitch message', { - { name="message", help="message to send" }, - }) - end - - if Config.EnableYoutubeCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.YoutubeCommand, 'YouTube message', { - { name="message", help="message to send" }, - }) - end - - if Config.EnableTwitterCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.TwitterCommand, 'Twitter message', { - { name="message", help="message to send" }, - }) - end - - if Config.EnablePoliceCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.PoliceCommand, 'Police message', { - { name="message", help="message to send" }, - }) - end - - if Config.EnableAmbulanceCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.AmbulanceCommand, 'Ambulance message', { - { name="message", help="message to send" }, - }) - end - - if Config.TimeOutPlayers then - TriggerEvent('chat:addSuggestion', '/'..Config.TimeOutCommand, 'Mute player', { - { name="id", help="id of the player to mute" }, - { name="time", help="time in minutes" } - }) - - TriggerEvent('chat:addSuggestion', '/'..Config.RemoveTimeOutCommand, 'Unmute player', { - { name="id", help="id of the player to unmute" } - }) - end - - if Config.EnableMe then - TriggerEvent('chat:addSuggestion', '/'..Config.MeCommand, 'Send a me message', { - { name="action", help="me action" } - }) - end - - if Config.EnableTry then - TriggerEvent('chat:addSuggestion', '/'..Config.TryCommand, 'Send a try message', { - { name="action", help="try action" } - }) - end - - if Config.EnableDo then - TriggerEvent('chat:addSuggestion', '/'..Config.DoCommand, 'Send a do message', { - { name="action", help="do action" } - }) - end - - if Config.EnableDocCommand then - TriggerEvent('chat:addSuggestion', '/'..Config.DocCommand, 'Send a do message', { - { name="number", help="number countdown" } - }) - end -end) \ No newline at end of file diff --git a/resources/[standalone]/okokChatV2/config.lua b/resources/[standalone]/okokChatV2/config.lua deleted file mode 100644 index cb1522a7c..000000000 --- a/resources/[standalone]/okokChatV2/config.lua +++ /dev/null @@ -1,349 +0,0 @@ -Config = {} - -Config.QBPermissionsUpdate = true -- set it to true if you have the latest Permissions update - --------------------------------- --- [Discord Logs] - -Config.EnableDiscordLogs = true - -Config.IconURL = "" - -Config.ServerName = "" - --- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html - -Config.WebhookColor = "16741888" - --------------------------------- --- [Staff Groups] - -Config.StaffGroups = { -- Groups that can access the different staff chats (/staff, /staffo, /sa) - 'god', - 'admin', - 'mod' -} - --------------------------------- --- [General] - -Config.AllowPlayersToClearTheirChat = true - -Config.ClearChatCommand = 'clear' - -Config.EnableHideChat = true - -Config.HideChatCommand = 'hide' - -Config.ShowIDOnMessage = true -- Shows the player ID on every message that is sent - -Config.ShowIDOnMessageForEveryone = false -- true: shows the player ID for everyone | false: shows it only for staffs - -Config.ClearChatMessageTitle = 'SYSTEM' - -Config.ClearChatMessage = 'Chat ist Sauber!' - --- [Date Format] - -Config.DateFormat = '%H:%M' -- To change the date format check this website - https://www.lua.org/pil/22.1.html - --------------------------------- --- [Time Out] - -Config.TimeOutPlayers = false - -Config.TimeOutCommand = "mute" - -Config.RemoveTimeOutCommand = "unmute" - -Config.ShowTimeOutMessageForEveryone = false - -Config.TimeOutIcon = 'fas fa-gavel' - -Config.MessageTitle = 'SERVER' - -Config.TimeOutMessages = { - ['muted_for'] = '{3} has been muted for {1} minutes', - ['you_muted_for'] = 'You muted {3} for {1} minutes', - ['been_muted_for'] = 'You have been muted for {0} minutes', - - ['you_unmuted'] = 'You unmuted {2}', - ['been_unmuted'] = 'You have been unmuted', - - ['muted_message'] = 'You are muted for {0}', - ['seconds'] = ' seconds', - ['minutes'] = ' minutes', - ['hours'] = ' hours', -} - --------------------------------- --- [Job] - -Config.JobChat = false - -Config.JobCommand = 'jobc' - -Config.JobIcon = 'fas fa-briefcase' - --------------------------------- --- [Private Message] - -Config.EnablePM = true - -Config.PMCommand = 'pm' - -Config.PMIcon = 'fas fa-comment pm-icon' - -Config.PMMessageTitle = "PM" - --------------------------------- --- [OOC/Me/Do/Try] - -Config.Distance = 20.0 - --------------------------------- --- [OOC] - -Config.EnableOOC = false - -Config.OOCCommand = 'ooc' - -Config.OOCIcon = 'fas fa-door-open' - -Config.OOCMessageTitle = 'OOC' - -Config.OOCMessageWithoutCommand = false -- true: sends OOC message without command (/ooc) | false: doesn't send any message without it being a command - --------------------------------- --- [Me] - -Config.EnableMeCommand = true - -Config.Enable3DMe = true - -Config.MeCommand = 'me' - -Config.MeIcon = 'fas fa-comment me-icon' - -Config.MeMessageTitle = 'ME' - --------------------------------- --- [Do] - -Config.EnableDoCommand = false - -Config.Enable3DDo = false - -Config.DoCommand = 'do' - -Config.DoIcon = 'fas fa-comment do-icon' - -Config.DoMessageTitle = 'DO' - --------------------------------- --- [Try] - -Config.EnableTryCommand = false - -Config.TryCommand = 'try' - -Config.TryIcon = 'fas fa-comment try-icon' - -Config.TryMessageTitle = 'TRY' - --------------------------------- --- [Staff] - -Config.EnableStaffCommand = false - -Config.StaffCommand = 'staff' - -Config.StaffMessageTitle = 'STAFF' - -Config.StaffIcon = 'fas fa-shield-alt' - -Config.AllowStaffsToClearEveryonesChat = false - -Config.ClearEveryonesChatCommand = 'clearall' - -Config.StaffSteamName = false - --- [Staff Only] - -Config.EnableStaffOnlyCommand = false - -Config.StaffOnlyCommand = 'staffo' - -Config.StaffOnlyMessageTitle = 'STAFF ONLY' - -Config.StaffOnlyIcon = 'fas fa-eye-slash' - -Config.StaffOnlySteamName = false - --- [Server Announcement] - -Config.EnableServerAnnouncement = true - -Config.ServerAnnouncementCommand = 'sa' - -Config.AnnouncementIcon = 'fas fa-exclamation-circle' - -Config.AnnouncementMessageTitle = 'Regierung' - --------------------------------- --- [Advertisements] - -Config.EnableAdvertisementCommand = true - -Config.AdvertisementCommand = 'ad' - -Config.AdvertisementPrice = 1000 - -Config.AdvertisementCooldown = 5 -- in minutes - -Config.AdvertisementIcon = 'fas fa-ad' - --------------------------------- --- [Anonymous/Dark] - -Config.EnableAnonymousCommand = false - -Config.AnonymousCommand = 'anon' - -Config.AnonymousPrice = 1000 - -Config.AnonymousCooldown = 5 -- in minutes - -Config.WhatJobsCantSeeAnonymousChat = { - 'police', - 'ambulance', -} - -Config.AnonymousIcon = 'fas fa-mask' - --------------------------------- --- [Twitch] - -Config.EnableTwitchCommand = false - -Config.TwitchCommand = 'twitch' - --- Types of identifiers: steam: | license: | xbl: | live: | discord: | fivem: | ip: -Config.TwitchList = { - 'steam:110000118a12j8a', -- Example, change this -} - -Config.TwitchIcon = 'fab fa-twitch' - --------------------------------- --- [Youtube] - -Config.EnableYoutubeCommand = false - -Config.YoutubeCommand = 'youtube' - --- Types of identifiers: steam: | license: | xbl: | live: | discord: | fivem: | ip: -Config.YoutubeList = { - 'steam:110000118a12j8a', -- Example, change this -} - -Config.YoutubeIcon = 'fab fa-youtube' - --------------------------------- --- [Twitter] - -Config.EnableTwitterCommand = false - -Config.TwitterCommand = 'twitter' - -Config.TwitterIcon = 'fab fa-twitter' - --------------------------------- --- [Police] - -Config.EnablePoliceCommand = false - -Config.PoliceCommand = 'police' - -Config.PoliceJobName = 'police' - -Config.PoliceIcon = 'fas fa-bullhorn' - --------------------------------- --- [Ambulance] - -Config.EnableAmbulanceCommand = false - -Config.AmbulanceCommand = 'ambulance' - -Config.AmbulanceJobName = 'ambulance' - -Config.AmbulanceIcon = 'fas fa-ambulance' - --------------------------------- --- [DOC Countdown] - -Config.EnableDocCommand = false - -Config.DocCommand = 'doc' - -Config.DocIcon = 'fas fa-clock' - -Config.DocMessageTitle = 'DOC' - --------------------------------- --- [Auto Message] - -Config.EnableAutoMessage = false - -Config.AutoMessageTime = 30 -- (in minutes) will send messages every x minutes - -Config.AutoMessages = { - "CLOSED BETA // Bei Fragen oder Problemen die euer RP stören, per /support melden!", - "CLOSED BETA // Allgemeine Bugs unter #ClosedBeta >> Bug Reports" -} - --------------------------------- --- [Notifications] - -Config.NotificationsText = { - ['disable_chat'] = { title = 'SYSTEM', message = 'You disabled the chat', time = 5000, type = 'info'}, - ['enable_chat'] = { title = 'SYSTEM', message = 'You enabled the chat', time = 5000, type = 'info'}, - ['ad_success'] = { title = 'ADVERTISEMENT', message = 'Advertisement successfully made for ${price}€', time = 5000, type = 'success'}, - ['ad_no_money'] = { title = 'ADVERTISEMENT', message = "You don't have enough money to make an advertisement", time = 5000, type = 'error'}, - ['ad_too_quick'] = { title = 'ADVERTISEMENT', message = "You can't advertise so quickly", time = 5000, type = 'info'}, - ['mute_not_adm'] = { title = 'SYSTEM', message = 'You are not an admin', time = 5000, type = 'error'}, - ['mute_id_inv'] = { title = 'SYSTEM', message = 'The id is invalid', time = 5000, type = 'error'}, - ['mute_time_inv'] = { title = 'SYSTEM', message = 'The mute time is invalid', time = 5000, type = 'error'}, - ['alr_muted'] = { title = 'SYSTEM', message = 'This person is already muted', time = 5000, type = 'error'}, - ['alr_unmuted'] = { title = 'SYSTEM', message = 'This person is already unmuted', time = 5000, type = 'error'}, - ['an_success'] = { title = 'ANONYMOUS', message = 'Advertisement successfully made for price€', time = 5000, type = 'success'}, - ['an_no_money'] = { title = 'ANONYMOUS', message = "You don't have enough money to make an advertisement", time = 5000, type = 'error'}, - ['an_too_quick'] = { title = 'ANONYMOUS', message = "You can't advertise so quickly", time = 5000, type = 'error'}, - ['an_not_allowed'] = { title = 'ANONYMOUS', message = "You are not allowed to send messages in the anonymous chat", time = 5000, type = 'error'}, - ['is_muted'] = { title = 'ANONYMOUS', message = "This player is muted", time = 5000, type = 'error'}, -} - -Config.WebhookText = { - ['clear_all'] = 'Cleared all chats', - ['staff_msg'] = 'Staff message', - ['staff_chat_msg'] = 'Staff chat message', - ['sv_an'] = 'Server announcement', - ['ad'] = 'Advertisement', - ['twitch'] = 'Twitch', - ['youtube'] = 'Youtube', - ['twitter'] = 'Twitter', - ['police'] = 'Police', - ['ambulance'] = 'Ambulance', - ['job_chat'] = 'Job chat [${job}]', - ['pm_chat'] = 'Private Message to ${name} [${id}]', - ['ooc'] = 'OOC', - ['me'] = 'ME', - ['do'] = 'DO', - ['try'] = 'TRY', - ['muted'] = 'Muted [${id}]', - ['muted_for'] = 'For ${muteTime} minutes', - ['unmuted'] = 'Unmuted [${id}]', - ['p_unmuted'] = 'Player has been unmuted', - ['anon'] = 'Anonymous', -} \ No newline at end of file diff --git a/resources/[standalone]/okokChatV2/fxmanifest.lua b/resources/[standalone]/okokChatV2/fxmanifest.lua deleted file mode 100644 index ad25b94aa..000000000 --- a/resources/[standalone]/okokChatV2/fxmanifest.lua +++ /dev/null @@ -1,37 +0,0 @@ -fx_version 'cerulean' - -game 'gta5' - -author 'okok#3488' -description 'okokChatV2' - -files { - 'web/*.*' -} - -shared_script 'config.lua' - -client_scripts { - 'client.lua' -} - -server_scripts { - '@oxmysql/lib/MySQL.lua', - 'server.lua' -} - -chat_theme 'gtao' { - styleSheet = 'web/styles.css', - msgTemplates = { - default = '{0}{1}' - } -} - -lua54 'yes' - -escrow_ignore { - 'config.lua', - 'client.lua', - 'server.lua' -} -dependency '/assetpacks' \ No newline at end of file diff --git a/resources/[standalone]/okokChatV2/server.lua b/resources/[standalone]/okokChatV2/server.lua deleted file mode 100644 index cf1a19239..000000000 --- a/resources/[standalone]/okokChatV2/server.lua +++ /dev/null @@ -1,1521 +0,0 @@ -local QBCore = exports["qb-core"]:GetCoreObject() - -local Webhook = '' -- PUT YOUR WEBHOOK LINK HERE - -local adsList = {} -local anonymousList = {} -local chatsHidden = {} -local mutedList = {} -local isDead = false -local checkedDeathStatus = false -local playersList = nil -local onlinePlayers = {} - -function interp(s, tab) - return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end)) -end - -AddEventHandler('onResourceStart', function(resourceName) - if (GetCurrentResourceName() ~= resourceName) then - return - end - for _, playerId in ipairs(GetPlayers()) do - Citizen.Wait(1000) - getNearPlayers(playerId) - break - end -end) - - -RegisterServerEvent('okokChat:onPlayerSpawn') -AddEventHandler('okokChat:onPlayerSpawn', function() - local _source = source - - if #onlinePlayers >= 1 then - local addPlayer = true - for k,v in ipairs(onlinePlayers) do - if v == _source then - addPlayer = false - end - end - - if addPlayer then - onlinePlayers[#onlinePlayers + 1] = _source - end - else - onlinePlayers[#onlinePlayers + 1] = _source - end -end) - -AddEventHandler('playerDropped', function(reason) - local _source = source - for i = 1, #onlinePlayers do - if onlinePlayers[i] == source then - table.remove(onlinePlayers, i) - break - end - end -end) - -RegisterServerEvent("okokChat:SetClosePlayers") -AddEventHandler("okokChat:SetClosePlayers", function(players) - playersList = players - onlinePlayers = playersList -end) - -function getNearPlayers(source) - playersList = nil - TriggerClientEvent("okokChat:getAllPlayers", tonumber(source)) - while playersList == nil do - Citizen.Wait(10) - end - - return playersList -end - -exports.chat:registerMessageHook(function(source, outMessage, hookRef) - local msg = outMessage.args[2] - if string.sub(msg, 1, 1) ~= "/" then - hookRef.cancel() - if Config.OOCMessageWithoutCommand then - OOC(source, msg) - end - end -end) - -RegisterServerEvent("okokChat:ServerMessage") -AddEventHandler("okokChat:ServerMessage", function(background, color, icon, title, playername, message, target, image) - local time = os.date(Config.DateFormat) - if image == nil or image:gsub("%s+", "") == "" then - TriggerClientEvent('chat:addMessage', target, { - template = '
[{3}]{4} {6}
'..message..'
', - args = { background, color, icon, title, playername, message, time } - }) - else - TriggerClientEvent('chat:addMessage', target, { - template = '
[{3}]{4} {6}
'..message..'
', - args = { background, color, icon, title, playername, message, time } - }) - end -end) - -RegisterServerEvent("okokChat:deathStatus") -AddEventHandler("okokChat:deathStatus", function(isPlayerDead) - isDead = isPlayerDead - checkedDeathStatus = true -end) - -------------------------- --- [Me] - -if Config.EnableMeCommand then - RegisterCommand(Config.MeCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmin = playerName.." ["..source.."]" - local length = string.len(Config.MeCommand) - local message = rawCommand:sub(length + 1) - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if Config.Enable3DMe then TriggerClientEvent('okokChat:3dme', -1, "" .. message .. "", source) end - - if chatsHidden[source] == nil then - showToClosePlayers(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.MeMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Config.ShowIDOnMessage then - showToClosePlayersAdmins(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.MeMessageTitle..'] {0} {2}
{1}
', - args = { playerNameAdmin, message, time } - }) - end) - end - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['me'], - message = message, - } - discordWebhook(data) - end - end - end) -end - -------------------------- --- [Do] - -if Config.EnableDoCommand then - RegisterCommand(Config.DoCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmin = playerName.." ["..source.."]" - local length = string.len(Config.DoCommand) - local message = rawCommand:sub(length + 1) - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if Config.Enable3DDo then TriggerClientEvent('okokChat:3ddo', -1, "" .. message .. "", source) end - - if chatsHidden[source] == nil then - showToClosePlayers(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.DoMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Config.ShowIDOnMessage then - showToClosePlayersAdmins(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.DoMessageTitle..'] {0} {2}
{1}
', - args = { playerNameAdmin, message, time } - }) - end) - end - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['do'], - message = message, - } - discordWebhook(data) - end - end - end) -end - -------------------------- --- [Try] - -if Config.EnableTryCommand then - RegisterCommand(Config.TryCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmin = playerName.." ["..source.."]" - local length = string.len(Config.TryCommand) - local message = rawCommand:sub(length + 1) - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if math.random(0, 1) == 0 then return end - - if chatsHidden[source] == nil then - showToClosePlayers(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.TryMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Config.ShowIDOnMessage then - showToClosePlayersAdmins(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.TryMessageTitle..'] {0} {2}
{1}
', - args = { playerNameAdmin, message, time } - }) - end) - end - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['try'], - message = message, - } - discordWebhook(data) - end - end - end) -end - -------------------------- --- [Auto Message] -local id = 1 -Citizen.CreateThread(function() - while Config.EnableAutoMessage do - Citizen.Wait(Config.AutoMessageTime*60000) - local time = os.date(Config.DateFormat) - TriggerClientEvent('chat:addMessage', -1, { - template = '
['..Config.AnnouncementMessageTitle..'] {1}
{0}
', - args = { Config.AutoMessages[id], time } - }) - if Config.AutoMessages[id+1] ~= nil then - id = id + 1 - else - id = 1 - end - end -end) - -------------------------- --- [Clear Chat] - -if Config.AllowPlayersToClearTheirChat then - RegisterCommand(Config.ClearChatCommand, function(source, args, rawCommand) - TriggerClientEvent('chat:clear', source) - end) -end - -if Config.AllowStaffsToClearEveryonesChat then - RegisterCommand(Config.ClearEveryonesChatCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local time = os.date(Config.DateFormat) - - if isAdmin(xPlayer) then - TriggerClientEvent('chat:clear', -1) - showAll(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
'..Config.ClearChatMessageTitle..' {0}
'..Config.ClearChatMessage..'
', - args = { time } - }) - end) - - if Config.ShowIDOnMessage then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
'..Config.ClearChatMessageTitle..' {0}
'..Config.ClearChatMessage..'
', - args = { time } - }) - end) - end - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['clear_all'], - message = Config.ClearEveryonesChatCommand, - } - discordWebhook(data) - end - end - end) -end - -------------------------- --- [Hide Chat] - -if Config.EnableHideChat then - RegisterCommand(Config.HideChatCommand, function(source, args, rawCommand) - if chatsHidden[source] == nil then - chatsHidden[source] = true - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['disable_chat'], Config.NotificationsText['disable_chat'].message) - else - chatsHidden[source] = nil - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['enable_chat'], Config.NotificationsText['enable_chat'].message) - end - end) -end - -------------------------- --- [Staff] - -if Config.EnableStaffCommand then - RegisterCommand(Config.StaffCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.StaffCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - - if Config.StaffSteamName then - playerName = xPlayer.PlayerData.name - end - - if message:gsub("%s+", "") ~= "" then - if isAdmin(xPlayer) then - showToEveryoneNotHidden(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.StaffMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['staff_msg'], - message = message, - } - discordWebhook(data) - end - end - end - end) -end - -------------------------- --- [Staff Only] - -if Config.EnableStaffOnlyCommand then - RegisterCommand(Config.StaffOnlyCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.StaffOnlyCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - - if Config.StaffSteamName then - playerName = xPlayer.PlayerData.name - end - - if message:gsub("%s+", "") ~= "" then - if chatsHidden[source] == nil then - if isAdmin(xPlayer) then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
['..Config.StaffOnlyMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['staff_chat_msg'], - message = message, - } - discordWebhook(data) - end - end - end - end - end) -end - -------------------------- --- [Server Announcement] - -if Config.EnableServerAnnouncement then - RegisterCommand(Config.ServerAnnouncementCommand, function(source, args, rawCommand) - local xPlayer = nil - local length = string.len(Config.ServerAnnouncementCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - - if source ~= 0 and source ~= -1 then - xPlayer = QBCore.Functions.GetPlayer(source) - end - - if message:gsub("%s+", "") ~= "" then - if source <= 0 then - TriggerClientEvent('chat:addMessage', -1, { - template = '
['..Config.AnnouncementMessageTitle..'] {1}
{0}
', - args = { message, time } - }) - elseif isAdmin(xPlayer) then - TriggerClientEvent('chat:addMessage', -1, { - template = '
['..Config.AnnouncementMessageTitle..'] {1}
{0}
', - args = { message, time } - }) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['sv_an'], - message = message, - } - discordWebhook(data) - end - end - end - end) -end - -------------------------- --- [Advertisement] - -if Config.EnableAdvertisementCommand then - RegisterCommand(Config.AdvertisementCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.AdvertisementCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmins = xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - local bankMoney = xPlayer.PlayerData.money.bank - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - if adsList[source] == nil then - if bankMoney >= Config.AdvertisementPrice then - xPlayer.Functions.RemoveMoney('bank', Config.AdvertisementPrice) - showAll(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['ad'], - message = message, - } - discordWebhook(data) - end - - if Config.ShowIDOnMessage then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '', - args = { playerNameAdmins, message, time } - }) - end) - end - - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['ad_success'], interp(Config.NotificationsText['ad_success'].message, {price = Config.AdvertisementPrice})) - adsList[source] = { - time = Config.AdvertisementCooldown * 60, - pastTime = 0, - timeLeft = Config.AdvertisementCooldown * 60 - } - - while (adsList[source].time > adsList[source].pastTime) do - Citizen.Wait(1000) - adsList[source].pastTime = adsList[source].pastTime + 1 - adsList[source].timeLeft = adsList[source].time - adsList[source].pastTime - end - adsList[source] = nil - else - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['ad_no_money'], Config.NotificationsText['ad_no_money'].message) - end - else - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['ad_too_quick'], Config.NotificationsText['ad_too_quick'].message) - end - end - end) -end - -------------------------- --- [Twitch] - -if Config.EnableTwitchCommand then - RegisterCommand(Config.TwitchCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.TwitchCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmins = xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - local twitch = twitchPermission(source) - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - if twitch then - showAll(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
{0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['twitch'], - message = message, - } - discordWebhook(data) - end - - if Config.ShowIDOnMessage then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
{0} {2}
{1}
', - args = { playerNameAdmins, message, time } - }) - end) - end - end - end - end) -end - -function twitchPermission(id) - for i, a in ipairs(Config.TwitchList) do - for x, b in ipairs(GetPlayerIdentifiers(id)) do - if string.lower(b) == string.lower(a) then - return true - end - end - end -end - -------------------------- --- [Youtube] - -if Config.EnableYoutubeCommand then - RegisterCommand(Config.YoutubeCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.YoutubeCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmins = xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - local youtube = youtubePermission(source) - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - if youtube then - showAll(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
{0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['youtube'], - message = message, - } - discordWebhook(data) - end - - if Config.ShowIDOnMessage then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
{0} {2}
{1}
', - args = { playerNameAdmins, message, time } - }) - end) - end - end - end - end) -end - -function youtubePermission(id) - for i, a in ipairs(Config.YoutubeList) do - for x, b in ipairs(GetPlayerIdentifiers(id)) do - if string.lower(b) == string.lower(a) then - return true - end - end - end -end - -------------------------- --- [Twitter] - -if Config.EnableTwitterCommand then - RegisterCommand(Config.TwitterCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.TwitterCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmins = xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
'..Config.TimeOutMessages['muted_message']..'
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - showAll(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
{0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['twitter'], - message = message, - } - discordWebhook(data) - end - - if Config.ShowIDOnMessage then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
{0} {2}
{1}
', - args = { playerNameAdmins, message, time } - }) - end) - end - end - end) -end - -------------------------- --- [Police] - -if Config.EnablePoliceCommand then - RegisterCommand(Config.PoliceCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.PoliceCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmins = xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - local job = xPlayer.PlayerData.job.name - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - if job == Config.PoliceJobName then - showAll(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
{0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['police'], - message = message, - } - discordWebhook(data) - end - - if Config.ShowIDOnMessage then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
{0} {2}
{1}
', - args = { playerNameAdmins, message, time } - }) - end) - end - end - end - end) -end - -------------------------- --- [Ambulance] - -if Config.EnableAmbulanceCommand then - RegisterCommand(Config.AmbulanceCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.AmbulanceCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmins = xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - local job = xPlayer.PlayerData.job.name - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - if job == Config.AmbulanceJobName then - showAll(function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
{0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['ambulance'], - message = message, - } - discordWebhook(data) - end - - if Config.ShowIDOnMessage then - showOnlyForAdmins(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
{0} {2}
{1}
', - args = { playerNameAdmins, message, time } - }) - end) - end - end - end - end) -end - -------------------------- --- [Jobs] - -if Config.JobChat then - RegisterCommand(Config.JobCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.JobCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmin = playerName.." ["..source.."]" - local job = xPlayer.PlayerData.job - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - showForJob(job.name, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..job.label..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Config.ShowIDOnMessage then - showForJobAdmins(job.name, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..job.label..'] {0} {2}
{1}
', - args = { playerNameAdmin, message, time } - }) - end) - end - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = interp(Config.WebhookText['job_chat'], {job = job.label}), - message = message, - } - discordWebhook(data) - end - end - end) -end - -------------------------- --- [Private Messages] - -if Config.EnablePM then - RegisterCommand(Config.PMCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local message = table.concat(args, " ",2) - local time = os.date(Config.DateFormat) - local id = tonumber(args[1]) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if id == source then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - - xTarget = QBCore.Functions.GetPlayer(id) - - if xTarget == nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - - xTargetName = xTarget.PlayerData.charinfo.firstname.." "..xTarget.PlayerData.charinfo.lastname - - if chatsHidden[id] ~= nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['is_muted'], Config.NotificationsText['is_muted'].message) return end - - TriggerClientEvent('chat:addMessage', source, { - template = '
['..Config.PMMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - - TriggerClientEvent('chat:addMessage', id, { - template = '
['..Config.PMMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = interp(Config.WebhookText['pm_chat'], {name = xTargetName, id = id}), - message = message, - } - discordWebhook(data) - end - end) -end - -------------------------- --- [OOC] - -if Config.EnableOOC then - function OOC(source, message) - local xPlayer = QBCore.Functions.GetPlayer(source) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" or xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname - local playerNameAdmin = playerName.." ["..source.."]" - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if message:gsub("%s+", "") == "" then return end - - if chatsHidden[source] == nil then - showToClosePlayers(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.OOCMessageTitle..'] {0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Config.ShowIDOnMessage then - showToClosePlayersAdmins(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.OOCMessageTitle..'] {0} {2}
{1}
', - args = { playerNameAdmin, message, time } - }) - end) - end - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['ooc'], - message = message, - } - discordWebhook(data) - end - end - end - - RegisterCommand(Config.OOCCommand, function(source, args, rawCommand) - local length = string.len(Config.OOCCommand) - local message = rawCommand:sub(length + 1) - OOC(source, message) - end) -end - -------------------------- --- [Time out] - -if Config.TimeOutPlayers then - RegisterCommand(Config.TimeOutCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local id = tonumber(args[1]) - local muteTime = tonumber(args[2]) - local time = os.date(Config.DateFormat) - local xTarget = nil - local xTargetName = nil - - if not isAdmin(xPlayer) then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_not_adm'], Config.NotificationsText['mute_not_adm'].message) return end - if id == nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - if muteTime == nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_time_inv'], Config.NotificationsText['mute_time_inv'].message) return end - if id == source then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - - xTarget = QBCore.Functions.GetPlayer(id) - - if xTarget == nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - - xTargetName = xTarget.PlayerData.charinfo.firstname.." "..xTarget.PlayerData.charinfo.lastname - - if mutedList[id] ~= nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['alr_muted'], Config.NotificationsText['alr_muted'].message) return end - - mutedList[id] = { - time = muteTime * 60, - pastTime = 0, - timeLeft = muteTime * 60 - } - - if Config.ShowTimeOutMessageForEveryone then - showMuteMessageToEveryone(id, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
{0} {2}
'..Config.TimeOutMessages['muted_for']..'
', - args = { Config.MessageTitle, muteTime, time, xTargetName } - }) - end) - else - TriggerClientEvent('chat:addMessage', source, { - template = '
{0} {2}
'..Config.TimeOutMessages['you_muted_for']..'
', - args = { Config.MessageTitle, muteTime, time, xTargetName } - }) - end - - TriggerClientEvent('chat:addMessage', id, { - template = '
SERVER {1}
'..Config.TimeOutMessages['been_muted_for']..'
', - args = { muteTime, time } - }) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = interp(Config.WebhookText['muted'], {id = id}), - message = interp(Config.WebhookText['muted_for'], {muteTime = muteTime}), - } - discordWebhook(data) - end - - while (mutedList[id].time > mutedList[id].pastTime) do - Citizen.Wait(1000) - mutedList[id].pastTime = mutedList[id].pastTime + 1 - mutedList[id].timeLeft = mutedList[id].time - mutedList[id].pastTime - end - mutedList[id] = nil - - end) - - RegisterCommand(Config.RemoveTimeOutCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local id = tonumber(args[1]) - local time = os.date(Config.DateFormat) - local xTarget = nil - local xTargetName = nil - - if not isAdmin(xPlayer) then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_not_adm'], Config.NotificationsText['mute_not_adm'].message) return end - if id == nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - if id == source then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - - xTarget = QBCore.Functions.GetPlayer(id) - - if xTarget == nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['mute_id_inv'], Config.NotificationsText['mute_id_inv'].message) return end - - xTargetName = xTarget.PlayerData.charinfo.firstname.." "..xTarget.PlayerData.charinfo.lastname - - if mutedList[id] == nil then TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['alr_unmuted'], Config.NotificationsText['alr_unmuted'].message) return end - - TriggerClientEvent('chat:addMessage', source, { - template = '
{0} {1}
'..Config.TimeOutMessages['you_unmuted']..'
', - args = { Config.MessageTitle, time, xTargetName } - }) - - TriggerClientEvent('chat:addMessage', id, { - template = '
{0} {1}
'..Config.TimeOutMessages['been_unmuted']..'
', - args = { Config.MessageTitle, time } - }) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = interp(Config.WebhookText['unmuted'], {id = id}), - message = Config.WebhookText['p_unmuted'], - } - discordWebhook(data) - end - - mutedList[id] = nil - - end) -end - -function SecondsToClock(seconds) - local seconds = tonumber(seconds) - - if seconds <= 0 then - return "00"; - else - local timeString = "" - hours = string.format("%02.f", math.floor(seconds/3600)); - mins = string.format("%02.f", math.floor(seconds/60 - (hours*60))); - secs = string.format("%02.f", math.floor(seconds - hours*3600 - mins *60)); - - timeString = hours..":"..mins..":"..secs..Config.TimeOutMessages['hours'] - - if hours == "00" then timeString = mins..":"..secs..Config.TimeOutMessages['minutes'] end - if hours == "00" and mins == "00" then timeString = math.floor(seconds)..Config.TimeOutMessages['seconds'] end - - return timeString - end -end - -------------------------- --- [Anonymous] - -if Config.EnableAnonymousCommand then - RegisterCommand(Config.AnonymousCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local length = string.len(Config.AnonymousCommand) - local message = rawCommand:sub(length + 1) - local time = os.date(Config.DateFormat) - local bankMoney = xPlayer.PlayerData.money.bank - local playerName = "Anonymous" - local playerNameAdmins = xPlayer.PlayerData.charinfo.firstname.." "..xPlayer.PlayerData.charinfo.lastname.." ["..source.."]" - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - if chatsHidden[source] == nil then - if message:gsub("%s+", "") ~= "" then - if not isAnonymousChatBlacklisted(xPlayer) then - if anonymousList[source] == nil then - if bankMoney >= Config.AnonymousPrice then - xPlayer.Functions.RemoveMoney('bank', Config.AnonymousPrice) - showOnlyForAnonymous(function(anonymous) - TriggerClientEvent('chat:addMessage', anonymous, { - template = '
{0} {2}
{1}
', - args = { playerName, message, time } - }) - end) - - if Webhook ~= '' then - local identifierlist = ExtractIdentifiers(xPlayer.PlayerData.source) - local data = { - playerid = xPlayer.PlayerData.source, - identifier = identifierlist.license:gsub("license2:", ""), - discord = "<@"..identifierlist.discord:gsub("discord:", "")..">", - type = Config.WebhookText['anon'], - message = message, - } - discordWebhook(data) - end - - if Config.ShowIDOnMessage then - showOnlyForAdminsAnonymous(function(admins) - TriggerClientEvent('chat:addMessage', admins, { - template = '
{0} {2}
{1}
', - args = { playerNameAdmins, message, time } - }) - end) - end - - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['an_success'], Config.NotificationsText['an_success'].message) - anonymousList[source] = { - time = Config.AdvertisementCooldown * 2, - pastTime = 0, - timeLeft = Config.AdvertisementCooldown * 2 - } - - while (anonymousList[source].time > anonymousList[source].pastTime) do - Citizen.Wait(1000) - anonymousList[source].pastTime = anonymousList[source].pastTime + 1 - anonymousList[source].timeLeft = anonymousList[source].time - anonymousList[source].pastTime - end - anonymousList[source] = nil - else - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['an_no_money'], Config.NotificationsText['an_no_money'].message) - end - else - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['an_too_quick'], Config.NotificationsText['an_too_quick'].message) - end - else - TriggerClientEvent('okokChat:Notification', source, Config.NotificationsText['an_not_allowed'], Config.NotificationsText['an_not_allowed'].message) - end - end - end - end) -end - --- [DOC] - -if Config.EnableDocCommand then - RegisterCommand(Config.DocCommand, function(source, args, rawCommand) - local xPlayer = QBCore.Functions.GetPlayer(source) - local time = os.date(Config.DateFormat) - local playerName = Config.ShowIDOnMessageForEveryone and getName(xPlayer.identifier).." ["..source.."]" or getName(xPlayer.identifier) - local playerNameAdmin = playerName.." ["..source.."]" - local length = string.len(Config.DocCommand) - local message = tonumber(rawCommand:sub(length + 1)) - local number = 1 - - if mutedList[source] ~= nil then - TriggerClientEvent('chat:addMessage', source, { - template = '
'..Config.MessageTitle..' {1}
You are muted for {0}
', - args = { SecondsToClock(mutedList[source].timeLeft), time } - }) - return - end - - while number <= message do - local toShow = number .. '/' ..message - Wait(1000) - if chatsHidden[source] == nil then - showToClosePlayers(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.DocMessageTitle..'] {0} {2}
{1}
', - args = { playerName, toShow, time } - }) - end) - - end - - if Config.ShowIDOnMessage then - showToClosePlayersAdmins(xPlayer, function(players) - TriggerClientEvent('chat:addMessage', players, { - template = '
['..Config.DocMessageTitle..'] {0} {2}
{1}
', - args = { playerNameAdmin, toShow, time } - }) - end) - end - number = number + 1 - end - end) -end - -function isAnonymousChatBlacklisted(xPlayer) - if xPlayer ~= nil then - for k,v in ipairs(Config.WhatJobsCantSeeAnonymousChat) do - if xPlayer.PlayerData.job.name == v then - return true - end - end - end - return false -end - -function showOnlyForAnonymous(anonymous) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if not Config.ShowIDOnMessage and chatsHidden[xPlayer.PlayerData.source] == nil and not isAnonymousChatBlacklisted(xPlayer) then - anonymous(v) - elseif Config.ShowIDOnMessage and chatsHidden[xPlayer.PlayerData.source] == nil and not isAdmin(xPlayer) and not isAnonymousChatBlacklisted(xPlayer) then - anonymous(v) - end - end - end -end - -function showOnlyForAdminsAnonymous(admins) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if isAdmin(xPlayer) and chatsHidden[xPlayer.PlayerData.source] == nil and not isAnonymousChatBlacklisted(xPlayer) then - admins(v) - end - end - end -end - -------------------------- --- [Functions] - -function isAdmin(xPlayer) - if xPlayer ~= nil then - local playerGroup = QBCore.Functions.GetPermission(xPlayer.PlayerData.source) - if Config.QBPermissionsUpdate then - for group, value in pairs(playerGroup) do - if value then - for k,v in ipairs(Config.StaffGroups) do - if group == v then - return true - end - end - end - end - else - for k,v in ipairs(Config.StaffGroups) do - if playerGroup == v then - return true - end - end - end - end - - return false -end - -function showOnlyForAdmins(admins) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if isAdmin(xPlayer) and chatsHidden[xPlayer.PlayerData.source] == nil then - admins(v) - end - end - end -end - -function showAll(players) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if not Config.ShowIDOnMessage and chatsHidden[xPlayer.PlayerData.source] == nil then - players(v) - elseif Config.ShowIDOnMessage and chatsHidden[xPlayer.PlayerData.source] == nil and not isAdmin(xPlayer) then - players(v) - end - end - end -end - -function showToEveryoneNotHidden(players) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if chatsHidden[xPlayer.PlayerData.source] == nil then - players(v) - end - end - end -end - -function showMuteMessageToEveryone(id, players) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if chatsHidden[xPlayer.PlayerData.source] == nil and id ~= v then - players(v) - end - end - end -end - -function showForJob(job, players) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if not Config.ShowIDOnMessage and xPlayer.PlayerData.job.name == job and chatsHidden[xPlayer.PlayerData.source] == nil then - players(v) - elseif Config.ShowIDOnMessage and not isAdmin(xPlayer) and xPlayer.PlayerData.job.name == job and chatsHidden[xPlayer.PlayerData.source] == nil then - players(v) - end - end - end -end - -function showForJobAdmins(job, players) - for k,v in ipairs(onlinePlayers) do - local xPlayer = QBCore.Functions.GetPlayer(v) - if xPlayer ~= nil then - if xPlayer.PlayerData.job.name == job and chatsHidden[xPlayer.PlayerData.source] == nil and isAdmin(xPlayer) then - players(v) - end - end - end -end - -function showToClosePlayers(xPlayer, admins) - local ped = GetPlayerPed(xPlayer.PlayerData.source) - local playerCoords = GetEntityCoords(ped, false) - for k,v in ipairs(onlinePlayers) do - local xTarget = QBCore.Functions.GetPlayer(v) - if xTarget ~= nil then - if not Config.ShowIDOnMessage and chatsHidden[xTarget.source] == nil then - local tped = GetPlayerPed(v) - local targetCoords = GetEntityCoords(tped, false) - if #(vector3(playerCoords.x, playerCoords.y, playerCoords.z) - vector3(targetCoords.x, targetCoords.y, targetCoords.z)) < Config.Distance then - admins(v) - end - elseif Config.ShowIDOnMessage and not isAdmin(xTarget) and chatsHidden[xTarget.source] == nil then - local tped = GetPlayerPed(v) - local targetCoords = GetEntityCoords(tped, false) - if #(vector3(playerCoords.x, playerCoords.y, playerCoords.z) - vector3(targetCoords.x, targetCoords.y, targetCoords.z)) < Config.Distance then - admins(v) - end - end - end - end -end - -function showToClosePlayersAdmins(xPlayer, admins) - local ped = GetPlayerPed(xPlayer.PlayerData.source) - local playerCoords = GetEntityCoords(ped, false) - for k,v in ipairs(onlinePlayers) do - local xTarget = QBCore.Functions.GetPlayer(v) - if xTarget ~= nil then - if chatsHidden[xTarget.source] == nil and isAdmin(xTarget) then - local tped = GetPlayerPed(v) - local targetCoords = GetEntityCoords(tped, false) - if #(vector3(playerCoords.x, playerCoords.y, playerCoords.z) - vector3(targetCoords.x, targetCoords.y, targetCoords.z)) < Config.Distance then - admins(v) - end - end - end - end -end - --------------------------- IDENTIFIERS - -function ExtractIdentifiers(id) - local identifiers = { - steam = "", - ip = "", - discord = "", - license = "", - xbl = "", - live = "" - } - - for i = 0, GetNumPlayerIdentifiers(id) - 1 do - local playerID = GetPlayerIdentifier(id, i) - - if string.find(playerID, "steam") then - identifiers.steam = playerID - elseif string.find(playerID, "ip") then - identifiers.ip = playerID - elseif string.find(playerID, "discord") then - identifiers.discord = playerID - elseif string.find(playerID, "license") then - identifiers.license = playerID - elseif string.find(playerID, "xbl") then - identifiers.xbl = playerID - elseif string.find(playerID, "live") then - identifiers.live = playerID - end - end - - return identifiers -end - --------------------------- DISCORD WEBHOOK - -function discordWebhook(data) - - local information = { - { - ["color"] = Config.WebhookColor, - ["author"] = { - ["icon_url"] = Config.IconURL, - ["name"] = Config.ServerName..' - Logs', - }, - ["title"] = 'CHAT', - ["description"] = '**Type:** '..data.type..'\n**Message:** '..data.message..'\n\n**ID:** '..data.playerid..'\n**Identifier:** '..data.identifier..'\n**Discord:** '..data.discord, - ["footer"] = { - ["text"] = os.date(Config.DateFormat), - } - } - } - - PerformHttpRequest(Webhook, function(err, text, headers) end, 'POST', json.encode({username = Config.BotName, embeds = information}), {['Content-Type'] = 'application/json'}) - return -end \ No newline at end of file diff --git a/resources/[standalone]/okokChatV2/web/styles.css b/resources/[standalone]/okokChatV2/web/styles.css deleted file mode 100644 index 96473f61c..000000000 --- a/resources/[standalone]/okokChatV2/web/styles.css +++ /dev/null @@ -1,410 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@200;300;400;500;700;800;900&display=swap'); -@import url('https://use.fontawesome.com/releases/v5.15.4/css/all.css'); - -* { - font-family: 'Tajawal', sans-serif; -} - -.chat-window { - position: absolute; - top: 2.5%; - left: 2.055%; - width: 38%; - height: 33.3% !important; - max-width: 27.5%; - background-color: rgba(0, 0, 0, 0.0) !important; -} - -.msg { - font-family: 'Tajawal', sans-serif; - color: #fff; - font-size: calc(1.8vh); - filter: url(#svgDropShadowFilter); - line-height: calc(2.7vh * 1.2); - margin-bottom: 0.9%; -} - -.chat-messages { - margin: 0; - height: 100%; -} - -.chat-message { - display: block !important; - padding: 0.6vw; - padding-top: 0.6vw; - padding-bottom: 0.7vw; - border-radius: 0.625rem; - width: 75.6%; - overflow: hidden; - word-break: break-word; - box-sizing: border-box; - box-shadow: 0rem 0rem 0.625rem -0.3125rem rgba(0, 0, 0, 1); - line-height: 1; -} - -.chat-message div { - line-height: 1 !important; -} - -.message { - margin-top: 0.9%; - font-weight: 300; -} - -.time { - font-size: 0.875rem; - font-size: calc(1.3vh); - color: #e1e1e1; -} - -.msg > span > span > b { - font-family: 'Tajawal', sans-serif; - font-weight: normal; - vertical-align: baseline; - padding-right: 0.6875rem; - line-height: 1; - font-size: calc(2.7vh); -} - -.msg > span > span > span { - vertical-align: baseline; -} - -.msg i:first-of-type { - font-style: normal; - color: #fff; -} - -.chat-input { - font-size: 1.65vh; - position: absolute; - top: 37%; - left: 2.055%; - width: 38%; - max-width: 20.8%; - box-sizing: border-box; -} - -.chat-input > div.input { - background-color: rgba(27, 29, 32, 0.95); - border-radius: 0.625rem; -} - -.chat-input .prefix { - height: 100%; - vertical-align: middle; - padding-left: 0.5vh; - text-transform: uppercase; - font-weight: bold; - display: inline-block; -} - -.input { - align-items: center; -} - -.prefix { - line-height: 3.80vh !important; -} - -.suggestions { - margin-top: 0.9%; - list-style-type: none; - padding: 0.9%; - padding-left: 6.54%; - font-size: calc(1.7vh); - box-sizing: border-box; - color: white; - background-color: rgba(31, 94, 255, 0.9); - width: 100%; - border-radius: 0.625rem; - border: none; - box-shadow: 0rem 0rem 0.625rem -0.3125rem rgba(0, 0, 0, 1); -} - -.suggestion { - font-size: calc(1.8vh); - margin-bottom: 0.03125rem; -} - -textarea { - resize: none; - font-size: calc(2vh); - color: #fff; - line-height: 1.85vh !important; - padding-top: 3%; -} - -.multiline { - margin-left: 0; - text-indent: 0; -} - -.fas { - vertical-align: middle; -} - -/* START STAFF */ - -.staff { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(19, 138, 70, 0.9) 100%); -} - -.fa-shield-alt { - color: rgba(42, 42, 42, 0.9); - background-color: #1ebc62; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END STAFF */ - -/* START ONLY STAFF */ - -.staffonly { - background: rgba(42, 42, 42, 0.9); -} - -.fa-eye-slash { - color: rgba(42, 42, 42, 0.9); - background-color: #1ebc62; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END ONLY STAFF */ - -/* START SERVER ANNOUNCEMENT */ - -.server-msg { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(204, 61, 61, 0.9) 100%); -} - -.fa-exclamation-circle { - color: rgba(42, 42, 42, 0.9); - background-color: #cc3d3d; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END SERVER ANNOUNCEMENT */ - -/* START TWITCH */ - -.twitch { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(96, 67, 139, 0.9) 100%); -} - -.fa-twitch { - color: rgba(42, 42, 42, 0.9); - background-color: #9c70de; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END TWITCH */ - -/* START YOUTUBE */ - -.youtube { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(101, 0, 0, 0.9) 100%); -} - -.fa-youtube { - color: rgba(42, 42, 42, 0.9); - background-color: #ff0000; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END YOUTUBE */ - -/* START TWITTER */ - -.twitter { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(25, 107, 143, 0.9) 100%); -} - -.fa-twitter { - color: rgba(42, 42, 42, 0.9); - background-color: #2aa9e0; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END TWITTER */ - -/* START SYSTEM */ - -.system { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(134, 84, 23, 0.9) 100%); -} - -.fa-cog { - color: rgba(42, 42, 42, 0.9); - background-color: #df7b00; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END SYSTEM */ - -/* START ADVERTISEMENT */ - -.advertisement { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(84, 150, 38, 0.9) 100%); -} - -.fa-ad { - color: rgba(42, 42, 42, 0.9); - background-color: #81db44; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END ADVERTISEMENT */ - -/* START POLICE */ - -.police { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(40, 55, 116, 0.9) 100%); -} - -.fa-bullhorn { - color: rgba(42, 42, 42, 0.9); - background-color: #4a6cfd; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END POLICE */ - -/* START AMBULANCE */ - -.ambulance { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(152, 113, 22, 0.9) 100%); -} - -.fa-ambulance { - color: rgba(42, 42, 42, 0.9); - background-color: #e3a71b; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END AMBULANCE */ - -/* START OOC */ - -.ooc { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(125, 125, 125, 0.9) 100%); -} - -.fa-door-open { - color: rgba(42, 42, 42, 0.9); - background-color: #ababab; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END OOC */ - -/* START ME */ - -.me { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(121, 184, 250, 0.9) 100%); -} - -.me-icon { - background-color: #79b8fa; -} - -/* END ME */ - -/* START DO */ - -.do { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(121, 250, 164, 0.9) 100%); -} - -.do-icon { - background-color: #79faa4; -} - -/* END DO */ - -/* START TRY */ - -.try { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(243, 73, 113, 0.9) 100%); -} - -.try-icon { - background-color: #f34971; -} - -/* END TRY */ - -/* START ANONYMOUS */ - -.anonymous { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(9, 78, 33, 0.9) 100%); -} - -.fa-mask { - color: rgba(42, 42, 42, 0.9); - background-color: #2e874d; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END ANONYMOUS */ - -/* START JOBS */ - -.jobchat { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(53, 219, 194, 0.9) 100%); -} - -.fa-briefcase { - color: rgba(42, 42, 42, 0.9); - background-color: #35dbc2; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END JOBS */ - -/* START TIMEOUT */ - -.muted { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(223, 123, 0, 0.9) 100%); -} - -.fa-gavel { - color: rgba(42, 42, 42, 0.9); - background-color: #df7b00; - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -/* END TIMEOUT */ - -/* START PM */ - -.pm { - background: linear-gradient(90deg, rgba(42, 42, 42, 0.9) 0%, rgba(113, 81, 156, 0.9) 100%); -} - -.fa-comment { - color: rgba(42, 42, 42, 0.9); - padding: 0.3125rem; - border-radius: 0.3125rem; -} - -.pm-icon { - background-color: #71519c; -} - -/* END PM */ \ No newline at end of file diff --git a/resources/[test]/okokCrafting/.fxap b/resources/[test]/okokCrafting/.fxap deleted file mode 100644 index 22e016992..000000000 Binary files a/resources/[test]/okokCrafting/.fxap and /dev/null differ diff --git a/resources/[test]/okokCrafting/README.md b/resources/[test]/okokCrafting/README.md deleted file mode 100644 index 7a9927879..000000000 --- a/resources/[test]/okokCrafting/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Hi, thank you for buying okokCrafting! :) - -If you need help contact me on discord: okok#3488 -Discord server: https://discord.gg/okok -Docs: https://docs.okokscripts.io/ - --> Installation Guide: https://docs.okokscripts.io/scripts/okokcrafting \ No newline at end of file diff --git a/resources/[test]/okokCrafting/cl_utils.lua b/resources/[test]/okokCrafting/cl_utils.lua deleted file mode 100644 index 742c01a6c..000000000 --- a/resources/[test]/okokCrafting/cl_utils.lua +++ /dev/null @@ -1,249 +0,0 @@ -QBCore = exports[Config.qbPrefix.."-core"]:GetCoreObject() - -RegisterNetEvent(Config.EventPrefix..":notification") -AddEventHandler(Config.EventPrefix..":notification", function(title, text, time, type) - exports['okokNotify']:Alert(title, text, time, type) -end) - -RegisterNetEvent(Config.EventPrefix..":openTextUI") -AddEventHandler(Config.EventPrefix..":openTextUI", function(text) - exports['qb-core']:DrawText(text, 'left') -end) - -RegisterNetEvent(Config.EventPrefix..":closeTextUI") -AddEventHandler(Config.EventPrefix..":closeTextUI", function() - exports['qb-core']:HideText() -end) - -function onOpenMenu() - -- Executed when the menu is opened -end - -function onCloseMenu() - -- Executed when the menu is closed -end - -function claimAll(workbench, CraftQueues) - TriggerServerEvent(Config.EventPrefix..':claimAll', workbench, CraftQueues) -end - -Citizen.CreateThread(function() - if Config.UseXP then - if Config.SameLevelForAllTables then - TriggerEvent('chat:addSuggestion', '/'..Config.SetXPCommand, _L('suggestion_xp').maintext, { - { name=_L('suggestion_xp').id, help=_L('suggestion_xp').idtext }, - { name=_L('suggestion_xp').xp, help=_L('suggestion_xp').xptext }, - }) - - TriggerEvent('chat:addSuggestion', '/'..Config.SetLevelCommand, _L('suggestion_level').maintext, { - { name=_L('suggestion_level').id, help=_L('suggestion_level').idtext }, - { name=_L('suggestion_level').level, help=_L('suggestion_level').leveltext }, - }) - else - TriggerEvent('chat:addSuggestion', '/'..Config.SetXPCommand, _L('suggestion_xp').maintext, { - { name=_L('suggestion_xp').id, help=_L('suggestion_xp').idtext }, - { name=_L('suggestion_xp').xp, help=_L('suggestion_xp').xptext }, - { name=_L('suggestion_xp').workbench, help=_L('suggestion_xp').workbenchtext }, - }) - - TriggerEvent('chat:addSuggestion', '/'..Config.SetLevelCommand, _L('suggestion_level').maintext, { - { name=_L('suggestion_level').id, help=_L('suggestion_level').idtext }, - { name=_L('suggestion_level').level, help=_L('suggestion_level').leveltext }, - { name=_L('suggestion_level').workbench, help=_L('suggestion_level').workbenchtext }, - }) - end - end -end) - -Citizen.CreateThread(function() - while PlayerData == nil do - PlayerData = QBCore.Functions.GetPlayerData() - Citizen.Wait(10) - end - while PlayerData.job == nil do - PlayerData.job = QBCore.Functions.GetPlayerData().job - Citizen.Wait(10) - end - while PlayerData.gang == nil do - PlayerData.gang = QBCore.Functions.GetPlayerData().gang - Citizen.Wait(10) - end - local inZone = false - local num = 0 - local nearZone = false - local enteredRange = false - local inWideRange = false - local ped = PlayerPedId() - - while true do - Citizen.Wait(0) - local playerExists = false - - if not playerExists then - if DoesEntityExist(ped) then - playerExists = true - else - ped = PlayerPedId() - end - end - local playerCoords = GetEntityCoords(ped) - - nearZone = false - inZone = false - - for k,v in pairs(Config.Crafting) do - if v.jobs['all'] ~= nil or checkJob(v.jobs) or checkGang(v.jobs) then - local distance = #(vector3(v.coordinates[1], v.coordinates[2], v.coordinates[3]) - playerCoords) - - if distance < Config.CraftRadius then - if closeWorkbench ~= v.tableID then - closeWorkbench = v.tableID - workbenchCoords = v.coordinates - end - - if not gotQueue then - gotQueue = true - QBCore.Functions.TriggerCallback(Config.EventPrefix..":getQueue", function(queue, queues) - CraftQueues = queues - WorkbenchCraft = queue - end, v.tableID) - end - end - - if distance < v.radius + 2 then - local zDistance = playerCoords.z - v.coordinates[3] - nearZone = true - if waitMore and not isCraftOpen then - waitMore = false - end - if not Config.NotInterectableTables then - if distance < v.radius and zDistance < 3 and zDistance > -3 then - inZone = true - - if IsControlJustReleased(0, Config.Key) and not IsEntityDead(ped) then - if GetVehiclePedIsUsing(ped) == 0 then - waitMore = true - if not isCraftOpen then - TriggerEvent(Config.EventPrefix..':openWorkbench', k) - end - else - TriggerEvent(Config.EventPrefix..':notification', _L('inside_vehicle').title, _L('inside_vehicle').text, _L('inside_vehicle').time, _L('inside_vehicle').type) - end - end - end - end - elseif not waitMore and not inWideRange then - waitMore = true - end - end - end - - if nearZone and not enteredRange then - enteredRange = true - inWideRange = true - elseif not nearZone and enteredRange then - enteredRange = false - inWideRange = false - end - - if inZone and not hasEntered then - if Config.UseOkokTextUI then - exports['okokTextUI']:Open(_L('textUI').text, _L('textUI').color, _L('textUI').side) - else - TriggerEvent(Config.EventPrefix..':openTextUI', _L('textUI').text) - end - hasEntered = true - elseif not inZone and hasEntered then - if Config.UseOkokTextUI then - exports['okokTextUI']:Close() - else - TriggerEvent(Config.EventPrefix..':closeTextUI') - end - hasEntered = false - end - - if waitMore then - Citizen.Wait(1000) - end - end -end) - -Citizen.CreateThread(function() - while true do - local canCraft = false - local queue = CraftQueues[closeWorkbench] - if CraftQueues[closeWorkbench] ~= nil and closeWorkbench ~= "" and workbenchCoords ~= nil then - local playerCoords = GetEntityCoords(PlayerPedId()) - local distance = #(vector3(workbenchCoords[1], workbenchCoords[2], workbenchCoords[3]) - playerCoords) - local zDistance = playerCoords.z - workbenchCoords[3] - - if distance < Config.CraftRadius then - local craftingItemID = 1 - for k,v in ipairs(CraftQueues[closeWorkbench]) do - if v.time >= 0 and not v.isDone then - craftingItemID = k - canCraft = true - break - end - end - if canCraft then - if not updateTable then - updateTable = true - end - local craftTime = CraftQueues[closeWorkbench][craftingItemID].time - CraftQueues[closeWorkbench][craftingItemID].isPending = false - SendNUIMessage({ - action = "ShowCraftCount", - time = CraftQueues[closeWorkbench][craftingItemID].time, - name = CraftQueues[closeWorkbench][craftingItemID].itemName, - }) - - if CraftQueues[closeWorkbench][craftingItemID].time <= 0 then - CraftQueues[closeWorkbench][craftingItemID].time = 0 - CraftQueues[closeWorkbench][craftingItemID].isDone = true - local randomNum = math.random(1, 100) - if randomNum <= tonumber(CraftQueues[closeWorkbench][craftingItemID].sucPC) then - SendNUIMessage({ - action = "CompleteCraftCount", - name = CraftQueues[closeWorkbench][craftingItemID].itemName, - }) - else - CraftQueues[closeWorkbench][craftingItemID].suc = false - SendNUIMessage({ - action = "FailedCraftCount", - name = CraftQueues[closeWorkbench][craftingItemID].itemName, - }) - end - SendNUIMessage({ - action = "updateCraftingItems", - queue = CraftQueues[closeWorkbench], - }) - SendNUIMessage({ - action = "HideCraftCount", - }) - Citizen.Wait(500) - else - SendNUIMessage({ - action = "updateCraftingItems", - queue = CraftQueues[closeWorkbench], - }) - CraftQueues[closeWorkbench][craftingItemID].time = craftTime - 1 - Citizen.Wait(1000) - end - else - if updateTable then - updateTable = false - QBCore.Functions.TriggerCallback(Config.EventPrefix..":updateQueue", function(cb) - - end, CraftQueues) - end - Citizen.Wait(2000) - end - else - Citizen.Wait(3000) - end - else - Citizen.Wait(5000) - end - end -end) \ No newline at end of file diff --git a/resources/[test]/okokCrafting/client.lua b/resources/[test]/okokCrafting/client.lua deleted file mode 100644 index 780af7b58..000000000 Binary files a/resources/[test]/okokCrafting/client.lua and /dev/null differ diff --git a/resources/[test]/okokCrafting/config.lua b/resources/[test]/okokCrafting/config.lua deleted file mode 100644 index b525bc730..000000000 --- a/resources/[test]/okokCrafting/config.lua +++ /dev/null @@ -1,595 +0,0 @@ -Config, Locales = {}, {} - -Config.Debug = false -Config.DoubleXP = false -Config.EventPrefix = 'okokCrafting' -Config.xpColumnsName = 'xp' -Config.craftQueryColumnName = 'okokcrafts' -Config.qbPrefix = 'qb' -Config.QBCorePrefix = 'QBCore' -Config.Locale = 'de' -- en / pt / gr / fr / de -Config.UseOkokTextUI = true -Config.Key = 38 -Config.HideMinimap = true -Config.ShowBlips = true -Config.ShowFloorBlips = true -Config.ShowAllCrafts = true -Config.UseXP = false -Config.SameLevelForAllTables = false -Config.MaxLevel = 20 -Config.StartXP = 0 -Config.LevelMultiplier = 1.05 -Config.GiveXPOnCraftFailed = true -Config.SetXPCommand = 'setcraftxp' -Config.SetLevelCommand = 'setcraftlevel' -Config.CraftRadius = 5 -Config.MaxCraftsPerWorkbench = 10 -Config.UseCategories = true -Config.InventoryDirectory = 'qs-inventory/html/images' -Config.UseOx_inventory = false -Config.NotInterectableTables = false - -Config.AdminGroups = { - 'god', - 'admin', - 'mod' -} - -Config.itemNames = { - metalscrap = 'Metal Scrap', - weapon_assaultrifle = 'Assault Rifle', - iron = 'Iron', - bandage = 'Bandage', - firstaid = 'First Aid', - ['10kgoldchain'] = '10kgoldchain', - plastic = 'Plastic', - aluminum = 'Aluminum', - cash = 'Money', - -- Zusätzliche Waffenkomponenten - shortened_gunbarrel = 'Verkuerzter Waffenlauf', - shaft = 'Schaft', - trigger_unit = 'Abzugseinheit', - revolver_barrel = 'Revolverlauf', - drum_mechanism = 'Trommelmechanismus', - weapon_handle = 'Griff', - pistol_barrel = 'Pistolenlauf', - weapon_sled = 'Schlitten (Upper Slide)', - gun_handle = 'Griffstueck', - ceramic_barrel = 'Keramiklauf', - small_triggersystem = 'Kleines Abzugssystem', - weapon_batton = 'Waffenlauf Lang', - --- Zubehör Nahkampfwaffen - dagger_blade = 'Dolchklinge', - machete_blade = 'Macheteklinge', - handle = 'Holzgriff', - switchblade_mechanism = 'Mechanismus für Springmesser', - small_blade = 'kleine Klinge', - axe_head = 'Axtkopf', - reinforced_handle = 'verstärkter Griff', - -- Drogenherstellung - opium_poppy = 'Schlafmohn', - opium = 'Opium', - acetic = 'Essiganhydrid', - injection = 'Spritze', - codeine_syrup = 'Codein-Sirup', - campers_fuel = 'Campers Fuel', - sweets_candies = 'Süßigkeiten', - ephedrin = 'Ephedrin', - chemical_set = 'Chemikalien-Set', - meth_pipe = 'Pipe', - magic_mushroom = 'Mutterkorn', - lysergic_acid = 'Lysergsäure', - blotter_paper = 'Blotterpapier', - ---- Drogen - lsd_papers = 'LSD-Papes', - ready_methpipe = 'Meth Pipe', - lean = 'Lean', - heroin_injection = 'Heroin in Spritze', - -- Ausrüstung - armor = 'Weste', - -- Waffen - weapon_ceramicpistol = 'Ceramic Pistol', - weapon_navyrevolver = 'Navy Revolver', - weapon_pistol50 = 'Tropical Eagle', - weapon_assaultrifle = 'AK 75', - weapon_dbshotgun = 'Double-barrel Shotgun', - weapon_microsmg = 'Micro SMG', - weapon_minismg = 'Mini SMG', - weapon_bullpuprifle = 'QBX-92-3', - weapon_marksmanpistol = 'Marksman Pistol', - weapon_gusenberg = 'Gusenberg Sweeper', - -- Nahkampfwaffen - weapon_dagger = 'Dagger', - weapon_machete = 'Machete', - weapon_switchblade = 'Switchblade', - weapon_hatchet = 'Hatchet', - -- Ressourcen - gunpowder = 'Schwarzpulver', - armaid_plant = 'Aramid Fasern', - steel_ingots = 'Stahlbarren', - copper = 'Kupfer', - log = 'Holzscheit', - -} - -Config.Crafting = { - { - coordinates = vector3(-1802.27, 3089.12, 32.84), - radius = 1, - showMapBlip = false, - marker = {type = 20, r = 255, g = 165, b = 0, a = 155, bobUpAndDown = 0, faceCamera = 0, rotate = 1, textureDict = 0, textureName = 0, drawOnEnts = 0}, - showBlipRadius = 50, - blip = {blipId = 402, blipColor = 7, blipScale = 0.9, blipText = 'Waffenkomponenten'}, - tableName = 'Waffenkomponenten', - tableID = 'components1', - crafts = { - 'shortened_gunbarrel', - 'shaft', - 'trigger_unit', - 'revolver_barrel', - 'drum_mechanism', - 'weapon_handle', - 'pistol_barrel', - 'weapon_sled', - 'gun_handle', - 'ceramic_barrel', - 'small_triggersystem', - 'weapon_batton', - }, - jobs = {['all'] = true}, - }, - { - coordinates = vector4(3092.46, -4713.06, 15.26, 37.66), - radius = 2, - showMapBlip = false, - marker = {type = 20, r = 0, g = 200, b = 255, a = 150, bobUpAndDown = 0, faceCamera = 0, rotate = 1, textureDict = 0, textureName = 0, drawOnEnts = 0}, - showBlipRadius = 50, - blip = {blipId = 566, blipColor = 5, blipScale = 0.8, blipText = 'Waffenherstellung'}, - tableName = 'Waffenherstellung', - tableID = 'weapon_crafting_1', - crafts = { - 'weapon_ceramicpistol', - 'weapon_navyrevolver', - 'weapon_pistol50', - 'weapon_assaultrifle', - 'weapon_dbshotgun', - 'weapon_microsmg', - 'weapon_minismg', - 'weapon_bullpuprifle', - 'weapon_marksmanpistol', - 'weapon_gusenberg', - }, - jobs = {['all'] = true}, - } - -} - -Config.Crafts = { - ['shortened_gunbarrel'] = { - item = 'shortened_gunbarrel', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['shaft'] = { - item = 'shaft', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['trigger_unit'] = { - item = 'trigger_unit', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['revolver_barrel'] = { - item = 'revolver_barrel', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 3, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['drum_mechanism'] = { - item = 'drum_mechanism', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 3, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['weapon_handle'] = { - item = 'weapon_handle', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['pistol_barrel'] = { - item = 'pistol_barrel', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['weapon_sled'] = { - item = 'weapon_sled', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['gun_handle'] = { - item = 'gun_handle', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['ceramic_barrel'] = { - item = 'ceramic_barrel', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['small_triggersystem'] = { - item = 'small_triggersystem', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - ['weapon_batton'] = { - item = 'weapon_batton', - amount = 1, - maxCraft = 5, - successCraftPercentage = 100, - isItem = true, - isDisassemble = false, - time = 3, - levelNeeded = 0, - xpPerCraft = 10, - recipe = { - { 'steel_ingots', 2, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenkomponenten', - }, - - --- Neue Crafting-Rezepte für Waffenherstellung - - ['weapon_ceramicpistol'] = { - item = 'weapon_ceramicpistol', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 1, - xpPerCraft = 20, - recipe = { - { 'ceramic_barrel', 1, true, false }, - { 'gun_handle', 1, true, false }, - { 'small_triggersystem', 1, true, false }, - { 'shaft', 1, true, false }, - { 'pistol_barrel', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_navyrevolver'] = { - item = 'weapon_navyrevolver', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 1, - xpPerCraft = 20, - recipe = { - { 'weapon_handle', 1, true, false }, - { 'revolver_barrel', 1, true, false }, - { 'small_triggersystem', 1, true, false }, - { 'drum_mechanism', 1, true, false }, - { 'shaft', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_pistol50'] = { - item = 'weapon_pistol50', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 1, - xpPerCraft = 20, - recipe = { - { 'shaft', 1, true, false }, - { 'small_triggersystem', 1, true, false }, - { 'gun_handle', 1, true, false }, - { 'pistol_barrel', 1, true, false }, - { 'weapon_sled', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_assaultrifle'] = { - item = 'weapon_assaultrifle', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 2, - xpPerCraft = 30, - recipe = { - { 'gun_handle', 1, true, false }, - { 'trigger_unit', 1, true, false }, - { 'weapon_batton', 1, true, false }, - { 'shaft', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_dbshotgun'] = { - item = 'weapon_dbshotgun', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 2, - xpPerCraft = 30, - recipe = { - { 'shortened_gunbarrel', 2, true, false }, - { 'shaft', 1, true, false }, - { 'trigger_unit', 1, true, false }, - { 'gun_handle', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_microsmg'] = { - item = 'weapon_microsmg', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 2, - xpPerCraft = 30, - recipe = { - { 'shaft', 1, true, false }, - { 'trigger_unit', 1, true, false }, - { 'gun_handle', 1, true, false }, - { 'pistol_barrel', 1, true, false }, - { 'weapon_sled', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_minismg'] = { - item = 'weapon_minismg', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 2, - xpPerCraft = 30, - recipe = { - { 'shaft', 1, true, false }, - { 'trigger_unit', 1, true, false }, - { 'gun_handle', 1, true, false }, - { 'pistol_barrel', 1, true, false }, - { 'weapon_sled', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_bullpuprifle'] = { - item = 'weapon_bullpuprifle', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 3, - xpPerCraft = 40, - recipe = { - { 'gun_handle', 1, true, false }, - { 'trigger_unit', 1, true, false }, - { 'weapon_batton', 1, true, false }, - { 'shaft', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_marksmanpistol'] = { - item = 'weapon_marksmanpistol', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 1, - xpPerCraft = 20, - recipe = { - { 'shaft', 1, true, false }, - { 'small_triggersystem', 1, true, false }, - { 'gun_handle', 1, true, false }, - { 'pistol_barrel', 1, true, false }, - { 'weapon_sled', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - - ['weapon_gusenberg'] = { - item = 'weapon_gusenberg', - amount = 1, - successCraftPercentage = 100, - time = 5, - levelNeeded = 3, - xpPerCraft = 40, - recipe = { - { 'gun_handle', 1, true, false }, - { 'trigger_unit', 1, true, false }, - { 'weapon_batton', 1, true, false }, - { 'shaft', 1, true, false } - }, - job = { '' }, - data = {}, - category = 'Waffenherstellung', -}, - -} --------------------------- DISCORD LOGS - --- To set your Discord Webhook URL go to server.lua, line 3 - -Config.BotName = 'ServerName' -- Write the desired bot name - -Config.ServerName = 'ServerName' -- Write your server's name - -Config.IconURL = '' -- Insert your desired image link - -Config.DateFormat = '%d/%m/%Y [%X]' -- To change the date format check this website - https://www.lua.org/pil/22.1.html - --- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html - -Config.StartCraftWebhookColor = '16127' - -Config.CancelWebhookColor = '16776960' - -Config.ClaimCraftWebhookColor = '65352' - -Config.FailedCraftWebhookColor = '16711680' - --------------------------- LOCALES (DON'T TOUCH) - -function _L(id) - if Locales[Config.Locale][id] then - return Locales[Config.Locale][id] - else - print('Locale '..id..' doesn\'t exist') - end -end - --- diff --git a/resources/[test]/okokCrafting/fxmanifest.lua b/resources/[test]/okokCrafting/fxmanifest.lua deleted file mode 100644 index 034a67ca3..000000000 --- a/resources/[test]/okokCrafting/fxmanifest.lua +++ /dev/null @@ -1,42 +0,0 @@ -fx_version 'cerulean' - -game 'gta5' - -author 'okok#3488' -description 'okokCrafting' -version '1.1.0' - -ui_page 'web/ui.html' - -files { - 'web/*.*', -} - -shared_script 'config.lua' - -client_scripts { - 'locales/*.lua', - 'cl_utils.lua', - 'client.lua', -} - -server_scripts { - '@oxmysql/lib/MySQL.lua', - 'locales/*.lua', - 'sv_utils.lua', - 'server.lua' -} - -lua54 'yes' - -escrow_ignore { - 'config.lua', - 'cl_utils.lua', - 'sv_utils.lua', - 'locales/*.lua', -} - -server_exports { - 'SetLevel' -} -dependency '/assetpacks' \ No newline at end of file diff --git a/resources/[test]/okokCrafting/locales/de.lua b/resources/[test]/okokCrafting/locales/de.lua deleted file mode 100644 index 0383f3044..000000000 --- a/resources/[test]/okokCrafting/locales/de.lua +++ /dev/null @@ -1,133 +0,0 @@ -Locales['de'] = { - - -- Notifications - ['user_xp_set'] = { - title = 'WERKBANK', - text = 'Deine Erfahrungspunkte wurden auf ${s1} gesetzt', - time = 5000, - type = 'info' - }, - ['admin_xp_set'] = { - title = 'WERKBANK', - text = 'Du hast erfolgreich die Erfahrungspunkte von ${s1} zu ${s2} geändert', - time = 5000, - type = 'success' - }, - ['user_xp_set_workbench'] = { - title = 'WERKBANK', - text = 'Deine Erfahrungspunkte wurden in der Werkbank ${s2} auf ${s1} gesetzt', - time = 5000, - type = 'info' - }, - ['admin_xp_set_workbench'] = { - title = 'WERKBANK', - text = 'Du hast erfolgreich die Erfahrungspunkte von ${s1}, in der Werkbank ${s3}, auf ${s2} gesetzt', - time = 5000, - type = 'success' - }, - ['user_level_set'] = { - title = 'WERKBANK', - text = 'Dein Level wurde auf ${s1} geändert', - time = 5000, - type = 'info' - }, - ['admin_level_set'] = { - title = 'WERKBANK', - text = 'Du hast erfolgreich das Level von ${s1} auf ${s2} geändert', - time = 5000, - type = 'success' - }, - ['user_level_set_workbench'] = { - title = 'WERKBANK', - text = 'Dein Level wurde in der Werkbank ${s2} auf ${s1} geändert', - time = 5000, - type = 'info' - }, - ['admin_level_set_workbench'] = { - title = 'WERKBANK', - text = 'Du hast erfolgreich das Level von ${s1}, in der Werkbank ${s3}, auf ${s2} geändert', - time = 5000, - type = 'success' - }, - ['admin_level_no_exist'] = { - title = 'WERKBANK', - text = 'Dieses Level existiert nicht', - time = 5000, - type = 'error' - }, - ['cant_carry'] = { - title = 'WERKBANK', - text = "Du kannst diesen Gegenstand nicht bei dir tragen", - time = 5000, - type = 'error' - }, - ['added_to_queue'] = { - title = 'WERKBANK', - text = '${s1} wurde zur Warteschlange hinzugefügt', - time = 5000, - type = 'success' - }, - ['cant_craft'] = { - title = 'WERKBANK', - text = "Du kannst ${s1} nicht herstellen", - time = 5000, - type = 'error' - }, - ['inside_vehicle'] = { - title = 'WERKBANK', - text = "Du kannst nichts in einem Fahrzeug herstellen", - time = 5000, - type = 'error' - }, - ['queue_limit'] = { - title = 'WERKBANK', - text = 'Die Warteschlange ist bereits voll', - time = 5000, - type = 'error' - }, - ['claimed_item'] = { - title = 'WERKBANK', - text = 'Du hast ${s1} bekommen', - time = 5000, - type = 'success' - }, - ['claimed_all_items'] = { - title = 'WERKBANK', - text = 'Du hast alle Gegenstände bekommen', - time = 5000, - type = 'success' - }, - ['cancel_item'] = { - title = 'WERKBANK', - text = 'Du hast die Herstellung von ${s1} abgebrochen', - time = 5000, - type = 'error' - }, - - -- Chat suggestions - ['suggestion_xp'] = { - maintext = 'Ändere das XP eines Spieler', - id = 'ID', - idtext = "Ziel ID", - xp = 'XP', - xptext = 'XP menge', - workbench = 'Werkbank', - workbenchtext = "ID der Werkbank", - }, - ['suggestion_level'] = { - maintext = 'Ändere das Level eines Spielers', - id = 'ID', - idtext = "Ziel ID", - level = 'Level', - leveltext = 'Level', - workbench = 'Werkbank', - workbenchtext = "ID der Werkbank", - }, - - -- okokTextUI - ['textUI'] = { - text = '[E] Werkbank zu öffnen', - color = 'darkblue', - side = 'left' - }, -} \ No newline at end of file diff --git a/resources/[test]/okokCrafting/locales/en.lua b/resources/[test]/okokCrafting/locales/en.lua deleted file mode 100644 index d1eb65461..000000000 --- a/resources/[test]/okokCrafting/locales/en.lua +++ /dev/null @@ -1,133 +0,0 @@ -Locales['en'] = { - - -- Notifications - ['user_xp_set'] = { - title = 'CRAFTING', - text = 'Your XP was set to ${s1}', - time = 5000, - type = 'info' - }, - ['admin_xp_set'] = { - title = 'CRAFTING', - text = 'You set the XP of ${s1} to ${s2} successfully', - time = 5000, - type = 'success' - }, - ['user_xp_set_workbench'] = { - title = 'CRAFTING', - text = 'Your XP was set to ${s1} in ${s2}', - time = 5000, - type = 'info' - }, - ['admin_xp_set_workbench'] = { - title = 'CRAFTING', - text = 'You set the XP of ${s1} to ${s2} in ${s3} successfully', - time = 5000, - type = 'success' - }, - ['user_level_set'] = { - title = 'CRAFTING', - text = 'Your level was set to ${s1}', - time = 5000, - type = 'info' - }, - ['admin_level_set'] = { - title = 'CRAFTING', - text = 'You set the level of ${s1} to ${s2} successfully', - time = 5000, - type = 'success' - }, - ['user_level_set_workbench'] = { - title = 'CRAFTING', - text = 'Your level was set to ${s1} in ${s2}', - time = 5000, - type = 'info' - }, - ['admin_level_set_workbench'] = { - title = 'CRAFTING', - text = 'You set the level of ${s1} to ${s2} in ${s3} successfully', - time = 5000, - type = 'success' - }, - ['admin_level_no_exist'] = { - title = 'CRAFTING', - text = 'That level does not exist', - time = 5000, - type = 'error' - }, - ['cant_carry'] = { - title = 'CRAFTING', - text = "You can't carry this item", - time = 5000, - type = 'error' - }, - ['added_to_queue'] = { - title = 'CRAFTING', - text = '${s1} added to the crafting queue', - time = 5000, - type = 'success' - }, - ['cant_craft'] = { - title = 'CRAFTING', - text = "You can't craft ${s1}", - time = 5000, - type = 'error' - }, - ['inside_vehicle'] = { - title = 'CRAFTING', - text = "You can't craft inside a vehicle", - time = 5000, - type = 'error' - }, - ['queue_limit'] = { - title = 'CRAFTING', - text = 'You have reached the queue limit', - time = 5000, - type = 'error' - }, - ['claimed_item'] = { - title = 'CRAFTING', - text = 'You have claimed ${s1}', - time = 5000, - type = 'success' - }, - ['claimed_all_items'] = { - title = 'CRAFTING', - text = 'You have claimed all items', - time = 5000, - type = 'success' - }, - ['cancel_item'] = { - title = 'CRAFTING', - text = 'You canceled a crafting of ${s1}', - time = 5000, - type = 'error' - }, - - -- Chat suggestions - ['suggestion_xp'] = { - maintext = 'Set a players crafting XP', - id = 'id', - idtext = "Target's id", - xp = 'XP', - xptext = 'XP amount', - workbench = 'workbench', - workbenchtext = "Workbenche's id", - }, - ['suggestion_level'] = { - maintext = 'Set a players crafting Level', - id = 'id', - idtext = "Target's id", - level = 'Level', - leveltext = 'Level', - workbench = 'workbench', - workbenchtext = "Workbenche's id", - }, - - -- okokTextUI - ['textUI'] = { - text = '[E] Open crafting table', - color = 'darkblue', - side = 'left' - }, -} \ No newline at end of file diff --git a/resources/[test]/okokCrafting/locales/fr.lua b/resources/[test]/okokCrafting/locales/fr.lua deleted file mode 100644 index d2f39a177..000000000 --- a/resources/[test]/okokCrafting/locales/fr.lua +++ /dev/null @@ -1,133 +0,0 @@ -Locales['fr'] = { - - -- Notifications - ['user_xp_set'] = { - title = 'CRAFTING', - text = 'Votre XP a été défini sur ${s1}', - time = 5000, - type = 'info' - }, - ['admin_xp_set'] = { - title = 'CRAFTING', - text = 'Vous avez défini XP de ${s1} sur ${s2} avec succès', - time = 5000, - type = 'success' - }, - ['user_xp_set_workbench'] = { - title = 'CRAFTING', - text = 'Votre XP a été défini de ${s1} en ${s2}', - time = 5000, - type = 'info' - }, - ['admin_xp_set_workbench'] = { - title = 'CRAFTING', - text = 'Vous avez défini XP de ${s1} sur ${s2} en ${s3} avec succès', - time = 5000, - type = 'success' - }, - ['user_level_set'] = { - title = 'CRAFTING', - text = 'Votre niveau a été défini sur ${s1}', - time = 5000, - type = 'info' - }, - ['admin_level_set'] = { - title = 'CRAFTING', - text = 'Vous avez défini le niveau de ${s1} sur ${s2} avec succès', - time = 5000, - type = 'success' - }, - ['user_level_set_workbench'] = { - title = 'CRAFTING', - text = 'Votre niveau a été défini sur ${s1} en ${s2}', - time = 5000, - type = 'info' - }, - ['admin_level_set_workbench'] = { - title = 'CRAFTING', - text = 'Vous avez défini le niveau de ${s1} sur ${s2} en ${s3} avec succès', - time = 5000, - type = 'success' - }, - ['admin_level_no_exist'] = { - title = 'CRAFTING', - text = 'Ce niveau n\'existe pas', - time = 5000, - type = 'error' - }, - ['cant_carry'] = { - title = 'CRAFTING', - text = "Cet objet est trop lourd ! Impossible de le porter", - time = 5000, - type = 'error' - }, - ['added_to_queue'] = { - title = 'CRAFTING', - text = '${s1} ajouté à la file de fabrication', - time = 5000, - type = 'success' - }, - ['cant_craft'] = { - title = 'CRAFTING', - text = "Vous ne pouvez pas fabriquer ${s1}", - time = 5000, - type = 'error' - }, - ['inside_vehicle'] = { - title = 'CRAFTING', - text = "Vous ne pouvez pas fabriquer à l\'intérieur d'un véhicule", - time = 5000, - type = 'error' - }, - ['queue_limit'] = { - title = 'CRAFTING', - text = 'Vous avez atteint la limite de la file de fabrication', - time = 5000, - type = 'error' - }, - ['claimed_item'] = { - title = 'CRAFTING', - text = 'Vous avez reçu ${s1}', - time = 5000, - type = 'success' - }, - ['claimed_all_items'] = { - title = 'CRAFTING', - text = 'Vous avez tout reçu', - time = 5000, - type = 'success' - }, - ['cancel_item'] = { - title = 'CRAFTING', - text = 'Vous avez annulé la fabrication de ${s1}', - time = 5000, - type = 'error' - }, - - -- Chat suggestions - ['suggestion_xp'] = { - maintext = 'Définissez un joueur fabriquant de l\'XP', - id = 'id', - idtext = "ID de la cible", - xp = 'XP', - xptext = 'Montant d\'XP', - workbench = 'workbench', - workbenchtext = "ID des établis", - }, - ['suggestion_level'] = { - maintext = 'Définissez le niveau de craft des joueurs', - id = 'id', - idtext = "ID de la cible", - level = 'Level', - leveltext = 'Niveau', - workbench = 'workbench', - workbenchtext = "ID des établis", - }, - - -- okokTextUI - ['textUI'] = { - text = '[E] Ouvrir l\'établi', - color = 'darkblue', - side = 'left' - }, -} \ No newline at end of file diff --git a/resources/[test]/okokCrafting/locales/gr.lua b/resources/[test]/okokCrafting/locales/gr.lua deleted file mode 100644 index 64ea4e162..000000000 --- a/resources/[test]/okokCrafting/locales/gr.lua +++ /dev/null @@ -1,133 +0,0 @@ -Locales['gr'] = { - - -- Notifications - ['user_xp_set'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Το XP σας ορίστηκε σε ${s1}', - time = 5000, - type = 'info' - }, - ['admin_xp_set'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Ρυθμίζετε το XP του ${s1} σε ${s2} με επιτυχία', - time = 5000, - type = 'success' - }, - ['user_xp_set_workbench'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Το XP σας ορίστηκε σε ${s1} σε ${s2}', - time = 5000, - type = 'info' - }, - ['admin_xp_set_workbench'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Ρυθμίζετε το XP του ${s1} προς ${s2} σε ${s3} με επιτυχία', - time = 5000, - type = 'success' - }, - ['user_level_set'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Το επίπεδό σας ορίστηκε σε ${s1}', - time = 5000, - type = 'info' - }, - ['admin_level_set'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Ρυθμίσετε το επίπεδο του ${s1} προς ${s2} με επιτυχία', - time = 5000, - type = 'success' - }, - ['user_level_set_workbench'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Το επίπεδό σας ορίστηκε σε ${s1} in ${s2}', - time = 5000, - type = 'info' - }, - ['admin_level_set_workbench'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Ρυθμίσετε το επίπεδο του ${s1} προς ${s2} σε ${s3} με επιτυχία', - time = 5000, - type = 'success' - }, - ['admin_level_no_exist'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Αυτό το επίπεδο δεν υπάρχει', - time = 5000, - type = 'error' - }, - ['cant_carry'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = "Δεν μπορείτε να μεταφέρετε αυτό το αντικείμενο", - time = 5000, - type = 'error' - }, - ['added_to_queue'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = '${s1} προστέθηκε στην ουρά χειροτεχνίας', - time = 5000, - type = 'success' - }, - ['cant_craft'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = "Δεν μπορείς να χειροτεχνήσεις ${s1}", - time = 5000, - type = 'error' - }, - ['inside_vehicle'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = "Δεν μπορείτε να κάνετε χειροτεχνία μέσα σε ένα όχημα", - time = 5000, - type = 'error' - }, - ['queue_limit'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Έχετε φτάσει το όριο της ουράς', - time = 5000, - type = 'error' - }, - ['claimed_item'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Έχετε διεκδικήσει ${s1}', - time = 5000, - type = 'success' - }, - ['claimed_all_items'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Έχετε διεκδικήσει όλα τα στοιχεία', - time = 5000, - type = 'success' - }, - ['cancel_item'] = { - title = 'ΚΑΤΑΣΚΕΥΗ', - text = 'Ακυρώσατε μια δημιουργία του ${s1}', - time = 5000, - type = 'error' - }, - - -- Chat suggestions - ['suggestion_xp'] = { - maintext = 'Ρυθμίσετε το επίπεδο του παίκτη', - id = 'ταυτότητα', - idtext = "Ταυτότητα στόχου", - xp = 'XP', - xptext = 'XP ποσό', - workbench = 'πάγκος εργασίας', - workbenchtext = "Ταυτότητα πάγκων εργασίας", - }, - ['suggestion_level'] = { - maintext = 'Ρυθμίσετε το επίπεδο του παίκτη', - id = 'ταυτότητα', - idtext = "Ταυτότητα στόχου", - level = 'Επίπεδο', - leveltext = 'Επίπεδο', - workbench = 'πάγκος εργασίας', - workbenchtext = "Ταυτότητα πάγκων εργασίας", - }, - - -- okokTextUI - ['textUI'] = { - text = '[E] Να ανοίξω το τραπέζι χειροτεχνίας', - color = 'darkblue', - side = 'left' - }, -} \ No newline at end of file diff --git a/resources/[test]/okokCrafting/locales/pt.lua b/resources/[test]/okokCrafting/locales/pt.lua deleted file mode 100644 index 1e040783a..000000000 --- a/resources/[test]/okokCrafting/locales/pt.lua +++ /dev/null @@ -1,133 +0,0 @@ -Locales['pt'] = { - - -- Notifications - ['user_xp_set'] = { - title = 'CRAFTING', - text = 'A tua XP foi alterada para ${s1}', - time = 5000, - type = 'info' - }, - ['admin_xp_set'] = { - title = 'CRAFTING', - text = 'Alteraste a XP de ${s1} para ${s2} com sucesso', - time = 5000, - type = 'success' - }, - ['user_xp_set_workbench'] = { - title = 'CRAFTING', - text = 'A tua XP foi alterada para ${s1} em ${s2}', - time = 5000, - type = 'info' - }, - ['admin_xp_set_workbench'] = { - title = 'CRAFTING', - text = 'Alteraste a XP de ${s1} para ${s2} em ${s3} com sucesso', - time = 5000, - type = 'success' - }, - ['user_level_set'] = { - title = 'CRAFTING', - text = 'O teu nível foi alterado para ${s1}', - time = 5000, - type = 'info' - }, - ['admin_level_set'] = { - title = 'CRAFTING', - text = 'Alteraste o nível de ${s1} em ${s2} com sucesso', - time = 5000, - type = 'success' - }, - ['user_level_set_workbench'] = { - title = 'CRAFTING', - text = 'O teu nível foi alterado para ${s1} em ${s2}', - time = 5000, - type = 'info' - }, - ['admin_level_set_workbench'] = { - title = 'CRAFTING', - text = 'Alteraste o nível de ${s1} para ${s2} em ${s3} com sucesso', - time = 5000, - type = 'success' - }, - ['admin_level_no_exist'] = { - title = 'CRAFTING', - text = 'Esse nível não existe', - time = 5000, - type = 'error' - }, - ['cant_carry'] = { - title = 'CRAFTING', - text = "Não tens espaço suficiente para carregar o item", - time = 5000, - type = 'error' - }, - ['added_to_queue'] = { - title = 'CRAFTING', - text = '${s1} foi adicionado à queue', - time = 5000, - type = 'success' - }, - ['cant_craft'] = { - title = 'CRAFTING', - text = "Não podes craftar ${s1}", - time = 5000, - type = 'error' - }, - ['inside_vehicle'] = { - title = 'CRAFTING', - text = "Não podes craftar dentro de um veículo", - time = 5000, - type = 'error' - }, - ['queue_limit'] = { - title = 'CRAFTING', - text = 'Atingiste o limite da queue', - time = 5000, - type = 'error' - }, - ['claimed_item'] = { - title = 'CRAFTING', - text = 'Resgataste ${s1}', - time = 5000, - type = 'success' - }, - ['claimed_all_items'] = { - title = 'CRAFTING', - text = 'Regataste todos os itens', - time = 5000, - type = 'success' - }, - ['cancel_item'] = { - title = 'CRAFTING', - text = 'Cancelaste o craft de ${s1}', - time = 5000, - type = 'error' - }, - - -- Chat suggestions - ['suggestion_xp'] = { - maintext = 'Define o XP de craft de um jogador', - id = 'id', - idtext = "ID do jogador", - xp = 'XP', - xptext = 'Quantidade de XP', - workbench = 'workbench', - workbenchtext = "ID da workbench", - }, - ['suggestion_level'] = { - maintext = 'Define o nível de craft de um jogador', - id = 'id', - idtext = "ID do jogador", - level = 'Nível', - leveltext = 'Nível', - workbench = 'workbench', - workbenchtext = "ID da workbench", - }, - - -- okokTextUI - ['textUI'] = { - text = '[E] Abrir crafting table', - color = 'darkblue', - side = 'left' - }, -} \ No newline at end of file diff --git a/resources/[test]/okokCrafting/okokcrafting.sql b/resources/[test]/okokCrafting/okokcrafting.sql deleted file mode 100644 index ed47b157f..000000000 --- a/resources/[test]/okokCrafting/okokcrafting.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE players ADD COLUMN xp LONGTEXT NULL; -ALTER TABLE players ADD COLUMN okokcrafts LONGTEXT NULL; \ No newline at end of file diff --git a/resources/[test]/okokCrafting/server.lua b/resources/[test]/okokCrafting/server.lua deleted file mode 100644 index 388234875..000000000 Binary files a/resources/[test]/okokCrafting/server.lua and /dev/null differ diff --git a/resources/[test]/okokCrafting/sv_utils.lua b/resources/[test]/okokCrafting/sv_utils.lua deleted file mode 100644 index a9c6adf8b..000000000 --- a/resources/[test]/okokCrafting/sv_utils.lua +++ /dev/null @@ -1,590 +0,0 @@ -QBCore = exports[Config.qbPrefix.."-core"]:GetCoreObject() - -Webhook = '' - -function getMoney(type, xPlayer) - local moneyCount = 0 - if type == "cash" then - moneyCount = xPlayer.PlayerData.money.cash - else - moneyCount = xPlayer.PlayerData.money.bank - end - - return moneyCount -end - -function addMoney(type, value, xPlayer) - xPlayer.Functions.AddMoney(type, value) -end - -function removeMoney(type, value, xPlayer) - xPlayer.Functions.RemoveMoney(type, value) -end - -function addItem(xPlayer, item, amount, data) - xPlayer.Functions.AddItem(item, tonumber(amount)) -end - -function removeItem(xPlayer, item, amount) - xPlayer.Functions.RemoveItem(item, tonumber(amount)) -end - -function canCarryIt(item, amount, xPlayer) - if Config.UseOx_inventory then - return exports.ox_inventory:CanCarryItem(xPlayer.PlayerData.source, item, amount) - end - - local totalWeight = QBCore.Player.GetTotalWeight(xPlayer.PlayerData.items) - local itemInfo = QBCore.Shared.Items[item:lower()] - if not itemInfo then - TriggerClientEvent('QBCore:Notify', xPlayer.PlayerData.source, 'This item doesn\'t exits', 'error') - return - end - amount = tonumber(amount) - if (totalWeight + (itemInfo['weight'] * amount)) <= 120000 then - return true - else - return false - end -end - -function hasPermission(source) - local staff = false - for k,v in ipairs(Config.AdminGroups) do - if QBCore.Functions.HasPermission(source, v) then - staff = true - break - end - end - - return staff -end - -function MySQLexecute(query, values, func) - return MySQL.query(query, values, func) -end - -function MySQLfetchAll(query, values, func) - return MySQL.query(query, values, func) -end - -function giveXP(xPlayer, xp, workbench) - if Config.SameLevelForAllTables then - MySQLexecute('UPDATE players SET '..Config.xpColumnsName..' = xp+@xp WHERE citizenid = @identifier', { - ['@identifier'] = xPlayer.PlayerData.citizenid, - ['@xp'] = Config.DoubleXP and xp*2 or xp, - }, function (result) - TriggerClientEvent(Config.EventPrefix..':updateXP', xPlayer.PlayerData.source) - end) - else - MySQLexecute('UPDATE players SET '..Config.xpColumnsName..' = JSON_SET(xp, @table, JSON_EXTRACT(xp, @table) + @xp) WHERE citizenid = @identifier', { - ['@identifier'] = xPlayer.PlayerData.citizenid, - ['@xp'] = Config.DoubleXP and xp*2 or xp, - ['@table'] = "$."..workbench, - }, function (result) - TriggerClientEvent(Config.EventPrefix..':updateXP', xPlayer.PlayerData.source) - end) - end -end - -QBCore.Functions.CreateCallback(Config.EventPrefix..":inv2", function(source, cb, item, isMoney) - local xPlayer = QBCore.Functions.GetPlayer(source) - local itemS = {} - if isMoney == "false" then - isMoney = false - elseif isMoney == "true" then - isMoney = true - end - - if isMoney then - local playerMoney = getMoney(item, xPlayer) - itemS.name = item - itemS.amount = playerMoney - else - itemS = xPlayer.Functions.GetItemByName(item) - if itemS == nil then - itemS = { - name = item, - amount = 0 - } - end - if itemS.count ~= nil then - itemS.amount = itemS.count - end - end - - cb(itemS) -end) - -QBCore.Functions.CreateCallback(Config.EventPrefix..":maxCraft", function(source, cb, recipe, maxCraftAmount, isDisassemble, itemC, itmNeeded) - local _source = source - local xPlayer = QBCore.Functions.GetPlayer(_source) - local maxCraft = maxCraftAmount - local itemAmt = 0 - - if not isDisassemble then - for k,v in ipairs(recipe) do - local item = {} - local itemCount = 0 - - if v[4] then - itemCount = getMoney(v[1], xPlayer) - else - item = xPlayer.Functions.GetItemByName(v[1]) - if item == nil then - item = { - name = v[1], - amount = 0 - } - end - if item.count ~= nil then - item.amount = item.count - end - itemCount = item.amount - end - - if itemCount > 0 then - local possibleToCraft = itemCount/tonumber(v[2]) - if possibleToCraft > 0 then - if maxCraft > possibleToCraft then - maxCraft = possibleToCraft - end - else - maxCraft = 0 - break - end - else - maxCraft = 0 - break - end - end - else - local item = xPlayer.Functions.GetItemByName(itemC) - if item == nil then - item = { - name = itemC, - amount = 0 - } - end - if item.count ~= nil then - item.amount = item.count - end - itemAmt = item.amount - - if itemAmt > 0 then - local possibleToCraft = itemAmt/tonumber(itmNeeded) - if possibleToCraft > 0 then - if maxCraft > possibleToCraft then - maxCraft = possibleToCraft - end - else - maxCraft = 0 - end - else - maxCraft = 0 - end - end - - cb(math.floor(maxCraft), itemAmt) -end) - -local function normalizeRecipe(recipe) - local normalized = {} - for _, item in ipairs(recipe) do - local normalizedItem = { item[1], tonumber(item[2]), item[3] == "true" or item[3] == true, item[4] == "true" or item[4] == true } - table.insert(normalized, normalizedItem) - end - return normalized -end - -local function compareRecipes(recipe1, recipe2) - if #recipe1 ~= #recipe2 then - return false - end - for i, item1 in ipairs(recipe1) do - local item2 = recipe2[i] - if item1[1] ~= item2[1] and item1[2] <= item2[2] then - return false - end - end - return true -end - -function craftExistsInWorkbench(workbenchID, itemID, recipe) - for _, workbench in pairs(Config.Crafting) do - if workbench.tableID == workbenchID then - for _, craft in pairs(workbench.crafts) do - if Config.Crafts[craft] == nil then - print("Craft "..craft.." does not exist in Config.Crafts") - return false - end - if Config.Crafts[craft].item == itemID then - local normalizedCraftRecipe = normalizeRecipe(Config.Crafts[craft].recipe) - local normalizedInputRecipe = normalizeRecipe(recipe) - if compareRecipes(normalizedCraftRecipe, normalizedInputRecipe) then - return true - end - end - end - end - end - return false -end - -QBCore.Functions.CreateCallback(Config.EventPrefix..":CanCraftItem", function(source, cb, itemID, recipe, itemName, amount, isItem, workbench, timeCraft, CraftQueues, xp, pc, isDis, itemData) - local xPlayer = QBCore.Functions.GetPlayer(source) - local canCraft = true - if not craftExistsInWorkbench(workbench, itemID, recipe) then - canCraft = false - end - - if not isDis then - for k,v in pairs(recipe) do - if v[4] == "false" then - local item = xPlayer.Functions.GetItemByName(v[1]) - if item == nil then - item = { - name = v[1], - amount = 0 - } - end - if item.count ~= nil then - item.amount = item.count - end - if item.amount < v[2] then - canCraft = false - end - else - local playerMoney = getMoney(v[1], xPlayer) - if playerMoney < v[2] then - canCraft = false - end - end - end - else - local item = xPlayer.Functions.GetItemByName(itemID) - if item == nil then - item = { - name = itemID, - amount = 0 - } - end - if item.count ~= nil then - item.amount = item.count - end - if tonumber(item.amount) < tonumber(amount) then - canCraft = false - end - end - - if canCraft then - if not isDis then - for k,v in pairs(recipe) do - if v[3] == "true" then - if v[4] == "true" then - removeMoney(v[1], v[2], xPlayer) - else - removeItem(xPlayer, v[1], v[2]) - end - end - end - else - removeItem(xPlayer, itemID, tonumber(amount)) - end - - local queue = CraftQueues - if queue ~= nil and queue[workbench] ~= nil then - queue[workbench][#queue[workbench]+1] = { - item = itemID, - recipe = recipe, - amount = amount, - isItem = isItem, - time = timeCraft, - itemName = itemName[itemID], - isDone = false, - isPending = true, - randomID = math.random(100000000, 999999999), - xp = xp, - sucPC = pc, - suc = true, - isDis = isDis, - data = itemData - } - - MySQLexecute('UPDATE players SET '..Config.craftQueryColumnName..' = @okokcrafts WHERE citizenid = @identifier', { - ['@identifier'] = xPlayer.PlayerData.citizenid, - ['@okokcrafts'] = json.encode(queue), - }, function (result) - TriggerClientEvent(Config.EventPrefix..':notification', xPlayer.PlayerData.source, _L('added_to_queue').title, interp(_L('added_to_queue').text, {s1 = itemName[itemID]}), _L('added_to_queue').time, _L('added_to_queue').type) - - if Webhook ~= "" then - data = { - playerid = xPlayer.PlayerData.source, - type = "start-craft", - item = itemName[itemID], - amount = amount, - } - - discordWebhook(data) - end - - cb(queue) - end) - else - if queue == nil then - queue = {} - end - queue[workbench] = {} - queue[workbench] = { - [1] = { - item = itemID, - recipe = recipe, - amount = amount, - isItem = isItem, - time = timeCraft, - itemName = itemName[itemID], - isDone = false, - isPending = true, - randomID = math.random(100000000, 999999999), - xp = xp, - sucPC = pc, - suc = true, - isDis = isDis, - data = itemData - } - } - - MySQLexecute('UPDATE players SET '..Config.craftQueryColumnName..' = @okokcrafts WHERE citizenid = @identifier', { - ['@identifier'] = xPlayer.PlayerData.citizenid, - ['@okokcrafts'] = json.encode(queue), - }, function (result) - TriggerClientEvent(Config.EventPrefix..':notification', xPlayer.PlayerData.source, _L('added_to_queue').title, interp(_L('added_to_queue').text, {s1 = itemName[itemID]}), _L('added_to_queue').time, _L('added_to_queue').type) - - if Webhook ~= "" then - data = { - playerid = xPlayer.PlayerData.source, - type = "start-craft", - item = itemName[itemID], - amount = amount, - } - discordWebhook(data) - end - - cb(queue) - end) - end - else - TriggerClientEvent(Config.EventPrefix..':notification', xPlayer.PlayerData.source, _L('cant_craft').title, interp(_L('cant_craft').text, {s1 = itemName[itemID]}), _L('cant_craft').time, _L('cant_craft').type) - cb(false) - end -end) - -RegisterServerEvent(Config.EventPrefix..':claimAll') -AddEventHandler(Config.EventPrefix..':claimAll', function(workbench, AllQueues) - local xPlayer = QBCore.Functions.GetPlayer(source) - local gotQueue = false - local CraftsQueue = {} - - MySQLfetchAll('SELECT okokcrafts FROM players WHERE citizenid = @identifier', { - ['@identifier'] = xPlayer.PlayerData.citizenid, - }, function (result) - if result[1] ~= nil then - local data = json.decode(result[1].okokcrafts) - if data ~= nil then - CraftsQueue = data - gotQueue = true - end - end - end) - - while not gotQueue do - Citizen.Wait(100) - end - - local queue = CraftsQueue[workbench] - local v = queue[1] - - if v ~= nil then - if v.isDone then - if v.suc then - if not v.isDis then - local canCarry = false - if v.isItem then - if canCarryIt(v.item, v.amount, xPlayer) then - addItem(xPlayer, v.item, v.amount, v.data) - canCarry = true - end - else - if canCarryIt(v.item, v.amount, xPlayer) then - addItem(xPlayer, v.item, v.amount) - canCarry = true - end - end - - if canCarry then - if Webhook ~= "" then - data = { - playerid = xPlayer.PlayerData.source, - type = "claim-craft", - item = v.itemName, - amount = v.amount, - } - - discordWebhook(data) - end - - if Config.UseXP then - giveXP(xPlayer, v.xp, workbench) - end - TriggerClientEvent(Config.EventPrefix..':removeItemsFromQueue', xPlayer.PlayerData.source, 1, workbench) - else - TriggerClientEvent(Config.EventPrefix..':notification', xPlayer.PlayerData.source, _L('cant_carry').title, _L('cant_carry').text, _L('cant_carry').time, _L('cant_carry').type) - TriggerClientEvent(Config.EventPrefix..':notification', xPlayer.PlayerData.source, _L('claimed_all_items').title, _L('claimed_all_items').text, _L('claimed_all_items').time, _L('claimed_all_items').type) - TriggerClientEvent(Config.EventPrefix..':resetClaimAllButton', xPlayer.PlayerData.source) - end - else - local canCarry = true - for k2,v2 in ipairs(v.recipe) do - if v2[4] == "false" or v2[4] == false then - if not canCarryIt(v2[1], v2[2], xPlayer) then - canCarry = false - end - end - end - - if canCarry then - for k2,v2 in ipairs(v.recipe) do - if v2[4] == "true" or v2[4] == true then - addMoney(v2[1], v2[2], xPlayer) - else - addItem(xPlayer, v2[1], v2[2]) - end - end - - if Webhook ~= "" then - data = { - playerid = xPlayer.PlayerData.source, - type = "claim-craft", - item = v.itemName, - amount = v.amount, - } - - discordWebhook(data) - end - - - if Config.UseXP then - giveXP(xPlayer, v.xp, workbench) - end - TriggerClientEvent(Config.EventPrefix..':removeItemsFromQueue', xPlayer.PlayerData.source, 1, workbench) - else - TriggerClientEvent(Config.EventPrefix..':notification', xPlayer.PlayerData.source, _L('cant_carry').title, _L('cant_carry').text, _L('cant_carry').time, _L('cant_carry').type) - TriggerClientEvent(Config.EventPrefix..':notification', xPlayer.PlayerData.source, _L('claimed_all_items').title, _L('claimed_all_items').text, _L('claimed_all_items').time, _L('claimed_all_items').type) - TriggerClientEvent(Config.EventPrefix..':resetClaimAllButton', xPlayer.PlayerData.source) - end - end - else - if Webhook ~= "" then - data = { - playerid = xPlayer.PlayerData.source, - type = "failed-craft", - item = v.itemName, - amount = v.amount, - } - - discordWebhook(data) - end - if Config.GiveXPOnCraftFailed and Config.UseXP then - if Config.UseXP then - giveXP(xPlayer, v.xp, workbench) - end - end - TriggerClientEvent(Config.EventPrefix..':removeItemsFromQueue', xPlayer.PlayerData.source, 1, workbench) - end - end - end -end) - --------------------------- IDENTIFIERS - -function ExtractIdentifiers(id) - local identifiers = { - steam = "", - ip = "", - discord = "", - license = "", - xbl = "", - live = "" - } - - for i = 0, GetNumPlayerIdentifiers(id) - 1 do - local playerID = GetPlayerIdentifier(id, i) - - if string.find(playerID, "steam") then - identifiers.steam = playerID - elseif string.find(playerID, "ip") then - identifiers.ip = playerID - elseif string.find(playerID, "discord") then - identifiers.discord = playerID - elseif string.find(playerID, "license") then - identifiers.license = playerID - elseif string.find(playerID, "xbl") then - identifiers.xbl = playerID - elseif string.find(playerID, "live") then - identifiers.live = playerID - end - end - - return identifiers -end - --------------------------- WEBHOOK - -function discordWebhook(data) - local color = '65352' - local category = 'default' - local item = '' - local amount = '' - local identifierlist = ExtractIdentifiers(data.playerid) - local identifier = identifierlist.license:gsub("license2:", "") - local discord = "<@"..identifierlist.discord:gsub("discord:", "")..">" - - if data.type == 'start-craft' then - color = Config.StartCraftWebhookColor - category = 'Started a craft' - item = data.item - amount = data.amount - elseif data.type == 'cancel-craft' then - color = Config.CancelWebhookColor - category = 'Canceled a craft' - item = data.item - amount = data.amount - elseif data.type == 'claim-craft' then - color = Config.ClaimCraftWebhookColor - category = 'Claimed' - item = data.item - amount = data.amount - elseif data.type == 'failed-craft' then - color = Config.FailedCraftWebhookColor - category = 'Failed a craft' - item = data.item - amount = data.amount - end - - local information = { - { - ["color"] = color, - ["author"] = { - ["icon_url"] = Config.IconURL, - ["name"] = Config.ServerName..' - Logs', - }, - ["title"] = 'CRAFTING', - ["description"] = '**Action:** '..category..'\n**Item:** '..item..'\n**Amount:** '..amount..'\n\n**ID:** '..data.playerid..'\n**Identifier:** '..identifier..'\n**Discord:** '..discord, - ["footer"] = { - ["text"] = os.date(Config.DateFormat), - } - } - } - - PerformHttpRequest(Webhook, function(err, text, headers) end, 'POST', json.encode({username = Config.BotName, embeds = information}), {['Content-Type'] = 'application/json'}) -end \ No newline at end of file diff --git a/resources/[test]/okokCrafting/web/click.mp3 b/resources/[test]/okokCrafting/web/click.mp3 deleted file mode 100644 index 058e5cd2c..000000000 Binary files a/resources/[test]/okokCrafting/web/click.mp3 and /dev/null differ diff --git a/resources/[test]/okokCrafting/web/scripts.js b/resources/[test]/okokCrafting/web/scripts.js deleted file mode 100644 index 5fb637966..000000000 --- a/resources/[test]/okokCrafting/web/scripts.js +++ /dev/null @@ -1,998 +0,0 @@ -function addStr(str, index, stringToAdd){ - return str.substring(0, index) + stringToAdd + str.substring(index, str.length); -} - -var isTimerOn = false; -var lastTime; -var categories = []; -var selectedCategory = "general_cat"; -var craft2; -var job2; -var gang; -var craftData; -var sideCraftMenu; -var itemClaiming = 0; -var CraftQueue = []; -var maxCraft = 10; -var canCraftItem = true; -var showAllCrafts = false; -var canClaimAll = true; - -var canClaimItem = true; -var canOpenSideCraft = true; - -let Inventory = ''; - -window.addEventListener('message', function(event) { - switch (event.data.action) { - case 'openCraft': - selectedCategory = "general_cat"; - canOpenSideCraft = true; - canClaimItem = true; - itemClaiming = 0; - showAllCrafts = event.data.showAllCrafts; - Inventory = event.data.inventory; - var queue = event.data.queue; - craftData = event.data; - categories = event.data.categories; - var craft = event.data.craft; - craft2 = craft; - var num = craft.length; - var paragraph = ''; - var row = '
'; - var lastRowNum = 0; - var job = event.data.job; - job2 = event.data.job; - gang = event.data.gang; - var added = 0; - var useCategories = event.data.useCategories; - var categoriesButtonsHTML = ` - - - `; - document.querySelector('#claimall-button').disabled = false; - if(useCategories){ - for(let i = 0; i < categories.length; i++){ - categoriesButtonsHTML += ` - - - `; - } - $('#categories_btns').html(categoriesButtonsHTML); - $('#categories_box').show(); - } else { - $('#categories_box').hide(); - } - - if(num >= 13){ - $('.itemslist_window').css('padding', '0.3125rem 0.55rem 0.3125rem 0.625rem'); - } else { - $('.itemslist_window').css('padding', '0.3125rem 1.05rem 0.3125rem 0.625rem'); - } - - for(var i = 0; i < num; i++) { - for(var i1 = 0; i1 < craft[i].job.length; i1++){ - if(selectedCategory == "general_cat" || craft[i].category == selectedCategory){ - if(craft[i].job[i1] == job || craft[i].job[i1] == gang || craft[i].job[i1] == ''){ - if(!event.data.UseXP){ - var itemName = event.data.itemNames; - var itemId = craft[i].item; - var index = i; - added++ - row += ` -
-
-
- ${itemName[itemId]} - -
-
-
- `; - var myEle = document.getElementById(itemId+"wb_"+event.data.wb+"wb_"+index); - if(!myEle) { - $(document).on('click', "#"+itemId+"wb_"+event.data.wb+"wb_"+index, function() { - if(canOpenSideCraft) { - canOpenSideCraft = false; - allID = this.id; - id = allID.substring(0, allID.indexOf('wb_')); - index2 = allID.split("wb_"); - $('.item_card-body').css('background-color', 'rgba(220, 220, 220, 0.20)'); - $('#selected'+this.id).css('background-color', 'rgba(31, 94, 255, 1)'); - var sound = new Audio('click.mp3'); - sound.volume = 0.3; - sound.play(); - $.post('https://okokCrafting/action', JSON.stringify({ - action: "craft", - item: id, - crafts: craft, - itemName: itemName, - index: index2[2], - })); - } - }); - } - - if ((added) % 4 === 0) { - row = addStr(row, row.length, `
`); - lastRowNum = row.length+6; - } - } else { - if(craft[i].levelNeeded <= event.data.level || showAllCrafts){ - var itemName = event.data.itemNames; - var itemId = craft[i].item; - var index = i; - added++ - row += ` -
-
-
- ${itemName[itemId]} - -
-
-
- `; - var myEle = document.getElementById(itemId+"wb_"+event.data.wb+"wb_"+index); - if(!myEle) { - $(document).on('click', "#"+itemId+"wb_"+event.data.wb+"wb_"+index, function() { - if(canOpenSideCraft) { - canOpenSideCraft = false; - allID = this.id; - id = allID.substring(0, allID.indexOf('wb_')); - index2 = allID.split("wb_"); - $('.item_card-body').css('background-color', 'rgba(220, 220, 220, 0.20)'); - $('#selected'+this.id).css('background-color', 'rgba(31, 94, 255, 1)'); - var sound = new Audio('click.mp3'); - sound.volume = 0.3; - sound.play(); - $.post('https://okokCrafting/action', JSON.stringify({ - action: "craft", - item: id, - crafts: craft, - itemName: itemName, - index: index2[2], - level: event.data.level, - })); - } - }); - } - - if ((added) % 4 === 0) { - row = addStr(row, row.length, `
`); - lastRowNum = row.length+6; - } - } - } - } - } - } - } - row += `
`; - - if(event.data.UseXP) { - $('#currentlevel').html(event.data.level); - document.documentElement.style.setProperty('--percentage-width', event.data.percentage+"%"); - $('.xpbar-col').css('margin-top', '-1.8rem'); - } else { - $('.xpbar').hide(); - $('.xpbar-col').css('margin-top', '5.05rem'); - } - - var queueRow = ''; - CraftQueue = queue; - if(queue.length > 0){ - if(queue.length >= 6){ - $('.craftingq_window').css('padding-right', '0.35rem'); - } else { - $('.craftingq_window').css('padding-right', '0rem'); - } - for (var i = 0; i < queue.length; i++) { - if(queue[i].isDone == true) { - if(queue[i].suc){ - if(queue[i].isDis){ - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Concluded
-
-
-
-
-
-
- `; - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Concluded
-
-
-
-
-
-
- `; - } - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Failed to craft
-
-
-
-
-
-
- `; - } - } else { - if(queue[i].isPending){ - if(queue[i].isDis){ - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Pending
-
-
-
-
-
-
- `; - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Pending
-
-
-
-
-
-
- `; - } - } else { - if(queue[i].isDis){ - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Time left: ${queue[i].time}s
-
-
-
-
-
-
- `; - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Time left: ${queue[i].time}s
-
-
-
-
-
-
- `; - } - } - } - } - } else { - queueRow = `
The crafting queue is empty
` - } - - $('.craftingq_window').html(queueRow); - $('#craft-table').html(row); - $('.title-name').html(event.data.name); - - $('.title').fadeIn(); - $('.itemslist').fadeIn(); - $('.crafting-body').fadeIn(); - break - case 'openSideCraft': - sideCraftMenu = event.data; - canOpenSideCraft = true; - var useLevels = false; - if(sideCraftMenu.level != undefined){ - var levelNeeded = sideCraftMenu.crafts[sideCraftMenu.index].levelNeeded; - var level = sideCraftMenu.level; - useLevels = true; - } - - var isLevel = false; - $('#quantity').val(1); - maxCraft = sideCraftMenu.maxCraft; - if(canCraftItem == false){ - canCraftItem = true; - document.querySelector('#craft-button').disabled = false; - } - - var canCraft = true; - var isAvailable = false; - var num = event.data.recipe.length; - var recipe = ``; - var img = ` - - ${event.data.itemName} x${event.data.itemAmount} - `; - - if(sideCraftMenu.isDis){ - $('#top_text').html(`Requirements`); - $('#bot_text').html(`You will receive`); - img = ` - - ${event.data.itemName} x${event.data.itemAmount} (${event.data.isDisItemAmt}) - `; - } else { - $('#top_text').html(`You will receive`); - $('#bot_text').html(`Requirements`); - } - - $('#side-image').html(img); - $('#craft-time').html(event.data.time); - - if(useLevels){ - if(level >= levelNeeded){ - canCraft = true; - isAvailable = true; - isLevel = true; - } else { - isAvailable = false; - canCraft = false; - isLevel = true; - } - } - - for(var i = 0; i < num; i++){ - var idName = event.data.recipe[i][0]; - if(sideCraftMenu.isDis){ - recipe += ` -
- - ${event.data.itemNames[idName]} x${event.data.recipe[i][1]} -
- `; - if(event.data.itemAmount > event.data.isDisItemAmt){ - canCraft = false - } - } else { - recipe += ` -
- - ${event.data.itemNames[idName]} x${event.data.recipe[i][1]} (${event.data.inventory[i].key}) -
- `; - if(event.data.recipe[i][1] > event.data.inventory[i].key){ - canCraft = false - } - } - } - - - $('#craft-button-div').html(` - - `); - - if(canCraft) { - $('#craft-buttons-info').fadeIn(); - $('#craft-button-div').fadeIn(); - $('#craft-buttons-info-level').hide(); - } else { - $('#craft-buttons-info').hide(); - $('#craft-buttons-info-level').hide(); - } - - if(useLevels){ - if(!isAvailable && isLevel){ - $('#craft-button-div-level').html(` - LEVEL REQUIRED: ${levelNeeded} - `); - $('#craft-buttons-info-level').fadeIn(); - $('#craft-button-div-level').fadeIn(); - } - } - - $('#craft-percentage').html(event.data.percentage); - $('.components_window').html(recipe); - - $('.itemrequirements').fadeIn(); - break - case 'ShowCraftCount': - var time = event.data.time; - var itemName = event.data.name; - - $('#crafting-text').html(`Crafting`); - $('#item-name').html(`${itemName}`); - $('#item-timer').html(`${time}s`); - if(time == lastTime) { - $('#cog').removeClass('fa-spin'); - } else { - $('#cog').addClass('fa-spin'); - } - - - if(!isTimerOn){ - isTimerOn = true; - $('.timer').fadeIn(); - } - lastTime = time - break - case 'CompleteCraftCount': - var itemName = event.data.name; - - $('.timer_card-body').css('background-color', '#1fa34a'); - $('#crafting-text').html(`Crafted`); - $('#item-name').html(`${itemName}`); - $('#item-timer').html(`0s`); - - $('#cog').removeClass('fa-spin'); - $('#cog').removeClass('fa-cog'); - - $('#cog').addClass('fa-check'); - - break - case 'FailedCraftCount': - var itemName = event.data.name; - - $('.timer_card-body').css('background-color', '#990b0b'); - $('#crafting-text').html(`Failed to craft`); - $('#item-name').html(`${itemName}`); - $('#item-timer').html(`0s`); - - $('#cog').removeClass('fa-spin'); - $('#cog').removeClass('fa-cog'); - - $('#cog').addClass('fa-times'); - - break - case 'HideCraftCount': - isTimerOn = false; - $('.timer').fadeOut(); - setTimeout(function(){ - $('#cog').removeClass('fa-times'); - $('#cog').removeClass('fa-check'); - $('#cog').addClass('fa-spin'); - $('#cog').addClass('fa-cog'); - - $('.timer_card-body').css('background-color', 'rgba(31, 94, 255, 1)'); - }, 400); - break - case 'updateCraftingItems': - canClaimItem = true; - if(selectedCategory != ""){ - var queue = event.data.queue; - var queueRow = ''; - CraftQueue = queue; - if(queue.length > 0){ - if(queue.length >= 6){ - $('.craftingq_window').css('padding-right', '0.35rem'); - } else { - $('.craftingq_window').css('padding-right', '0rem'); - } - for (var i = 0; i < queue.length; i++) { - if(queue[i].isDone == true) { - if(queue[i].suc){ - if(queue[i].isDis){ - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Concluded
-
-
-
-
-
-
- `; - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Concluded
-
-
-
-
-
-
- `; - } - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Failed to craft
-
-
-
-
-
-
- `; - } - } else { - if(queue[i].isPending){ - if(queue[i].isDis){ - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Pending
-
-
-
-
-
-
- `; - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Pending
-
-
-
-
-
-
- `; - } - } else { - if(queue[i].isDis){ - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Time left: ${queue[i].time}s
-
-
-
-
-
-
- `; - } else { - queueRow += ` -
-
- -
-
${queue[i].itemName} x${queue[i].amount}
-
Time left: ${queue[i].time}s
-
-
-
-
-
-
- `; - } - } - } - } - } else { - queueRow = `
The crafting queue is empty
` - } - $('.craftingq_window').html(queueRow); - } - break - case 'resetItemNumber': - itemClaiming = 0; - break - case 'resetButton': - if(canCraftItem == false){ - canCraftItem = true; - document.querySelector('#craft-button').disabled = false; - } - break - case 'canClaimAll': - document.querySelector('#claimall-button').disabled = false; - break - case 'closeMenu': - closeMenu(); - break - } -}); - -$(document).on('click', ".cat_tab", function() { - selectedCategory = $("input[name='category']:checked").val(); - var num = craft2.length; - var paragraph = ''; - var row = '
'; - var lastRowNum = 0; - var added = 0 - for(var i = 0; i < num; i++) { - for(var i1 = 0; i1 < craft2[i].job.length; i1++){ - if(selectedCategory == "general_cat" || craft2[i].category == selectedCategory){ - if(craft2[i].job[i1] == job2 || craft2[i].job[i1] == gang || craft2[i].job[i1] == ''){ - if(!craftData.UseXP){ - var itemName = craftData.itemNames; - var itemId = craft2[i].item; - var index = i; - added++ - row += ` -
-
-
- ${itemName[itemId]} - -
-
-
- `; - if ((added) % 4 === 0) { - row = addStr(row, row.length, `
`); - lastRowNum = row.length+6; - } - } else { - if(craft2[i].levelNeeded <= craftData.level || showAllCrafts){ - var itemName = craftData.itemNames; - var itemId = craft2[i].item; - var index = i; - added++ - row += ` -
-
-
- ${itemName[itemId]} - -
-
-
- `; - - if ((added) % 4 === 0) { - row = addStr(row, row.length, `
`); - lastRowNum = row.length+6; - } - } - } - } - } - } - } - row += `
`; - - if(craftData.UseXP) { - $('#currentlevel').html(craftData.level); - document.documentElement.style.setProperty('--percentage-width', craftData.percentage+"%"); - $('.xpbar-col').css('margin-top', '-1.8rem'); - } else { - $('.xpbar').hide(); - $('.xpbar-col').css('margin-top', '5.05rem'); - } - - $('#craft-table').html(row); - $('.title-name').html(craftData.name); - - $('.title').fadeIn(); - $('.itemslist').fadeIn(); - $('.crafting-body').fadeIn(); -}); - -function restartCrafts(){ - selectedCategory = 'general_cat'; - var num = craft2.length; - var paragraph = ''; - var row = '
'; - var lastRowNum = 0; - var added = 0 - for(var i = 0; i < num; i++) { - for(var i1 = 0; i1 < craft2[i].job.length; i1++){ - if(selectedCategory == "general_cat" || craft2[i].category == selectedCategory){ - if(craft2[i].job[i1] == job2 || craft2[i].job[i1] == gang || craft2[i].job[i1] == ''){ - if(!craftData.UseXP){ - var itemName = craftData.itemNames; - var itemId = craft2[i].item; - var index = i; - added++ - row += ` -
-
-
- ${itemName[itemId]} - -
-
-
- `; - if ((added) % 4 === 0) { - row = addStr(row, row.length, `
`); - lastRowNum = row.length+6; - } - } else { - if(craft2[i].levelNeeded <= craftData.level || showAllCrafts){ - var itemName = craftData.itemNames; - var itemId = craft2[i].item; - var index = i; - added++ - row += ` -
-
-
- ${itemName[itemId]} - -
-
-
- `; - - if ((added) % 4 === 0) { - row = addStr(row, row.length, `
`); - lastRowNum = row.length+6; - } - } - } - } - } - } - } - row += `
`; - - if(craftData.UseXP) { - $('#currentlevel').html(craftData.level); - document.documentElement.style.setProperty('--percentage-width', craftData.percentage+"%"); - $('.xpbar-col').css('margin-top', '-1.8rem'); - } else { - $('.xpbar').hide(); - $('.xpbar-col').css('margin-top', '5.05rem'); - } - - $('#craft-table').html(row); - $('.title-name').html(craftData.name); -} - -$(document).ready(function() { - document.onkeyup = function(data) { - if (data.which == 27) { - closeMenu(); - } - }; -}); - -$(document).ready(function(){ - $('#plus').click(function(e) { - var quantity = parseInt($('#quantity').val()); - if(quantity < maxCraft){ - $('#quantity').val(quantity + 1); - updateSideMenu(quantity + 1); - } - }); - - $('#minus').click(function(e) { - var quantity = parseInt($('#quantity').val()); - - if(quantity > maxCraft){ - $('#quantity').val(maxCraft); - updateSideMenu(maxCraft); - } else { - if(quantity > 1) { - $('#quantity').val(quantity - 1); - updateSideMenu(quantity - 1); - } - } - }); - $('#max').click(function(e) { - var quantity = parseInt($('#quantity').val()); - - if(quantity != maxCraft){ - $('#quantity').val(maxCraft); - updateSideMenu(maxCraft); - } - }); -}); - -function quantity_change(t) { - var quantity = parseInt($('#quantity').val()); - - if(quantity > maxCraft){ - $('#quantity').val(maxCraft); - updateSideMenu(maxCraft); - } else if(quantity < 1) { - $('#quantity').val(1); - updateSideMenu(1); - } else { - updateSideMenu(quantity); - } -} - -function craft(t) { - if(canCraftItem){ - canCraftItem = false; - document.querySelector('#craft-button').disabled = true; - var itemId = t.dataset.item; - var recipe = t.dataset.recipe; - var amount = t.dataset.amount; - var xp = t.dataset.xp; - var isDis = t.dataset.isDis; - var index = t.dataset.index; - var level = t.dataset.level; - var quantity = document.getElementById("quantity").value; - if(quantity > maxCraft){ - quantity = maxCraft; - $('#quantity').val(quantity - 1); - updateSideMenu(quantity - 1); - } - $.post('https://okokCrafting/action', JSON.stringify({ - action: "craft-button", - itemID: itemId, - recipe: recipe, - amount: amount, - xp: xp, - quantity: quantity, - isDis: isDis, - index: index, - level: level, - })); - } -} - -function claim(t) { - var index = parseInt(t.dataset.id)+1; - var itemRndID = parseInt(CraftQueue[index-1].randomID); - if(itemClaiming != itemRndID && canClaimItem){ - canClaimItem = false; - itemClaiming = itemRndID; - $.post('https://okokCrafting/action', JSON.stringify({ - action: "claim-item", - index: index, - })); - } -} - -function claimall(t) { - if(CraftQueue[0] != undefined && CraftQueue[0].isDone && canClaimItem){ - canClaimItem = false; - document.querySelector('#claimall-button').disabled = true; - $.post('https://okokCrafting/action', JSON.stringify({ - action: "claim-all", - })); - } - -} - -function claimFail(t) { - var index = parseInt(t.dataset.id)+1; - var itemRndID = parseInt(CraftQueue[index-1].randomID); - if(itemClaiming != itemRndID && canClaimItem){ - canClaimItem = false; - itemClaiming = itemRndID; - $.post('https://okokCrafting/action', JSON.stringify({ - action: "fail-item", - index: index, - })); - } -} - -function cancel(t) { - var index = parseInt(t.dataset.id)+1; - var itemRndID = parseInt(CraftQueue[index-1].randomID); - if(itemClaiming != itemRndID && canClaimItem){ - canClaimItem = false; - itemClaiming = itemRndID; - $.post('https://okokCrafting/action', JSON.stringify({ - action: "cancel-item", - index: index, - })); - } -} - -function updateSideMenu(quantity){ - var canCraft = true - var num = sideCraftMenu.recipe.length; - var recipe = ``; - var img = ` - - ${sideCraftMenu.itemName} x${sideCraftMenu.itemAmount*quantity} - `; - - if(sideCraftMenu.isDis){ - img = ` - - ${sideCraftMenu.itemName} x${sideCraftMenu.itemAmount*quantity} (${sideCraftMenu.isDisItemAmt}) - `; - } - - $('#side-image').html(img); - $('#craft-time').html(sideCraftMenu.time*quantity); - - for(var i = 0; i < num; i++){ - var idName = sideCraftMenu.recipe[i][0]; - if(sideCraftMenu.isDis){ - recipe += ` -
- - ${sideCraftMenu.itemNames[idName]} x${sideCraftMenu.recipe[i][1]*quantity} -
- `; - if(sideCraftMenu.itemAmount > sideCraftMenu.isDisItemAmt){ - canCraft = false - } - } else { - recipe += ` -
- - ${sideCraftMenu.itemNames[idName]} x${sideCraftMenu.recipe[i][1]*quantity} (${sideCraftMenu.inventory[i].key}) -
- `; - if(sideCraftMenu.recipe[i][1] > sideCraftMenu.inventory[i].key){ - canCraft = false - } - } - } - - $('#craft-button-div').html(` - - `); - - if(canCraft) { - $('#craft-button-div').fadeIn(); - } else { - $('#craft-button-div').hide(); - } - - $('#craft-percentage').html(sideCraftMenu.percentage); - $('.components_window').html(recipe); - - $('.itemrequirements').fadeIn(); -} - -function closeMenu(){ - itemClaiming = 0; - selectedCategory = ""; - $('.crafting-body').fadeOut(); - $('.title').fadeOut(); - $('.itemslist').fadeOut(); - $('.itemrequirements').fadeOut(); - setTimeout(function(){ - restartCrafts(); - }, 400); - $.post('https://okokCrafting/action', JSON.stringify({ - action: "close", - })); -} \ No newline at end of file diff --git a/resources/[test]/okokCrafting/web/styles.css b/resources/[test]/okokCrafting/web/styles.css deleted file mode 100644 index b1ceea3af..000000000 --- a/resources/[test]/okokCrafting/web/styles.css +++ /dev/null @@ -1,589 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@200;300;400;500;700;800;900&display=swap'); - -*,*:focus,*:hover{ - outline:none; -} - -html, body { - height: 100%; -} - -html { - font-size: calc(16 / 19.2 * 1vw); -} - -@media (min-aspect-ratio: 16 / 9) { - html { - font-size: calc(16 / 10.8 * 1vh); - } -} - -body { - font-family: 'Tajawal', sans-serif; - background: none; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - user-select: none; -} - -.crafting-body { - display: none; - height: 48rem; -} - -.title-main { - margin-top: -3.05rem; -} - -.title { - color: #fff; - font-size: 3.75rem; - line-height: 1; - text-transform: uppercase; - text-align: center; -} - -.title-name { - font-weight: 300; -} - -.title-name2 { - font-weight: 600; - margin-left: 0.938rem; -} - -.card { - border: none; - border-radius: 1.25rem; - background-color: transparent; -} - -.card-body { - background-color: #ffffff; - font-size: 0.938rem; - font-weight: 500; - border-radius: 1.25rem; -} - -.itemslist { - display: none; - margin-top: 2.9rem; -} - -.itemrequirements { - display: none; -} - -.xpbar-col { - margin-top: -1.8rem; - margin-left: -0.3rem; - width: 24.65rem; -} - -.xpbar { - margin-bottom: 1.35rem; -} - -.itemslist_card { - width: 50rem; -} - -.itemslist_card-body { - background: transparent; -} - -.itemslist_window { - overflow-x: hidden; - height: 35.2rem; - padding: 0.3125rem 1.05rem 0.3125rem 0.625rem; -} - -.item_card { - width: 10.625rem; - height: 10.625rem; -} - -.item_card:hover { - cursor: pointer; -} - -.item_card-body { - width: 10.625rem; - height: 10.625rem; - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); - transition: 0.25s; - background-color: rgba(220, 220, 220, 0.20); -} - -.item_card-body:hover { - background-color: rgba(31, 94, 255, 1) !important; - transition: 0.25s; - transform: scale(1.030); -} - -.item-title { - color: #fff; - font-weight: 600; - position: absolute; - top: 8%; -} - -.image { - height: 7.5rem; - position: absolute; - top: 22.5%; -} - -.image_itemselected { - height: 5rem; -} - -.text_itemselected { - color: #fff; - font-weight: 600; - font-size: 1.25rem; -} - -.image_components { - height: 3.75rem; -} - -::-webkit-scrollbar { - width: 0.5rem; -} - -::-webkit-scrollbar-track { - background-color: transparent; -} - -::-webkit-scrollbar-thumb { - background-color: #1f5eff; - border-radius: 0.625rem; - transition: .25s; -} - -::-webkit-scrollbar-thumb:hover { - cursor: pointer; - background-color: #0a4df9; - transition: .25s; -} - -.timer { - position: fixed; - right: 2rem; - bottom: 4rem; - font-size: 3.125rem; - display: none; -} - -.timer_card { - height: 1.875rem; -} - -.timer_card-body { - background-color: rgba(31, 94, 255, 1); - font-weight: 600 !important; - color: #fff !important; - font-size: 1.25rem !important; - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); - padding-right: 4.375rem; -} - -#crafting-text { - margin-left: 0.625rem; -} - -#item-timer { - position: absolute; - right: 0.938rem; -} - -#time { - position: absolute; - top: 0.625rem; - right: 0.625rem; - color: #fff; - background-color: rgba(31, 94, 255, 1); - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); - border-radius: 0.625rem; - padding: 0.313rem; -} - -#percentage { - position: absolute; - top: 3.1rem; - right: 0.625rem; - color: #fff; - background-color: rgba(31, 94, 255, 1); - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); - border-radius: 0.625rem; - padding: 0.313rem; -} - -#level-text { - color: #fff; - font-weight: 600; - font-size: 2rem; -} - -.progress { - background: rgba(220, 220, 220, 0.20); - justify-content: flex-start; - border-radius: 1.25rem; - align-items: center; - position: relative; - padding: 0 0.313rem; - display: flex; - height: 2.5rem; - width: 100%; - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); -} - -.progress-value { - width: var(--percentage-width); - transition: width .5s ease-in-out; - border-radius: 6.25rem; - background: #1f5eff; - height: 1.875rem; -} - -:root { - --percentage-width: 0%; -} - - -@keyframes load { - 0% { width: 0; } - 100% { width: var(--percentage-width); } -} - -.btn { - font-weight: 500; - font-size: 1.125rem; - padding: 0.8125rem 1.0625rem; - border: none; - transition: 0.25s; - letter-spacing: 0.0125rem; -} - -.btn-blue { - background-color: #1f5eff; - color: #e6e6e6; -} - -.btn-blue:hover { - background-color: #0a4df9; - color: #e6e6e6; -} - -.btn-blue-level { - font-size: 1.125rem; - padding: 0.8125rem 1.0625rem; - letter-spacing: 0.0125rem; - display: inline-block; - text-align: center; - background-color: #1f5eff; - color: #e6e6e6; - border-radius: 1rem; - width: 100%; - font-weight: 600; - box-shadow: 0rem 0rem 0.313rem 0rem rgb(10 10 10 / 30%); -} - -.btn:focus { - box-shadow: none; -} - -.btn-category { - background-color: #1f5eff; - border: none !important; - outline: none !important; - box-shadow: none !important; - transition: .25s; - font-weight: 600; - color: #fff; -} - -.btn-category:hover { - background-color: #0a4df9; - color: #fff; - transition: .25s; -} - -.btn:focus { - box-shadow: none; -} - -.btn-check:active+.btn-category:focus, .btn-check:checked+.btn-category:focus, .btn-category.active:focus, .btn-category:active:focus, .show>.btn-category.dropdown-toggle:focus { - box-shadow: none; - transition: .25s; -} - -.btn-check:active+.btn-category, .btn-check:checked+.btn-category, .btn-category.active, .btn-category:active, .show>.btn-category.dropdown-toggle { - background-color: #fcfcfc; - border-color: none; - transition: .25s; - color: #1f5eff; -} - -hr { - opacity: 1; - color: #fff; -} - -.queue-item { - background-color: #1f5eff; - border-radius: 0.625rem; - padding: 0.5rem; - transition: .25s; -} - -.queue-item:hover { - background-color: #0a4df9; - border-radius: 0.625rem; - padding: 0.5rem; - transition: .25s; -} - -.queue-item-concluded { - background-color: #25ba59; - border-radius: 0.625rem; - padding: 0.5rem; - transition: .25s; -} - -.queue-item-concluded:hover { - background-color: #20ab51; - border-radius: 0.625rem; - padding: 0.5rem; - transition: .25s; -} - -.queue-item-failed { - background-color: #ff2943; - border-radius: 0.625rem; - padding: 0.5rem; - transition: .25s; -} - -.queue-item-failed:hover { - background-color: #cd0032; - border-radius: 0.625rem; - padding: 0.5rem; - transition: .25s; -} - -.queue-cancelbutton { - font-size: 1.75rem; -} - -.queue-cancelbutton-bg { - width: 2.5rem; - height: 2.5rem; - background-color: #fff; - border-radius: 0.625rem; - color: #1f5eff; - transition: .25s; -} - -.queue-cancelbutton-bg:hover { - background-color: #e1e1e3; - transition: .25s; - cursor: pointer; -} - -.queue-claimbutton { - font-size: 1.75rem; -} - -.queue-claimbutton-bg { - width: 2.5rem; - height: 2.5rem; - background-color: #fff; - border-radius: 0.625rem; - color: #25ba59; - transition: .25s; -} - -.queue-claimbutton-bg:hover { - background-color: #e1e1e3; - transition: .25s; - cursor: pointer; -} - -.queue-failbutton-bg { - width: 2.5rem; - height: 2.5rem; - background-color: #fff; - border-radius: 0.625rem; - color: #ff2943; - transition: .25s; -} - -.queue-failbutton-bg:hover { - background-color: #e1e1e3; - transition: .25s; - cursor: pointer; -} - -.components_window { - max-height: 18.75rem; - overflow-x: hidden; -} - -.craftingq_window { - max-height: 27.3rem; - overflow-x: hidden; - padding-right: 0.35rem; -} - -.btn-group { - padding: 0.5rem; - background-color: rgba(220, 220, 220, 0.20); - border-radius: 1.25rem; - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); - margin-top: 2rem; -} - -.first-category { - border-top-left-radius: 1rem; - border-bottom-left-radius: 1rem; -} - -.last-category { - border-top-right-radius: 1rem; - border-bottom-right-radius: 1rem; -} - -#craft-button, #claimall-button { - border-radius: 1rem; - width: 100%; - font-weight: 600; - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); -} - -.component, .noitq { - color: #fff; - font-weight: 600; - font-size: 1.25rem; -} - -.row-h { - height: 43.8rem; -} - -.queue-itemname { - color: #fff; - font-weight: 600; - font-size: 1.25rem; - line-height: 1; -} - -.queue-itemstate { - line-height: 1; - color: #ededed; - margin-top: 0.2rem; - font-weight: 600; -} - -.queue-item-mr { - margin-right: 0.65rem; -} - -.itemslist_row-h { - margin-top: 1.35rem; -} - -.section-title { - color: #fff; - font-weight: 600; - font-size: 2rem; -} - -.craftingq_card { - width: 23.125rem; - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); - margin-top: 5.05rem; - height: 34.56rem; -} - -.craftingq_card-body { - background-color: rgba(220, 220, 220, 0.20); - min-height: 34.5625rem; -} - -.ywr { - color: #fff; - font-weight: 600; - font-size: 2rem; -} - -.itemr_card { - height: 34.56rem; - box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3); -} - -.itemr_card-body { - background-color: rgba(220, 220, 220, 0.20); -} - -.craft-tp { - color: #fff; - font-weight: 600; -} - -.btn-group>.btn-group:not(:first-child), .btn-group>.btn:not(:first-child) { - margin-left: 0; -} - -.form-control { - border: none; - border-radius: 0; - padding: 0rem 0.75rem; -} - -.form-control:focus { - box-shadow: none; -} - -#minus { - border-radius: 0; - border-top-left-radius: 1rem; - border-bottom-left-radius: 1rem; -} - -#plus { - border-radius: 0; - border-top-right-radius: 1rem; - border-bottom-right-radius: 1rem; -} - -#quantity { - background-color: rgba(220, 220, 220, 0.20); - color: #fff; - font-size: 2rem; - font-weight: 600; -} - -#max { - box-shadow: 0rem 0rem 0.313rem 0rem rgb(10 10 10 / 30%); - border-radius: 1rem; - font-weight: 600; -} - -.mip { - box-shadow: 0rem 0rem 0.313rem 0rem rgb(10 10 10 / 30%); - border-radius: 1rem; -} - -input::-webkit-outer-spin-button, -input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; -} - -.crafting { - height: 48rem; -} \ No newline at end of file diff --git a/resources/[test]/okokCrafting/web/ui.html b/resources/[test]/okokCrafting/web/ui.html deleted file mode 100644 index e3a9abbf6..000000000 --- a/resources/[test]/okokCrafting/web/ui.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - -
-
-
-
-
-
Crafting Queue
-
-
-
-
- -
-
Compact Rifle x1
-
Concluded
-
-
-
-
-
-
-
-
- -
-
Compact Rifle x1
-
Time left: 55s
-
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
- Crafting -
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-
Current Level: 28
-
-
-
-
- -
-
-
- s - -
You will receive
-
- - -
-
-
Requirements
-
-
-
- -
-
-
- - - -
- -
-
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
- - - - - - - \ No newline at end of file