mirror of
https://github.com/JDM170/model_coder
synced 2025-12-10 05:57:19 +07:00
Added lua-side for decode and load model in MTA
Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
@@ -1,40 +0,0 @@
|
||||
local pass = nil
|
||||
local function loadFile(path)
|
||||
local file = fileOpen(path)
|
||||
if not file then
|
||||
return error("No such file ".. path)
|
||||
end
|
||||
|
||||
local data = fileRead(file, fileGetSize(file))
|
||||
fileClose(file)
|
||||
return data
|
||||
end
|
||||
|
||||
function include(file_name)
|
||||
local file = loadFile(file_name)
|
||||
|
||||
return assert(loadstring(file))
|
||||
end
|
||||
|
||||
|
||||
function decodeLoadTXD(filename)
|
||||
return engineLoadTXD(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
|
||||
end
|
||||
|
||||
function decodeLoadDFF(filename)
|
||||
return engineLoadDFF(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
|
||||
end
|
||||
|
||||
function decodeLoadCOL(filename)
|
||||
return engineLoadCOL(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
|
||||
end
|
||||
|
||||
addEvent("setPass", true)
|
||||
addEventHandler("setPass", resourceRoot, function(new_pass)
|
||||
pass = new_pass
|
||||
--CLIENT CONTENT HERE
|
||||
end)
|
||||
|
||||
triggerServerEvent("requestPass", resourceRoot)
|
||||
|
||||
addDebugHook("preFunction", function(_, _, _, _, _, ...) return "skip" end, {"addDebugHook"})
|
||||
@@ -1,4 +0,0 @@
|
||||
addEvent("requestPass", true)
|
||||
addEventHandler("requestPass", resourceRoot, function()
|
||||
triggerClientEvent(client, "setPass", resourceRoot, sha256(get("pass")))
|
||||
end)
|
||||
9
lua/meta.xml
Normal file
9
lua/meta.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<meta>
|
||||
<info author="JDM17" name="Decoder for XaskeL's locked cars" type="script" />
|
||||
<min_mta_version client="1.5.6-9.18728" />
|
||||
|
||||
<script src="stub.lua" type="client" cache="false" />
|
||||
|
||||
<export function="fileDecode" type="client" />
|
||||
<export function="safetyDelete" type="client" />
|
||||
</meta>
|
||||
62
lua/stub.lua
Normal file
62
lua/stub.lua
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
local blockSize = 12
|
||||
local encodeSize = 3000 * blockSize
|
||||
|
||||
local symbolsTable = {}
|
||||
for i=48, 122 do
|
||||
if (i <= 57) or (i >= 65) and (i <= 90) or (i >= 97) then
|
||||
table.insert(symbolsTable, string.char(i))
|
||||
end
|
||||
end
|
||||
|
||||
local function lFileDecode(path, password, useRAM)
|
||||
if not fileExists(path) then
|
||||
return false, "File not found"
|
||||
end
|
||||
local encodedFile = fileOpen(path)
|
||||
if (not encodedFile) then
|
||||
return false, "File corrupted"
|
||||
end
|
||||
local encodedData = fileRead(encodedFile, encodeSize)
|
||||
fileSetPos(encodedFile, encodeSize)
|
||||
local origData = fileRead(encodedFile, fileGetSize(encodedFile) - encodeSize)
|
||||
fileClose(encodedFile)
|
||||
local truePassword = string.sub(utf8.lower(md5(password)), 1, 16)
|
||||
local block
|
||||
local decoded = ""
|
||||
for i = 1, encodeSize, blockSize do
|
||||
block = teaDecode(string.sub(encodedData, i, i + blockSize), truePassword)
|
||||
if type(tonumber(block)) ~= "number" then
|
||||
return false, "Wrong password"
|
||||
end
|
||||
decoded = decoded..string.char(block)
|
||||
end
|
||||
if (not useRAM) then
|
||||
local decodedFileName = ""
|
||||
for i = 1, 64 do
|
||||
decodedFileName = decodedFileName..symbolsTable[math.random(#symbolsTable)]
|
||||
end
|
||||
local decodedFile = fileCreate(decodedFileName)
|
||||
fileWrite(decodedFile, decoded..origData)
|
||||
fileClose(decodedFile)
|
||||
return true, string.format(":%s/%s", getResourceName(getThisResource()), decodedFileName)
|
||||
else
|
||||
return true, decoded..origData
|
||||
end
|
||||
end
|
||||
local function lSafetyDelete(path)
|
||||
local file = fileCreate(path)
|
||||
fileWrite(file, "PROTECTED BY XASKEL")
|
||||
fileClose(file)
|
||||
setTimer(fileDelete, 100, 1, path)
|
||||
end
|
||||
|
||||
-- Экспортные функции
|
||||
function fileDecode(pt, ps, rm)
|
||||
return lFileDecode(pt, ps, rm)
|
||||
end
|
||||
function safetyDelete(pt)
|
||||
lSafetyDelete(pt)
|
||||
end
|
||||
|
||||
addDebugHook("preFunction", function(_, _, _, _, _, ...) return "skip" end, {"addDebugHook"})
|
||||
Reference in New Issue
Block a user