164 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local isRequestAnim = false
 | 
						|
local targetPlayerId
 | 
						|
 | 
						|
if Config.SharedEmotesEnabled then
 | 
						|
    RegisterCommand('nearby', function(source, args, raw)
 | 
						|
        if not LocalPlayer.state.canEmote then return end
 | 
						|
        if IsPedInAnyVehicle(PlayerPedId(), true) then
 | 
						|
            return EmoteChatMessage(Translate('not_in_a_vehicle'))
 | 
						|
        end
 | 
						|
 | 
						|
        if #args > 0 then
 | 
						|
            local emotename = string.lower(args[1])
 | 
						|
            local target, distance = GetClosestPlayer()
 | 
						|
            if (distance ~= -1 and distance < 3) then
 | 
						|
                if RP[emotename] ~= nil and RP[emotename].category == "Shared" then
 | 
						|
                    local _, _, ename = table.unpack(RP[emotename])
 | 
						|
                    TriggerServerEvent("rpemotes:server:requestEmote", GetPlayerServerId(target), emotename)
 | 
						|
                    SimpleNotify(Translate('sentrequestto') ..
 | 
						|
                        GetPlayerName(target) .. " ~w~(~g~" .. ename .. "~w~)")
 | 
						|
                else
 | 
						|
                    EmoteChatMessage("'" .. emotename .. "' " .. Translate('notvalidsharedemote') .. "")
 | 
						|
                end
 | 
						|
            else
 | 
						|
                SimpleNotify(Translate('nobodyclose'))
 | 
						|
            end
 | 
						|
        else
 | 
						|
            NearbysOnCommand()
 | 
						|
        end
 | 
						|
    end, false)
 | 
						|
end
 | 
						|
 | 
						|
