├── stream ├── [male] │ ├── mp_m_freemode_01_mp_m_january2016^task_008_u.ydd │ ├── mp_m_freemode_01_mp_m_january2016^task_diff_008_a_uni.ytd │ ├── mp_m_freemode_01_mp_m_january2016^task_diff_008_b_uni.ytd │ ├── mp_m_freemode_01_mp_m_january2016^task_diff_008_c_uni.ytd │ └── mp_m_freemode_01_mp_m_january2016^task_diff_008_d_uni.ytd └── [female] │ ├── mp_f_freemode_01_mp_f_january2016^task_008_u.ydd │ ├── mp_f_freemode_01_mp_f_january2016^task_diff_008_a_uni.ytd │ ├── mp_f_freemode_01_mp_f_january2016^task_diff_008_b_uni.ytd │ ├── mp_f_freemode_01_mp_f_january2016^task_diff_008_c_uni.ytd │ └── mp_f_freemode_01_mp_f_january2016^task_diff_008_d_uni.ytd ├── fxmanifest.lua ├── server.lua ├── README.md ├── config.lua └── client.lua /stream/[male]/mp_m_freemode_01_mp_m_january2016^task_008_u.ydd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[male]/mp_m_freemode_01_mp_m_january2016^task_008_u.ydd -------------------------------------------------------------------------------- /stream/[female]/mp_f_freemode_01_mp_f_january2016^task_008_u.ydd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[female]/mp_f_freemode_01_mp_f_january2016^task_008_u.ydd -------------------------------------------------------------------------------- /stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_a_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_a_uni.ytd -------------------------------------------------------------------------------- /stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_b_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_b_uni.ytd -------------------------------------------------------------------------------- /stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_c_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_c_uni.ytd -------------------------------------------------------------------------------- /stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_d_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[male]/mp_m_freemode_01_mp_m_january2016^task_diff_008_d_uni.ytd -------------------------------------------------------------------------------- /stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_a_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_a_uni.ytd -------------------------------------------------------------------------------- /stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_b_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_b_uni.ytd -------------------------------------------------------------------------------- /stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_c_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_c_uni.ytd -------------------------------------------------------------------------------- /stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_d_uni.ytd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/envSCRIPTS/dds-skyfall/HEAD/stream/[female]/mp_f_freemode_01_mp_f_january2016^task_diff_008_d_uni.ytd -------------------------------------------------------------------------------- /fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'adamant' 2 | 3 | name 'dds-skyfall' 4 | author 'daddyDUBZ' 5 | description 'Wingsuit for use with ox_inventory/ox_lib' 6 | 7 | game 'gta5' 8 | 9 | lua54 'yes' 10 | 11 | shared_scripts { 12 | '@ox_lib/init.lua', 13 | 'config.lua' 14 | } 15 | 16 | client_scripts { 17 | 'client.lua' 18 | } 19 | 20 | server_scripts { 21 | 'server.lua' 22 | } 23 | -------------------------------------------------------------------------------- /server.lua: -------------------------------------------------------------------------------- 1 | lib.addCommand('skyfall', { 2 | help = 'Skyfall (god)', 3 | restricted = "qbox.admin", 4 | }, function(source) 5 | TriggerClientEvent('dds-skyfall:AdminFall', source) 6 | end) 7 | 8 | lib.addCommand('packwingsuit', { 9 | help = 'Repack Wingsuit', 10 | 11 | }, function(source) 12 | TriggerClientEvent('dds-skyfall:client:RemoveWingsuit', source) 13 | end) 14 | 15 | lib.addCommand('resetwingsuit', { 16 | help = 'Pack Wingsuit Parachute', 17 | 18 | }, function(source) 19 | TriggerClientEvent('dds-skyfall:client:ResetWingsuit', source) 20 | end) 21 | 22 | lib.callback.register('dds-skyfall:ReturnWingsuit', function(source) 23 | item = Player(source).state.WingSuitType 24 | exports.ox_inventory:AddItem(source, item, 1, nil, nil, cb) 25 | TriggerClientEvent("illenium-appearance:client:reloadSkin", source) 26 | Player(source).state:set('WingSuitType', nil, true) 27 | return cb 28 | end) 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dds-skyfall 2 | Wingsuits for your FiveM server. A more realistic, and FREE implementation of wingsuits. 3 | 4 | # Discord for more releases and support [dDStudio] https://discord.gg/P9ZzdzYaqm 5 | 6 | # Instructions 7 | Deploy the items to ox_inventory data/items.lua. Use the item, and jump from somewhere high. Have fun! 8 | 9 | # Config 10 | Configure your desired outfit to change into when item is used. Wing suit webbing is included in stream folder as replacement vest. Blacklist in your respective character customization. 11 | 12 | # Admin Skyfall 13 | Admins can use the command /skyfall command to initiate skyfall with or without wingsuit wardrobe. 14 | 15 | # ox_inventory 16 | ["wingsuit"] = { 17 | label = "Vibrant Wingsuit", 18 | weight = 500, 19 | stack = false, 20 | close = true, 21 | description = "Fancy Wingsuit", 22 | consume = 1, 23 | client = { 24 | export = 'dds-skyfall.wingsuit', 25 | image = "", 26 | }, 27 | }, 28 | 29 | ["wingsuit2"] = { 30 | label = "Blackout Wingsuit", 31 | weight = 500, 32 | stack = false, 33 | close = true, 34 | description = "Fancy Wingsuit", 35 | consume = 1, 36 | client = { 37 | export = 'dds-skyfall.wingsuit2', 38 | image = "", 39 | }, 40 | }, 41 | -------------------------------------------------------------------------------- /config.lua: -------------------------------------------------------------------------------- 1 | Config = {} 2 | 3 | Config.WingsuitWardrobe = { 4 | Male = { 5 | outfitData = { 6 | ['t-shirt'] = {item = 15,texture = 0}, 7 | ['torso2'] ={item = 178,texture = 0}, 8 | ['decals'] = {item = 0, texutre = 0}, 9 | ['arms'] = {item = 17, texture = 0}, 10 | ['pants'] ={item = 77, texture = 0}, 11 | ['shoes'] = {item = 55, texture = 0}, 12 | ['vest'] = {item = 25, texture = 0}, 13 | ['bag'] = {item = 0, texture = 0}, 14 | ['mask'] = {item = 0, texture = 0}, 15 | ['hat'] = {item = 91, texture = 0}, 16 | } 17 | }, 18 | Female = { 19 | outfitData = { 20 | ['t-shirt'] = {item = 15,texture = 0}, 21 | ['torso2'] ={item = 180,texture = 0}, 22 | ['decals'] = {item = 0, texutre = 0}, 23 | ['arms'] = {item = 17, texture = 0}, 24 | ['pants'] ={item = 79, texture = 0}, 25 | ['shoes'] = {item = 58, texture = 0}, 26 | ['vest'] = {item = 27, texture = 0}, 27 | ['bag'] = {item = 0, texture = 0}, 28 | ['mask'] = {item = 0, texture = 0}, 29 | ['hat'] = {item = 90, texture = 0}, 30 | } 31 | } 32 | } 33 | 34 | Config.Wingsuit2Wardrobe = { 35 | Male = { 36 | outfitData = { 37 | ['t-shirt'] = {item = 15,texture = 0}, 38 | ['torso2'] ={item = 178,texture = 10}, 39 | ['decals'] = {item = 0, texutre = 0}, 40 | ['arms'] = {item = 17, texture = 0}, 41 | ['pants'] ={item = 77, texture = 10}, 42 | ['shoes'] = {item = 55, texture = 10}, 43 | ['vest'] = {item = 25, texture = 0}, 44 | ['bag'] = {item = 0, texture = 0}, 45 | ['mask'] = {item = 0, texture = 0}, 46 | ['hat'] = {item = 91, texture = 10}, 47 | } 48 | }, 49 | Female = { 50 | outfitData = { 51 | ['t-shirt'] = {item = 15,texture = 0}, 52 | ['torso2'] ={item = 180,texture = 10}, 53 | ['decals'] = {item = 0, texutre = 0}, 54 | ['arms'] = {item = 17, texture = 0}, 55 | ['pants'] ={item = 79, texture = 10}, 56 | ['shoes'] = {item = 58, texture = 10}, 57 | ['vest'] = {item = 27, texture = 0}, 58 | ['bag'] = {item = 0, texture = 0}, 59 | ['mask'] = {item = 0, texture = 0}, 60 | ['hat'] = {item = 90, texture = 10}, 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /client.lua: -------------------------------------------------------------------------------- 1 | local QBCore = exports['qbx-core']:GetCoreObject() 2 | local isSkyfall = false 3 | 4 | exports('wingsuit', function(data, slot) 5 | local item = 'wingsuit' 6 | exports.ox_inventory:useItem(data, function(data) 7 | if data then 8 | EquipParachuteAnim() 9 | if lib.progressBar({ 10 | duration = 2000, 11 | label = 'Preparing Suit', 12 | useWhileDead = false, 13 | canCancel = true, 14 | disable = { 15 | car = true, 16 | }, 17 | }) then 18 | ApplyWingSuit(item) lib.notify({description = 'Nice suit batman!'}) 19 | else 20 | lib.notify({title = 'There was an issue preparing your suit', type = 'error'}) 21 | end 22 | TaskPlayAnim(cache.ped, 'clothingshirt', 'exit', 8.0, 1.0, -1, 49, 0, false, false, false) 23 | end 24 | end) 25 | end) 26 | 27 | exports('wingsuit2', function(data, slot) 28 | local item = 'wingsuit2' 29 | exports.ox_inventory:useItem(data, function(data) 30 | if data then 31 | EquipParachuteAnim() 32 | if lib.progressBar({ 33 | duration = 2000, 34 | label = 'Preparing Suit', 35 | useWhileDead = false, 36 | canCancel = true, 37 | disable = { 38 | car = true, 39 | }, 40 | }) then 41 | ApplyWingSuit(item) lib.notify({description = 'Nice suit batman!'}) 42 | else 43 | lib.notify({title = 'There was an issue preparing your suit', type = 'error'}) 44 | end 45 | TaskPlayAnim(cache.ped, 'clothingshirt', 'exit', 8.0, 1.0, -1, 49, 0, false, false, false) 46 | end 47 | end) 48 | end) 49 | 50 | CreateThread(function() 51 | while true do 52 | local playerPed = PlayerPedId() 53 | local GetSuit = LocalPlayer.state.WingSuitType 54 | if GetSuit and not isSkyfall then 55 | if IsPedInParachuteFreeFall(playerPed) then --and IsControlJustReleased(0, 45) then 56 | isSkyfall = true 57 | lib.notify({title = 'Skyfall Engaged', type = 'success'}) 58 | 59 | SetPlayerInvincible(playerPed, true) 60 | SetEntityProofs(playerPed, true, true, true, true, true, false, 0, false) 61 | 62 | while true do 63 | if isSkyfall then 64 | local parachutestate = GetPedParachuteState(playerPed) 65 | if parachutestate <= 0 and not (HasEntityCollidedWithAnything(playerPed) or IsPedSwimming(playerPed)) then 66 | ApplyForceToEntity(playerPed, true, 0.0, 200.0, 2.5, 0.0, 0.0, 0.0, false, true, false, false, false, true) 67 | else 68 | isSkyfall = false 69 | end 70 | else 71 | break 72 | end 73 | 74 | Wait(0) 75 | end 76 | 77 | Wait(3000) 78 | 79 | RemoveWeaponFromPed(playerPed, GetHashKey('gadget_parachute')) 80 | SetPlayerInvincible(playerPed, false) 81 | SetEntityProofs(playerPed, false, false, false, false, false, false, 0, false) 82 | end 83 | end 84 | Wait(1) 85 | end 86 | end) 87 | 88 | RegisterNetEvent("dds-skyfall:client:ResetWingsuit", function() 89 | local playerPed = PlayerPedId() 90 | local GetSuit = LocalPlayer.state.WingSuitType 91 | if not isSkyfall then 92 | if GetSuit then 93 | EquipParachuteAnim() 94 | if lib.progressBar({ 95 | duration = 2000, 96 | label = 'Resetting Suit', 97 | useWhileDead = false, 98 | canCancel = true, 99 | disable = { 100 | car = true, 101 | }, 102 | }) then 103 | GiveWeaponToPed(playerPed, GetHashKey('gadget_parachute'), 1, true, true) 104 | else 105 | lib.notify({title = 'There was an issue resetting your suit', type = 'error'}) 106 | end 107 | TaskPlayAnim(cache.ped, 'clothingshirt', 'exit', 8.0, 1.0, -1, 49, 0, false, false, false) 108 | end 109 | end 110 | end) 111 | 112 | RegisterNetEvent("dds-skyfall:client:RemoveWingsuit", function() 113 | local playerPed = PlayerPedId() 114 | local GetSuit = LocalPlayer.state.WingSuitType 115 | if not isSkyfall then 116 | if GetSuit then 117 | EquipParachuteAnim() 118 | if lib.progressBar({ 119 | duration = 2000, 120 | label = 'Removing Suit', 121 | useWhileDead = false, 122 | canCancel = true, 123 | disable = { 124 | car = true, 125 | }, 126 | }) then 127 | returnsuit = lib.callback.await('dds-skyfall:ReturnWingsuit') 128 | if returnsuit then 129 | RemoveWeaponFromPed(playerPed, GetHashKey('gadget_parachute')) 130 | lib.notify({title = 'Wingsuit Packed', type = 'success'}) 131 | end 132 | else 133 | lib.notify({title = 'There was an issue packing your suit', type = 'error'}) 134 | end 135 | TaskPlayAnim(cache.ped, 'clothingshirt', 'exit', 8.0, 1.0, -1, 49, 0, false, false, false) 136 | end 137 | end 138 | end) 139 | 140 | RegisterNetEvent("dds-skyfall:AdminFall", function() 141 | if not isSkyfall then 142 | isSkyfall = true 143 | 144 | CreateThread(function() 145 | local playerPed = PlayerPedId() 146 | local playerPos = GetEntityCoords(playerPed) 147 | 148 | GiveWeaponToPed(playerPed, GetHashKey('gadget_parachute'), 1, true, true) 149 | 150 | DoScreenFadeOut(3000) 151 | 152 | while not IsScreenFadedOut() do 153 | Wait(0) 154 | end 155 | 156 | SetEntityCoords(playerPed, playerPos.x, playerPos.y, playerPos.z + 500.0) 157 | 158 | DoScreenFadeIn(2000) 159 | 160 | Wait(2000) 161 | 162 | lib.notify({title = 'Skyfall Engaged', type = 'success'}) 163 | 164 | SetPlayerInvincible(playerPed, true) 165 | SetEntityProofs(playerPed, true, true, true, true, true, false, 0, false) 166 | 167 | while true do 168 | if isSkyfall then 169 | local parachutestate = GetPedParachuteState(playerPed) 170 | if parachutestate <= 0 and not (HasEntityCollidedWithAnything(playerPed) or IsPedSwimming(playerPed)) then 171 | ApplyForceToEntity(playerPed, true, 0.0, 200.0, 2.5, 0.0, 0.0, 0.0, false, true, false, false, false, true) 172 | else 173 | isSkyfall = false 174 | end 175 | else 176 | 177 | break 178 | end 179 | 180 | Wait(0) 181 | end 182 | 183 | RemoveWeaponFromPed(playerPed, GetHashKey('gadget_parachute')) 184 | 185 | Wait(3000) 186 | 187 | SetPlayerInvincible(playerPed, false) 188 | SetEntityProofs(playerPed, false, false, false, false, false, false, 0, false) 189 | end) 190 | end 191 | end) 192 | 193 | function EquipParachuteAnim() 194 | local hasLoaded = lib.requestAnimDict('clothingshirt') 195 | if not hasLoaded then return end 196 | TaskPlayAnim(cache.ped, 'clothingshirt', 'try_shirt_positive_d', 8.0, 1.0, -1, 49, 0, false, false, false) 197 | end 198 | 199 | function ApplyWingSuit(data) 200 | 201 | local playerPed = PlayerPedId() 202 | local Player = QBCore.Functions.GetPlayerData() 203 | if DoesEntityExist(playerPed) then 204 | if data == 'wingsuit' then 205 | DataMale = Config.WingsuitWardrobe.Male 206 | DataFemale = Config.WingsuitWardrobe.Female 207 | else 208 | if data == 'wingsuit2' then 209 | DataMale = Config.Wingsuit2Wardrobe.Male 210 | DataFemale = Config.Wingsuit2Wardrobe.Female 211 | end 212 | end 213 | 214 | if Player.charinfo.gender == 0 then 215 | TriggerEvent('qb-clothing:client:loadOutfit', DataMale) --Change Here the Clothing resource 216 | else 217 | TriggerEvent('qb-clothing:client:loadOutfit', DataFemale) --Change Here the Clothing resource 218 | end 219 | 220 | SetPedArmour(playerPed, 0) 221 | ClearPedBloodDamage(playerPed) 222 | ResetPedVisibleDamage(playerPed) 223 | ClearPedLastWeaponDamage(playerPed) 224 | ResetPedMovementClipset(playerPed, 0) 225 | 226 | GiveWeaponToPed(playerPed, GetHashKey('gadget_parachute'), 1, true, true) 227 | 228 | LocalPlayer.state:set('WingSuitType', data, true) 229 | end 230 | end --------------------------------------------------------------------------------