Main/resources/[jobs]/[weapons]/force-sling/client/utils.lua

61 lines
2.3 KiB
Lua
Raw Normal View History

2025-06-07 08:51:21 +02:00
Utils = {}
function Utils:CreateAndAttachWeapon(weaponName, weaponVal, coords, playerPed)
if Sling.currentAttachedAmount >= Config.MaxWeaponsAttached then
Sling:Debug("warn", "Max weapons attached reached")
return false
end
if not weaponVal or not weaponVal.name then
Sling:Debug("error", "Invalid weapon data")
return false
end
local weaponObject = CreateWeaponObject(weaponVal.name, 0, coords.coords.x, coords.coords.y, coords.coords.z, true, 1.0,
0)
if not weaponObject then
Sling:Debug("error", "Failed to create weapon object")
return false
end
if NetworkGetEntityIsNetworked(weaponObject) then
NetworkUnregisterNetworkedEntity(weaponObject)
end
SetEntityCollision(weaponObject, false, false)
if Config.UseWeaponAttachments then
weaponVal.attachments = Inventory:GetWeaponAttachment(weaponName)
end
for _, component in pairs(weaponVal.attachments) do
GiveWeaponComponentToWeaponObject(weaponObject, component)
end
lib.requestModel(weaponVal.model)
local placeholder = CreateObjectNoOffset(weaponVal.model, coords.coords.x, coords.coords.y, coords.coords.z, true,
true, false)
SetEntityCollision(placeholder, false, false)
SetEntityAlpha(placeholder, 0, false)
AttachEntityToEntity(placeholder, playerPed, GetPedBoneIndex(playerPed, (coords.boneId or DEFAULT_BONE)),
coords.coords.x, coords.coords.y, coords.coords.z, coords.rot.x, coords.rot.y, coords.rot.z, true, true, false,
true, 2, true)
AttachEntityToEntity(weaponObject, placeholder, GetEntityBoneIndexByName(placeholder, "gun_root"), 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, true, true, false, true, 2, true)
Sling.cachedAttachments[weaponName].obj = weaponObject
Sling.cachedAttachments[weaponName].placeholder = placeholder
Sling.currentAttachedAmount = Sling.currentAttachedAmount + 1
SetModelAsNoLongerNeeded(weaponVal.model)
return true
end
function Utils:DeleteWeapon(weaponName)
local attachment = Sling.cachedAttachments[weaponName]
if NetworkGetEntityIsNetworked(attachment.obj) then
NetworkUnregisterNetworkedEntity(attachment.obj)
end
DeleteObject(attachment.obj)
if IsEntityAttachedToAnyPed(attachment.placeholder) then
DetachEntity(attachment.placeholder, true, false)
end
DeleteObject(attachment.placeholder)
Sling.currentAttachedAmount = Sling.currentAttachedAmount - 1
end