-- 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