Danate Posted May 12, 2014 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) http://vk.com/danate_omsk http://vk.com/danate_res skype: migelezz
TheNormalnij Posted May 12, 2014 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 TheNormalnij.de
Danate Posted May 13, 2014 Author Posted May 13, 2014 НNXYЯ, КТО МНЕ ОТВЕТИЛ!!! Я же твой скрипт то знаю) Немного модифицировал ценники. Там какие то уродцы его продают, но мне знакомые дали бесплатно. Спасибо большое за ответ http://vk.com/danate_omsk http://vk.com/danate_res skype: migelezz
Danate Posted May 13, 2014 Author Posted May 13, 2014 http://vk.com/danate_omsk http://vk.com/danate_res skype: migelezz
TheNormalnij Posted May 14, 2014 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. TheNormalnij.de
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