forked from Simnation/Main
225 lines
No EOL
7.1 KiB
Lua
225 lines
No EOL
7.1 KiB
Lua
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) |