190 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| if not Config.Handsup then
 | |
|     return
 | |
| end
 | |
| 
 | |
| local lib, anim = 'missminuteman_1ig_2', 'handsup_base'
 | |
| local canHandsUp = true
 | |
| local deadPlayer = false
 | |
| 
 | |
| local function LoadAnimDict(dict)
 | |
|     if HasAnimDictLoaded(dict) then return end
 | |
| 
 | |
|     RequestAnimDict(dict)
 | |
|     while not HasAnimDictLoaded(dict) do
 | |
|         Wait(10)
 | |
|     end
 | |
| end
 | |
| 
 | |
| RegisterKeyMapping('handsup', Lang('INVENTORY_KEYMAPPING_HANDSUP_LABEL'), 'keyboard', Config.KeyBinds.handsup)
 | |
| 
 | |
| RegisterCommand('handsup', function()
 | |
|     if not IsPedInAnyVehicle(PlayerPedId(), false) and GetEntityHealth(PlayerPedId()) > 1 then
 | |
|         RequestAnimDict(lib)
 | |
|         while not HasAnimDictLoaded(lib) do
 | |
|             Wait(100)
 | |
|         end
 | |
|         SetCurrentPedWeapon(PlayerPedId(), GetHashKey('WEAPON_UNARMED'), true)
 | |
|         if IsEntityPlayingAnim(PlayerPedId(), lib, anim, 3) then
 | |
|             ClearPedSecondaryTask(PlayerPedId())
 | |
|         else
 | |
|             if canHandsUp then
 | |
|                 TaskPlayAnim(PlayerPedId(), lib, anim, 2.0, 2.5, -1, 49, 0, 0, 0, 0)
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent(Config.InventoryPrefix .. ':client:RobPlayer')
 | |
| AddEventHandler(Config.InventoryPrefix .. ':client:RobPlayer', function(TargetId)
 | |
|     local ped = PlayerPedId()
 | |
|     if IsPedArmed(ped, 1) or IsPedArmed(ped, 2) or IsPedArmed(ped, 4) or deadPlayer or Config.StealWithoutWeapons then
 | |
|         SendNUIMessage({
 | |
|             action = 'RobPlayer',
 | |
|             TargetId = TargetId,
 | |
|         })
 | |
|     end
 | |
|     deadPlayer = false
 | |
| end)
 | |
| 
 | |
| local function checkPlayerIsNear(targetPlayer)
 | |
|     CreateThread(function()
 | |
|         while true do
 | |
|             Wait(100)
 | |
|             local targetPed = GetPlayerPed(targetPlayer)
 | |
| 
 | |
|             if not DoesEntityExist(targetPed) or NetworkIsPlayerActive(targetPlayer) == false then
 | |
|                 TriggerEvent(Config.InventoryPrefix .. ':client:closeinv')
 | |
|                 SendTextMessage(Lang('INVENTORY_NOTIFICATION_ROBBERY_AWAY'), 'inform')
 | |
|                 break
 | |
|             end
 | |
| 
 | |
|             local playerCoords = GetEntityCoords(PlayerPedId())
 | |
|             local targetCoords = GetEntityCoords(targetPed)
 | |
|             local distance = #(playerCoords - targetCoords)
 | |
| 
 | |
|             if distance > 5 then
 | |
|                 Wait(500)
 | |
|                 TriggerEvent(Config.InventoryPrefix .. ':client:closeinv')
 | |
|                 SendTextMessage(Lang('INVENTORY_NOTIFICATION_ROBBERY_AWAY'), 'inform')
 | |
|                 break
 | |
|             end
 | |
|         end
 | |
|     end)
 | |
| end
 | |
| 
 | |
| RegisterNetEvent(Config.InventoryPrefix .. ':client:search', function()
 | |
|     local player, distance = GetClosestPlayer(GetEntityCoords(PlayerPedId()))
 | |
|     if player ~= -1 and distance < 2.5 then
 | |
|         local playerId = GetPlayerServerId(player)
 | |
|         local searchPlayerPed = GetPlayerPed(player)
 | |
|         if IsEntityPlayingAnim(searchPlayerPed, 'missminuteman_1ig_2', 'handsup_base', 3) or Config.StealDeadPlayer and checkEntityDead(playerId, searchPlayerPed) or GetEntityHealth(searchPlayerPed) <= 0 then
 | |
|             TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'otherplayer', playerId)
 | |
|             checkPlayerIsNear(player)
 | |
|             inRobbery = true
 | |
|         else
 | |
|             SendTextMessage(Lang('INVENTORY_NOTIFICATION_NO_HANDSUP'), 'error')
 | |
|         end
 | |
|     else
 | |
|         SendTextMessage(Lang('INVENTORY_NOTIFICATION_NO_PLAYERS'), 'error')
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent(Config.InventoryPrefix .. ':client:playerRobbery')
 | |
| AddEventHandler(Config.InventoryPrefix .. ':client:playerRobbery', function()
 | |
|     local player, distance = GetClosestPlayer(GetEntityCoords(PlayerPedId()))
 | |
|     if player ~= -1 and distance < 3.0 then
 | |
|         local searchPlayerPed = GetPlayerPed(player)
 | |
|         local playerId = GetPlayerServerId(player)
 | |
|         TriggerEvent(Config.InventoryPrefix .. ':client:forceCloseInventory')
 | |
|         Wait(500)
 | |
| 
 | |
|         if checkEntityDead(playerId, searchPlayerPed) then
 | |
|             RequestAnimDict('amb@world_human_gardener_plant@male@base')
 | |
|             while not HasAnimDictLoaded('amb@world_human_gardener_plant@male@base') do
 | |
|                 Wait(100)
 | |
|             end
 | |
|             TaskPlayAnim(PlayerPedId(), 'amb@world_human_gardener_plant@male@base', 'base', 8.0, -8, -1, 1, 0, 0, 0, 0)
 | |
|             ProgressBar('steal_playerdead', Lang('INVENTORY_PROGRESS_STEAL'), 5500, false, true, {
 | |
|                 move = true,
 | |
|                 car = true,
 | |
|                 mouse = false,
 | |
|                 combat = true,
 | |
|             }, {}, {}, {}, function() -- Done
 | |
|                 TaskPlayAnim(PlayerPedId(), 'amb@world_human_gardener_plant@male@base', 'base', 8.0, -8, -1, 1, 0, 0, 0, 0)
 | |
|                 TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'otherplayer', playerId)
 | |
|                 checkPlayerIsNear(player)
 | |
|                 inRobbery = true
 | |
|             end, function() -- Cancel
 | |
|                 ClearPedTasks(PlayerPedId())
 | |
|             end)
 | |
|             return
 | |
|         end
 | |
| 
 | |
|         if DoesEntityExist(searchPlayerPed) and IsEntityPlayingAnim(searchPlayerPed, lib, anim, 3) and not checkEntityDead(playerId, searchPlayerPed) then
 | |
|             LoadAnimDict('combat@aim_variations@arrest')
 | |
|             TaskPlayAnim(PlayerPedId(), 'combat@aim_variations@arrest', 'cop_med_arrest_01', 8.0, -8, -1, 1, 0, 0, 0, 0)
 | |
|             ProgressBar('steal_player', Lang('INVENTORY_PROGRESS_STEAL'), 5500, false, true, {
 | |
|                 move = true,
 | |
|                 car = true,
 | |
|                 mouse = false,
 | |
|                 combat = true,
 | |
|             }, {}, {}, {}, function() -- Done
 | |
|                 TaskPlayAnim(PlayerPedId(), 'combat@aim_variations@arrest', 'cop_med_arrest_01', 8.0, -8, -1, 1, 0, 0, 0, 0)
 | |
|                 TriggerServerEvent(Config.InventoryPrefix .. ':server:OpenInventory', 'otherplayer', playerId)
 | |
|                 SetPedConfigFlag(PlayerPedId(), 36, true)
 | |
|                 checkPlayerIsNear(player)
 | |
|                 inRobbery = true
 | |
|             end, function() -- Cancel
 | |
|                 ClearPedTasks(PlayerPedId())
 | |
|             end)
 | |
|         else
 | |
|             SendTextMessage(Lang('INVENTORY_NOTIFICATION_NO_HANDSUP'), 'error')
 | |
|         end
 | |
|     end
 | |
| end)
 | |
