diff --git a/README.md b/README.md index 7426928..9b8d03e 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,38 @@ -# 3D /me -A FiveM script written in LUA that implements the /me command with 3D printing. +# Standalone 3D /me & /do command +# Creds @Eblio modified @n0tst3 +A FiveM script written in LUA that implements the /me & /do command with 3D printing. +## ME Command The /me command allows you to display a specific action above the head of a player. It's particularly used for actions that couldn't have been done in game in a roleplay context. +example: /me waves - + + +## DO Command +The /do command is used primarily in serious roleplay servers and is used to describe something in your enviroment or state a fact in roleplay. It is also used if you want to ask something roleplay wise. +example: /do is the door open? + + ## Installation * Download the resource ; * Drag and drop it into your resources folder ; -* Add ```ensure 3dme``` to your server configuration file. +* To Change language; Edit Config.lua > line 8 +* Add ```ensure 3d-me-do``` to your server configuration file. ## How to use -* In the chat, type /me followed by your action. +* /me & /do in chat. ## Options | Parameter | Line | Suggestion | | --- | --- | --- | -| Color of the text | ```config.lua``` : line 6 | ```color = { r = 230, g = 230, b = 230, a = 255 }``` | -| Font of the text | ```config.lua``` : line 7 | ```font = 0``` ([available fonts](https://imgur.com/a/oV3ciWs)) | | Time on screen | ```config.lua``` : line 8 | ```time = 5000``` | | Language | ```config.lua``` : line 4 | ```language = 'en'``` | -## Updates -To see the previous changelogs, please refer to the [FiveM forum post](https://forum.cfx.re/t/release-me-but-the-text-is-3d-printed/). - -#### V3.0 -* A lot of refactoring ; -* Some major optimizations ; -* Multiple `/me` do not stack anymore but get replaced ; +## n0tst3 edit +Added de lang, trans for do command +Added /do for a more immersive rp experience ## Note * This may not work if are you using a custom chat resource ; -* This could conflict with other /me scripts (disable them) ; * This script is fully standalone. diff --git a/client.lua b/client.lua index 1e9245d..49bf528 100644 --- a/client.lua +++ b/client.lua @@ -1,25 +1,16 @@ --- @desc Client-side /me handling --- @author Elio --- @version 3.0 + -- edit by n0tst3 + local Config = Config +local Languages = Languages +local c, lang = Config, Languages[Config.language] -local c = Config -- Pre-load the config -local lang = Languages[Config.language] -- Pre-load the language local peds = {} --- Localization -local GetGameTimer = GetGameTimer - --- @desc Draw text in 3d --- @param coords world coordinates to where you want to draw the text --- @param text the text to display local function draw3dText(coords, text) local camCoords = GetGameplayCamCoord() local dist = #(coords - camCoords) - - -- Experimental math to scale the text down + local scale = 200 / (GetGameplayCamFov() * dist) - -- Format the text SetTextColour(c.color.r, c.color.g, c.color.b, c.color.a) SetTextScale(0.0, c.scale * scale) SetTextFont(c.font) @@ -27,19 +18,14 @@ local function draw3dText(coords, text) SetTextDropShadow() SetTextCentre(true) - -- Diplay the text BeginTextCommandDisplayText("STRING") AddTextComponentSubstringPlayerName(text) SetDrawOrigin(coords, 0) EndTextCommandDisplayText(0.0, 0.0) ClearDrawOrigin() - end --- @desc Display the text above the head of a ped --- @param ped the target ped --- @param text the text to display -local function displayText(ped, text) +local function displayText(ped, text, yOffset) local playerPed = PlayerPedId() local playerPos = GetEntityCoords(playerPed) local targetPos = GetEntityCoords(ped) @@ -47,42 +33,48 @@ local function displayText(ped, text) local los = HasEntityClearLosToEntity(playerPed, ped, 17) if dist <= c.dist and los then - local exists = peds[ped] ~= nil - peds[ped] = { time = GetGameTimer() + c.time, - text = text + text = text, + yOffset = yOffset } - if not exists then - local display = true + if not peds[ped].exists then + peds[ped].exists = true - while display do - Wait(0) - local pos = GetOffsetFromEntityInWorldCoords(ped, 0.0, 0.0, 1.0) - draw3dText(pos, peds[ped].text) - display = GetGameTimer() <= peds[ped].time - end + Citizen.CreateThread(function() + while GetGameTimer() <= peds[ped].time do + local pos = GetOffsetFromEntityInWorldCoords(ped, 0.0, 0.0, peds[ped].yOffset) + draw3dText(pos, peds[ped].text) + Citizen.Wait(0) + end - peds[ped] = nil + peds[ped] = nil + end) end + end +end +local function onDoShareDisplay(text, target) + local player = GetPlayerFromServerId(target) + if player ~= -1 or target == GetPlayerServerId(PlayerId()) then + local ped = GetPlayerPed(player) + displayText(ped, "~b~* " .. lang.doPrefix .. text .. " ", 0.45) end end --- @desc Trigger the display of teh text for a player --- @param text text to display --- @param target the target server id -local function onShareDisplay(text, target) +local function onMeShareDisplay(text, target) local player = GetPlayerFromServerId(target) if player ~= -1 or target == GetPlayerServerId(PlayerId()) then local ped = GetPlayerPed(player) - displayText(ped, text) + displayText(ped, "~r~** " .. lang.mePrefix .. text .. " **", 0.7) end end -- Register the event -RegisterNetEvent('3dme:shareDisplay', onShareDisplay) +RegisterNetEvent('3ddo:shareDisplay', onDoShareDisplay) +RegisterNetEvent('3dme:shareDisplay', onMeShareDisplay) -- Add the chat suggestion -TriggerEvent('chat:addSuggestion', '/' .. lang.commandName, lang.commandDescription, lang.commandSuggestion) +TriggerEvent('chat:addSuggestion', '/' .. lang.doCommandName, lang.doCommandDescription, lang.doCommandSuggestion) +TriggerEvent('chat:addSuggestion', '/' .. lang.meCommandName, lang.meCommandDescription, lang.meCommandSuggestion) diff --git a/config.lua b/config.lua index 02f1644..52e4662 100644 --- a/config.lua +++ b/config.lua @@ -1,10 +1,11 @@ +-- edit by n0tst3 -- @desc Shared config file -- @author Elio -- @version 2.0 -- Global configuration Config = { - language = 'en', + language = 'de', color = { r = 230, g = 230, b = 230, a = 255 }, -- Text color font = 0, -- Text font time = 5000, -- Duration to display the text (in ms) @@ -15,21 +16,44 @@ Config = { -- Languages available Languages = { ['en'] = { - commandName = 'me', - commandDescription = 'Display an action above your head.', - commandSuggestion = {{ name = 'action', help = '"scratch his nose" for example.'}}, - prefix = 'the person ' + doCommandName = 'do', + doCommandDescription = 'Describe or respond in roleplay.', + doCommandSuggestion = {{ name = 'action', help = '"Is the door open??" for example.'}}, + doPrefix = ' ' , -- Add prefix if required. i.e "The Person" + meCommandName = 'me', + meCommandDescription = 'Displays an action or emote your character is performing.', + meCommandSuggestion = {{ name = 'action', help = '"shoves his hand in his back pocket" for example.'}}, + mePrefix = ' ' -- Add prefix if required. i.e "The Person" }, ['fr'] = { - commandName = 'me', - commandDescription = 'Affiche une action au dessus de votre tête.', - commandSuggestion = {{ name = 'action', help = '"se gratte le nez" par exemple.'}}, - prefix = 'l\'individu ' + doCommandName = 'do', + doCommandDescription = 'Décrivez ou répondez dans le jeu de rôle..', + doCommandSuggestion = {{ name = 'action', help = '"La porte est-elle ouverte??" par exemple.'}}, + doPrefix = ' ' , -- Add prefix if required. i.e "The Person" + meCommandName = 'me', + meCommandDescription = 'Affiche une action ou une emote que votre personnage effectue.', + meCommandSuggestion = {{ name = 'action', help = '"met sa main dans sa poche arrièret" par exemple.'}}, + mePrefix = ' ' -- Add prefix if required. i.e "The Person" + }, + ['de'] = { + doCommandName = 'do', + doCommandDescription = 'Beschreiben oder antworten Sie im Rollenspiel.', + doCommandSuggestion = {{ name = 'action', help = '"Ist die Tür offen??" zum Beispiel.'}}, + doPrefix = ' ' , -- Add prefix if required. i.e "The Person" + meCommandName = 'me', + meCommandDescription = 'Zeigt eine Aktion oder ein Emote an, das Ihr Charakter ausführt.', + meCommandSuggestion = {{ name = 'action', help = '"schiebt seine Hand in seine Gesäßtasche" zum Beispiel.'}}, + mePrefix = ' ' -- Add prefix if required. i.e "The Person" }, ['dk'] = { - commandName = 'me', - commandDescription = 'Viser en handling over hovedet.', - commandSuggestion = {{ name = 'Handling', help = '"Tager en smøg op ad lommen" for eksempel.'}}, - prefix = 'Personen ' + doCommandName = 'do', + doCommandDescription = 'Beskriv eller svar i rollespil', + doCommandSuggestion = {{ name = 'action', help = '"Er døren åpen?" For eksempel.'}}, + doPrefix = ' ' , -- Add prefix if required. i.e "The Person" + meCommandName = 'me', + meCommandDescription = 'Viser en handling eller følelse karakteren din utfører', + meCommandSuggestion = {{ name = 'action', help = '"dytter hånden i baklommen" For eksempel.'}}, + mePrefix = ' ' -- Add prefix if required. i.e "The Person" }, } + diff --git a/fxmanifest.lua b/fxmanifest.lua index 1a5bf24..91efb68 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -1,10 +1,12 @@ fx_version 'cerulean' game 'gta5' -author 'Elio' -description '/me command but it\'s 3D printed' -version '3.0' +author '@Elio - Edit @n0tst3' +description '/me command with /do ' +version '3.1 n0tst3 edit' shared_script 'config.lua' client_script 'client.lua' server_script 'server.lua' + +lua54 'yes' diff --git a/server.lua b/server.lua index c8df482..6ec41a8 100644 --- a/server.lua +++ b/server.lua @@ -1,15 +1,20 @@ --- @desc Server-side /me handling --- @author Elio --- @version 3.0 - +-- edit by n0tst3 -- Pre-load the language +local Config = Config +local Languages = Languages local lang = Languages[Config.language] --- @desc Handle /me command +local function onDoCommand(source, args) + local text = table.concat(args, " ") + TriggerClientEvent('3ddo:shareDisplay', -1, text, source) +end + local function onMeCommand(source, args) - local text = "* " .. lang.prefix .. table.concat(args, " ") .. " *" + local text = table.concat(args, " ") TriggerClientEvent('3dme:shareDisplay', -1, text, source) end --- Register the command -RegisterCommand(lang.commandName, onMeCommand) +-- Register the commands +RegisterCommand(lang.doCommandName, onDoCommand) + +RegisterCommand(lang.meCommandName, onMeCommand)