Jump to content

aka Blue

Members
  • Posts

    2,106
  • Joined

  • Last visited

  • Days Won

    6

Everything posted by aka Blue

  1. Como puedes ver, abajo pone una nota que dice se pone así. Básicamente lo que hace esto es cambiar el alpha para realizar un efecto de parpadeo. Está bastante bien, lo he utilizado en un velocímetro para hacer el efecto de los intermitentes, y también, en un panel para darle como una 'animación' a los botones.
  2. No quiero que suene mal (que va a sonar mal), pero, si no sabe como usar una función useful, crees que podrá añadir un elementData en un script, con sus valores (subir/bajar vida)? Yo no entiendo de ese script porque nunca lo usé, podrías pasarle el código o algo.
  3. ¿Why are you making two posts? Try this: local spike = { } local blows = { } addCommandHandler("sting", function(player) if (player) then local x,y,z = getElementPosition(player) local xr,yr,zr = getElementRotation(player) px, py, pz = getElementPosition(player) prot = getPedRotation(player) local offsetRot = math.rad(prot+90) local vx = px + 5 * math.cos(offsetRot) local vy = py + 5 * math.sin(offsetRot) local vx2 = px + 2 * math.cos(offsetRot) local vy2 = py + 2 * math.sin(offsetRot) local vx3 = px + 3 * math.cos(offsetRot) local vy3 = py + 3 * math.sin(offsetRot) local vx4 = px + 4 * math.cos(offsetRot) local vy4 = py + 4 * math.sin(offsetRot) local vz = pz + 2 local vrot = prot+180 spike[player] = createObject(2892,vx,vy,z-0.95,0,0,vrot) setObjectScale(spike,0.7) local x2, y2, z2 = getElementPosition(spike) local blows[player] = {createColTube (x2, y2, z2-0.25, 0.9,2), createColTube (vx2, vy2, z2-0.25, 0.9,2), createColTube (vx3, vy3, z2-0.25, 0.9,2), createColTube (vx4, vy4, z2-0.25, 0.9,2) } addEventHandler("onColShapeHit",blows[player], wylaczKola) end end) function wylaczKola (player) if player and getElementType(player) == "player" then if isPedInVehicle(player) then local pveh = getPedOccupiedVehicle(player) setVehicleWheelStates(pveh,1,1,1,1) end end end
  4. Remove the ',' of function(),
  5. For this you must use onClientColShapeHit. By the way, i think you can use this for server-side(not tested): local spike = { } local blows = { } addCommandHandler("sting", function(player) if (player) then local x,y,z = getElementPosition(player) local xr,yr,zr = getElementRotation(player) px, py, pz = getElementPosition(player) prot = getPedRotation(player) local offsetRot = math.rad(prot+90) local vx = px + 5 * math.cos(offsetRot) local vy = py + 5 * math.sin(offsetRot) local vx2 = px + 2 * math.cos(offsetRot) local vy2 = py + 2 * math.sin(offsetRot) local vx3 = px + 3 * math.cos(offsetRot) local vy3 = py + 3 * math.sin(offsetRot) local vx4 = px + 4 * math.cos(offsetRot) local vy4 = py + 4 * math.sin(offsetRot) local vz = pz + 2 local vrot = prot+180 spike[player] = createObject(2892,vx,vy,z-0.95,0,0,vrot) setObjectScale(spike,0.7) local x2, y2, z2 = getElementPosition(spike) local blows[player] = {createColTube (x2, y2, z2-0.25, 0.9,2), createColTube (vx2, vy2, z2-0.25, 0.9,2), createColTube (vx3, vy3, z2-0.25, 0.9,2), createColTube (vx4, vy4, z2-0.25, 0.9,2) } addEventHandler("onColShapeHit",blows[player], wylaczKola) end end) function wylaczKola (player) if player and getElementType(player) == "player" then if isPedInVehicle(player) then local pveh = getPedOccupiedVehicle(player) setVehicleWheelStates(pveh,1,1,1,1) end end end
  6. Esta nueva versión del script Lua Compiler añade un simple panel en el juego con el cual podremos empezar a compilar nuestros archivos de una forma más compacta y simple. Lo único que deberemos hacer para cargar nuestros archivos es añadirlos a la carpeta tocompile y en la tabla tocompile dentro del juego, así: local tocompile = { "archivo.lua", "archivo.lua"... } En el panel se añade posibilidad de eliminar el archivo original en caso de que queramos, marcando una simple checkbox, hará que el archivo original se elimine completamente de la carpeta tocompile. Los archivos que se cargan en la gui serán solamente los existentes. En caso de que no haya un archivo existente en la carpeta o en la tabla, no se leerá. Código server.lua local tocompile = { "archivo.lua" } -- Archivos de la carpeta tocompile local command = get( 'command' ) function fileSave(filePath, fileContent) if fileExists(filePath) then fileDelete(filePath) end local file = fileCreate(filePath) fileWrite(file, fileContent) fileClose(file) end function fileLoad(filePath) if fileExists(filePath) then local file = fileOpen(filePath) local fileContent = fileRead(file, fileGetSize(file)) fileClose(file) return fileContent end end function compileScript( script, borrar ) local borrar = tonumber( borrar ) if script and borrar then local name = tostring( script ) local to = "luac_"..name if fileExists( ":compiler/tocompile/"..name ) then if borrar == 1 then local r = fileDelete( ":compiler/tocompile/"..name ) if r then outputChatBox( "#FFFFFFFile #00ff00"..name.." #FFFFFFsuccefully #800000deleted #fffffffrom the script", source, 255, 255, 255, true ) end end if not ( fileExists( ":compiler/compiled/"..to ) ) then local result = fetchRemote("https://luac.multitheftauto.com/?compile=1&debug=0&obfuscate=1", function(data) fileSave(":compiler/compiled/"..to, data) end, fileLoad(name), true) if result then outputChatBox( "#FFFFFFFile #00ff00"..name.." #FFFFFFsuccefully compiled. New file: #00ff00"..to.."", source, 255, 255, 255, true ) outputDebugString( "File "..name.." succefully compiled. New file: "..to.."" ) else outputDebugString( "File "..name.." can not be compiled" ) outputChatBox( "#ffffff[#800000Compiler v.1.0#ffffff] File #00ff00"..name.." #ffffffcan not be compiled." ) end else outputChatBox( "#FFFFFFFile #00ff00"..name.." #FFFFFFexists and its #800000compiled#ffffff, look inside #00ff00compiled #FFFFFFfolder", source, 255, 255, 255, true ) showCursor( source, false ) end else outputDebugString( "File "..name.." does not exists" ) outputChatBox( "[Compiler v.1.0] File "..name.." does not exists." ) end end return false end addEvent( "compiler:compile", true ) addEventHandler( "compiler:compile", getRootElement( ), compileScript ) addCommandHandler( command, function( player ) if #tocompile > 0 then local enviar_tabla = { } for i=1, #tocompile do local name = tocompile[i] if fileExists( ":compiler/tocompile/"..name ) then local file = fileOpen( ":compiler/tocompile/"..name ) local size = fileGetSize( file ) table.insert( enviar_tabla, { name = name, size = size } ) fileClose( file ) end end triggerClientEvent( player, "compiler:opengui", player, enviar_tabla ) enviar_tabla = { } else outputChatBox( "[Compiler v.1.0] There are not files to compile." ) end end ) Código client.lua local sx, sy = guiGetScreenSize( ) local sourceX, sourceY = 1366, 768 local open function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing ( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then return true else return false end end function createGUIElements( ) checkbox_delete = guiCreateCheckBox( (743/sourceX)*sx, (592/sourceY)*sy, (22/sourceX)*sx, (15/sourceY)*sy, "", true, false) resources_gridlist = guiCreateGridList( (748/sourceX)*sx, (302/sourceY)*sy, (246/sourceX)*sx, (285/sourceY)*sy, false) guiGridListAddColumn(resources_gridlist, "File", 0.5) guiGridListAddColumn(resources_gridlist, "Size", 0.5) addEventHandler( "onClientRender", root, drawDX ) open = true end function removeGUIElements( ) destroyElement( resources_gridlist ) destroyElement( checkbox_delete ) removeEventHandler( "onClientRender", root, drawDX ) showCursor( false ) open = false end function drawDX () local selected = guiGridListGetSelectedItem( resources_gridlist ) dxDrawRectangle( (732/sourceX)*sx, (243/sourceY)*sy, (276/sourceX)*sx, (405/sourceY)*sy, tocolor(0, 0, 0, 131), false) dxDrawImage( (738/sourceX)*sx, (243/sourceY)*sy, (270/sourceX)*sx, (55/sourceY)*sy, ":compiler/compiler.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) if isMouseInPosition( (743/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy ) then dxDrawRectangle( (743/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy, tocolor(255, 255, 255, 131), false) dxDrawText("Compile", (743/sourceX)*sx, (614/sourceY)*sy, (840/sourceX)*sx, (637/sourceY)*sy, tocolor(0, 0, 0, 255), (sy/sourceY)*1.00, "default-bold", "center", "center", false, false, false, false, false) else dxDrawRectangle( (743/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy, tocolor(0, 0, 0, 131), false) dxDrawText("Compile", (743/sourceX)*sx, (614/sourceY)*sy, (840/sourceX)*sx, (637/sourceY)*sy, tocolor(255, 255, 255, 255), (sy/sourceY)*1.00, "default-bold", "center", "center", false, false, false, false, false) end if isMouseInPosition( (897/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy ) then dxDrawRectangle( (897/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy, tocolor(255, 255, 255, 131), false) dxDrawText("Close", (897/sourceX)*sx, (614/sourceY)*sy, (994/sourceX)*sx, (638/sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, "default-bold", "center", "center", false, false, false, false, false) else dxDrawRectangle( (897/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy, tocolor(0, 0, 0, 131), false) dxDrawText("Close", (897/sourceX)*sx, (614/sourceY)*sy, (994/sourceX)*sx, (638/sourceY)*sy, tocolor(255, 255, 255, 255), 1.00, "default-bold", "center", "center", false, false, false, false, false) end if selected then local file_name = guiGridListGetItemText( resources_gridlist, selected, 1 ) dxDrawText("Delete "..file_name.." when finish compile", (775/sourceX)*sx, (593/sourceY)*sy, (712/sourceX)*sx, (607/sourceY)*sy, tocolor(255, 255, 255, 255), (sy/sourceY)*0.70, "default-bold", "left", "center", false, false, false, false, false) end end addEventHandler( "onClientClick", root, function( button, state ) if button == "left" and state == "down" and open == true then local boton_cerrar = isMouseInPosition( (897/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy ) local boton_compilar = isMouseInPosition( (743/sourceX)*sx, (614/sourceY)*sy, (97/sourceX)*sx, (24/sourceY)*sy ) if boton_cerrar then removeGUIElements( ) end if boton_compilar then local selected = guiGridListGetSelectedItem( resources_gridlist ) local file = guiGridListGetItemText( resources_gridlist, selected, 1 ) if selected and file then if guiCheckBoxGetSelected( checkbox_delete ) then triggerServerEvent( "compiler:compile", getLocalPlayer( ), file, 1 ) removeGUIElements( ) showCursor( false ) else triggerServerEvent( "compiler:compile", getLocalPlayer( ), file, 0 ) removeGUIElements( ) showCursor( false ) end else outputChatBox( "Select a resource from the list or close the panel.", 255, 145, 0 ) end end end end ) addEvent( "compiler:opengui", true ) addEventHandler( "compiler:opengui", getRootElement( ), function( table ) if open == nil or open == false then createGUIElements( ) for i=1, #table do local data = table[i] local file = fileExists( ":compiler/tocompile/"..data.name ) if fileExists then local row = guiGridListAddRow( resources_gridlist ) guiGridListSetItemText(resources_gridlist, row, 1, data.name, false, false) guiGridListSetItemText(resources_gridlist, row, 2, data.size, false, false) end end showCursor( true ) end end ) Código meta.xml Descarga la imagen del script aquí: Click Descarga el script hecho: Aqui
  7. ¿Cómo que no funcionó? ¿Usaste bien la función? Para la barra de la vida ya es un poco más complicado, debes dibujar 3 rectángulos: Rectángulo base que haga una base. Rectángulo sombra un rectángulo con un color más oscuro que el principal para hacer de 'sombra'. Rectángulo de vida con cálculos, un rectángulo principal con color rojo o el que quieras, haciendo referencia a la vida que vaya cambiando su anchura según la vida del boss. Para usar dxDrawTextOnElement para lo que tú deseas hacer, debes usar esto: dxDrawTextOnElement( elemento, texto, alto, distancia minima, r, g, b, alpha, tamaño del texto, fuente ) dxDrawTextOnElement es una función, no te dibujará el nametag mágicamente.
  8. Eso es lo que estoy intentando hacer. ¿Debo hacer un loop con getResources y getResourceScripts, ¿cierto? Gracias @El_Zorro No es necesario utilizar MTA, con un script BAT o SH se puede hacer mas simple sin sobrecargar MTA. Si, bueno, eso es fácil también. Pero la idea para esto es que se haga dentro del juego con un panel
  9. Eso es lo que estoy intentando hacer. ¿Debo hacer un loop con getResources y getResourceScripts, ¿cierto? Gracias @El_Zorro
  10. + Retirado el comando y añadido un panel DX para la selección de scripts a compilar, con el banner del script incluido. + Añadido setting en el archivo meta.xml el cual nos permite cambiar el nombre del comando para el uso del sistema. + Comprobaciones de si el archivo existe o no en ambos lados del script. Tanto cliente como servidor. + Carpetas individuales en la estructura de archivos del script, que nos permite almacenar los archivos a compilar en una de las carpetas y archivos compilados en otra de las carpetas. + Checkbox que al seleccionarlo nos permita borrar el archivo de la carpeta tras su compilación, y, quedarnos con el script compilado. + Apartado size en la gridlist, indicando el tamaño que tiene el archivo mediante la función fileGetSize, + En caso de que el archivo en la tabla no exista, no se enviará a la gridlist lado cliente.
  11. Este pequeño sistema de compilación de scripts en el juego, nos permite, gracias al uso de tablas dentro del código del mismo, compilar varios scritps a la vez, utilizando la API que nos ofrece la plataforma Multi Theft Auto para la compilación de nuestros scripts. El sistema cuenta solo con un comando simple, el cual puede ser utilizado tanto por el jugador dentro del juego (editando la línea 26, agregando nuestro nombre), como por la consola, que es el 'jugador' o 'elemento' que tiene permisos por defecto para usar el comando. /compile [0 o 1]: Este comando comando nos permite iniciar la compilación de nuestros scripts, así también elegir entre 0 o 1 el Extra obfuscation, si queremos añadirlo a la compilación de nuestro script. Código server.lua server-side tocompile = { "archivo_a_compilar.lua" } -- Los archivos a compilar se deben añadir en esta tabla con el orden indicado -- "archivo.lua", "archivo.lua"... function fileSave(filePath, fileContent) if fileExists(filePath) then fileDelete(filePath) end local file = fileCreate(filePath) fileWrite(file, fileContent) fileClose(file) end function fileLoad(filePath) if fileExists(filePath) then local file = fileOpen(filePath) local fileContent = fileRead(file, fileGetSize(file)) fileClose(file) return fileContent end end addCommandHandler( "compile", function( player, _, obfuscate ) if getPlayerName( player ) == "Console" then if tonumber( obfuscate ) then for i=1, #tocompile do local name = tocompile[ i ] local to = "luac_"..name if fetchRemote("https://luac.multitheftauto.com/?compile=1&debug=0&obfuscate="..obfuscate.."", function(data) fileSave(to, data) end, fileLoad(name), true) then outputDebugString( "Script "..name.." succefully compiled. Obfuscate: "..obfuscate ) else outputDebugString( "Script "..name.." can not be found or compiled" ) end end else outputDebugString( "Set an obfuscate numer (0 = nil, 1 = some)" ) end end end ) Código meta.xml Aviso: El script necesita permisos para el uso de fetchRemote. Utiliza aclrequest allow [nombre] all para darle todos los permisos. Uso del comando desde la consola.
  12. That is wrong. You must use table.insert( table, index, value ) From Lua 5.1 Reference Manual table.insert (table, [pos,] value) Yo can make an idea with that, i think... local table = { } addCommandHandler( "addtotable", function( player, cmd, index, value ) local index = tonumber( value ) local value = tostring( value ) if value and index then if table[ player ][ index ] == nil then table[ player ][ index ] = value else local value_in_index = table[ player ][ index ].value outputChatBox( "Table index isnt empty" ) outputChatBox( "Value: "..tostring( value_in_index ) ) end end end )
  13. Pues lo mismo, aritmética Bueno, gracias por la ayuda Tomas. Quiero mejorar el sistema de maleteros que ando compartiendo en recursos y quiero hacer algo nuevo, con un panel dx que muestre los slots y demás PD: Con las imágenes de las armas guardadas, claro
  14. Me refiero a mouse_wheel_up y mouse_wheel_down, algo parecido a lo que dijiste sí, una función que haga que baje hacia abajo y tal
  15. Muchas gracias Tomas. No quiero crear un tema nuevo ya que va relacionado con este y puede ser un poco más complicado, pero, ¿cómo se podría hacer un dx scroll? Gracias por la ayuda
  16. startX, startY, width, height, iPR = 150, 150, 75, 75, 3 El tres es la cantidad de rectángulos por celda, lo otro son las posiciones que tienes que adaptar. Si, gracias, ya lo hice jaja. ¿Cómo podría juntarlos un poco más? Ya que cuando hago el cálculo para todas las resoluciones queda un espacio bastante grande entre ellos
  17. @Simple01 sí, revisé el tema del gui_c.lua de paradise pero tiene muchas cosas las cuales me llegan a liar (con el tema de los panes, edits y todas esas calculaciones de width, maxlines...). @Tomas Muchas gracias por la ayuda, funcionó. Si no te es molestia, me gustaría saber un poco como se llega a utilizar, para poder ajustarlo a todas las resoluciones y colocarlo como quiero
  18. Buenas. Vengo a pedir ayuda sobre algo que quiero llevar a cabo, que se trata de un panel en el cual se muestren 'recuadros' que por cada x recuadros les suba la y (osea, bajen debajo del primero, segundo y demás). No sé si me expresé bastante bien, por ello dejaré una imagen de un 'boceto' sobre lo que quiero hacer:
  19. Saca los datos de la tabla y con un loop usas: tabla[index] = { colshape = createColshape, x = x, y = y, dueno = ... }
  20. Usando table.insert, insertas un valor en una tabla. Si ya tienes eso creado, ¿para qué quieres añadirlo con table.insert? Simplemente edita la línea, no tiene sentido... En caso de que quieras hacer lo que anteriormente mencioné, hazte una idea con ésto: local datos = { } addCommandHandler( "insertardato", function( player, cmd, dato ) if dato and tostring( dato ) then table.insert( datos, dato ) end end ) PD: Y como consejo, ordena los códigos usando tabulaciones.
  21. I do not want to offend you but.. ¿5$ for a simple and compiled( ) script?
  22. Ya que esto está algo muerto, aquí revivo con un pequeño script de walkie-talkies por frecuencias. Comandos: /frecuencia [frecuencia(numero)]: En la parte superior del script veremos una variable llamada maxima_frecuencia, con ella, podremos ajustar, como bien dice su nombre, la frecuencia máxima admitida y con el comando podremos entrar o salir de una, poniendo el numero de la misma. /r [mensaje]: Con este comando enviaremos a todos los que están en nuestra frecuencia un mensaje. Código server.lua local frecuencia = { } local maxima_frecuencia = 6699 -- Configurable addCommandHandler( "frecuencia", function( player, commandName, frecuencia ) local frecuencia = tonumber( frecuencia ) if frecuencia then if frecuencia <= tonumber( maxima_frecuencia ) then if frecuencia[ player ] == nil then frecuencia[ player ] = { } end outputChatBox( "#FFFFFFTu frecuencia fue cambiada a #00FF00"..tonumber( frecuencia ), player, 255, 255, 255, true ) -- True al final para los hexcode frecuencia[ player ] = frecuencia else outputChatBox( "Debes introducir una frecuencia menor o igual a "..tonumber( maxima_frecuencia ), player, 255, 145, 0 ) end else outputChatBox( "Syntax: /"..commandName.." [frecuencia de 0 a "..tonumber( maxima_frecuencia ).."]", player, 255, 255, 255 ) end end ) addCommandHandler( "r", function( player, commandName, ... ) local mensaje = table.concat( { ... }, " " ) local frecuencia = tonumber( frecuencia[ player ] ) if frecuencia then if mensaje and #mensaje >= 2 then -- Si el mensaje es mayor o igual a 2 carácteres local jugadores = getElementsByType( 'player' ) for i=1, #jugadores do local jugador = jugadores[i] local frecuencia_jugador = frecuencia[ jugador ] if frecuencia_jugador == frecuencia then outputChatBox( "#FFFFFF[RADIO]#3973ac"..getPlayerName( player ).." dice: "..mensaje, jugador, 255, 255, 255, true ) end end else outputChatBox( "Debes usar /r [mensaje mayor a 2 carácteres]", player, 255, 145, 0 ) end else outputChatBox( "[Error] No tienes una frecuencia asignada", player, 255, 145, 0 ) outputChatBox( "#FFFFFFUsa #00FF00/frecuencia [numero] #FFFFFFpara asignar una", player, 255, 255, 255, true ) end end ) Archivo meta.xml
  23. Nono, ya se establece en el slot libre, el problema es el mensaje de error cuando no hay slots libres, se muestra aunque haya slots libres.
  24. Gracias Tomas, justo estaba buscando el uso de break jaja. Ahora el problema me lo da aquí: if contenido_caja[ caja ][ i ] == nil then contenido_caja[ caja ][ i ] = { arma = arma, ammo = ammo } takeWeapon( player, arma ) outputChatBox( "Has guardado un arma en la caja", player, 0, 255, 0 ) else outputChatBox( "Todos los slots están ocupados", player, 255, 0, 0 ) end Cada vez que le doy click me sale el mensaje de 'Todos los slots están ocupados', quiero hacer que salga unicamente si no hay ningún slot en nil.
×
×
  • Create New...