Tokio

[HELP] How to create 3d text?

Recommended Posts

I want create a script, which creates a 3d text with a cmd. For example, when i type "/word asd" then this make a 3d text the player position "#playername : asd", then after elapse 3 hours, the text will hide. How to make this?

Share this post


Link to post
23 minutes ago, Enargy, said:

You cand find something on DxDrawTextOnElement and use getTickCount or setTimer to hide it.

But the DxDrawTextOnElement attach the text to a object/ped

Share this post


Link to post
7 minutes ago, Patrick2562 said:

-- CLIENT

local textsFromServer = {}

-- SETTINGS
local showRadius = 10 -- 10 meters

addEventHandler("onClientRender", getRootElement(), function()
	for id, v in pairs(textsFromServer) do
        local x,y,z = getElementPosition(localPlayer)
            
        if getDistanceBetweenPoints3D(v[3],v[4],v[5], x,y,z) <= showRadius then
            local sx, sy = getScreenFromWorldPosition(v[3],v[4],v[5])
            if sx and sy then
                dxDrawText(v[1]..": "..v[2], sx+1, sy+1, sx+1, sy+1, tocolor(0,0,0,120), 1.5, "default-bold", "center", "center", false, false, false, true)
                dxDrawText(v[1]..": "..v[2], sx, sy, sx, sy, tocolor(255,255,255,180), 1.5, "default-bold", "center", "center", false, false, false, true)
            end
		end
	end
end)


addEvent("sendTableToClients", true)
addEventHandler("sendTableToClients", getRootElement(), function(tableFromServer)
    textsFromServer = tableFromServer
end)


triggerServerEvent("getTextsOnJoin", localPlayer) 



-- SERVER

local texts = {}
local currentID = 1

-- SETTINGS
local destroyTimer = 180 -- destroy after 180 mins


addCommandHandler("3dtext", function(player, cmd, ...)
	local text = table.concat({...}, " ")
    if text and #text > 0 then
        local playername = getPlayerName(player):gsub("#%x%x%x%x%x%x", "")
        local x,y,z = getElementPosition(player)

        texts[currentID] = {playername, text, x,y,z} -- save datas
        
        setTimer(function(id)
            texts[id] = nil
            sendTableToClients()
        end, 1000*60*destroyTimer, 1, currentID) -- delete after 3 hours

        currentID = currentID + 1 -- leave alone
        sendTableToClients()
    else
       outputChatBox("USE: /"..cmd.." text", player)     
    end
end)

function sendTableToClients()
    triggerClientEvent(getRootElement(), "sendTableToClients", getRootElement(), texts)
end


addEvent("getTextsOnJoin", true)
addEventHandler("getTextsOnJoin", getRootElement(), function()
    triggerClientEvent(source, "sendTableToClients", source, texts)
end)

 

Thank you:D

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.