Main/resources/[standalone]/okokChatV2/client.lua

225 lines
7.1 KiB
Lua
Raw Normal View History

2025-06-07 08:51:21 +02:00
local players = {}
local defaultScale = 0.7 -- Text scale
local displayTime = 3500 -- Duration to display the text (in ms)
local distToDraw = 250 -- Min. distance to draw
local pedDisplaying = {}
local function DrawText3D(coords, text, color)
local camCoords = GetGameplayCamCoord()
local dist = #(coords - camCoords)
local scale = 200 / (GetGameplayCamFov() * dist)
SetTextColour(color.r, color.g, color.b, color.a)
SetTextScale(0.0, defaultScale * scale)
SetTextDropshadow(0, 0, 0, 0, 55)
SetTextDropShadow()
SetTextFont(6)
SetTextCentre(true)
BeginTextCommandDisplayText("STRING")
AddTextComponentSubstringPlayerName(text)
SetDrawOrigin(coords, 0)
EndTextCommandDisplayText(0.0, 0.0)
ClearDrawOrigin()
end
local function Display(ped, text, color)
local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed)
local pedCoords = GetEntityCoords(ped)
local dist = #(playerCoords - pedCoords)
if dist <= distToDraw then
pedDisplaying[ped] = (pedDisplaying[ped] or 1) + 1
local display = true
Citizen.CreateThread(function()
Wait(displayTime)
display = false
end)
local offset = 0.7 + pedDisplaying[ped] * 0.15
while display do
if HasEntityClearLosToEntity(playerPed, ped, 17 ) then
local x, y, z = table.unpack(GetEntityCoords(ped))
z = z + offset
DrawText3D(vector3(x, y, z), text, color)
end
Wait(0)
end
pedDisplaying[ped] = pedDisplaying[ped] - 1
end
end
-- For 3dme:
RegisterNetEvent('okokChat:3dme')
AddEventHandler('okokChat:3dme', function(text, serverId)
local player = GetPlayerFromServerId(serverId)
if player ~= -1 then
local ped = GetPlayerPed(player)
local color = { r = 0, g = 0, b = 255, a = 255 } -- blue color
Display(ped, text, color)
end
end)
-- For 3ddo:
RegisterNetEvent('okokChat:3ddo')
AddEventHandler('okokChat:3ddo', function(text, serverId)
local player = GetPlayerFromServerId(serverId)
if player ~= -1 then
local ped = GetPlayerPed(player)
local color = { r = 222, g = 255, b = 0, a = 255 } -- yellow color
Display(ped, text, color)
end
end)
exports('Message', function(background, color, icon, title, playername, message, target, image)
TriggerServerEvent('okokChat:ServerMessage', background, color, icon, title, playername, message, target, image)
end)
AddEventHandler('playerSpawned', function()
TriggerServerEvent('okokChat:onPlayerSpawn')
end)
RegisterNetEvent("okokChat:getAllPlayers")
AddEventHandler("okokChat:getAllPlayers", function()
local coords = GetEntityCoords(PlayerPedId())
local closePlayers = {}
local allPlayers = GetActivePlayers()
local playerCount = 1
local pedID = PlayerPedId()
for i = 1, #allPlayers do
local playerId = allPlayers[i]
local playerPed = GetPlayerPed(playerId)
local playerCoords = GetEntityCoords(playerPed)
table.insert(closePlayers, GetPlayerServerId(playerId))
playerCount += 1
end
TriggerServerEvent("okokChat:SetClosePlayers", closePlayers)
end)
RegisterNetEvent("okokChat:checkDeathStatus")
AddEventHandler("okokChat:checkDeathStatus", function()
local ped = GetPlayerPed(-1)
TriggerServerEvent('okokChat:deathStatus', IsEntityDead(ped))
end)
RegisterNetEvent("okokChat:Notification")
AddEventHandler("okokChat:Notification", function(info, text)
exports['okokNotify']:Alert(info.title, text, info.time, info.type)
end)
Citizen.CreateThread(function()
if Config.JobChat then
TriggerEvent('chat:addSuggestion', '/'..Config.JobCommand, 'JOB message', {
{ name="message", help="message to send" },
})
end
if Config.EnableOOC then
TriggerEvent('chat:addSuggestion', '/'..Config.OOCCommand, 'OOC message', {
{ name="message", help="message to send" },
})
end
if Config.AllowPlayersToClearTheirChat then
TriggerEvent('chat:addSuggestion', '/'..Config.ClearChatCommand, 'Clear chat', {})
end
if Config.EnableHideChat then
TriggerEvent('chat:addSuggestion', '/'..Config.HideChatCommand, 'Hide chat', {})
end
if Config.EnableStaffCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.StaffCommand, 'Send a message as staff', {
{ name="message", help="message to send" },
})
end
if Config.AllowStaffsToClearEveryonesChat then
TriggerEvent('chat:addSuggestion', '/'..Config.ClearEveryonesChatCommand, "Clear everyone's chat", {})
end
if Config.EnableStaffOnlyCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.StaffOnlyCommand, 'Staff only chat', {
{ name="message", help="message to send" },
})
end
if Config.EnableAdvertisementCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.AdvertisementCommand, 'Make an advertisement', {
{ name="ad", help="advertisement message" },
})
end
if Config.EnableAnonymousCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.AnonymousCommand, 'Send an anonymous message', {
{ name="message", help="message to send" },
})
end
if Config.EnableTwitchCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.TwitchCommand, 'Twitch message', {
{ name="message", help="message to send" },
})
end
if Config.EnableYoutubeCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.YoutubeCommand, 'YouTube message', {
{ name="message", help="message to send" },
})
end
if Config.EnableTwitterCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.TwitterCommand, 'Twitter message', {
{ name="message", help="message to send" },
})
end
if Config.EnablePoliceCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.PoliceCommand, 'Police message', {
{ name="message", help="message to send" },
})
end
if Config.EnableAmbulanceCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.AmbulanceCommand, 'Ambulance message', {
{ name="message", help="message to send" },
})
end
if Config.TimeOutPlayers then
TriggerEvent('chat:addSuggestion', '/'..Config.TimeOutCommand, 'Mute player', {
{ name="id", help="id of the player to mute" },
{ name="time", help="time in minutes" }
})
TriggerEvent('chat:addSuggestion', '/'..Config.RemoveTimeOutCommand, 'Unmute player', {
{ name="id", help="id of the player to unmute" }
})
end
if Config.EnableMe then
TriggerEvent('chat:addSuggestion', '/'..Config.MeCommand, 'Send a me message', {
{ name="action", help="me action" }
})
end
if Config.EnableTry then
TriggerEvent('chat:addSuggestion', '/'..Config.TryCommand, 'Send a try message', {
{ name="action", help="try action" }
})
end
if Config.EnableDo then
TriggerEvent('chat:addSuggestion', '/'..Config.DoCommand, 'Send a do message', {
{ name="action", help="do action" }
})
end
if Config.EnableDocCommand then
TriggerEvent('chat:addSuggestion', '/'..Config.DocCommand, 'Send a do message', {
{ name="number", help="number countdown" }
})
end
end)