-- 验证必要函数
local function x21d960d2e578f54cda5ef8759844f967(code) local HexTable = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"} local A = 0x67452301 local B = 0xefcdab89 local C = 0x98badcfe local D = 0x10325476 local S11 = 7 local S12 = 12 local S13 = 17 local S14 = 22 local S21 = 5 local S22 = 9 local S23 = 14 local S24 = 20 local S31 = 4 local S32 = 11 local S33 = 16 local S34 = 23 local S41 = 6 local S42 = 10 local S43 = 15 local S44 = 21 local function F(x,y,z) return (x & y) | ((~x) & z) end local function G(x,y,z) return (x & z) | (y & (~z)) end local function H(x,y,z) return x ~ y ~ z end local function I(x,y,z) return y ~ (x | (~z)) end local function FF(a,b,c,d,x,s,ac) local a = a + F(b,c,d) + x + ac local a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function GG(a,b,c,d,x,s,ac) local a = a + G(b,c,d) + x + ac local a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function HH(a,b,c,d,x,s,ac) local a = a + H(b,c,d) + x + ac local a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function II(a,b,c,d,x,s,ac) local a = a + I(b,c,d) + x + ac local a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b return a & 0xffffffff end local function MD5StringFill(s) local len = s:len() local mod512 = len * 8 % 512 local fillSize = (448 - mod512) // 8 if mod512 > 448 then fillSize = (960 - mod512) // 8 end local rTab = {} local byteIndex = 1 for i = 1,len do local index = (i - 1) // 4 + 1 rTab[index] = rTab[index] or 0 rTab[index] = rTab[index] | (s:byte(i) << (byteIndex - 1) * 8) byteIndex = byteIndex + 1 if byteIndex == 5 then byteIndex = 1 end end local b0x80 = false local tLen = #rTab if byteIndex ~= 1 then rTab[tLen] = rTab[tLen] | 0x80 << (byteIndex - 1) * 8 b0x80 = true end for i = 1,fillSize // 4 do if not b0x80 and i == 1 then rTab[tLen + i] = 0x80 else rTab[tLen + i] = 0x0 end end local bitLen = math.floor(len * 8) local tLen = #rTab rTab[tLen + 1] = bitLen & 0xffffffff rTab[tLen + 2] = bitLen >> 32 return rTab end local function w1c79ab98e2eb08a803da78a56433afb9(s) local fillTab = MD5StringFill(s) local result = {A,B,C,D} for i = 1,#fillTab // 16 do local a = result[1] local b = result[2] local c = result[3] local d = result[4] local offset = (i - 1) * 16 + 1 local a = FF(a, b, c, d, fillTab[offset + 0], S11, 0xd76aa478) local d = FF(d, a, b, c, fillTab[offset + 1], S12, 0xe8c7b756) local c = FF(c, d, a, b, fillTab[offset + 2], S13, 0x242070db) local b = FF(b, c, d, a, fillTab[offset + 3], S14, 0xc1bdceee) local a = FF(a, b, c, d, fillTab[offset + 4], S11, 0xf57c0faf) local d = FF(d, a, b, c, fillTab[offset + 5], S12, 0x4787c62a) local c = FF(c, d, a, b, fillTab[offset + 6], S13, 0xa8304613) local b = FF(b, c, d, a, fillTab[offset + 7], S14, 0xfd469501) local a = FF(a, b, c, d, fillTab[offset + 8], S11, 0x698098d8) local d = FF(d, a, b, c, fillTab[offset + 9], S12, 0x8b44f7af) local c = FF(c, d, a, b, fillTab[offset + 10], S13, 0xffff5bb1) local b = FF(b, c, d, a, fillTab[offset + 11], S14, 0x895cd7be) local a = FF(a, b, c, d, fillTab[offset + 12], S11, 0x6b901122) local d = FF(d, a, b, c, fillTab[offset + 13], S12, 0xfd987193) local c = FF(c, d, a, b, fillTab[offset + 14], S13, 0xa679438e) local b = FF(b, c, d, a, fillTab[offset + 15], S14, 0x49b40821) local a = GG(a, b, c, d, fillTab[offset + 1], S21, 0xf61e2562) local d = GG(d, a, b, c, fillTab[offset + 6], S22, 0xc040b340) local c = GG(c, d, a, b, fillTab[offset + 11], S23, 0x265e5a51) local b = GG(b, c, d, a, fillTab[offset + 0], S24, 0xe9b6c7aa) local a = GG(a, b, c, d, fillTab[offset + 5], S21, 0xd62f105d) local d = GG(d, a, b, c, fillTab[offset + 10], S22, 0x2441453) local c = GG(c, d, a, b, fillTab[offset + 15], S23, 0xd8a1e681) local b = GG(b, c, d, a, fillTab[offset + 4], S24, 0xe7d3fbc8) local a = GG(a, b, c, d, fillTab[offset + 9], S21, 0x21e1cde6) local d = GG(d, a, b, c, fillTab[offset + 14], S22, 0xc33707d6) local c = GG(c, d, a, b, fillTab[offset + 3], S23, 0xf4d50d87) local b = GG(b, c, d, a, fillTab[offset + 8], S24, 0x455a14ed) local a = GG(a, b, c, d, fillTab[offset + 13], S21, 0xa9e3e905) local d = GG(d, a, b, c, fillTab[offset + 2], S22, 0xfcefa3f8) local c = GG(c, d, a, b, fillTab[offset + 7], S23, 0x676f02d9) local b = GG(b, c, d, a, fillTab[offset + 12], S24, 0x8d2a4c8a) local a = HH(a, b, c, d, fillTab[offset + 5], S31, 0xfffa3942) local d = HH(d, a, b, c, fillTab[offset + 8], S32, 0x8771f681) local c = HH(c, d, a, b, fillTab[offset + 11], S33, 0x6d9d6122) local b = HH(b, c, d, a, fillTab[offset + 14], S34, 0xfde5380c) local a = HH(a, b, c, d, fillTab[offset + 1], S31, 0xa4beea44) local d = HH(d, a, b, c, fillTab[offset + 4], S32, 0x4bdecfa9) local c = HH(c, d, a, b, fillTab[offset + 7], S33, 0xf6bb4b60) local b = HH(b, c, d, a, fillTab[offset + 10], S34, 0xbebfbc70) local a = HH(a, b, c, d, fillTab[offset + 13], S31, 0x289b7ec6) local d = HH(d, a, b, c, fillTab[offset + 0], S32, 0xeaa127fa) local c = HH(c, d, a, b, fillTab[offset + 3], S33, 0xd4ef3085) local b = HH(b, c, d, a, fillTab[offset + 6], S34, 0x4881d05) local a = HH(a, b, c, d, fillTab[offset + 9], S31, 0xd9d4d039) local d = HH(d, a, b, c, fillTab[offset + 12], S32, 0xe6db99e5) local c = HH(c, d, a, b, fillTab[offset + 15], S33, 0x1fa27cf8) local b = HH(b, c, d, a, fillTab[offset + 2], S34, 0xc4ac5665) local a = II(a, b, c, d, fillTab[offset + 0], S41, 0xf4292244) local d = II(d, a, b, c, fillTab[offset + 7], S42, 0x432aff97) local c = II(c, d, a, b, fillTab[offset + 14], S43, 0xab9423a7) local b = II(b, c, d, a, fillTab[offset + 5], S44, 0xfc93a039) local a = II(a, b, c, d, fillTab[offset + 12], S41, 0x655b59c3) local d = II(d, a, b, c, fillTab[offset + 3], S42, 0x8f0ccc92) local c = II(c, d, a, b, fillTab[offset + 10], S43, 0xffeff47d) local b = II(b, c, d, a, fillTab[offset + 1], S44, 0x85845dd1) local a = II(a, b, c, d, fillTab[offset + 8], S41, 0x6fa87e4f) local d = II(d, a, b, c, fillTab[offset + 15], S42, 0xfe2ce6e0) local c = II(c, d, a, b, fillTab[offset + 6], S43, 0xa3014314) local b = II(b, c, d, a, fillTab[offset + 13], S44, 0x4e0811a1) local a = II(a, b, c, d, fillTab[offset + 4], S41, 0xf7537e82) local d = II(d, a, b, c, fillTab[offset + 11], S42, 0xbd3af235) local c = II(c, d, a, b, fillTab[offset + 2], S43, 0x2ad7d2bb) local b = II(b, c, d, a, fillTab[offset + 9], S44, 0xeb86d391) result[1] = result[1] + a result[2] = result[2] + b result[3] = result[3] + c result[4] = result[4] + d result[1] = result[1] & 0xffffffff result[2] = result[2] & 0xffffffff result[3] = result[3] & 0xffffffff result[4] = result[4] & 0xffffffff end local retStr = '' for i = 1,4 do for _ = 1,4 do local temp = result[i] & 0x0F local str = HexTable[temp + 1] result[i] = result[i] >> 4 local temp = result[i] & 0x0F retStr = retStr .. HexTable[temp + 1] .. str result[i] = result[i] >> 4 end end return string.lower(retStr) end return w1c79ab98e2eb08a803da78a56433afb9(code) end local function ZZMathBit_xorBit(left, right) return (left + right) == 1 and 1 or 0 end local function ZZMathBit_base(left, right, op) if left < right then left, right = right, left end local res = 0 local shift = 1 while left ~= 0 do local ra = left % 2 local rb = right % 2 res = shift * op(ra, rb) + res shift = shift * 2 left = math.modf(left / 2) right = math.modf(right / 2) end return res end local function ZZMathBit_xorOp(left, right) return ZZMathBit_base(left, right, ZZMathBit_xorBit) end local function KSA(key) local keyLen = string.len(key) local schedule = {} local keyByte = {} for i = 0, 255 do schedule[i] = i end for i = 1, keyLen do keyByte[i - 1] = string.byte(key, i, i) end local j = 0 for i = 0, 255 do j = (j + schedule[i] + keyByte[i % keyLen]) % 256 schedule[i], schedule[j] = schedule[j], schedule[i] end return schedule end local function PRGA(schedule, textLen) local i = 0 local j = 0 local k = {} for n = 1, textLen do i = (i + 1) % 256 j = (j + schedule[i]) % 256 schedule[i], schedule[j] = schedule[j], schedule[i] k[n] = schedule[(schedule[i] + schedule[j]) % 256] end return k end local function output(schedule, text) local len = string.len(text) local res = {} for i = 1, len do local c = string.byte(text, i, i) res[i] = string.char(ZZMathBit_xorOp(schedule[i], c)) end return table.concat(res) end local function i9912e11eac8496fde92ba9a3f421e6ab(text, key) local textLen = string.len(text) local schedule = KSA(key) local k = PRGA(schedule, textLen) return output(k, text) end local function nb432e9fc1abcf9600c08fcdae055b192(str) local ret = "" for i = 1, #str do ret = ret .. string.format("%02X", str:sub(i, i):byte()) end return ret:lower() end local function pb1850c1492daf632c92f019115b32f1b(hexStr) local cleanStr = hexStr:gsub("[%s%p]", ""):upper() local ret = "" for i = 1, #cleanStr, 2 do ret = ret .. string.char(tonumber(cleanStr:sub(i, i + 1), 16)) end return ret end local base64chars = { [0]='A', [1]='B', [2]='C', [3]='D', [4]='E', [5]='F', [6]='G', [7]='H', [8]='I', [9]='J', [10]='K', [11]='L', [12]='M', [13]='N', [14]='O', [15]='P', [16]='Q', [17]='R', [18]='S', [19]='T', [20]='U', [21]='V', [22]='W', [23]='X', [24]='Y', [25]='Z', [26]='a', [27]='b', [28]='c', [29]='d', [30]='e', [31]='f', [32]='g', [33]='h', [34]='i', [35]='j', [36]='k', [37]='l', [38]='m', [39]='n', [40]='o', [41]='p', [42]='q', [43]='r', [44]='s', [45]='t', [46]='u', [47]='v', [48]='w', [49]='x', [50]='y', [51]='z', [52]='0', [53]='1', [54]='2', [55]='3', [56]='4', [57]='5', [58]='6', [59]='7', [60]='8', [61]='9', [62]='-', [63]='_' } local function wd07f574be71f8f3213ec39a8728df0bb(data) local bytes = {} local result = "" for i = 0, data:len()-1, 3 do for byte = 1, 3 do bytes[byte] = string.byte(data:sub(i+byte)) or 0 end result = string.format( '%s%s%s%s%s', result, base64chars[ math.floor(bytes[1]/4) ] or "=", base64chars[(bytes[1] % 4) * 16 + math.floor(bytes[2] / 16)] or "=", ( { [true] = base64chars[(bytes[2] % 16) * 4 + math.floor(bytes[3] / 64)] or "=", [false] = "=" } ) [(data:len() - i) > 1], ( { [true] = base64chars[(bytes[3] % 64)] or "=", [false] = "=" } ) [(data:len(data) - i) > 2] ) end return result end local base64bytes = { ['A']= 0, ['B'] =1, ['C'] =2, ['D'] =3, ['E'] =4, ['F'] =5, ['G'] =6, ['H'] =7, ['I']=8, ['J'] =9, ['K']=10, ['L']=11, ['M']=12, ['N']=13, ['O']=14, ['P']=15, ['Q']=16, ['R']=17, ['S']=18, ['T']=19, ['U']=20, ['V']=21, ['W']=22, ['X']=23, ['Y']=24, ['Z']=25, ['a']=26, ['b']=27, ['c']=28, ['d']=29, ['e']=30, ['f']=31, ['g']=32, ['h']=33, ['i']=34, ['j']=35, ['k']=36, ['l']=37, ['m']=38, ['n']=39, ['o']=40, ['p']=41, ['q']=42, ['r']=43, ['s']=44, ['t']=45, ['u']=46, ['v']=47, ['w']=48, ['x']=49, ['y']=50, ['z']=51, ['0']=52, ['1']=53, ['2']=54, ['3']=55, ['4']=56, ['5']=57, ['6']=58, ['7']=59, ['8']=60, ['9']=61, ['-']=62, ['_']=63, ['=']=nil } local function sbc74cde5d9e854be00479ff08a26bf8a(data) local chars = {} local result = "" for i = 0, data:len()-1, 4 do for c = 1, 4 do chars[c] = base64bytes[ (string.sub(data,(i+c),(i+c)) or "=") ] end result = string.format( '%s%s%s%s', result, string.char(chars[1]*4 + math.floor(chars[2]/16)), ( { [true] = string.char(((chars[2] or 0) % 16)*16 + math.floor((chars[3] or 0)/4)), [false] = "" } ) [chars[3] ~= nil], ( { [true] = string.char(((chars[3] or 0)%4) * 64 + (chars[4] or 0)), [false] = ""} ) [chars[4] ~= nil] ) end return result end local function h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(input,base64_chars) local output = "" local padding = "" local i = 1 local len = #input while i <= len do local b1 = string.byte(input, i) local b2 = string.byte(input, i + 1) local b3 = string.byte(input, i + 2) if not b2 then b2 = 0 padding = padding .. "=" end if not b3 then b3 = 0 padding = padding .. "=" end local combined = (b1 << 16) + (b2 << 8) + b3 output = output .. base64_chars:sub(((combined >> 18) & 0x3F) + 1, ((combined >> 18) & 0x3F) + 1) .. base64_chars:sub(((combined >> 12) & 0x3F) + 1, ((combined >> 12) & 0x3F) + 1) .. base64_chars:sub(((combined >> 6) & 0x3F) + 1, ((combined >> 6) & 0x3F) + 1) .. base64_chars:sub((combined & 0x3F) + 1, (combined & 0x3F) + 1) i = i + 3 end return output:sub(1, #output - #padding) .. padding end local function qabfb5a6c972cc5b96bd3052e92a48710(input,base64_chars) local base64_decode_chars = {} for i = 1, #base64_chars do base64_decode_chars[base64_chars:sub(i, i)] = i - 1 end local padding = 0 if input:sub(-1) == "=" then padding = padding + 1 end if input:sub(-2, -1) == "==" then padding = padding + 1 end local output = "" local i = 1 local len = #input while i <= len - padding do local c1 = base64_decode_chars[input:sub(i, i)] local c2 = base64_decode_chars[input:sub(i + 1, i + 1)] local c3 = base64_decode_chars[input:sub(i + 2, i + 2)] local c4 = base64_decode_chars[input:sub(i + 3, i + 3)] if not c3 then c3 = 0 end if not c4 then c4 = 0 end local combined = (c1 << 18) + (c2 << 12) + (c3 << 6) + c4 output = output .. string.char((combined >> 16) & 0xFF) .. string.char((combined >> 8) & 0xFF) .. string.char(combined & 0xFF) i = i + 4 end if padding == 1 then output = output:sub(1, -2) elseif padding == 2 then output = output:sub(1, -3) end return output end fuhao= '"' local function h4d011e72da1f68ff41523b235fcf846f(str,from,to) return true, from+3 end local function g822d97c2f153f078ee2cd9bb887cfc09(str,from,to) return false, from+4 end local function w3d4f1e75af5ccde4914172859efc7c68(str, from, to) return nil, from+3 end local function h3c96433292b06a434747b233069cd075(str, from, to) return nul, from+2 end local numberchars = {['-'] = true,['+'] = true,['.'] = true,['0'] = true,['1'] = true,['2'] = true,['3'] = true,['4'] = true,['5'] = true,['6'] = true,['7'] = true,['8'] = true,['9'] = true} local function z0884f774b02ca514cb94e0a165aa5876(str,from,to) local i = from+1 while(i<=to) do local char = string.sub(str, i, i) if not numberchars[char] then break end i = i + 1 end local num = tonumber(string.sub(str, from, i-1)) if not num then error(_format('json格式错误,不正确的数字, 错误位置:{from}', from)) end return num, i-1 end local function g6ee636c43ce382f24a4148d0ce43cde2(str,from,to) local ignor = false for i = from+1, to do local char = string.sub(str, i, i) if not ignor then if char == fuhao then return string.sub(str, from+1, i-1), i elseif char == '\\' then ignor = true end else ignor = false end end error(_format('json格式错误,字符串没有找到结尾, 错误位置:{from}', from)) end local function n2568a04a0fd2e3dc917eb2535a5768bd(str,from,to) local result = {} from = from or 1 local pos = from+1 local to = to or string.len(str) while(pos<=to) do local char = string.sub(str, pos, pos) if char == fuhao then result[#result+1], pos = g6ee636c43ce382f24a4148d0ce43cde2(str,pos,to) elseif char == '[' then result[#result+1], pos = n2568a04a0fd2e3dc917eb2535a5768bd(str,pos,to) elseif char == '{' then result[#result+1], pos = e49b4b9269af8412dad78658bec145387(str,pos,to) elseif char == ']' then return result, pos elseif (char=='f' or char=='F') then result[#result+1], pos = g822d97c2f153f078ee2cd9bb887cfc09(str,pos,to) elseif (char=='t' or char=='T') then result[#result+1], pos = h4d011e72da1f68ff41523b235fcf846f(str,pos,to) elseif (char=='n') then result[#result+1], pos = w3d4f1e75af5ccde4914172859efc7c68(str,pos,to) elseif (char=='N') then result[#result+1], pos = h3c96433292b06a434747b233069cd075(str,pos,to) elseif numberchars[char] then result[#result+1], pos = z0884f774b02ca514cb94e0a165aa5876(str,pos,to) end pos = pos + 1 end error(_format('json格式错误,表没有找到结尾, 错误位置:{from}', from)) end function _G.e49b4b9269af8412dad78658bec145387(str,from,to) local result = {} from = from or 1 local pos = from+1 local to = to or string.len(str) local key while(pos<=to) do local char = string.sub(str, pos, pos) if char == fuhao then if not key then key, pos = g6ee636c43ce382f24a4148d0ce43cde2(str,pos,to) else result[key], pos = g6ee636c43ce382f24a4148d0ce43cde2(str,pos,to) key = nil end elseif char == '[' then if not key then key, pos = n2568a04a0fd2e3dc917eb2535a5768bd(str,pos,to) else result[key], pos = n2568a04a0fd2e3dc917eb2535a5768bd(str,pos,to) key = nil end elseif char == '{' then if not key then key, pos = e49b4b9269af8412dad78658bec145387(str,pos,to) else result[key], pos = e49b4b9269af8412dad78658bec145387(str,pos,to) key = nil end elseif char == '}' then return result, pos elseif (char=='f' or char=='F') then result[key], pos = g822d97c2f153f078ee2cd9bb887cfc09(str,pos,to) key = nil elseif (char=='t' or char=='T') then result[key], pos = h4d011e72da1f68ff41523b235fcf846f(str,pos,to) key = nil elseif (char=='n') then result[key], pos = w3d4f1e75af5ccde4914172859efc7c68(str,pos,to) key = nil elseif (char=='N') then result[key], pos = h3c96433292b06a434747b233069cd075(str,pos,to) key = nil elseif numberchars[char] then if not key then key, pos = z0884f774b02ca514cb94e0a165aa5876(str,pos,to) else result[key], pos = z0884f774b02ca514cb94e0a165aa5876(str,pos,to) key = nil end end pos = pos + 1 end error(_format('格式错误,表没有找到结尾, 错误位置:{from}', from)) end local jsonfuncs={[ fuhao ]=g6ee636c43ce382f24a4148d0ce43cde2,['[']=n2568a04a0fd2e3dc917eb2535a5768bd,['{']=e49b4b9269af8412dad78658bec145387,['f']=g822d97c2f153f078ee2cd9bb887cfc09,['F']=g822d97c2f153f078ee2cd9bb887cfc09,['t']=h4d011e72da1f68ff41523b235fcf846f,['T']=h4d011e72da1f68ff41523b235fcf846f} local function cebdc0c5977ca3afff500e3d301f30369(str) if str==nil then gg.alert('错误json') else local char = string.sub(str, 1, 1) local func=jsonfuncs[char] if func then return func(str, 1, string.len(str)) end if numberchars[char] then return z0884f774b02ca514cb94e0a165aa5876(str, 1, string.len(str)) end end end local __index local LYF_DefEnv1 = {[""]=""} local LYF_DefEnv2 = {["fuck"]="."} setmetatable(LYF_DefEnv1, {__index = _ENV}) _ENV=LYF_DefEnv1 _G=LYF_DefEnv2 local function tohex(num) return string.format("%08x", num) end local function lrotate(num, bits) return ((num << bits) | (num >> (32 - bits))) & 0xFFFFFFFF end function m53fff355278b0c6715b50517afb301ed(message) local h0 = 0x67452301 local h1 = 0xEFCDAB89 local h2 = 0x98BADCFE local h3 = 0x10325476 local h4 = 0xC3D2E1F0 local original_length = #message local bit_length = original_length * 8 message = message .. string.char(0x80) while (#message + 8) % 64 ~= 0 do message = message .. string.char(0x00) end for i = 1, 8 do local byte = (bit_length >> (64 - i * 8)) & 0xFF message = message .. string.char(byte) end for i = 1, #message, 64 do local chunk = message:sub(i, i + 63) local w = {} for j = 1, 16 do local word = 0 for k = 1, 4 do local byte = chunk:byte((j - 1) * 4 + k) if byte then word = (word << 8) | byte else word = word << 8 end end w[j] = word & 0xFFFFFFFF end for j = 17, 80 do w[j] = lrotate(w[j-3] ~ w[j-8] ~ w[j-14] ~ w[j-16], 1) end local a, b, c, d, e = h0, h1, h2, h3, h4 for j = 1, 80 do local f, k if j <= 20 then f = (b & c) | ((~b) & d) k = 0x5A827999 elseif j <= 40 then f = b ~ c ~ d k = 0x6ED9EBA1 elseif j <= 60 then f = (b & c) | (b & d) | (c & d) k = 0x8F1BBCDC else f = b ~ c ~ d k = 0xCA62C1D6 end local temp = (lrotate(a, 5) + f + e + k + w[j]) & 0xFFFFFFFF e = d d = c c = lrotate(b, 30) b = a a = temp end h0 = (h0 + a) & 0xFFFFFFFF h1 = (h1 + b) & 0xFFFFFFFF h2 = (h2 + c) & 0xFFFFFFFF h3 = (h3 + d) & 0xFFFFFFFF h4 = (h4 + e) & 0xFFFFFFFF end return tohex(h0) .. tohex(h1) .. tohex(h2) .. tohex(h3) .. tohex(h4) end local k = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 } local function rrotate(x, n) return ((x >> n) | (x << (32 - n))) & 0xFFFFFFFF end local function rshift(x, n) return (x >> n) & 0xFFFFFFFF end local function Ch(x, y, z) return (x & y) ~ ((~x) & z) end local function Maj(x, y, z) return (x & y) ~ (x & z) ~ (y & z) end local function Sigma0(x) return rrotate(x, 2) ~ rrotate(x, 13) ~ rrotate(x, 22) end local function Sigma1(x) return rrotate(x, 6) ~ rrotate(x, 11) ~ rrotate(x, 25) end local function sigma0(x) return rrotate(x, 7) ~ rrotate(x, 18) ~ rshift(x, 3) end local function sigma1(x) return rrotate(x, 17) ~ rrotate(x, 19) ~ rshift(x, 10) end function j91db19167c2f7111c7af3285280dd02d(message) local h = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 } local original_length = #message local bit_length = original_length * 8 message = message .. string.char(0x80) while (#message + 8) % 64 ~= 0 do message = message .. string.char(0x00) end for i = 1, 8 do local byte = (bit_length >> (64 - i * 8)) & 0xFF message = message .. string.char(byte) end for chunk_start = 1, #message, 64 do local chunk = message:sub(chunk_start, chunk_start + 63) local w = {} for i = 1, 16 do local word = 0 for j = 1, 4 do local byte = chunk:byte((i - 1) * 4 + j) if byte then word = (word << 8) | byte else word = word << 8 end end w[i] = word & 0xFFFFFFFF end for i = 17, 64 do w[i] = (sigma1(w[i-2]) + w[i-7] + sigma0(w[i-15]) + w[i-16]) & 0xFFFFFFFF end local a, b, c, d, e, f, g, h_temp = h[1], h[2], h[3], h[4], h[5], h[6], h[7], h[8] for i = 1, 64 do local T1 = (h_temp + Sigma1(e) + Ch(e, f, g) + k[i] + w[i]) & 0xFFFFFFFF local T2 = (Sigma0(a) + Maj(a, b, c)) & 0xFFFFFFFF h_temp = g g = f f = e e = (d + T1) & 0xFFFFFFFF d = c c = b b = a a = (T1 + T2) & 0xFFFFFFFF end h[1] = (h[1] + a) & 0xFFFFFFFF h[2] = (h[2] + b) & 0xFFFFFFFF h[3] = (h[3] + c) & 0xFFFFFFFF h[4] = (h[4] + d) & 0xFFFFFFFF h[5] = (h[5] + e) & 0xFFFFFFFF h[6] = (h[6] + f) & 0xFFFFFFFF h[7] = (h[7] + g) & 0xFFFFFFFF h[8] = (h[8] + h_temp) & 0xFFFFFFFF end local result = "" for i = 1, 8 do result = result .. string.format("%08x", h[i]) end return result end
-- 网络函数封装
local Http={ post=function(url,post,fun) local data=gg.makeRequest(url,nil,post).content if data==nil then gg.alert("网络错误了,请检查你的网络") os.exit() end fun(data) end, download=function(get,address) local c=gg.makeRequest(get,nil,nil).content if c==nil then gg.alert("网络错误了,请检查你的网络") os.exit() end io.open(address,"w+"):write(c) gg.toast("下载成功") end }
local hd7a6c2ab734d7abeb5955d187f78bee1="https://wy.llua.cn/v2/"--v2接口地址
local currentVersion = "1.0"--当前版本,用于检查更新
local kmPath = "/sdcard/.km"--卡密存储路径
local imeiPath='/sdcard/.imei'--设备码存储路径
-- 获取公告
Http.post(hd7a6c2ab734d7abeb5955d187f78bee1.."18451f7966f5d9ce9fdd9745a21f7b6d",nb432e9fc1abcf9600c08fcdae055b192(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(wd07f574be71f8f3213ec39a8728df0bb(nb432e9fc1abcf9600c08fcdae055b192(nb432e9fc1abcf9600c08fcdae055b192(i9912e11eac8496fde92ba9a3f421e6ab(wd07f574be71f8f3213ec39a8728df0bb(wd07f574be71f8f3213ec39a8728df0bb("id=Q3A0LBx8ACB")),"yd84718a4e862a65c11c2722d8538c3672958")))),"1dkGRbeOQYTr40tAh6Zf7lMI/opqxLCVSsvjJay2FzD9uNw+W3PicgnmHK58UBXE"),"o7NDVtqQM2REurJg168xh/XpkiKl3yUfBALSvzb54F+HWnId0jGsTCYOmPcaZwe9")),function(data)
local data=cebdc0c5977ca3afff500e3d301f30369(i9912e11eac8496fde92ba9a3f421e6ab(pb1850c1492daf632c92f019115b32f1b(data),"j4deb43e8907399463450575bfb77c1"))
if data.code==102 then
gg.alert("软件已关闭")
os.exit()
end
if data.code==70588 then
gg.alert("公告:"..data.msg.app_gg)
else
gg.alert("公告获取失败")
os.exit()
end
end)
-- 检查更新
Http.post(hd7a6c2ab734d7abeb5955d187f78bee1.."18451f7966f5d9ce9fdd9745a21f7b6d",nb432e9fc1abcf9600c08fcdae055b192(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(wd07f574be71f8f3213ec39a8728df0bb(nb432e9fc1abcf9600c08fcdae055b192(nb432e9fc1abcf9600c08fcdae055b192(i9912e11eac8496fde92ba9a3f421e6ab(wd07f574be71f8f3213ec39a8728df0bb(wd07f574be71f8f3213ec39a8728df0bb("id=BnnHuux92AZ")),"yd84718a4e862a65c11c2722d8538c3672958")))),"1dkGRbeOQYTr40tAh6Zf7lMI/opqxLCVSsvjJay2FzD9uNw+W3PicgnmHK58UBXE"),"o7NDVtqQM2REurJg168xh/XpkiKl3yUfBALSvzb54F+HWnId0jGsTCYOmPcaZwe9")),function(data)
local data=cebdc0c5977ca3afff500e3d301f30369(i9912e11eac8496fde92ba9a3f421e6ab(pb1850c1492daf632c92f019115b32f1b(data),"j4deb43e8907399463450575bfb77c1"))
if data.code==35934 then
if currentVersion ~= data.msg.version then
if string.find(tostring(data.msg.updateurl),"http") == nil then
gg.alert("有新版本\n后台没有配置正确的更新地址")
else
gg.copyText(data.msg.updateurl)
gg.alert("有新版本\n当前版本:"..currentVersion.."\n最新版本:"..data.msg.version.."\n更新内容:"..tostring(data.msg.updateshow).."\n更新地址已复制到粘贴板,请在浏览器打开")
if data.msg.updatemust=="y" then
gg.alert("本次更新为强制更新,请先更新后使用")
os.exit()
end
end
end
end
end)
-- 单码登录/解绑
local isLogin = false
local function ya0c1d1a56294e1d7447b6ff0f7a80020()
--卡密自动存储和填写
local kami=io.open(kmPath,"r")
if kami==nil then
kami=""
else
kami=kami:read("*a")
end
local hde33d248b8ace0a27171fb042612b52e=gg.prompt({
"输入你的卡密",
"卡密解绑",
},{
kami
},{
'text',--文字
'checkbox',--多选
})
if hde33d248b8ace0a27171fb042612b52e == nil then
return
end
local p1513c1c57a39a76fa9a38a16d3f5ea3a=io.open(imeiPath,'r')
if p1513c1c57a39a76fa9a38a16d3f5ea3a==nil or p1513c1c57a39a76fa9a38a16d3f5ea3a:read("*a")== "" then
p1513c1c57a39a76fa9a38a16d3f5ea3a=x21d960d2e578f54cda5ef8759844f967(os.time()..math.random(10000,99999))
io.open(imeiPath,'w+'):write(p1513c1c57a39a76fa9a38a16d3f5ea3a)
else
p1513c1c57a39a76fa9a38a16d3f5ea3a=io.open(imeiPath,'r'):read("*a")
end
local j088e8d5b4367ee5486ef598cd7f36d8c = hde33d248b8ace0a27171fb042612b52e[1]
local y3b4d588389fd9d278afd3cbaa21bac8d = os.time()
local n095b2d362e95a4608d83bfbb7a2592e4 = math.random(1000,99999)..os.time()
local k0d34785bab49a68fb0424fca180a372d = x21d960d2e578f54cda5ef8759844f967("kami=" .. j088e8d5b4367ee5486ef598cd7f36d8c .. "&markcode=" .. p1513c1c57a39a76fa9a38a16d3f5ea3a .. "&t=" .. y3b4d588389fd9d278afd3cbaa21bac8d .. "&hefc78e873a9b2d87662449ee731490c")
if j088e8d5b4367ee5486ef598cd7f36d8c == "" then
gg.alert("卡密不可为空")
return
end
if hde33d248b8ace0a27171fb042612b52e[2]==true then
Http.post(hd7a6c2ab734d7abeb5955d187f78bee1.."18451f7966f5d9ce9fdd9745a21f7b6d",nb432e9fc1abcf9600c08fcdae055b192(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(wd07f574be71f8f3213ec39a8728df0bb(nb432e9fc1abcf9600c08fcdae055b192(nb432e9fc1abcf9600c08fcdae055b192(i9912e11eac8496fde92ba9a3f421e6ab(wd07f574be71f8f3213ec39a8728df0bb(wd07f574be71f8f3213ec39a8728df0bb("id=4IfRVFUUx4i&kami=" .. j088e8d5b4367ee5486ef598cd7f36d8c .. "&markcode=" .. p1513c1c57a39a76fa9a38a16d3f5ea3a .. "&t=" .. y3b4d588389fd9d278afd3cbaa21bac8d .. "&sign=" .. k0d34785bab49a68fb0424fca180a372d .. "&value=" .. n095b2d362e95a4608d83bfbb7a2592e4 .."")),"yd84718a4e862a65c11c2722d8538c3672958")))),"1dkGRbeOQYTr40tAh6Zf7lMI/opqxLCVSsvjJay2FzD9uNw+W3PicgnmHK58UBXE"),"o7NDVtqQM2REurJg168xh/XpkiKl3yUfBALSvzb54F+HWnId0jGsTCYOmPcaZwe9")),function(a3e9001c1c9985647e9ac2318fcf24446)
local data=cebdc0c5977ca3afff500e3d301f30369(i9912e11eac8496fde92ba9a3f421e6ab(pb1850c1492daf632c92f019115b32f1b(a3e9001c1c9985647e9ac2318fcf24446),"j4deb43e8907399463450575bfb77c1"))
if data.code==97553 then
gg.alert("解绑成功,剩余可解绑次数:" .. data.msg.num)
else
gg.alert(data.msg)
end
ya0c1d1a56294e1d7447b6ff0f7a80020()
end)
elseif hde33d248b8ace0a27171fb042612b52e[2]==false then
Http.post(hd7a6c2ab734d7abeb5955d187f78bee1.."18451f7966f5d9ce9fdd9745a21f7b6d",nb432e9fc1abcf9600c08fcdae055b192(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(h1ad65c5c4f6d9c0f24d5c0ad4a0c878f(wd07f574be71f8f3213ec39a8728df0bb(nb432e9fc1abcf9600c08fcdae055b192(nb432e9fc1abcf9600c08fcdae055b192(i9912e11eac8496fde92ba9a3f421e6ab(wd07f574be71f8f3213ec39a8728df0bb(wd07f574be71f8f3213ec39a8728df0bb("id=5Ar2S1izVJj&kami=" .. j088e8d5b4367ee5486ef598cd7f36d8c .. "&markcode=" .. p1513c1c57a39a76fa9a38a16d3f5ea3a .. "&t=" .. y3b4d588389fd9d278afd3cbaa21bac8d .. "&sign=" .. k0d34785bab49a68fb0424fca180a372d .. "&value=" .. n095b2d362e95a4608d83bfbb7a2592e4 .."")),"yd84718a4e862a65c11c2722d8538c3672958")))),"1dkGRbeOQYTr40tAh6Zf7lMI/opqxLCVSsvjJay2FzD9uNw+W3PicgnmHK58UBXE"),"o7NDVtqQM2REurJg168xh/XpkiKl3yUfBALSvzb54F+HWnId0jGsTCYOmPcaZwe9")),function(a3e9001c1c9985647e9ac2318fcf24446)
local a3e9001c1c9985647e9ac2318fcf24446=cebdc0c5977ca3afff500e3d301f30369(i9912e11eac8496fde92ba9a3f421e6ab(pb1850c1492daf632c92f019115b32f1b(sbc74cde5d9e854be00479ff08a26bf8a(qabfb5a6c972cc5b96bd3052e92a48710(i9912e11eac8496fde92ba9a3f421e6ab(pb1850c1492daf632c92f019115b32f1b(a3e9001c1c9985647e9ac2318fcf24446),"qd9a22657c937418e1560"),"WZJYcker6+3nCDPKLUSasyjARVmM48B9di0hovf1wxluqGHI57/b2QOXtNFzEpTg"))),"w3cfde98f1a784a531b"))
if a3e9001c1c9985647e9ac2318fcf24446.k7ade5b8cd368eefde34af1509b4f7cc1==27340 and a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.wc52d118bd32dea325ed3c0215f59b3a4=="32c9c1cae55ca48ba5df4d7637ccff0f" then
if a3e9001c1c9985647e9ac2318fcf24446.b571364a2175a9ee6abee475798004313-y3b4d588389fd9d278afd3cbaa21bac8d>30 or a3e9001c1c9985647e9ac2318fcf24446.b571364a2175a9ee6abee475798004313-y3b4d588389fd9d278afd3cbaa21bac8d<-30 then
gg.alert("设备时间不准")
else
if a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.k7af7cf81 ~= m53fff355278b0c6715b50517afb301ed(x21d960d2e578f54cda5ef8759844f967(""..n095b2d362e95a4608d83bfbb7a2592e4..""..k0d34785bab49a68fb0424fca180a372d..""..a3e9001c1c9985647e9ac2318fcf24446.k7ade5b8cd368eefde34af1509b4f7cc1..""..a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.g45229431c6b8d15e7b164197e85cdf9f.."")) or a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.f8d375808775ed1 ~= m53fff355278b0c6715b50517afb301ed(m53fff355278b0c6715b50517afb301ed(""..k0d34785bab49a68fb0424fca180a372d..""..a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.g45229431c6b8d15e7b164197e85cdf9f..""..k0d34785bab49a68fb0424fca180a372d.."")) or a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.pf900cd473ae2fb ~= m53fff355278b0c6715b50517afb301ed(j91db19167c2f7111c7af3285280dd02d(""..y3b4d588389fd9d278afd3cbaa21bac8d.."".."hefc78e873a9b2d87662449ee731490c".."")) or a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.e67383a84851fd6 ~= x21d960d2e578f54cda5ef8759844f967(m53fff355278b0c6715b50517afb301ed(""..y3b4d588389fd9d278afd3cbaa21bac8d..""..y3b4d588389fd9d278afd3cbaa21bac8d.."")) then
gg.alert("校验失败")
return
end
if a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.z959a42e4e3ce7d6b8d31ddd35cc187a9 == "single" then
gg.alert("登录成功\n剩余登录次数:"..a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.f7b4443cd585d364ec0023fff080ca743)
else
gg.alert("登录成功\n到期时间:"..os.date("%Y-%m-%d %H:%M:%S",a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a.abc5f6c795b25d1dd599e48bd346c4181))
end
io.open(kmPath,"w"):write(j088e8d5b4367ee5486ef598cd7f36d8c):close()
isLogin = true
--[[
.::::..
::::rrr7QQJi::i:iirijQBBBQB.
BBQBBBQBP. ......:::..1BBBB
.BuPBBBX .........r. vBQL :Y.
rd:iQQ ..........7L MB rr
7biLX .::.:....:.:q. ri .
JX1: .r:.r....i.r::...:. gi5
..vr .7: 7:. :ii: v.:iv :BQg
: r: 7r:i7i::ri:DBr..2S
i.:r:. .i:XBBK... :BP ::jr .7.
r i....ir r7. r.J: u.
:..X: .. .v: .:.Ji
i. ..i .. .u:. . 77: si 1Q
::.. .r .. :P7.r7r..:iLQQJ: rv ..
7 iK::r . ii7r LJLrL1r7DPi iJ r
. ::.: . ri 5DZDBg7JR7.:r: i.
.Pi r..r7: i.:XBRJBY:uU.ii:. .
QB rJ.:rvDE: .. ri uv . iir.7j r7.
iBg ::.7251QZ. . :. irr:Iu: r.
QB .:5.71Si.......... .sr7ivi:U
7BJ .7: i2. ........:.. sJ7Lvr7s
jBBdD. :. ........:r... YB Bi
:7j1. : :
]]
gg.alert("免责声明本辅助仅为本地修改,未与游戏服务器交互,影响极小,不破坏其他玩家的正常游戏体验使用任何辅助均存在账号被封禁风险,使用说明中已明确提醒不上榜不开端口玩美化不超过4分钟的情况下通常较安全,但仍由用户自行承担全部风险若用户将美化用于登录正常游戏账号,由此产生的一切后果(包括但不限于封号财产损失等),本辅助作者及相关方概不负责", "喵")
sG1="作者:麻辣蛋仔"
function UImain()
if io.open("/sdcard/林默/猫羽霏/love")==nil then
gg.toast("正在下载资源配置,喵")
gg.alert("正在下载资源配置,喵")
file.download("https://wp.kayyw.com/f/WDdJfe/%E7%8C%AB%E7%BE%BD%E9%9C%8F.zip","/sdcard/林默/猫羽霏/林默.zip")
file.unzip("/sdcard/林默/猫羽霏/林默.zip","/sdcard/林默/猫羽霏/")
end
dex.loadfile("/sdcard/林默/猫羽霏/CircleImageView.dex")
import("android.widget.CircleImageView")
local start_time = os.clock()
local baseWindow = require 'floatingWindowManager2'
baseWindow:darkMode()
baseWindow:lightMode()
local ui = require('ui')
import "android.animation.LayoutTransition"
layoutTransition=LayoutTransition()
layoutTransition:setDuration(900)
import("android.view.animation.Animation")
import("android.animation.ObjectAnimator")
import("android.view.animation.ScaleAnimation")
context:setTheme(0xff98C6D5)
import 'com.google.android.material.progressindicator.LinearProgressIndicator'
local window = require('windowManager')
local ui = require('ui')
file.checkFile("/sdcard/林默/猫羽霏/收藏歌单")
local musiclist = {}
local nowMusic = #musiclist
import("android.media.MediaPlayer")
mediaPlayer=MediaPlayer()
local currentLyrics = "词:未播放歌曲"
local lyricCache = {}
local lyricLineCache = {}
currentLyricColor = "#fffffff"
defaultLyricColor = "#d6d6d6"
local isPlaying = false
local 音量键 =false
local isReady = false
import "android.animation.ArgbEvaluator"
import "android.animation.ValueAnimator"
import("android.content.res.ColorStateList")
dex.loadfile("/sdcard/林默/猫羽霏/Lottie.dex")
import "com.airbnb.lottie.*"
local typeface = import("android.graphics.Typeface")
local FontPath = "/storage/emulated/0/林默/猫羽霏/软糖.ttf"
local font = typeface:createFromFile(FontPath)
import "android.animation.ValueAnimator"
import "android.graphics.Path"
import "android.view.animation.*"
import("android.media.AudioManager")
audi = context:getSystemService("audio")
audiotype = {
AudioManager.STREAM_ALARM,
AudioManager.STREAM_MUSIC,
AudioManager.STREAM_NOTIFICATION,
AudioManager.STREAM_RING,
AudioManager.STREAM_SYSTEM,
AudioManager.STREAM_VOICE_CALL,
AudioManager.STREAM_DTMF,
}
yinl = {}
for i = 1,#audiotype do
yinl[i] = {}
yinl[i].type = audiotype[i]
yinl[i].min = audi:getStreamMinVolume(audiotype[i])
yinl[i].max = audi:getStreamMaxVolume(audiotype[i])
yinl[i].now = audi:getStreamVolume(audiotype[i])
end
function jianting2()
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].min = audi:getStreamMinVolume(audiotype[i])
yinln[i].max = audi:getStreamMaxVolume(audiotype[i])
yinln[i].now = audi:getStreamVolume(audiotype[i])
_ENV['tupian'..当前ui..当前分区[当前ui]]:setColorFilter(0xff000000)
_ENV['tupian'..当前ui..i]:setColorFilter(0xff9C9FA5)
if yinln[i].now > yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
gg.alert("up")
elseif yinln[i].now < yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_RAISE,0)
gg.alert("down\n"..yinln[i].now.."\n"..yinl[i].now)
end
end
end
yltype = 0
function jianting3(func)
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now > yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 1 then
yltype = 0
func()
end
elseif yinln[i].now < yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 0 then
yltype = 1
func()
end
end
end
end
function jianting(func)
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now >= yinl[i].max then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
end
if yinln[i].now > yinl[i].now then
audi:setStreamVolume(yinln[i].type,yinl[i].now,0)
func()
end
end
end
function jianting3(func)
if 音量键==false then return 0 end
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now > yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 1 then
yltype = 0
func()
end
elseif yinln[i].now < yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 0 then
yltype = 1
func()
end
end
end
end
qhkai = 0
qiehuan = function()
if qhkai == 0 then
qhkai = 1
draw.remove()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow)
end)
gg.sleep(300)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
end)
else
qhkai = 0
luajava.runUiThread(function()
floatWindow:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(500):playOn(floatWindow)
end)
end
end
local function dpToPx(dp)
local resources = luajava.bindClass("android.content.res.Resources").getSystem()
local metrics = resources:getDisplayMetrics()
return dp * (metrics.densityDpi / 160)
end
function getVerticalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)
return jianbians
end
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
changan = {}
local changan = changan
local android = import('android.*')
local rotateAnimator = nil
changan.controlRotation = function(control, time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
if rotateAnimator ~= nil then
if rotateAnimator:isPaused() then
rotateAnimator:resume()
end
return
end
rotateAnimator = ObjectAnimator:ofFloat(control, "rotation", {0, 360})
rotateAnimator:setRepeatCount(-1)
rotateAnimator:setRepeatMode(Animation.RESTART)
rotateAnimator:setDuration(time)
rotateAnimator:start()
end)
end
changan.pauseRotation = function()
luajava.runUiThread(function()
if rotateAnimator ~= nil and rotateAnimator:isRunning() then
rotateAnimator:pause()
end
end)
end
local rotateAnimator1 = nil
changan.controlRotation1 = function(control, time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
if rotateAnimator1 ~= nil then
if rotateAnimator1:isPaused() then
rotateAnimator1:resume()
end
return
end
rotateAnimator1 = ObjectAnimator:ofFloat(control, "rotation", {0, 360})
rotateAnimator1:setRepeatCount(-1)
rotateAnimator1:setRepeatMode(Animation.RESTART)
rotateAnimator1:setDuration(time)
rotateAnimator1:start()
end)
end
changan.pauseRotation1 = function()
luajava.runUiThread(function()
if rotateAnimator1 ~= nil and rotateAnimator1:isRunning() then
rotateAnimator1:pause()
end
end)
end
function proo()
changan.controlRotation(IslandPic1, 10000)
end
function proo1()
changan.pauseRotation()
end
function proo3()
changan.controlRotation1(IslandPic2, 10000)
end
function proo4()
changan.pauseRotation1()
end
function getpx(x)
if type(x) == 'string' then
if string.find(x, 'dp') then
x = string.gsub(x, 'dp', '')
x = tonumber(x)
end
return x * (context:getResources():getDisplayMetrics().densityDpi / 160)
else
return x
end
end
local DP40 = getpx("40dp")
function write(fileName, content)
file.write(fileName, content)
end
local function 获取图片(txt)
txt = string.url(txt,"de")
ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1)
if string.find(tostring(txt),"http") ~= nil then
if panduan("/sdcard/林默/猫羽霏/"..ntxt) == false then
file.download(txt,"/sdcard/林默/猫羽霏/"..ntxt)
else
if file.length("/sdcard/林默/猫羽霏/"..ntxt) <= 1 then
file.download(txt,"/sdcard/林默/猫羽霏/"..ntxt)
end
end
txt = "/sdcard/林默/猫羽霏/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
local function getRes(x)
return 获取图片("/sdcard/林默/猫羽霏/"..x)
end
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
context = app.context
window = context:getSystemService("window")
function getLayoutParams()
LayoutParams = WindowManager.LayoutParams
layoutParams = luajava.new(LayoutParams)
if (Build.VERSION.SDK_INT >= 26) then
layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY
else
layoutParams.type = LayoutParams.TYPE_PHONE
end
layoutParams.format = PixelFormat.RGBA_8888
layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
layoutParams.gravity = Gravity.TOP|Gravity.LEFT
layoutParams.width = LayoutParams.WRAP_CONTENT
layoutParams.height = LayoutParams.WRAP_CONTENT
return layoutParams
end
slctb = luajava.loadlayout {
GradientDrawable,
color = "#00000000",
cornerRadius = 30
}
slcta = getVerticalBG({0xffE6EEF9,0xffE6EEF9},10,2,0xff969FAE)
slctb1 = getVerticalBG({0xffE6EEF9,0xffE6EEF9},10,2,0xff969FAE)
slcta1 = getVerticalBG({0xdd66709A,0xdd66709A},10,2,0xdd66709A)
hanshu = function(v, event)
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
x = mainLayoutParams.x
y = mainLayoutParams.y
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX)
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(floatWindow, mainLayoutParams)
end
end
YoYoImpl = luajava.getYoYoImpl()
changan.menu = function(sview)
forsview = sview
菜单页数=#sview
当前分区={} 分区页数={}
侧边={} 功能区={}
IslandPic2=luajava.loadlayout({
CircleImageView,
id=luajava.newId("IslandPic2"),
src=获取图片(xfcpic),
layout_width="70dp",
layout_height="70dp",
clipToOutline=true,
onClick=function() 灵动岛() end,
})
IslandPic1=luajava.loadlayout({
CircleImageView,
id=luajava.newId("IslandPic"),
src=获取图片(xfcpic),
layout_width="25dp",
layout_height="25dp",
layout_marginLeft="8dp",
clipToOutline=true,
onClick=function() 灵动岛() end,
})
cebian = {
LinearLayout,
id = "cebiannn",
layout_marginTop="5dp",
layout_marginLeft="2dp",
background = "#00000000",
layout_height = "match_parent",
layout_width = "match_parent",
orientation = "vertical",
gravity = "center_horizontal",
}
顶边 = {
LinearLayout,
background = "#00000000",
layout_height = "wrap_content",
layout_width = "match_parent",
gravity = "center_vertical",
}
for i = 1,菜单页数 do
分区页数[i]= #sview[i]
table.insert(cebian,
{
TextView,
Typeface=font,
id="jm"..i,
gravity = "center",
text=sview[i]['分页名字'],
layout_width = "90dp",
onClick = function() 切换(i) end,
layout_height = "23dp",
textColor = "#66709A",
textSize = "14sp",
})
功能区[i]={}
local layoutm={
LinearLayout,
id = "layoutm"..i,
layout_marginLeft = "10dp",
layout_width = "match_parent",
orientation = "vertical",
gravity = "center_horizontal",
}
local 顶边菜单 = {
LinearLayout,
layout_margin="5dp",
id = "cebigannn",
background = "#00000000",
layout_height = "wrap_content",
layout_width = "match_parent",
orientation = "horizontal",
}
for j = 1,分区页数[i] do
table.insert(顶边菜单,
{
TextView,
Typeface=font,
layout_height = "23dp",
layout_marginLeft="3dp",
layout_marginRight="3dp",
paddingLeft = "8dp",
paddingRight = "8dp",
layout_width = "wrap_content",
gravity = "center",
text = sview[i][j]['分区名字'],
id="dingwen"..i..j,
onClick = function() 分区(j) end,
background=slctb1,
textColor = "#66709A",
textSize = "12sp",
})
侧边[i] = luajava.loadlayout(
{
HorizontalScrollView,
layout_height = "35dp",
visibility = "gone",
layout_width = "match_parent",
顶边菜单
})
table.insert(顶边,侧边[i])
local menulayout={
LinearLayout,
layout_width='match_parent',
layout_height='wrap_content',
orientation = "vertical",
id='menu'..i..j,
}
for k,v in pairs(sview[i][j]['功能配置']) do
table.insert(menulayout,v)
end
local menulayout=menulayout
功能区[i][j]=menulayout
table.insert(layoutm,menulayout)
end
local menus={
LinearLayout,
layout_width = "250dp",
layout_height = "280dp",
orientation = "vertical",
padding = {
"5dp","1dp","0dp","0dp"
},
{
ScrollView,
fillViewport = "true",
gravity = "center",
layout_width = "match_parent",
layout_height = "match_parent",
orientation = "horizontal",
layoutm
}}
_ENV["layout"..i] =luajava.loadlayout(menus)
end
control=luajava.loadlayout({ImageView,
id = "control",
background = 获取图片(xfcpic),
layout_width = "40dp",
layout_height = "40dp",
onTouch = hanshu,
onClick = 隐藏,})
ckou = {
LinearLayout,
layout_width = "match_parent",
layout_height = "match_parent",
orientation = "vertical",
}
for i = 1,菜单页数 do
ckou[#ckou+1] = _ENV["layout"..i]
end
ckou=luajava.loadlayout(ckou)
heir=getRes("heir")
leftbar=luajava.loadlayout({
LinearLayout,
orientation = "vertical",
padding = "1dp",
layout_height = "match_parent",
{
MaterialCardView,
id="cnm",
layout_width='100dp',
layout_height='70dp',
useCompatPadding=false,
layout_margin='3dp',
cardElevation='5dp',
cardBackgroundColor=获取图片(左上角头像),
strokeColor=0x00ffffff,
background=getVerticalBG({0xffFEFEFD,0xffFEFEFD},15,2,0xffD7D7D7),
onClick=隐藏,
onTouch=hanshu,
__onCreate=function(v)
v:setRadius(20)
local c=ColorStateList({{android.R.attr.state_pressed},{-android.R.attr.state_pressed}}, {0x00ffffff,0x00ffffff})
v:setRippleColor(c)
end,
{
ImageView,
layout_width='match_parent',
layout_height='55dp',
gravity='center',
background=获取图片(左上角头像),
},
{
TextView,
layout_width='match_parent',
layout_height='10dp',
gravity='center',
textSize='10sp',
Typeface=font,
textColor = "#66709A",
layout_marginBottom = "3dp",
layout_gravity='bottom',
text=左上角标题,
},
},
{
LinearLayout,
layout_width = "match_parent",
layout_height = "0dp",
layout_weight = 1,
orientation = "vertical",
cebian,
},
{
TextView,
Typeface = font,
layout_width = "match_parent",
layout_height = "20dp",
gravity = "center",
id="banben",
textSize = "12sp",
textColor = "#66709A",
text = "麻辣蛋仔",
},
})
musicldd=luajava.loadlayout({
FrameLayout,
layout_gravity="center",
id="shadow",
visibility="gone",
{MaterialCardView,
__onCreate=function(v)
v:setRadius(20)
local c=ColorStateList({{android.R.attr.state_pressed},{-android.R.attr.state_pressed}}, {0x00ffffff,0x00ffffff})
v:setRippleColor(c)
end,
{
LinearLayout,
id="Island",
layout_height="280dp",
layout_width="468dp",
visibility="gone",
layout_gravity="center",
background=获取图片("https://free-img.400040.xyz/4/2026/10/06/6ac45e0c6cd6e.jpg"),
onClick=function() end,
{
LinearLayout,
id=luajava.newId("music"),
layout_height="fill_parent",
layout_width="fill_parent",
layout_gravity="center|top",
orientation="vertical",
{
LinearLayout,
layout_height="230dp",
gravity="center|left",
orientation="horizontal",
layout_width="460dp",
onClick=function() end,
{
ImageView,
layout_gravity="center|top",
src = "/storage/emulated/0/林默/猫羽霏/111",
ColorFilter="#FAFAFA",
background = getVerticalBG({0x80000000,0x80000000},20),
layout_marginLeft = "5dp",
layout_marginTop = "5dp",
layout_width = "25dp",
layout_height = "25dp",
onClick=function()
canSwipeUp=false
canSwipeDown=true
if 灵动 then
luajava.startThread(function()
luajava.runOnUiThread(function()
changan.controlSmall(shadow,1500)
Island:setVisibility(View.GONE)
luajava.getIdView("music"):setVisibility(View.INVISIBLE)
end)
灵动=false
gg.sleep(500)
end)
end
end,
},
{
LinearLayout,
layout_marginLeft = "25dp",
layout_height="125dp",
layout_width="125dp",
layout_gravity="center|left",
gravity="center",
background=获取图片("https://wp.kayyw.com/f/JDpjCx/1762874221285.jpg.png"),
IslandPic2,
},
{
LinearLayout,
orientation="vertical",
layout_width="230dp",
layout_marginLeft = "20dp",
layout_gravity="center|top",
layout_height="wrap_content",
gravity="center_horizontal",
{
LinearLayout,
layout_height="wrap_content",
layout_width="fill_parent",
orientation="vertical",
{
TextView,
id="Mname",
gravity="center",
layout_width="fill_parent",
layout_height="wrap_content",
layout_marginTop="10dp",
Typeface = font,
text="当前无音乐播放",
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#FAFAFA",
textSize="12dp",
},
{
TextView,
id="GSname",
gravity="center",
layout_width="fill_parent",
Typeface = font,
layout_height="wrap_content",
text="作者:麻辣蛋仔",
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#000000",
textSize="8dp",
},
},
{
ScrollView,
layout_width="fill_parent",
layout_height="wrap_content",
scrollbars="vertical",
fadingEdge="vertical",
{
TextView,
id=luajava.newId("Muname"),
gravity="center_horizontal|top",
layout_width="fill_parent",
layout_height="wrap_content",
Typeface = font,
layout_marginTop="5dp",
layout_marginBottom="5dp",
text="词:未播放歌曲",
ellipsize="none",
selected=true,
textColor="#FAFAFA",
textSize="12dp",
__onFinish = function(v)
v:setLineSpacing(dpToPx(4), 1.2)
end,
}
}
}
},
{
LinearLayout,
gravity="center",
layout_width='match_parent',
layout_height='20dp',
{
Slider,
id="hkuai",
trackStopIndicatorSize="0dp",
stepSize=1,
valueTo=100,
valueFrom=0,
trackHeight="6dp",
ThumbHeight="12dp",
tickVisible=false,
thumbWidth="3dp",
layout_width='match_parent',
layout_height='wrap_content',
labelFormatter=function(seconds)
if isPlaying then return ctime(seconds) else return "0:00" end
end,
addOnChangeListener=function(slider, value, fromUser)
if fromUser and isPlaying and isReady then mediaPlayer:seekTo(value*1000) end
end
},
},
{
LinearLayout,
layout_width='468dp',
layout_height='30dp',
background = getVerticalBG({0x80000000,0x80000000},0),
{
LinearLayout,
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
TextView,
id="ntime",
gravity="center|right",
layout_width="wrap_content",
layout_height="wrap_content",
text="0:00",
textColor="#FAFAFA",
textSize="11dp",
},
{
TextView,
gravity="center|right",
layout_width="wrap_content",
layout_height="wrap_content",
text="/",
textColor="#FAFAFA",
textSize="11dp",
},
{
TextView,
id="atime",
gravity="center|left",
layout_width="wrap_content",
layout_height="wrap_content",
text="0:00",
textColor="#FAFAFA",
textSize="11dp",
},
},
{
LinearLayout,
id=luajava.newId("Collection"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
id="souc",
src="/sdcard/林默/猫羽霏/unlove",
layout_width="20dp",
layout_height="20dp",
onClick=function() changan.controlWater(luajava.getIdView("Collection"),200) 收藏() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
id=luajava.newId("PreviousAong"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
src="/sdcard/林默/猫羽霏/last",
layout_width="25dp",
layout_height="25dp",
onClick=function() changan.controlWater(luajava.getIdView("PreviousAong"),200) 上一首() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
layout_weight=1,
id=luajava.newId("PauseLayout"),
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
LottieAnimationView,
id="ztkq",
layout_width="25dp",
layout_height="25dp",
onClick=function() 暂停() end,
},
},
{
LinearLayout,
id=luajava.newId("NextSong"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
src="/sdcard/林默/猫羽霏/next",
layout_width="25dp",
layout_height="25dp",
onClick=function() changan.controlWater(luajava.getIdView("NextSong"),200) 下一首() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
layout_weight=1,
id=luajava.newId("LoopSetting"),
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
id="bfsz",
src="/sdcard/林默/猫羽霏/setPlay",
layout_width="20dp",
layout_height="20dp",
onClick=function() 播放设置() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
src="/sdcard/林默/猫羽霏/playlist",
layout_width="20dp",
layout_marginLeft="match_parent",
layout_marginRight="15dp",
layout_gravity="center|right",
layout_height="20dp",
onClick=function() 播放列表() end,
ColorFilter="#FAFAFA",
}
},
}}
}
},
})
linelm=luajava.loadlayout({
LinearLayout,
layout_width = "1dp",
layout_height = "fill_parent",
background = "#D7D7D7"
})
centerbar=luajava.loadlayout({LinearLayout,
layout_width='match_parent',
layout_height='match_parent',
orientation='vertical',
{LinearLayout,
layout_width = "match_parent",
layout_height = "35dp",
orientation = "horizontal",
gravity = "center_vertical",
paddingLeft = "10dp",
{ImageView,
src=heir,
rotation=180,
layout_height="18dp",
layout_width="20dp",
ColorFilter=0xffB8B8B8,
onClick=function() if 当前分区[当前ui] > 1 then
分区(当前分区[当前ui] - 1)
end end,
onTouch=hanshu,
id=luajava.newId('toleft'),
},{ImageView,
src=heir,
layout_height="18dp",
onClick=function() if 当前分区[当前ui] < 分区页数[当前ui] then
分区(当前分区[当前ui] + 1)
end end,
layout_width="20dp",
ColorFilter=0xffB8B8B8,
id=luajava.newId('toright'),
},
{
HorizontalScrollView,
HorizontalScrollBarEnabled=false,
layout_height='wrap_content',
layout_width="210dp",
fillViewport = "true",
顶边,}
},
ckou,})
rightbar=luajava.loadlayout({LinearLayout,
id="yj1",
orientation='vertical',
layout_gravity = "right|top",
{
MaterialCardView,
orientation = "horizontal",
layout_width = "95dp",
layout_height = "25dp",
layout_margin = "2dp",
background=getVerticalBG({0xffFEFEFD,0xffFEFEFD},15,2,0xffD7D7D7),
cardElevation='3dp',
strokeColor=0x00ffffff,
onClick=隐藏,
onTouch=hanshu,
{
ImageView,
padding = "5dp",
src = getRes("lcsz"),
ColorFilter=0xff66709A,
layout_width = "wrap_content",
layout_height = "wrap_content",
layout_marginLeft = "5dp",
layout_gravity="center_vertical|left",
onClick = 隐藏,
onTouch = hanshu,
},
{
LinearLayout,
layout_width = "1dp",
layout_margin = "3dp",
layout_height = "match_parent",
background = "#D7D7D7",
layout_gravity = "center",
},
{
ImageView,
padding = "5dp",
layout_gravity = "right",
src = getRes("heix"),
ColorFilter=0xff66709A,
layout_width = "wrap_content",
layout_height = "wrap_content",
layout_marginRight = "5dp",
layout_gravity="center_vertical|right",
onClick = 隐藏,
onTouch = hanshu,
}
},
{
MaterialCardView,
orientation = "horizontal",
layout_marginTop = "5dp",
layout_width = "95dp",
layout_height = "25dp",
layout_margin = "2dp",
background=getVerticalBG({0xffFEFEFD,0xffFEFEFD},15,2,0xffD7D7D7),
cardElevation='3dp',
strokeColor=0x00ffffff,
{
LinearLayout,
gravity="center_vertical",
layout_height="match_parent",
layout_width = "match_parent",
{LinearLayout,
layout_weight=1,
layout_height='34dp',
layout_marginTop='3dp',
layout_marginBottom='3dp',
layout_marginLeft='3dp',
layout_marginRight='3dp',
layout_width='match_parent',
padding='3dp',
elevation='2dp',
{ScrollView,
id='ggscro',
layout_height='match_parent',
layout_width='match_parent',
{LinearLayout,
id='gggscro',
orientation='vertical',
layout_margin = "1dp",
layout_width='match_parent',
layout_height='wrap_content',
}
}
}
} },
{
MaterialCardView,
orientation = "horizontal",
layout_marginTop = "5dp",
layout_width = "95dp",
layout_height = "50dp",
layout_margin = "2dp",
cardElevation='3dp',
strokeColor=0x00ffffff,
background=getVerticalBG({0xffFEFEFD,0xffFEFEFD},15,2,0xffD7D7D7),
{LinearLayout,
layout_gravity = "center",
gravity = "center",
layout_height="40dp",
layout_width="40dp",
background="https://wp.kayyw.com/f/JDpjCx/1762874221285.jpg.png",
IslandPic1,
},
},
{
MaterialCardView,
cardBackgroundColor="https://free-img.400040.xyz/4/2026/10/06/6ac4628d42005.webp",
layout_marginTop = "5dp",
layout_width = "95dp",
layout_height = "155dp",
layout_margin = "1dp",
cardElevation='3dp',
strokeColor=0x00ffffff,
background=getVerticalBG({0xffFEFEFD,0xffFEFEFD},15,2,0xffD7D7D7),
{
ImageView,
layout_width='match_parent',
layout_height='155dp',
gravity='center',
background="https://free-img.400040.xyz/4/2026/10/06/6ac4628d42005.webp",
},
},
})
floatWindow = {
FrameLayout,
id = "motion",
elevation = "10dp",
onTouch = hanshu,
onClick = function() end,
layout_width = "470dp",
orientation = "vertical",
gravity = "center_vertical",
layout_height = "wrap_content",
{
LinearLayout,
id = "chuangk",
background=beij,
visibility = "visible",
layout_width = "wrap_content",
layout_height = "wrap_content",
orientation = "horizontal",
leftbar,
linelm,
centerbar,
rightbar},musicldd,
control,
}
local function invoke()
local ok
local RawX, RawY, x, y
mainLayoutParams = getLayoutParams()
floatWindow = luajava.loadlayout(floatWindow)
local function invoke2()
block('start')
window:addView(floatWindow, mainLayoutParams)
block('end')
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
block('join')
local isMove
end
invoke(swib1,swib2)
隐藏()
uiadtext("UI启动成功.","#161616")
切换(1)
分区(1)
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
setOnExitListener(function()
mediaPlayer:reset()
mediaPlayer:release()
window:removeView(floatWindow)
tuichu=1
end)
function SliderColor(id,color1,color2,color3)
id:setTrackActiveTintList(ColorStateList({{}},{"0xff"..color1}))
id:setTrackInactiveTintList(ColorStateList({{}},{"0x55"..color2}))
id:setThumbTintList(ColorStateList({{}},{"0x55"..color3}))
end
function SwitchColor(id,color)
id:setTrackTintList(ColorStateList({{android.R.attr.state_checked}},{color}))
end
SliderColor(hkuai,"ffffff","ffffff","FFFFFF")
ztkq:setAnimationFromJson(io.open("/sdcard/林默/猫羽霏/Pause", "r"):read("*all"))
while true do
if tuichu == 1 then os.exit() end
if 音量键 then
jianting3(qiehuan)
gg.sleep(300)
end
if isPlaying and isReady and #musiclist ~= 0 then
luajava.runOnUiThread(function()
local currentPos = mediaPlayer:getCurrentPosition()
ntime:setText(ctime(math.floor(currentPos/1000)))
hkuai:setValue(math.floor(currentPos/1000))
syncLyricWithProgress(currentPos)
end)
end
gg.sleep(60)
end
end
function souyy(txt)
return table.json(gg.makeRequest("http://music.163.com/api/search/get?s="..txt.."&type=1&offset=0&total=true&limit=20").content)
end
function searchmusic()
mustxt=luajava.getIdView("搜索"):getText()
mustxt=tostring(mustxt)
luajava.runOnUiThread(function()
luajava.getIdView("搜索"):setText("")
luajava.getIdView("musicWindow"):setVisibility(View.GONE)
SearchProgress:setVisibility(View.VISIBLE)
end)
if string.trim(mustxt)~="" then
musictable={}
mustable=souyy(mustxt)
mustable=mustable.result.songs
for k,v in pairs(mustable) do
musictable[#musictable + 1]=v
end
Sortsong(20)
end
luajava.runOnUiThread(function()
luajava.getIdView("musicWindow"):setVisibility(View.VISIBLE)
SearchProgress:setVisibility(View.GONE)
YoYoImpl:with("FadeIn"):duration(500):playOn(luajava.getIdView("musicWindow"))
end)
end
function Sortsong(formath)
musiccheck={}
for i=1,formath do
musid=musictable[#musictable+1-i].id
musname=musictable[#musictable+1-i].name
musart=musictable[#musictable+1-i].artists[0].name
musvip=musictable[#musictable+1-i].fee
musiccheck[#musiccheck+1]={musid,musname,musart,musvip}
end
musicadapter=ui.BaseAdapter({
getCount = function()
return table.getn(musiccheck)
end,
getItem = function(position)
return musiccheck[position + 1]
end,
getItemId = function(position)
return position
end,
getView=function(position, convertView, parent)
local SwitchView
local info=musicadapter:getItem(position)
if not convertView then
SwitchView=luajava.loadlayout({
MaterialCardView,
background=getVerticalBG({0xffE6EEF9,0xffE6EEF9},10,2,0xff969FAE),
layout_width="match_parent",
strokeWidth=0,
layout_margin = "2dp",
{
LinearLayout,
orientation="vertical",
padding="3dp",
gravity="center",
layout_width="match_parent",
{
TextView,
textSize="14sp",
textColor="#66709A",
Typeface = font,
layout_hight="10dp",
layout_width="wrap_content",
gravity="center"
},
{
TextView,
textColor="#000000",
textSize="10sp",
Typeface = font,
layout_hight="10dp",
layout_width="wrap_content",
gravity="center"
}
}
})
else
SwitchView=convertView
end
SwitchView:getChildAt(0):getChildAt(0):setText(info[2])
SwitchView:getChildAt(0):getChildAt(1):setText(info[3])
SwitchView:setOnClickListener(function()
bofang(info[1],info[2],info[3])
end)
return SwitchView
end
})
luajava.runOnUiThread(function()
musiclistview:setAdapter(musicadapter)
end)
end
lastClickTime1=0
function bofang(musicid, musicname, musicstart)
local currentTime1=os.time()
if currentTime1 - lastClickTime1 < 1 then return 0 end lastClickTime1=currentTime1
isExist=false
for i, _ in ipairs(musiclist) do
if musiclist[i][1] == musicid then
nowMusic = i
播放歌曲(musiclist[i][1])
isExist=true
end
end
if not isExist then
table.insert(musiclist, {musicid, musicname, musicstart, false})
nowMusic = #musiclist
播放歌曲(musicid)
end
end
function 写入()
lovemusic = {}
for _, v in pairs(musiclist) do
if v[4] then
table.insert(lovemusic, v)
end
end
file.write("/sdcard/林默/猫羽霏/收藏歌单",lovemusic)
end
function 灵动岛()
luajava.runOnUiThread(function()
end)
luajava.getIdView("music"):setVisibility(View.VISIBLE)
if 灵动 then
luajava.startThread(function()
luajava.runOnUiThread(function()
changan.controlSmall(shadow1,1500)
Island:setVisibility(View.GONE)
end)
灵动=false
luajava.runOnUiThread(function()
end)
end)
else
luajava.startThread(function()
luajava.runOnUiThread(function()
Island:setVisibility(View.VISIBLE)
end)
灵动=true
luajava.runOnUiThread(function()
luajava.getIdView("music"):setVisibility(View.VISIBLE)
end)
end)
end
end
function ctime(value)
local minutes=math.floor(value / 60)
local seconds=value % 60
return string.format("%d:%02d",minutes,seconds)
end
function setTime(value)
local minutes=math.floor(value/1000)
luajava.runOnUiThread(function()
hkuai:setValueTo(minutes)
atime:setText(ctime(minutes))
end)
end
function playMusic(id)
pcall(function()
mediaPlayer:reset()
mediaPlayer:setDataSource("/sdcard/林默/猫羽霏/音乐缓存/"..id)
mediaPlayer:prepare()
luajava.getIdValue("IslandPic"):setImageDrawable(获取图片("/sdcard/林默/猫羽霏/音乐缓存/Pic2"..id))
luajava.getIdValue("IslandPic2"):setImageDrawable(获取图片("/sdcard/林默/猫羽霏/音乐缓存/Pic2"..id))
proo()
proo3()
end)
end
function parseLyrics(lyricText)
local lines = {}
if not lyricText or lyricText == "" then return lines end
for line in lyricText:gmatch("[^\r\n]+") do
local timeStr, text = line:match("%[(%d+:%d+%.?%d*)%](.*)")
if timeStr and text then
local textTrimmed = text:trim()
if textTrimmed ~= "" then
local minutes, seconds = timeStr:match("(%d+):(%d+%.?%d*)")
if minutes and seconds then
local totalMs = math.floor((tonumber(minutes) * 60 + tonumber(seconds)) * 1000)
table.insert(lines, {
timestamp = totalMs,
text = textTrimmed
})
end
end
end
end
table.sort(lines, function(a, b) return a.timestamp < b.timestamp end)
for i, line in ipairs(lines) do
line.text = line.text:gsub("\r\n", "\n"):gsub("\r", "\n")
end
return lines
end
function getLyrics(songId)
if not songId then return "暂无歌词", {} end
if lyricCache[songId] and lyricLineCache[songId] then
return lyricCache[songId], lyricLineCache[songId]
end
local url = "http://music.163.com/api/song/lyric?os=pc&id=" .. songId .. "&lv=-1&kv=-1&tv=-1"
local success, response = pcall(gg.makeRequest, url)
if not success or not response or not response.content then
lyricCache[songId] = "歌词加载失败:网络异常"
lyricLineCache[songId] = {}
return lyricCache[songId], lyricLineCache[songId]
end
local jsonData = table.json(response.content)
if not jsonData or not jsonData.lrc or not jsonData.lrc.lyric then
lyricCache[songId] = "暂无歌词"
lyricLineCache[songId] = {}
return lyricCache[songId], lyricLineCache[songId]
end
local originalLyrics = jsonData.lrc.lyric
local translatedLyrics = jsonData.tlyric and jsonData.tlyric.lyric and jsonData.tlyric.lyric ~= ""
and jsonData.tlyric.lyric or ""
local mergedLyric, formattedLines = mergeLyrics(originalLyrics, translatedLyrics)
lyricCache[songId] = mergedLyric
lyricLineCache[songId] = formattedLines
return mergedLyric, formattedLines
end
function mergeLyrics(original, translated)
local origLines = parseLyrics(original)
local transLines = parseLyrics(translated)
if #origLines == 0 then
return "暂无歌词", {}
end
local result = ""
local formattedLines = {}
local transMap = {}
for _, trans in ipairs(transLines) do
transMap[trans.timestamp] = trans.text
end
local matchThreshold = 300
for _, origLine in ipairs(origLines) do
local transText = nil
if transMap[origLine.timestamp] then
transText = transMap[origLine.timestamp]
else
for transTs, text in pairs(transMap) do
if math.abs(transTs - origLine.timestamp) < matchThreshold then
transText = text
break
end
end
end
result = result .. origLine.text .. "\n"
if transText then
result = result .. "「" .. transText .. "」\n"
table.insert(formattedLines, {
timestamp = origLine.timestamp,
fullText = origLine.text .. "\n「" .. transText .. "」"
})
else
table.insert(formattedLines, {
timestamp = origLine.timestamp,
fullText = origLine.text
})
end
end
result = result:gsub("\n$", ""):gsub("\r\n", "\n"):gsub("\r", "\n")
return result, formattedLines
end
function getMusicPictures(id)
local briefIntroduction = table.json(file.read("/sdcard/林默/猫羽霏/音乐缓存/pic".. id))
if briefIntroduction.code == 200 then
picUrl = briefIntroduction.songs[0].album.picUrl
else
picUrl = 'https://free-img.400040.xyz/4/2026/10/06/6ac45d3c00fbb.jpg'
end
return picUrl
end
function syncLyricWithProgress(progressMs)
if not currentFormattedLyrics or #currentFormattedLyrics == 0 then
return
end
luajava.runOnUiThread(function()
local scrollView = luajava.getIdView("Muname"):getParent()
local munameView = luajava.getIdView("Muname")
if not munameView or not isPlaying or not scrollView then
return
end
local targetIndex = 1
for i = #currentFormattedLyrics, 1, -1 do
if currentFormattedLyrics[i].timestamp <= progressMs then
targetIndex = i
break
end
end
local fullLyric = ""
for i = 1, #currentFormattedLyrics do
local lineText = currentFormattedLyrics[i].fullText:gsub("\n", "
")
if i == targetIndex then
fullLyric = fullLyric .. "" .. lineText .. "
"
else
fullLyric = fullLyric .. "" .. lineText .. "
"
end
end
fullLyric = fullLyric:gsub("
$", "")
munameView:setText(string.fromHtml(fullLyric))
munameView:setLineSpacing(dpToPx(8), 1.5)
local lineHeight = munameView:getLineHeight()
local scrollY = (targetIndex - 2) * lineHeight
scrollY = math.max(0, scrollY)
scrollView:smoothScrollTo(0, scrollY)
end)
end
function updateLyricDisplay(songId)
luajava.newThread(function()
local lyricText, formattedLines = getLyrics(songId)
luajava.runOnUiThread(function()
local scrollView = luajava.getIdView("Muname"):getParent()
local munameView = luajava.getIdView("Muname")
if not munameView or not scrollView then
return
end
local defaultFullLyric = "" .. lyricText .. ""
munameView:setText(string.fromHtml(defaultFullLyric))
munameView:setLineSpacing(dpToPx(6), 1.3)
munameView:setGravity(Gravity.CENTER_HORIZONTAL + Gravity.TOP)
currentFormattedLyrics = formattedLines
scrollView:fullScroll(View.FOCUS_DOWN)
scrollView:scrollTo(0, 0)
end)
end):start()
end
function 播放歌曲(id)
isReady=false
if #musiclist == 0 then return end
if isPlaying==false then ztkq:setSpeed(1) ztkq:playAnimation() isPlaying=true end
currentFormattedLyrics = {}
if file.length("/sdcard/林默/猫羽霏/音乐缓存/"..id) ~= 0 or file.length("/sdcard/林默/猫羽霏/音乐缓存/Pic2"..id) ~= 0 then
playMusic(id)
updateLyricDisplay(id)
else
luajava.startThread(function()
local co = coroutine.create(function()
local success = file.download("http://music.163.com/song/media/outer/url?id=".. id.. ".mp3","/sdcard/林默/猫羽霏/音乐缓存/".. id)
file.download('http://music.163.com/api/song/detail/?id='..id..'&ids=['..id..']',"/sdcard/林默/猫羽霏/音乐缓存/pic".. id)
file.download(getMusicPictures(id),"/sdcard/林默/猫羽霏/音乐缓存/Pic2"..id)
return success
end)
local status, result = coroutine.resume(co)
if status and result then
playMusic(id)
updateLyricDisplay(id)
else
gg.alert("播放失败\n下载出现问题,无法播放音乐")
end
end)
end
end
luajava.setInterface(mediaPlayer, 'setOnPreparedListener',{
onPrepared=function(media)
isReady=true
mediaTime=media:getDuration()
media:start()
setTime(mediaTime)
luajava.runOnUiThread(function()
hkuai:setValue(1)
Mname:setText(musiclist[nowMusic][2])
GSname:setText(musiclist[nowMusic][3])
if musiclist[nowMusic][4] then
sc=false
souc:setImageDrawable(getRes("love"))
souc:setColorFilter(0xffEC2937)
else
sc=true
souc:setImageDrawable(getRes("unlove"))
souc:setColorFilter(0xffFAFAFA)
end
end)
end
})
luajava.setInterface(mediaPlayer, 'setOnCompletionListener',
{onCompletion=function(media)
换一首()
end})
function MaterialAlert(text)
MaterialAlertDialog=MaterialAlertDialogBuilder(baseWindow:getContext())
:setTitle(项目名字)
:setMessage(text)
:setPositiveButton('确定')
luajava.showAlert(MaterialAlertDialog)
end
BSZ=0
function 换一首()
if BSZ==0 then
下一首()
elseif BSZ==1 then
local randomnowMusic=math.random(1,#musiclist)
local selectedNumber=musiclist[randomnowMusic]
nowMusic=randomnowMusic
播放歌曲(selectedNumber[1])
elseif BSZ==2 then
播放歌曲(musiclist[nowMusic][1])
elseif BSZ==3 then
luajava.newThread(function()
播放歌曲(musiclist[nowMusic][1])
gg.sleep(110)
isPlaying=false
mediaPlayer:pause()
luajava.runOnUiThread(function()
ztkq:setSpeed(-1)
ztkq:playAnimation()
end)
end):start()
end
end
function 播放设置()
changan.controlWater(luajava.getIdView("LoopSetting"),200)
if BSZ==0 then
BSZ=BSZ+1
bfsz:setImageDrawable(getRes("repeatone"))
elseif BSZ==1 then
BSZ=BSZ+1
bfsz:setImageDrawable(getRes("stoploop"))
elseif BSZ==2 then
BSZ=BSZ+1
bfsz:setImageDrawable(getRes("listloop"))
elseif BSZ==3 then
BSZ=0
bfsz:setImageDrawable(getRes("setPlay"))
end
end
function 暂停()
if isPlaying then
ztkq:setSpeed(-1)
ztkq:playAnimation()
proo1()
proo4()
if isReady then
proo1()
proo4()
mediaPlayer:pause()
end
isPlaying=false
else
if isReady then
mediaPlayer:start()
end
ztkq:setSpeed(1)
proo()
proo3()
ztkq:playAnimation()
isPlaying=true
end
end
function 下一首()
if #musiclist == 0 then MaterialAlert("列表没有可播放歌曲,请前往音乐界面添加!")
切换(5)
luajava.runOnUiThread(function()
end) return end
nowMusic=nowMusic + 1
if nowMusic > #musiclist then
nowMusic=1
end
musicInfo=musiclist[nowMusic]
播放歌曲(musicInfo[1])
end
function 上一首()
if #musiclist == 0 then MaterialAlert("列表没有可播放歌曲,请前往音乐界面添加!")
luajava.runOnUiThread(function()
end) return end
nowMusic=nowMusic - 1
if nowMusic < 1 then
nowMusic=#musiclist
end
musicInfo=musiclist[nowMusic]
播放歌曲(musicInfo[1])
end
sc=true
function 收藏()
if isReady then
if sc then
sc=false
musiclist[nowMusic][4]=true
souc:setImageDrawable(getRes("love"))
souc:setColorFilter(0xffEC2937)
else
sc=true
musiclist[nowMusic][4]=false
souc:setImageDrawable(getRes("unlove"))
souc:setColorFilter(0xffFAFAFA)
end
写入()
end
end
function 刷新列表()
playadapter=ui.BaseAdapter({
getCount = function()
return #musiclist
end,
getItem = function(position)
return musiclist[position + 1]
end,
getItemId = function(position)
return position
end,
getView=function(position, convertView, parent)
local SwitchView
local info=playadapter:getItem(position)
if info[4] then
MTP=getRes("love")
MTPC=0xffEC2937
else
MTP=getRes("unlove")
MTPC=0xff4B484F
end
if not convertView then
SwitchView=luajava.loadlayout(
{
FrameLayout,
layout_width="match_parent",
layout_height="30dp",
paddingLeft="5dp",
paddingRight="5dp",
{
ImageView,
id="Playlike",
src=MTP,
layout_gravity="center|left",
ColorFilter=MTPC,
layout_width="22dp",
layout_height="22dp",
},
{
TextView,
id="playname",
layout_marginLeft="25dp",
layout_marginRight="25dp",
layout_width="match_parent",
Typeface = font,
layout_height="wrap_content",
layout_gravity="center",
gravity="center",
textColor="#27253A",
},
{
ImageView,
id="songremove",
src="/sdcard/林默/猫羽霏/heix",
ColorFilter="#4B484F",
layout_gravity="center|right",
layout_width="18dp",
layout_height="18dp",
},
})
else
SwitchView=convertView
end
Playlike:setOnClickListener(function()
if info[4] then
info[4]=false
musiclist[position+1][4]=false
写入()
刷新列表()
luajava.runOnUiThread(function()
if nowMusic==position+1 then sc=true
souc:setImageDrawable(getRes("unlove"))
souc:setColorFilter(0xffFAFAFA) end
end)
else
info[4]=true
musiclist[position+1][4]=true
写入()
刷新列表()
luajava.runOnUiThread(function()
if nowMusic==position+1 then sc=false
souc:setImageDrawable(getRes("love"))
souc:setColorFilter(0xffEC2937) end
end)
end
end)
playname:setOnClickListener(function()
播放歌曲(info[1],info[2],info[3],info[4])
nowMusic=position+1
end)
playname:setText(info[2])
songremove:setOnClickListener(function()
luajava.startThread(function()
if gg.alert('确定删除['..info[2]..']吗?','确定','点错了')==1 then
table.remove(musiclist,position+1) 刷新列表() 写入()
if nowMusic==position+1 then 下一首() end end
end)
end)
return SwitchView
end
})
luajava.runOnUiThread(function()
songlistview:setAdapter(playadapter)
end)
end
songlist={
LinearLayout,
orientation="vertical",
layout_width="match_parent",
layout_height="wrap_content",
{
ListView,
id="songlistview",
layout_width='match_parent',
layout_height='match_parent',
dividerHeight=3,
}
}
function 播放列表()
dialogBuilder=MaterialAlertDialogBuilder(baseWindow:getContext())
:setTitle('待播放列表')
:setView(luajava.loadlayout(songlist))
:setPositiveButton('确定')
luajava.showAlert(dialogBuilder)
刷新列表()
end
function uiadtext(txt,color,size)
if not txt then txt = "" end
if not color then color = "#000000" end
if not size then size = "10sp" end
local tmp=luajava.loadlayout(
{
TextView,
Typeface=font,
text = string.fromHtml(" "..getTimeStamp55(os.time()).." "..txt..""),
textSize = size,
gravity="left",
layout_width = "wrap_content",
})
luajava.post(function()
gggscro:addView(tmp)
end)
luajava.newThread(function()
gg.sleep(100)
luajava.post(function()
ggscro:fullScroll(View.FOCUS_DOWN)
end)
end):start()
end
function addadView(tmp)
local function invoke()
parentv:addView(tmp)
end
luajava.post(invoke)
end
function rmdadView(tmp)
local function invoke()
parentv:removeView(tmp)
end
luajava.post(invoke)
end
function getTimeStamp55(t)
local str = os.date("%H:%M:%S",t)
return str
end
当前ui = 1
function 切换(x)
当前ui = x
luajava.runUiThread(function()
if 当前分区[当前ui]==nil then
分区(1)
else
for i=1,分区页数[当前ui] do
_ENV['dingwen'..当前ui..i]:setBackground(getVerticalBG({0xffE6EEF9,0xffE6EEF9},10,2,0xff969FAE))
_ENV['dingwen'..当前ui..i]:setTextColor(0xff66709A)
end
_ENV['dingwen'..当前ui..当前分区[当前ui]]:setBackground(getVerticalBG({0xdd66709A,0xdd66709A},10,2,0xdd66709A))
_ENV['dingwen'..当前ui..当前分区[当前ui]]:setTextColor(0xffffffff)
end
for i = 1,菜单页数 do
_ENV["layout"..i]:setVisibility(View.GONE)
_ENV["jm"..i]:setBackground(slctb)
侧边[i]:setVisibility(View.GONE)
end
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
侧边[当前ui]:setVisibility(View.VISIBLE)
_ENV["jm"..当前ui]:setBackground(slcta)
currentFuncLayout = _ENV['menu'..当前ui..当前分区[当前ui]]
end)
end
function 分区(x)
当前分区[当前ui]=x
luajava.runUiThread(function()
for i=1,分区页数[当前ui] do
_ENV['menu'..当前ui..i]:setVisibility(View.GONE)
_ENV['dingwen'..当前ui..i]:setBackground(getVerticalBG({0xffE6EEF9,0xffE6EEF9},10,2,0xff969FAE))
_ENV['dingwen'..当前ui..i]:setTextColor(0xff66709A)
end
_ENV['menu'..当前ui..当前分区[当前ui]]:setVisibility(View.VISIBLE)
_ENV['dingwen'..当前ui..当前分区[当前ui]]:setBackground(getVerticalBG({0xdd66709A,0xdd66709A},10,2,0xdd66709A))
_ENV['dingwen'..当前ui..当前分区[当前ui]]:setTextColor(0xffffffff)
currentFuncLayout = _ENV['menu'..当前ui..当前分区[当前ui]]
end)
end
显示 = 0
beij = luajava.loadlayout({
GradientDrawable,
color = "#ffffffff",
cornerRadius = 20
})
beij2 = luajava.loadlayout({
GradientDrawable,
color = "#001E1C27",
cornerRadius = 10
})
import "android.animation.FloatEvaluator"
import "android.view.animation.AccelerateDecelerateInterpolator"
显示 = 0
function 隐藏()
luajava.runUiThread(function()
if tonumber(tostring(control:getVisibility())) == 0 then
control:setVisibility(View.GONE)
显示 = 1
luajava.runUiThread(function()
height1 = DP40
width1 = DP40
local animator = ValueAnimator:ofFloat({0, 1})
animator:setDuration(600)
local path = Path()
path:moveTo(0.0, 0.0)
path:cubicTo(0.4, 0.0, 0.2, 1.0, 1.0, 1.0)
animator:setInterpolator(PathInterpolator(path))
local listener = luajava.createProxy('android.animation.ValueAnimator$AnimatorUpdateListener', {
onAnimationUpdate = function(animation)
local animatedProgress = animation:getAnimatedValue()
if animatedProgress > 1 then
animatedProgress = 1 + (animatedProgress - 1) / 6
end
mainLayoutParams.height = height1 + (getpx("300") - height1) * animatedProgress
mainLayoutParams.width = width1 + (getpx("470") - width1) * animatedProgress
window:updateViewLayout(floatWindow, mainLayoutParams)
end
})
animator:addUpdateListener(listener)
local listener = luajava.createProxy('android.animation.Animator$AnimatorListener', {
onAnimationStart = function()
YoYoImpl:with("FadeOut"):duration(1000):playOn(control)
chuangk:setVisibility(View.VISIBLE)
end,
onAnimationEnd = function()
control:setVisibility(View.GONE)
chuangk:setVisibility(View.VISIBLE)
shadow:setVisibility(View.VISIBLE)
end,
onAnimationCancel = function(animator)
end
})
animator:addListener(listener)
animator:start()
end)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
window:updateViewLayout(floatWindow, mainLayoutParams)
else
luajava.runUiThread(function()
height1 = getpx("300")
width1 = getpx("470")
local animator = ValueAnimator:ofFloat({0, 1})
animator:setDuration(600)
local path = Path()
path:moveTo(0.0, 0.0)
path:cubicTo(0.4, 0.0, 0.2, 1.0, 1.0, 1.0)
animator:setInterpolator(PathInterpolator(path))
local listener = luajava.createProxy('android.animation.ValueAnimator$AnimatorUpdateListener', {
onAnimationUpdate = function(animation)
local animatedProgress = animation:getAnimatedValue()
if animatedProgress > 1 then
animatedProgress = 1 + (animatedProgress - 1) / 6
end
mainLayoutParams.height = height1 + (DP40 - height1) * animatedProgress
mainLayoutParams.width = width1 + (DP40 - width1) * animatedProgress
window:updateViewLayout(floatWindow, mainLayoutParams)
end
})
animator:addUpdateListener(listener)
local listener = luajava.createProxy('android.animation.Animator$AnimatorListener', {
onAnimationStart = function()
YoYoImpl:with("FadeIn"):duration(500):playOn(control)
control:setVisibility(View.VISIBLE)
end,
onAnimationEnd = function()
chuangk:setVisibility(View.GONE)
control:setVisibility(View.VISIBLE)
shadow:setVisibility(View.GONE)
end,
onAnimationCancel = function(animator)
end
})
animator:addListener(listener)
animator:start()
end)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
window : updateViewLayout (floatWindow , mainLayoutParams)
显示 = 0
end
end)
end
changan.controlWater = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.8, 0.9, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1,0.8,0.9,1
}):setDuration(time):start()
end) end
changan.controlSmall = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
changan.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0x66d7d7d7,0x66d7d7d7},15))
selector:addState({
-android.R.attr.state_pressed
}, getVerticalBG({0xffffffff,0xffffffff},15,3,0xffB8B8B8))
return selector
end
function changan.text(txt , color , size,bjz )
if not txt then
txt = "未设置文字"
end
if not color then
color = "#ffffff"
end
if not size then
size = "18sp"
end
if not bjz then
bjz = "left"
end
return luajava.loadlayout (
{
TextView ,
text = txt ,
textSize = size ,
Typeface = font,
gravity = bjz ,
textColor = color ,
layout_width = "fill_parent" ,
} )
end
buts={}
function changan.button(txt,func,txtc)
if not txt then txt = "未设置" end
if not txtc then txtc="#66709A" end
local tid="button"..string.randomUUID(true)
buts[tid]=luajava.loadlayout(
{
LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content", {
LinearLayout,
layout_width = "fill_parent",
layout_marginleft='5dp',
layout_marginBottom='5dp',
layout_marginTop='3dp',
cardElevation='3dp',
elevation="2dp",
background = getButtonBG(),
padding="5dp",
onClick = function()
changan.controlWater(buts[tid],300)
uiadtext(txt.." 已开启.","#161616")
luajava.newThread(func):start() end,
{
TextView,
Typeface=font,
textColor = txtc,
Typeface = font,
text = txt,
gravity="center",
textSize = "13sp",
layout_height = "wrap_content",
layout_width = "fill_parent",
}
}})
return buts[tid]
end
colorvs = {}
function changan.seek(name,variable,min,max,now)
local nid=name..string.randomUUID(true)
colorvs[#colorvs+1]={"slider",nid}
return{
LinearLayout,
layout_width='fill_parent',
layout_height="wrap_content",
gravity="center_vertical",
orientation="horizontal",
{
TextView,
Typeface=font,
text=name,
textColor="0xff66709A",
textSize="13sp",
layout_width='50dp',
layout_height='wrap_content',
gravity="center_right",
layout_marginLeft = "8dp",
},
{
Slider,
id=luajava.newId(nid),
trackStopIndicatorSize="0dp",
stepSize=1,
valueTo=max,
valueFrom=min,
value=now,
trackHeight="4dp",
ThumbHeight="20dp",
ThumbWidth="20dp",
tickVisible=false,
layout_width='0dp',
layout_height='wrap_content',
layout_weight=1,
CustomThumbDrawable = luajava.getBitmapDrawable("/storage/emulated/0/林默/猫羽霏/seek图标"),
TrackActiveTintList=ColorStateList({{}},{0xffD4E3F6}),
TrackInactiveTintList=ColorStateList({{}},{0xffC4C4C4}),
ThumbTintList=ColorStateList({{}},{0xffD4E3F6}),
onClick = function() luajava.newThread(function() func() end):start() end,
addOnChangeListener=function(slider,value,fromUser)
if not fromUser then
return
end
if variable then
_ENV[variable] = value
end
end
},
}
end
function 开关3(name,func1,func2,nid)
local sname = nid
local localname=name
name = name..string.randomUUID(true)
_ENV[name] = "关"
if func1 == nil then func1 = "" end
if func2 == nil then func2 = "" end
if type(func1) == "function" then
local outfunc=function()
namers = _ENV[name]
if namers ~= "开" then
vibra:vibrate(9)
luajava.runUiThread(function()
uiadtext(localname.." 已开启.","#161616")
luajava.getIdValue(nid.."k"):setVisibility(View.GONE)
YoYoImpl:with("Swing"):duration(600):playOn(switches["2s"..sname])
luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE)
luajava.getIdValue(nid):setBackground(checkbg)
luajava.newThread(function()
pcall(func1)
end):start()
end)
_ENV[name] = "开"
else
vibra:vibrate(9)
luajava.runUiThread(function()
uiadtext(localname.." 已关闭.","#161616")
luajava.getIdValue(nid.."g"):setVisibility(View.GONE)
YoYoImpl:with("Swing"):duration(600):playOn(switches["1s"..sname])
luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE)
luajava.getIdValue(nid):setBackground(checkbga)
luajava.newThread(function()
pcall(func2)
end):start()
end)
_ENV[name] = "关"
end
end
return outfunc
end
end
function changan.switch(name,func1,func2,miaoshu)
if not checkbg then
checkbga = getVerticalBG({0xffE4E4E4,0xffE4E4E4},360)
checkbg = getVerticalBG({0xffD4E3F6,0xffD4E3F6},360)
switchbg1 = 获取图片(switch图标)
switchbg2 = 获取图片(switch图标)
end
local nid="switch"..string.randomUUID(true)
local func = 开关3(name,func1,func2,nid)
if not name then name = "未设置" end
switches["1s"..nid] = luajava.loadlayout {
FrameLayout,
layout_width = '40dp',
layout_height = '20dp',
gravity = "center_vertical",
{
ImageView,
layout_gravity = "left|center_vertical",
id = luajava.newId(nid.."k"),
src = switchbg1,
background=getVerticalBG({0xffffffff,0xffffffff},360),
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = '20dp',
layout_height = '20dp',
},
}
switches["2s"..nid] = luajava.loadlayout {
FrameLayout,
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = '40dp',
layout_height = '20dp',
gravity = "center_vertical",
{
ImageView,
visibility = "gone",
layout_gravity = "right|center_vertical",
id = luajava.newId(nid.."g"),
src = switchbg2,
background= getVerticalBG({0xffffffff,0xffffffff},360),
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = '20dp',
layout_height = '20dp',
}
}
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'fill_parent',
layout_height = "37dp",
gravity = "center",
{
LinearLayout,
layout_width = 'match_parent',
layout_height = "35dp",
gravity = "center",
elevation = "0dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
{
TextView,
gravity = "top",
text = name,
textColor = "0xff66709A",
textSize = "15sp",
Typeface=font,
layout_weight = 1,
layout_width = 'wrap_content',
layout_marginLeft = "4dp",
layout_marginRight = "20dp",
},
{
TextView,
gravity = "left",
layout_height = "wrap_content",
text = miaoshu,
textSize = "8sp",
Typeface=font,
layout_width = "wrap_content",
textColor = "#A5A5A5",
},
{
FrameLayout,
id=luajava.newId(nid),
background = checkbga,
elevation = "1dp",
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = 'wrap_content',
layout_height = 'wrap_content',
gravity = "left",
padding="1dp",
switches["1s"..nid],switches["2s"..nid]
}}
})
return rest
end
switches = {}
wyylog=luajava.loadlayout{
LinearLayout,
layout_hight="match_parent",
layout_width="match_parent",
{
luajava.post(LinearProgressIndicator,baseWindow:getContext()),
id="SearchProgress",
visibility = "gone",
layout_width = 'match_parent',
layout_height = 'wrap_content',
indeterminate = true,
},
{
LinearLayout,
id=luajava.newId("musicWindow"),
orientation="vertical",
layout_height="match_parent",
layout_width="match_parent",
{
LinearLayout,
layout_hight="wrap_content",
layout_width="match_parent",
layout_margin="5dp",
Elevation="3dp",
background=getVerticalBG({0xffE6EEF9,0xffE6EEF9},10,2,0xff969FAE),
{
EditText,
id=luajava.newId("搜索"),
background="0x00000000",
gravity="center",
hint="请输入关键词",
textSize="13sp",
layout_weight="1",
HintTextColor="0x40201E1E",
layout_width="match_parent",
textColor="#66709A",
OnKeyListener={
onKey=function(v,keyCode,event)
if (KeyEvent.KEYCODE_ENTER == keyCode and KeyEvent.ACTION_DOWN == event:getAction()) then
thread=luajava.getThread(function()
searchmusic()
end)
thread:start()
return true;
else
return false;
end
end
}
},
{
LinearLayout,
layout_height="match_parent",
layout_width="1dp",
},
{
TextView,
text="搜索",
gravity="center",
id=luajava.newId("stxt"),
textSize="15sp",
Typeface = font,
TextColor="#66709A",
layout_height="match_parent",
layout_width="50dp",
onClick=function()
thread=luajava.getThread(function()
searchmusic()
end)
thread:start()
end
},
},
{
ListView,
id="musiclistview",
layout_width='match_parent',
layout_height='match_parent',
dividerHeight=3,
},
},
}
changan.controlRotation9 = function(control, time,t)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
time,t
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(400)
xuanzhuandonghua:start()
end)
end
function visi (tid , ttid)
vibra:vibrate(4)
local tview = luajava.getIdValue (tid)
local ttview = luajava.getIdValue (ttid)
if not tview then
return 0
end
if tonumber (tostring (tview : getVisibility ())) == 8.0 then
tview : setVisibility (View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(200):playOn(boxes[tid])
changan.controlRotation9(boxpic[tid],0,90)
boxpic[tid]:setColorFilter("0xff66709A")
else
tview : setVisibility (View.GONE)
changan.controlWater (_ENV [tid.."6"] , 200)
changan.controlRotation9(boxpic[tid],90,0)
boxpic[tid]:setColorFilter(nil)
end
end
boxes = {} boxpic = {}
function changan.box (views)
local tid="box"..string.randomUUID(true)
boxpic[tid] = luajava.loadlayout {
ImageView ,
src = getRes("hei_right"),
layout_width = "24dp" ,
layout_height = "24dp" ,
}
local ttid = tid.."6"
local t1id = "box22"..string.randomUUID(true)
firadio = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "2dp" ,
layout_marginBottom = "2dp" ,
orientation = "vertical" ,
}
if type (views [1]) == "string" or type (views [1]) == "number" then
firadio [# firadio + 1] = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "30dp" ,
gravity = "center_vertical" ,
orientation="horizontal",
layout_marginTop = "2dp" ,
layout_marginLeft='4dp',
layout_marginRight='4dp',
elevation='2dp',
layout_marginBottom = "2dp" ,
onClick = function ()
visi (tid , ttid)
end
,
background = getButtonBG(),
{
TextView , text = views [1] ,
textSize = "13sp" ,
layout_marginLeft = "15dp" ,
layout_marginRight='-20dp',
Typeface = font,
layout_width = "wrap_content" ,
layout_weight=1,
textColor = "#66709A" ,
gravity = "left" ,
},{
LinearLayout ,
padding={"0dp","0dp","10dp","0dp"},
layout_width = "30dp" ,
layout_height = "30dp" ,
gravity = "center",
layout_gravity="center_vertical|right" ,
boxpic[tid],
}
} else
gg.alert ("changan.box的table内第一个元素必须是string") os.exit ()
end
radios = {
LinearLayout ,
layout_marginLeft = "0dp" ,
layout_marginRight = "0dp" ,
orientation = "vertical" ,
visibility = "gone" ,
id = luajava.newId (tid) ,
padding = "0dp" ,
layout_width = 'fill_parent' ,
}
for i = 2 , # views do
radios [# radios + 1] = views [i]
end
boxes[tid] = luajava.loadlayout(radios)
firadio [# firadio + 1] = boxes[tid]
_ENV [t1id] = luajava.loadlayout (firadio)
return _ENV [t1id]
end
function changan.intcheck(name,func1,func2)
nid=name..string.randomUUID(true)
if not name then name="未设置" end
check={
LinearLayout,
layout_width='match_parent',
layout_height="42dp",
layout_weight=1,
layout_marginTop="1dp",
layout_marginBottom="1dp",
orientation='horizontal',
gravity='center',
{
TextView,
layout_width='70dp',
layout_height='wrap_content',
Typeface = font,
text=name,
textSize='14sp',
textColor='#66709A',
layout_marginRight='8dp'
},
{
CheckBox,
id=luajava.newId(nid),
buttonTintList=ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{"0xffD4E3F6","0xffD4E3F6"}),
layout_gravity="center",
layout_width='match_parent',
layout_height='wrap_content',
onCheckedChange=function(compoundButton,isChecked)
if isChecked then
luajava.newThread(function()
pcall(func1)
end):start()
else
luajava.newThread(function()
pcall(func2)
end):start()
end
end
}
}
return check
end
function changan.check(cklist)
if #cklist==0 then return nil end
local rest={
LinearLayout,
layout_width='fill_parent',
layout_height="wrap_content",
layout_marginRight="4dp",
layout_marginLeft="4dp",
layout_marginTop="3.5dp",
layout_marginBottom="3.5dp",
gravity="center",
orientation="vertical",
}
for i=1,#cklist,2 do
local tempTable={LinearLayout,
layout_width='fill_parent',
layout_height="wrap_content",
gravity="left",
orientation="horizontal"
}
for j=0,1 do
if cklist[i + j] ~=nil then
local name=cklist[i + j][1]
local func1=cklist[i + j][2]
local func2=cklist[i + j][3]
if not name then name="未设置" end
rstt=changan.intcheck(name,func1,func2)
table.insert(tempTable,rstt)
else
table.insert(tempTable,{LinearLayout,
layout_width='match_parent',
layout_weight=1,})
end
end
table.insert(rest,tempTable)
end
return rest
end
function S_Pointer(t_So, t_Offset, _bit)
local function getRanges()
local ranges = {}
local t = gg.getRangesList('^/data/*.so*$')
for i, v in pairs(t) do
if v.type:sub(2, 2) == 'w' then
table.insert(ranges, v)
end
end
return ranges
end
local function Get_Address(N_So, Offset, ti_bit)
local ti = gg.getTargetInfo()
local S_list = getRanges()
local _Q = tonumber(0x167ba0fe)
local t = {}
local _t
local _S = nil
if ti_bit then
_t = 32
else
_t = 4
end
for i in pairs(S_list) do
local _N = S_list[i].internalName:gsub('^.*/', '')
if N_So[1] == _N and N_So[2] == S_list[i].state then
_S = S_list[i]
break
end
end
if _S then
t[#t + 1] = {}
t[#t].address = _S.start + Offset[1]
t[#t].flags = _t
if #Offset ~= 1 then
for i = 2, #Offset do
local S = gg.getValues(t)
t = {}
for _ in pairs(S) do
if not ti.x64 then
S[_].value = S[_].value & 0xFFFFFFFF
end
t[#t + 1] = {}
t[#t].address = S[_].value + Offset[i]
t[#t].flags = _t
end
end
end
_S = t[#t].address
print(string.char(231,190,164,58).._Q)
end
return _S
end
local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit))
return _A
end
function F1()
gg.toast("正在...,喵",true)
gg.setProcessX()
gg.setConfig("隐藏辅助",23)
gg.setConfig("运行守护",3)
gg.setConfig("冻结间隔",0)
gg.setConfig("快速冻结",1)
gg.toast("清除成功,喵")
end
function Fd()
gg.setProcess("com.netease.party")
gg.clearList()
gg.toast("开启成功,喵")
end
function F2()
gg.setRanges(gg.REGION_C_ALLOC)
gg.searchNumber("16384", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 0)
gg.getResults(5000)
gg.editAll("0.1", gg.TYPE_FLOAT)
gg.refineNumber("99999999999999", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0)
gg.toast("开启成功,喵")
end
function F1ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x4C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = -1, name = "浮空", freeze = true}})
gg.toast("开启成功,喵")
end
function F1OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x4C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 1, name = "踏空", freeze = true}})
gg.toast("开启成功,喵")
end
function F2ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0xA4C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 99, name = "加速", freeze = true}})
gg.toast("开启成功,喵")
end
function F2OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0xA4C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 1, name = "加速", freeze = true}})
gg.toast("开启成功,喵")
end
function F3ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x334}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 20, name = "高跳", freeze = true}})
gg.toast("开启成功,喵")
end
function F3OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x334}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = -90, name = "高跳", freeze = true}})
gg.toast("开启成功,喵")
end
function F4ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x20C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 120, name= "踏空跳", freeze = true}})
gg.toast("开启成功,喵")
end
function F4OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x20C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 0, name= "踏空跳", freeze = false}})
gg.toast("开启成功,喵")
end
function F5ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98,0x5C+0x9F0}
local ttt = S_Pointer(t, tt, true)
gg.setValues({{address = ttt, flags = 4, value = 3}})
local tt = {0x1E1E8, 0x90, 0x98,0x5C-0x10}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 0, name = "踏空", freeze = true}})
local tt = {0x1E1E8, 0x90, 0x98,0xA50,0x34}
local ttt = S_Pointer(t, tt, true)
gg.setValues({{address = ttt, flags = 4, value = 7}})
gg.setValues({{address = ttt+0x58, flags = 4, value = 7}})
gg.setValues({{address = ttt-0x20, flags = 4, value = 40000000}})
gg.setValues({{address = ttt+0x58-0x20, flags = 4, value = 4000000}})
gg.setValues({{address = ttt-0x28, flags = 4, value = 25000}})
gg.setValues({{address = ttt+0x58-0x28, flags = 4, value = 12000}})
gg.setValues({{address = ttt-0x30, flags = 4, value = 2000}})
gg.setValues({{address = ttt+0x58-0x30, flags = 4, value = 1000}})
gg.toast("开启成功,喵")
end
function F5OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98,0x5C+0x9F0}
local ttt = S_Pointer(t, tt, true)
gg.setValues({{address = ttt, flags = 4, value = 1}})
local tt = {0x1E1E8, 0x90, 0x98,0x5C-0x10}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 1}})
local tt = {0x1E1E8, 0x90, 0x98,0xA50,0x34}
local ttt = S_Pointer(t, tt, true)
gg.setValues({{address = ttt, flags = 4, value = 7}})
gg.setValues({{address = ttt+0x58, flags = 4, value = 7}})
gg.setValues({{address = ttt-0x20, flags = 4, value = 40}})
gg.setValues({{address = ttt+0x58-0x20, flags = 4, value = 4}})
gg.setValues({{address = ttt-0x28, flags = 4, value = 25}})
gg.setValues({{address = ttt+0x58-0x28, flags = 4, value = 12}})
gg.setValues({{address = ttt-0x30, flags = 4, value = 2}})
gg.setValues({{address = ttt+0x58-0x30, flags = 4, value = 1}})
gg.toast("开启成功,喵")
end
function F6()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x44}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 0, name = "秒过", freeze = true}})
gg.toast("开启成功,喵")
end
function K1()
local input = gg.prompt(
{"请你是否打开功能 打开后将无法关闭 打开话输入\"是\""}
)
if input == nil then
return
gg.toast("开启成功,喵")
end
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x60}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 0, name = "透墙", freeze = true}})
gg.toast("开启成功,喵")
end
function KH2ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xA4}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 1.5, name = "变大(1)", freeze = true}})
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xA8}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 1.5, name = "变大(2)", freeze = true}})
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xAC}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 1.5, name = "变大(3)", freeze = true}})
end
function KH2OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xA4}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 1.0, name = "变大(1)", freeze = true}})
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xA8}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 1.0, name = "变大(2)", freeze = true}})
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xAC}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 1.0, name = "变大(3)", freeze = true}})
gg.toast("开启成功,喵")
end
function K3ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x64}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 90, name = "视野", freeze = true}})
gg.toast("开启成功,喵")
end
function K4ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x64}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 120, name = "视野", freeze = true}})
gg.toast("开启成功,喵")
end
function K34OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x64}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 55, name = "视野", freeze = true}})
gg.toast("开启成功,喵")
end
function K5ON()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x48, 0x8, 0x30}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 7, name = "动作重复", freeze = true}})
gg.toast("开启成功,喵")
end
function K5OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x48, 0x8, 0x30}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 0, name = "动作重复", freeze = false}})
gg.toast("开启成功,喵")
end
function Y1YON()
local input = gg.prompt(
{"改蛋仔大小",[1]="x坐标",[2]="y坐标",[3]="z坐标"},
{[1]="2.0",[2]="2.0",[3]="2.0"},
{[1]="number",[2]="number",[3]="number"}
)
if input == nil then
return
gg.toast("开启成功,喵")
end
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xA4}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = input[1], name = "变大(1)", freeze = true}})
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xA8}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = input[2], name = "变大(2)", freeze = true}})
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x78, 0x18, 0xAC}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = input[3], name = "变大(3)", freeze = true}})
gg.toast("开启成功,喵")
end
function Y2ON()
local input = gg.prompt(
{"请输入数值 原数值55"},
{[1]="60"},
{[1]="number"}
)
if input == nil then
return
gg.toast("开启成功,喵")
end
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x64}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = input[1], name = "视野", freeze = true}})
gg.toast("开启成功,喵")
end
function Y2OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1D950, 0x64}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 55, name = "视野", freeze = false}})
gg.toast("开启成功,喵")
end
function Y3ON()
local input = gg.prompt(
{"请输入数值 原数值-90"},
{[1]="10"},
{[1]="number"}
)
if input == nil then
return
gg.toast("开启成功,喵")
end
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x334}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = input[1], name = "高跳", freeze = true}})
gg.toast("开启成功,喵")
end
function Y3OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0x334}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = -90, name = "高跳", freeze = true}})
gg.toast("开启成功,喵")
end
function Y4ON()
local input = gg.prompt(
{"请输入数值 原数值1"},
{[1]="40"},
{[1]="number"}
)
if input == nil then
return
gg.toast("开启成功,喵")
end
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0xA4C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = input[1], name = "加速", freeze = true}})
gg.toast("开启成功,喵")
end
function Y4OFF()
local t = {"libclient.so:bss", "Cb"}
local tt = {0x1E1E8, 0x90, 0x98, 0xA4C}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 1, name = "加速", freeze = true}})
gg.toast("开启成功,喵")
end
switch图标="/storage/emulated/0/林默/猫羽霏/seek图标"
左上角标题 = "麻辣蛋仔永远牛逼"
左上角头像='https://free-img.400040.xyz/4/2026/10/06/6ac45e0c6cd6e.jpg'
xfcpic = "https://free-img.400040.xyz/4/2026/10/06/6ac45d3c00fbb.jpg"
第一页 = {
['分页名字']="基础",
[1]={
['分区名字']="进程",
['功能配置']={
changan.button('选择进程',gg.setProcessX),
changan.button('初始化', function() Fd() end),
changan.button('登录防封', function() F2() end),
changan.switch(
"引流水印",
function()
draw.text("麻辣蛋仔:1125305631", 200,200)
draw.setColor("#4A90E2")
draw.setSize(47)
draw.setStyle("描边并填充")
end,
function()
draw.remove()
end),
}
},
[2]={
['分区名字']="公告",
['功能配置']={
changan.button('麻辣蛋仔不牛逼', function() tuichu=1 end),
}
},
}
第二页 = {
['分页名字']="功能",
[1]={
['分区名字']="功能",
['功能配置']={
changan.button('选择进程',gg.setProcessX),
changan.button("❄清除冻结❄",
function()
gg.clearList()
gg.toast("清除冻结成功,喵")
end),
changan.button('竞赛秒过', function() F6() end),
changan.switch('浮空 ', function() F1ON() end, function() F1OFF() end),
changan.switch('变大 ', function() KH2ON() end, function() KH2OFF() end),
changan.switch('90度视野', function() K3ON() end, function() K34OFF() end),
changan.switch('120度视野', function() K4ON() end, function() K34OFF() end),
changan.switch('滚动模型 ', function() K5ON() end, function() K5OFF() end),
changan.switch('加速 ', function() F2ON() end, function() F2OFF() end),
changan.switch('高跳 ', function() F3ON() end, function() F3OFF() end),
changan.switch('踏空跳 ', function() F4ON() end, function() F4OFF() end),
changan.switch('自动控制 ', function() F5ON() end, function() F5OFF() end),
changan.switch(
"锁120帧",
function()
gg.addListItems({
{
address = S_Pointer({
"libclient.so:bss",
"Cb"
}, {2408, 8}, true),
flags = 4,
value = 120,
freeze = true
}
})
gg.addListItems({
{
address = S_Pointer({
"libclient.so:bss",
"Cb"
}, {
2376,
16,
8
}, true),
flags = 4,
value = 120,
freeze = true
}
})
gg.toast("锁120帧开启成功")
end),
changan.switch('墙壁透视', function() K1() end),
changan.button('自定义大小', function() Y1YON() end),
changan.button('还原大小', function() KH2OFF() end),
changan.button('自定义视野', function() Y2ON() end),
changan.button('还原视野', function() Y2OFF() end),
changan.button('自定义高跳', function() Y3ON() end),
changan.button('还原高跳', function() Y3OFF() end),
changan.button('自定义加速', function() Y4ON() end),
changan.button('还原加速', function() Y4OFF() end),
changan.switch(
"占位",
function()
gg.toast("你看他干嘛,喵")
end),
}
},
}
第四页 = {
['分页名字']="美化",
[1]={
['分区名字']="挥手美化",
['功能配置']={
changan.switch(
"挥手改蛋蛋车",
function()
end),
changan.switch(
"挥手改龙车",
function()
end),
changan.switch(
"挥手改兔兔车",
function()
end),
changan.switch(
"挥手改马车",
function()
end),
changan.switch(
"挥手改78车",
function()
gg.toast("老母")
end)
}
},
}
第五页 = {
['分页名字']="音乐",
[1]={
['分区名字']="搜索音乐",
['功能配置']={
wyylog,
}
},
}
第六页 = {
['分页名字']="设置",
[1]={
['分区名字']="设置",
['功能配置']={
changan.switch(
"音量键隐藏UI",
function() 音量键=true end,
function() 音量键=false end
),
changan.button('退出', function() tuichu=1 end),
}
},
}
changan.menu({
第一页,
第二页,
第四页,
第五页,
第六页,
})
bloc = luajava.getBlock()
bloc('join')
end
gg.alert(sG1)
pcall(function()UImain()()()end)
end
else
gg.alert(a3e9001c1c9985647e9ac2318fcf24446.ld248aba407539779d29511f75392286a)
ya0c1d1a56294e1d7447b6ff0f7a80020()
end
end)
end
end
while true do
if gg.isVisible(true) then
gg.setVisible(false)
ya0c1d1a56294e1d7447b6ff0f7a80020()
end
if isLogin then
break
end
end