Untitled diff
156 linee
-- Created by Deziel0495 and IllusiveTea --
-------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------Simple Holster Animation-----------------------------------------------------
-- NOTICE
----------------------------------------------------------SCRIPT BY: Nathan G.-------------------------------------------------------
-- This script is licensed under "No License". https://choosealicense.com/no-license/
-------------------------------------------------------------------------------------------------------------------------------------
-- You are allowed to: Download, Use and Edit the Script. 
-- You are not allowed to: Copy, re-release, re-distribute it without our written permission.
--- DO NOT EDIT THIS
local default_weapon = GetHashKey(data.weapon)
local active = false
local ped = nil -- Cache the ped
local currentPedData = nil
local holstered = true
local holstered = true
-- RESTRICTED PEDS --
-- I've only listed peds that have a remote speaker mic, but any ped listed here will do the animations.
local skins = {
local skins = {
	"s_m_y_cop_01",
	"mp_m_freemode_01",
	"s_f_y_cop_01",
	"mp_f_freemode_01",
	"s_m_y_hwaycop_01",
	"s_m_y_sheriff_01",
	"s_f_y_sheriff_01",
	"s_m_y_ranger_01",
	"s_f_y_ranger_01",
}
}
-- Add/remove weapon hashes here to be added for holster checks.
local weapons = {
local weapons = {
	"WEAPON_PISTOL",
	"WEAPON_COMBATPISTOL",
	"WEAPON_COMBATPISTOL",
}
}
-- RADIO ANIMATIONS --
-- anims
Citizen.CreateThread(function()
Citizen.CreateThread(function()
	while true do
	while true do
		Citizen.Wait( 0 )
		local ped = PlayerPedId()
		if DoesEntityExist( ped ) and not IsEntityDead( ped ) and CheckSkin(ped) then
			if not IsPauseMenuActive() then 
				loadAnimDict( "random@arrests" )
				if IsControlJustReleased( 0, 19 ) then -- INPUT_CHARACTER_WHEEL (LEFT ALT)
					TriggerServerEvent('InteractSound_SV:PlayOnSource', 'off', 0.1)
					ClearPedTasks(ped)
					SetEnableHandcuffs(ped, false)
				else
					if IsControlJustPressed( 0, 19 ) and CheckSkin(ped) and not IsPlayerFreeAiming(PlayerId()) then -- INPUT_CHARACTER_WHEEL (LEFT ALT)
						TriggerServerEvent('InteractSound_SV:PlayOnSource', 'on', 0.1)
						TaskPlayAnim(ped, "random@arrests", "generic_radio_enter", 8.0, 2.0, -1, 50, 2.0, 0, 0, 0 )
						SetEnableHandcuffs(ped, true)
					elseif IsControlJustPressed( 0, 19 ) and CheckSkin(ped) and IsPlayerFreeAiming(PlayerId()) then -- INPUT_CHARACTER_WHEEL (LEFT ALT)
						TriggerServerEvent('InteractSound_SV:PlayOnSource', 'on', 0.1)
						TaskPlayAnim(ped, "random@arrests", "radio_chatter", 8.0, 2.0, -1, 50, 2.0, 0, 0, 0 )
						SetEnableHandcuffs(ped, true)
					end 
					if IsEntityPlayingAnim(GetPlayerPed(PlayerId()), "random@arrests", "generic_radio_enter", 3) then
						DisableActions(ped)
					elseif IsEntityPlayingAnim(GetPlayerPed(PlayerId()), "random@arrests", "radio_chatter", 3) then
						DisableActions(ped)
					end
				end
			end 
		end 
	end
end )
-- HOLD WEAPON HOLSTER ANIMATION --
Citizen.CreateThread( function()
	while true do 
		Citizen.Wait( 0 )
		local ped = PlayerPedId()
		if DoesEntityExist( ped ) and not IsEntityDead( ped ) and not IsPedInAnyVehicle(PlayerPedId(), true) and CheckSkin(ped) then 
			DisableControlAction( 0, 20, true ) -- INPUT_MULTIPLAYER_INFO (Z)
			if not IsPauseMenuActive() then 
				loadAnimDict( "reaction@intimidation@cop@unarmed" )		
				if IsDisabledControlJustReleased( 0, 20 ) then -- INPUT_MULTIPLAYER_INFO (Z)
					ClearPedTasks(ped)
					SetEnableHandcuffs(ped, false)
					SetCurrentPedWeapon(ped, GetHashKey("WEAPON_UNARMED"), true)
				else
					if IsDisabledControlJustPressed( 0, 20 ) and CheckSkin(ped) then -- INPUT_MULTIPLAYER_INFO (Z)
						SetEnableHandcuffs(ped, true)
						SetCurrentPedWeapon(ped, GetHashKey("WEAPON_UNARMED"), true) 
						TaskPlayAnim(ped, "reaction@intimidation@cop@unarmed", "intro", 8.0, 2.0, -1, 50, 2.0, 0, 0, 0 )
					end
					if IsEntityPlayingAnim(GetPlayerPed(PlayerId()), "reaction@intimidation@cop@unarmed", "intro", 3) then 
						DisableActions(ped)
					end	
				end
			end 
		end 
	end
end )
-- HOLSTER/UNHOLSTER PISTOL --
 Citizen.CreateThread(function()
	while true do
		Citizen.Wait(0)
		Citizen.Wait(0)
		local ped = PlayerPedId()
		local ped = PlayerPedId()
		if DoesEntityExist( ped ) and not IsEntityDead( ped ) and not IsPedInAnyVehicle(PlayerPedId(), true) and CheckSkin(ped) then
		if DoesEntityExist( ped ) and not IsEntityDead( ped ) and not IsPedInAnyVehicle(PlayerPedId(), true) and CheckSkin(ped) then
			loadAnimDict( "rcmjosh4" )
			loadAnimDict( "rcmjosh4" )
			loadAnimDict( "weapons@pistol@" )
			loadAnimDict( "weapons@pistol@" )
			if CheckWeapon(ped) then
			if CheckWeapon(ped) then
				if holstered then
				if holstered then
					TaskPlayAnim(ped, "rcmjosh4", "josh_leadout_cop2", 8.0, 2.0, -1, 48, 10, 0, 0, 0 )
					TaskPlayAnim(ped, "rcmjosh4", "josh_leadout_cop2", 8.0, 2.0, -1, 48, 10, 0, 0, 0 )
					Citizen.Wait(600)
					Citizen.Wait(600)
					ClearPedTasks(ped)
					ClearPedTasks(ped)
					holstered = false
					holstered = false
				end
				end
				SetPedComponentVariation(ped, 9, 0, 0, 0)
			elseif not CheckWeapon(ped) then
			elseif not CheckWeapon(ped) then
				if not holstered then
				if not holstered then
					TaskPlayAnim(ped, "weapons@pistol@", "aim_2_holster", 8.0, 2.0, -1, 48, 10, 0, 0, 0 )
					TaskPlayAnim(ped, "weapons@pistol@", "aim_2_holster", 8.0, 2.0, -1, 48, 10, 0, 0, 0 )
					Citizen.Wait(500)
					Citizen.Wait(500)
					ClearPedTasks(ped)
					ClearPedTasks(ped)
					holstered = true
					holstered = true
				end
				end
				SetPedComponentVariation(ped, 9, 1, 0, 0)
			end
			end
		end
		end
	end
	end
end)
end)
-- DO NOT REMOVE THESE! --
-- functions
function table_invert(t)
  local s={}
  for k,v in pairs(t) do
    s[v]=k
  end
  return s
