Jump to content

Enargy,

Members
  • Posts

    1,102
  • Joined

Posts posted by Enargy,

  1. Just now, Anzo said:

    @aka Blue No me da ningún error en el debug, voy a probarlo con un amigo y te aviso

    Todavía saca a todos los jugadores que estén en el asiento derecho del auto (si un jugador esta en el auto de otra persona y no en el mio, y yo le doy click al botón para sacar de asiento, teniendo yo a nadie en ese asiento, igual los sacará a todos del asiento)

    Saca el loop y colocas source en lugar de thePlayer...

  2. 5 hours ago, aka Blue said:

    La verdad, no sé si se podrían usar tablas. No he testeado a ver si cuando me desconecto y entro de nuevo sigue un valor, por lo tanto, SQLite para un dato creo que no es muy importante, podrías usar elementData, así:

    
    -- Cuando se desconecte:
    setElementData( player, "tiempo", getTickCount( ) + 86400000 )
    
    -- Cuando se conecte
    local tiempo = getElementData( player, "tiempo" ) or 0
    if getTickCount( ) > tiempo or tiempo == 0 then
    	outputChatBox( "Han pasado 24 horas" )
    	setElementData( player, "tiempo", getTickCount( ) + 86400000 )
    else
    	outputChatBox( "No han pasado 24 horas" )
    end
    

    Creo que debería funcionar.

    No va a funcionar porque se resetea el elementData.

    @Anzo usa setTimer.

    Si mal no recuerdo el timer al estar en el server side no se borra porque al estar en el cliente siempre vas a cargarlo, pero el server side tiene que sincronizarse con el cliente antes de que inicie. Eso fue lo que me había dicho hace tiempo CiBeR

  3. 8 hours ago, Dannys said:

    Te explicas como el culo, pero bueno, sólo debes hacer una condicional comparando la serial de la persona a la que se le ha de abrir el panel y la del usuario que está intentando abrirlo. Si quieres hacerlo con varias seriales puedes probar esto:

    
    local serials =  {
    	["smakdasmdkemeqkeqle32"] = true,
    	["ksoakeowqpewqpo213m121321"] = true
    }
    
    function isPlayerSerialAllowed(serial)
    	return serials[serial] and serials[serial] or false
    end
    

     

    No hace falta colocar doble tablas.

  4. 4 hours ago, aka Blue said:

    La verdad, no sé si se podrían usar tablas. No he testeado a ver si cuando me desconecto y entro de nuevo sigue un valor, por lo tanto, SQLite para un dato creo que no es muy importante, podrías usar elementData, así:

    
    -- Cuando se desconecte:
    setElementData( player, "tiempo", getTickCount( ) + 86400000 )
    
    -- Cuando se conecte
    local tiempo = getElementData( player, "tiempo" ) or 0
    if getTickCount( ) > tiempo or tiempo == 0 then
    	outputChatBox( "Han pasado 24 horas" )
    	setElementData( player, "tiempo", getTickCount( ) + 86400000 )
    else
    	outputChatBox( "No han pasado 24 horas" )
    end
    

    Creo que debería funcionar.

    No va a funcionar porque se resetea el elementData.

    @Anzo usa setTimer.

  5. 5 hours ago, aka Blue said:

    @Gaberiel

    
    function getMyData ( thePlayer, command )    local data = getAllElementData ( thePlayer )     -- get all the element data of the player who entered the command
        for k, v in pairs ( data ) do                    -- loop through the table that was returned
            outputConsole ( k .. ": " .. tostring ( v ) )             -- print the name (k) and value (v) of each element data, we need to make the value a string, since it can be of any data type
        end
    end
    addCommandHandler ( "elemdata", getMyData )
    

     

    No me acordaba que existía esa xd. Tengo que repasarme la wiki :(

  6. 10 hours ago, MarkFlash said:

    quisiera saber como puedo ver todo los elementsData desde un comando uu gracias?

     

    local elementsData = {"Ping", "FPS", "Dinero"} -- Los element datas que quieras leer.
    
    function getElementsDataFrom(element)
       	local data = {}
        local i = 0
        
        while ( #data < #elementsData ) do
            i = i + 1
            table.insert( data, { tostring(getElementData(element, elementsData[i])) } )
        end
        
        return data
    end

     

  7. 1 hour ago, aka Blue said:

    Bueno, como dice el título, estoy realizando unos pequeños cambios y lo que quiero hacer es crear nametags encima de la cabeza del jugador pero que los mismos tengan un rectángulo que se vaya poniendo más grande o más pequeño según la longitud del nombre con la función DxGetTextWidth. ¿Cómo podría hacerlo? Actualmente tengo ésto:

    
    local font = dxCreateFont( "Lato.ttf" )
    
    addEventHandler ( "onClientRender", root,
    function()
    	local playersTable = getElementsByType( 'player' )
    	for i=1, #playersTable do
    		local p = playersTable[ i ] -- Get the player
    		--if isLoggedIn( p ) then
    			local px, py, pz = getElementPosition( p ) -- Get the position
    			local cx, cy, cz = getCameraMatrix( ) -- Get the camera matrix
    			local min_distance = getDistanceBetweenPoints3D( cx, cy, cz, px, py, pz ) -- Get the min distance between 3D points
    			if min_distance < 15 then
    				if isLineOfSightClear( cx, cy, cz, px, py, pz, true, false, false, true, false, false, false, localPlayer ) then
    					local bx, by, bz = getPedBonePosition( p, 5 )
    					local x,y = getScreenFromWorldPosition( bx, by, bz + 0.3 )
    					if x and y then
    						dxDrawRectangle( x-54, y-10, x/5, y/15, tocolor(0, 0, 0, 30) )
    						dxDrawText( "[Player] "..getPlayerName( p ), x-10, y+2, x, y, tocolor(0, 0, 0), 0.85 + ( 15 - min_distance ) * 0.03, font, "center", "center", false, false, false, true )
    						dxDrawText( "[#800000Player#ffffff] "..getPlayerName( p ), x-10, y, x, y, tocolor(255, 255, 255), 0.85 + ( 15 - min_distance ) * 0.03, font, "center", "center", false, false, false, true )
    					end
    				end
    			end
    		--end
    	end
    end)
    

    Cómo se ve:

    J6tiZKv.png

    En X y el ancho del rectangulo le vas a sumar lo que hiciste en el tamaño del texto y en el ancho lo contrario.

  8. 4 hours ago, aka Blue said:

    No te recomiendo guardarlo así. Guardalo tipo 1 o 0, 1 sería igual a completado y 0 a no completado. Y no, no uses executeSQLQuery porque esas funciones solo actúan para el registry.db como bien dice la wiki:

    NOTE: This function only acts upon registry.db. Use dbQuery to query a custom SQL databse.

    Te lo digo porque creo que no se pueden guardar variables en una base de datos. Simplemente antes del guardado, realiza una condicion, es decir, si la variable es true, entonces lo guardas como '1', y en caso de que no, pues como '0'. Algo así:

    
    --Client
    e = { t = triggerServerEvent, a = addEventHandler, l = addEvent }
    
    e.a( "onClientPlayerQuit", root,
    	function( )
    		e.t( "test", localPlayer, completeAll )
    	end
    )
    
    e.l( "loadDataAccount", true )
    e.a( "loadDataAccount", root,
    	function( tabla_variables )
    		variables = tabla_variables
    	end
    )
    
    e.a( "onClientRender", root, function( )
    	if variables then
    		if variables[1]["logro_1"] == 1 then
    			guiSetText(none10, "COMPLETADO")
    		else
    			guiSetText(none10, "NO COMPLETADO")
    		end
    	end
    end
    )
    

    PD: Por favor, ordena un poco el código que no entiendo nada xd.

    No entiendo para que le cambias el nombre a las funciones xd.

  9. 13 hours ago, aka Blue said:

    Gracias @Gaberiel. Quiero preguntar... ayer hice lo siguiente, porque lo vi en un post de la sección inglesa.

    
    local sWidth, sHeight = guiGetScreenSize( )local sx1, sy1 = sWidth/1024, sHeight/768dxDrawRectangle( sx1*50, sy1*555, sx1*210, sy1*25, tocolor( 0, 0, 0, 50 ) )

    Por lo visto se dibuja bien en todas las resoluciones (lo dibujé en 800 y lo testeé en 1024 y por lo visto, quedaba en la misma posición), aunque no estoy muy seguro.

    Y bueno, mi otra duda es hacerlo relativo con la posición del ratón, ya que, ahora tengo ésto:

    
    local sx, sy = guiGetScreenSize( )local mx, my, worldx, worldy, worldz = getCursorPosition( )dxDrawRectangle( sx*(1024/sx*mx-0.004), sy*(768/sy*my), sx*(1024/sx/5), sy*(768/sy/10+0.095), tocolor( 0, 0, 0, 80 ) )dxDrawImage ( sx*mx+42, sy*my, sx/12, sy/10, 'tuerca.png', 0, 0, 0, tocolor( 255, 145, 0, 200 ) )

    Ví en la wiki, exactamente en la explicación de guiGetScreenSize que lo que se tenía que dividir era la posición del rectángulo entre la resolución de la pantalla y después multiplicarlo.

    addEventHandler("onClientRender", root,
        function()
            local sx, sy = guiGetScreenSize( )
            local mx, my = getCursorPosition( )
            local cx, cy = mx*sx, my*sy
            mx, my = cx / sx, cy / sy
            x, y = mx * sx, my * sy
            dxDrawRectangle(x, y, sx*(1024/5), sy*(768/sy/10+0.095), tocolor( 0, 0, 0, 80 ) )
            --dxDrawImage ( sx*mx+42, sy*my, sx/12, sy/10, 'tuerca.png', 0, 0, 0, tocolor( 255, 145, 0, 200 ) )
        end
    )

    CX y CY te da el resultado directo, MX y MY lo pasa a relativo. x, y fue un adicional que le agregue porque nose como piensas implementar que el cursor mueva el rectangulo con relativos asi que por eso está x, y; aunque como dije que cx, cy te los da directamente.

  10. 2 hours ago, aka Blue said:

    Buenas. Estoy utilizando un nuevo método para hacer dxDraws relativos y tengo problemas con el dxDrawRectangle, la cosa está en que, en resolución baja (800x624 si no me equivoco), se ponen más pequeños y no sé si en una mayor a la que tengo (1024x768) se verían bien o mal. Ésto es lo que uso:

    
    -- Parte normal:
    local sx, sy = guiGetScreenSize( )
    dxDrawRectangle( sx/19, sy/10+480, sx/5, sy/30, tocolor( 0, 0, 0, 50 ) )
    
    -- Con posiciones del ratón:
    local sx, sy = guiGetScreenSize( )
    local mx, my, worldx, worldy, worldz = getCursorPosition( )
    dxDrawRectangle( sx*mx-10, sy*my-3, sx/10+90, sy/10+70, tocolor( 0, 0, 0, 80 ) )
    

    Gracias de antemano.

    Eso no son relativos. y son mas pequeños porque los estas dividiendo.

  11. 3 hours ago, Slash14 said:

    ¿Y con el color?

     

    
    local group = exports.gang_system:getPlayerGang(source) local red, green, blue = unpack(exports.gang_system:getGangData(group, "color") ) or ""local message = RGBToHex(red, green, blue) .. gangTag 	outputChatBox(message, getRootElement(), 255, 255, 255, true)function RGBToHex(red, green, blue, alpha)			return string.format("#%.2X%.2X%.2X", red,green,blue)end

     

    1. local red, green, blue = unpack(exports.gang_system:getGangData(group, "color") or {255, 255, 255})
    1. 12 hours ago, saygoodbye said:

      Esto deberia servir xD

      
      texto = {"Text", "Text2", "Text3"}
      
      local randomtext = ""
      
      
      addEventHandler("onClientVehicleEnter",root,
      	function()
             randomtext = texto[math.random(1, #texto)]
             addEventHandler("onClientRender",root, drawve)
      	end
      )
      
      function drawve()
          local screenW,screenH = guiGetScreenSize()
          dxDrawText("Carga Actual: "..randomtext, (screenW * 0.3050) - 1, (screenH * 0.7844) - 1, (screenW * 0.6913) - 1, (screenH * 0.8900) - 1, tocolor(255, 255, 0, 255), 1.50, "default-bold", "center", "center", false, false, false, false, false)
      end
      

       

    Elimina el evento del render al salir del auto

  12. 5 hours ago, Tomas said:

    1. Se crea la tabla vacía.

    2. Él crea los objetos en el juego.

    3. El recurso se para y se guarda en la tabla.

    4. El recurso se vuelve a iniciar, se cargan los objetos y se limpia la tabla.

    (y así una y otra vez, si la tabla ya tiene cosas los objetos se reescribirían)

    Yo al ver tu método supe que esta correcto a simple vista pero cuando lo testee daba debug.

×
×
  • Create New...