[Release]Drag command

roleplay
cops
police
#1

Done with the help with everyone who contributed to this
Credits to:
@Valk for solving the last piece of the puzzle
@Michael_Sanelli for the initial template
@NYKILLA1127 for mentioning the AttachEntityToEntity native
I just made it so you can detach people and so that you cannot drag yourself.

drag.rar (966 Bytes)

Client
local draggedBy = -1
local drag = false
local wasDragged = false

RegisterNetEvent("drag")
AddEventHandler("drag", function(_source)
    draggedBy = _source
    drag = not drag
end)

Citizen.CreateThread(function()
    while true do
        Citizen.Wait(0)
        if drag then
            wasDragged = true
            AttachEntityToEntity(PlayerPedId(), GetPlayerPed(GetPlayerFromServerId(draggedBy)), 4103, 11816, 0.48, 0.00, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true)
        else
            if not IsPedInParachuteFreeFall(PlayerPedId()) and wasDragged then
                wasDragged = false
                DetachEntity(PlayerPedId(), true, false)    
            end
        end
    end
end)
Server
RegisterCommand("drag", function(source, args, rawCommand)
	if #args == 1 then
		if GetPlayerName(args[1]) then
			if args[1] ~= source then
				TriggerClientEvent("drag", args[1], source)
			else
				TriggerClientEvent("chatMessage", source, "Error: ", {255, 0, 0}, "You cannot drag yourself.")
			end
		else
			TriggerClientEvent("chatMessage", source, "Error: ", {255, 0, 0}, "/drag [id]")
		end
	else
		TriggerClientEvent("chatMessage", source, "Error: ", {255, 0, 0}, "/drag [id]")
	end
end, false)

Drag the closest player (11/05/19)
drag.zip (1.6 KB)

Client
local Drag = {
	Distance = 3,
	Dragging = false,
	Dragger = -1,
	Dragged = false,
}

function Drag:GetPlayers()
	local Players = {}
    
	for Index = 0, 255 do
		if NetworkIsPlayerActive(Index) then
			table.insert(Players, Index)
		end
	end

    return Players
end

function Drag:GetClosestPlayer()
    local Players = self:GetPlayers()
    local ClosestDistance = -1
    local ClosestPlayer = -1
    local PlayerPed = PlayerPedId()
    local PlayerPosition = GetEntityCoords(PlayerPed, false)
    
    for Index = 1, #Players do
    	local TargetPed = GetPlayerPed(Players[Index])
    	if PlayerPed ~= TargetPed then
    		local TargetCoords = GetEntityCoords(TargetPed, false)
    		local Distance = #(PlayerPosition - TargetCoords)

    		if ClosestDistance == -1 or ClosestDistance > Distance then
    			ClosestPlayer = Players[Index]
    			ClosestDistance = Distance
    		end
    	end
    end
    
    return ClosestPlayer, ClosestDistance
end

RegisterNetEvent("Drag")
AddEventHandler("Drag", function(Dragger)
	Drag.Dragging = not Drag.Dragging
	Drag.Dragger = Dragger
end)

RegisterCommand("drag", function(source, args, fullCommand)
	local Player, Distance = Drag:GetClosestPlayer()

	if Distance ~= -1 and Distance < Drag.Distance then
		TriggerServerEvent("Drag", GetPlayerServerId(Player))
	else
		TriggerEvent("chat:addMessage", {
			color = {255, 0, 0},
			multiline = true,
			args = {"Drag", "Please get closer to the target!"},
		})
	end
end, false)

Citizen.CreateThread(function()
	while true do
		Citizen.Wait(0)

		if NetworkIsSessionStarted() then
			TriggerEvent("chat:addSuggestion", "/drag", "Toggle drag the closest player")
			return
		end
	end
end)

Citizen.CreateThread(function()
	while true do
		Citizen.Wait(0)
		if Drag.Dragging then
			local PlayerPed = PlayerPedId()

			Drag.Dragged = true
			AttachEntityToEntity(PlayerPed, GetPlayerPed(GetPlayerFromServerId(Drag.Dragger)), 4103, 11816, 0.48, 0.00, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true)
		else
			if Drag.Dragged then
				local PlayerPed = PlayerPedId()

				if not IsPedInParachuteFreeFall(PlayerPed) then
					Drag.Dragged = false
					DetachEntity(PlayerPed, true, false)    
				end
			end
		end
	end
end)
Server
RegisterServerEvent("Drag")
AddEventHandler("Drag", function(Target)
	local Source = source
	TriggerClientEvent("Drag", Target, Source)
end)
24 Likes
Drag/Undrag command
[Release][ES] Drag/Cuff permission based script bundle
[Request] Admin Camera to watch over people?
[Release] Cops FiveM
[HELP] Drag command
Parachute
#2

Already use this on police cops 0.1.3 (not already released) but thanks for sharing anyway ^^

EDIT : nvm, mine is bugged, is there any problem if I take this and integrate it directly on Cops_FiveM ? (with credits ofc)

2 Likes
#3

Scripts are meant to be shared and used, go for it.

14 Likes
#4

i love this community at times!

1 Like
#5

Can i please bear hug you?

1 Like
#6

+1 Open mouth kiss!!! haha thanks guys

#7

Will you be making a way to let people go after you drag them?

#8

you need a command to undrag

#9

Just type the command with the same id to undrag

#10

From my experience using that command again will not do anything.

#11

Having issues with perms :confused:
Im a Cop and my job id is 2, Also perm level 1000 and im the owner.

I have tried these with no luck:
elseif playerJob ~= “Cop” and playerJob ~= “Recruit” and playerJob ~= “Police” and playerJob ~= “2” then

Also tried “cop” “recruit” “police”

Am i being dumb?

#12

That only works on my server, you have to make the permission check yourself.

#13

And how would one do that and where?

#15

This is basic knowledge, if it’s your server I suggest you learn yourself some coding.

You could either get into Lua or C# as a start. There are several usefull links scattered around on the forums

We have a Wiki you could take a look at also take a look at NativeDB for usefull natives.

If you are not willing to learn there is no point in running a server.

:snail:

1 Like
#16

thannks amazing work. it works to drag just have to get that Undrag command to work because it will not stop making u drag with the same command so have to look that one up gone see if can make it work somehow @Frazzle

#17

I’ve just fixed my error.

1 Like
#18

@Frazzle yeah just saw it you work fast man damn good job gone try it right now many thanks!

#19

so the permission is that connected to the job id system?

#20

Permissions/groups is related to Essentialmode. To integrate the job ID system you would have to write it custom to your needs.

#21

Great script! Thanks for sharing!