end
function CheckSkin(ped)
function CheckSkin(ped)
	for i = 1, #skins do
	for i = 1, #skins do
		if GetHashKey(skins[i]) == GetEntityModel(ped) then
		if GetHashKey(skins[i]) == GetEntityModel(ped) then
			return true
			return true
		end
		end
	end
	end
	return false
	return false
end
end
function CheckWeapon(ped)
function CheckWeapon(ped)
	for i = 1, #weapons do
	for i = 1, #weapons do
		if GetHashKey(weapons[i]) == GetSelectedPedWeapon(ped) then
		if GetHashKey(weapons[i]) == GetSelectedPedWeapon(ped) then
			return true
			return true
		end
		end
	end
	end
	return false
	return false
end
end
function DisableActions(ped)
function DisableActions(ped)
	DisableControlAction(1, 140, true)
	DisableControlAction(1, 37, true)
	DisableControlAction(1, 141, true)
	DisablePlayerFiring(ped, true)
	DisableControlAction(1, 142, true)
	DisableControlAction(1, 37, true) -- Disables INPUT_SELECT_WEAPON (TAB)
	DisablePlayerFiring(ped, true) -- Disable weapon firing
end
end
function loadAnimDict( dict )
function loadAnimDict( dict )
	while ( not HasAnimDictLoaded( dict ) ) do
	while ( not HasAnimDictLoaded( dict ) ) do
		RequestAnimDict( dict )
		RequestAnimDict( dict )
		Citizen.Wait( 0 )
		Citizen.Wait( 0 )
	end
	end
end
end
Citizen.CreateThread(function()
  while true do
    ped = GetPlayerPed(-1)
    local ped_hash = GetEntityModel(ped)
    local enable = false 
    for ped, data in pairs(data.peds) do
      if GetHashKey(ped) == ped_hash then 
        enable = true
        if data.enabled ~= nil then
          enable = data.enabled
        end
        currentPedData = data
        break
      end
    end
    active = enable
    Citizen.Wait(5000)
  end
end)
local last_weapon = nil
Citizen.CreateThread(function()
  while true do
    if active then
      current_weapon = GetSelectedPedWeapon(ped)
      if current_weapon ~= last_weapon then
        for component, holsters in pairs(currentPedData.components) do
          local holsterDrawable = GetPedDrawableVariation(ped, component)
          local holsterTexture = GetPedTextureVariation(ped, component)
          local emptyHolster = holsters[holsterDrawable]
          if emptyHolster and current_weapon == default_weapon then
            SetPedComponentVariation(ped, component, emptyHolster, holsterTexture, 0)
            break
          end
          local filledHolster = table_invert(holsters)[holsterDrawable]
          if filledHolster and current_weapon ~= default_weapon and last_weapon == default_weapon then
            SetPedComponentVariation(ped, component, filledHolster, holsterTexture, 0)
            break
          end
        end
      end
      last_weapon = current_weapon
    end
    Citizen.Wait(200)
  end
end)