298 lines
7.5 KiB
Lua
298 lines
7.5 KiB
Lua
|
-- local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
local chatInputActive = false
|
||
|
local chatInputActivating = false
|
||
|
local chatHidden = true
|
||
|
local chatLoaded = false
|
||
|
|
||
|
RegisterNetEvent('chatMessage')
|
||
|
RegisterNetEvent('chat:addTemplate')
|
||
|
RegisterNetEvent('chat:addMessage')
|
||
|
RegisterNetEvent('chat:addSuggestion')
|
||
|
RegisterNetEvent('chat:addSuggestions')
|
||
|
RegisterNetEvent('chat:removeSuggestion')
|
||
|
RegisterNetEvent('chat:client:ClearChat')
|
||
|
|
||
|
RegisterNetEvent('__cfx_internal:serverPrint')
|
||
|
|
||
|
RegisterNetEvent('_chat:messageEntered')
|
||
|
|
||
|
AddEventHandler('chatMessage', function(author, color, text)
|
||
|
local args = {text}
|
||
|
if author ~= "" then
|
||
|
table.insert(args, 1, author)
|
||
|
end
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_MESSAGE',
|
||
|
message = {
|
||
|
color = color,
|
||
|
multiline = true,
|
||
|
args = args
|
||
|
}
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('__cfx_internal:serverPrint', function(msg)
|
||
|
print(msg)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_MESSAGE',
|
||
|
message = {
|
||
|
templateId = 'print',
|
||
|
multiline = true,
|
||
|
args = {msg},
|
||
|
mode = '_global'
|
||
|
}
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
-- addMessage
|
||
|
local addMessage = function(message)
|
||
|
if type(message) == 'string' then
|
||
|
message = {
|
||
|
args = {message}
|
||
|
}
|
||
|
end
|
||
|
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_MESSAGE',
|
||
|
message = message
|
||
|
})
|
||
|
end
|
||
|
|
||
|
exports('addMessage', addMessage)
|
||
|
AddEventHandler('chat:addMessage', function(message)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_MESSAGE',
|
||
|
message = message
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
-- addSuggestion
|
||
|
local addSuggestion = function(name, help, params)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_SUGGESTION_ADD',
|
||
|
suggestion = {
|
||
|
name = name,
|
||
|
help = help,
|
||
|
params = params or nil
|
||
|
}
|
||
|
})
|
||
|
end
|
||
|
|
||
|
exports('addSuggestion', addSuggestion)
|
||
|
AddEventHandler('chat:addSuggestion', function(name, help, params)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_SUGGESTION_ADD',
|
||
|
suggestion = {
|
||
|
name = name,
|
||
|
help = help,
|
||
|
params = params or nil
|
||
|
}
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('chat:addSuggestions', function(suggestions)
|
||
|
for _, suggestion in ipairs(suggestions) do
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_SUGGESTION_ADD',
|
||
|
suggestion = suggestion
|
||
|
})
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('chat:removeSuggestion', function(name)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_SUGGESTION_REMOVE',
|
||
|
name = name
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('chat:resetSuggestions')
|
||
|
AddEventHandler('chat:resetSuggestions', function()
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_COMMANDS_RESET'
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('chat:addMode', function(mode)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_MODE_ADD',
|
||
|
mode = mode
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('chat:removeMode', function(name)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_MODE_REMOVE',
|
||
|
name = name
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('chat:addTemplate', function(id, html)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_TEMPLATE_ADD',
|
||
|
template = {
|
||
|
id = id,
|
||
|
html = html
|
||
|
}
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('chat:client:ClearChat', function(name)
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_CLEAR'
|
||
|
})
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback('chatResult', function(data, cb)
|
||
|
chatInputActive = false
|
||
|
SetNuiFocus(false)
|
||
|
|
||
|
if not data.canceled then
|
||
|
local id = PlayerId()
|
||
|
|
||
|
local r, g, b = 0, 0x99, 255
|
||
|
|
||
|
if data.message:sub(1, 1) == '/' then
|
||
|
ExecuteCommand(data.message:sub(2))
|
||
|
else
|
||
|
TriggerServerEvent('_chat:messageEntered', GetPlayerName(id), {r, g, b}, data.message)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
cb('ok')
|
||
|
end)
|
||
|
|
||
|
local function refreshCommands()
|
||
|
if GetRegisteredCommands then
|
||
|
local registeredCommands = GetRegisteredCommands()
|
||
|
|
||
|
local suggestions = {}
|
||
|
|
||
|
for _, command in ipairs(registeredCommands) do
|
||
|
if IsAceAllowed(('command.%s'):format(command.name)) then
|
||
|
table.insert(suggestions, {
|
||
|
name = '/' .. command.name,
|
||
|
help = ''
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
TriggerEvent('chat:addSuggestions', suggestions)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function refreshThemes()
|
||
|
local themes = {}
|
||
|
|
||
|
for resIdx = 0, GetNumResources() - 1 do
|
||
|
local resource = GetResourceByFindIndex(resIdx)
|
||
|
|
||
|
if GetResourceState(resource) == 'started' then
|
||
|
local numThemes = GetNumResourceMetadata(resource, 'chat_theme')
|
||
|
|
||
|
if numThemes > 0 then
|
||
|
local themeName = GetResourceMetadata(resource, 'chat_theme')
|
||
|
local themeData = json.decode(GetResourceMetadata(resource, 'chat_theme_extra') or 'null')
|
||
|
|
||
|
if themeName and themeData then
|
||
|
themeData.baseUrl = 'nui://' .. resource .. '/'
|
||
|
themes[themeName] = themeData
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_UPDATE_THEMES',
|
||
|
themes = themes
|
||
|
})
|
||
|
end
|
||
|
|
||
|
AddEventHandler('onClientResourceStart', function(resName)
|
||
|
Wait(500)
|
||
|
|
||
|
refreshCommands()
|
||
|
refreshThemes()
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('onClientResourceStop', function(resName)
|
||
|
Wait(500)
|
||
|
|
||
|
refreshCommands()
|
||
|
refreshThemes()
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback('loaded', function(data, cb)
|
||
|
TriggerServerEvent('chat:init');
|
||
|
|
||
|
refreshCommands()
|
||
|
refreshThemes()
|
||
|
|
||
|
chatLoaded = true
|
||
|
|
||
|
cb('ok')
|
||
|
end)
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
SetTextChatEnabled(false)
|
||
|
SetNuiFocus(false)
|
||
|
|
||
|
while true do
|
||
|
Wait(0)
|
||
|
|
||
|
if not chatInputActive then
|
||
|
if IsControlPressed(0, 245) then
|
||
|
chatInputActive = true
|
||
|
chatInputActivating = true
|
||
|
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_OPEN'
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if chatInputActivating then
|
||
|
if not IsControlPressed(0, 245) then
|
||
|
SetNuiFocus(true)
|
||
|
|
||
|
chatInputActivating = false
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if chatLoaded then
|
||
|
local shouldBeHidden = false
|
||
|
|
||
|
if IsScreenFadedOut() or IsPauseMenuActive() then
|
||
|
shouldBeHidden = true
|
||
|
end
|
||
|
|
||
|
if (shouldBeHidden and not chatHidden) or (not shouldBeHidden and chatHidden) then
|
||
|
chatHidden = shouldBeHidden
|
||
|
|
||
|
SendNUIMessage({
|
||
|
type = 'ON_SCREEN_STATE_CHANGE',
|
||
|
shouldHide = shouldBeHidden
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
if Config.AllowPlayersToClearTheirChat then
|
||
|
TriggerEvent('chat:addSuggestion', '/' .. Config.ClearChatCommand, 'Tøm chat (for dig selv)', {})
|
||
|
end
|
||
|
if Config.AllowStaffsToClearEveryonesChat then
|
||
|
TriggerEvent('chat:addSuggestion', '/' .. Config.ClearEveryonesChatCommand, 'Tøm chat for alle', {})
|
||
|
end
|
||
|
if Config.EnableAdvertisementCommand then
|
||
|
TriggerEvent('chat:addSuggestion', '/' .. Config.AdvertisementCommand, 'Lav en reklame for ' .. Config.AdvertisementPrice .. ',-', {})
|
||
|
end
|
||
|
if Config.EnablePoliceCommand then
|
||
|
TriggerEvent('chat:addSuggestion', '/' .. Config.PoliceCommand, 'Udsend Politi-notifikation', {})
|
||
|
end
|
||
|
if Config.EnableAmbulanceCommand then
|
||
|
TriggerEvent('chat:addSuggestion', '/' .. Config.AmbulanceCommand, 'Udsend EMS-notifikation', {})
|
||
|
end
|
||
|
end)
|