Advertisement
RyanUSNS

CITsupport - Client

May 24th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.75 KB | None | 0 0
  1. local tickets = {}
  2. local currentTicket = nil
  3.  
  4. function createPanel()
  5.     local screenW, screenH = guiGetScreenSize()
  6.     --Ticket Panel.
  7.     CreateTicketPanel = guiCreateWindow((screenW - 534) / 2, (screenH - 135) / 2, 534, 135, "New ticket", false)
  8.     guiWindowSetSizable(CreateTicketPanel, false)
  9.     guiSetVisible(CreateTicketPanel, false)
  10.     CreateTicketButton = guiCreateButton(10, 93, 114, 33, "Open Ticket", false, CreateTicketPanel)
  11.     guiSetProperty(CreateTicketButton, "NormalTextColour", "FFAAAAAA")
  12.     TicketNameBox = guiCreateEdit(88, 22, 437, 28, "", false, CreateTicketPanel)
  13.     TicketNameLable = guiCreateLabel(10, 27, 78, 18, "Ticket Name:", false, CreateTicketPanel)
  14.     guiLabelSetColor(TicketNameLable, 254, 0, 0)
  15.     HelpTextLable = guiCreateLabel(10, 60, 78, 18, "Question:", false, CreateTicketPanel)
  16.     guiLabelSetColor(HelpTextLable, 254, 0, 0)
  17.     HelpTextBox = guiCreateEdit(88, 55, 437, 28, "", false, CreateTicketPanel)
  18.     CloseTicketPanel = guiCreateButton(134, 93, 114, 33, "Close", false, CreateTicketPanel)
  19.     guiSetProperty(CloseTicketPanel, "NormalTextColour", "FFAAAAAA")
  20.     --Support Panel.
  21.     SupportPanel = guiCreateWindow((screenW - 846) / 2, (screenH - 576) / 2, 846, 576, "CIT - Support Panel", false)
  22.     guiWindowSetSizable(SupportPanel, false)
  23.     guiSetVisible(SupportPanel, false)
  24.     ActiveTicketList = guiCreateGridList(10, 32, 202, 495, false, SupportPanel)
  25.     guiGridListAddColumn(ActiveTicketList, "Active Tickets", 0.9)
  26.     MessageGridList = guiCreateGridList(214, 32, 622, 495, false, SupportPanel)
  27.     guiGridListAddColumn(MessageGridList, "(Name)", 0.3)
  28.     guiGridListAddColumn(MessageGridList, "(Message)", 0.7)
  29.     SendMessageBox = guiCreateEdit(214, 528, 506, 38, "", false, SupportPanel)
  30.     MarkTicketSolved = guiCreateButton(725, 529, 106, 37, "Solved", false, SupportPanel)
  31.     guiSetProperty(MarkTicketSolved, "NormalTextColour", "FFFFFEFE")
  32.     CloseSupportPanel = guiCreateButton(156, 531, 56, 35, "Close", false, SupportPanel)
  33.     guiSetProperty(CloseSupportPanel, "NormalTextColour", "FF1DE726")
  34.     OpenNewTicket = guiCreateButton(10, 531, 83, 35, "Open a Ticket", false, SupportPanel)
  35.     guiSetProperty(OpenNewTicket, "NormalTextColour", "FFFE0000")
  36.     DeleteTicket = guiCreateButton(97, 531, 53, 35, "Delete", false, SupportPanel)
  37.     guiSetProperty(DeleteTicket, "NormalTextColour", "FFD2C100")
  38.     --JSON Panel To add Question and Answers.
  39.     AIDatabasePanel = guiCreateWindow((screenW - 775) / 2, (screenH - 216) / 2, 775, 216, "CIT - AI Managment", false)
  40.     guiWindowSetSizable(AIDatabasePanel, false)
  41.     guiSetVisible(AIDatabasePanel, false)
  42.     QuestionLable = guiCreateLabel(27, 57, 139, 36, "Question:", false, AIDatabasePanel)
  43.     local font0_EmblemaOne = guiCreateFont(":CITsupport/fonts/EmblemaOne.ttf", 18)
  44.     guiSetFont(QuestionLable, font0_EmblemaOne)
  45.     QuestionTextBox = guiCreateEdit(176, 55, 543, 38, "", false, AIDatabasePanel)
  46.     AnswerLable = guiCreateLabel(27, 124, 139, 38, "Answer:", false, AIDatabasePanel)
  47.     guiSetFont(AnswerLable, font0_EmblemaOne)
  48.     AnswerTextBox = guiCreateEdit(176, 124, 543, 38, "", false, AIDatabasePanel)
  49.     AddToJSONButton = guiCreateButton(248, 172, 272, 32, "Add", false, AIDatabasePanel)
  50.     guiSetProperty(AddToJSONButton, "NormalTextColour", "FFAAAAAA")
  51.     guiSetFont(AddToJSONButton, font0_EmblemaOne)
  52.     CloseAIPanelButton = guiCreateButton(749, 187, 16, 19, "C", false, AIDatabasePanel)
  53.     guiSetProperty(CloseAIPanelButton, "NormalTextColour", "FFAAAAAA")
  54.     BotNameLable = guiCreateLabel(42, 23, 85, 24, "[CIT]Doogle:", false, AIDatabasePanel)
  55.     guiSetFont(BotNameLable, "clear-normal")
  56.     guiLabelSetColor(BotNameLable, 255, 0, 0)
  57.     BotSayLable = guiCreateLabel(127, 23, 624, 23, "", false, AIDatabasePanel)
  58.     guiSetFont(BotSayLable, "clear-normal")
  59.     guiLabelSetColor(BotSayLable, 30, 224, 48)    
  60. end
  61.  
  62. ---Startup & Admin Stuff
  63. function OpenSupportPanel()
  64.             guiSetVisible(SupportPanel, not guiGetVisible(SupportPanel))
  65.             showCursor(guiGetVisible(SupportPanel))
  66. end
  67. addEvent("OnPlayerOpenGUI", true)
  68. addEventHandler("OnPlayerOpenGUI", root, OpenSupportPanel)
  69.  
  70. function OpenAIPanel()
  71.             guiSetVisible(AIDatabasePanel, not guiGetVisible(AIDatabasePanel))
  72.             showCursor(guiGetVisible(AIDatabasePanel))
  73. end
  74. addEvent("OnPlayerOpenAIGUI", true)
  75. addEventHandler("OnPlayerOpenAIGUI", root, OpenAIPanel)
  76.  
  77. --Close Buttons
  78. function CloseSupGUI(button)
  79.     if (button == "left") then
  80.         guiSetVisible(SupportPanel, false)
  81.         guiSetVisible(CreateTicketPanel, false)
  82.         showCursor(false)
  83.     end
  84. end
  85. addEventHandler("onClientGUIClick", CloseSupportPanel, CloseSupGUI, false)
  86.      
  87. function CloseTCreateGUI(button)
  88.     if (button == "left") then
  89.         guiSetVisible(CreateTicketPanel, false)
  90.     end
  91. end
  92. addEventHandler("onClientGUIClick", CloseTicketPanel, CloseTCreateGUI, false)
  93.  
  94. function CloseAIGUI(button)
  95.     if (button == "left") then
  96.         guiSetVisible(AIDatabasePanel, false)
  97.         showCursor(false)
  98.     end
  99. end
  100. addEventHandler("onClientGUIClick", CloseAIPanelButton, CloseAIGUI, false)
  101.  
  102. --Ticket Panel
  103. function OpenTicketGUI(button)
  104.     if (button == "left") then
  105.         guiSetVisible(CreateTicketPanel, not guiGetVisible(CreateTicketPanel))
  106.             guiBringToFront(CreateTicketPanel)
  107.     end
  108. end
  109. addEventHandler("onClientGUIClick", OpenNewTicket, OpenTicketGUI, false)
  110.  
  111.  
  112. --Send new ticket to server
  113. function CreateTicketForPlayer()
  114.     local plr = localPlayer
  115.     local ticketName = guiGetText(TicketNameBox)
  116.     local plrName = getPlayerName(plr)
  117.     local helpText = guiGetText(HelpTextBox)
  118.  
  119.     if (#ticketName == 0 or #helpText == 0) then
  120.         outputChatBox("Please add the ticket name or the question.", 255, 0, 0, false)
  121.         return false
  122.     elseif (#ticketName >= 10) then
  123.         outputChatBox("Ticket Name could not be more than 10 letters!", 255, 0, 0, false)
  124.         return false
  125.     end
  126.     --Ticket Structure
  127.     local ticketId = getTickCount().."_"..plrName
  128.     local ticket = {ticketId, ticketName, plrName, {{getTickCount(), plrName, helpText}}}
  129.         --Send the message to server
  130.         triggerServerEvent("addTicket", resourceRoot, ticket)
  131.         guiSetVisible(CreateTicketPanel, false) -- Hide the create ticket GUI
  132.         --Set the current selected ticketId
  133.         currentTicket = ticketId
  134.         outputChatBox("#B266FF(Support) #FFFFFF"..plrName..": "..helpText, 255, 255, 255, true)
  135.         guiSetText(TicketNameBox, "")
  136.         guiSetText(HelpTextBox, "")
  137. end
  138. addEventHandler("onClientGUIClick", CreateTicketButton, CreateTicketForPlayer, false)
  139.  
  140. --Find an existing open ticket by player
  141. function FindPlayerOpenTicket()
  142.     local plr = localPlayer
  143.     local plrName = getPlayerName(plr)
  144.  
  145.         for k, v in pairs(tickets) do
  146.             if (v[3] == plrName) then
  147.                 return v
  148.             end
  149.         end
  150.     return false
  151. end
  152.  
  153. ---Create new ticket using command
  154. function AddTicketConsole(commandName, ...)
  155.     local plr = localPlayer
  156.     local ticketName = "Help Me!"
  157.     local plrName = getPlayerName(plr)
  158.     local helpText = table.concat({...}, " ")
  159.     local helpText = string.gsub(helpText, "#%x%x%x%x%x%x", "")
  160.  
  161.     if (#ticketName == 0 or #helpText == 0) then
  162.         outputChatBox("Usage: /sup <message>", 255, 0, 0, false)
  163.         return false
  164.     end
  165.  
  166.     local foundPlayerTicket = FindPlayerOpenTicket()
  167.         if (foundPlayerTicket) then
  168.  
  169.             local ticketId = foundPlayerTicket[1]
  170.             local message = {ticketId, {getTickCount(), plrName, helpText}}
  171.             triggerServerEvent("sendMessage", resourceRoot, message) --Send the message to server
  172.             outputChatBox("#B266FF(Support) #FFFFFF"..plrName..": "..helpText, 255, 255, 255, true)
  173.         else
  174.                 local ticketId = getTickCount().."_"..plrName
  175.                 local ticket = {ticketId, ticketName, plrName, {{getTickCount(), plrName, helpText}}}
  176.                 triggerServerEvent("addTicket", resourceRoot, ticket) --Send the message to server
  177.                 outputChatBox("#B266FF(Support) #FFFFFF"..plrName..": "..helpText, 255, 255, 255, true)
  178.         end
  179. end
  180. addCommandHandler("sup", AddTicketConsole)
  181.  
  182. --Get tickets list from server
  183. --Request
  184. function GetTickets()
  185.     triggerServerEvent("getTickets", resourceRoot)
  186. end
  187. addEventHandler("onClientResourceStart", resourceRoot, GetTickets)
  188. --Receive
  189.  
  190. --Sort list according to time
  191. function LoadTickets(list)
  192.     tickets = list
  193.     guiGridListClear(ActiveTicketList)
  194.  
  195.     local tkeys = {}
  196.     for k in pairs(tickets) do table.insert(tkeys, k) end
  197.     table.sort(tkeys)
  198.  
  199.     for i, k in ipairs(tkeys) do
  200.     local v = tickets[k]
  201.     local ticketName = v[2]
  202.     local plrName = v[3]
  203.     local row = guiGridListAddRow(ActiveTicketList, ticketName.."  -  "..plrName)
  204.         guiGridListSetItemData(ActiveTicketList, row, 1, v[1])
  205.             if (v[5] == 1) then --Green color if solved, i.e. 5th index of ticketinfo set as 1
  206.                 guiGridListSetItemColor(ActiveTicketList, row, 1, 0, 255, 0)
  207.             end
  208.  
  209.     if (currentTicket ~= nil and v[1] == currentTicket) then
  210.         guiGridListSetSelectedItem(ActiveTicketList, row, 1)
  211.         GetTicket()
  212.     end
  213.     end
  214. end
  215. addEvent("loadTickets", true)
  216. addEventHandler("loadTickets", resourceRoot, LoadTickets)
  217.  
  218. --Delete ticket
  219. function DeletePlrTicket()
  220.     local selectedRow, selectedCol = guiGridListGetSelectedItem(ActiveTicketList)
  221.     local ticketId = guiGridListGetItemData(ActiveTicketList, selectedRow, 1)
  222.     local ticket = tickets[ticketId]
  223.         triggerServerEvent("delTicket", resourceRoot, ticket)
  224. end
  225. addEventHandler("onClientGUIClick", DeleteTicket, DeletePlrTicket, false)
  226.  
  227. --Get messages of one ticket from server
  228. --Request
  229. function GetTicket()
  230.     local selectedRow, selectedCol = guiGridListGetSelectedItem(ActiveTicketList)
  231.     local ticketId = guiGridListGetItemData(ActiveTicketList, selectedRow, 1)
  232.     triggerServerEvent("getTicket", resourceRoot, ticketId)
  233.  
  234.     currentTicket = ticketId ----Set the current selected ticketId----
  235. end
  236. addEventHandler("onClientGUIClick", ActiveTicketList, GetTicket, false)
  237.  
  238. --Receive
  239. function LoadTicket(messages)
  240.     guiGridListClear(MessageGridList)
  241.     for i, v in pairs(messages) do
  242.     local msgTime = v[1]
  243.     local plrName = v[2]
  244.     local msg = v[3]
  245.     local row = guiGridListAddRow(MessageGridList, plrName, msg)
  246.     end
  247. end
  248. addEvent("loadTicket", true)
  249. addEventHandler("loadTicket", resourceRoot, LoadTicket)
  250.  
  251. --Send Message to server
  252. function SendMessage(button, press)
  253.     if (button ~= "enter" or not (press)) then
  254.         return false
  255.     end
  256.     local msg = guiGetText(SendMessageBox)
  257.     if (#msg == 0) then
  258.         return false
  259.     end
  260.  
  261.     local plr = localPlayer
  262.     local plrName = getPlayerName(plr)
  263.  
  264.     local selectedRow, selectedCol = guiGridListGetSelectedItem(ActiveTicketList)
  265.     local ticketId = guiGridListGetItemData(ActiveTicketList, selectedRow, 1)
  266.     if (not ticketId) then
  267.         return false
  268.     end
  269.  
  270.         local message = {ticketId, {getTickCount(), plrName, msg}}
  271.         triggerServerEvent("sendMessage", resourceRoot, message) --Send the message to server
  272.  
  273.         for k, v in pairs(tickets) do
  274.             if (v[3] == plrName) then
  275.         outputChatBox("#B266FF(Support) #FFFFFF"..plrName..": "..msg, 255, 255, 255, true)
  276.             end
  277.         end
  278.         guiSetText(SendMessageBox, "")
  279. end
  280. addEventHandler("onClientKey", root, SendMessage, false)
  281.  
  282. --Solve the ticket
  283. function guiClearGridList()
  284.     guiGridListClear(MessageGridList)
  285. end
  286. addEventHandler("onClientGUIClick", ActiveTicketList, guiClearGridList, false)
  287.  
  288. function SolveTicket(button)
  289.     if (button ~= "left") then
  290.         return false
  291.     end
  292.         local selectedRow, selectedCol = guiGridListGetSelectedItem(ActiveTicketList)
  293.         local ticketId = guiGridListGetItemData(ActiveTicketList, selectedRow, 1)
  294.     if (not ticketId) then
  295.         return false
  296.     end
  297.         triggerServerEvent("solveTicket", resourceRoot, ticketId)
  298. end
  299. addEventHandler("onClientGUIClick", MarkTicketSolved, SolveTicket, false)
  300.  
  301. --AI Database Input
  302. function AddSupQ(text, msg)
  303.     local text = guiGetText(QuestionTextBox)
  304.     local msg = guiGetText(AnswerTextBox)
  305.     text = #text
  306.  
  307.     if (#text == 0 or #msg == 0) then
  308.     guiSetText(BotSayLable, "Invalid question or an answer.")
  309.     return false
  310.     end
  311.  
  312.     triggerServerEvent("AIconfig", resourceRoot, text, msg)
  313.  
  314.     guiSetText(BotSayLable, "Added")
  315.     guiSetText(QuestionTextBox, "")
  316.     guiSetText(AnswerTextBox, "")
  317. end
  318. addEventHandler("onClientGUIClick", AddToJSONButton, AddSupQ, false)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement