From 2eec32ff5a245235546cdfed09ec0246275f0608 Mon Sep 17 00:00:00 2001 From: Musiker15 Date: Thu, 12 Sep 2024 16:40:12 +0200 Subject: [PATCH] Update v2.8.5 --- LICENSE.md | 25 ++++ client.lua | 215 +++++++++++++++++++++++++++++++++++ config.lua | 117 +++++++++++++++++++ fxmanifest.lua | 40 +++++++ images/bulletproof.png | Bin 0 -> 18558 bytes images/bulletproofpolice.png | Bin 0 -> 27093 bytes images/nobproof.png | Bin 0 -> 21433 bytes locales/de.lua | 5 + locales/en.lua | 5 + locales/pl.lua | 5 + server.lua | 193 +++++++++++++++++++++++++++++++ server_encrypted.lua | 110 ++++++++++++++++++ 12 files changed, 715 insertions(+) create mode 100644 LICENSE.md create mode 100644 client.lua create mode 100644 config.lua create mode 100644 fxmanifest.lua create mode 100644 images/bulletproof.png create mode 100644 images/bulletproofpolice.png create mode 100644 images/nobproof.png create mode 100644 locales/de.lua create mode 100644 locales/en.lua create mode 100644 locales/pl.lua create mode 100644 server.lua create mode 100644 server_encrypted.lua diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..e979e49 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,25 @@ +# License + +Copyright (C) since 2024 Musiker15 - MSK Scripts + +Contact for business enquiries: info@msk-scripts.de + +This software is a resource for the "FiveM" modification for the game "Grand Theft Auto V" and is comprised of the files this license is attached to. It is only meant to function inside of this environment. + +## Usage Rights +The user is granted permission to use and modify this software for personal or non-commercial purposes. The user is granted permission to integrate this software as a dependency in his resources and publish his resources as long as the resource is available for FREE. + +The user is not allowed to publish, sell or distribute the software or any part of it without the consent of the licensor and apart from forking the official repository on GitHub. + +The user may not create derivatives or copies of the software that violate these licensing terms. +This license may be revoked by the licensor at any time if the user violates the terms of the license. Upon termination of the license, the user must destroy all copies of the software and any resulting modifications. + +The licensor reserves the right to change the licensing terms with each update of the software. The user is required to review and agree to the updated licensing terms in order to continue using the updated version of the software. + +By using the software, the user automatically accepts these licensing terms and any future changes made through software updates. + +## Disclaimer of Liability +The software is provided "as is", without warranties of any kind. The licensor is not liable for any damages resulting from using and modfifying the software. + +## Further information +Further information and documentation referring to the software can be found at https://docu.msk-scripts.de. \ No newline at end of file diff --git a/client.lua b/client.lua new file mode 100644 index 0000000..a965647 --- /dev/null +++ b/client.lua @@ -0,0 +1,215 @@ +local isWearingArmor, isPlayerLoaded = false, false +local currentItem = {} + +AddEventHandler('onResourceStart', function(resource) + if GetCurrentResourceName() == resource then + isPlayerLoaded = ESX.IsPlayerLoaded() + end +end) + +RegisterNetEvent('esx:playerLoaded') +AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) + Wait(1000) -- Please Do Not Touch! // This is for slower PCs + + if isNew then + isPlayerLoaded = true + return logging('debug', 'Character is not created yet.', 'Returning...') + end + + if not xPlayer then + isPlayerLoaded = true + return logging('error', 'xPlayer not found on Event esx:playerLoaded!', 'Returning...') + end + + if not Config.LoadStatus.health and not Config.LoadStatus.armor then + isPlayerLoaded = true + return logging('debug', 'Config.LoadStatus.health AND Config.LoadStatus.armor is deactivated in config.lua', 'Returning...') + end + + while not ESX.PlayerData.ped do Wait(10) end + + local playerPed = PlayerPedId() + local health, armor, item = MSK.Trigger('msk_armor:getStatusFromDB') + health, armor = tonumber(health), tonumber(armor) + logging('debug', 'TriggerCallback: getStatusFromDB on Event playerLoaded') + logging('debug', 'playerHealth: ' .. health, 'playerArmor: ' .. armor, 'Item: ' .. (item or 'nil')) + + if Config.LoadStatus.health then + if ESX.PlayerData.metadata and ESX.PlayerData.metadata.health then + local maxHealth = math.max(health, tonumber(ESX.PlayerData.metadata.health)) + maxHealth = tonumber(maxHealth) + SetEntityHealth(playerPed, maxHealth) + else + SetEntityHealth(playerPed, health) + end + end + + if Config.LoadStatus.armor then + local setArmor = 0 + if ESX.PlayerData.metadata and ESX.PlayerData.metadata.armor then + local maxArmor = math.max(armor, tonumber(ESX.PlayerData.metadata.armor)) + maxArmor = tonumber(maxArmor) + setArmor = maxArmor + else + setArmor = armor + end + + if setArmor > 100 then SetPlayerMaxArmour(playerPed, setArmor) end + SetPedArmour(playerPed, setArmor) + + if item then + currentItem.item = item + currentItem.percent = Config.Armories[item].percent + end + end + + if Config.LoadStatus.restoreVest then + if armor > 0 then + logging('debug', 'skin bproof', skin.bproof_1) + + if skin and skin.bproof_1 == 0 then + logging('debug', 'bproof_1 is not set. Setting bproof Skin...') + + if skin.sex == 0 then -- Male + local bproof = Config.defaultSkin.Male + if item then bproof = Config.Armories[item].skin.Male end + TriggerEvent('skinchanger:loadClothes', skin, bproof) + else -- Female + local bproof = Config.defaultSkin.Female + if item then bproof = Config.Armories[item].skin.Female end + TriggerEvent('skinchanger:loadClothes', skin, bproof) + end + saveSkin() + end + + if Config.giveNoBProof then + logging('debug', 'TriggerEvent giveNoBProofItem on Event: playerLoaded') + TriggerServerEvent('msk_armor:giveNoBProofItem') + end + + isWearingArmor = true + else + logging('debug', 'Armor is 0 on playerLoaded') + end + end + + isPlayerLoaded = true +end) + +if Config.Refresh.enable then + CreateThread(function() + while true do + local sleep = Config.Refresh.time * 1000 + + if isPlayerLoaded then + if Config.Refresh.debug then logging('debug', 'isWearingArmor:', isWearingArmor) end + + if isWearingArmor and GetPedArmour(PlayerPedId()) <= 0 then + logging('debug', 'Set isWearingArmor = false', 'Remove Vest on Event: refreshArmour') + TriggerEvent('msk_armor:setDelArmor') + TriggerServerEvent('msk_armor:removeNoBProofItem') + end + end + + Wait(sleep) + end + end) +end + +if Config.Hotkey.enable then + CreateThread(function() + while true do + local sleep = 0 + + if IsControlJustPressed(0, Config.Hotkey.key) then + local itemName, item = MSK.Trigger('msk_armor:setHotkey', Config.Hotkey.item) + + if item then + TriggerEvent('msk_armor:setArmor', itemName, item) + else + Config.Notification(nil, 'You can not put on a Vest without a Vest!') + end + end + + Wait(sleep) + end + end) +end + +RegisterNetEvent('msk_armor:setArmor') +AddEventHandler('msk_armor:setArmor', function(itemName, item) + local playerPed = PlayerPedId() + + taskAnimation(Config.Animations.dict, Config.Animations.anim, Config.Animations.time * 1000) + logging('debug', 'setArmor Item:', itemName, item.percent) + + if item.skin.enable then + TriggerEvent('skinchanger:getSkin', function(skin) + if Config.alreadySet then + if skin.sex == 0 then -- Male + TriggerEvent('skinchanger:loadClothes', skin, Config.Armories[itemName].skin.male) + else -- Female + TriggerEvent('skinchanger:loadClothes', skin, Config.Armories[itemName].skin.female) + end + saveSkin() + end + end) + end + + currentItem.item = itemName + currentItem.percent = item.percent + + if item.percent > 100 then SetPlayerMaxArmour(playerPed, item.percent) end + SetPedArmour(playerPed, item.percent) + TriggerServerEvent('msk_armor:refreshArmour', GetEntityHealth(playerPed), item.percent, itemName) + isWearingArmor = true +end) + +RegisterNetEvent('msk_armor:setDelArmor') +AddEventHandler('msk_armor:setDelArmor', function() + local playerPed = PlayerPedId() + + if Config.giveBackVest and GetPedArmour(playerPed) == currentItem.percent then + TriggerServerEvent('msk_armor:giveBackVest', currentItem.item) + end + + taskAnimation(Config.Animations.dict, Config.Animations.anim, Config.Animations.time * 1000) + + TriggerEvent('skinchanger:getSkin', function(skin) + TriggerEvent('skinchanger:loadClothes', skin, {['bproof_1'] = 0, ['bproof_2'] = 0}) + saveSkin() + end) + + if currentItem.percent > 100 then SetPlayerMaxArmour(playerPed, 100) end + SetPedArmour(playerPed, 0) + TriggerServerEvent('msk_armor:refreshArmour', GetEntityHealth(playerPed), 0, 'remove') + currentItem = {} + isWearingArmor = false +end) + +taskAnimation = function(dict, anim, time) + local playerPed = PlayerPedId() + + ESX.Streaming.RequestAnimDict(dict, function() + TaskPlayAnim(playerPed, dict, anim, 8.0, 1.0, -1, 49, 0, false, false, false) -- Standing + -- TaskPlayAnim(playerPed, dict, anim, 8.0, -8, -1, 32, 0, false, false, false) -- Kneeing + RemoveAnimDict(dict) + end) + + Wait(time) + ClearPedTasks(playerPed) +end + +saveSkin = function() + if not Config.saveSkin then return end + Wait(100) + + TriggerEvent('skinchanger:getSkin', function(skin) + TriggerServerEvent('esx_skin:save', skin) + end) +end + +logging = function(code, ...) + if not Config.Debug then return end + MSK.Logging(code, ...) +end \ No newline at end of file diff --git a/config.lua b/config.lua new file mode 100644 index 0000000..ce846bb --- /dev/null +++ b/config.lua @@ -0,0 +1,117 @@ +Config = {} +---------------------------------------------------------------- +Config.Locale = 'de' +Config.VersionChecker = true +Config.Debug = true +---------------------------------------------------------------- +-- Exports (serverside) + +-- exports.msk_armor:saveStatus({source = playerId}, playerHealth, playerArmor) +-- exports.msk_armor:saveStatus({identifier = playerIdentifier}, playerHealth, playerArmor) +-- exports.msk_armor:saveStatus({player = xPlayer}, playerHealth, playerArmor) +---------------------------------------------------------------- +-- !!! This function is clientside AND serverside !!! +Config.Notification = function(source, message) + if IsDuplicityVersion() then -- serverside + MSK.Notification(source, 'MSK Amror', message) + else -- clientside + MSK.Notification('MSK Amror', message) + end +end +---------------------------------------------------------------- +Config.Hotkey = { + enable = false, -- Set true to enable the Hotkey + key = 38, -- Set the Control you want to use + item = 'bulletproof' -- Set the item that you want to use via Hotkey +} + +Config.LoadStatus = { + health = true, -- Set false if you don't want to restore health after player connect + armor = true, -- Set false if you don't want to restore armor after player connect + restoreVest = true -- Set false if you don't want to restore the ArmorVest after player connect +} + +Config.Refresh = { + enable = true, -- Checks the current Armor status and removes the Vest if armor = 0 + time = 10, -- in seconds (default: 10 seconds) + debug = false, -- Set true if you want to get a print in console // recommended: false (SPAM Alert) +} + +Config.alreadySet = true -- Set to false if you don't want that the Vest Skin will change if the Player has already a Vest Skin +Config.giveNoBProof = true -- Set false if you don't want that you get the 'nobproof' item after using a 'bulletproof' item +Config.giveBackVest = true -- Set true if you want to give the item back if armor = 100% +Config.saveSkin = true -- Set false if you have Skin problems on playerConnect +------------------------------------------------------------ +-- Animation for put on the Vest +Config.Animations = { + dict = 'clothingtie', + anim = 'try_tie_neutral_a', + time = 2 -- in seconds (default: 2 seconds) +} +---------------------------------------------------------------- +-- This Skin will be only set if the Player doesn't have already a Vest Skin and no item is set in msk_armor database table +-- If you dont want to use this then set Config.LoadStatus.restoreVest = false +Config.defaultSkin = { + male = { + ['bproof_1'] = 11, + ['bproof_2'] = 1 + }, + female = { + ['bproof_1'] = 3, + ['bproof_2'] = 1 + }, +} +---------------------------------------------------------------- +Config.Armories = { + ['bulletproof'] = { -- Item + label = 'Bulletproof Vest', + percent = 100, + skin = { + enable = true, -- Set false to disable change Vest Skin + male = { + ['bproof_1'] = 11, + ['bproof_2'] = 1, + }, + female = { + ['bproof_1'] = 3, + ['bproof_2'] = 1, + }, + }, + removeItem = true, + jobs = {enable = false, jobs = {'none'}} -- If enable = false then everyone can use that item + }, + ['bulletproof2'] = { -- Item + label = 'Bulletproof Vest', + percent = 50, + skin = { + enable = true, -- Set false to disable change Vest Skin + male = { + ['bproof_1'] = 11, + ['bproof_2'] = 1, + }, + female = { + ['bproof_1'] = 3, + ['bproof_2'] = 1, + }, + }, + removeItem = true, + jobs = {enable = false, jobs = {'none'}} -- If enable = false then everyone can use that item + }, + ['bulletproofpolice'] = { -- Item + label = 'Police Bulletproof Vest', + percent = 100, + skin = { + enable = true, -- Set false to disable change Vest Skin + male = { + ['bproof_1'] = 12, + ['bproof_2'] = 3, + }, + female = { + ['bproof_1'] = 13, + ['bproof_2'] = 1, + }, + }, + removeItem = true, + jobs = {enable = true, jobs = {'police'}} -- If enable = true then only the specific job can use that item + }, +} \ No newline at end of file diff --git a/fxmanifest.lua b/fxmanifest.lua new file mode 100644 index 0000000..0022e5c --- /dev/null +++ b/fxmanifest.lua @@ -0,0 +1,40 @@ +fx_version 'adamant' +games { 'gta5' } + +author 'Musiker15 - MSK Scripts' +name 'msk_armor' +description 'Multiple Armor Vests with Save Status function' +version '2.8.5' + +lua54 'yes' + +escrow_ignore { + 'config.lua', + 'locales/*.lua', + 'client.lua', + 'server.lua' +} + +shared_script { + '@es_extended/imports.lua', + '@msk_core/import.lua', + '@es_extended/locale.lua', + 'locales/*.lua', + 'config.lua' +} + +client_scripts { + 'client.lua' +} + +server_scripts { + '@oxmysql/lib/MySQL.lua', + 'server.lua', + 'server_encrypted.lua' +} + +dependencies { + 'es_extended', + 'oxmysql', + 'msk_core' +} \ No newline at end of file diff --git a/images/bulletproof.png b/images/bulletproof.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3aa86b7629eefc0c06c37f2a05cab7e89bc09b GIT binary patch literal 18558 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 {_}* ztOH?o*K9tWWGv8r30_W|#BQ!8ToUa3{=$wM_9rc^>o}eERJos%e){$5^`gR>!9~=+ zK9RaxoOEQhBsh`FOV1i=7&n^RkW}%)ub&}*P-7N)&QP;Rlyb>e2^XSy*$P%aox}G< z?{k*CkdrA0a_$MOGthA_S0#18!GMhdFUS*kNSoecQiV<0O|-BA>@D|Jh8a&9Bo07t z_^-1k%Pn7N5EaRK`AEIt>+EL=XP4Z-Ng*xuDh;~e5#Jljf6k})7+#idj`{3CiC<$a zC-bqOFM_^hA%jh5fL~Yn=}iR>tTZ+khs^)|^hRBE_Um?JVn%yq0jfiCL1eI`6+C+J ztsbats^$9hlLC));XkJti4d`Lvqfhx@6&|2+s>IW($pCl5aIhPYMqx;%(!voEwDCY zv)R)BwyLSBrs?UhVxqOcUx3I#SXcA8Ue1pd6bNJRNrqBdvm9`{RDf@+!nl8gtaf^z zw=x@4^b-Z z4!GB5$k+9Q^Q_=ezuszr?t_D1jf(!)*jJ~;Fxb(rO8>V45*5S|kh;W6&d@0pui*HW zJ&(`s*K1;HJ?sq`yKLwv5&`pRHRv9Hi6A}#Jxh2XIbKYBpr=mHQ4a}w^S|3uqSLTq>Y{RnjT?vI!K_EgI$0udp}L`a&Io?ex)OKX`OW&)}3uZmV9 zZkiQzn?@L|4D8WQr{$n~vA&D7&fS2=Y4dv<+&}dR$%h<`Kg+KxZJo%3AW;QP_m_MN z8lbML`hJnvYxFF;BW?1 zTtrv_?4Hjh3;7U8MXO6$KBZbBtaz`B=bOWw*2HaZy&`iX-f3gABnifXeg18e1jJ!w zMmtDnXY&L_0O08=EjzU78E)0mQPEMB>rCF0p~Kz(g3Lje^c860{65K=HW*rgmhXcM zAS(J|S^#N%ih-%;yrjzf4{0gh>@@636>mVvoXt5NnMrr}5MG?rxoC>=eW>hY;kVTP zO$v#wbtrU#q+`*87+%`_%zT*gl4Qyg-ThrDA!xp^`k_`Ia50EP^=>>Ve z2{n2W>!_H?luU7y_hBl^4RI;6fl@g5PgOkHiFvop3>*hi5rGW71u0EU=tRSpy2E|9 z_CpaXoQlg!#Ch|r2oEbaSMY^l6Sa8jQHQU(&`#DD0F@(kNNi;FGc-K%VJagpD=!@KOm z^9=EPwaeXEH6ZHS4r|yZzh%K`fm{2H9$*ZfzSjtl(pVBvZ4%zZyw6R=$MQ4#KqK_X z&17qR?=vMaV@J%%6*Mv~yohVHOaU!A7FKt{fdItKO=~^xO9$3;agZxFe#DJtCZ`M? z>*9(54EX+{5%fXy@6~Gs$k-9Ju9vFs6+td4{2N^OjMRa8#h*s?LhWM6r<8Vqu8zTp zfGhob`|jI^Y*rfSO@?(BmorL+wM2nLDC51q8mZ7+3wlJ{FJ>k>*4p4zV@DnwD|(D& z+F!P9q{Q4WsH5_Kb&@fbnaW10Y_+cjk$49-*(wpaF)Kw0-aJ<_sR;oq98uA z0q>6=bg724SzQ6%Zm93P7bkl6nlFxU#6oyy-qAgvq$|3*T+)7Z$Ng`>@CgPjV{x#9 zT_s=26{gF#H+@+B`0WedITDA7%rtRqTO3|E-<~()Z@#>dHCX5MXM(f5`TixP??E6( z!ng{Jb{l9cXQ-wD!W-VJw-YMgn^R*wrNo8rMiIP`AVJgLwPxUW>*P-yc3pAK7#BNP z=T-IN&>IAV+O{{{>o4?*H7%Do8Q;M>i3$$MMX}nLFP|)q9rEN%tJ@rLPTn(=SSQW5 z_Yb;a{!vR9MB^DD~pe zaB-x$8|Ci#dMK&#FtKnS>M8rWFEHnniQ;^Y%W8f4eX*Ud&oGf_Vz-^|Wk&JS&QL2~ zYxyN&wYT5ndohg~2k7053_(!YTPHSBU$s|cNxg&p=O@C5JvTH&w%PEZZS+Hd#+VOs za!PzS)QHvbZfK?WpnVd7Hs8LaBr%eP&qMpu0rqBHje&2coz<%&ZdVB)^V&~aX}$mT zs)}7JqIQ?QZ#co-7C3hbW(k@dg%|q-t(OnV=|7xCE)EL3OC)gY zRCyzt`JDb@;P1vgl#rc4baCJo$o43&k?n^=J%t`*vo{_&){T1mw3!~{uooHBRJz>7 znnkt-PD)4iwchx_aNJpv8$W+6iF~PX@_D$%I}V?_$VIjDI72F!Ts&v`GkhZ3{_fjBkFkYwR}y9V1QKn{0vN2Y-$O6(8-hR(~qoy?yH9{_bmYY)K8j}4}49xx(zFa; z8Tb9X8hKzz_?S?YQ^p-xSdi#mmk~%aT))P1y0`P{Esy~%%*EsTTi1~*=RsFyTJ_rg zrMIMLIx8!C{sOJ!(-VIQ$az>0Y1DWy{=eq+wjWBkJO+mRii2~6aRN5wfQFa(jiZQH5{kb0J1zk5j%GE zBjO6+1!m1UD*Ju=@8pcV$v21P2?a-8ATki3?-YDylMP2q#ASz3iU(>AK6^cW{;Pni z;gYa*^j``Wm(N`$yuDs`j8h`*h=NAjgAiK}_n4)3Ph+mIw(NQ@w@nntzkgYY1WbayUw zP?ZFJN@OiJK#t*dtiz>b|ia&Td8I zUt4(esm)k>6d1x(`#omgt@Z$oM_mrze<`S+K? z^R@ZM3Ao0EIH-93(cGKjNBl=mJCW9EA^i!K6u2v5cNXnvWV0iWPbm;(ndAHrq33f# z>X^?;-5?)$8I1E#*t9J#2sjD-fQ`5@roZ*cIEPt8*S6V?V&hl+97)=M#0gyrR;5S~ zhKwgx{6un*>zz--T;3wAMXTw}EQW+XLbyPSu~+!-72a!@(!CvG0b%R|6LsbefkF`D zykEicHr0FmyE!nFOdT%@#q6k-C2HtINkUO1@h|+kjuc{Yda`B6fEq`>ggc37=;q7# zYh!z+f~trhG{9wXvO4uka`f^7M5<$1w2^<4y-@Ky#8%*;?7P9C^uomxu-l2T7%zr- zisy~%W9uGntKl`%%9WMxG`+Xj$^8org_XmCmm@sI)ihJw-z|9JEPK_s^-psEB+9kq z>}#mBP_wN*Wf`4cBX`w=G=Jg{dQjWc*juNO{*LWk56FcRg}6K^lNn#H&9&WtQM`C9;hSz;)B8j4>#r%M%T6SadnVcP77amlmQ#Q0xF&Y>W&{4 zF&MO(9DTl!aAZwImp zOX%cu$|gg4C$au{SZU4X@8XWj$Tm=vio*cXtj6M6Fd*H@01}FPv$98=(_a9b*-Xs7 zH#0xZ_20)xiLFA)HM!-~=_MY2lE8Huy8*ykg$7I6r-Su*esezK^4^2Eecq-F(rw2Ouo$U)rkI$?Yi(2XZpo(-H1O2heo z&$6_lxIgf?4=|3)sGZo3qus(BIKqyZc!3L^2-ZmOcmCQ_Q`7$ZjvI7~MPcVf56Q_y zgK0`IybE=7!eR-|&8%Ks@C+jHc>C*F^-PE*C>Iks=p8;o%gC;FxF}s{-b1}D_JjDv&lL4;{I2l?S1evh zZ#zF3%F(2?>owp0d5Kdss(`qYXz`I~?F z5)35!eD(=FaOZcYz5ltju{jq+zcd+Fc(ILo#Em4n*1@j-)+MS>G3c2Bkpf;-kQzj> z8VjZwGPhzX9@*L!Pk(>e4L)%C|ZABw2{-VMBvH!zo5{dRJ>EfJ1Oee#C~gbL)jb6ccx?XIxXh!m!CP^84sn*vI-6VN=3{`*w<6rdso@xE8*!P`!AWp*D=J9DTeYF4G8fG$SBF{I=*${d1VlCMhd(P8jI`b zDxZ~61j7A=E&9hnFeBRVZ99AP7!)EeZ$TTs2^=5njAMl+qgWMj}h zj4HuHiYa!yzxyLTj-*0et!l%??x|1gEiE6vGSp9IwNk;MnM6PF2L%F=htIMXo>EjO z3A^W1=TgrTD3N5Gxa{v>to0ijKq`N~@w(l05&T5cVj5PvcrtxS1H~HMG}`Jr=YOB< z*%RaKJenUH{Ba;A%1RvgXvnuqH~zMb4rg*(3)9upb(8O4>$uk}OF_xY8J&}&JjcMW z1jJ?$|F-g6?LEtW{`9Q!kL)J)Zde~N9?satGSL{Wxa+&A(u{eXqF&VceD~naA1_X= zda(BdJ`Z<3mb7#~*5q5Ncr%>qlb#PRCi>Kakeb!Uhw<3RB(3haS82uhY-7Fc&DR_ zkY~Z3E8@F2w|({%DP8^|IuYH?prDfzjEUXK97E8FU2t*!k&x%~Cniu1ke7q_X`xkn z-X&1Xe$DaiM^|@rd<1;ZWm1Zb(zCvkGxxVdx3`(kx_!Ss&F132zJ6$>%f7Yv#@OXv zJ9Oy>IuSAPLa@Hu#W?-1NOoXNWRIRkadV|o9nQ|tekQyYL1il#-ARJ#@Dm8s$i*BHc(ycbAADNJ~jdigY&|C8fJd`havE;&3;=`@bLW zc*l6(PwzJdXRq38t~uxPtU2dyf&Ja^Z7ta6rq~E+U--9)U47$@-|tcRTab!)(z zmCysX5^?bmCCLI@OVgNQeB5KoJd1dLXm7Wrt$l*79Z16n zklhcJn7TSRF1(?hu@PJPF(%dHPe7R@2YmvOVN3IzmGiU(zoVRFV}p$XUY5&l21zo@ z7|)|C3_7DgxXc!0jmz_HpZ)GCDh)kS7NJJ*li$Y6DLME`l09Z=|GRHjQKP2&>lD}G zu*$P;9=1?gQlplh4t-aN0lI@nJ`ox7n6-v)Q2~)@D&xld<;FUnl?w-EeC^>T zoUfG3cyB3pV_)jP2(}EoU(K-dXy{yO6JArBbZi3H1UCImN$VV+4r)r{(~1sHI1F!Y z6v;uIsdKInBt(t=Zh8+^BCj%WOb(d< zL++j>kPd5;H=Vmz_N!`B=sP+N{rt(r@b7E>N3nOT&!{!GUVpFB{9ZNDX7ja3;Zc#o zkk>&dZ=}pYJ4ox{m@BVXy{|E>>>qM|atgG^Hsq0lS;K{30Jh9q{2%rIvF#;4+YS1`x(YxTdnw|Tk3-v{4ah+{*wDJL zA*MR^1v@E0Yo{6UGHaAXTI1gk47~YM)z}tucobpKL8Ano{(dg5-0Rplk3ulN*?!7( z#@gkbbagJcCZ|@p=={85x9<<1&Bf&OIh;~R&g~1rIKaez(O0Hmur^{MH)b&vOqMQI zY&tjD{t}tD+fEysA2g4aJU~yl{0@PuMugL=clQ#ZaBR)9yqoBDQaPZm#z5rhTQ*Hz{G;WpX{laufQm}*^CHKay(#t z!v7EH-XM?t|2|jz|JJzk&hcO7<^ya}Y;|XoZZxpM$45TbUO$(DW%^%Q?6BEk z*CEM{ty-0npg5#}_nh5ef=#{)=A&O0kd(kAEaQX$0 zzuG50VL5E!!%G+3D-CE(%920sLNqIcZ&lh}XfjdErlcsRvf$h1m8j^P-l3<*>V^B` z?SF1!W)NG6%X-`yycT>;G08V`Tz|UMc$Z@Pas26veC2nTMoNsnYND zzRkzM7!^MR15dL2I)~IG-#L0yaz)`g$i>Tq2Gs{O2W*tEHtgmxQmJhrpBiZ8V30hIVQxw9K+FyLlCJ5cO%EERix$QmW=ZAZ%sCK?enWcs zB=&t{J?vYL%;>hWvZO24ZCGMMhAfP8w!J#ty}Vs{V>8M@j>rlf&J!e7;Uxs$1Y*&| z9}U#ayfNUnTYwc9`%#K``!7U8AOu2_lgC3jn3{H1y?d-?Jqd83pk-MBeGF-KUi!n2S8P42nY(AziMx&1(UQF@$hMqaLyo5V$7(A;qM>CYFktv9>Gc35n za4O9=B4&8`{i$!Az3Fh>ARafZjI1SLJ;Uc-a%-ECt^Bb4Tsttf_Su^2$IeV=X|ltg zHVo9-0QUnj{T(Jgb^(qwf%2Q@GIBAlViDmqFS-h1yv>(#FX!|Yqakrmu($!E=Qd_O zV?*fA(L3<2LcczC|7_>&i#UqIUuor)$N5_e(a-i%fQ66_Y;+Z@pva(Iyd9?Ky``qq%toXh zRKD|-#je)T`EPHBp2rvKKyeU1OBeHj#~}ZYL@#oJlPLjL@HD5*E5PE%mX7(8h6C~3 zW~F8gcWOr70no*4En;a_iuGC+`kdChzXm2{!5h-cXk+cF>aB-XV)Z z*_kwhqxe~PKxjBj2|7TnCh^jC9IZY<-i|_cx-=+v(+#)5EX*A+2pDuXa9yK0u4S_C ztf{XZ9i5U@dHdwae0`vMH5>>wZ*K+NhX^Hlw zh2by)?kUwhlUJdE1h{6Qx`^N4RN=cH(< zdfp~-e0xsv@&{A`*Gja+TwNnh6~)a?r`wmFbrx}asS)V1i zZ#oi(cQcZExat>&LU6OJM%2Y(T3OBGseM zM!fDFn>jO``Lo1M0es-)aJtdW(I^XaBmLxyuf5S(v=J_8Wl3vos7mob;BA)AJ|60_ zckSJU+v!LHBLzNyE-fpI)sF1PQ2yr8qLCG}JY08H%#}|}6lA}vMS^!3<)bWe#E7~W zzDUT-bYM&D6vGFO)hLa4JQwbs`r}?xp3OEnB<8~)=oJ=w*Rp3wf82)KrR&~9A1q8LELmbk5uc)g{;I+&$lBwt;??=aqCm+wJ~!N&0l~+v->6%&#W6ktdlnfV z7Ec==N;92cc#WGF&PY8zJf>^h7*3)pwx~*>z)A(ISF~N^W>J(*SJW?zZfZh~9nbCN zR~w!)F@+x7tdK?8FveK}u^smt`nfO*(GUPCRa1LSh#4czqe{o-6I$WIEO!E?{9I1v zcvudabo4eyvf+Ni)bx_7t4wQ`AmmSBQCrebv`5bwxsgX`mtefLAka&sB6VWN&(BXY zEj+dTLYjyqO6YC0tw4*Bs%QuDt+;|8II(bk-&2#DuSL+29D1JP`weawu$j@yQdi1bN69*d6NzJs<~Cp`xz&%Ab+&{$Bgss*el$k(y;;q7q5Fcp+k)? zUW%skY=~JmoIfS6G#v?l-BX((NguO(NB%!@GCX_rM>f-cl`oerL@v7St1M$7uV2+jgx1*6+fWaGtZ#yw}?^0SuRLPnoR zC@6!&X8r!l+kT5EwVS=H)X384$pq+P@--m}Lu;n%Uu|T$`h*=6VyqzoDn*6Vo@Bb;SD*_tj(Uc=CpHgp6%w^~W=l#}v>@ek!U_wD@0nrS)inh9Lnz?gmg!z+tgh|Kcbkh&?d9ozR{Wi}!St$@2=Klh>1sesh*-Z)H*fJ{`onDr0Q zorCM#_{>bzfEQ@Gvl2&^ma?Zhm5daRh`y}84Z=8cpV$*NDr*FwJI3zJYF{Tt+?k}~ zb@XJhj5AKmj~~^ZmCM&mXz#7fHU}!f%lpq?3awbr%O~uLIZ{q2et@2hakw9of3CU- zz4K&=D8P()yya3^y4lp&}ZrdwWL(C#N;)9b@J-I%&D!p5e#(03g{! zCl38}@8JCHQQr76tIe`O@*Bd}wf5b5-~m-}F$ATa-I*ta#slSgP6LF-EN6==)XcsR%`iHSWALy>)ZRoCsG+%OhF8RNLP2ZF zV!#_|BVbA8s0e|0c#G3TbbnzH;)-gWum7NRp@b!j;rLCk;z(s5jSP)kcbkciwOQM7 z=&HLGkCPJNK}v)~_wDQV^55^M5u$Yxi+~Ne!t;Yh^Q?9Y4R}mMcxPWreI{ZeVRr4y zuSSdt^ngCoF;lIu@X=KD$;{CaR()=`|8CHDu;sYy^YRTcbRM)fT<4_8phklKsV+0= z{ZR?JjznSX!hr)3TVx}eg%Uc%oq8*NO=PPAme-aJ1c#3gh5G%O6n!=~1rT3cDFp0A zK_Akghloh#S5TG;$Fgb1v9^tkos(EJv>s?kD%;vG37;4@mkK=^=ZMna8BN>;+yxBS`k0E~(pF#gZe|w}UIfRH zp6`AY$HEkv-Xgh9MjEd_lNBHn#^>Z!ME8$`XiopztiBOg_K5)8W$Ting2wOBPOR%5 zHSgB2>(Cs>&%_srY03^SEE^4S(hciCI2UB_>3i231;o^_`idoL#(12K<{!*HrAX?Z-YQM^pM0+fTbfv)Ze@^S9zjx z=I&NkKZ@9eADj@KUN1&pgueXC8xUwU5u@MS93P!zS-8Owv?tA>{?JbHa(Qx2VY*eG z5D!!7?>xk#(TM2DrBq?m z2<w`M^*hn0mVYi+1G ze2i^eTKfTPRU0~xRLh}z+lN~tIMtjXJ5Yn6je%rbw_+Sqy+`qH70=o%f~1y=%buU{@X#%_=SZY!hglPJnzN^QT$fq$9zV=!1d z+MCX{$Q3QLjP9`#>z=tuIBMIBb$0WdH^Lv_`ZIo_{ZU$Q6XK3XE0HZMJZztNUs?A zt{!|m`xz&%3ChP($_48nzB~AqE;2T1Mi4-3@GlE&1)6)_;I=9sM9vEAyGF*p%c@iy zdSYjIDV=J%Y`=A2BvDMfek~eN9&qyh`0Ct!?qyrhf96~3eewC5Mt?E-a$}{*rB))5 zsc-o_yl$t^D*`IwI27cVN2r-Y_vGgh6|dYx;D|}L8i-}%i631NX3J@jQ5rdRMw8pl ziQNi%UgdbS6nyeY8p`U~KekuZ&l|6$Q=1(n6E(!K7B%!GqpwXjYW3ROyFg?Vs-WlE zPe<=@8n%R!lMh&_S%gk5fod|dhAt z`AK(=)^Sc$tmysc{c4rLDExuOL%%t_Zy9wd1TDTbuT&k;-iegty4^g;xH06=!n_j}i#^M5eoI__i`+usHf^S&B&HQQDHR>DjuJmkwY3vM)VuQu)d^>Mh3G zKlD#0NpAP-TwG3A=>)p-LUSi)(@{L`H)^aBi=(BFDp{F?5-F1n`redtZS7DyK$yCQ z+7FA9+oX9{>c^B|1WyjHbx(F8wS4mP3S9P7mbZ$ulbweKbmvgl)do%Bsg@oNZl_FT z8Q1YC!U73*O=m0%C+p%q8{Zr^MyA|?28)-fW0hg3#m%<|BbI*?+ZS&9_WfNX?~on( z2|G(|ewkRnUl0%3Kj%Dof19<-pTVebzfTyp_qaC17`nqg2GWWCO$o zQoT0#?T9)KI=Y2}7LEkn(G;vrgnEqGlI%WF*Cd zmeK3I{w>_@8PWy&4;5_X6&9W>(%*Le=*c|hN*W7itZ$u<_6e?+SvajWj*W{mWs71Y z2Emt3VTN#sDTAzN*|Pa%J`==H`4b|3Oe5Xzyb(l95DO967<f(0O^KD`~fcy_R;9T^**vTa`xI~-=K zrLPS647wLI8n3*;+>`?sgDm}#VKb_@^#og9;9uFypZ$o8^WXBn?@{n+UyfAX(*EG|FRFWWsj$0RU`gk%thLZ60LLe~zXYaGd7bZF}+S|u} z^gIpW;UYpNzhF>|+M&O^%>co;z9PeC7)Fra(Bj<*2i4Ad+UY`H0ZIeWIWv%;5z2Gp zL>O)DqD^RNI}h)**QLl4hk{bj8E=)v*K|S1>$mz2qw}{-eMi210hgU4va#^qLdC+AzygQsUn(VfM@gZA_ri_?6l=9~ zaZLwAs)j7~0LR#P@6`XuD;2>WG-YD+9!QP+2m@2lr*_ND&%_+{6`77yF@g@kTB
cQ&tKkKFg90tth?y zUkZ9C@Z$p9_umM(nT87gc>Q$i?=5B}DmO0nd;p!{1#2ZtXBu}NCnxLBcYcaWlLs#hw0t9azyJ4l%ENo|U9o*C$&#*RmrxuD_fMBx z^BZd0HY><~Q z=eV(@IYnC~j@q}^MGKV~dlvdQSm;C|T20ga8}&EBAmqy8 z`@e@@M9&}8o6FnjgoY$YrL63=Dyq4rH*y<_c8CQvpFoEGudsqDx(oq6yET=neufq#Gz-@V%+ARL2Ro+T5L zDFS*G3hz^AC6Ild4%t=?nfJJt2W>ustdNS%58H`rh@SZ?G-28i5NN;lcR4-={Xa-h zy&M@6NnwR;KZ{$UUI@paq>zU|KcnLY*xS}AdJjv8Q}8Cz1S{PUC>;|@!vlyS`k#Tm&6@tQ9IqDc=SGXgk#MKHvaH(_jq@5`n)}^H zPG03bc-=%53)Ksb44$?ZtiC;5`V6lQT2lIKjuDpZa)TrvFPHaphpjH6GUjz_-w}az zSKP%SQf9FY&`WA2d5P5yF0fGq29JZ6h}q}}W#pnP`g8@hrR*B!ZD5^MpzExAeMRh% zXg~HO`0@neM5}I5ZNq51-29*ce}v4Luf+4kGm!l%blW-dsa0cqC@4IkQRl$~UXM6u z7l6L~SSw+$@rb+cVv~G(`vKYzS{eEf_Lc0V*BEU~So(taqcA-4k#G$>8or1H^u1oz z_!7{d%~adt`qn3EwAxxtN4qtNuGCSjSgbg&2tgWF9R$e_j{tK56h4+qkTcwlWzgmL ziq~vR(-%RktoJF|tvnfooJ%E~F2~pL`szROeP6AIqoY*8Zf(lSyQZgP3;%<$+2dOt zH9Vw`LJyImIROiXX~JVWejLk~Znu4oSRNQ@1gKXQk0Ljf7EM}`X)uV)$_5Qw!@L$UQEtf!*k;n*m7YKaYv3(duV;{^3fjneh|BZY~LohyOQbS?Kd3)ta;hVqx(|p)?taUj(NoALCtSB!%(L^!8xYV*~UR<2FZ`$NatuFc_l) zX2>W#@Y6$d=`(rL^Ksj1(k>$K8KB4NXpg?EI#mV+Tm8C>ENO1BSy`_Eh5MWgD@d3|`%{OV*V>av4RENX zO9P!klW|{1^UJ2T6W1)JN?xD^7i!dMx_dRL`SxE0g&a7TEQMd&HUWTteeoK36voUY ziV(eMWCuGVFi9O>b%GAe4@+7cGZuu0cd`Y-=_iGOm%jj8BRyrPom;;trJ??H6ZkZ+ zt#>k0IoI0kZ8bVxS9L!{>x1z9kW*?S-%!~TtKlz0-gS9Rv@6*zE3)w2niqrnim%7V zDb&S(8?h4+ebz;5&#F7$zKva~I;MTzew}2KMz$grw3}RNZULIJkRTgom2VlT&MK+@gw>mJG9d6i5!RJD<|Nh*m^Y*scTiEF~erS?twy$%*=r*mm zX|=C>4gd>}7EGIqggMf_=XUdFzhm^r!pqanLI*jXy!^s>$*qk3$>@OQhzBCpM}=`8D?H+<_ySVPmK$K1)9S zWn~os+zJ`Y;pCmnNJK=0D;nhZ*qkLWyfh4uDh8`+ST@nZV6aX&K0MMP44SS(3uN0C z<^{l=9k9X2oma}?_Tc~Hb?5*f2{0c$0m&d@V=@rvk1iHovUaY@1ls%gy3ppi|2u#~{S;{%`Q_wrtnCh$cN+;ZGif^?Z_ z-p2>pqTu;z`ruY7f6dNIKC|sWb4~0HT$UKDkTz+N(6}F#)5p3V@{G4yLm;a;1lgfw rg_p&_T-bM#SW8$`i;-mBcl3F5+69vxBIMvFm;i-Ws<5(`CLjJ6CV!v; literal 0 HcmV?d00001 diff --git a/images/nobproof.png b/images/nobproof.png new file mode 100644 index 0000000000000000000000000000000000000000..dac6e57e751844b50bce7bb16ad43226a289b817 GIT binary patch literal 21433 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 Kbp3fu{C@y*{QegJ literal 0 HcmV?d00001 diff --git a/locales/de.lua b/locales/de.lua new file mode 100644 index 0000000..6022fb2 --- /dev/null +++ b/locales/de.lua @@ -0,0 +1,5 @@ +Locales ['de'] = { + ['used_bproof'] = 'Du hast eine Kugelsichere Weste angezogen', + ['used_nobproof'] = 'Du hast deine Kugelsichere Weste ausgezogen', + ['no_job'] = 'Du hast nicht den passenden Job um diese Weste anzuziehen' +} \ No newline at end of file diff --git a/locales/en.lua b/locales/en.lua new file mode 100644 index 0000000..6022753 --- /dev/null +++ b/locales/en.lua @@ -0,0 +1,5 @@ +Locales ['en'] = { + ['used_bproof'] = 'You put on a bulletproof vest', + ['used_nobproof'] = 'You took off your bulletproof vest', + ['no_job'] = 'You don\'t have the right job to put on this vest' +} \ No newline at end of file diff --git a/locales/pl.lua b/locales/pl.lua new file mode 100644 index 0000000..d106beb --- /dev/null +++ b/locales/pl.lua @@ -0,0 +1,5 @@ +Locales ['pl'] = { + ['used_bproof'] = 'Założyłeś Kamizelkę Kuloodporną', + ['used_nobproof'] = 'Zdjąłeś Kamizelkę Kuloodporną', + ['no_job'] = 'Nie masz odpowiedniej pracy, by nosić tę kamizelkę' +} \ No newline at end of file diff --git a/server.lua b/server.lua new file mode 100644 index 0000000..3249d33 --- /dev/null +++ b/server.lua @@ -0,0 +1,193 @@ +RegisterServerEvent('msk_armor:giveNoBProofItem') +AddEventHandler('msk_armor:giveNoBProofItem', function() + local xPlayer = ESX.GetPlayerFromId(source) + local hasItem = xPlayer.getInventoryItem('nobproof') + + if not hasItem or hasItem.count == 0 then + xPlayer.addInventoryItem('nobproof', 1) + logging('debug', 'Item nobproof added on Event giveNoBProofItem') + end +end) + +RegisterServerEvent('msk_armor:removeNoBProofItem') +AddEventHandler('msk_armor:removeNoBProofItem', function() + local xPlayer = ESX.GetPlayerFromId(source) + local hasItem = xPlayer.getInventoryItem('nobproof') + + if hasItem and hasItem.count >= 1 then + xPlayer.removeInventoryItem('nobproof', hasItem.count) + logging('debug', 'Item nobproof deleted on Event removeNoBProofItem') + end +end) + +MSK.Register('msk_armor:setHotkey', function(source, itemName) + local src = source + local xPlayer = ESX.GetPlayerFromId(src) + local hasItem = xPlayer.getInventoryItem(itemName) + + if hasItem and hasItem.count >= 1 then + xPlayer.removeInventoryItem(itemName, 1) + + return itemName, {label = Config.Armories[itemName].label, percent = Config.Armories[itemName].percent, skin = Config.Armories[itemName].skin, removeItem = Config.Armories[itemName].removeItem} + else + return itemName, false + end +end) + +for k, v in pairs(Config.Armories) do + ESX.RegisterUsableItem(k, function(source) + local src = source + local xPlayer = ESX.GetPlayerFromId(src) + local hasItem = xPlayer.getInventoryItem('nobproof') + + if not v.jobs.enable or (v.jobs.enable and MSK.Table_Contains(v.jobs.jobs, xPlayer.job.name)) then + if hasItem and hasItem.count >= 1 then + xPlayer.removeInventoryItem('nobproof', hasItem.count) + end + + xPlayer.triggerEvent('msk_armor:setArmor', k, v) + + if v.removeItem then + xPlayer.removeInventoryItem(k, 1) + end + + if Config.giveNoBProof then + xPlayer.addInventoryItem('nobproof', 1) + end + Config.Notification(src, _U('used_bproof')) + else + Config.Notification(src, _U('no_job')) + end + end) +end + +ESX.RegisterUsableItem('nobproof', function(source) + local src = source + local xPlayer = ESX.GetPlayerFromId(src) + local hasItem = xPlayer.getInventoryItem('nobproof') + + if hasItem and hasItem.count >= 1 then + xPlayer.removeInventoryItem('nobproof', hasItem.count) + end + + xPlayer.triggerEvent('msk_armor:setDelArmor') + Config.Notification(src, _U('used_nobproof')) +end) + +MSK.Register('msk_armor:getStatusFromDB', function(source) + local src = source + local xPlayer = ESX.GetPlayerFromId(src) + local vest = {health = 200, armor = 0, item = nil} + + if xPlayer then + local data = MySQL.query.await('SELECT * FROM users WHERE identifier = @identifier', { + ["@identifier"] = xPlayer.identifier + }) + local item = MySQL.query.await('SELECT * FROM msk_armor WHERE identifier = @identifier', { + ["@identifier"] = xPlayer.identifier + }) + + if data[1] then + if data[1].health then vest.health = data[1].health end + if data[1].armour then vest.armor = data[1].armour end + end + + if item[1] then + if item[1].item then vest.item = item[1].item end + end + + logging('debug', 'playerHealth: ' .. vest.health, 'playerArmor: ' .. vest.armor, 'Item: ' .. (vest.item or 'nil')) + return vest.health, vest.armor, vest.item + else + logging('error', '^1 xPlayer not found on Callback: getStatusFromDB ^0') + return 200, 0, nil + end +end) + +RegisterServerEvent('msk_armor:giveBackVest') +AddEventHandler('msk_armor:giveBackVest', function(item) + local src = source + local xPlayer = ESX.GetPlayerFromId(src) + + xPlayer.addInventoryItem(item, 1) +end) + +RegisterServerEvent('msk_armor:refreshArmour') +AddEventHandler('msk_armor:refreshArmour', function(playerHealth, playerArmor, item) + local src = source + + saveStatus({source = src}, playerHealth, playerArmor) + + if item then + local xPlayer = ESX.GetPlayerFromId(src) + + if item == 'remove' then + MySQL.query('DELETE FROM msk_armor WHERE identifier = @identifier', { + ['@identifier'] = xPlayer.identifier + }) + else + local data = MySQL.query.await('SELECT * FROM msk_armor WHERE identifier = @identifier', { + ["@identifier"] = xPlayer.identifier + }) + + if data and data[1] then + MySQL.query('UPDATE msk_armor SET item = @item WHERE identifier = @identifier', { + ['@identifier'] = xPlayer.identifier, + ['@item'] = item, + }) + else + MySQL.query('INSERT INTO msk_armor (identifier, item) VALUES (@identifier, @item)', { + ['@identifier'] = xPlayer.identifier, + ['@item'] = item + }) + end + end + end +end) + +RegisterNetEvent('esx:playerLogout') +AddEventHandler('esx:playerLogout', function(source) + local playerId = source + local playerPed = GetPlayerPed(playerId) + + saveStatus({source = playerId}, GetEntityHealth(playerPed), GetPedArmour(playerPed)) +end) + +RegisterNetEvent('esx:playerDropped') +AddEventHandler('esx:playerLogout', function(playerId, reason) + local playerId = playerId + local playerPed = GetPlayerPed(playerId) + + saveStatus({source = playerId}, GetEntityHealth(playerPed), GetPedArmour(playerPed)) +end) + +saveStatus = function(player, playerHealth, playerArmor) + if not player then return logging('error', '^1Player not found on function ^3saveStatus^0') end + local xPlayer + + if player.source then + xPlayer = ESX.GetPlayerFromId(player.source) + elseif player.identifier then + xPlayer = ESX.GetPlayerFromIdentifier(player.identifier) + elseif player.player then + xPlayer = player.player + end + + if not xPlayer then return logging('error', '^1xPlayer not found on function ^3saveStatus^0') end + + MySQL.query("UPDATE users SET armour = @armour, health = @health WHERE identifier = @identifier", { + ['@armour'] = tonumber(playerArmor), + ['@health'] = tonumber(playerHealth), + ['@identifier'] = xPlayer.identifier + }) + + if Config.Refresh.debug then + logging('debug', '^2Update Status^0', ('Health: %s, Armor: %s'):format(playerHealth, playerArmor)) + end +end +exports('saveStatus', saveStatus) + +logging = function(code, ...) + if not Config.Debug then return end + MSK.Logging(code, ...) +end \ No newline at end of file diff --git a/server_encrypted.lua b/server_encrypted.lua new file mode 100644 index 0000000..2df7aa5 --- /dev/null +++ b/server_encrypted.lua @@ -0,0 +1,110 @@ +AddEventHandler('onResourceStart', function(resource) + if resource == GetCurrentResourceName() then + local createTable = MySQL.query.await("CREATE TABLE IF NOT EXISTS msk_armor (`identifier` varchar(80) NOT NULL, `item` varchar(255) DEFAULT NULL, PRIMARY KEY (`identifier`));") + local alterTable = MySQL.query.await("ALTER TABLE users ADD COLUMN IF NOT EXISTS `armour` TINYINT(3) NOT NULL DEFAULT '0', ADD COLUMN IF NOT EXISTS `health` INT(3) NOT NULL DEFAULT '200';") + local item_nobproof = MySQL.query.await("SELECT * FROM items WHERE name = @name", {['@name'] = 'nobproof'}) + local items = MySQL.query.await("SELECT name FROM items") + + if createTable and createTable.warningStatus < 1 then + logging('debug', '^2 Successfully ^3 created ^2 table ^3 msk_armor ^0') + end + + if alterTable and alterTable.warningStatus < 2 then + logging('debug', '^2 Successfully ^3 altered ^2 table ^3 users ^0') + end + + if not item_nobproof[1] then + logging('debug', '^1 Item ^3 nobproof ^1 not exists, inserting item... ^0') + local insertItem = MySQL.query.await("INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('nobproof', 'Bulletproof Vest', 1, 0, 1);") + if insertItem then + logging('debug', '^2 Successfully ^3 inserted ^2 Item ^3 nobproof ^2 in ^3 items ^0') + end + end + + if items then + for k, v in pairs(Config.Armories) do + local contains = table.contains(items, k) + + if not contains then + logging('debug', '^1 Item ^3 ' .. v.label .. ' ^1 not exists, inserting item... ^0') + local insertItem = MySQL.query.await("INSERT INTO items (name, label, weight, rare, can_remove) VALUES ('" .. k .. "', '" .. v.label .. "', 1, 0, 1);") + if insertItem then + logging('debug', '^2 Successfully ^3 inserted ^2 Item ^3 ' .. v.label .. ' ^2 in ^3 items ^0') + end + end + end + end + end +end) + +function table.contains(items, item) + for k, v in pairs(items) do + if v.name == item then + return true + end + end + return false +end + +GithubUpdater = function() + GetCurrentVersion = function() + return GetResourceMetadata(GetCurrentResourceName(), "version") + end + + isVersionIncluded = function(Versions, cVersion) + for k, v in pairs(Versions) do + if v.version == cVersion then + return true + end + end + + return false + end + + local CurrentVersion = GetCurrentVersion() + local resourceName = "^0[^2"..GetCurrentResourceName().."^0]" + + if Config.VersionChecker then + PerformHttpRequest('https://raw.githubusercontent.com/Musiker15/VERSIONS/main/Armor.json', function(errorCode, jsonString, headers) + print("###############################") + if not jsonString then print(resourceName .. '^1Update Check failed! ^3Please Update to the latest Version: ^9https://keymaster.fivem.net/^0') print("###############################") return end + + local decoded = json.decode(jsonString) + local version = decoded[1].version + + if CurrentVersion == version then + print(resourceName .. '^2 ✓ Resource is Up to Date^0 - ^5Current Version: ^2' .. CurrentVersion .. '^0') + elseif CurrentVersion ~= version then + print(resourceName .. '^1 ✗ Resource Outdated. Please Update!^0 - ^5Current Version: ^1' .. CurrentVersion .. '^0') + print('^5Latest Version: ^2' .. version .. '^0 - ^6Download here: ^9https://keymaster.fivem.net/^0') + print('') + if not string.find(CurrentVersion, 'beta') then + for i=1, #decoded do + if decoded[i]['version'] == CurrentVersion then + break + elseif not isVersionIncluded(decoded, CurrentVersion) then + print('^1You are using the ^3BETA VERSION^1 of ^0' .. resourceName) + break + end + + if decoded[i]['changelogs'] then + print('^3Changelogs v' .. decoded[i]['version'] .. '^0') + + for _, c in ipairs(decoded[i]['changelogs']) do + print(c) + end + end + end + else + print('^1You are using the ^3BETA VERSION^1 of ^0' .. resourceName) + end + end + print("###############################") + end) + else + print("###############################") + print(resourceName .. '^2 ✓ Resource loaded^0') + print("###############################") + end +end +GithubUpdater() \ No newline at end of file