forked from Simnation/Main
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)
|