-- 验证必要函数 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