depato123 Posted May 30, 2013 Share Posted May 30, 2013 Hola, necesito ayuda con un resource de nametag que encontré por internet, el problema es que solo sirve si alguien esta usando un vehículo y no funciona sin estar dentro de uno Aquí el link del resource: http://www.mediafire.com/download/y9vjl ... metags.zip --[[ Copyright (c) 2010 MTA: Paradise This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ]] local p = { } addEvent( "nametags:chatbubble", true ) addEventHandler( "nametags:chatbubble", root, function( state ) if source == client then -- since you can't request the state for your local player anyway, here we go for syncing it if state == true or state == false or state == 1 then if state == true then p[ source ] = true else p[ source ] = nil end local x, y, z = getElementPosition( source ) local dimension = getElementDimension( source ) local interior = getElementInterior( source ) for key, player in ipairs( getElementsByType( "player" ) ) do if player ~= source and getElementDimension( player ) == dimension and getElementInterior( player ) == interior and getDistanceBetweenPoints3D( x, y, z, getElementPosition( player ) ) < 250 then triggerClientEvent( player, "nametags:chatbubble", source, state ) end end end else -- remote player has a chat bubble, thus tell the client. if not, this is called by streaming in and can be ignored if p[ source ] then triggerClientEvent( client, "nametags:chatbubble", source, true ) end end end ) addEventHandler( "onPlayerQuit", root, function( ) p[ source ] = nil end ) --[[ Copyright (c) 2010 MTA: Paradise This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ]] local nametags = { } -- settings local _max_distance = 120 -- max. distance it's visible local _min_distance = 7.5 -- minimum distance, if a player is nearer his nametag size wont change local _alpha_distance = 20 -- nametag is faded out after this distance local _nametag_alpha = 170 -- alpha of the nametag (max.) local _bar_alpha = 120 -- alpha of the bar (max.) local _scale = 0.2 -- change this to keep it looking good (proportions) local _nametag_textsize = 0.6 -- change to increase nametag text local _chatbubble_size = 15 local _bar_width = 40 local _bar_height = 6 local _bar_border = 1.2 -- adjust settings local _, screenY = guiGetScreenSize( ) real_scale = screenY / ( _scale * 800 ) local _alpha_distance_diff = _max_distance - _alpha_distance local localPlayer = getLocalPlayer( ) addEventHandler( 'onClientRender', root, function( ) -- get the camera position of the local player local cx, cy, cz = getCameraMatrix( ) local dimension = getElementDimension( localPlayer ) local interior = getElementInterior( localPlayer ) -- loop through all players for player, chaticon in pairs( nametags ) do if getElementDimension( player ) == dimension and getElementInterior( player ) == interior and isElementOnScreen( player ) then local px, py, pz = getElementPosition( player ) local distance = getDistanceBetweenPoints3D( px, py, pz, cx, cy, cz ) if distance <= _max_distance and ( getElementData( localPlayer, "collisionless" ) or isLineOfSightClear( cx, cy, cz, px, py, pz, true, true, false, true, false, false, true, getPedOccupiedVehicle( player ) ) ) then local dz = 1 + 2 * math.min( 1, distance / _min_distance ) * _scale if isPedDucked( player ) then dz = dz / 2 end pz = pz + dz local sx, sy = getScreenFromWorldPosition( px, py, pz ) if sx and sy then local cx = sx -- how large should it be drawn distance = math.max( distance, _min_distance ) local scale = _max_distance / ( real_scale * distance ) -- visibility local alpha = ( ( distance - _alpha_distance ) / _alpha_distance_diff ) local bar_alpha = ( ( alpha < 0 ) and _bar_alpha or _bar_alpha - (alpha * _bar_alpha) ) * ( getElementData( localPlayer, "collisionless" ) and 1 or getElementAlpha( player ) / 255 ) if bar_alpha > 0 then local nametag_alpha = bar_alpha / _bar_alpha * _nametag_alpha -- draw the player's name local r, g, b = getPlayerNametagColor( player ) dxDrawText( getPlayerNametagText( player ), sx, sy, sx, sy, tocolor( r, g, b, nametag_alpha ), scale * _nametag_textsize, 'default', 'center', 'bottom' ) -- draw the health bar local width, height = math.ceil( _bar_width * scale ), math.ceil( _bar_height * scale ) local sx = sx - width / 2 local border = math.ceil( _bar_border * scale ) -- draw the armor bar local armor = math.min( 100, getPedArmor( player ) ) if armor > 0 then -- outer background dxDrawRectangle( sx, sy, width, height, tocolor( 0, 0, 0, bar_alpha ) ) -- get the colors local r, g, b = 255, 255, 255 -- inner background, which fills the whole bar but is somewhat transparent dxDrawRectangle( sx + border, sy + border, width - 2 * border, height - 2 * border, tocolor( r, g, b, 0.4 * bar_alpha ) ) -- fill it with the actual armor dxDrawRectangle( sx + border, sy + border, math.floor( ( width - 2 * border ) / 100 * getPedArmor( player ) ), height - 2 * border, tocolor( r, g, b, bar_alpha ) ) -- set the nametag below sy = sy + 1.2 * height end -- outer background dxDrawRectangle( sx, sy, width, height, tocolor( 0, 0, 0, bar_alpha ) ) -- get the colors local health = math.min( 100, getElementHealth( player ) ) local r, g, b = 255 - 255 * health / 100, 255 * health / 100, 0 -- inner background, which fills the whole bar but is somewhat transparent dxDrawRectangle( sx + border, sy + border, width - 2 * border, height - 2 * border, tocolor( r, g, b, 0.4 * bar_alpha ) ) -- fill it with the actual health dxDrawRectangle( sx + border, sy + border, math.floor( ( width - 2 * border ) / 100 * health ), height - 2 * border, tocolor( r, g, b, bar_alpha ) ) -- chat icon if the player has one if chaticon then local square = math.ceil( _chatbubble_size * scale ) local sy = sy + square / 1.9 local r, g, b = 255 - 128 * health / 100, 127 + 128 * health / 100, 127 dxDrawImage( cx, sy, square, square, chaticon == true and "chat.png" or "console.png", 0, 0, 0, tocolor( r, g, b, nametag_alpha ) ) end end end end end end end ) addEventHandler( 'onClientResourceStart', getResourceRootElement( ), function( ) for _, player in pairs( getElementsByType( 'player' ) ) do if player ~= localPlayer then -- hide the default nametag setPlayerNametagShowing( player, false ) if isElementStreamedIn( player ) then -- save the player data nametags[ player ] = false end end end end ) addEventHandler( 'onClientResourceStop', getResourceRootElement( ), function( ) -- handle stopping this resource for player in pairs( nametags ) do -- restore the nametag setPlayerNametagShowing( player, true ) -- remove saved data nametags[ player ] = nil end end ) addEventHandler ( 'onClientPlayerJoin', root, function( ) -- hide the nametag setPlayerNametagShowing( source, false ) end ) addEventHandler ( 'onClientElementStreamIn', root, function( ) if source ~= localPlayer and getElementType( source ) == "player" then -- save the player data nametags[ source ] = false triggerServerEvent( "nametags:chatbubble", source ) end end ) addEventHandler ( 'onClientElementStreamOut', root, function( ) if nametags[ source ] then -- cleanup nametags[ source ] = nil end end ) addEventHandler ( 'onClientPlayerQuit', root, function( ) if nametags[ source ] then -- cleanup nametags[ source ] = nil end end ) -- local oldConsoleState = false local oldInputState = false addEventHandler( "onClientRender", root, function( ) local newConsoleState = isConsoleActive( ) if newConsoleState ~= oldConsoleState then triggerServerEvent( "nametags:chatbubble", localPlayer, newConsoleState and 1 or false ) oldConsoleState = newConsoleState else local newInputState = isChatBoxInputActive( ) if newInputState ~= oldInputState then triggerServerEvent( "nametags:chatbubble", localPlayer, newInputState ) oldInputState = newInputState end end end ) addEvent( "nametags:chatbubble", true ) addEventHandler( "nametags:chatbubble", root, function( state ) if nametags[ source ] ~= nil and ( state == true or state == false or state == 1 ) then nametags[ source ] = state end end ) Edit: me olvide, esos 2 .lua no se que función cumplen, la verdad creo que es muy avanzado pero si tiene solución al problema que les dije estaré muy agradecido Link to comment
Arsilex Posted May 30, 2013 Share Posted May 30, 2013 --[[ Copyright (c) 2010 MTA: Paradise This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ]] local nametags = { } -- settings local _max_distance = 120 -- max. distance it's visible local _min_distance = 7.5 -- minimum distance, if a player is nearer his nametag size wont change local _alpha_distance = 20 -- nametag is faded out after this distance local _nametag_alpha = 170 -- alpha of the nametag (max.) local _bar_alpha = 120 -- alpha of the bar (max.) local _scale = 0.2 -- change this to keep it looking good (proportions) local _nametag_textsize = 0.6 -- change to increase nametag text local _chatbubble_size = 15 local _bar_width = 40 local _bar_height = 6 local _bar_border = 1.2 -- adjust settings local _, screenY = guiGetScreenSize( ) real_scale = screenY / ( _scale * 800 ) local _alpha_distance_diff = _max_distance - _alpha_distance local localPlayer = getLocalPlayer( ) addEventHandler( 'onClientRender', root, function( ) -- get the camera position of the local player local cx, cy, cz = getCameraMatrix( ) local dimension = getElementDimension( localPlayer ) local interior = getElementInterior( localPlayer ) -- loop through all players for player, chaticon in pairs( nametags ) do if isElement( player ) then if getElementDimension( player ) == dimension and getElementInterior( player ) == interior and isElementOnScreen( player ) then local px, py, pz = getElementPosition( player ) local distance = getDistanceBetweenPoints3D( px, py, pz, cx, cy, cz ) if distance <= _max_distance and ( getElementData( localPlayer, "collisionless" ) or isLineOfSightClear( cx, cy, cz, px, py, pz, true, false, false, true, false, false, true ) ) then local dz = 1 + 2 * math.min( 1, distance / _min_distance ) * _scale if isPedDucked( player ) then dz = dz / 2 end pz = pz + dz local sx, sy = getScreenFromWorldPosition( px, py, pz ) if sx and sy then local cx = sx -- how large should it be drawn distance = math.max( distance, _min_distance ) local scale = _max_distance / ( real_scale * distance ) -- visibility local alpha = ( ( distance - _alpha_distance ) / _alpha_distance_diff ) local bar_alpha = ( ( alpha < 0 ) and _bar_alpha or _bar_alpha - (alpha * _bar_alpha) ) * ( getElementData( localPlayer, "collisionless" ) and 1 or getElementAlpha( player ) / 255 ) if bar_alpha > 0 then local nametag_alpha = bar_alpha / _bar_alpha * _nametag_alpha -- draw the player's name local r, g, b = getPlayerNametagColor( player ) dxDrawText( getPlayerNametagText( player ), sx, sy, sx, sy, tocolor( r, g, b, nametag_alpha ), scale * _nametag_textsize, 'default', 'center', 'bottom' ) -- draw the health bar local width, height = math.ceil( _bar_width * scale ), math.ceil( _bar_height * scale ) local sx = sx - width / 2 local border = math.ceil( _bar_border * scale ) -- draw the armor bar local armor = math.min( 100, getPedArmor( player ) ) if armor > 0 then -- outer background dxDrawRectangle( sx, sy, width, height, tocolor( 0, 0, 0, bar_alpha ) ) -- get the colors local r, g, b = 255, 255, 255 -- inner background, which fills the whole bar but is somewhat transparent dxDrawRectangle( sx + border, sy + border, width - 2 * border, height - 2 * border, tocolor( r, g, b, 0.4 * bar_alpha ) ) -- fill it with the actual armor dxDrawRectangle( sx + border, sy + border, math.floor( ( width - 2 * border ) / 100 * getPedArmor( player ) ), height - 2 * border, tocolor( r, g, b, bar_alpha ) ) -- set the nametag below sy = sy + 1.2 * height end -- outer background dxDrawRectangle( sx, sy, width, height, tocolor( 0, 0, 0, bar_alpha ) ) -- get the colors local health = math.min( 100, getElementHealth( player ) ) local r, g, b = 255 - 255 * health / 100, 255 * health / 100, 0 -- inner background, which fills the whole bar but is somewhat transparent dxDrawRectangle( sx + border, sy + border, width - 2 * border, height - 2 * border, tocolor( r, g, b, 0.4 * bar_alpha ) ) -- fill it with the actual health dxDrawRectangle( sx + border, sy + border, math.floor( ( width - 2 * border ) / 100 * health ), height - 2 * border, tocolor( r, g, b, bar_alpha ) ) -- chat icon if the player has one if chaticon then local square = math.ceil( _chatbubble_size * scale ) local sy = sy + square / 1.9 local r, g, b = 255 - 128 * health / 100, 127 + 128 * health / 100, 127 dxDrawImage( cx, sy, square, square, chaticon == true and "chat.png" or "console.png", 0, 0, 0, tocolor( r, g, b, nametag_alpha ) ) end end end end end end end end ) addEventHandler( 'onClientResourceStart', getResourceRootElement( ), function( ) for _, player in pairs( getElementsByType( 'player' ) ) do if player ~= localPlayer then -- hide the default nametag setPlayerNametagShowing( player, false ) if isElementStreamedIn( player ) then -- save the player data nametags[ player ] = false end end end end ) addEventHandler( 'onClientResourceStop', getResourceRootElement( ), function( ) -- handle stopping this resource for player in pairs( nametags ) do -- restore the nametag setPlayerNametagShowing( player, true ) -- remove saved data nametags[ player ] = nil end end ) addEventHandler ( 'onClientPlayerJoin', root, function( ) -- hide the nametag setPlayerNametagShowing( source, false ) end ) addEventHandler ( 'onClientElementStreamIn', root, function( ) if source ~= localPlayer and getElementType( source ) == "player" then -- save the player data nametags[ source ] = false triggerServerEvent( "nametags:chatbubble", source ) end end ) addEventHandler ( 'onClientElementStreamOut', root, function( ) if nametags[ source ] then -- cleanup nametags[ source ] = nil end end ) addEventHandler ( 'onClientPlayerQuit', root, function( ) if nametags[ source ] then -- cleanup nametags[ source ] = nil end end ) -- local oldConsoleState = false local oldInputState = false addEventHandler( "onClientRender", root, function( ) local newConsoleState = isConsoleActive( ) if newConsoleState ~= oldConsoleState then triggerServerEvent( "nametags:chatbubble", localPlayer, newConsoleState and 1 or false ) oldConsoleState = newConsoleState else local newInputState = isChatBoxInputActive( ) if newInputState ~= oldInputState then triggerServerEvent( "nametags:chatbubble", localPlayer, newInputState ) oldInputState = newInputState end end end ) addEvent( "nametags:chatbubble", true ) addEventHandler( "nametags:chatbubble", root, function( state ) if nametags[ source ] ~= nil and ( state == true or state == false or state == 1 ) then nametags[ source ] = state end end ) Link to comment
Recommended Posts