forked from Simnation/Main
ed
This commit is contained in:
parent
2fd4906414
commit
9d4f625a84
962 changed files with 36 additions and 36 deletions
210
resources/[weapons]/[Scripts]/ND_GunAnims/client/animations.lua
Normal file
210
resources/[weapons]/[Scripts]/ND_GunAnims/client/animations.lua
Normal file
|
@ -0,0 +1,210 @@
|
|||
local DATA_ANIMATIONS <const> = lib.load("data.animations")
|
||||
local USING_INVENTORY <const> = GetResourceState("ox_inventory"):find("start") and GetConvarInt("inventory:weaponanims", 1) ~= 1
|
||||
local complete = true
|
||||
|
||||
local function isVehicleBlocked(vehicle)
|
||||
if not vehicle then return end
|
||||
|
||||
local class = GetVehicleClass(vehicle)
|
||||
return class == 8 or class == 13
|
||||
end
|
||||
|
||||
local function isBlocked(ped)
|
||||
return isVehicleBlocked(cache.vehicle) or GetPedParachuteState(ped) > 0
|
||||
end
|
||||
|
||||
local function getGender(ped)
|
||||
local model = GetEntityModel(ped)
|
||||
if model == `mp_m_freemode_01` then
|
||||
return "male"
|
||||
elseif model == `mp_f_freemode_01` then
|
||||
return "female"
|
||||
end
|
||||
end
|
||||
|
||||
local function getWeaponAnim(ped, weapon, variant)
|
||||
local animations = DATA_ANIMATIONS.animations
|
||||
local weaponGroups = DATA_ANIMATIONS?.weaponGroups
|
||||
local weaponAnims = DATA_ANIMATIONS?.weapons
|
||||
local clothingInfo = DATA_ANIMATIONS?.clothing?[variant]
|
||||
local anim = nil
|
||||
local currentWeaponGroup = GetWeapontypeGroup(weapon)
|
||||
local gender = getGender(ped)
|
||||
|
||||
local animByGroup = weaponGroups?[currentWeaponGroup]
|
||||
if animByGroup or animByGroup == false then
|
||||
anim = animByGroup
|
||||
end
|
||||
|
||||
local animByWeapon = weaponAnims?[weapon]
|
||||
if animByWeapon or animByWeapon == false then
|
||||
anim = animByWeapon
|
||||
end
|
||||
|
||||
if not clothingInfo then goto skip end
|
||||
|
||||
for i=1, #clothingInfo do
|
||||
local info = clothingInfo[i]
|
||||
if not lib.table.contains(info.weapons, weapon) then goto next end
|
||||
|
||||
|
||||
local components = info[gender]
|
||||
if not components then goto next end
|
||||
|
||||
local holster = GetPedDrawableVariation(ped, info.variation)
|
||||
if lib.table.contains(components, holster) then
|
||||
anim = info.anim
|
||||
end
|
||||
|
||||
::next::
|
||||
end
|
||||
|
||||
::skip::
|
||||
|
||||
if anim == nil then
|
||||
anim = DATA_ANIMATIONS.default
|
||||
end
|
||||
|
||||
return animations[anim]
|
||||
end
|
||||
|
||||
local function startWaponAnim(ped, info, weapon, hideWeapon)
|
||||
local coords = GetEntityCoords(ped)
|
||||
lib.requestAnimDict(info.dict)
|
||||
TaskPlayAnimAdvanced(ped, info.dict, info.clip, coords.x, coords.y, coords.z, 0, 0, GetEntityHeading(ped), 8.0, 3.0, info.duration*2, 50, 0.1)
|
||||
RemoveAnimDict(info.dict)
|
||||
|
||||
SetTimeout(info.clothing or info.duration/2, function()
|
||||
TriggerEvent("ND_GunAnims:updateHolster", weapon, hideWeapon)
|
||||
end)
|
||||
|
||||
Wait(info.duration)
|
||||
|
||||
if info.cancel then
|
||||
StopAnimTask(ped, info.dict, info.clip, 2.0)
|
||||
end
|
||||
end
|
||||
|
||||
local function playWeaponAnim(weapon, variant)
|
||||
local ped = cache.ped
|
||||
local info = getWeaponAnim(ped, weapon, variant)
|
||||
|
||||
if not info or isBlocked(ped) then
|
||||
return
|
||||
end
|
||||
|
||||
info = info[variant]
|
||||
if not info then return end
|
||||
|
||||
if info.dict then
|
||||
startWaponAnim(ped, info, weapon, variant == "unholster")
|
||||
else
|
||||
local anims = info
|
||||
for i=1, #anims do
|
||||
local info = anims[i]
|
||||
startWaponAnim(ped, info, weapon, variant == "unholster")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function thread(variant, ped, hash)
|
||||
LocalPlayer.state.invBusy = true
|
||||
|
||||
if variant == "holster" then
|
||||
CreateThread(function()
|
||||
SetPedCurrentWeaponVisible(ped, false, false)
|
||||
DisablePlayerFiring(cache.playerId, true)
|
||||
|
||||
while not complete do
|
||||
DisableControlAction(1, 25, true)
|
||||
DisableControlAction(1, 68, true)
|
||||
DisableControlAction(1, 70, true)
|
||||
DisableControlAction(1, 91, true)
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
DisablePlayerFiring(cache.playerId, false)
|
||||
SetPedCurrentWeaponVisible(ped, true, false)
|
||||
end)
|
||||
else
|
||||
CreateThread(function()
|
||||
DisablePlayerFiring(cache.playerId, true)
|
||||
while not complete do
|
||||
if USING_INVENTORY then
|
||||
GiveWeaponToPed(ped, hash, 0, false, true)
|
||||
SetCurrentPedWeapon(ped, hash, true)
|
||||
end
|
||||
DisableControlAction(1, 25, true)
|
||||
DisableControlAction(1, 68, true)
|
||||
DisableControlAction(1, 70, true)
|
||||
DisableControlAction(1, 91, true)
|
||||
Wait(0)
|
||||
end
|
||||
DisablePlayerFiring(cache.playerId, false)
|
||||
end)
|
||||
end
|
||||
|
||||
LocalPlayer.state.invBusy = false
|
||||
end
|
||||
|
||||
if USING_INVENTORY then
|
||||
local items = exports.ox_inventory:Items()
|
||||
|
||||
AddEventHandler("ox_inventory:usedItem", function(name, slotId, metadata)
|
||||
local data = items[name]
|
||||
if not data or not data.weapon or data.ammo then return end
|
||||
|
||||
complete = false
|
||||
local ped = cache.ped
|
||||
|
||||
thread("holster", ped, data.hash)
|
||||
playWeaponAnim(data.hash, "unholster")
|
||||
complete = true
|
||||
end)
|
||||
|
||||
AddEventHandler("ox_inventory:currentWeapon", function(weapon)
|
||||
local hash = cache.weapon
|
||||
local ped = cache.ped
|
||||
if not hash or weapon then return end
|
||||
|
||||
complete = false
|
||||
|
||||
thread("unholster", ped, hash)
|
||||
playWeaponAnim(hash, "holster")
|
||||
complete = true
|
||||
end)
|
||||
end
|
||||
|
||||
if not USING_INVENTORY then
|
||||
local _, weapon = GetCurrentPedWeapon(cache.ped, true)
|
||||
local weaponInHand = nil
|
||||
|
||||
local function weaponChanged(value)
|
||||
local ped = cache.ped
|
||||
local hash = value or weapon
|
||||
complete = false
|
||||
|
||||
if value then
|
||||
thread("holster", ped, hash)
|
||||
playWeaponAnim(hash, "unholster")
|
||||
else
|
||||
thread("unholster", ped, hash)
|
||||
playWeaponAnim(hash, "holster")
|
||||
end
|
||||
|
||||
complete = true
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
while true do
|
||||
local _, currentWeapon = GetCurrentPedWeapon(cache.ped, true)
|
||||
if currentWeapon ~= weapon then
|
||||
local new = currentWeapon ~= `WEAPON_UNARMED` and currentWeapon
|
||||
weaponChanged(new)
|
||||
weaponInHand = new
|
||||
weapon = currentWeapon
|
||||
end
|
||||
Wait(0)
|
||||
end
|
||||
end)
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue