From a3ca4ffc8483cbf25a742518fe188b4245300475 Mon Sep 17 00:00:00 2001 From: andristum <47616367+andristum@users.noreply.github.com> Date: Thu, 21 Nov 2019 04:00:29 +0100 Subject: [PATCH] 1.7 Advanced keybinding. --- Client/AnimationList.lua | 13 +++++ Client/Emote.lua | 66 ++++++++++------------- Client/EmoteMenu.lua | 79 +++++++++++++++------------ Client/Keybinds.lua | 104 ++++++++++++++++++++++++++++++++++++ Config.lua | 112 ++++++++++++++++++++++++++++++++++----- NativeUI.lua | 63 ++++++++++++---------- Server/Server.lua | 65 ++++++++++++++++++++++- Server/Updates.lua | 4 +- __resource.lua | 1 + dpkeybinds.sql | 16 ++++++ version | 2 +- 11 files changed, 410 insertions(+), 115 deletions(-) create mode 100644 Client/Keybinds.lua create mode 100644 dpkeybinds.sql diff --git a/Client/AnimationList.lua b/Client/AnimationList.lua index 179858c..eb9a70e 100644 --- a/Client/AnimationList.lua +++ b/Client/AnimationList.lua @@ -1964,4 +1964,17 @@ DP.PropEmotes = { PtfxInfo = Config.Languages[Config.MenuLanguage]['camera'], PtfxWait = 200, }}, + ["champagnespray"] = {"anim@mp_player_intupperspray_champagne", "idle_a", "Champagne Spray", AnimationOptions = + { + Prop = 'ba_prop_battle_champ_open', + PropBone = 28422, + PropPlacement = {0.0,0.0,0.0,0.0,0.0,0.0}, + EmoteMoving = true, + EmoteLoop = true, + PtfxAsset = "scr_ba_club", + PtfxName = "scr_ba_club_champagne_spray", + PtfxPlacement = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + PtfxInfo = Config.Languages[Config.MenuLanguage]['spraychamp'], + PtfxWait = 500, + }}, } \ No newline at end of file diff --git a/Client/Emote.lua b/Client/Emote.lua index 4caf71d..79e6ca8 100644 --- a/Client/Emote.lua +++ b/Client/Emote.lua @@ -32,18 +32,8 @@ Citizen.CreateThread(function() end end - if Config.MenuKeybindEnabled then - if IsControlPressed(0, Config.MenuKeybind) then - OpenEmoteMenu() - end - end - - if Config.EnableXtoCancel then - if IsControlPressed(0, 73) then - EmoteCancel() - end - end - + if Config.MenuKeybindEnabled then if IsControlPressed(0, Config.MenuKeybind) then OpenEmoteMenu() end end + if Config.EnableXtoCancel then if IsControlPressed(0, 73) then EmoteCancel() end end Citizen.Wait(1) end end) @@ -52,29 +42,30 @@ end) -- Commands / Events -------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------- -RegisterCommand('e', function(source, args, raw) - EmoteCommandStart(source, args, raw) +Citizen.CreateThread(function() + TriggerEvent('chat:addSuggestion', '/e', 'Play an emote', {{ name="emotename", help="dance, camera, sit or any valid emote."}}) + TriggerEvent('chat:addSuggestion', '/e', 'Play an emote', {{ name="emotename", help="dance, camera, sit or any valid emote."}}) + TriggerEvent('chat:addSuggestion', '/emote', 'Play an emote', {{ name="emotename", help="dance, camera, sit or any valid emote."}}) + if Config.SqlKeybinding then + TriggerEvent('chat:addSuggestion', '/emotebind', 'Bind an emote', {{ name="key", help="num4, num5, num6, num7. num8, num9. Numpad 4-9!"}, { name="emotename", help="dance, camera, sit or any valid emote."}}) + TriggerEvent('chat:addSuggestion', '/emotebinds', 'Check your currently bound emotes.') + end + TriggerEvent('chat:addSuggestion', '/emotemenu', 'Open dpemotes menu (F3) by default.') + TriggerEvent('chat:addSuggestion', '/emotes', 'List available emotes.') + TriggerEvent('chat:addSuggestion', '/walk', 'Set your walkingstyle.', {{ name="style", help="/walks for a list of valid styles"}}) + TriggerEvent('chat:addSuggestion', '/walks', 'List available walking styles.') end) -RegisterCommand('emote', function(source, args, raw) - EmoteCommandStart(source, args, raw) -end) - -RegisterCommand('emotes', function(source, args, raw) - EmotesOnCommand() -end) - -RegisterCommand('emotemenu', function(source, args, raw) - OpenEmoteMenu() -end) - -RegisterCommand('walk', function(source, args, raw) - WalkCommandStart(source, args, raw) -end) - -RegisterCommand('walks', function(source, args, raw) - WalksOnCommand() -end) +RegisterCommand('e', function(source, args, raw) EmoteCommandStart(source, args, raw) end) +RegisterCommand('emote', function(source, args, raw) EmoteCommandStart(source, args, raw) end) +if Config.SqlKeybinding then + RegisterCommand('emotebind', function(source, args, raw) EmoteBindStart(source, args, raw) end) + RegisterCommand('emotebinds', function(source, args, raw) EmoteBindsStart(source, args, raw) end) +end +RegisterCommand('emotemenu', function(source, args, raw) OpenEmoteMenu() end) +RegisterCommand('emotes', function(source, args, raw) EmotesOnCommand() end) +RegisterCommand('walk', function(source, args, raw) WalkCommandStart(source, args, raw) end) +RegisterCommand('walks', function(source, args, raw) WalksOnCommand() end) AddEventHandler('onResourceStop', function(resource) if resource == GetCurrentResourceName() then @@ -132,7 +123,8 @@ function PtfxStart() PtfxAt = prop end UseParticleFxAssetNextCall(PtfxAsset) - Ptfx = StartParticleFxLoopedOnEntity(PtfxName, PtfxAt, Ptfx1, Ptfx2, Ptfx3, Ptfx4, Ptfx5, Ptfx6, PtfxScale, false, false, false) + Ptfx = StartNetworkedParticleFxLoopedOnEntityBone(PtfxName, PtfxAt, Ptfx1, Ptfx2, Ptfx3, Ptfx4, Ptfx5, Ptfx6, GetEntityBoneIndexByName(PtfxName, "VFX"), 1065353216, 0, 0, 0, 1065353216, 1065353216, 1065353216, 0) + SetParticleFxLoopedColour(Ptfx, 1.0, 1.0, 1.0) table.insert(PlayerParticles, Ptfx) end @@ -244,7 +236,7 @@ function PtfxThis(asset) UseParticleFxAssetNextCall(asset) end -DestroyAllProps = function() +function DestroyAllProps() for _,v in pairs(PlayerProps) do DeleteEntity(v) end @@ -252,7 +244,7 @@ DestroyAllProps = function() DebugPrint("Destroyed Props") end -AddPropToPlayer = function(prop1, bone, off1, off2, off3, rot1, rot2, rot3) +function AddPropToPlayer(prop1, bone, off1, off2, off3, rot1, rot2, rot3) local Player = PlayerPedId() local x,y,z = table.unpack(GetEntityCoords(Player)) @@ -273,7 +265,7 @@ end -- V -- in most cases its better to replace the scenario with an animation bundled with prop instead. ----------------------------------------------------------------------------------------------------- -CheckGender = function() +function CheckGender() local hashSkinMale = GetHashKey("mp_m_freemode_01") local hashSkinFemale = GetHashKey("mp_f_freemode_01") diff --git a/Client/EmoteMenu.lua b/Client/EmoteMenu.lua index a5e87ea..00459e6 100644 --- a/Client/EmoteMenu.lua +++ b/Client/EmoteMenu.lua @@ -35,6 +35,7 @@ end local EmoteTable = {} local FavEmoteTable = {} +local KeyEmoteTable = {} local DanceTable = {} local PropETable = {} local WalkTable = {} @@ -64,31 +65,41 @@ function AddEmoteMenu(menu) local submenu = _menuPool:AddSubMenu(menu, Config.Languages[lang]['emotes'], "", "", Menuthing, Menuthing) local dancemenu = _menuPool:AddSubMenu(submenu, Config.Languages[lang]['danceemotes'], "", "", Menuthing, Menuthing) local propmenu = _menuPool:AddSubMenu(submenu, Config.Languages[lang]['propemotes'], "", "", Menuthing, Menuthing) + table.insert(EmoteTable, Config.Languages[lang]['danceemotes']) + table.insert(EmoteTable, Config.Languages[lang]['danceemotes']) + if Config.SharedEmotesEnabled then sharemenu = _menuPool:AddSubMenu(submenu, Config.Languages[lang]['shareemotes'], Config.Languages[lang]['shareemotesinfo'], "", Menuthing, Menuthing) shareddancemenu = _menuPool:AddSubMenu(sharemenu, Config.Languages[lang]['sharedanceemotes'], "", "", Menuthing, Menuthing) table.insert(ShareTable, 'none') table.insert(EmoteTable, Config.Languages[lang]['shareemotes']) end - local favmenu = _menuPool:AddSubMenu(submenu, Config.Languages[lang]['keybindemotes'], Config.Languages[lang]['keybindinfo'], "", Menuthing, Menuthing) - unbind2item = NativeUI.CreateItem(Config.Languages[lang]['rkeybind'], Config.Languages[lang]['rkeybind']) - unbinditem = NativeUI.CreateItem(Config.Languages[lang]['prop2info'], "") - favmenu:AddItem(unbinditem) - favmenu:AddItem(unbind2item) - table.insert(FavEmoteTable, Config.Languages[lang]['rkeybind']) - table.insert(FavEmoteTable, Config.Languages[lang]['rkeybind']) - table.insert(EmoteTable, Config.Languages[lang]['danceemotes']) - table.insert(EmoteTable, Config.Languages[lang]['keybindemotes']) - table.insert(EmoteTable, Config.Languages[lang]['danceemotes']) + + if not Config.SqlKeybinding then + unbind2item = NativeUI.CreateItem(Config.Languages[lang]['rfavorite'], Config.Languages[lang]['rfavorite']) + unbinditem = NativeUI.CreateItem(Config.Languages[lang]['prop2info'], "") + favmenu = _menuPool:AddSubMenu(submenu, Config.Languages[lang]['favoriteemotes'], Config.Languages[lang]['favoriteinfo'], "", Menuthing, Menuthing) + favmenu:AddItem(unbinditem) + favmenu:AddItem(unbind2item) + table.insert(FavEmoteTable, Config.Languages[lang]['rfavorite']) + table.insert(FavEmoteTable, Config.Languages[lang]['rfavorite']) + table.insert(EmoteTable, Config.Languages[lang]['favoriteemotes']) + else + table.insert(EmoteTable, "keybinds") + keyinfo = NativeUI.CreateItem(Config.Languages[lang]['keybinds'], Config.Languages[lang]['keybindsinfo'].." /emotebind [~y~num4-9~w~] [~g~emotename~w~]") + submenu:AddItem(keyinfo) + end for a,b in pairsByKeys(DP.Emotes) do x,y,z = table.unpack(b) emoteitem = NativeUI.CreateItem(z, "/e ("..a..")") - favemoteitem = NativeUI.CreateItem(z, Config.Languages[lang]['set']..z..Config.Languages[lang]['setboundemote']) submenu:AddItem(emoteitem) - favmenu:AddItem(favemoteitem) table.insert(EmoteTable, a) - table.insert(FavEmoteTable, a) + if not Config.SqlKeybinding then + favemoteitem = NativeUI.CreateItem(z, Config.Languages[lang]['set']..z..Config.Languages[lang]['setboundemote']) + favmenu:AddItem(favemoteitem) + table.insert(FavEmoteTable, a) + end end for a,b in pairsByKeys(DP.Dances) do @@ -118,22 +129,25 @@ function AddEmoteMenu(menu) for a,b in pairsByKeys(DP.PropEmotes) do x,y,z = table.unpack(b) propitem = NativeUI.CreateItem(z, "/e ("..a..")") - propfavitem = NativeUI.CreateItem(z, Config.Languages[lang]['set']..z..Config.Languages[lang]['setboundemote']) propmenu:AddItem(propitem) - favmenu:AddItem(propfavitem) table.insert(PropETable, a) - table.insert(FavEmoteTable, a) + if not Config.SqlKeybinding then + propfavitem = NativeUI.CreateItem(z, Config.Languages[lang]['set']..z..Config.Languages[lang]['setboundemote']) + favmenu:AddItem(propfavitem) + table.insert(FavEmoteTable, a) + end end - favmenu.OnItemSelect = function(sender, item, index) - if FavEmoteTable[index] == Config.Languages[lang]['rkeybind'] then - FavoriteEmote = "" - ShowNotification(Config.Languages[lang]['rkeybind'], 2000) - return end - - if Config.FavKeybindEnabled then - FavoriteEmote = FavEmoteTable[index] - ShowNotification("~o~"..firstToUpper(FavoriteEmote)..Config.Languages[lang]['newsetemote']) + if not Config.SqlKeybinding then + favmenu.OnItemSelect = function(sender, item, index) + if FavEmoteTable[index] == Config.Languages[lang]['rfavorite'] then + FavoriteEmote = "" + ShowNotification(Config.Languages[lang]['rfavorite'], 2000) + return end + if Config.FavKeybindEnabled then + FavoriteEmote = FavEmoteTable[index] + ShowNotification("~o~"..firstToUpper(FavoriteEmote)..Config.Languages[lang]['newsetemote']) + end end end @@ -172,7 +186,7 @@ function AddEmoteMenu(menu) end submenu.OnItemSelect = function(sender, item, index) - if EmoteTable[index] ~= Config.Languages[lang]['keybindemotes'] then + if EmoteTable[index] ~= Config.Languages[lang]['favoriteemotes'] then EmoteMenuStart(EmoteTable[index], "emotes") end end @@ -241,26 +255,22 @@ end function AddInfoMenu(menu) if not UpdateAvailable then - infomenu = _menuPool:AddSubMenu(menu, Config.Languages[lang]['infoupdate'], "(1.6.5)", "", Menuthing, Menuthing) + infomenu = _menuPool:AddSubMenu(menu, Config.Languages[lang]['infoupdate'], "(1.7.0)", "", Menuthing, Menuthing) else infomenu = _menuPool:AddSubMenu(menu, Config.Languages[lang]['infoupdateav'], Config.Languages[lang]['infoupdateavtext'], "", Menuthing, Menuthing) end contact = NativeUI.CreateItem(Config.Languages[lang]['suggestions'], Config.Languages[lang]['suggestionsinfo']) - u165 = NativeUI.CreateItem("1.6.5", "Updated camera/phone/pee/beg, added makeitrain/dance(glowstick/horse). ") + u170 = NativeUI.CreateItem("1.7.0", "Added /emotebind [key] [emote]!") + u165 = NativeUI.CreateItem("1.6.5", "Updated camera/phone/pee/beg, added makeitrain/dance(glowstick/horse).") u160 = NativeUI.CreateItem("1.6.0", "Added shared emotes /nearby, or in menu, also fixed some emotes!") - u152 = NativeUI.CreateItem("1.5.2", "Added language options for server owners") - u151a = NativeUI.CreateItem("1.5.1a", "Fixed tryclothes/2, changed the guitar emotes slightly and changed facial expressions to 'moods'") u151 = NativeUI.CreateItem("1.5.1", "Added /walk and /walks, for walking styles without menu") u150 = NativeUI.CreateItem("1.5.0", "Added Facial Expressions menu (if enabled by server owner)") - u142 = NativeUI.CreateItem("1.4.2", "Added many new prop emotes (guitar-guitar3, book, bouquet, teddy, backpack, burger and more)") infomenu:AddItem(contact) + infomenu:AddItem(u170) infomenu:AddItem(u165) infomenu:AddItem(u160) - infomenu:AddItem(u152) - infomenu:AddItem(u151a) infomenu:AddItem(u151) infomenu:AddItem(u150) - infomenu:AddItem(u142) end function OpenEmoteMenu() @@ -293,4 +303,5 @@ RegisterNetEvent("dp:Update") AddEventHandler("dp:Update", function(state) UpdateAvailable = state AddInfoMenu(mainMenu) + _menuPool:RefreshIndex() end) \ No newline at end of file diff --git a/Client/Keybinds.lua b/Client/Keybinds.lua new file mode 100644 index 0000000..bb11e6d --- /dev/null +++ b/Client/Keybinds.lua @@ -0,0 +1,104 @@ +if Config.SqlKeybinding then +local emob1 = "" +local emob2 = "" +local emob3 = "" +local emob4 = "" +local emob5 = "" +local emob6 = "" +local keyb1 = "" +local keyb2 = "" +local keyb3 = "" +local keyb4 = "" +local keyb5 = "" +local keyb6 = "" +local Initialized = false + +----------------------------------------------------------------------------------------------------- +-- Commands / Events -------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------- + +Citizen.CreateThread(function() + while true do + + if NetworkIsPlayerActive(PlayerId()) and not Initialized then + if not Initialized then + TriggerServerEvent("dp:ServerKeybindExist") + Wait(5000) + end + end + + if not IsPedSittingInAnyVehicle(PlayerPedId()) then + for k, v in pairs(Config.KeybindKeys) do + if IsControlJustReleased(0, v) then + if k == keyb1 then if emob1 ~= "" then EmoteCommandStart(nil,{emob1, 0}) end end + if k == keyb2 then if emob2 ~= "" then EmoteCommandStart(nil,{emob2, 0}) end end + if k == keyb3 then if emob3 ~= "" then EmoteCommandStart(nil,{emob3, 0}) end end + if k == keyb4 then if emob4 ~= "" then EmoteCommandStart(nil,{emob4, 0}) end end + if k == keyb5 then if emob5 ~= "" then EmoteCommandStart(nil,{emob5, 0}) end end + if k == keyb6 then if emob6 ~= "" then EmoteCommandStart(nil,{emob6, 0}) end end + Wait(1000) + end + end + end + Citizen.Wait(1) + end +end) + +RegisterNetEvent("dp:ClientKeybindExist") +AddEventHandler("dp:ClientKeybindExist", function(does) + if does then + TriggerServerEvent("dp:ServerKeybindGrab") + else + TriggerServerEvent("dp:ServerKeybindCreate") + end +end) + +RegisterNetEvent("dp:ClientKeybindGet") +AddEventHandler("dp:ClientKeybindGet", function(k1, e1, k2, e2, k3, e3, k4, e4, k5, e5, k6, e6) + keyb1 = k1 emob1 = e1 keyb2 = k2 emob2 = e2 keyb3 = k3 emob3 = e3 keyb4 = k4 emob4 = e4 keyb5 = k5 emob5 = e5 keyb6 = k6 emob6 = e6 + Initialized = true +end) + +RegisterNetEvent("dp:ClientKeybindGetOne") +AddEventHandler("dp:ClientKeybindGetOne", function(key, e) + SimpleNotify(Config.Languages[lang]['bound'].."~y~"..e.."~w~ "..Config.Languages[lang]['to'].." ~g~"..firstToUpper(key).."~w~") + if key == "num4" then emob1 = e keyb1 = "num4" elseif key == "num5" then emob2 = e keyb2 = "num5" elseif key == "num6" then emob3 = e keyb3 = "num6" elseif key == "num7" then emob4 = e keyb4 = "num7" elseif key == "num8" then emob5 = e keyb5 = "num8" elseif key == "num9" then emob6 = e keyb6 = "num9" end +end) + +----------------------------------------------------------------------------------------------------- +------ Functions and stuff -------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------- + +function EmoteBindsStart() + EmoteChatMessage(Config.Languages[lang]['currentlyboundemotes'].."\n" + ..firstToUpper(keyb1).." = '^2"..emob1.."^7'\n" + ..firstToUpper(keyb2).." = '^2"..emob2.."^7'\n" + ..firstToUpper(keyb3).." = '^2"..emob3.."^7'\n" + ..firstToUpper(keyb4).." = '^2"..emob4.."^7'\n" + ..firstToUpper(keyb5).." = '^2"..emob5.."^7'\n" + ..firstToUpper(keyb6).." = '^2"..emob6.."^7'\n") +end + +function EmoteBindStart(source, args, raw) + if #args > 0 then + local key = string.lower(args[1]) + local emote = string.lower(args[2]) + if (Config.KeybindKeys[key]) ~= nil then + if DP.Emotes[emote] ~= nil then + TriggerServerEvent("dp:ServerKeybindUpdate", key, emote) + elseif DP.Dances[emote] ~= nil then + TriggerServerEvent("dp:ServerKeybindUpdate", key, emote) + elseif DP.PropEmotes[emote] ~= nil then + TriggerServerEvent("dp:ServerKeybindUpdate", key, emote) + else + EmoteChatMessage("'"..emote.."' "..Config.Languages[lang]['notvalidemote'].."") + end + else + EmoteChatMessage("'"..key.."' "..Config.Languages[lang]['notvalidkey']) -- to do locale + end + else + print("invalid") + end +end + +end \ No newline at end of file diff --git a/Config.lua b/Config.lua index 60deea6..2d66e0f 100644 --- a/Config.lua +++ b/Config.lua @@ -9,7 +9,7 @@ Config = { EnableXtoCancel = true, -- Set this to true if you want to disarm the player when they play an emote. DisarmPlayer= false, --- You can disable the (F3) menu here / change the keybind +-- You can disable the (F3) menu here / change the keybind. MenuKeybindEnabled = true, MenuKeybind = 170, -- Get the button number here https://docs.fivem.net/game-references/controls/ -- You can disable the Favorite emote keybinding here. @@ -32,6 +32,17 @@ Config = { -- You can disable the Shared Emotes here. SharedEmotesEnabled = true, CheckForUpdates = true, +-- If you have the SQL imported enable this to turn on keybinding. + SqlKeybinding = true, +} + +Config.KeybindKeys = { + ['num4'] = 108, + ['num5'] = 110, + ['num6'] = 109, + ['num7'] = 117, + ['num8'] = 111, + ['num9'] = 118 } Config.Languages = { @@ -39,9 +50,9 @@ Config.Languages = { ['emotes'] = 'Emotes', ['danceemotes'] = "🕺 Dance Emotes", ['propemotes'] = "📦 Prop Emotes", - ['keybindemotes'] = "🌟 Keybind", - ['keybindinfo'] = "Select an emote here to set it as your bound emote.", - ['rkeybind'] = "Reset Keybind", + ['favoriteemotes'] = "🌟 Favorite", + ['favoriteinfo'] = "Select an emote here to set it as your favorite.", + ['rfavorite'] = "Reset favorite", ['prop2info'] = "❓ Prop Emotes can be located at the end", ['set'] = "Set (", ['setboundemote'] = ") to be your bound emote?", @@ -74,14 +85,21 @@ Config.Languages = { ['camera'] = "Press ~y~G~w~ to use camera flash.", ['makeitrain'] = "Press ~y~G~w~ to make it rain.", ['pee'] = "Hold ~y~G~w~ to pee.", + ['spraychamp'] = "Hold ~y~G~w~ to spray champagne", + ['bound'] = "Bound ", + ['to'] = "to", + ['currentlyboundemotes'] = " Currently bound emotes:", + ['notvalidkey'] = "is not a valid key.", + ['keybinds'] = "🔢 Keybinds", + ['keybindsinfo'] = "Use" }, ['fr'] = { ['emotes'] = 'Emotes', ['danceemotes'] = "🕺 Emotes de danse", ['propemotes'] = "📦 Em Prop Emotes", - ['keybindemotes'] = "🌟 Keybind", - ['keybindinfo'] = "Sélectionnez une emote ici pour la définir comme emote liée.", - ['rkeybind'] = "Réinitialiser le raccourci clavier", + ['favoriteemotes'] = "🌟 Favori", + ['favoriteinfo'] = "Définir un emote comme favori.", + ['rfavorite'] = "réinitialiser le favori.", ['prop2info'] = "❓ Prop Emotes peuvent être situés à la fin", ['set'] = "Set (", ['setboundemote'] = ") pour être votre emote lié?", @@ -114,14 +132,21 @@ Config.Languages = { ['camera'] = "Presse ~y~G~w~ utiliser le flash de l'appareil.", ['makeitrain'] = "Presse ~y~G~w~ jeter de l'argent.", ['pee'] = "Tenir ~y~G~w~ faire pipi.", + ['spraychamp'] = "Tenir ~y~G~w~ vaporiser du champagne.", + ['bound'] = "Liée ", + ['to'] = "à", + ['currentlyboundemotes'] = " Emotes actuellement liés:", + ['notvalidkey'] = "n'est pas une clé valide.", + ['keybinds'] = "🔢 Liens Clés", + ['keybindsinfo'] = "Use" }, ['de'] = { ['emotes'] = 'Emotes', ['danceemotes'] = "🕺 Tanz-Emotes", ['propemotes'] = "📦 Prop-Emotes", - ['keybindemotes'] = "🌟 Keybind", - ['keybindinfo'] = "Wählen Sie hier ein Emote aus, um es als gebundenes Emote festzulegen.", - ['rkeybind'] = "Keybind zurücksetzen", + ['favoriteemotes'] = "🌟 Favorit", + ['favoriteinfo'] = "Wählen Sie hier ein Emote aus, um es als gebundenes Emote festzulegen.", + ['rfavorite'] = "Keybind zurücksetzen", ['prop2info'] = "❓ Prop-Emotes können am Ende platziert werden", ['set'] = "Set (", ['setboundemote'] = ") soll dein gebundenes Emote sein?", @@ -154,14 +179,21 @@ Config.Languages = { ['camera'] = "Drücken ~y~G~w~ Kamerablitz verwenden.", ['makeitrain'] = "Drücken ~y~G~w~ Geld werfen.", ['pee'] = "Halt ~y~G~w~ urinieren.", + ['spraychamp'] = "Halt ~y~G~w~ champagner sprühen", + ['bound'] = "Gebunden ", + ['to'] = "zu", + ['currentlyboundemotes'] = " Derzeit gebundene Emotes:", + ['notvalidkey'] = "ist kein gültiger schlüssel.", + ['keybinds'] = "🔢 Tastenkombinationen", + ['keybindsinfo'] = "verwenden" }, ['sv'] = { ['emotes'] = 'Emotes', ['danceemotes'] = "🕺 Dans Emotes", ['propemotes'] = "📦 Objekt Emotes", - ['keybindemotes'] = "🌟 Favorit", - ['keybindinfo'] = "Välj en emote här för att ställa in den som din favorit emote.", - ['rkeybind'] = "Återställ Keybind", + ['favoriteemotes'] = "🌟 Favorit", + ['favoriteinfo'] = "Välj en emote här för att ställa in den som din favorit emote.", + ['rfavorite'] = "Återställ favorit.", ['prop2info'] = "❓ Objekt Emotes finns längst ner i listan.", ['set'] = "Sätt (", ['setboundemote'] = ") till din favorit emote?", @@ -194,5 +226,59 @@ Config.Languages = { ['camera'] = "Tryck ~y~G~w~ för att använda blixt.", ['makeitrain'] = "Tryck ~y~G~w~ för att kasta pengar.", ['pee'] = "Håll ~y~G~w~ att kissa.", + ['spraychamp'] = "Håll ~y~G~w~ för att spraya champagne.", + ['bound'] = "Bunde ", + ['to'] = "till", + ['currentlyboundemotes'] = " För närvarande bundna emotes:", + ['notvalidkey'] = "är inte en giltig tangent.", + ['keybinds'] = "🔢 Keybinds", + ['keybindsinfo'] = "Använd" }, + ['es'] = { + ['emotes'] = "Animaciones", + ['danceemotes'] = "🕺 Bailes", + ['propemotes'] = "📦 Objetos", + ['keybindemotes'] = "🌟 Favorita", + ['keybindinfo'] = "Selecciona una animacion como su favorita.", + ['rkeybind'] = "Reiniciar favorito", + ['prop2info'] = "❓ Animaciones de objetos al final.", + ['set'] = "Elegir (", + ['setboundemote'] = ") como tu animacion favorita?", + ['newsetemote'] = "~w~ es ahora tu animacion favorita, presiona ~g~[CapsLock]~w~ para usarla.", + ['cancelemote'] = "Cancelar animacion", + ['cancelemoteinfo'] = "~r~X~w~ Cancela la animacion actual.", + ['walkingstyles'] = "Formas de caminar", + ['resetdef'] = "Reiniciar a por defecto", + ['normalreset'] = "Normal (Reiniciar)", + ['moods'] = "Estados de animo", + ['infoupdate'] = "Informacion", + ['infoupdateav'] = "Informacion (Actualizacion disponible)", + ['infoupdateavtext'] = "Una actualizacion esta disponible, para conseguir la ultima version ingresa a ~y~https://github.com/andristum/dpemotes~w~", + ['suggestions'] = "Sugerencias?", + ['suggestionsinfo'] = "dullpear_dev' en el foro de FiveM para cualquier sugerencia! ✉️", + ['notvaliddance'] = "no es un baile valido.", + ['notvalidemote'] = "no es una animacion valida.", + ['nocancel'] = "No hay animacion para cancelar.", + ['maleonly'] = "Esta animacion es solo de hombre!", + ['emotemenucmd'] = "Escribe /emotemenu para abrir el menu.", + ['shareemotes'] = "👫 Animaciones compartidas", + ['shareemotesinfo'] = "Invita a una persona cercana para la animacion.", + ['sharedanceemotes'] = "🕺 Bailes compartidos", + ['notvalidsharedemote'] = "no es una animacion compartida valida.", + ['sentrequestto'] = "Solicitud enviada ~y~", + ['nobodyclose'] = "Nadie ~r~cerca~w~.", + ['doyouwanna'] = "~y~Y~w~ para aceptar, ~r~L~w~ para rechazar (~g~", + ['refuseemote'] = "Animacion rechazada.", + ['makenearby'] = "hacer que el jugador cercano juegue", + ['camera'] = "Presione ~y~G~w~ para usar el flash de la camara.", + ['makeitrain'] = "Presiona ~y~G~w~ para hacer llover.", + ['pee'] = "Mantiene ~y~G~w~ para mear.", + ['spraychamp'] = "Mantiene ~y~G~w~ rociar champán.", + ['bound'] = "Unida ", + ['to'] = "a", + ['currentlyboundemotes'] = " Emotes vinculados actualmente:", + ['notvalidkey'] = "no es una clave válida.", + ['keybinds'] = "🔢 Keybinds", + ['keybindsinfo'] = "Utilizar" + } } \ No newline at end of file diff --git a/NativeUI.lua b/NativeUI.lua index 73d7e92..a62f2b5 100644 --- a/NativeUI.lua +++ b/NativeUI.lua @@ -2467,45 +2467,52 @@ function UIMenu.New(Title, Subtitle, X, Y, TxtDictionary, TxtName) {0, 24}, -- Attack }, Keyboard = { - {0, 47}, -- G - {0, 171}, -- CAPSLOCK - {0, 249}, -- N - {0, 306}, -- N - {0, 305}, -- B - {0, 203}, - {0, 73}, -- X {0, 0}, -- Camera - {0, 2}, -- Look Up and Down {0, 1}, -- Look Left and Right - {0, 25}, -- Aim + {0, 2}, -- Look Up and Down + {0, 8}, -- Fly Up and Down + {0, 9}, -- Fly Left and Right + {0, 21}, -- Sprint + {0, 22}, -- Jump + {0, 23}, -- Enter {0, 24}, -- Attack - {0, 201}, -- Select - {0, 195}, -- X axis - {0, 196}, -- Y axis + {0, 25}, -- Aim + {0, 26}, -- C + {0, 30}, -- Move Left and Right + {0, 31}, -- Move Up and Down + {0, 47}, -- G + {0, 59}, -- Move Vehicle Left and Right + {0, 71}, -- Accelerate Vehicle + {0, 72}, -- Vehicle Brake + {0, 73}, -- X + {0, 75}, -- Exit Vehicle + {0, 76}, -- Vehicle Handbrake + {0, 89}, -- Fly Yaw Left + {0, 90}, -- Fly Yaw Right + {0, 108}, -- Num Pad 4 + {0, 109}, -- Num Pad 6 + {0, 110}, -- Num Pad 5 + {0, 111}, -- Num Pad 8 + {0, 117}, -- Num Pad 7 + {0, 118}, -- Num Pad 9 + {0, 171}, -- CAPSLOCK {0, 187}, -- Down {0, 188}, -- Up {0, 189}, -- Left {0, 190}, -- Right + {0, 195}, -- X axis + {0, 196}, -- Y axis + {0, 201}, -- Select {0, 202}, -- Back + {0, 203}, -- Spacebar? {0, 217}, -- Select - {0, 242}, -- Scroll down - {0, 241}, -- Scroll up {0, 239}, -- Cursor X {0, 240}, -- Cursor Y - {0, 31}, -- Move Up and Down - {0, 30}, -- Move Left and Right - {0, 21}, -- Sprint - {0, 22}, -- Jump - {0, 23}, -- Enter - {0, 75}, -- Exit Vehicle - {0, 71}, -- Accelerate Vehicle - {0, 72}, -- Vehicle Brake - {0, 59}, -- Move Vehicle Left and Right - {0, 89}, -- Fly Yaw Left - {0, 9}, -- Fly Left and Right - {0, 8}, -- Fly Up and Down - {0, 90}, -- Fly Yaw Right - {0, 76}, -- Vehicle Handbrake + {0, 241}, -- Scroll up + {0, 242}, -- Scroll down + {0, 249}, -- N + {0, 305}, -- B + {0, 306}, -- N }, } } diff --git a/Server/Server.lua b/Server/Server.lua index baaa5bf..648afe3 100644 --- a/Server/Server.lua +++ b/Server/Server.lua @@ -1,3 +1,4 @@ + ----------------------------------------------------------------------------------------------------- -- Shared Emotes Syncing --------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------- @@ -11,4 +12,66 @@ RegisterServerEvent("ServerValidEmote") AddEventHandler("ServerValidEmote", function(target, requestedemote, otheremote) TriggerClientEvent("SyncPlayEmote", source, otheremote, source) TriggerClientEvent("SyncPlayEmoteSource", target, requestedemote) -end) \ No newline at end of file +end) + +----------------------------------------------------------------------------------------------------- +-- Keybinding -------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------- + +if Config.SqlKeybinding then + MySQL.ready(function() + + RegisterServerEvent("dp:ServerKeybindExist") + AddEventHandler('dp:ServerKeybindExist', function() + local src = source local srcid = GetPlayerIdentifier(source) + MySQL.Async.fetchAll('SELECT * FROM dpkeybinds WHERE `id`=@id;', {id = srcid}, function(dpkeybinds) + if dpkeybinds[1] then + TriggerClientEvent("dp:ClientKeybindExist", src, true) + else + TriggerClientEvent("dp:ClientKeybindExist", src, false) + end + end) + end) + + RegisterServerEvent("dp:ServerKeybindCreate") + AddEventHandler("dp:ServerKeybindCreate", function() + local src = source local srcid = GetPlayerIdentifier(source) + MySQL.Async.execute('INSERT INTO dpkeybinds (`id`, `keybind1`, `emote1`, `keybind2`, `emote2`, `keybind3`, `emote3`, `keybind4`, `emote4`, `keybind5`, `emote5`, `keybind6`, `emote6`) VALUES (@id, @keybind1, @emote1, @keybind2, @emote2, @keybind3, @emote3, @keybind4, @emote4, @keybind5, @emote5, @keybind6, @emote6);', + {id = srcid, keybind1 = "num4", emote1 = "", keybind2 = "num5", emote2 = "", keybind3 = "num6", emote3 = "", keybind4 = "num7", emote4 = "", keybind5 = "num8", emote5 = "", keybind6 = "num9", emote6 = ""}, function(created) print("[dp] ^2"..GetPlayerName(src).."^7 got created!") TriggerClientEvent("dp:ClientKeybindGet", src, "num4", "", "num5", "", "num6", "", "num7", "", "num8", "", "num8", "") end) + end) + + RegisterServerEvent("dp:ServerKeybindGrab") + AddEventHandler("dp:ServerKeybindGrab", function() + local src = source local srcid = GetPlayerIdentifier(source) + MySQL.Async.fetchAll('SELECT keybind1, emote1, keybind2, emote2, keybind3, emote3, keybind4, emote4, keybind5, emote5, keybind6, emote6 FROM `dpkeybinds` WHERE `id` = @id', + {['@id'] = srcid}, function(kb) + if kb[1].keybind1 ~= nil then + TriggerClientEvent("dp:ClientKeybindGet", src, kb[1].keybind1, kb[1].emote1, kb[1].keybind2, kb[1].emote2, kb[1].keybind3, kb[1].emote3, kb[1].keybind4, kb[1].emote4, kb[1].keybind5, kb[1].emote5, kb[1].keybind6, kb[1].emote6) + else + TriggerClientEvent("dp:ClientKeybindGet", src, "num4", "", "num5", "", "num6", "", "num7", "", "num8", "", "num8", "") + end + end) + end) + + RegisterServerEvent("dp:ServerKeybindUpdate") + AddEventHandler("dp:ServerKeybindUpdate", function(key, emote) + local src = source local myid = GetPlayerIdentifier(source) + if key == "num4" then chosenk = "keybind1" elseif key == "num5" then chosenk = "keybind2" elseif key == "num6" then chosenk = "keybind3" elseif key == "num7" then chosenk = "keybind4" elseif key == "num8" then chosenk = "keybind5" elseif key == "num9" then chosenk = "keybind6" end + if chosenk == "keybind1" then + MySQL.Async.execute("UPDATE dpkeybinds SET emote1=@emote WHERE id=@id", {id = myid, emote = emote}, function() TriggerClientEvent("dp:ClientKeybindGetOne", src, key, emote) end) + elseif chosenk == "keybind2" then + MySQL.Async.execute("UPDATE dpkeybinds SET emote2=@emote WHERE id=@id", {id = myid, emote = emote}, function() TriggerClientEvent("dp:ClientKeybindGetOne", src, key, emote) end) + elseif chosenk == "keybind3" then + MySQL.Async.execute("UPDATE dpkeybinds SET emote3=@emote WHERE id=@id", {id = myid, emote = emote}, function() TriggerClientEvent("dp:ClientKeybindGetOne", src, key, emote) end) + elseif chosenk == "keybind4" then + MySQL.Async.execute("UPDATE dpkeybinds SET emote4=@emote WHERE id=@id", {id = myid, emote = emote}, function() TriggerClientEvent("dp:ClientKeybindGetOne", src, key, emote) end) + elseif chosenk == "keybind5" then + MySQL.Async.execute("UPDATE dpkeybinds SET emote5=@emote WHERE id=@id", {id = myid, emote = emote}, function() TriggerClientEvent("dp:ClientKeybindGetOne", src, key, emote) end) + elseif chosenk == "keybind6" then + MySQL.Async.execute("UPDATE dpkeybinds SET emote6=@emote WHERE id=@id", {id = myid, emote = emote}, function() TriggerClientEvent("dp:ClientKeybindGetOne", src, key, emote) end) + end + end) + end) +else + print("[dp] ^3Sql Keybinding^7 is turned ^1off^7, if you want to enable /emotebind, import dpkeybinding.sql and set ^3SqlKeybinding = ^2true^7 in config.lua.") +end diff --git a/Server/Updates.lua b/Server/Updates.lua index 03b15e7..bdb6465 100644 --- a/Server/Updates.lua +++ b/Server/Updates.lua @@ -24,7 +24,9 @@ function checkVersion(err,responseText, headers) print(resourceName.." is outdated, latest version is: ^2"..responseText.."^7, installed version: ^1"..curVersion.."^7!\nupdate from https://github.com"..updatePath.."") print("^1----------------------------------------------------------------------------------^7") elseif tonumber(curVersion) > tonumber(responseText) then - print("You somehow skipped a few versions of "..resourceName.." or the git went offline, if it's still online i advise you to update ( or downgrade? )") + print("\n^3----------------------------------------------------------------------------------^7") + print(resourceName.." git version is: ^2"..responseText.."^7, installed version: ^1"..curVersion.."^7!") + print("^3----------------------------------------------------------------------------------^7") else print("\n"..resourceName.." is up to date. (^2"..curVersion.."^7)") end diff --git a/__resource.lua b/__resource.lua index 5231aac..82e2ac5 100644 --- a/__resource.lua +++ b/__resource.lua @@ -8,5 +8,6 @@ client_scripts { server_scripts { 'Config.lua', + '@mysql-async/lib/MySQL.lua', 'Server/*.lua' } \ No newline at end of file diff --git a/dpkeybinds.sql b/dpkeybinds.sql new file mode 100644 index 0000000..08d8318 --- /dev/null +++ b/dpkeybinds.sql @@ -0,0 +1,16 @@ + +CREATE TABLE IF NOT EXISTS `dpkeybinds` ( + `id` varchar(50) NULL DEFAULT NULL, + `keybind1` varchar(50) NULL DEFAULT "num4", + `emote1` varchar(255) NULL DEFAULT "", + `keybind2` varchar(50) NULL DEFAULT "num5", + `emote2` varchar(255) NULL DEFAULT "", + `keybind3` varchar(50) NULL DEFAULT "num6", + `emote3` varchar(255) NULL DEFAULT "", + `keybind4` varchar(50) NULL DEFAULT "num7", + `emote4` varchar(255) NULL DEFAULT "", + `keybind5` varchar(50) NULL DEFAULT "num8", + `emote5` varchar(255) NULL DEFAULT "", + `keybind6` varchar(50) NULL DEFAULT "num9", + `emote6` varchar(255) NULL DEFAULT "" +) ENGINE=InnoDB COLLATE=latin1_swedish_ci; \ No newline at end of file diff --git a/version b/version index 59f3135..3968aef 100644 --- a/version +++ b/version @@ -1 +1 @@ -165 \ No newline at end of file +170 \ No newline at end of file