| 
 | |
| function checkPlayerRobbery(other)
 | |
|     if other and other.id then
 | |
|         local target = tonumber(other.id)
 | |
|         local playerTarget = GetPlayerFromServerId(target)
 | |
|         local pedTarget = GetPlayerPed(playerTarget)
 | |
|         if other ~= nil then
 | |
|             currentOtherInventory = other.name
 | |
|         end
 | |
|         if target and DoesEntityExist(pedTarget) then
 | |
|             local pos = GetEntityCoords(playerPed)
 | |
|             local targetPos = GetEntityCoords(pedTarget)
 | |
|             local distance = GetDistanceBetweenCoords(pos.x, pos.y, pos.z, targetPos.x, targetPos.y, targetPos.z, true)
 | |
|             if distance < 3.0 then
 | |
|                 inInventory = true
 | |
|                 deadPlayer = true
 | |
|                 StealingPed = pedTarget
 | |
|                 TriggerEvent(Config.InventoryPrefix .. ':client:RobPlayer', target)
 | |
|             end
 | |
|         end
 | |
|     else
 | |
|         local closestPlayer, closestDistance = GetClosestPlayer(GetEntityCoords(PlayerPedId()))
 | |
|         if closestPlayer and closestPlayer ~= -1 and closestDistance < 3.0 then
 | |
|             local playerId = GetPlayerServerId(closestPlayer)
 | |
|             local searchPlayerPed = GetPlayerPed(closestPlayer)
 | |
|             if searchPlayerPed and searchPlayerPed ~= 0 then
 | |
|                 if Config.StealDeadPlayer and checkEntityDead(playerId, searchPlayerPed) then
 | |
|                     inInventory = true
 | |
|                     deadPlayer = true
 | |
|                     StealingPed = searchPlayerPed
 | |
|                     TriggerEvent(Config.InventoryPrefix .. ':client:RobPlayer', playerId)
 | |
|                 end
 | |
|                 if IsEntityPlayingAnim(searchPlayerPed, lib, anim, 3) then
 | |
|                     inInventory = true
 | |
|                     deadPlayer = false
 | |
|                     StealingPed = searchPlayerPed
 | |
|                     TriggerEvent(Config.InventoryPrefix .. ':client:RobPlayer', playerId)
 | |
|                 end
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| RegisterNetEvent('inventory:robClosestPlayer', function()
 | |
|     checkPlayerRobbery()
 | |
| end)
 | 
