Jump to content

[HELP] dxDrawText en script /afk


kowixd

Recommended Posts

Hola, quisiera que cuando un jugador escriba /afk por arriba de su cabeza unas letras que diga AFK  y cuando escriba /noafk estas desaparescan.

Nose muy bien como usar usar el dxDrawText, por favor AYUDA :( 

Aqui les dejo el scrip del AFK:

Hello, I would like that when a player writes / afk above his head some letters that say AFK and when he writes / noafk they disappear.

I do not know how to use the dxDrawText, please HELP

Here is the AFK scrip:

addEventHandler("onPlayerJoin",getRootElement(),
function ()
setElementData(source,"afk_state","back")
setElementData(source,"HideState","disabled")
--setElementData(source,"tafk",false)
end)


addEventHandler( "onResourceStart", getResourceRootElement(getThisResource()),
function ()
for i,v in pairs (getElementsByType("player")) do
setElementData(v,"afk_state","back")
setElementData(v,"HideState","disabled")
setElementData(v,"tafk",false)
setElementData(v,"invencible",false)
end
end)



function afkstart(player)
local vida = getElementHealth ( player )

	
if getElementData(player,"afk_state") == "back" then
local state = ( not getElementData ( player, "invencible" ) )
if vida < 35 then 
return
 outputChatBox ("No puedes ir AFK con la vida baja!",player,255,0,0) 
end
  if getElementData (player, "tafk", true) then 
  outputChatBox ('#00FF00Espere 10 segundos...',player,255,0,0,true) 
  return 
  end
local id2 = getPedWeapon (player)

triggerClientEvent(player,"god_mode",player)      
        setElementData ( player, "invencible", state )
        --outputChatBox ( "AFK ".. ( state and "Activado" or "Desactivado" ) ..".", player, 255, 0, 0 )

    setElementFrozen(player,true)

    setPlayerNametagText (player, "|AFK|" .. getPlayerName ( player ))
    outputChatBox(getPlayerName(player).." #ff0000 esta AFK!",getRootElement(),0,255,0, true)
    setElementData(player,"afk_state","afk")

	if id2 > 15 then
	giveWeapon (player, 0, 1, true)
	end 
	setElementData (player, "tafk",true)
	toggleControl (player, "fire", false)
    toggleControl (player, "next_weapon", false)
    toggleControl (player, "previous_weapon", false)
	toggleControl ( player, 'vehicle_fire', false )
    toggleControl (player, "aim_weapon", false) 

	    bindKey (player,"w","down","noafk")
        bindKey (player,"d","down","noafk")
        bindKey (player,"s","down","noafk")
        bindKey (player,"a","down","noafk")
		bindKey (player,"num_0","down","noafk")
		bindKey (player,"lctrl","down","noafk")
		bindKey (player,"arrow_u","down","noafk")
		bindKey (player,"arrow_d","down","noafk")
		bindKey (player,"arrow_l","down","noafk")
		bindKey (player,"arrow_r","down","noafk")
		bindKey (player,"delete","down","noafk")
		bindKey (player,"mouse2","down","noafk")
		bindKey (player,"capslock","down","noafk")
if getPedOccupiedVehicle(player) then
fixVehicle(getPedOccupiedVehicle(player),true)
setElementFrozen(getPedOccupiedVehicle(player),true)
setVehicleDamageProof(getPedOccupiedVehicle(player),true)
end
setElementData (player, "tafk",true)
setTimer (setElementData, 10000, 1, player, "tafk", false)
end

end  
addCommandHandler("afk", afkstart )

function afkend(player)

if getElementData(player,"afk_state") == "afk" then

local state = ( not getElementData ( player, "invencible" ) )
setElementData(player,"afk_state","back")
triggerClientEvent(player,"disable_god_mode",player)
setElementFrozen(player,false)
setPlayerNametagText (player, "" .. getPlayerName (player))
outputChatBox(getPlayerName(player).." #00ff00 ya no esta AFK!",getRootElement(),0,255,0, true)
    toggleControl (player, "fire", true)
    toggleControl (player, "next_weapon", true)
    toggleControl (player, "previous_weapon", true)
    toggleControl ( player, 'vehicle_fire', true )
    toggleControl (player, "aim_weapon", true)
	


	      setElementData ( player, "invencible", state )
        --outputChatBox ( "AFK " .. ( state and "Activado" or "Desactivado" ) ..".", player, 255, 0, 0 )
	    unbindKey (player,"w","down","noafk")
        unbindKey (player,"d","down","noafk")
        unbindKey (player,"s","down","noafk")
        unbindKey (player,"a","down","noafk")
		unbindKey (player,"num_0","down","noafk")
		unbindKey (player,"lctrl","down","noafk")
		unbindKey (player,"arrow_u","down","noafk")
		unbindKey (player,"arrow_d","down","noafk")
		unbindKey (player,"arrow_l","down","noafk")
		unbindKey (player,"arrow_r","down","noafk")
		unbindKey (player,"delete","down","noafk")
		unbindKey (player,"mouse2","down","noafk")
		unbindKey (player,"capslock","down","noafk")
if getPedOccupiedVehicle(player) then
setElementFrozen(getPedOccupiedVehicle(player),false)
setVehicleDamageProof(getPedOccupiedVehicle(player),false)
end
end
end
addCommandHandler("noafk", afkend )
addCommandHandler("wp", afkend )
addCommandHandler("weapon", afkend )
addCommandHandler("dim", afkend )




addEventHandler( "onResourceStop", getResourceRootElement(getThisResource()),
function ()
for i,v in pairs (getElementsByType("player")) do
setElementData(v,"afk_state","back")
setElementData(v,"HideState","disabled")
--setElementData(v,"tafk",false)
setElementData(v,"invencible",false)
end
end)

 

Edited by kowixd
Link to comment
addEventHandler("onClientRender", root, function()
   local cx, cy, cz = getCameraMatrix()
   local px, py, pz = getElementPosition(localPlayer)
    if getElementData(localPlayer, "afk_state") == afk then
	    dist = math.squrt(px-cx)^2 + (py-cy)^2 + (pz-cz)^2)
		if dist < 30 then
		   if isLineOfSightClear(px, py, pz, cx, cy, cz, true, false, false, true, false, false, true)
		      local bx, by, bz = getPedBonePosition(localPlayer, 6)
			  local x, y = getScreenFromWorldPosition(bx, by, bz+0.3)
			  if x then
			     dxDrawText("AFK", x, y, x, y tocolor(255, 255, 255, 255), 0.085+(15-dist)*0.02, "pricedown", "center", "center")
			  end
		   end
		end
	end	
end)

 

