Jump to content

attachElement 3d TEXT


Recommended Posts

Подскажите как приаттачить текст к игроку? Дайте пожалуйста пример, потому что сколько искал на форуме, не нашел нормального примера.

Вот мой исходник

function livetext () 
text = getElementData(root,"mess") 
local x,y,z = getElementPosition(getLocalPlayer())     
addEventHandler("onClientRender",getRootElement(),   
function()   
      local px,py,pz = getElementPosition(getLocalPlayer())   
      local distance = getDistanceBetweenPoints3D ( x,y,z,px,py,pz )   
      if distance <= 10 then   
          local sx,sy = getScreenFromWorldPosition ( x, y, z+0.95, 0.06 )   
          if not sx then return end   
        --  local scale = --1/(0.3 * (distance / 30))   
         message = dxDrawBorderedText ( text, sx, sy - 30, sx, sy - 30, tocolor(255,255,255,255), 1.5, "arial", "center", "bottom", false, false, false )   
          
        end   
end   
)  
end 
 addEvent ("livetext", true) 
addEventHandler ( "livetext",getRootElement(), livetext) 

Link to comment

Текст не элемент, его через attachElement нельзя прицепить.

Во-вторых, используются глобальные переменные, которые могут использоваться в нескольких копиях обработчика onClientRender.

Вот пример, как я раньше рисовал текст над авто.

local carsCost = {} 
local renderState = false 
  
addEvent( 'showCarCost', true ) 
  
addEventHandler( 'showCarCost', root, function() 
  carsCost[source] = tostring( getElementData( source, 'cost' ) ) 
  if not renderState then 
    renderState = true 
    addEventHandler( 'onClientRender', root, renderCarCost ) 
  end 
end ) 
  
function renderCarCost() 
  local x, y, z = getElementPosition( localPlayer ) 
  renderState = false 
  for car, cost in pairs( carsCost ) do 
    local vX, vY, vZ = getElementPosition( car ) 
    local sX, sY = getScreenFromWorldPosition( vX, vY, vZ + 1, 0, false ) 
    local dis = getDistanceBetweenPoints3D( x, y, z, vX, vY, vZ ) 
    if sX and dis < 11 then 
      dxDrawText( cost , sX, sY, 30, 10, nil, 3, 'arial' ) 
    elseif dis > 11 then 
      carsCost[car] = nil 
    end 
    renderState = true 
  end 
  if not renderState then 
    removeEventHandler( 'onClientRender', root, renderCarCost ) 
  end 
end 

Link to comment

НNXYЯ, КТО МНЕ ОТВЕТИЛ!!! Я же твой скрипт то знаю) Немного модифицировал ценники. Там какие то уродцы его продают, но мне знакомые дали бесплатно. Спасибо большое за ответ

Link to comment
local messages = {} 
  
addEvent ( "livetext", true ) 
  
local function removePlayerMessage( player ) 
    messages[player] = nil 
end 
  
local function onPlayerQuitWithMessage( ) 
    removePlayerMessage( source ) 
end 
  
addEventHandler ( "livetext",root, function( ) 
    messages[source] = getElementData( source, 'mess' ) 
    addEventHandler( 'onClientPlayerQuit', source, onPlayerQuitWithMessage ) 
    setTimer( removePlayerMessage, 6000, 1, source ) 
end ) 
  
addEventHandler( "onClientRender", root, function( ) 
    local x,y,z = getElementPosition( localPlayer ) 
    for player, text in pairs( messages ) 
        local px,py,pz = getElementPosition( player ) 
        local distance = getDistanceBetweenPoints3D ( x,y,z,px,py,pz ) 
        if distance <= 10 then 
            local sx,sy = getScreenFromWorldPosition ( x, y, z+0.95, 0.06 ) 
            if not sx then return end 
            --  local scale = --1/(0.3 * (distance / 30))   
            dxDrawBorderedText ( text, sx, sy - 30, sx, sy - 30, tocolor(255,255,255,255), 1.5, "arial", "center", "bottom", false, false, false )   
        end 
    end 
end ) 
  

Я предположил, что надо создать над игроком-источником события 'livetext' какой-то текст. Т.е. на серверной стороне указать игрока. Текст сообщения правильно было бы указывать в событии, а не элемент дате. Выравнивать сообщеняи можно с dxGetTextWidth.

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...