Lua compilation API: Difference between revisions
Jump to navigation
Jump to search
(Improve example.) |
(Improve lua example.) |
||
| Line 50: | Line 50: | ||
===Lua example=== | ===Lua example=== | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
local | -- This example allows you to compile all resource scripts by using /compilelua command. | ||
local | |||
local | local compileEnabled = 1 | ||
local | local debugLevel = 0 | ||
local obfuscateLevel = 3 | |||
local apiCodes = { | |||
["ERROR Nothing to do - Please select compile and/or obfuscate"] = true, | ["ERROR Nothing to do - Please select compile and/or obfuscate"] = true, | ||
["ERROR Could not compile file"] = true, | ["ERROR Could not compile file"] = true, | ||
| Line 62: | Line 63: | ||
} | } | ||
local function | local function loadScriptsFromMeta() | ||
local metaFile = xmlLoadFile("meta.xml") | |||
if not metaFile then | |||
outputDebugString("[LUAC]: Failed to load scripts from meta.", 4, 255, 127, 0) | |||
return false | |||
end | |||
local metaChildren = xmlNodeGetChildren(metaFile) | |||
local scriptsTable = {} | |||
for nodeID = 1, #metaChildren do | |||
local metaNode = metaChildren[nodeID] | |||
local fileSrc = xmlNodeGetAttribute(metaNode, "src") | |||
if fileSrc then | |||
local luaScript = stringFind(fileSrc, ".lua") | |||
if luaScript then | |||
scriptsTable[#scriptsTable + 1] = fileSrc | |||
end | |||
end | |||
end | |||
xmlUnloadFile(metaFile) | |||
return scriptsTable | |||
end | |||
local function loadResourceScript(pPath) | |||
local scriptExists = fileExists(pPath) | |||
if not scriptExists then | |||
outputDebugString("[LUAC]: '"..pPath.."' doesn't exists.", 4, 255, 127, 0) | |||
return false | |||
end | |||
local scriptHandler = fileOpen(pPath) | |||
if not scriptHandler then | |||
outputDebugString("[LUAC]: '"..pPath.."' failed to open.", 4, 255, 127, 0) | |||
return false | |||
end | |||
local scriptSize = fileGetSize(scriptHandler) | |||
local scriptRaw = fileRead(scriptHandler, scriptSize) | |||
fileClose(scriptHandler) | |||
return scriptRaw | |||
end | end | ||
local function | local function onScriptCompile(pCompiledLUA, pErrors, pScript) | ||
local compileSuccess = pErrors == 0 | |||
if not compileSuccess then | |||
outputDebugString("[LUAC]: '"..pScript.."' failed to compile.", 4, 255, 127, 0) | |||
return false | |||
end | |||
local compileError = apiCodes[pCompiledLUA] | |||
if compileError then | |||
outputDebugString("[LUAC]: '"..pScript.."' failed to compile - "..pCompiledLUA, 4, 255, 127, 0) | |||
return false | |||
end | |||
local compiledScript = fileCreate("luac/"..pScript) | |||
if not compiledScript then | |||
outputDebugString("[LUAC]: '"..pScript.."' failed to create.", 4, 255, 127, 0) | |||
return false | |||
end | |||
fileWrite(compiledScript, pCompiledLUA) | |||
fileClose(compiledScript) | |||
outputDebugString("[LUAC]: '"..pScript.."' compiled successfully.", 4, 255, 127, 0) | |||
return true | |||
end | end | ||
function compileLuaScripts(pPlayer) | |||
local fetchURL = stringFormat("https://luac.mtasa.com/?compile=%i&debug=%i&obfuscate=%i", compileEnabled, debugLevel, obfuscateLevel) | |||
local resourceScripts = loadScriptsFromMeta() | |||
local postData = true | |||
for scriptID = 1, #resourceScripts do | |||
local scriptPath = resourceScripts[scriptID] | |||
local scriptRaw = loadResourceScript(scriptPath) | |||
fetchRemote(fetchURL, onScriptCompile, scriptRaw, postData, scriptPath) | |||
end | |||
end | end | ||
addCommandHandler("compilelua", compileLuaScripts) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 01:41, 22 September 2022
This page is a guide for Lua compilation API.
Syntax
POST "http://luac.mtasa.com/index.php"
Parameters
- luasource: type file the file content
- compile: type value set to 1 to enable compilation
- debug: type value set to 1 to enable debug information
- luasource: type value
- Set to 1 to enable some obfuscation
- Set to 2 to enable more obfuscation (From 1.5.2-9.07903)
- Set to 3 to enable even more obfuscation (From 1.5.6-9.18728)
Examples
Linux example using curl
FROM="example.lua" TO="compiled.lua" curl -s -X POST -F compile=1 -F debug=0 -F obfuscate=3 -F luasource=@$FROM http://luac.mtasa.com/ > $TO
Linux example using luac replacement
luac_mta -e3 -o compiled.lua example.lua if [ $? -ne 0 ]; then echo "Error" fi
Need luac_mta (R13 2019-07-12) for Linux 32 bit or Linux 64 bit
Windows batch file example using curl
set FROM="example.lua" set TO="compiled.lua" curl.exe -s -X POST -F compile=1 -F debug=0 -F obfuscate=3 -F luasource=@%FROM% http://luac.mtasa.com/ > %TO%
Get curl.exe
(Original from http://curl.haxx.se/download.html)
Windows example using luac.exe replacement
luac_mta.exe -e3 -o compiled.lua example.lua IF NOT ERRORLEVEL 1 goto lp1 echo "Error" :lp1
Get luac_mta.exe (R12 2019-07-12) only x86
Lua example
-- This example allows you to compile all resource scripts by using /compilelua command.
local compileEnabled = 1
local debugLevel = 0
local obfuscateLevel = 3
local apiCodes = {
["ERROR Nothing to do - Please select compile and/or obfuscate"] = true,
["ERROR Could not compile file"] = true,
["ERROR Could not read file"] = true,
["ERROR Already compiled"] = true,
["ERROR Already encrypted"] = true,
}
local function loadScriptsFromMeta()
local metaFile = xmlLoadFile("meta.xml")
if not metaFile then
outputDebugString("[LUAC]: Failed to load scripts from meta.", 4, 255, 127, 0)
return false
end
local metaChildren = xmlNodeGetChildren(metaFile)
local scriptsTable = {}
for nodeID = 1, #metaChildren do
local metaNode = metaChildren[nodeID]
local fileSrc = xmlNodeGetAttribute(metaNode, "src")
if fileSrc then
local luaScript = stringFind(fileSrc, ".lua")
if luaScript then
scriptsTable[#scriptsTable + 1] = fileSrc
end
end
end
xmlUnloadFile(metaFile)
return scriptsTable
end
local function loadResourceScript(pPath)
local scriptExists = fileExists(pPath)
if not scriptExists then
outputDebugString("[LUAC]: '"..pPath.."' doesn't exists.", 4, 255, 127, 0)
return false
end
local scriptHandler = fileOpen(pPath)
if not scriptHandler then
outputDebugString("[LUAC]: '"..pPath.."' failed to open.", 4, 255, 127, 0)
return false
end
local scriptSize = fileGetSize(scriptHandler)
local scriptRaw = fileRead(scriptHandler, scriptSize)
fileClose(scriptHandler)
return scriptRaw
end
local function onScriptCompile(pCompiledLUA, pErrors, pScript)
local compileSuccess = pErrors == 0
if not compileSuccess then
outputDebugString("[LUAC]: '"..pScript.."' failed to compile.", 4, 255, 127, 0)
return false
end
local compileError = apiCodes[pCompiledLUA]
if compileError then
outputDebugString("[LUAC]: '"..pScript.."' failed to compile - "..pCompiledLUA, 4, 255, 127, 0)
return false
end
local compiledScript = fileCreate("luac/"..pScript)
if not compiledScript then
outputDebugString("[LUAC]: '"..pScript.."' failed to create.", 4, 255, 127, 0)
return false
end
fileWrite(compiledScript, pCompiledLUA)
fileClose(compiledScript)
outputDebugString("[LUAC]: '"..pScript.."' compiled successfully.", 4, 255, 127, 0)
return true
end
function compileLuaScripts(pPlayer)
local fetchURL = stringFormat("https://luac.mtasa.com/?compile=%i&debug=%i&obfuscate=%i", compileEnabled, debugLevel, obfuscateLevel)
local resourceScripts = loadScriptsFromMeta()
local postData = true
for scriptID = 1, #resourceScripts do
local scriptPath = resourceScripts[scriptID]
local scriptRaw = loadResourceScript(scriptPath)
fetchRemote(fetchURL, onScriptCompile, scriptRaw, postData, scriptPath)
end
end
addCommandHandler("compilelua", compileLuaScripts)
Changelog
| Version | Description |
|---|
| 2014-08-10 | encrypt has been renamed to obfuscate. blockdecompile has been removed. |