286 lines
		
	
	
	
		
			9.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
	
		
			9.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local QBCore = exports['qb-core']:GetCoreObject()
 | |
| local PlayerGang = QBCore.Functions.GetPlayerData().gang
 | |
| local shownGangMenu = false
 | |
| local DynamicMenuItems = {}
 | |
| 
 | |
| -- UTIL
 | |
| local function CloseMenuFullGang()
 | |
|     exports['qb-menu']:closeMenu()
 | |
|     exports['qb-core']:HideText()
 | |
|     shownGangMenu = false
 | |
| end
 | |
| 
 | |
| --//Events
 | |
| AddEventHandler('onResourceStart', function(resource) --if you restart the resource
 | |
|     if resource == GetCurrentResourceName() then
 | |
|         Wait(200)
 | |
|         PlayerGang = QBCore.Functions.GetPlayerData().gang
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
 | |
|     PlayerGang = QBCore.Functions.GetPlayerData().gang
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('QBCore:Client:OnGangUpdate', function(InfoGang)
 | |
|     PlayerGang = InfoGang
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-gangmenu:client:Warbobe', function()
 | |
|     TriggerEvent('qb-clothing:client:openOutfitMenu')
 | |
| end)
 | |
| 
 | |
| local function AddGangMenuItem(data, id)
 | |
|     local menuID = id or (#DynamicMenuItems + 1)
 | |
|     DynamicMenuItems[menuID] = deepcopy(data)
 | |
|     return menuID
 | |
| end
 | |
| 
 | |
| exports('AddGangMenuItem', AddGangMenuItem)
 | |
| 
 | |
| local function RemoveGangMenuItem(id)
 | |
|     DynamicMenuItems[id] = nil
 | |
| end
 | |
| 
 | |
| exports('RemoveGangMenuItem', RemoveGangMenuItem)
 | |
| 
 | |
| RegisterNetEvent('qb-gangmenu:client:OpenMenu', function()
 | |
|     shownGangMenu = true
 | |
|     local gangMenu = {
 | |
|         {
 | |
|             header = Lang:t('headersgang.bsm') .. string.upper(PlayerGang.label),
 | |
|             icon = 'fa-solid fa-circle-info',
 | |
|             isMenuHeader = true,
 | |
|         },
 | |
|         {
 | |
|             header = Lang:t('bodygang.manage'),
 | |
|             txt = Lang:t('bodygang.managed'),
 | |
|             icon = 'fa-solid fa-list',
 | |
|             params = {
 | |
|                 event = 'qb-gangmenu:client:ManageGang',
 | |
|             }
 | |
|         },
 | |
|         {
 | |
|             header = Lang:t('bodygang.hire'),
 | |
|             txt = Lang:t('bodygang.hired'),
 | |
|             icon = 'fa-solid fa-hand-holding',
 | |
|             params = {
 | |
|                 event = 'qb-gangmenu:client:HireMembers',
 | |
|             }
 | |
|         },
 | |
|         {
 | |
|             header = Lang:t('bodygang.storage'),
 | |
|             txt = Lang:t('bodygang.storaged'),
 | |
|             icon = 'fa-solid fa-box-open',
 | |
|             params = {
 | |
|                 isServer = true,
 | |
|                 event = 'qb-gangmenu:server:stash',
 | |
|             }
 | |
|         },
 | |
|         {
 | |
|             header = Lang:t('bodygang.outfits'),
 | |
|             txt = Lang:t('bodygang.outfitsd'),
 | |
|             icon = 'fa-solid fa-shirt',
 | |
|             params = {
 | |
|                 event = 'qb-gangmenu:client:Warbobe',
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     for _, v in pairs(DynamicMenuItems) do
 | |
|         gangMenu[#gangMenu + 1] = v
 | |
|     end
 | |
| 
 | |
|     gangMenu[#gangMenu + 1] = {
 | |
|         header = Lang:t('bodygang.exit'),
 | |
|         icon = 'fa-solid fa-angle-left',
 | |
|         params = {
 | |
|             event = 'qb-menu:closeMenu',
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     exports['qb-menu']:openMenu(gangMenu)
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-gangmenu:client:ManageGang', function()
 | |
|     local GangMembersMenu = {
 | |
|         {
 | |
|             header = Lang:t('bodygang.mempl') .. string.upper(PlayerGang.label),
 | |
|             icon = 'fa-solid fa-circle-info',
 | |
|             isMenuHeader = true,
 | |
|         },
 | |
|     }
 | |
|     QBCore.Functions.TriggerCallback('qb-gangmenu:server:GetEmployees', function(cb)
 | |
|         for _, v in pairs(cb) do
 | |
|             GangMembersMenu[#GangMembersMenu + 1] = {
 | |
|                 header = v.name,
 | |
|                 txt = v.grade.name,
 | |
|                 icon = 'fa-solid fa-circle-user',
 | |
|                 params = {
 | |
|                     event = 'qb-gangmenu:lient:ManageMember',
 | |
|                     args = {
 | |
|                         player = v,
 | |
|                         work = PlayerGang
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         end
 | |
|         GangMembersMenu[#GangMembersMenu + 1] = {
 | |
|             header = Lang:t('bodygang.return'),
 | |
|             icon = 'fa-solid fa-angle-left',
 | |
|             params = {
 | |
|                 event = 'qb-gangmenu:client:OpenMenu',
 | |
|             }
 | |
|         }
 | |
|         exports['qb-menu']:openMenu(GangMembersMenu)
 | |
|     end, PlayerGang.name)
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-gangmenu:lient:ManageMember', function(data)
 | |
|     local MemberMenu = {
 | |
|         {
 | |
|             header = Lang:t('bodygang.mngpl') .. data.player.name .. ' - ' .. string.upper(PlayerGang.label),
 | |
|             isMenuHeader = true,
 | |
|             icon = 'fa-solid fa-circle-info',
 | |
|         },
 | |
|     }
 | |
|     for k, v in pairs(QBCore.Shared.Gangs[data.work.name].grades) do
 | |
|         MemberMenu[#MemberMenu + 1] = {
 | |
|             header = v.name,
 | |
|             txt = Lang:t('bodygang.grade') .. k,
 | |
|             params = {
 | |
|                 isServer = true,
 | |
|                 event = 'qb-gangmenu:server:GradeUpdate',
 | |
|                 icon = 'fa-solid fa-file-pen',
 | |
|                 args = {
 | |
|                     cid = data.player.empSource,
 | |
|                     grade = tonumber(k),
 | |
|                     gradename = v.name
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     end
 | |
|     MemberMenu[#MemberMenu + 1] = {
 | |
|         header = Lang:t('bodygang.fireemp'),
 | |
|         icon = 'fa-solid fa-user-large-slash',
 | |
|         params = {
 | |
|             isServer = true,
 | |
|             event = 'qb-gangmenu:server:FireMember',
 | |
|             args = data.player.empSource
 | |
|         }
 | |
|     }
 | |
|     MemberMenu[#MemberMenu + 1] = {
 | |
|         header = Lang:t('bodygang.return'),
 | |
|         icon = 'fa-solid fa-angle-left',
 | |
|         params = {
 | |
|             event = 'qb-gangmenu:client:ManageGang',
 | |
|         }
 | |
|     }
 | |
|     exports['qb-menu']:openMenu(MemberMenu)
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-gangmenu:client:HireMembers', function()
 | |
|     local HireMembersMenu = {
 | |
|         {
 | |
|             header = Lang:t('bodygang.hireemp') .. string.upper(PlayerGang.label),
 | |
|             isMenuHeader = true,
 | |
|             icon = 'fa-solid fa-circle-info',
 | |
|         },
 | |
|     }
 | |
|     QBCore.Functions.TriggerCallback('qb-gangmenu:getplayers', function(players)
 | |
|         for _, v in pairs(players) do
 | |
|             if v and v ~= PlayerId() then
 | |
|                 HireMembersMenu[#HireMembersMenu + 1] = {
 | |
|                     header = v.name,
 | |
|                     txt = Lang:t('bodygang.cid') .. v.citizenid .. ' - ID: ' .. v.sourceplayer,
 | |
|                     icon = 'fa-solid fa-user-check',
 | |
|                     params = {
 | |
|                         isServer = true,
 | |
|                         event = 'qb-gangmenu:server:HireMember',
 | |
|                         args = v.sourceplayer
 | |
|                     }
 | |
|                 }
 | |
|             end
 | |
|         end
 | |
|         HireMembersMenu[#HireMembersMenu + 1] = {
 | |
|             header = Lang:t('bodygang.return'),
 | |
|             icon = 'fa-solid fa-angle-left',
 | |
|             params = {
 | |
|                 event = 'qb-gangmenu:client:OpenMenu',
 | |
|             }
 | |
|         }
 | |
|         exports['qb-menu']:openMenu(HireMembersMenu)
 | |
|     end)
 | |
| end)
 | |
| 
 | |
| -- MAIN THREAD
 | |
| 
 | |
| CreateThread(function()
 | |
|     if Config.UseTarget then
 | |
|         for gang, zones in pairs(Config.GangMenus) do
 | |
|             for index, coords in ipairs(zones) do
 | |
|                 local zoneName = gang .. '_gangmenu_' .. index
 | |
|                 exports['qb-target']:AddCircleZone(zoneName, coords, 0.5, {
 | |
|                     name = zoneName,
 | |
|                     debugPoly = false,
 | |
|                     useZ = true
 | |
|                 }, {
 | |
|                     options = {
 | |
|                         {
 | |
|                             type = 'client',
 | |
|                             event = 'qb-gangmenu:client:OpenMenu',
 | |
|                             icon = 'fas fa-sign-in-alt',
 | |
|                             label = Lang:t('targetgang.label'),
 | |
|                             canInteract = function() return gang == PlayerGang.name and PlayerGang.isboss end,
 | |
|                         },
 | |
|                     },
 | |
|                     distance = 2.5
 | |
|                 })
 | |
|             end
 | |
|         end
 | |
|     else
 | |
|         while true do
 | |
|             local wait = 2500
 | |
|             local pos = GetEntityCoords(PlayerPedId())
 | |
|             local inRangeGang = false
 | |
|             local nearGangmenu = false
 | |
|             if PlayerGang then
 | |
|                 wait = 0
 | |
|                 for k, menus in pairs(Config.GangMenus) do
 | |
|                     for _, coords in ipairs(menus) do
 | |
|                         if k == PlayerGang.name and PlayerGang.isboss then
 | |
|                             if #(pos - coords) < 5.0 then
 | |
|                                 inRangeGang = true
 | |
|                                 if #(pos - coords) <= 1.5 then
 | |
|                                     nearGangmenu = true
 | |
|                                     if not shownGangMenu then
 | |
|                                         exports['qb-core']:DrawText(Lang:t('drawtextgang.label'), 'left')
 | |
|                                         shownGangMenu = true
 | |
|                                     end
 | |
| 
 | |
|                                     if IsControlJustReleased(0, 38) then
 | |
|                                         exports['qb-core']:HideText()
 | |
|                                         TriggerEvent('qb-gangmenu:client:OpenMenu')
 | |
|                                     end
 | |
|                                 end
 | |
| 
 | |
|                                 if not nearGangmenu and shownGangMenu then
 | |
|                                     CloseMenuFullGang()
 | |
|                                     shownGangMenu = false
 | |
|                                 end
 | |
|                             end
 | |
|                         end
 | |
|                     end
 | |
|                 end
 | |
|                 if not inRangeGang then
 | |
|                     Wait(1500)
 | |
|                     if shownGangMenu then
 | |
|                         CloseMenuFullGang()
 | |
|                         shownGangMenu = false
 | |
|                     end
 | |
|                 end
 | |
|             end
 | |
|             Wait(wait)
 | |
|         end
 | |
|     end
 | |
| end)
 | 
