refactor/feat: cleaning, minor fixes, new feature to disable specific emotes in vehicle (#129)

Changes:
• cleaning
• deleted unused code
• indentation fixes
• minor fixes (proper source usage in server side)
• new feature to disable specific emotes from playing  inside an vehicle
This commit is contained in:
iSentrie
2023-01-26 00:25:40 +02:00
committed by GitHub
parent 0c8477434a
commit e91c0c726c
11 changed files with 560 additions and 553 deletions

View File

@@ -325,7 +325,7 @@ Colours = {
}
--[[
Utils.lua
Utils.lua
Utilities
--]]
@@ -395,7 +395,7 @@ function Controller()
return not IsInputDisabled(2)
end
--[[
--[[
UIResRectangle.lua
Elements
--]]

View File

@@ -145,7 +145,7 @@ SqlKeybinding = false,
If you do not want to use the SQL features keep the `oxmysql` region in fxmanifest.lua commented out.
Alternatively, you can use the keybind command that comes with FiveM without having to use SQL, by entering the following into F8:
Alternatively, you can use the keybind command that comes with FiveM without having to use SQL, by entering the following into F8:
`bind keyboard "Yourbutton" "e youremote"`. To remove the keybind, type `"unbind keyboard "Yourbutton"`.
@@ -176,7 +176,7 @@ Much like everything else in the menu, server owners can change these keybinds t
Server owners can opt in to either overriding the stealth/action animation when pressing the LEFT CONTROL keybind or have players tap LEFT CONTROL twice to switch from stealth to crouch (when enabled in the config.lua file)
**Crouching:**
**Crouching:**
RIGHT CONTROL. Players can move forward, back, left and right as well as turning around. Press SPACEBAR to switch from stomach to back. Pressing RIGHT CONTROL key while running will have the player "dive into" a crouching animation.
@@ -200,7 +200,7 @@ Alternatively, you can use the 🌟 Favorite menu to find an emote and press ent
Exit Emotes are used to make cancelling an animation more smoother and dynamic, such as getting up off a chair or throwing a cigarette out instead of dropping it.
You can add your own Exit Emotes under `AnimationListCustom.lua`'s new `CustomDP.Exits = {}` array.
You can add your own Exit Emotes under `AnimationListCustom.lua`'s new `CustomDP.Exits = {}` array.
Below is an example of how this would look:
@@ -300,13 +300,13 @@ For localhost servers, comment out onesync from your server.cfg and add the foll
You can put this before your gamebuild enforcement, aka `+set sv_enforceGameBuild XXXX`
* Set the desired language and settings in the config.lua under `MenuLanguage = 'en',`
* Set the desired language and settings in the config.lua under `MenuLanguage = 'en',`
* Qb-Core server owners, set `Framework = 'qb-core'` in the config file, otherwise leave it as false.
* To use the SQL features, install the [oxmysql](https://github.com/overextended/oxmysql) resource then open `keybinds.lua` in RPEmotes. If you do not want to use the SQL features, comment out the `oxmysql` region in fxmanifest.lua.
Alternatively, you can use the keybind command that comes with FiveM without having the SQL, by entering the following into F8:
Alternatively, you can use the keybind command that comes with FiveM without having the SQL, by entering the following into F8:
`bind keyboard "Yourbutton" "e youremote"`. To remove the keybind, type `"unbind keyboard "Yourbutton"`.
@@ -385,7 +385,7 @@ Because the menu gets updated frequently, the files get overwritten. To avoid th
Add your animation code to the `AnimationListCustom.lua` and make a backup of this file, call it `BackUpAnimationListCustom.lua`.
Whenever an update is released, rename `BackUpAnimationListCustom.lua` to `AnimationListCustom.lua`, click yes to overwrite, and you're good to go.
Whenever an update is released, rename `BackUpAnimationListCustom.lua` to `AnimationListCustom.lua`, click yes to overwrite, and you're good to go.
It is also a good idea to keep a backup of your config file.
Below is an example:
@@ -417,11 +417,11 @@ If you want to modify RpEmotes ***(does not apply if you want to use it for pers
✅ You are allowed to use the custom animations explicitly provided within this repository only
✅ You are allowed to use the custom animations explicitly provided within this repository only
✅ You are allowed to add your own custom animations to this resource and use it on your server. The entire content must remain on your server and not be reuploaded.
❌ You are not allowed to re-distribute the custom animations provided with this repository either on websites, forums, tebex store or discord.
❌ You are not allowed to re-distribute the custom animations provided with this repository either on websites, forums, tebex store or discord.
❌ You are not allowed to claim the custom animations provided within this resource as your own work
@@ -431,16 +431,16 @@ If you want to modify RpEmotes ***(does not apply if you want to use it for pers
**All** custom animations and props were added with permissions from the creators and does **not** contain any paid or leaked work.
All animation creators have ***specifically*** asked that their content remains free and that the RPEmotes team and community do not try to profit from them, claim them as their own or reupload them anywhere else but TayMcKenzieNZ's GitHub unless express permission has been arranged and granted by their respective creators, therefore you may not extract the animations and / or use them for your own menus.
All animation creators have ***specifically*** asked that their content remains free and that the RPEmotes team and community do not try to profit from them, claim them as their own or reupload them anywhere else but TayMcKenzieNZ's GitHub unless express permission has been arranged and granted by their respective creators, therefore you may not extract the animations and / or use them for your own menus.
A huge thank you to the following people for their amazing contributions made to the menu 🫶🏻 :
A huge thank you to the following people for their amazing contributions made to the menu 🫶🏻 :
- Thank you to [Tigerle](https://forum.cfx.re/u/tigerle_studios) for providing the additional code required to make Shared Emotes work to it's full extent
- Thank you to [SMGMissy](https://forum.cfx.re/u/smgmissy/) for assisting with custom pride flags and how to stream them
- Thank you to [MissSnowie](https://www.gta5-mods.com/users/MissySnowie) for the Explicit Usage Rights Agreement to add free custom animations either publicly available or on their discord and for the motivational and overal moral support
- Thank you to [MissSnowie](https://www.gta5-mods.com/users/MissySnowie) for the Explicit Usage Rights Agreement to add free custom animations either publicly available or on their discord and for the motivational and overal moral support
- A huge thank you to [Kibook](https://github.com/kibook) for the addition of the Animal Emotes sub menu
@@ -458,7 +458,7 @@ A huge thank you to the following people for their amazing contributions made t
- Thank you to [northsqrd](https://github.com/0sqrd) for adding the search function, Animal Emotes config, mobile phone prop texture variants and general contributions
- Thank you to crusopaul and Eki for discussing KVP and initializing it to the menu for persistent walkstyles
- Thank you to crusopaul and Eki for discussing KVP and initializing it to the menu for persistent walkstyles
- Thank you to [Amnilka](https://www.gta5-mods.com/users/frabi) for the Explicit Usage Rights Agreement to add free custom animations either publicly available or on their discord

View File

@@ -1,5 +1,5 @@
Config.Languages = {
['pt'] = { -- Brazilian Portuguese 🇧🇷
['pt'] = { -- Brazilian Portuguese 🇧🇷
['emotes'] = 'Emotes 🎬',
['danceemotes'] = "🕺 Emotes de Danças",
['animalemotes'] = "🐩 Emotes de Animais",
@@ -59,7 +59,6 @@ Config.Languages = {
['firework'] = "Pressione ~y~G~w~ para usar o fogo de artifício",
['poop'] = "Pressione ~y~G~w~ para fazer cocô", -- Translated using smodin.io
['puke'] = "Pressione ~y~G~w~ para vomitar",
},
['cs'] = { -- Czech 🇨🇿
['emotes'] = 'Animace 🎬',
@@ -422,7 +421,7 @@ Config.Languages = {
['searchshifttofav'] = "Maintenir L-Shift et appuyer sur entrer pour marquer comme favorie.",
['searchcantsetfav'] = "Les emotes partagées ne peuvent pas être mise en favorie.",
['invalidvariation'] = "Variation de texture invalide. Les sélections valides sont : %s",
['firework'] = "Appuyez sur ~y~Gw~ pour utiliser des feux d'artifice", -- GOOGLE TRANSLATED
['firework'] = "Appuyez sur ~y~Gw~ pour utiliser des feux d'artifice", -- GOOGLE TRANSLATED
['poop'] = "Appuyez sur ~y~G~w~ pour faire caca.", -- Translated using smodin.io
['puke'] = "Appuyez sur ~y~G~w~ pour vomir.",
},
@@ -909,7 +908,7 @@ Config.Languages = {
['searchshifttofav'] = "Удерживайте L-Shift и нажмите Enter, чтобы установить в избранное.",
['searchcantsetfav'] = "Парные эмоции не могут быть добавлены в избранное.",
['invalidvariation'] = "Недопустимая вариация текстуры. Допустимые варианты: %s",
['firework'] = "Нажмите ~y~Gw~, чтобы запустить фейерверк.", -- GOOGLE TRANSLATED
['firework'] = "Нажмите ~y~Gw~, чтобы запустить фейерверк.", -- GOOGLE TRANSLATED
['poop'] = "Нажмите ~y~G~w~, чтобы какать",
['puke'] = "Нажмите ~y~G~w~ для рвоты",
},
@@ -969,7 +968,7 @@ Config.Languages = {
['searchshifttofav'] = "Mantén L-Shift y presiona Enter para guardar como favorito.",
['searchcantsetfav'] = "Las animaciones compartidas no pueden ser guardadas como favoritas.",
['invalidvariation'] = "Variación de textura no válida. Las opciones válidas son: %s",
['firework'] = "Presione ~y~Gw~ para usar los fuegos artificiales",
['firework'] = "Presione ~y~Gw~ para usar los fuegos artificiales",
['poop'] = "Presione ~y~G~w~ para hacer caca",
['puke'] = "Presiona ~y~G~w~ para vomitar", ---- Translated via smodin.io
},
@@ -1094,5 +1093,5 @@ Config.Languages = {
['firework'] = "Havai fişeği kullanmak için ~y~G~w~ tuşlarına basın",
['poop'] = "Kaka yapmak için ~y~G~w~ tuşlarına basın",
['puke'] = "Kusmak için ~y~G~w~ tuşlarına basın",
},
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -13,8 +13,6 @@ CustomDP.Exits = {}
CustomDP.Emotes = {}
CustomDP.PropEmotes = {}
-----------------------------------------------------------------------------------------
--| I don't think you should change the code below unless you know what you are doing |--
-----------------------------------------------------------------------------------------

View File

@@ -164,10 +164,10 @@ local function CrouchKeyPressed()
local crouchKey = GetControlInstructionalButton(0, 0xD2D0BEBA, false)
local duckKey = GetControlInstructionalButton(0, 36, false)
-- If they are the same and we aren't prone, then check if we are in stealth mode and how long ago the last button press was.
-- If they are the same and we aren't prone, then check if we are in stealth mode and how long ago the last button press was.
if crouchKey == duckKey and not IsProne then
local timer = GetGameTimer()
-- If we are in stealth mode and we have already pressed the button in the last second
if GetPedStealthMovement(playerPed) == 1 and timer - lastKeyPress < 1000 then
DisableControlAction(0, 36, true) -- Disable INPUT_DUCK this frame
@@ -399,7 +399,7 @@ local function CrawlKeyPressed()
return
end
inAction = true
-- If we are pointing then stop pointing
if Pointing then
Pointing = false

View File

@@ -3,8 +3,6 @@ local AnimationDuration = -1
local ChosenAnimation = ""
local ChosenDict = ""
local ChosenAnimOptions = false
local MostRecentChosenAnimation = ""
local MostRecentChosenDict = ""
local MovementType = 0
local PlayerGender = "male"
local PlayerHasProp = false
@@ -22,7 +20,6 @@ local CanCancel = true
local InExitEmote = false
IsInAnimation = false
-- Remove emotes if needed
local emoteTypes = {
@@ -96,10 +93,10 @@ end
Citizen.CreateThread(function()
TriggerEvent('chat:addSuggestion', '/e', 'Play an emote',
{ { name = "emotename", help = "dance, camera, sit or any valid emote." },
{ { name = "emotename", help = "dance, camera, sit or any valid emote." },
{ name = "texturevariation", help = "(Optional) 1, 2, 3 or any number. Will change the texture of some props used in emotes, for example the color of a phone. Enter -1 to see a list of variations." } })
TriggerEvent('chat:addSuggestion', '/emote', 'Play an emote',
{ { name = "emotename", help = "dance, camera, sit or any valid emote." },
{ { name = "emotename", help = "dance, camera, sit or any valid emote." },
{ name = "texturevariation", help = "(Optional) 1, 2, 3 or any number. Will change the texture of some props used in emotes, for example the color of a phone. Enter -1 to see a list of variations." } })
if Config.SqlKeybinding then
TriggerEvent('chat:addSuggestion', '/emotebind', 'Bind an emote',
@@ -123,17 +120,17 @@ if Config.SqlKeybinding then
RegisterCommand('emotebinds', function(source, args, raw) EmoteBindsStart(source, args, raw) end, false)
end
if Config.MenuKeybindEnabled then
RegisterCommand('emoteui', function(source, args, raw) OpenEmoteMenu() end, false)
RegisterCommand('emoteui', function() OpenEmoteMenu() end, false)
RegisterKeyMapping("emoteui", "Open rpemotes menu", "keyboard", Config.MenuKeybind)
else
RegisterCommand('emotemenu', function(source, args, raw) OpenEmoteMenu() end, false)
RegisterCommand('emotemenu', function() OpenEmoteMenu() end, false)
end
RegisterCommand('emotes', function(source, args, raw) EmotesOnCommand() end, false)
RegisterCommand('emotes', function() EmotesOnCommand() end, false)
RegisterCommand('walk', function(source, args, raw) WalkCommandStart(source, args, raw) end, false)
RegisterCommand('walks', function(source, args, raw) WalksOnCommand() end, false)
RegisterCommand('emotecancel', function(source, args, raw) EmoteCancel() end, false)
RegisterCommand('walks', function() WalksOnCommand() end, false)
RegisterCommand('emotecancel', function() EmoteCancel() end, false)
RegisterCommand('handsup', function(source, args, raw)
RegisterCommand('handsup', function()
if Config.HandsupKeybindEnabled then
if IsEntityPlayingAnim(PlayerPedId(), "missminuteman_1ig_2", "handsup_base", 51) then
EmoteCancel()
@@ -399,7 +396,7 @@ function EmoteCommandStart(source, args, raw)
for k, v in ipairs(RP.PropEmotes[name].AnimationOptions.PropTextureVariations) do
str = str .. string.format("\n(%s) - %s", k, v.Name)
end
EmoteChatMessage(string.format(Config.Languages[lang]['invalidvariation'], str), true)
OnEmotePlay(RP.PropEmotes[name], 0)
return
@@ -502,6 +499,10 @@ function OnEmotePlay(EmoteName, textureVariation)
return false
end
if EmoteName.AnimationOptions and EmoteName.AnimationOptions.NotInVehicle and InVehicle then
return EmoteChatMessage("You can't play this animation while in vehicle.")
end
if ChosenAnimOptions and ChosenAnimOptions.ExitEmote then
if RP.Exits[ChosenAnimOptions.ExitEmote][2] ~= EmoteName[2] then
return
@@ -639,7 +640,7 @@ function OnEmotePlay(EmoteName, textureVariation)
RunAnimationThread()
MostRecentDict = ChosenDict
MostRecentAnimation = ChosenAnimation
if EmoteName.AnimationOptions then
if EmoteName.AnimationOptions.Prop then
PropName = EmoteName.AnimationOptions.Prop
@@ -658,9 +659,9 @@ function OnEmotePlay(EmoteName, textureVariation)
if not AddPropToPlayer(PropName, PropBone, PropPl1, PropPl2, PropPl3, PropPl4, PropPl5, PropPl6, textureVariation) then return end
if SecondPropEmote then
if not AddPropToPlayer(SecondPropName, SecondPropBone, SecondPropPl1, SecondPropPl2, SecondPropPl3,
SecondPropPl4, SecondPropPl5, SecondPropPl6, textureVariation) then
SecondPropPl4, SecondPropPl5, SecondPropPl6, textureVariation) then
DestroyAllProps()
return
return
end
end

View File

@@ -37,7 +37,6 @@ end
local EmoteTable = {}
local FavEmoteTable = {}
local KeyEmoteTable = {}
local DanceTable = {}
local AnimalTable = {}
local PropETable = {}
@@ -47,7 +46,7 @@ local ShareTable = {}
local FavoriteEmote = ""
if Config.FavKeybindEnabled then
RegisterCommand('emotefav', function(source, args, raw) FavKeybind() end)
RegisterCommand('emotefav', function() FavKeybind() end)
RegisterKeyMapping("emotefav", "Execute your favorite emote", "keyboard", Config.FavKeybind)
@@ -168,14 +167,14 @@ function AddEmoteMenu(menu)
for a, b in pairsByKeys(RP.PropEmotes) do
x, y, z = table.unpack(b)
if b.AnimationOptions.PropTextureVariations then
if b.AnimationOptions.PropTextureVariations then
propitem = NativeUI.CreateListItem(z, b.AnimationOptions.PropTextureVariations, 1, "/e (" .. a .. ")")
propmenu:AddItem(propitem)
else
propitem = NativeUI.CreateItem(z, "/e (" .. a .. ")")
propmenu:AddItem(propitem)
end
end
table.insert(PropETable, a)
if not Config.SqlKeybinding then
@@ -245,7 +244,7 @@ function AddEmoteMenu(menu)
propmenu.OnItemSelect = function(sender, item, index)
EmoteMenuStart(PropETable[index], "props")
end
propmenu.OnListSelect = function(menu, item, itemIndex, listIndex)
EmoteMenuStart(PropETable[itemIndex], "props", item:IndexToItem(listIndex).Value)
end
@@ -320,7 +319,7 @@ if Config.Search then
local item = NativeUI.CreateItem(v.data[3], desc)
searchMenu:AddItem(item)
end
if v.table == "Dances" and Config.SharedEmotesEnabled then
local item2 = NativeUI.CreateItem(v.data[3], "")
sharedDanceMenu:AddItem(item2)
@@ -335,10 +334,10 @@ if Config.Search then
local data = results[index]
if data == Config.Languages[lang]['sharedanceemotes'] then return end
if data == Config.Languages[lang]['rfavorite'] then
if data == Config.Languages[lang]['rfavorite'] then
FavoriteEmote = ""
ShowNotification(Config.Languages[lang]['rfavorite'], 2000)
return
return
end
if favEnabled and IsControlPressed(0, 21) then
@@ -362,7 +361,7 @@ if Config.Search then
SimpleNotify(Config.Languages[lang]['sentrequestto'] .. GetPlayerName(target))
else
SimpleNotify(Config.Languages[lang]['nobodyclose'])
end
end
end
end

View File

@@ -6,17 +6,18 @@ RegisterNetEvent("ServerEmoteRequest", function(target, emotename, etype)
local ped = GetPlayerPed(source)
if target == -1 then
return
end
local tped = GetPlayerPed(target)
local pedcoord = GetEntityCoords(ped)
local targetcoord = GetEntityCoords(tped)
return
end
local tped = GetPlayerPed(target)
local pedcoord = GetEntityCoords(ped)
local targetcoord = GetEntityCoords(tped)
local distance = #(pedcoord - targetcoord)
local distance = #(pedcoord - targetcoord)
if distance > 3 then
return
end
if distance > 3 then
return
end
TriggerClientEvent("ClientEmoteRequestReceive", target, emotename, etype)
end)
@@ -24,17 +25,18 @@ RegisterNetEvent("ServerValidEmote", function(target, requestedemote, otheremote
local ped = GetPlayerPed(source)
if target == -1 then
return
end
local tped = GetPlayerPed(target)
local pedcoord = GetEntityCoords(ped)
local targetcoord = GetEntityCoords(tped)
return
end
local tped = GetPlayerPed(target)
local pedcoord = GetEntityCoords(ped)
local targetcoord = GetEntityCoords(tped)
local distance = #(pedcoord - targetcoord)
local distance = #(pedcoord - targetcoord)
if distance > 3 then
return
end
if distance > 3 then
return
end
TriggerClientEvent("SyncPlayEmote", source, otheremote, target)
TriggerClientEvent("SyncPlayEmoteSource", target, requestedemote, source)
end)
@@ -89,7 +91,7 @@ end)
local function addKeybindEventHandlers()
RegisterNetEvent("rp:ServerKeybindExist", function()
local src = source
local srcid = GetPlayerIdentifier(source)
local srcid = GetPlayerIdentifier(src)
MySQL.query('SELECT * FROM dpkeybinds WHERE `id`=@id;', { id = srcid }, function(dpkeybinds)
if dpkeybinds[1] then
TriggerClientEvent("rp:ClientKeybindExist", src, true)
@@ -104,7 +106,7 @@ local function addKeybindEventHandlers()
RegisterNetEvent("rp:ServerKeybindCreate", function()
local src = source
local srcid = GetPlayerIdentifier(source)
local srcid = GetPlayerIdentifier(src)
MySQL.insert('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 = "",
@@ -117,7 +119,7 @@ local function addKeybindEventHandlers()
RegisterNetEvent("rp:ServerKeybindGrab", function()
local src = source
local srcid = GetPlayerIdentifier(source)
local srcid = GetPlayerIdentifier(src)
MySQL.query('SELECT keybind1, emote1, keybind2, emote2, keybind3, emote3, keybind4, emote4, keybind5, emote5, keybind6, emote6 FROM `dpkeybinds` WHERE `id` = @id'
,
{ ['@id'] = srcid }, function(kb)

View File

@@ -7,9 +7,9 @@ if Config.CheckForUpdates then
local function CheckMenuVersion()
PerformHttpRequest('https://raw.githubusercontent.com/TayMcKenzieNZ/rpemotes/master/version.txt', function(err, text, headers)
local currentVersion = GetResourceMetadata(GetCurrentResourceName(), 'version')
if not text then
if not text then
VersionLog('error', 'Currently unable to run a version check.')
return
return
end
VersionLog('success', ('Current Version: %s'):format(currentVersion))
VersionLog('success', ('Latest Version: %s'):format(text))
@@ -20,6 +20,6 @@ if Config.CheckForUpdates then
end
end)
end
CheckMenuVersion()
end

View File

@@ -21,7 +21,7 @@ end)
if Config.SqlKeybinding then
QBCore.Commands.Add('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."}}, true, function(source, args)
TriggerClientEvent('animations:client:BindEmote', source, args)
TriggerClientEvent('animations:client:BindEmote', source, args)
end)
QBCore.Commands.Add('emotebinds', 'Check your currently bound emotes.', {}, false, function(source)
@@ -30,7 +30,7 @@ if Config.SqlKeybinding then
end
QBCore.Commands.Add('emotemenu', 'Open rpemotes menu (F3) by default.', {}, false, function(source)
TriggerClientEvent('animations:client:EmoteMenu', source)
TriggerClientEvent('animations:client:EmoteMenu', source)
end)
QBCore.Commands.Add('em', 'Open rpemotes menu (F3) by default.', {}, false, function(source)
@@ -38,11 +38,11 @@ QBCore.Commands.Add('em', 'Open rpemotes menu (F3) by default.', {}, false, func
end)
QBCore.Commands.Add('emotes', 'List available emotes.', {}, false, function(source)
TriggerClientEvent('animations:client:ListEmotes', source)
TriggerClientEvent('animations:client:ListEmotes', source)
end)
QBCore.Commands.Add('walk', 'Set your walkingstyle.', {{ name="style", help="/walks for a list of valid styles"}}, true, function(source, args)
TriggerClientEvent('animations:client:Walk', source, args)
TriggerClientEvent('animations:client:Walk', source, args)
end)
QBCore.Commands.Add('walks', 'List available walking styles.', {}, false, function(source)
@@ -50,5 +50,5 @@ QBCore.Commands.Add('walks', 'List available walking styles.', {}, false, functi
end)
QBCore.Commands.Add('nearby', 'Share emote with a nearby player.', {{ name="emotename", help="hug, handshake, bro or any valid shared emote."}}, true, function(source, args)
TriggerClientEvent('animations:client:Nearby', source, args)
TriggerClientEvent('animations:client:Nearby', source, args)
end)