Guest User

Untitled

a guest
Dec 18th, 2019
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.14 KB | None | 0 0
  1. ESX = nil
  2. PlayerData = nil
  3.  
  4. Citizen.CreateThread(function()
  5.     while ESX == nil do
  6.         TriggerEvent('esx:getSharedObject', function(obj)
  7.             ESX = obj
  8.         end)
  9.         Citizen.Wait(0)
  10.     end
  11.  
  12.     while ESX.GetPlayerData().job == nil do
  13.         Citizen.Wait(10)
  14.     end
  15.  
  16.     PlayerData = ESX.GetPlayerData()
  17. end)
  18.  
  19. --[[
  20.     Usage:
  21.         All optional
  22.         menu = {
  23.             type = 'default'
  24.             title = 'title',
  25.             name = 'name',
  26.             align = 'bottom-right'
  27.             options = {
  28.                 {
  29.                     label = 'label',
  30.                     action = function(action)
  31.                 }
  32.             },
  33.             close = function()
  34.         }
  35.         TriggerEvent('disc-base:openMenu', menu)
  36. ]]
  37.  
  38. RegisterNetEvent('disc-base:openMenu')
  39. AddEventHandler('disc-base:openMenu', function(menu)
  40.  
  41.     local type = getOrElse(menu.type, 'default')
  42.  
  43.     if type == 'default' then
  44.         OpenDefaultMenu(menu)
  45.     elseif type == 'dialog' then
  46.         OpenDialogMenu(menu)
  47.     elseif type == 'list' then
  48.         OpenListMenu(menu)
  49.     elseif type == 'confirmation' then
  50.         OpenConfirmationMenu(menu)
  51.     end
  52. end)
  53.  
  54. function OpenDefaultMenu(menu)
  55.  
  56.     local emptyMenu = { { label = 'Empty Menu', action = nil } }
  57.  
  58.     local elements = {}
  59.     local actions = {}
  60.  
  61.     for k, v in pairs(getOrElse(menu.options, emptyMenu)) do
  62.         local key = getOrElse(v.value, k)
  63.         table.insert(elements, { label = v.label, value = key })
  64.         actions[key] = v.action
  65.     end
  66.  
  67.     if menu.onOpen then
  68.         menu.onOpen()
  69.     end
  70.  
  71.     ESX.UI.Menu.Open(getOrElse(menu.type, 'default'), GetCurrentResourceName(), getOrElse(menu.name, getOrElse(menu.title, 'default-menu-name')), {
  72.         title = getOrElse(menu.title, 'default-menu-title'),
  73.         align = getOrElse(menu.align, 'bottom-right'),
  74.         elements = getOrElse(elements, emptyMenu)
  75.     }, function(data, m)
  76.         if getOrElse(actions[data.current.value], nil) then
  77.             actions[data.current.value](data.current, m)
  78.         else
  79.             exports['mythic_notify']:SendAlert('error', 'This menu has no action!')
  80.         end
  81.     end, function(data, m)
  82.         if getOrElse(menu.close, nil) then
  83.             menu.close()
  84.         end
  85.         m.close()
  86.     end, function(data, m)
  87.         if menu.onChange then
  88.             menu.onChange(data, m)
  89.         end
  90.     end)
  91. end
  92.  
  93. function OpenDialogMenu(menu)
  94.     ESX.UI.Menu.Open(getOrElse(menu.type, 'dialog'), GetCurrentResourceName(), getOrElse(menu.name, getOrElse(menu.title, 'default-menu-name')), {
  95.         title = getOrElse(menu.title, 'default-menu-title'),
  96.         align = getOrElse(menu.align, 'middle')
  97.     },
  98.             function(data, m)
  99.                 if getOrElse(menu.action, nil) then
  100.                     menu.action(data.value)
  101.                     m.close()
  102.                 else
  103.                     exports['mythic_notify']:SendAlert('error', 'This menu has no action!')
  104.                 end
  105.             end,
  106.             function(data, m)
  107.                 if getOrElse(menu.close, nil) then
  108.                     menu.close()
  109.                 end
  110.                 m.close()
  111.             end)
  112. end
  113.  
  114. function OpenListMenu(menu)
  115.  
  116.     local elements = {
  117.         head = menu.head or {},
  118.         rows = menu.rows or {}
  119.     }
  120.  
  121.     for k, v in pairs(menu.options) do
  122.         local cols = {}
  123.         for _, v2 in pairs(v) do
  124.             table.insert(cols, v2)
  125.         end
  126.         table.insert(elements.rows, {
  127.             data = v,
  128.             cols = cols
  129.         })
  130.     end
  131.  
  132.     ESX.UI.Menu.Open('list', GetCurrentResourceName(), menu.name or 'default_list_menu', elements, function(data, menu)
  133.         ESX.UI.Menu.CloseAll()
  134.     end, function(data, menu)
  135.         ESX.UI.Menu.CloseAll()
  136.     end, function(data, menu)
  137.         ESX.UI.Menu.CloseAll()
  138.     end, function(data, menu)
  139.         ESX.UI.Menu.CloseAll()
  140.     end)
  141. end
  142.  
  143. function OpenConfirmationMenu(menu)
  144.     local options = {
  145.         { label = 'Yes', action = menu.confirmation },
  146.         { label = 'No', action = menu.denial },
  147.     }
  148.  
  149.     local confirmation = {
  150.         title = 'Confirmation',
  151.         name = 'confirmation_' .. menu.name,
  152.         options = options
  153.     }
  154.  
  155.     OpenDefaultMenu(confirmation)
  156. end
Add Comment
Please, Sign In to add comment