Edited by Dimos7
Link to comment
addEventHandler("onClientRender", root, function()
   local cx, cy, cz = getCameraMatrix()
   local px, py, pz = getElementPosition(localPlayer)
    if getElementData(localPlayer, "afk_state") == afk then
	    dist = math.sqrt(px-cx)^2 + (py-cy)^2 + (pz-cz)^2)
		if dist < 30 then
		   if isLineOfSightClear(px, py, pz, cx, cy, cz, true, false, false, true, false, false, true)
		      local bx, by, bz = getPedBonePosition(localPlayer, 6)
			  local x, y = getScreenFromWorldPosition(bx, by, bz+0.3)
			  if x then
			     dxDrawText("AFK", x, y, x, y tocolor(255, 255, 255, 255), 0.085+(15-dist)*0.02, "pricedown", "center", "center")
			  end
		   end
		end
	end	
end)

 

Link to comment
1 hour ago, Dimos7 said:

addEventHandler("onClientRender", root, function()
   local cx, cy, cz = getCameraMatrix()
   local px, py, pz = getElementPosition(localPlayer)
    if getElementData(localPlayer, "afk_state") == afk then
	    dist = math.sqrt(px-cx)^2 + (py-cy)^2 + (pz-cz)^2)
		if dist < 30 then
		   if isLineOfSightClear(px, py, pz, cx, cy, cz, true, false, false, true, false, false, true)
		      local bx, by, bz = getPedBonePosition(localPlayer, 6)
			  local x, y = getScreenFromWorldPosition(bx, by, bz+0.3)
			  if x then
			     dxDrawText("AFK", x, y, x, y tocolor(255, 255, 255, 255), 0.085+(15-dist)*0.02, "pricedown", "center", "center")
			  end
		   end
		end
	end	
