Danate Posted May 12, 2014 Share Posted May 12, 2014 Подскажите как приаттачить текст к игроку? Дайте пожалуйста пример, потому что сколько искал на форуме, не нашел нормального примера. Вот мой исходник 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
TheNormalnij Posted May 12, 2014 Share Posted May 12, 2014 Текст не элемент, его через 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
Danate Posted May 13, 2014 Author Share Posted May 13, 2014 НNXYЯ, КТО МНЕ ОТВЕТИЛ!!! Я же твой скрипт то знаю) Немного модифицировал ценники. Там какие то уродцы его продают, но мне знакомые дали бесплатно. Спасибо большое за ответ Link to comment
TheNormalnij Posted May 14, 2014 Share Posted May 14, 2014 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now