function hy(nr) local tab = {} nr = nr:gsub(".func (F%d+)[^\n]*\n.source \"[^\n]*\"\n.linedefined %d+\n.lastlinedefined %d+\n.numparams %d+\n.is_vararg %d+\n.maxstacksize %d+\n.upval %w+ nil ; %w+\nLOADK v1 (\"[^\n]*\")\nRETURN v1..v1%s+.end [^\n]*",function(x,y) tab[x]=y return "" end) nr = nr:gsub(".func (F%d+)[^\n]*\n.source \"[^\n]*\"\n.linedefined %d+\n.lastlinedefined %d+\n.numparams %d+\n.is_vararg %d+\n.maxstacksize %d+\n.upval %w+ nil ; %w+\nLOADK v1 (\"[^\n]*\")\n.end [^\n]*",function(x,y) tab[x]=y return "" end) nr=nr:gsub("CLOSURE v%d+ (F%d+)\nCALL (v%d+)..v%d+ v%d+..v%d+",function(x,y) if tab[x] then if type(tab[x]) == "table" then return "LOADBOOL "..y.." "..tab[x][1] end return "LOADK "..y.." "..tab[x] end end) nr=nr:gsub("CLOSURE v%d+ (F%d+)\nTAILCALL (v%d+)..v%d+",function(x,y) if tab[x] then if type(tab[x]) == "table" then return "LOADBOOL "..y.." "..tab[x][1].."\nRETURN "..y..".."..y end return "LOADK "..y.." "..tab[x].."\nRETURN "..y..".."..y end end) nr=nr:gsub("CLOSURE v%d+ (F%d+)\nCALL (v%d+)..v%d+ SET_TOP\nTAILCALL (v%d+)",function(x,y,y2) if tab[x] then if type(tab[x]) == "table" then return "LOADBOOL "..y.." "..tab[x][1].."\nTAILCALL "..y2..".."..y end return "LOADK "..y.." "..tab[x].."\nTAILCALL "..y2..".."..y end end) nr=nr:gsub("CLOSURE v%d+ (F%d+)\nCALL (v%d+)..v%d+ SET_TOP\nRETURN (v%d+)",function(x,y,y2) if tab[x] then if type(tab[x]) == "table" then return "LOADBOOL "..y.." "..tab[x][1].."\nRETURN "..y2..".."..y end return "LOADK "..y.." "..tab[x].."\nRETURN "..y2..".."..y end end) nr=nr:gsub("CLOSURE v%d+ (F%d+)\nCALL (v%d+)..v%d+ SET_TOP\nCALL (v%d+)",function(x,y,y2) if tab[x] then if type(tab[x]) == "table" then return "LOADBOOL "..y.." "..tab[x][1].."\nCALL "..y2..".."..y end return "LOADK "..y.." "..tab[x].."\nCALL "..y2..".."..y end end) nr=nr:gsub("CLOSURE v%d+ (F%d+)\nCALL (v%d+)..v%d+ SET_TOP\nSETLIST (v%d+)",function(x,y,y2) if tab[x] then if type(tab[x]) == "table" then return "LOADBOOL "..y.." "..tab[x][1].."\nSETLIST "..y2..".."..y end return "LOADK "..y.." "..tab[x].."\nSETLIST "..y2..".."..y end end) return nr end function th(x,y) x=x:gsub("\\","\\\\"):gsub("\"","\\\""):gsub("\n","\\n") return x end yc=gg.prompt({"请选择脚本:"}, {gg.getFile()}, {"file"}) yx=io.open(yc[1],"r"):read("*a") yx=yx:gsub("\n%s+","\n") yx=yx:gsub("LOADK v1 \"[^\n]+\"\nLOADK v2 \"[^\n]+\"\nSETTABUP u0 v1 v2\n","") yx=yx:gsub("\nNEWTABLE v%d+ %d+ %d+\nCLOSURE v%d+ F[^\n]+\nCALL v%d+%.%.v%d+ v%d+%.%.v%d+\nNEWTABLE v%d+ %d+ %d+\nCLOSURE v%d+ F[^\n]+\nCALL v%d+%.%.v%d+ v%d+%.%.v%d+\nNEWTABLE v%d+ %d+ %d+\nCLOSURE v%d+ F[^\n]+\nCLOSURE v%d+ F[^\n]+\nTAILCALL v%d+%.%.v%d+\nRETURN v%d+ ; unused\nRETURN ; unused\n%.func F[^\n]+\n%.source \"[^\n]+\"\n%.linedefined [^\n]+\n%.lastlinedefined [^\n]+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize [^\n]+\n%.upval v%d+ nil ; u%d+\nNEWTABLE [^\n]+","") yx=yx:gsub("SETLIST v%d+%.%.v[^\n]+ [^\n]+\nSETUPVAL v%d+ u%d+\nRETURN \n%.end ; F[^\n]+\n%.func F[^\n]+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined [^\n]+\n%.lastlinedefined [^\n]+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval v%d+ nil ; u%d+\n%.upval u%d+ nil ; u%d+\n%.upval v%d+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nGETUPVAL v%d+ u%d+\nCALL v%d+%.%.v%d+ v%d+%.%.v%d+\nSETUPVAL v%d+ u%d+\nRETURN \n%.end ; F[^\n]+\n%.func F[^\n]+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined [^\n]+\n%.lastlinedefined [^\n]+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval [^\n]+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nRETURN v%d+%.%.v%d+\nRETURN ; unused\n%.end ; F[^\n]+\n%.func F[^\n]+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined [^\n]+\n%.lastlinedefined [^\n]+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize [^\n]+\n[^\n]+\nGETUPVAL v%d+ u%d+\nTAILCALL v%d+%.%.v%d+\nRETURN v%d+ ; unused\nRETURN ; unused\n%.end ; F[^\n]+","") yx=yx:gsub("SETLIST v%d+%.%.v%d+ %d+\nSETUPVAL v%d+ u%d+\nRETURN \n%.end ; F%d+\n%.func F%d+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined %d+\n%.lastlinedefined %d+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval v%d+ nil ; u%d+\n%.upval u%d+ nil ; u%d+\n%.upval v%d+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nGETUPVAL v%d+ u%d+\nCALL v%d+%.%.v%d+ v%d+%.%.v%d+\nSETUPVAL v%d+ u%d+\nRETURN \n%.end ; F%d+\n%.func F%d+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined %d+\n%.lastlinedefined %d+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval v%d+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nRETURN v%d+%.%.v%d+\nRETURN ; unused\n%.end ; F%d+\n%.func F%d+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined %d+\n%.lastlinedefined %d+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval v%d+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nTAILCALL v%d+%.%.v%d+\nRETURN v%d+ ; unused\nRETURN ; unused\n%.end ; F%d+","") yx=yx:gsub("SETUPVAL v%d+ u%d+\nRETURN \n%.end ; F%d+\n%.func F%d+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined %d+\n%.lastlinedefined %d+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval v%d+ nil ; u%d+\n%.upval u%d+ nil ; u%d+\n%.upval v%d+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nGETUPVAL v%d+ u%d+\nCALL v%d+%.%.v%d+ v%d+%.%.v%d+\nSETUPVAL v%d+ u%d+\nRETURN \n%.end ; F%d+\n%.func F%d+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined %d+\n%.lastlinedefined %d+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval v%d+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nRETURN v%d+%.%.v%d+\nRETURN ; unused\n%.end ; F%d+\n%.func F%d+ ; %d+ upvalues, %d+ locals, %d+ constants, %d+ funcs\n%.source \"[^\n]+\"\n%.linedefined %d+\n%.lastlinedefined %d+\n%.numparams %d+\n%.is_vararg %d+\n%.maxstacksize %d+\n%.upval v%d+ nil ; u%d+\nGETUPVAL v%d+ u%d+\nTAILCALL v%d+%.%.v%d+\nRETURN v%d+ ; unused\nRETURN ; unused\n%.end ; F%d+","LOADK v1 \"\"") yx=yx:gsub("CALL v0..v1 v0..v0\nRETURN \n","CALL v0..v1 v0..v0\nRETURN v0..v0\n",1) yx=yx:gsub("CLOSURE v10 F2\nCLOSURE v11 F3","CLOSURE v10 F2\nRETURN v10..v10\nCLOSURE v11 F3") io.open("88.lua","w"):write(yx) d=require"88" yx=yx:gsub("(.func F%d+ [^\n]+\n.source \"[^\n]*\"\n.linedefined %d+\n.lastlinedefined %d+\n.numparams 0\n.is_vararg 0\n.maxstacksize 7\n.upval [^\n]+\n)([LOADK SETLIST v %d %. \n]+)(\n.end ; F%d+)",function(aa,x,bb) local tab={} x:gsub("LOADK v%d+ (%d+)",function(xx) tab[#tab+1]=tonumber(xx) end) x=d(tab) x=th(x) return aa.."LOADK v1 \""..x.."\"\nRETURN v1..v1\n"..bb end) yx=yx:gsub("\n%s+","\n") yx=hy(yx) os.remove("88.lua") io.open("dec.lua","w"):write(yx)