aka Blue Posted August 26, 2016 Share Posted August 26, 2016 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. Link to comment
aka Blue Posted August 26, 2016 Author Share Posted August 26, 2016 + 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. Link to comment
Tomas Posted August 27, 2016 Share Posted August 27, 2016 Es mejor tener un script que compile cualquier archivo .lua a .luac :v Link to comment
aka Blue Posted August 27, 2016 Author Share Posted August 27, 2016 Es mejor tener un script que compile cualquier archivo .lua a .luac :v Eso es lo que estoy intentando hacer. ¿Debo hacer un loop con getResources y getResourceScripts, ¿cierto? Gracias @El_Zorro Link to comment
Tomas Posted August 27, 2016 Share Posted August 27, 2016 Es mejor tener un script que compile cualquier archivo .lua a .luac :v 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. Link to comment
aka Blue Posted August 27, 2016 Author Share Posted August 27, 2016 Es mejor tener un script que compile cualquier archivo .lua a .luac :v 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 Link to comment
aka Blue Posted August 28, 2016 Author Share Posted August 28, 2016 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 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