RegisterNetEvent("rpemotes:client:syncEmote", function(emote, player)
 | 
						|
    EmoteCancel()
 | 
						|
    Wait(300)
 | 
						|
    targetPlayerId = player
 | 
						|
    local plyServerId = GetPlayerFromServerId(player)
 | 
						|
 | 
						|
    if IsPedInAnyVehicle(GetPlayerPed(plyServerId ~= 0 and plyServerId or GetClosestPlayer()), true) then
 | 
						|
        return EmoteChatMessage(Translate('not_in_a_vehicle'))
 | 
						|
    end
 | 
						|
 | 
						|
    if RP[emote] then
 | 
						|
        local options = RP[emote].AnimationOptions
 | 
						|
        if options and options.Attachto then
 | 
						|
            local targetEmote = RP[emote][4]
 | 
						|
            if not targetEmote or not RP[targetEmote] or not RP[targetEmote].AnimationOptions or not RP[targetEmote].AnimationOptions.Attachto then
 | 
						|
                local ped = PlayerPedId()
 | 
						|
                local pedInFront = GetPlayerPed(plyServerId ~= 0 and plyServerId or GetClosestPlayer())
 | 
						|
 | 
						|
                AttachEntityToEntity(
 | 
						|
                    ped,
 | 
						|
                    pedInFront,
 | 
						|
                    GetPedBoneIndex(pedInFront, options.bone or -1),
 | 
						|
                    options.xPos or 0.0,
 | 
						|
                    options.yPos or 0.0,
 | 
						|
                    options.zPos or 0.0,
 | 
						|
                    options.xRot or 0.0,
 | 
						|
                    options.yRot or 0.0,
 | 
						|
                    options.zRot or 0.0,
 | 
						|
                    false,
 | 
						|
                    false,
 | 
						|
                    false,
 | 
						|
                    true,
 | 
						|
                    1,
 | 
						|
                    true
 | 
						|
                )
 | 
						|
            end
 | 
						|
        end
 | 
						|
 | 
						|
        OnEmotePlay(emote)
 | 
						|
        return
 | 
						|
    else
 | 
						|
        DebugPrint("rpemotes:client:syncEmote : Emote not found")
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("rpemotes:client:syncEmoteSource", function(emote, player)
 | 
						|
    local ped = PlayerPedId()
 | 
						|
    local plyServerId = GetPlayerFromServerId(player)
 | 
						|
    local pedInFront = GetPlayerPed(plyServerId ~= 0 and plyServerId or GetClosestPlayer())
 | 
						|
 | 
						|
    if IsPedInAnyVehicle(ped, true) or IsPedInAnyVehicle(pedInFront, true) then
 | 
						|
        return EmoteChatMessage(Translate('not_in_a_vehicle'))
 | 
						|
    end
 | 
						|
 | 
						|
    local options = RP[emote] and RP[emote].AnimationOptions
 | 
						|
    if options then
 | 
						|
        if (options.Attachto) then
 | 
						|
            AttachEntityToEntity(
 | 
						|
                ped,
 | 
						|
                pedInFront,
 | 
						|
                GetPedBoneIndex(pedInFront, options.bone or -1),
 | 
						|
                options.xPos or 0.0,
 | 
						|
                options.yPos or 0.0,
 | 
						|
                options.zPos or 0.0,
 | 
						|
                options.xRot or 0.0,
 | 
						|
                options.yRot or 0.0,
 | 
						|
                options.zRot or 0.0,
 | 
						|
                false,
 | 
						|
                false,
 | 
						|
                false,
 | 
						|
                true,
 | 
						|
                1,
 | 
						|
                true
 | 
						|
            )
 | 
						|
        end
 | 
						|
    end
 | 
						|
 | 
						|
    local coords = GetOffsetFromEntityInWorldCoords(pedInFront, (options and options.SyncOffsetSide or 0) + 0.0, (options and options.SyncOffsetFront or 1) + 0.0, (options and options.SyncOffsetHeight or 0) + 0.0)
 | 
						|
    local heading = GetEntityHeading(pedInFront)
 | 
						|
    SetEntityHeading(ped, heading - (options and options.SyncOffsetHeading or 180) + 0.0)
 | 
						|
    SetEntityCoordsNoOffset(ped, coords.x, coords.y, coords.z)
 | 
						|
    EmoteCancel()
 | 
						|
    Wait(300)
 | 
						|
 | 
						|
    targetPlayerId = player
 | 
						|
    if RP[emote] ~= nil then
 | 
						|
        OnEmotePlay(emote)
 | 
						|
        return
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent("rpemotes:client:cancelEmote", function(player)
 | 
						|
    if targetPlayerId and targetPlayerId == player then
 | 
						|
        targetPlayerId = nil
 | 
						|
        EmoteCancel()
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
function CancelSharedEmote()
 | 
						|
    if targetPlayerId then
 | 
						|
        TriggerServerEvent("rpemotes:server:cancelEmote", targetPlayerId)
 | 
						|
        targetPlayerId = nil
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
RegisterNetEvent("rpemotes:client:requestEmote", function(emotename, etype, target)
 | 
						|
    isRequestAnim = true
 | 
						|
 | 
						|
    local displayed = RP[emotename] and select(3, table.unpack(RP[emotename]))
 | 
						|
 | 
						|
    PlaySound(-1, "NAV", "HUD_AMMO_SHOP_SOUNDSET", false, 0, true)
 | 
						|
    SimpleNotify(Translate('doyouwanna') .. displayed .. "~w~)")
 | 
						|
    -- The player has now 10 seconds to accept the request
 | 
						|
    local timer = 10 * 1000
 | 
						|
    while isRequestAnim do
 | 
						|
        Wait(5)
 | 
						|
        timer = timer - 5
 | 
						|
        if timer <= 0 then
 | 
						|
            isRequestAnim = false
 | 
						|
            SimpleNotify(Translate('refuseemote'))
 | 
						|
        end
 | 
						|
 | 
						|
        if IsControlJustPressed(1, 246) then
 | 
						|
            isRequestAnim = false
 | 
						|
 | 
						|
            local otheremote = RP[emotename] and RP[emotename][4] or emotename
 | 
						|
            TriggerServerEvent("rpemotes:server:confirmEmote", target, emotename, otheremote)
 | 
						|
        elseif IsControlJustPressed(1, 182) then
 | 
						|
            isRequestAnim = false
 | 
						|
            SimpleNotify(Translate('refuseemote'))
 | 
						|
        end
 | 
						|
    end
 | 
						|
end)
 |