Files
Elite-Gaming-FiveM/resources/scully_sling/client/main.lua
T
KingMcDonalds 27e597434a Add new scripts sling
do /sling
2023-04-28 16:25:41 -07:00

155 lines
5.3 KiB
Lua

-- Created by Scully#5775 | https://discord.gg/eNtGFS6
Scully.Sling = {
WeaponOne = {
InUse = false,
Hash = nil,
Object = nil,
Tint = nil,
Ammo = 0,
Components = {}
},
WeaponTwo = {
InUse = false,
Hash = nil,
Object = nil,
Tint = nil,
Ammo = 0,
Components = {}
}
}
function Scully.Sling.LoadWeaponAsset(weaponModel)
if not HasModelLoaded(weaponModel) then
RequestModel(weaponModel)
while not HasModelLoaded(weaponModel) do
Wait(0)
end
end
end
function Scully.Sling.DeleteWeaponAsset(weaponObject)
if DoesEntityExist(weaponObject) then
while DoesEntityExist(weaponObject) do
Wait(0)
DeleteObject(weaponObject)
SetModelAsNoLongerNeeded(weaponObject)
end
end
end
function Scully.Sling.RequestAnimDict(animDict)
if not HasAnimDictLoaded(animDict) then
RequestAnimDict(animDict)
while not HasAnimDictLoaded(animDict) do
Wait(0)
end
end
end
function Scully.Sling.ShowNotification(text)
BeginTextCommandThefeedPost("STRING")
AddTextComponentSubstringPlayerName(text)
EndTextCommandThefeedPostTicker(true, true)
end
RegisterCommand(Scully.Command, function(_, args)
local playerPed, slingOption = PlayerPedId(), args[1]
local currentWeapon = GetSelectedPedWeapon(playerPed)
if not slingOption then slingOption = '1' end
if slingOption == '1' then slingOption = 'WeaponOne' else slingOption = 'WeaponTwo' end
if Scully.Sling[slingOption].InUse then
if currentWeapon ~= `WEAPON_UNARMED` then
Scully.Sling.ShowNotification('~r~You are already holding a weapon!')
return
end
Scully.Sling.RequestAnimDict('mp_player_intdrink')
TaskPlayAnim(playerPed, 'mp_player_intdrink', 'loop_bottle', 8.0, -8.0, 200, 49, 0, 0, 0, 0)
local delayTimerOne, delayTimerTwo = 50, 50
if slingOption == 'WeaponTwo' then delayTimerOne, delayTimerTwo = 300, 100 end
Wait(delayTimerOne)
local slingInfo = Scully.Sling[slingOption]
AttachEntityToEntity(slingInfo.Object, playerPed, GetPedBoneIndex(playerPed, 18905), 0.0, 0.0, 0.0, 90.0, 90.0, 0.0, 1, 1, 0, 1, 1, 0)
Wait(delayTimerTwo)
ClearPedTasks(playerPed)
RemoveAnimDict('mp_player_intdrink')
Scully.Sling.DeleteWeaponAsset(slingInfo.Object)
GiveWeaponToPed(playerPed, slingInfo.Hash, slingInfo.Ammo, false, true)
Scully.CustomAdd(slingInfo.Hash)
SetPedWeaponTintIndex(playerPed, slingInfo.Hash, slingInfo.Tint)
for k, v in pairs(slingInfo.Components) do
GiveWeaponComponentToPed(playerPed, slingInfo.Hash, k)
Scully.Sling.DeleteWeaponAsset(v.Object)
end
SetPedAmmo(playerPed, slingInfo.Hash, slingInfo.Ammo)
Scully.Sling[slingOption] = {
InUse = false,
Hash = nil,
Object = nil,
Tint = nil,
Ammo = 0,
Components = {}
}
else
if currentWeapon == `WEAPON_UNARMED` then
Scully.Sling.ShowNotification('~r~You aren\'t holding a weapon!')
return
end
local validWeapon = Scully.Weapons[currentWeapon]
if not validWeapon then
Scully.Sling.ShowNotification('~r~You can\'t sling this weapon!')
return
end
local weaponComponents = {}
for k, v in pairs(validWeapon.Components) do
if HasPedGotWeaponComponent(playerPed, currentWeapon, k) then
weaponComponents[k] = {
Object = nil,
Hash = k,
Attachment = v.Object,
Bone = v.Bone
}
end
end
Scully.Sling.LoadWeaponAsset(validWeapon.Object)
Scully.Sling[slingOption] = {
InUse = true,
Hash = currentWeapon,
Object = CreateObject(validWeapon.Object, 1.0, 1.0, 1.0, true, true, false),
Tint = GetPedWeaponTintIndex(playerPed, currentWeapon),
Ammo = GetAmmoInPedWeapon(playerPed, currentWeapon),
Components = weaponComponents
}
local slingInfo = Scully.Sling[slingOption]
AttachEntityToEntity(slingInfo.Object, playerPed, GetPedBoneIndex(playerPed, 18905), 0.0, 0.0, 0.0, 90.0, 90.0, 0.0, 1, 1, 0, 1, 1, 0)
for k, v in pairs(slingInfo.Components) do
Scully.Sling.LoadWeaponAsset(v.Attachment)
local attachmentObject = CreateObject(v.Attachment, 1.0, 1.0, 1.0, true, true, false)
AttachEntityToEntity(attachmentObject, slingInfo.Object, GetEntityBoneIndexByName(slingInfo.Object, v.Bone), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1, 1, 0, 0, 2, 1)
Scully.Sling[slingOption].Components[v.Hash].Object = attachmentObject
end
SetEntityCollision(slingInfo.Object, false, false)
RemoveWeaponFromPed(playerPed, currentWeapon)
Scully.CustomRemoval(currentWeapon)
SetCurrentPedWeapon(playerPed, `WEAPON_UNARMED`, true)
Scully.Sling.RequestAnimDict('mp_player_intdrink')
TaskPlayAnim(playerPed, 'mp_player_intdrink', 'loop_bottle', 8.0, -8.0, 200, 49, 0, 0, 0, 0)
local delayTimer = 100
if slingOption == 'WeaponTwo' then delayTimer = 400 end
Wait(delayTimer)
ClearPedTasks(playerPed)
RemoveAnimDict('mp_player_intdrink')
if slingOption == 'WeaponOne' then
AttachEntityToEntity(slingInfo.Object, playerPed, GetPedBoneIndex(playerPed, 24816), Scully.AttachPoints[1].Position, Scully.AttachPoints[1].Rotation, 1, 1, 0, 0, 2, 1)
else
AttachEntityToEntity(slingInfo.Object, playerPed, GetPedBoneIndex(playerPed, 24816), Scully.AttachPoints[2].Position, Scully.AttachPoints[2].Rotation, 1, 1, 0, 0, 2, 1)
end
end
end)
if Scully.KeybindOne ~= '' then
RegisterKeyMapping(Scully.Command .. ' 1', 'Sling 1', 'keyboard', Scully.KeybindOne)
end
if Scully.KeybindTwo ~= '' then
RegisterKeyMapping(Scully.Command .. ' 2', 'Sling 2', 'keyboard', Scully.KeybindTwo)
end