end)

 

ERROR: Loading script failed: afk2\server.lua: 'then' expected near 'local' ......(line 7)

Link to comment
4 hours ago, kowixd said:

Hola, quisiera que cuando un jugador escriba /afk por arriba de su cabeza unas letras que diga AFK  y cuando escriba /noafk estas desaparescan.

Nose muy bien como usar usar el dxDrawText, por favor AYUDA :( 

Aqui les dejo el scrip del AFK:

Hello, I would like that when a player writes / afk above his head some letters that say AFK and when he writes / noafk they disappear.

I do not know how to use the dxDrawText, please HELP

Here is the AFK scrip:


addEventHandler("onPlayerJoin",getRootElement(),
function ()
setElementData(source,"afk_state","back")
setElementData(source,"HideState","disabled")
--setElementData(source,"tafk",false)
end)


addEventHandler( "onResourceStart", getResourceRootElement(getThisResource()),
function ()
for i,v in pairs (getElementsByType("player")) do
setElementData(v,"afk_state","back")
setElementData(v,"HideState","disabled")
setElementData(v,"tafk",false)
setElementData(v,"invencible",false)
end
end)



function afkstart(player)
local vida = getElementHealth ( player )

	
if getElementData(player,"afk_state") == "back" then
local state = ( not getElementData ( player, "invencible" ) )
if vida < 35 then 
return
 outputChatBox ("No puedes ir AFK con la vida baja!",player,255,0,0) 
end
  if getElementData (player, "tafk", true) then 
  outputChatBox ('#00FF00Espere 10 segundos...',player,255,0,0,true) 
  return 
  end
local id2 = getPedWeapon (player)

triggerClientEvent(player,"god_mode",player)      
        setElementData ( player, "invencible", state )
        --outputChatBox ( "AFK ".. ( state and "Activado" or "Desactivado" ) ..".", player, 255, 0, 0 )

    setElementFrozen(player,true)

    setPlayerNametagText (player, "|AFK|" .. getPlayerName ( player ))
    outputChatBox(getPlayerName(player).." #ff0000 esta AFK!",getRootElement(),0,255,0, true)
    setElementData(player,"afk_state","afk")

	if id2 > 15 then
	giveWeapon (player, 0, 1, true)
	end 
	setElementData (player, "tafk",true)
	toggleControl (player, "fire", false)
    toggleControl (player, "next_weapon", false)
    toggleControl (player, "previous_weapon", false)
	toggleControl ( player, 'vehicle_fire', false )
    toggleControl (player, "aim_weapon", false) 

	    bindKey (player,"w","down","noafk")
        bindKey (player,"d","down","noafk")
        bindKey (player,"s","down","noafk")
        bindKey (player,"a","down","noafk")
		bindKey (player,"num_0","down","noafk")
		bindKey (player,"lctrl","down","noafk")
		bindKey (player,"arrow_u","down","noafk")
		bindKey (player,"arrow_d","down","noafk")
		bindKey (player,"arrow_l","down","noafk")
		bindKey (player,"arrow_r","down","noafk")
		bindKey (player,"delete","down","noafk")
		bindKey (player,"mouse2","down","noafk")
		bindKey (player,"capslock","down","noafk")
if getPedOccupiedVehicle(player) then
fixVehicle(getPedOccupiedVehicle(player),true)
setElementFrozen(getPedOccupiedVehicle(player),true)
setVehicleDamageProof(getPedOccupiedVehicle(player),true)
end
setElementData (player, "tafk",true)
setTimer (setElementData, 10000, 1, player, "tafk", false)
end

end  
addCommandHandler("afk", afkstart )

function afkend(player)

if getElementData(player,"afk_state") == "afk" then

local state = ( not getElementData ( player, "invencible" ) )
setElementData(player,"afk_state","back")
triggerClientEvent(player,"disable_god_mode",player)
setElementFrozen(player,false)
setPlayerNametagText (player, "" .. getPlayerName (player))
outputChatBox(getPlayerName(player).." #00ff00 ya no esta AFK!",getRootElement(),0,255,0, true)
    toggleControl (player, "fire", true)
    toggleControl (player, "next_weapon", true)
    toggleControl (player, "previous_weapon", true)
    toggleControl ( player, 'vehicle_fire', true )
    toggleControl (player, "aim_weapon", true)
	


	      setElementData ( player, "invencible", state )
        --outputChatBox ( "AFK " .. ( state and "Activado" or "Desactivado" ) ..".", player, 255, 0, 0 )
	    unbindKey (player,"w","down","noafk")
        unbindKey (player,"d","down","noafk")
        unbindKey (player,"s","down","noafk")
        unbindKey (player,"a","down","noafk")
		unbindKey (player,"num_0","down","noafk")
		unbindKey (player,"lctrl","down","noafk")
		unbindKey (player,"arrow_u","down","noafk")
		unbindKey (player,"arrow_d","down","noafk")
		unbindKey (player,"arrow_l","down","noafk")
		unbindKey (player,"arrow_r","down","noafk")
		unbindKey (player,"delete","down","noafk")
		unbindKey (player,"mouse2","down","noafk")
		unbindKey (player,"capslock","down","noafk")
if getPedOccupiedVehicle(player) then
setElementFrozen(getPedOccupiedVehicle(player),false)
setVehicleDamageProof(getPedOccupiedVehicle(player),false)
end
end
end
addCommandHandler("noafk", afkend )
addCommandHandler("wp", afkend )
addCommandHandler("weapon", afkend )
addCommandHandler("dim", afkend )




addEventHandler( "onResourceStop", getResourceRootElement(getThisResource()),
function ()
for i,v in pairs (getElementsByType("player")) do
setElementData(v,"afk_state","back")
setElementData(v,"HideState","disabled")
--setElementData(v,"tafk",false)
setElementData(v,"invencible",false)
end
end)

 

Coloca esto en tu client

 

 

function dxDrawTextOnElement(TheElement,text,height,distance,R,G,B,alpha,size,font,checkBuildings,checkVehicles,checkPeds,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement)
				local x, y, z = getElementPosition(TheElement)
				local x2, y2, z2 = getElementPosition(localPlayer)
				local distance = distance or 20
				local height = height or 1
                                local checkBuildings = checkBuildings or true
                                local checkVehicles = checkVehicles or false
                                local checkPeds = checkPeds or false
                                local checkObjects = checkObjects or true
                                local checkDummies = checkDummies or true
                                local seeThroughStuff = seeThroughStuff or false
                                local ignoreSomeObjectsForCamera = ignoreSomeObjectsForCamera or false
                                local ignoredElement = ignoredElement or nil
				if (isLineOfSightClear(x, y, z, x2, y2, z2, checkBuildings, checkVehicles, checkPeds , checkObjects,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement)) then
					local sx, sy = getScreenFromWorldPosition(x, y, z+height)
					if(sx) and (sy) then
						local distanceBetweenPoints = getDistanceBetweenPoints3D(x, y, z, x2, y2, z2)
						if(distanceBetweenPoints < distance) then
							dxDrawText(text, sx+2, sy+2, sx, sy, tocolor(R or 255, G or 255, B or 255, alpha or 255), (size or 1)-(distanceBetweenPoints / distance), font or "arial", "center", "center")
			end
		end
	end
end





addEventHandler("onClientRender", root,
function()

if getElementData(localPlayer,"afk_state") == "afk" then
dxDrawTextOnElement(localPlayer,"AFK",1,20,255,0,0,255,1,"bankgothic")

else


    end
end
)

 

Link to comment
52 minutes ago, <~KaMiKaZe~> said:

Coloca esto en tu client

 

 


function dxDrawTextOnElement(TheElement,text,height,distance,R,G,B,alpha,size,font,checkBuildings,checkVehicles,checkPeds,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement)
				local x, y, z = getElementPosition(TheElement)
				local x2, y2, z2 = getElementPosition(localPlayer)
				local distance = distance or 20
				local height = height or 1
                                local checkBuildings = checkBuildings or true
                                local checkVehicles = checkVehicles or false
                                local checkPeds = checkPeds or false
                                local checkObjects = checkObjects or true
                                local checkDummies = checkDummies or true
                                local seeThroughStuff = seeThroughStuff or false
                                local ignoreSomeObjectsForCamera = ignoreSomeObjectsForCamera or false
                                local ignoredElement = ignoredElement or nil
				if (isLineOfSightClear(x, y, z, x2, y2, z2, checkBuildings, checkVehicles, checkPeds , checkObjects,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement)) then
					local sx, sy = getScreenFromWorldPosition(x, y, z+height)
					if(sx) and (sy) then
						local distanceBetweenPoints = getDistanceBetweenPoints3D(x, y, z, x2, y2, z2)
						if(distanceBetweenPoints < distance) then
							dxDrawText(text, sx+2, sy+2, sx, sy, tocolor(R or 255, G or 255, B or 255, alpha or 255), (size or 1)-(distanceBetweenPoints / distance), font or "arial", "center", "center")
			end
		end
	end
end





addEventHandler("onClientRender", root,
function()

if getElementData(localPlayer,"afk_state") == "afk" then
dxDrawTextOnElement(localPlayer,"AFK",1,20,255,0,0,255,1,"bankgothic")

else


    end
end
)

 

it's doesn't work

Link to comment
local AFK = {}

function getAFKTableSize(t)
	local count = 0
	if t and type(t) == "table" then
		for k in next,t do
			if isElement(k) then
				count = count + 1
			end
		end
	end
	return count
end

function playerDataChanges(data)
	if data == "afk_state" then
		local value = getElementData(source,data)
		if value == "afk" then
			if getAFKTableSize(AFK) == 0 then
				addEventHandler("onClientRender",root,Render)
			end
			AFK[source] = true
		elseif value == "back" then
			AFK[source] = nil
			if getAFKTableSize(AFK) == 0 then
				removeEventHandler("onClientRender",root,Render)
			end
		end
	end
end
addEventHandler("onClientElementDataChange",root,playerDataChanges)

function Render()
	for player in next,AFK do
		if isElement(player) then
			local myPos = {getElementPosition(localPlayer)}
			local head = {getPedBonePosition(player,8)}
			if getDistanceBetweenPoints3D(myPos[1],myPos[2],myPos[3],head[1],head[2],head[3]) <= 30 then
				local x,y = getScreenFromWorldPosition(head[1],head[2],head[3]+0.3)
				if x and y then
					dxDrawText("AFK",x,y,x,y,tocolor(255,255,255,255),2,"sans","center","center")
				end
			end
		end
	end
end

Client side

  • Like 1
Link to comment
8 hours ago, IRBIS said:

local AFK = {}

function getAFKTableSize(t)
	local count = 0
	if t and type(t) == "table" then
		for k in next,t do
			if isElement(k) then
				count = count + 1
			end
		end
	end
	return count
end

function playerDataChanges(data)
	if data == "afk_state" then
		local value = getElementData(source,data)
		if value == "afk" then
			if getAFKTableSize(AFK) == 0 then
				addEventHandler("onClientRender",root,Render)
			end
			AFK[source] = true
		elseif value == "back" then
			AFK[source] = nil
			if getAFKTableSize(AFK) == 0 then
				removeEventHandler("onClientRender",root,Render)
			end
		end
	end
end
addEventHandler("onClientElementDataChange",root,playerDataChanges)

function Render()
	for player in next,AFK do
		if isElement(player) then
			local myPos = {getElementPosition(localPlayer)}
			local head = {getPedBonePosition(player,8)}
			if getDistanceBetweenPoints3D(myPos[1],myPos[2],myPos[3],head[1],head[2],head[3]) <= 30 then
				local x,y = getScreenFromWorldPosition(head[1],head[2],head[3]+0.3)
				if x and y then
					dxDrawText("AFK",x,y,x,y,tocolor(255,255,255,255),2,"sans","center","center")
				end
			end
		end
	end
end

Client side

it works thank you
 

Link to comment

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.
×
×
  • Create New...