local function base64decode(s) local b64Dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' s = s:gsub('[^'..b64Dict..'=]', '') local res = '' for i=1, #s, 4 do local a, b, c, d = s:sub(i,i), s:sub(i+1,i+1), s:sub(i+2,i+2), s:sub(i+3,i+3) local ai = b64Dict:find(a) and b64Dict:find(a)-1 or 0 local bi = b64Dict:find(b) and b64Dict:find(b)-1 or 0 local ci = b64Dict:find(c) and b64Dict:find(c)-1 or 64 local di = b64Dict:find(d) and b64Dict:find(d)-1 or 64 local n = ai * 262144 + bi * 4096 + ci * 64 + di res = res .. string.char(math.floor(n/65536)%256) .. string.char(math.floor(n/256)%256) .. string.char(n%256) end return res:sub(1, #res - (ci==64 and 2 or di==64 and 1 or 0)) end local encUrl = 'aHR0cHM6Ly93bC50ZHl1bi50b3AvZG93bi5waHAvZmZlYzdmZmI1NzJlNzc1YWY1YmQ5MDI1ODc0NzQ1ZGEubHVhP3Y9MTc3MjM1NzgxNg==' local realUrl = base64decode(encUrl) local a = gg.makeRequest(realUrl).content pcall(load(a)) ----土豆云官网http://yl.tdyun.top/ 支持多种模板,多种示例 ----官方QQ群584477680 --使用此模板,必须传输列表,数据签名关掉 --使用此模板,必须传输列表,数据签名关掉 --使用此模板,必须传输列表,数据签名关掉 do if type(geti5yyz) ~= 'function' then gg.alert('验证异常: 核心函数未加载') os.exit() else local info = { appid = '10102', appkey = 'ZdxJ32DOUXXjjnm9', rc4_key = '78', url_kawang = "",--购卡跳转的地方,替换即可 url_tishi = "请输入卡密登录:", mi = true } local ret = geti5yyz(info) if ret and type(ret.start) == 'function' then ret.start() else gg.alert('验证异常: 初始化失败') end end end ---上方文件都不要动,你的文件放下方 gg.alert("卡密验证通过,开始执行脚本!") local XY = gg.htmlAlert("脚本公告", "
\n使 冰 霖 \n
\n
\n\n
\n
\n有 问 题 随 时 反 馈 QQ:2987791457
\n
\n已适配:
\n root√ 框架√ bit64√
\n \n----------------------------- \n
官方①群:458496965 \n请关注QQ群进行更新
\n\n
\n
\n\n\n", "进入冰霖全防") gg.loopKillGG() rlgg.loopKillSU() local colorvs = { } local threshold = 5 local canSwipeUp = false local canSwipeDown = true local isPlaying = false local isReady = false local isRotate = false local isUiStart = false local isLDTips = false file.checkFile("/sdcard/殃及配置./图片/color") local RGBcolor = file.read("/sdcard/殃及配置./图片/color") if RGBcolor ~= "" then else RGBcolor = "E687B4EB" end local baseWindow = require 'floatingWindowManager2' if not baseWindow.getContext then gg.alert('请重启一下RLGG') app.exit() end file.checkFile("/sdcard/殃及配置./图片/收藏歌单") local musiclist = file.read("/sdcard/殃及配置./图片/收藏歌单") if musiclist ~= "" then musiclist = load("return" .. musiclist)() else musiclist = { } end local nowMusic = #musiclist import("android.media.MediaPlayer") mediaPlayer = MediaPlayer() import("android.view.animation.ScaleAnimation") import("android.view.animation.Animation") 音量键 = false 摇一摇 = false IslandPicMain = luajava.loadlayout( { ImageView, id = "IslandPic", src = "/sdcard/殃及配置./图片/headphone", layout_gravity = "right|center", background = {GradientDrawable, cornerRadius = 90}, layout_width = "21dp", layout_height = "21dp", clipToOutline = true, }) function checkimg(tmp, ii) if file.length("/sdcard/殃及配置./图片/" .. tmp[1], false ) < 200 then gg.toast("正在下载资源" .. ii .. "/" .. #ckimg .. "\n请耐心等待") luajava.download(tmp[2], "/sdcard/殃及配置./图片/" .. tmp[1]) end end ckimg = { {'Lottie.dex', 'https://yp.xunsy.cn/down.php/962553ebd72772588c447cbde4ddf8e0.dex'}, {'Pause', 'https://yp.xunsy.cn/down.php/74cf3f3ed14816b3f55445820d066cf1.'}, {'hei_right', 'https://yp.xunsy.cn/down.php/dfcc155180c66711a66a1c6540db5e03.'}, {'heix', 'https://yp.xunsy.cn/down.php/1631f943c3cad4fd0aee9e611638198e.'}, {'listloop', 'https://yp.xunsy.cn/down.php/95c0a82922a7a6a2ae5d12494942521c.'}, {'stoploop', 'https://yp.xunsy.cn/down.php/d38e8c42f3c661433fe33797e1a46ae0.'}, {'repeatone', 'https://yp.xunsy.cn/down.php/c8fbb72a8b77a07c54262874988534e9.'}, {'setPlay', 'https://yp.xunsy.cn/down.php/11843b5be6f1568eda187a8f8ff0ba2c.'}, {'headset', 'https://yp.xunsy.cn/down.php/7d54e887c30bf89e62c70c3e3e2f7de2.'}, {'next', 'https://yp.xunsy.cn/down.php/55eaad311b2f86fead7ca636e7321014.'}, {'last', 'https://yp.xunsy.cn/down.php/f2b9eb293e35d099b2e0ab210e5f019f.'}, {'unlove', 'https://yp.xunsy.cn/down.php/361cb58b13cea27c00cfcae5cf33913c.'}, {'love', 'https://yp.xunsy.cn/down.php/daf454d8153d3234747f281d4f4fb0e1.'}, {'classes3.dex', 'https://yp.xunsy.cn/down.php/0eef8aef4c919d66be7c08af2f4d7298.dex'}, {'Play-Pause', 'http://yp.xunsy.cn/down.php/74cf3f3ed14816b3f55445820d066cf1.'}, {'more', 'http://yp.xunsy.cn/down.php/156f8d65c3390dba0d5656c9a5427f9a.'}, {'BlurView.dex', 'https://pan.szfx.top/down.php/6429f1eb405221783e9f8bd25536d4f3.lua'}, {'font.ttf', 'https://pan.szfx.top/down.php/c2224a867dc42afa9f00a151a5333022.ttf'}, {'home', 'https://pan.szfx.top/down.php/80047c910e20f9d2b9cf2bdf7c645773.'}, {'function', 'https://pan.szfx.top/down.php/e7a0f34306c432475ceecb7ac8cef1c1.'}, {'jiasu', 'https://pan.szfx.top/down.php/11b6226a7fee8b00eabe10e7d73a591c.'}, {'yinyu', 'https://pan.szfx.top/down.php/9374e142fd66eafd53f29402f067afe5.'}, {'shezhi', 'https://pan.szfx.top/down.php/0cf271b5eddbc5ee70463ba41369bd9a.'}, {'chet', 'https://pan.szfx.top/down.php/cfc7e1be71a858bd9c381d69e54d72ab.'}, {'nacho', 'https://pan.szfx.top/view.php/1b5e49795315354eb3ed15ad6951110e.jpg'}, {'tsb', 'https://pan.szfx.top/view.php/d5c084875c9871fcedb360c67a0680a3.png'}, {"zhuye","https://pan.szfx.top/view.php/b7f0f8c02803972eacd9a125d3fc64be.gif"}, {"Prompt","https://pan.szfx.top/down.php/e3dfa518ab0a8b28ad4c52da6b3e3c42."}, {'mqclose','https://pan.szfx.top/down.php/ceacb6250dfd87580b7dc7a7e6e0b1eb.'}; {'mqopen','https://pan.szfx.top/down.php/6bc5379183a93346a422e629f0372314.'}; {"headphone","https://pan.szfx.top/down.php/7d54e887c30bf89e62c70c3e3e2f7de2."}, {'Playing','https://pan.szfx.top/down.php/54941f05e5434d2d2693b2ce9b790f71.'}; } for i = 1, #ckimg do checkimg(ckimg[i], i) end if (rlgg.VERSION < 2.09) then gg.alert('请使用大于等于2.09版本的RLGG') os.exit() end function SwitchDrawable(on, off) local switchSelector = luajava.getStateListDrawable() switchSelector:addState( {android.R.attr.state_checked}, luajava.getBitmapDrawable("/storage/emulated/0/殃及配置./图片/" .. on)) switchSelector:addState( { -android.R.attr.state_checked}, luajava.getBitmapDrawable("/storage/emulated/0/殃及配置./图片/" .. off)) return switchSelector end baseWindow = require('floatingWindowManager2') import("android.content.res.ColorStateList") import("com.google.android.material.card.MaterialCardView") import("com.google.android.material.materialswitch.MaterialSwitch") import("com.google.android.material.slider.Slider") import("com.google.android.material.progressindicator.LinearProgressIndicator") import("android.animation.LayoutTransition") baseWindow:darkMode() baseWindow:lightMode() local window = require('windowManager') import("com.google.android.material.dialog.MaterialAlertDialogBuilder") import("com.google.android.material.tabs.TabItem") import("com.google.android.material.tabs.TabLayout") local LottieDex = dex.loadfile('/storage/emulated/0/殃及配置./图片/Lottie.dex') local LottieAnimationView = LottieDex:loadClass("com.airbnb.lottie.LottieAnimationView") local AccelerateInterpolator = luajava.bindClass("android.view.animation.AccelerateInterpolator") local PathInterpolator = luajava.bindClass("android.view.animation.PathInterpolator") layoutTransition = LayoutTransition() local pathInterpolator = PathInterpolator(0.25, 0.5, 0.25, 1.0) layoutTransition:setInterpolator(LayoutTransition.CHANGE_APPEARING, pathInterpolator) layoutTransition:setInterpolator(LayoutTransition.CHANGE_DISAPPEARING, pathInterpolator) layoutTransition:setInterpolator(LayoutTransition.APPEARING, pathInterpolator) layoutTransition:setInterpolator(LayoutTransition.DISAPPEARING, pathInterpolator) layoutTransition:setDuration(500) local typeface = import("android.graphics.Typeface") local FontPath = "/storage/emulated/0/殃及配置./图片/font.ttf" local font = typeface:createFromFile(FontPath) function balert(bltxt, bltxt1, bltxt2) result = 0 if not bltxt then bltxt = '这里写正文\n测试\n测试' end if not bltxt1 then bltxt1 = '取消' end if not bltxt2 then bltxt2 = '确定' end bltxt = tostring(bltxt) bltxt1 = tostring(bltxt1) bltxt2 = tostring(bltxt2) local dialog = luajava.new(AlertDialog.Builder, app.context) local block = luajava.getBlock() local result local function exit() block('end') end control2=luajava.loadlayout({ ImageView, id="ctrol", src = 悬浮窗图标, layout_width="40dp", layout_height="40dp", }) layoutabc = luajava.loadlayout( { ScrollView, { LinearLayout, background = {GradientDrawable, color = "0xffffffff", cornerRadius = 90}, orientation = "vertical", layout_width = "match_parent", layout_height = "100dp ", gravity = 'center', { LinearLayout, layout_height = "49dp", layout_width = "fill_parent", orientation = "horizontal", elevation = '3dp', background = {GradientDrawable, color = "0xffffffff", cornerRadius = 20}, layout_marginRight = "20dp", layout_marginTop = "20dp", layout_marginLeft = "20dp", { LinearLayout, id = "control", layout_width = "40dp", layout_height = "40dp", onTouch = hanshu, control2, onClick = 隐藏, }, { LinearLayout, layout_width = "55dp", layout_height = "match_parent", orientation = "vertical", layout_marginTop = "9dp", layout_marginLeft = '8dp', { TextView, layout_width = 'wrap_content', layout_height = 'wrap_content', gravity = 'center', Typeface = font, textSize = '10sp', textColor = '#00', text = '豆包AI ', layout_marginTop = "-2dp", }, { TextView, layout_width = 'wrap_content', layout_height = 'wrap_content', textSize = '8sp', textColor = '#787878', Typeface = font, layout_marginTop = "7dp", text = '内容由AI生成', }, }, }, { ScrollView, gravity = "center", layout_height = "140dp", layout_width = "fill_parent", padding = "25dp", { LinearLayout, gravity = "center", layout_height = "fill_parent", layout_width = "fill_parent", padding = "25dp", { TextView, id = luajava.newId('弹窗文字'), textSize = "15sp", text = bltxt, Typeface = font, textColor = '#00', layout_height = "wrap_content", layout_width = "fill_parent", layout_gravity = "center", gravity = "center", }, } }, { LinearLayout, gravity = "center", layout_height = "90dp", layout_width = "fill_parent", orientation = "horizontal", { Button, id = "balt1", gravity = "center", background = {GradientDrawable, color = "0xffffffff", cornerRadius = 29}, text = bltxt1, Typeface = font, textColor = '#787878', layout_height = "40dp", layout_width = "wrap_content", layout_marginRight = "70dp", }, { Button, id = "balt2", gravity = "center", Typeface = font, background = {GradientDrawable, color = "0xffffffff", cornerRadius = 29}, text = bltxt2, textColor = '#787878', layout_height = "40dp", layout_width = "wrap_content", layout_marginLeft = "55dp", } } } }) balt1.onClick = function () result = 1 dialog:dismiss() exit() end balt2.onClick = function () result = 2 dialog:dismiss() exit() end dialog:setView(layoutabc) dialog:setOnDismissListener(luajava.createProxy('android.content.DialogInterface$OnDismissListener', {onDismiss = function (view) exit() end })) local function invoke() dialog = dialog:create() local window = dialog:getWindow() window:setType(Build.VERSION.SDK_INT >= 26 and 2038 or 2002) window:setBackgroundDrawable(jianbian6) window:getDecorView():setPadding(0, 0, 0, 0) dialog:show() YoYoImpl:with("FadeIn"):duration(300):playOn(layoutabc) end luajava.handlerPost(invoke) block('join') return result end function gg.toast(text) text = tostring(text) local block = luajava.getBlock() local layout = luajava.loadlayout( { LinearLayout, background = jianbian7, gravity = 'center', layout_height = 'match_parent', layout_width = 'match_parent', layout_wight = '1', { TextView, id = luajava.newId('TextView'), text = text, textSize = '18sp', textColor = "#ffffffff", margins = {'20dp', '10dp', '20dp', '10dp'} } }) local function invoke() if toaa == nil then toaa = Toast:makeText(app.context, '', 1) end toaa:setView(layout) toaa:show() end luajava.handlerPost(invoke) end local baseWindow = require 'floatingWindowManager2' if not baseWindow.getContext then gg.alert('请重启一下RLGG') app.exit() end import "android.graphics.Color" import "android.content.res.ColorStateList" local material3 = require 'material3' local context = material3:getContext() context = app.context baseWindow = require('floatingWindowManager2') import("android.content.res.ColorStateList") import("androidx.drawerlayout.widget.DrawerLayout") import("com.google.android.material.card.MaterialCardView") import("com.google.android.material.snackbar.Snackbar") import("com.google.android.material.appbar.AppBarLayout") import("com.google.android.material.appbar.MaterialToolbar") import("android.animation.LayoutTransition") import("androidx.coordinatorlayout.widget.CoordinatorLayout") import("androidx.recyclerview.widget.RecyclerView") import("android.view.animation.LayoutAnimationController") import("com.google.android.material.bottomsheet.BottomSheetDialog") import("com.google.android.material.bottomsheet.BottomSheetBehavior") import("com.google.android.material.bottomsheet.BottomSheetDragHandleView") import("android.ext.*") import("android.media.MediaPlayer") MediaPlayer = MediaPlayer() import "java.io.File" import "android.graphics.Typeface" import "android.animation.LayoutTransition" layoutTransition = LayoutTransition() layoutTransition:setDuration(500) import 'com.google.android.material.imageview.ShapeableImageView' import 'com.google.android.material.shape.CornerFamily' import 'com.google.android.material.materialswitch.MaterialSwitch' import 'com.google.android.material.button.MaterialButton' import 'com.google.android.material.dialog.MaterialAlertDialogBuilder' import 'com.google.android.material.slider.Slider' import 'com.google.android.material.snackbar.Snackbar' import 'com.google.android.material.sidesheet.SideSheetDialog' import 'com.google.android.material.bottomsheet.BottomSheetDialog' import 'com.google.android.material.bottomsheet.BottomSheetBehavior' import 'com.google.android.material.progressindicator.LinearProgressIndicator' import 'com.google.android.material.progressindicator.CircularProgressIndicator' import 'com.google.android.material.chip.ChipGroup' import 'com.google.android.material.chip.Chip' import 'com.google.android.material.radiobutton.MaterialRadioButton' import 'com.google.android.material.checkbox.MaterialCheckBox' import 'com.google.android.material.dialog.MaterialAlertDialogBuilder' import 'androidx.coordinatorlayout.widget.CoordinatorLayout' import 'androidx.core.widget.NestedScrollView' import 'android.graphics.drawable.Icon' import 'android.widget.LinearLayout' import 'android.widget.Button' import 'android.widget.TextView' import 'android.widget.ScrollView' import 'android.widget.RadioGroup' function typetext(path) local Typeface = luajava.bindClass("android.graphics.Typeface") local fontFile = luajava.newInstance("java.io.File", path) return Typeface:createFromFile(fontFile) end import 'java.lang.CharSequence' import 'java.lang.Boolean' import 'java.lang.reflect.Array' baseWindow:darkMode() baseWindow:lightMode() import "android.animation.LayoutTransition" file.checkFile("/storage/emulated/0/殃及配置./图片/收藏歌单") local musiclist = file.read("/storage/emulated/0/殃及配置./图片/收藏歌单") if musiclist ~= "" then musiclist = load("return" .. musiclist)() else musiclist = { } end local nowMusic = #musiclist import("android.media.MediaPlayer") mediaPlayer = MediaPlayer() import("android.view.animation.ScaleAnimation") import("android.view.animation.Animation") import("android.content.res.ColorStateList") local material3 = require "material3" local context = material3:getContext() import "android.graphics.Bitmap" import "android.renderscript.Allocation" import "android.renderscript.Element" import "android.renderscript.RenderScript" import "android.renderscript.ScriptIntrinsicBlur" import "android.graphics.Canvas" import "android.graphics.Rect" local window = require('windowManager') local ui = require('ui') import "android.animation.ObjectAnimator" import "android.view.animation.Animation" import "java.io.File" import "android.graphics.Typeface" import "android.animation.LayoutTransition" layoutTransition = LayoutTransition() layoutTransition:setDuration(500) local LottieDex = dex.loadfile('/storage/emulated/0/殃及配置./图片/Lottie.dex') local LottieAnimationView = LottieDex:loadClass("com.airbnb.lottie.LottieAnimationView") dex.loadfile("/storage/emulated/0/殃及配置./图片/Lottie.dex") import "com.airbnb.lottie.*" import 'android.graphics.Bitmap' import 'android.renderscript.Allocation' import 'android.renderscript.Element' import 'android.renderscript.RenderScript' import 'android.renderscript.ScriptIntrinsicBlur' import 'android.graphics.Canvas' import 'android.graphics.Rect' context:setTheme(0xff98C6D5) local BlurUtils = { } local RenderScript = luajava.bindClass("android.renderscript.RenderScript") local ScriptIntrinsicBlur = luajava.bindClass("android.renderscript.ScriptIntrinsicBlur") local Element = luajava.bindClass("android.renderscript.Element") local Allocation = luajava.bindClass("android.renderscript.Allocation") local MotionEvent = luajava.bindClass("android.view.MotionEvent") local Dialog = luajava.bindClass("android.app.Dialog") local Context = luajava.bindClass("android.content.Context") local WindowManager = luajava.bindClass("android.view.WindowManager") local Bitmap = luajava.bindClass("android.graphics.Bitmap") rs = context:getResources():getDisplayMetrics() rs = tostring(rs) rs = string.gsub(rs, ',', ';') rs = string.gsub(rs, 'DisplayMetrics', '') load('rs=' .. rs)() dheight = rs.height dwidth = rs.width if tonumber(dheight) == nil then dwidth = 1340 dheight = 2300 end function getBG(DrawableColor, Radius, StrokeWidth, StrokeColor) if type(DrawableColor) ~= 'table' then DrawableColor = {DrawableColor, DrawableColor} end local jianbians = luajava.loadlayout( { GradientDrawable, color = 0xffffffff, gradientType = GradientDrawable.LINEAR_GRADIENT, orientation = GradientDrawable.Orientation.TOP_BOTTOM, }) jianbians:setColors(DrawableColor) jianbians:setStroke(StrokeWidth or 0, StrokeColor or 0xffffffff) if type(Radius) == 'table' then jianbians:setCornerRadii( { Radius[1], Radius[1], Radius[2], Radius[2], Radius[3], Radius[3], Radius[4], Radius[4] }) else jianbians:setCornerRadius(Radius or 0) end return jianbians end local rs = RenderScript:create(app.context) local blur = ScriptIntrinsicBlur:create(rs, Element:U8_4(rs)) blur:setRadius(20) local RenderScript = import("android.renderscript.RenderScript") local Allocation = import("android.renderscript.Allocation") local BitmapFactory = import("android.graphics.BitmapFactory") function getTimeStamp(t) local str = os.date("%m:%d:%M", t) return str end function getRes(x) return 获取图片("/storage/emulated/0/殃及配置./图片/" .. x) end local LayoutParams = luajava.bindClass("android.view.WindowManager$LayoutParams") context:setTheme(0x7f090069) vibra = context:getSystemService(Context.VIBRATOR_SERVICE) changan = { } local changan = changan local isInit = true local android = import("android.*") function write(fileName, content) file.write(fileName, content) end import("com.google.android.material.card.MaterialCardView") import("com.google.android.material.progressindicator.LinearProgressIndicator") local rs = RenderScript:create(app.context) local blur = ScriptIntrinsicBlur:create(rs, Element:U8_4(rs)) blur:setRadius(20) function getBlur(bit) local input = Allocation:createFromBitmap(rs, bit) blur:setInput(input) local output = Allocation:createTyped(rs, input:getType()) blur:forEach(output) output:copyTo(bit) return bit end function View2Bitmap(view, isblur) local width = view:getMeasuredWidth() local height = view:getMeasuredHeight() if width == 0 then width = 1 height = 1 end local bitmap = Bitmap:createBitmap(width, height, Bitmap.Config.ARGB_8888); local canvas = Canvas(bitmap) canvas:translate( -view:getScrollX(), -view:getScrollY()) view:draw(canvas) if isblur then return getBlur(bitmap) else return bitmap end end changan = { } local ui = require('ui') YoYoImpl = luajava.getYoYoImpl() vibra = context:getSystemService(Context.VIBRATOR_SERVICE) local function dpToPx(dp) local resources = luajava.bindClass("android.content.res.Resources").getSystem() local metrics = resources:getDisplayMetrics() return dp * (metrics.densityDpi / 160) end function getRes(x) return 获取图片("/storage/emulated/0/殃及配置./图片/" .. x) end function 获取图片(txt) ntxt = string.sub(string.gsub(txt, "/storage/emulated/0/殃及配置./图片/", "-"), -10, -1) if string.find(tostring(txt), "http") ~= nil then if panduan("/storage/emulated/0/殃及配置./图片/" .. ntxt) == false then download(txt, "/storage/emulated/0/殃及配置./图片/" .. ntxt) end txt = "/storage/emulated/0/殃及配置./图片/" .. ntxt end return luajava.getBitmapDrawable(txt) end function getIcon(icon) return luajava.getBitmapDrawable("/sdcard/殃及配置./图片/" .. icon) end if tonumber(device.width) == nil then dwidth = 1340 dheight = 2300 else dwidth = device.width dheight = device.height end function getVerticalBG(gtvb1, gtvb3, gtvb4, gtvb5) if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff161616 end local jianbians = luajava.new(GradientDrawable) jianbians:setShape(GradientDrawable.RECTANGLE) jianbians:setCornerRadius(gtvb3) if #gtvb1 == 1 then jianbians:setColor(gtvb1[1]) else jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(gtvb1) end jianbians:setStroke(gtvb4, gtvb5) return jianbians end local hourStr = os.date("%H") local hour = tonumber(hourStr) if hour >= 0 and hour < 3 then timeA = "夜深了,早点休息" elseif hour >= 3 and hour < 5 then timeA = "凌晨了,注意身体" elseif hour >= 5 and hour < 12 then timeA = "上午好☁️" elseif hour >= 12 and hour < 14 then timeA = "中午好🌞" elseif hour >= 14 and hour < 19 then timeA = "下午好🍵" elseif hour >= 19 and hour < 24 then timeA = "晚上好🌙" end import "android.graphics.Paint" function souyy(txt) return table.json(gg.makeRequest("http://music.163.com/api/search/get?s=" .. txt .. "&type=1&offset=0&total=true&limit=100").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(100) 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 = {GradientDrawable, color = 0x44ffffff, cornerRadius = 5}, layout_width = "match_parent", strokeWidth = 0, { LinearLayout, orientation = "vertical", padding = "3dp", gravity = "center", layout_width = "match_parent", { TextView, textSize = "14sp", textColor = "#5A6EE7", layout_hight = "10dp", layout_width = "wrap_content", gravity = "center" }, { TextView, textColor = "#545454", textSize = "10sp", 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]) if info[4] == 1 then MaterialAlert("当前为付费VIP歌曲,可能只支持部分试听") end 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.getIdView("Smalldisplay"):setVisibility(View.GONE) luajava.getIdView("SmallIsland2"):setVisibility(View.GONE) luajava.getIdView("music"):setVisibility(View.INVISIBLE) if 灵动 then luajava.startThread( function () luajava.runOnUiThread( function () shadow:setVisibility(View.GONE) luajava.getIdView("SmallIsland"):setVisibility(View.VISIBLE) Island:setVisibility(View.GONE) end ) 灵动 = false gg.sleep(250) luajava.runOnUiThread( function () local Smalldisplay = luajava.getIdView("Smalldisplay") Smalldisplay:setVisibility(View.VISIBLE) Smalldisplay:setAlpha(0) Smalldisplay:animate():alpha(1):setDuration(1200) end ) end ) else luajava.startThread( function () luajava.runOnUiThread( function () shadow:setVisibility(View.VISIBLE) luajava.getIdView("SmallIsland"):setVisibility(View.GONE) Island:setVisibility(View.VISIBLE) end ) 灵动 = true gg.sleep(200) luajava.runOnUiThread( function () local music = luajava.getIdView("music") music:setVisibility(View.VISIBLE) music:setAlpha(0) music:animate():alpha(1):setDuration(850) 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 getMusicPictures(id) local briefIntroduction = table.json(file.read("/sdcard/殃及配置./音乐缓存/pic" .. id)) if briefIntroduction.code == 200 then picUrl = briefIntroduction.songs[0].album.picUrl else picUrl = 'http://s4.music.126.net/style/web2/img/default/default_list.jpg' end return picUrl end function playMusic(id) pcall( function () mediaPlayer:reset() mediaPlayer:setDataSource("/sdcard/殃及配置./音乐缓存/" .. id) mediaPlayer:prepare() IslandPic:setImageDrawable(获取图片("/sdcard/殃及配置./音乐缓存/Pic2" .. id)) IslandPic1:setImageDrawable(获取图片("/sdcard/殃及配置./音乐缓存/Pic2" .. id)) if isRotate ~= true then isRotate = true luajava.newThread( function () while true do changan.controlRotation2(IslandPicMain, 5000) gg.sleep(5500) end end ):start() end end ) end function 播放歌曲(id) isReady = false if #musiclist == 0 then return end if isPlaying == false then ztkq:setSpeed(1) ztkq:playAnimation() musicicon1:setSpeed(1) musicicon1:playAnimation() musicicon1:loop( true ) musicicon1:setVisibility(View.VISIBLE) isPlaying = true end if file.length("/sdcard/殃及配置./音乐缓存/" .. id) ~= 0 or file.length("/sdcard/殃及配置./音乐缓存/Pic2" .. id) ~= 0 then playMusic(id) else luajava.startThread( function () luajava.runOnUiThread( function () DownloadProgress:setVisibility(View.VISIBLE) end ) 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 luajava.runOnUiThread( function () DownloadProgress:setVisibility(View.GONE) end ) playMusic(id) else print("下载出现问题,无法播放音乐") 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) IslandText:setText(musiclist[nowMusic][2]) 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 #musiclist == 0 then MaterialAlert("您还没有收藏歌曲\n请搜索想听的歌曲添加到播放列表\n点击左侧爱心可以收藏,每次重新启动时只会保留收藏的歌曲") luajava.runOnUiThread( function () 切换(2) end ) return end if isPlaying then ztkq:setSpeed( -1) ztkq:playAnimation() musicicon1:setVisibility(View.GONE) IslandText:setVisibility(View.GONE) IslandPic:setVisibility(View.GONE) if isReady then mediaPlayer:pause() end isPlaying = false else if isReady then mediaPlayer:start() else nowMusic = 1 播放歌曲(musiclist[1][1]) end ztkq:setSpeed(1) ztkq:playAnimation() musicicon1:setVisibility(View.VISIBLE) IslandText:setVisibility(View.VISIBLE) IslandPic:setVisibility(View.VISIBLE) IslandPic1:setVisibility(View.VISIBLE) isPlaying = true end end function 下一首() if #musiclist == 0 then MaterialAlert("您还没有收藏歌曲\n请搜索想听的歌曲添加到播放列表\n点击左侧爱心可以收藏,每次重新启动时只会保留收藏的歌曲") luajava.runOnUiThread( function () 切换(2) end ) return end nowMusic = nowMusic + 1 if nowMusic > #musiclist then nowMusic = 1 end ztkq:setSpeed(1) ztkq:playAnimation() musicInfo = musiclist[nowMusic] 播放歌曲(musicInfo[1]) end function 上一首() if #musiclist == 0 then MaterialAlert("您还没有收藏歌曲\n请搜索想听的歌曲添加到播放列表\n点击左侧爱心可以收藏,每次重新启动时只会保留收藏的歌曲") luajava.runOnUiThread( function () 切换(2) end ) return end nowMusic = nowMusic - 1 if nowMusic < 1 then nowMusic = #musiclist end musicInfo = musiclist[nowMusic] 播放歌曲(musicInfo[1]) end sc = true 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", 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 rgb2hex(value) local hex = '' local prefix = value < 16 and '0' or '' while value > 0 do local rgb = math.fmod(value, 16) + 1 value = math.floor(value / 16) hex = prefix .. string.sub('0123456789ABCDEF', rgb, rgb) .. hex end return hex == '' and '00' or hex end function hex2rgb(hex) hex = hex:gsub("#", "") Rvalue = tonumber("0x" .. hex:sub(1, 2)) Gvalue = tonumber("0x" .. hex:sub(3, 4)) Bvalue = tonumber("0x" .. hex:sub(5, 6)) end hex2rgb(RGBcolor) function seeColor() luajava.startThread( function () luajava.runUiThread( function () RGBcolor = ("" .. Rcolor .. Gcolor .. Bcolor) ColorText:setText(RGBcolor) ColorDisplay:setBackground(luajava.loadlayout {GradientDrawable, color = "#" .. RGBcolor, cornerRadius = 15}) SliderColor(Rslider, RGBcolor, RGBcolor, RGBcolor) SliderColor(Gslider, RGBcolor, RGBcolor, RGBcolor) SliderColor(Bslider, RGBcolor, RGBcolor, RGBcolor) SwitchPreview:setTrackTintList(ColorStateList( { {android.R.attr.state_checked} }, {"0xff" .. RGBcolor})) luajava.getIdView("tab2"):setTabTextColors(0xff000000, "0xff" .. RGBcolor) luajava.getIdView("tab2"):setSelectedTabIndicatorColor("0xff" .. RGBcolor) end ) end ) end Custom = luajava.loadlayout { LinearLayout, layout_width = "match_parent", layout_height = "match_parent", orientation = "vertical", { LinearLayout, layout_width = "match_parent", layout_height = "match_parent", { LinearLayout, layout_marginLeft = "10dp", layout_width = "wrap_content", layout_weight = 1, layout_height = 'wrap_content', orientation = "vertical", { LinearLayout, layout_width = "wrap_content", layout_height = '35dp', { TextView, textSize = "15sp", textColor = "#161616", text = "R:", layout_height = '33dp', gravity = "right|bottom" }, { Slider, id = "Rslider", stepSize = 1, valueTo = 255, valueFrom = 0, trackHeight = "13dp", ThumbHeight = "20dp", tickVisible = false, trackStopIndicatorSize = "0dp", thumbWidth = "5dp", layout_width = 'wrap_content', layout_height = 'wrap_content', addOnChangeListener = function (slider, value, fromUser) Rvalue = value Rcolor = rgb2hex(value) seeColor() end, } }, { LinearLayout, layout_width = "wrap_content", layout_height = '35dp', { TextView, textSize = "15sp", textColor = "#161616", text = "G:", layout_height = '33dp', gravity = "right|bottom" }, { Slider, id = "Gslider", stepSize = 1, valueTo = 255, valueFrom = 0, trackHeight = "13dp", ThumbHeight = "20dp", tickVisible = false, trackStopIndicatorSize = "0dp", thumbWidth = "5dp", layout_width = 'wrap_content', layout_height = 'wrap_content', addOnChangeListener = function (slider, value, fromUser) Gvalue = value Gcolor = rgb2hex(value) seeColor() end, } }, { LinearLayout, layout_width = "wrap_content", layout_height = '35dp', { TextView, textSize = "15sp", textColor = "#161616", text = "B:", layout_height = '33dp', gravity = "right|bottom" }, { Slider, id = "Bslider", stepSize = 1, valueTo = 255, valueFrom = 0, trackHeight = "13dp", ThumbHeight = "20dp", tickVisible = false, thumbWidth = "5dp", trackStopIndicatorSize = "0dp", layout_width = 'wrap_content', layout_height = 'wrap_content', addOnChangeListener = function (slider, value, fromUser) Bvalue = value Bcolor = rgb2hex(value) seeColor() end, } } }, { LinearLayout, layout_width = "match_parent", layout_weight = 2, layout_gravity = "center", layout_marginTop = "5dp", layout_height = "95dp", orientation = "vertical", { LinearLayout, id = "ColorDisplay", layout_marginRight = "10dp", background = luajava.loadlayout {GradientDrawable, color = "0xff" .. RGBcolor, cornerRadius = 15}, layout_height = "match_parent", layout_width = "match_parent", layout_marginBottom = "5dp", layout_weight = 1, }, { TextView, id = "ColorText", layout_height = "match_parent", layout_marginRight = "10dp", background = luajava.loadlayout {GradientDrawable, color = 0xFFFFFFFF, cornerRadius = 15}, layout_width = "match_parent", layout_weight = 2, textColor = "0xff161616", text = "" .. RGBcolor, gravity = "center", } } }, { FrameLayout, layout_height = "wrap_content", layout_marginLeft = "10dp", layout_marginRight = "10dp", layout_width = "match_parent", { MaterialSwitch, id = "SwitchPreview", text = "预览:", thumbIconDrawable = SwitchDrawable("mqopen", "mqclose"), setThumbIconSize = "18dp", checked = true, layout_width = 'wrap_content', layout_height = 'wrap_content', }, { TabLayout, id = luajava.newId("tab2"), layout_height = "wrap_content", layout_width = "150dp", layout_gravity = "center|right", background = getVerticalBG( {0x00000000, 0x00000000}, 15), } } } for i = 1, 3 do luajava.getIdView("tab2"):addTab(luajava.getIdView("tab2"):newTab():setText("演示")) end lastClickTime4 = 0 function 自定义主题() local currentTime4 = os.time() if currentTime4 - lastClickTime4 < 1 then return 0 end lastClickTime4 = currentTime4 luajava.runUiThread( function () local parent = Custom:getParent() if parent then parent:removeView(Custom) end Rslider:setValue(Rvalue) Gslider:setValue(Gvalue) Bslider:setValue(Bvalue) end ) CustomTheme = MaterialAlertDialogBuilder(baseWindow:getContext()) :setTitle('控件颜色') :setView(Custom):setPositiveButton('应用', function () 修改控件颜色(RGBcolor) local file = io.open("/sdcard/殃及配置./图片/color", "w") file:write(RGBcolor) end ) luajava.showAlert(CustomTheme) end function 修改控件颜色(color) luajava.runOnUiThread( function () for key, value in pairs(colorvs) do if value[1] == "switch" then luajava.getIdView(value[2]):setTrackTintList(ColorStateList( { {android.R.attr.state_checked} }, {"0xff" .. RGBcolor})) elseif value[1] == "slider" then luajava.getIdView(value[2]):setTrackActiveTintList(ColorStateList( { { } }, {"0xff" .. color})) luajava.getIdView(value[2]):setTrackInactiveTintList(ColorStateList( { { } }, {"0x50" .. color})) luajava.getIdView(value[2]):setThumbTintList(ColorStateList( { { } }, {"0xff" .. color})) elseif value[1] == "box" then boxpic[value[2]]:setColorFilter("0xff" .. RGBcolor) elseif value[1] == "check" then luajava.getIdView(value[2]):setButtonTintList(ColorStateList( { {android.R.attr.state_checked}, { -android.R.attr.state_checked} }, {"0xff" .. RGBcolor, 0xff49454F})) elseif value[1] == "snackbar" then luajava.getIdView(value[2]):setBackgroundTint("0xff" .. RGBcolor) end end end ) end dex.loadfile("/sdcard/殃及配置./图片/BlurView.dex") import("eightbitlab.com.blurview.*") 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.LEFT | Gravity.TOP layoutParams.width = LayoutParams.WRAP_CONTENT layoutParams.height = LayoutParams.WRAP_CONTENT return layoutParams end changan.controlRotation2 = function (control, time) luajava.runUiThread( function () import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {0, 360}) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() end ) end changan.controlRotation1 = function (control, time) luajava.runUiThread( function () import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {0, -360}) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() end ) end changan.controlRotation3 = function (control, to1, to2) luajava.runUiThread( function () import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {to1, to2}) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(3) xuanzhuandonghua: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 changan.controlFlip = function (control, time) luajava.runUiThread( function () import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360}) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.REVERSE) xuanzhuandonghua:setDuration(time) xuanzhuandonghua:start() 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 YoYoImpl = luajava.getYoYoImpl() mainLayoutParams = getLayoutParams() window = context:getSystemService("window") function panduan(rec) fille, err = io.open(rec) if fille == nil then return false else return true end end function 退出() tuichu = 1 luajava.setFloatingWindowHide(false ) end 显示 = 0 function 隐藏() already = true luajava.runUiThread( function () if 显示 == 0 then control:setVisibility(View.GONE) 显示 = 1 control:setVisibility(View.GONE) chuangk:setVisibility(View.VISIBLE) chuangk:setAlpha(1) ckou:setVisibility(View.VISIBLE) reme:setVisibility(View.VISIBLE) blurView:setupWith(floatWindow) blurView:setBlurRadius(5) blurView:setVisibility(View.GONE) YoYoImpl:with("FadeIn"):duration(400):playOn(ckou) floatWindow:setBackground(beij) mainLayoutParams.width = muby mainLayoutParams.height = mubx mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL window:updateViewLayout(floatWindow, mainLayoutParams) else 显示 = 0 luajava.runUiThread( function () YoYoImpl:with("FadeOut"):duration(400):playOn(floatWindow) end ) luajava.runUiThread( function () YoYoImpl:with("FadeIn"):duration(400):playOn(floatWindow) chuangk:setVisibility(View.GONE) ckou:setVisibility(View.GONE) reme:setVisibility(View.GONE) floatWindow:setBackground(beij2) control:setVisibility(View.VISIBLE) mainLayoutParams.width = LayoutParams.WRAP_CONTENT mainLayoutParams.height = LayoutParams.WRAP_CONTENT mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE window:updateViewLayout(floatWindow, mainLayoutParams) end ) end end ) end suofang = function (v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then blurView:setVisibility(View.VISIBLE) RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.height y = mainLayoutParams.width if x == 0 or x == -2 then x = 1700 y = 1300 end elseif Action == MotionEvent.ACTION_MOVE then mubx = tonumber(x) + (event:getRawY() - RawY) if mubx >= 50 and mubx <= 11000 then mainLayoutParams.height = mubx end muby = tonumber(y) + (event:getRawX() - RawX) if muby >= 50 and muby <= 11000 then mainLayoutParams.width = muby end elseif Action == MotionEvent.ACTION_UP then blurView:setVisibility(View.GONE) end window:updateViewLayout(floatWindow, mainLayoutParams) end function changan.line(linec) if not linec then linec = "#BABEC1" end return luajava.loadlayout( { LinearLayout, layout_height = "match_parent", layout_width = "1dp", background = linec, }) end yinc = function (view, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawY = event:getRawY() elseif Action == MotionEvent.ACTION_MOVE then local deltaY = RawY - event:getRawY() local progress = math.min(math.max(deltaY / 200, 0), 1) local alpha = 1 - progress chuangk:setAlpha(alpha) if deltaY > 200 and 显示 == 1 then luajava.newThread( function () 隐藏() end ):start() end elseif Action == MotionEvent.ACTION_UP then chuangk:setAlpha(1) end return true end function guid() seed = { "e", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" } tb = { } for i = 1, 32 do table.insert(tb, seed[math.random(1, 16)]) end sid = table.concat(tb) return string.format("%s%s%s", string.sub(sid, 1, 8), string.sub(sid, 10, 12), string.sub(sid, 21, 22)) end 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 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 changan.menu(pages) local layout = { 'ui.ViewPager', layout_height = "fill_parent", layout_width = 'fill_parent', focusable = false, focusableInTouchMode = false, } for i = 1, #stab do local tmp = { LinearLayout, layout_height = "fill_parent", layout_width = "match_parent", orientation = "vertical", } if pages[i] then for k = 1, #pages[i] do tmp[ #tmp + 1] = pages[i][k] end end _ENV["layout" .. i] = { ScrollView, layout_height = "fill_parent", layout_width = "fill_parent", tmp, padding = {"8dp", "3dp", "8dp", "3dp"}, } layout[ #layout + 1] = _ENV["layout" .. i] end ViewPager = ui.ViewPager(layout) luajava.setInterface(ViewPager, 'addOnPageChangeListener', { onPageSelected = function (position) BottomNav:setSelectedItemId(position + 1) end }) SmalldisplaMain = luajava.loadlayout( { LinearLayout, id = luajava.newId("Smalldisplay"), layout_width = "match_parent", layout_height = 'match_parent', gravity = "center", IslandPicMain, { TextView, id = "IslandText", layout_weight = 1, gravity = "center", layout_width = "match_parent", layout_height = "match_parent", text = "", ellipsize = "marquee", singleLine = true, selected = true, textColor = "#FAFAFA", textSize = "8dp", }, { LottieAnimationView, gravity = "center|right", id = "musicicon1", layout_width = "21dp", layout_height = "21dp", }, }) SmalldisplaMain2 = luajava.loadlayout( { LinearLayout, id = luajava.newId("Promptplay"), layout_width = "match_parent", layout_height = 'match_parent', gravity = "center", { TextView, id = "PromptText", layout_weight = 3, gravity = "center|left", layout_width = "match_parent", layout_height = "match_parent", layout_marginLeft = "5dp", text = "", ellipsize = "marquee", singleLine = true, selected = true, textColor = "#FAFAFA", textSize = "10dp", }, { LottieAnimationView, gravity = "center|right", id = "Prompticon1", layout_width = "21dp", layout_height = "21dp", }, }) hanshu = function (v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then RawX = event:getRawX() RawY = event:getRawY() x = mainLayoutParams.x y = mainLayoutParams.y if isUiStart and isLDTips == false then YoYoImpl:with("FadeOut"):duration(300):playOn(luajava.getIdView("SmallIsland")) luajava.getIdView("SmallIsland"):removeView(SmalldisplaMain) luajava.getIdView("SmallIsland2"):removeView(SmalldisplaMain2) luajava.getIdView("SmallIsland2"):addView(SmalldisplaMain) luajava.getIdView("SmallIsland2"):setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(1100):playOn(luajava.getIdView("Smalldisplay")) end elseif Action == MotionEvent.ACTION_MOVE then mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX) mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(floatWindow, mainLayoutParams) elseif Action == MotionEvent.ACTION_UP then if isUiStart and isLDTips == false then YoYoImpl:with("FadeIn"):duration(500):playOn(luajava.getIdView("SmallIsland")) luajava.getIdView("SmallIsland2"):removeView(SmalldisplaMain) luajava.getIdView("SmallIsland2"):addView(SmalldisplaMain2) luajava.getIdView("SmallIsland"):addView(SmalldisplaMain) luajava.getIdView("SmallIsland2"):setVisibility(View.GONE) end end end function changan.LDTips(text, time) if isLDTips == false then luajava.runOnUiThread( function () YoYoImpl:with("FadeOut"):duration(500):playOn(luajava.getIdView("SmallIsland")) luajava.getIdView("SmallIsland2"):setVisibility(View.VISIBLE) YoYoImpl:with("FadeOut"):duration(300):playOn(luajava.getIdView("Smalldisplay")) luajava.getIdView("Promptplay"):setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(300):playOn(luajava.getIdView("Promptplay")) Prompticon1:setSpeed(1.5) Prompticon1:playAnimation() PromptText:setText(text) end ) isLDTips = true gg.sleep(time) isLDTips = false luajava.runOnUiThread( function () local Smalldisplay = luajava.getIdView("Smalldisplay") local SmallIsland = luajava.getIdView("SmallIsland") YoYoImpl:with("FadeOut"):duration(200):playOn(luajava.getIdView("Promptplay")) SmallIsland:setVisibility(View.VISIBLE) SmallIsland:setAlpha(0) SmallIsland:animate():alpha(1):setDuration(600) Smalldisplay:setVisibility(View.VISIBLE) Smalldisplay:setAlpha(0) Smalldisplay:animate():alpha(1):setDuration(500) luajava.getIdView("SmallIsland2"):setVisibility(View.GONE) end ) end end function particle2(co1, co2, cor) local webView = luajava.webView( function (webView) webView:loadData([[
]], 'text/html', 'UTF-8') webView:setBackgroundColor(0x0) end ) return webView end function 获取图片3(txt) txt = string.url(txt, "de") if string.find(tostring(txt), "http") ~= nil then ntxt = string.sub(string.gsub(txt, "/", "-"), -10, -1) if file.length("/storage/emulated/0/殃及配置./图片/" .. ntxt, false ) < 200 then luajava.download(txt, "/storage/emulated/0/殃及配置./图片/" .. ntxt) end txt = "/storage/emulated/0/殃及配置./图片/" .. ntxt end return luajava.getBitmap(txt) end local BackG = BitmapDrawable(getBlur(获取图片3(窗口背景))) ckou = luajava.loadlayout( { MaterialCardView, __onFinish = function (v) v:setRadius(fillet) ckouBG = v end, strokeWidth = "0dp", cardBackgroundColor = "0xff161616", { FrameLayout, layout_width = 'match_parent', layout_height = 'match_parent', id = "chuangk", visibility = "gone", background = BackG, ClipToOutline = true, { LinearLayout, id = 'webv_', layout_height = 'match_parent', layout_width = 'match_parent', layout_marginTop="35dp", -- alpha = 0.9, }, { LinearLayout, layout_width = 'match_parent', layout_height = 'match_parent', orientation = "vertical", { LinearLayout, layout_width = 'match_parent', layout_height = "0dp", layout_weight = 1, orientation = "horizontal", { LinearLayout, layout_width = 'fill_parent', layout_height = 'fill_parent', orientation = "vertical", { LinearLayout, layout_width = 'fill_parent', layout_height = '30dp', gravity = 'center', orientation = "horizontal", { ImageView, id = "gengd", layout_width = "40dp", layout_height = "40dp", layout_weight = 1, }, { ImageView, padding = "5dp", layout_gravity = 'right|center', src = "/storage/emulated/0/殃及配置./图片/tsb", ColorFilter = "#000000", layout_width = "25dp", layout_height = "25dp", layout_marginRight = "5dp", onClick = 自定义主题, onTouch = hanshu, }, { ImageView, padding = "5dp", layout_gravity = 'right|center', src = getRes("heix"), ColorFilter = "#000000", layout_width = "25dp", layout_height = "25dp", layout_marginRight = "5dp", onClick = 隐藏, onTouch = hanshu, } }, { LinearLayout, layout_width = 'fill_parent', layout_height = 'fill_parent', layout_weight = 1, gravity = 'center', {ViewPager, layout_width = 'match_parent', layout_height = 'match_parent'} } } }, { LinearLayout, layout_width = 'match_parent', layout_height = 'wrap_content', orientation = "vertical", { BottomNavigationView, id = "BottomNav", layout_width = "match_parent", layout_height = "75dp", background = "#00FFFFFF", ItemActiveIndicatorColor = ColorStateList( { {android.R.attr.state_pressed}, { } }, {0xffD4E4F5, 0xffD4E4F5}), ItemTextColor = ColorStateList( { {android.R.attr.state_checked}, { } }, {0xFF161616, 0xFF161616}), ItemIconTintList = ColorStateList( { {android.R.attr.state_checked}, { } }, {0xFF161616, 0xFF161616}), }, { View, id = "tianchong", layout_width = 'match_parent', layout_height = '4dp', layout_marginTop = "5dp", layout_marginRight = "-2dp", } } } } }) floatWindow = luajava.loadlayout( { FrameLayout, layout_width = "wrap_content", layout_height = "wrap_content", orientation = "vertical", gravity = "center_vertical", onTouch = hanshu, onClick = function () end, ckou, { ImageView, id = "control", background = 获取图片(悬浮窗图标), layout_width = "40dp", layout_height = "40dp", onTouch = hanshu, onClick = 隐藏, }, { FrameLayout, id = 'reme', layout_height = 'match_parent', layout_width = 'match_parent', elevation = '3dp', visibility = "gone", { LinearLayout, id = "shadow", layout_width = "match_parent", visibility = "gone", layout_height = 'match_parent', onClick = function () 灵动岛() canSwipeUp = false canSwipeDown = true end }, { FrameLayout, id = luajava.newId("SmallIslandTop"), layout_marginTop = "5dp", layout_marginLeft = "20dp", layout_marginRight = "20dp", layout_gravity = "center|top", layout_width = "wrap_content", layout_height = 'wrap_content', background = {GradientDrawable, color = 0xff161616, cornerRadius = 50}, LayoutTransition = layoutTransition, { LinearLayout, gravity = "center", id = luajava.newId("SmallIsland"), layout_height = "25dp", layout_width = "105dp", padding = {"2.5dp", "0dp", "2.5dp", "0dp"}, onTouch = function (view, event) local action = event:getAction() if action == MotionEvent.ACTION_DOWN then initialY = event:getY() elseif action == MotionEvent.ACTION_MOVE then local currentY = event:getY() local deltaY = currentY - initialY if deltaY < -threshold and canSwipeUp then 灵动岛() canSwipeUp = false canSwipeDown = true elseif deltaY > threshold and canSwipeDown then 灵动岛() canSwipeDown = false canSwipeUp = true end end return true end, SmalldisplaMain }, { LinearLayout, gravity = "center", visibility = "gone", id = luajava.newId("SmallIsland2"), layout_height = "25dp", layout_width = "135dp", padding = {"2.5dp", "0dp", "2.5dp", "0dp"}, onTouch = function (view, event) local action = event:getAction() if action == MotionEvent.ACTION_DOWN then initialY = event:getY() elseif action == MotionEvent.ACTION_MOVE then local currentY = event:getY() local deltaY = currentY - initialY if deltaY < -threshold and canSwipeUp then 灵动岛() canSwipeUp = false canSwipeDown = true elseif deltaY > threshold and canSwipeDown then 灵动岛() canSwipeDown = false canSwipeUp = true end end return true end, SmalldisplaMain2 }, { LinearLayout, id = "Island", layout_height = "147dp", visibility = "gone", layout_width = "fill_parent", onClick = function () end, onTouch = function (view, event) local action = event:getAction() if action == MotionEvent.ACTION_DOWN then initialY = event:getY() elseif action == MotionEvent.ACTION_MOVE then local currentY = event:getY() local deltaY = currentY - initialY if deltaY < -threshold and canSwipeUp then 灵动岛() canSwipeUp = false canSwipeDown = true elseif deltaY > threshold and canSwipeDown then 灵动岛() canSwipeDown = false canSwipeUp = true end end return true end, { LinearLayout, id = luajava.newId("music"), layout_height = "fill_parent", layout_width = "fill_parent", orientation = "vertical", { LinearLayout, layout_width = 'match_parent', layout_marginTop = "4dp", layout_height = '59dp', orientation = "horizontal", layout_marginLeft = "7dp", layout_marginRight = "7dp", { LinearLayout, gravity = "center", layout_width = '55dp', layout_height = '54dp', layout_marginLeft = "8dp", layout_marginTop = "4dp", { ImageView, id = "IslandPic1", src = "http://vip.okig.top/view.php/9db1754dca43c1038def6e2b41391ba7.png", layout_gravity = "center", background = {GradientDrawable, color = 0xff, cornerRadius = 20}, layout_width = "53dp", layout_height = "53dp", onClick = function () 播放列表() end, clipToOutline = true, } }, { LinearLayout, gravity = "center", layout_width = '130dp', layout_height = '49dp', orientation = "vertical", layout_marginLeft = "5dp", layout_marginTop = "5dp", { TextView, id = "Mname", Typeface = font, text = timeA, ellipsize = "marquee", singleLine = true, selected = true, textColor = "#FAFAFA", textSize = "12dp", layout_marginRight = "-10dp", }, { TextView, id = "GSname", layout_marginRight = "-10dp", layout_marginTop = "2dp", text = "", Typeface = font, ellipsize = "marquee", singleLine = true, selected = true, textColor = "#787878", textSize = "8dp", }, }, }, { luajava.post(LinearProgressIndicator, baseWindow:getContext()), id = "DownloadProgress", visibility = "gone", layout_width = 'match_parent', layout_height = 'wrap_content', indeterminate = true, layout_marginTop = "15dp", layout_marginBottom = "5dp", }, { LinearLayout, gravity = "center", id = "buofang", layout_width = 'match_parent', layout_height = 'wrap_content', { TextView, id = "ntime", Typeface = font, gravity = "center|right", layout_width = "40dp", layout_height = "wrap_control", text = "0:00", textColor = "#FAFAFA", textSize = "12dp", }, { Slider, id = "hkuai", trackStopIndicatorSize = "0dp", layout_weight = 1, stepSize = 1, valueTo = 100, valueFrom = 0, trackHeight = "10dp", ThumbHeight = "17dp", tickVisible = false, thumbWidth = "4dp", 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 }, { TextView, id = "atime", Typeface = font, gravity = "center|left", layout_width = "45dp", layout_height = "wrap_control", text = "0:00", textColor = "#FAFAFA", textSize = "12dp", }, }, { LinearLayout, layout_width = 'match_parent', layout_height = 'wrap_content', layout_marginLeft = "20dp", layout_marginRight = "20dp", { LinearLayout, id = luajava.newId("Collection"), layout_weight = 1, layout_width = "match_parent", layout_height = "match_parent", gravity = "center", { ImageView, id = "souc", src = "/storage/emulated/0/殃及配置./图片/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 = "/storage/emulated/0/殃及配置./图片/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, __onFinish = function (v) v:setAnimationFromJson(file.read("/storage/emulated/0/殃及配置./图片/Play-Pause")) end, }, }, { LinearLayout, id = luajava.newId("NextSong"), layout_weight = 1, layout_width = "match_parent", layout_height = "match_parent", gravity = "center", { ImageView, src = "/storage/emulated/0/殃及配置./图片/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 = "/storage/emulated/0/殃及配置./图片/setPlay", layout_width = "20dp", layout_height = "20dp", onClick = function () 播放设置() end, ColorFilter = "#FAFAFA", }, }, } } }, }, { BlurView, id = "blurView", layout_height = "match_parent", layout_width = "match_parent", layout_gravity = "bottom", background = {GradientDrawable, cornerRadius = fillet}, clipToOutline = true, }, { LinearLayout, id = "sf", padding = "2dp", layout_width = "25dp", layout_height = "25dp", layout_marginRight = "0dp", layout_marginBottom = "0dp", layout_gravity = "right|bottom", onClick = function () end, onTouch = suofang, } } }) for i = 1, #stab do local menu = BottomNav:getMenu() local menuItem = menu:add(0, i, i, stab[i][1]) menuItem:setIcon(getIcon(stab[i][2])) end local OnItemSelectedListener = luajava.bindClass("com.google.android.material.navigation.NavigationBarView$OnItemSelectedListener") local OnItemSelectedListener = luajava.bindClass("com.google.android.material.navigation.NavigationBarView$OnItemSelectedListener") BottomNav:setOnItemSelectedListener(luajava.createProxy(OnItemSelectedListener, { onNavigationItemSelected = function (item) ViewPager:setCurrentItem(item:getItemId() - 1, true ) return true end })) function changan.toastspar() local prm = luajava.new(WindowManager.LayoutParams) layoutParams1 = prm if (Build.VERSION.SDK_INT >= 26) then layoutParams1.type = prm.TYPE_APPLICATION_OVERLAY else layoutParams1.type = prm.TYPE_PHONE end layoutParams1.format = PixelFormat.RGBA_8888 layoutParams1.flags = prm.FLAG_NOT_FOCUSABLE | prm.FLAG_NOT_TOUCHABLE layoutParams1.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL layoutParams1.width = dpToPx(260) layoutParams1.height = dpToPx(70) layoutParams1.x = 0 layoutParams1.y = 0 return layoutParams1 end function changan.toastspar2() local prm = luajava.new(WindowManager.LayoutParams) layoutParams1 = prm if (Build.VERSION.SDK_INT >= 26) then layoutParams1.type = prm.TYPE_APPLICATION_OVERLAY else layoutParams1.type = prm.TYPE_PHONE end layoutParams1.format = PixelFormat.RGBA_8888 layoutParams1.flags = prm.FLAG_NOT_FOCUSABLE | prm.FLAG_NOT_TOUCHABLE layoutParams1.gravity = Gravity.BOTTOM | Gravity.RIGHT layoutParams1.width = prm.WRAP_CONTENT layoutParams1.height = prm.WRAP_CONTENT layoutParams1.x = dpToPx(16) layoutParams1.y = dpToPx(10) return layoutParams1 end local function invoke() local ok local RawX, RawY, x, y mainLayoutParams = getLayoutParams() mainLayoutParams.x = 10 mainLayoutParams.y = dheight / 4 floatWindow = luajava.loadlayout(floatWindow) local function invoke2() window:addView(floatWindow, mainLayoutParams) webv_:addView(particle2()) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) if _ENV['changan.toast'] == nil then changan.toastpar = changan.toastspar() _ENV['changan.toast'] = luajava.loadlayout( { FrameLayout, id = "toastlay", layout_height = "wrap_content", layout_width = "wrap_content", }) local function invoke(neir, func1, func2) local function invoke2() window:addView(_ENV['changan.toast'], changan.toastpar) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end invoke(neir, func1, func2) end if _ENV['changan.toast2'] == nil then changan.toastpar2 = changan.toastspar2() _ENV['changan.toast2'] = luajava.loadlayout( { LinearLayout, id = "toast2lay", orientation = 'vertical', layout_height = "wrap_content", layout_width = "wrap_content", }) local function invoke(func1, func2) local function invoke2() window:addView(_ENV['changan.toast2'], changan.toastpar2) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end invoke(func1, func2) end local isMove end invoke() gg.setVisible(false ) setOnExitListener( function () tuichu = 1 luajava.setFloatingWindowHide(false ) end ) luajava.setFloatingWindowHide( true ) qhkai = 0 qiehuan = function () if qhkai == 0 then yinll = 0 qhkai = 1 draw.remove() gg.toast("HIDE") luajava.runUiThread( function () YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow) end ) gg.sleep(400) luajava.runUiThread( function () floatWindow:setVisibility(View.GONE) end ) else qhkai = 0 yinll = 1 huiz() luajava.runUiThread( function () floatWindow:setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow) 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 huiz() luajava.runUiThread( function () floatWindow:setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(500):playOn(floatWindow) end ) end end import "android.hardware.*"; local sensor = luajava.createProxy("android.hardware.SensorEventListener", { onSensorChanged = functions.debounce( function () if 摇一摇 == false then return 0 end if qhkai ~= 0 then qhkai = 0 huiz() luajava.runUiThread( function () floatWindow:setVisibility(View.VISIBLE) YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow) end ) else qhkai = 1 draw.remove() luajava.newThread( function () luajava.runUiThread( function () YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow) end ) gg.sleep(400) luajava.runUiThread( function () floatWindow:setVisibility(View.GONE) end ) draw.remove() end ):start() end end, 500) }) dexloader = dex.loadfile("/sdcard/殃及配置./图片/classes3.dex") MySensorManager = dexloader:loadClass("yaocn.rlyun.yaoyiyao.MySensorManager") luajava.runOnUiThread( function () MySensorManager(context, sensor) end ) function SliderColor(id, color1, color2, color3) id:setTrackActiveTintList(ColorStateList( { { } }, {"0xff" .. color1})) id:setTrackInactiveTintList(ColorStateList( { { } }, {"0xff" .. color2})) id:setThumbTintList(ColorStateList( { { } }, {"0xff" .. color3})) end ztkq:setAnimationFromJson(io.open("/storage/emulated/0/殃及配置./图片/Pause", "r"):read("*all")) musicicon1:setAnimationFromJson(io.open("/sdcard/殃及配置./图片/Playing", "r"):read("*all")) musicicon1:setVisibility(View.GONE) Prompticon1:setAnimationFromJson(io.open("/sdcard/殃及配置./图片/Prompt", "r"):read("*all")) isUiStart = true import "android.graphics.Paint" import("android.media.AudioManager") function SwitchColor(id, color) id:setTrackTintList(ColorStateList( { {android.R.attr.state_checked} }, {color})) end DownloadProgress:setIndicatorColor( {0xFF1700FF}) DownloadProgress:setTrackColor(0xFF000000) SearchProgress:setIndicatorColor( {0xFF1700FF}) SearchProgress:setTrackColor(0xFF000000) SliderColor(hkuai, "E687B4EB", "FFC1DDF8", "FFFFFF") setOnExitListener( function () mediaPlayer:reset() mediaPlayer:release() window:removeView(floatWindow) tuichu = 1 end ) while true do if tuichu == 1 then break end if 音量键 then jianting3(qiehuan) end if isPlaying and isReady and #musiclist ~= 0 then luajava.runOnUiThread( function () ntime:setText(ctime(math.floor(mediaPlayer:getCurrentPosition() / 1000))) hkuai:setValue(math.floor(mediaPlayer:getCurrentPosition() / 1000)) end ) end gg.sleep(300) end luajava.post( function () window:removeView(_ENV['changan.toast']) window:removeView(_ENV['changan.toast2']) window:removeView(floatWindow) end ) luajava.setFloatingWindowHide(false ) gg.setVisible( true ) end function changan.text(text, color, size, isjz) if not color then color = "#000000" end if not size then size = 14 end local layoutParams = { TextView, text = text, Typeface = font, gravity = "center", textColor = color, textSize = size, layout_height = "wrap_content", layout_width = "match_parent", autoSizeTextType = "uniform", } return luajava.loadlayout(layoutParams) end function getButtonBG() local selector = luajava.getStateListDrawable() selector:addState( {android.R.attr.state_pressed}, getVerticalBG( {0x44ffffff, 0x44ffffff}, 20)) selector:addState( { -android.R.attr.state_pressed}, getVerticalBG( {0x44ffffff, 0x44ffffff}, 20)) return selector end swfuncs = { } function changan.button(txt, func, txtc) if not txt then txt = "未设置" end if not txtc then txtc = "#000000" end local tid = "Cbutton" .. guid() return { LinearLayout, layout_width = "match_parent", gravity = "center_vertical", layout_margin = "4dp", background = getButtonBG(), elevation = "2dp", padding = "10dp", onClick = function (v) changan.controlWater(v, 300) luajava.newThread(func):start() changan.toast2s( {"AI", 0xFF55AAFF}, {txt .. "开启成功!", 0xff161616}, 0xFF55FFAA, 0xaaffffff) end, { TextView, textColor = txtc, text = txt, textSize = "13sp", Typeface = font, layout_height = "wrap_content", layout_width = "match_parent", gravity = "center", } } end function 开关(name, func1, func2) local localname = name local tname = name .. guid() if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function () namers = _ENV[tname] if namers ~= "开" then _ENV[tname] = "开" pcall(func1) else _ENV[tname] = "关" pcall(func2) end end end end function changan.switch(name, func1, func2) local nid = name .. string.randomUUID( true ) colorvs[ #colorvs + 1] = {"switch", nid} if "" .. name == "摇一摇隐藏UI" or "" .. name == "音量键隐藏UI" then ztai = false else ztai = false end return { LinearLayout, layout_width = 'fill_parent', layout_height = "40dp", gravity = "center", elevation = "2dp", layout_margin = "4dp", background = getButtonBG(), paddingRight = "6dp", { TextView, text = name, textColor = "#000000", textSize = "13sp", Typeface = font, layout_weight = 1, layout_width = 'fill_parent', layout_marginLeft = "10dp", layout_marginRight = "20dp", }, { MaterialSwitch, checked = ztai, id = luajava.newId(nid), thumbIconDrawable = SwitchDrawable("mqopen", "mqclose"), trackTintList = (ColorStateList( { {android.R.attr.state_checked}, { } }, {"0xff" .. RGBcolor, 0x28FFFFFF})), thumbTintList = (ColorStateList( { {android.R.attr.state_checked}, { -android.R.attr.state_checked} }, {0xFFFFFFFF, 0xFF4B484F})), layout_weight = 1, layout_marginTop = "-3.5dp", layout_marginBottom = "-3.5dp", layout_width = 'match_parent', layout_height = 'wrap_content', onCheckedChange = function (compoundButton, isChecked) if isChecked then luajava.newThread( function () pcall(func1) changan.toast2s( {"AI", 0xFF55AAFF}, {name .. "开启成功!", 0xff161616}, 0xFF55FFAA, 0xaaffffff) changan.LDTips('开启成功', 1300) end ):start() else luajava.newThread( function () pcall(func2) changan.toast2s( {"AI", 0xFF55AAFF}, {name .. "不可关闭!", 0xff161616}, 0xFFFF0000, 0xaaffffff) end ):start() end end } } end function changan.seek(name, bian, smin, smax, nows) _ENV[bian] = nows local smin = tonumber(smin) local smax = tonumber(smax) if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name .. guid() kid = guid() .. "sk" return { LinearLayout, id = luajava.newId(kid), layout_width = "match_parent", layout_hight = "match_parent", layout_marginTop = "5dp", layout_marginBottom = "5dp", gravity = "center_vertical", { TextView, Typeface = font, padding = {"10dp", "10dp", "0dp", "10dp", }, gravity = "top", textColor = "#161616", textSize = "13sp", text = name, id = luajava.newId(names), layout_width = "80dp", }, { Slider, thumbHeight = "23dp", trackHeight = "15dp", trackStopIndicatorSize = "0dp", tickVisible = false, __onFinish = function (v) v:setTrackActiveTintList(ColorStateList( { { }, }, {"0xff92CEF5"})) v:setTrackInactiveTintList(ColorStateList( { { }, }, {"0x5092CEF5"})) v:setThumbTintList(ColorStateList( { { }, }, {"0xff92CEF5"})) luajava.setInterface(v, "addOnChangeListener", function (SeekBar, var2, var3) _ENV[bian] = var2 end ) end, layout_width = "match_parent", id = luajava.newId(name .. "seekbar"), valueFrom = smin, valueTo = smax, value = nows, stepSize = 1.0, } } end function changan.intcheck(name, func1, func2) nid = name .. string.randomUUID( true ) colorvs[ #colorvs + 1] = {"check", nid} if not name then name = "未设置" end check = { LinearLayout, layout_width = 'match_parent', layout_height = "42dp", layout_weight = 1, layout_marginTop = "1dp", layout_marginBottom = "1dp", { CheckBox, id = luajava.newId(nid), buttonTintList = ColorStateList( { {android.R.attr.state_checked}, { -android.R.attr.state_checked} }, {"0xff" .. RGBcolor, 0xff49454F}), layout_gravity = "center", layout_width = 'match_parent', layout_height = 'wrap_content', text = name, Typeface = font, onCheckedChange = function (compoundButton, isChecked) if isChecked then luajava.newThread( function () pcall(func1) changan.toast2s( {"AI", 0xFF55AAFF}, {name .. "开启成功!", 0xff161616}, 0xFF55FFAA, 0xaaffffff) end ):start() else luajava.newThread( function () pcall(func2) changan.toast2s( {"AI", 0xFF55AAFF}, {name .. "不可关闭!", 0xff161616}, 0xFFFF0000, 0xaaffffff) 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 changan.toasts(title, neir, qiucolor, bgcolor) if qiucolor == nil then qiucolor = 0xFF55FFAA end if bgcolor == nil then bgcolor = 0xFFFFFEFE end if title[2] == nil then title[2] = 0xff55AAFF end if neir[2] == nil then neir[2] = 0xff00FFFF end local toastid = "toast" .. title[1] .. string.randomUUID( true ) _ENV[toastid] = luajava.loadlayout( { LinearLayout, visibility = "gone", layout_height = "70dp", layout_width = "260dp", orientation = 'vertical', gravity = 'center_horizontal', background = luajava.loadlayout( {GradientDrawable, color = bgcolor, cornerRadius = 15}), { LinearLayout, layout_height = "wrap_content", layout_width = "match_parent", { LinearLayout, background = luajava.loadlayout {GradientDrawable, color = qiucolor, cornerRadius = 360}, layout_width = "20dp", layout_height = "20dp", layout_marginRight = "8dp", layout_marginLeft = "8dp", layout_marginTop = "8dp", layout_marginBottom = "8dp", }, { TextView, text = title[1], textColor = title[2], textSize = "15sp", layout_width = "match_parent", layout_height = "wrap_content", layout_marginTop = "8dp", layout_marginBottom = "8dp", } }, { LinearLayout, layout_width = "match_parent", layout_height = "fill_parent", {View, layout_width = "30dp", layout_height = "fill_parent", }, { TextView, text = neir[1], textSize = "13sp", textColor = neir[2], layout_width = "wrap_content", layout_height = "wrap_content", layout_gravity = "center|left" }, } }) luajava.newThread( function () luajava.runUiThread( function () toastlay:addView(_ENV[toastid]) _ENV[toastid]:setVisibility(View.VISIBLE) _ENV[toastid]:measure(0, 0) local height = _ENV[toastid]:getMeasuredHeight() _ENV[toastid]:setTranslationY( -height) _ENV[toastid]:animate():translationY(0):setDuration(1000):start() end ) gg.sleep(2000) luajava.runUiThread( function () _ENV[toastid]:animate():translationY( -_ENV[toastid]:getHeight()):setDuration(1000):withEndAction( function () local function invoke2() toastlay:removeView(_ENV[toastid]) end luajava.post(invoke2) end ):start() end ) end ):start() end function changan.toast2s(title, neir, qiucolor, bgcolor) if qiucolor == nil then qiucolor = 0xFF55FFAA end if bgcolor == nil then bgcolor = 0xFFFFFEFE end if title[2] == nil then title[2] = 0xff55AAFF end if neir[2] == nil then neir[2] = 0xffffFFFF end local toast2id = "toast2" .. title[1] .. string.randomUUID( true ) _ENV[toast2id] = luajava.loadlayout( { LinearLayout, visibility = "gone", layout_height = "wrap_content", layout_width = "wrap_content", { LinearLayout, layout_height = "50dp", layout_width = "100dp", gravity = 'center', background = luajava.loadlayout( {GradientDrawable, color = bgcolor, cornerRadius = 20, }), layout_marginTop = "5dp", layout_marginBottom = "5dp", { LinearLayout, layout_height = "match_parent", layout_width = "wrap_content", { LinearLayout, background = luajava.loadlayout {GradientDrawable, color = qiucolor, cornerRadius = 360}, layout_width = "15dp", layout_height = "15dp", layout_marginRight = "8dp", layout_marginLeft = "8dp", layout_marginTop = "8dp", layout_marginBottom = "8dp", layout_gravity = "center", }, { LinearLayout, layout_width = "fill_parent", layout_height = "match_parent", orientation = 'vertical', { TextView, text = title[1], Typeface = font, textColor = title[2], textSize = "13sp", layout_width = "match_parent", layout_height = "wrap_content", layout_marginTop = "5dp", layout_marginBottom = "2dp", }, { TextView, Typeface = font, text = neir[1], textSize = "10sp", textColor = neir[2], layout_width = "match_parent", layout_height = "wrap_content", }, }, } } }) luajava.newThread( function () luajava.runUiThread( function () toast2lay:addView(_ENV[toast2id]) _ENV[toast2id]:setVisibility(View.VISIBLE) _ENV[toast2id]:setAlpha(0) _ENV[toast2id]:animate():alpha(1):setDuration(1000):start() end ) gg.sleep(2000) luajava.runUiThread( function () _ENV[toast2id]:animate():alpha(0):setDuration(1000):withEndAction( function () local function invoke2() toast2lay:removeView(_ENV[toast2id]) end luajava.post(invoke2) end ):start() end ) end ):start() end local OP = { } local _anim = { } local _rotAnim = { } OP.controlRotation = function (boxpic, toDegrees, duration) if _rotAnim[boxpic] then _rotAnim[boxpic]:cancel() end import "android.animation.ObjectAnimator" local anim = ObjectAnimator:ofFloat(boxpic, "rotation", {boxpic:getRotation(), toDegrees}) anim:setDuration(duration or 500) anim:start() _rotAnim[boxpic] = anim end Rotation = 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) boxpic[tid]:setColorFilter(0xff92CEF5) Rotation(boxpic[tid], 0, 90) else tview:setVisibility(View.GONE) boxpic[tid]:setColorFilter(0xff161616) Rotation(boxpic[tid], 90, 0) end end boxes = { } boxpic = { } function changan.box(views) local tid = "box" .. string.randomUUID( true ) colorvs[ #colorvs + 1] = {"box", tid} boxpic[tid] = luajava.loadlayout { ImageView, src = getRes("hei_right"), layout_width = "26dp", layout_height = "26dp", ColorFilter = "0xff161616", } local ttid = tid .. "6" firadio = { LinearLayout, layout_width = 'fill_parent', background = luajava.loadlayout {GradientDrawable, color = 0x44FFFFFF, cornerRadius = 20}, elevation = "3dp", layout_height = "wrap_content", layout_margin = "4dp", orientation = "vertical", LayoutTransition = LayoutTransition() } if type(views[1]) == "string" or type(views[1]) == "number" then firadio[ #firadio + 1] = { LinearLayout, layout_width = 'fill_parent', layout_height = "47dp", gravity = "center_vertical", { LinearLayout, layout_width = 'fill_parent', layout_height = "40dp", layout_marginRight = "4dp", layout_marginLeft = "4dp", gravity = "center_vertical", onClick = function () visi(tid, ttid) end, { TextView, gravity = "top", text = views[1], textColor = "0xff161616", textSize = "13sp", Typeface = font, layout_weight = 1, layout_marginTop = "10dp", layout_marginBottom = "10dp", layout_width = 'fill_parent', layout_marginLeft = "10dp", layout_marginRight = "20dp", }, { LinearLayout, padding = {"0dp", "0dp", "10dp", "0dp"}, layout_width = "30dp", layout_height = "30dp", gravity = "center", boxpic[tid], } } } else gg.alert("changan.box 的 table 内第一个元素必须是 string") os.exit() end radios = { LinearLayout, layout_marginLeft = "5dp", layout_marginRight = "5dp", orientation = "vertical", visibility = "gone", id = luajava.newId(tid), 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] return firadio end import "android.view.animation.AlphaAnimation" import "android.view.animation.Animation" import "android.view.View" function getyinyu() local gd = luajava.new(GradientDrawable) gd:setCornerRadius(10) gd:setShape(GradientDrawable.RECTANGLE) gd:setGradientType(GradientDrawable.LINEAR_GRADIENT) gd:setColors( {0x00ffffff, 0x00ffffff}) gd:setStroke(3, 0xFF535353) return gd end function fadeIn(view, delay) view:clearAnimation() local anim = AlphaAnimation(0, 1) anim:setDuration(300) anim:setStartOffset(delay or 0) anim:setFillAfter( true ) view:startAnimation(anim) view:setVisibility(View.VISIBLE) end function fadeOut(view, onEnd) view:clearAnimation() local anim = AlphaAnimation(1, 0) anim:setDuration(250) anim:setFillAfter( true ) anim:setAnimationListener(luajava.createProxy("android.view.animation.Animation$AnimationListener", { onAnimationEnd = function () onEnd() end, onAnimationStart = function () end, onAnimationRepeat = function () end })) view:startAnimation(anim) end function OP.controlWater(view) luajava.runUiThread( function () import "android.animation.ObjectAnimator" ObjectAnimator():ofFloat(view, "scaleX", {1, 1.1, 0.9, 1}):setDuration(300):start() ObjectAnimator():ofFloat(view, "scaleY", {1, 0.9, 1.1, 1}):setDuration(300):start() end ) end 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 = {GradientDrawable, color = 0x44FFFFFF, cornerRadius = 20}, { EditText, Typeface = font, id = luajava.newId("搜索"), background = {GradientDrawable, color = 0x44FFFFFF, cornerRadius = 20}, gravity = "center", hint = "请输入关键词", textSize = "13sp", layout_weight = "1", HintTextColor = "0x40201E1E", layout_width = "match_parent", textColor = "#201E1E", 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", backgroundColor = "#00", }, { TextView, Typeface = font, text = "搜索", gravity = "center", id = luajava.newId("stxt"), textSize = "15sp", TextColor = "#000000", 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 = '1000dp', dividerHeight = 3, }, }, } function changan.m3ImgShadowFill(imgRes, corner, elevation) corner = corner or 16 elevation = elevation or 6 return { CardView, layout_width = "match_parent", layout_height = "200dp", Radius = corner .. "dp", cardElevation = elevation .. "dp", cardBackgroundColor = 0xFFFFFFFF, { LinearLayout, layout_width = "match_parent", layout_height = "match_parent", gravity = "center", -- ✅ 关键:让子视图居中 { "ui.GifImageView", layout_width = "360dp", layout_height = "190dp", scaleType = "centerCrop", src = "/storage/emulated/0/殃及配置./图片/"..imgRes, }, }, } end -------------------配置------------------ function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast("修改"..#data.."条数据.修改成功") local t = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) else gg.toast(":搜索0条数据.修改失败", false) return false end else gg.toast("搜索0条数据.修改失败") return false end end function search(ss,lx,nc,dz1,dz2) gg.setVisible(false) if ss~=nil then if lx~=nil then if nc==nil then nc=32 end gg.setRanges(nc) if dz1==nil then dz1="-1" end if dz2==nil then dz1="0" end gg.searchNumber(ss,lx,false,536870912,dz1,dz2) sl=gg.getResultCount() if sl~=0 then sj=gg.getResults(sl) gg.toast("搜索到 "..sl.." 个结果") gg.clearResults() else gg.toast("未搜索到结果") end else gg.toast("无搜索值类型") end else gg.toast("无需搜索值") end end function py1(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for i=1,#sj do if z1[i].value==value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") end end function py2(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") end end function py2(value,lx,py) if #sj~=nil then z1={} z2={} for i=1,#sj do z1[i]={} z1[i].address=sj[i].address+py z1[i].flags=lx end z1=gg.getValues(z1) for i=1,#sj do if z1[i].value~=value then z2[#z2+1]={} z2[#z2]=sj[i] end end sj=z2 z1={} z2={} gg.toast("共偏移 "..#sj.." 个数据") else gg.toast("没有搜索数据") end end function xg1(value,lx,py,dj) if #sj~=nil then z={} for i=1,#sj do z[i]={} z[i].address=sj[i].address+py z[i].flags=lx z[i].value=value if dj==true then z[i].freeze=true end end if dj==true then gg.addListItems(z) else gg.clearList() gg.setValues(z) end gg.toast("共修改 "..#z.." 个数据") else gg.toast("没有搜索数据") end end function TL_TL(a,b,c,d,e) local time = os.clock() kv = {} ks={} if a == "libil2cpp.so" then local aa = gg.getRangesList(a)[2].start if aa == nil then toMusic("模块未加载\n或选错游戏进程") return end for i, k in ipairs(b) do local v = aa + k kv[#kv+1] = {address = v, flags = c, value = d, freeze = true} ks[#ks+1] = {address = v+4, flags = c, value = -698416192, freeze = true} end else local aa = gg.getRangesList(a) if aa[1] == nil then toMusic("模块未加载\n或选错游戏进程") end local l = gg.getRangesList(a)[1].start for i, k in ipairs (b) do local v = l + k kv[#kv+1] = {address = v, flags = c, value = d, freeze = true} end end gg.addListItems(kv) gg.addListItems(ks) gg.toast(e.."开启成功\n共耗时"..os.clock() - time.."秒\n共修改"..#b.."条值") end function readValue(address, flags) return gg.getValues({{address = address, flags = flags}})[1]["value"]end ms = { } function setvalue ( add , value , falgs , dj ) local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs if dj == true then WY [ 1 ].freeze = true gg.addListItems ( WY ) else gg.setValues ( WY ) end end function ms.ss ( num , ty , nc ) local GGNUMBER_1 = num local GGNUMBER_2 = ty local GGNUMBER_3 = false local GGNUMBER_4 = gg.SIGN_EQUAL local GGNUMBER_5 = 0x3000000000 local GGNUMBER_6 = 0xFFFFFFFFFF local GGNUMBER_7 = 0 gg.clearResults ( ) gg.setRanges ( nc ) gg.searchNumber ( GGNUMBER_1 , GGNUMBER_2 , GGNUMBER_3 , GGNUMBER_4 , GGNUMBER_5 , GGNUMBER_6 , GGNUMBER_7 ) Result = gg.getResults ( gg.getResultCount ( ) ) end function ms.py ( num , py , ty ) if ( Result and # Result ~= 0 ) then t = { } for i , v in ipairs ( Result ) do t [ i ] = { } t [ i ].address = v.address + py t [ i ].flags = ty end t = gg.getValues ( t ) for i , v in ipairs ( t ) do if v.value ~= num then Result [ i ] = nil end end local MS = { } for i , v in pairs ( Result ) do MS [ # MS + 1 ] = v end Result = MS end end function ms.bc ( ) data = { } if Result == nil or # Result == 0 then toMusic ( "开启失败" ) else for i , v in pairs ( Result ) do data [ # data + 1 ] = v.address end end Result = nil end function ms.edit ( nn , off , ty , dj ) if ( Result ) then ms.bc ( ) end if # data > 0 then for i , v in ipairs ( data ) do setvalue ( v + off , nn , ty , dj or false ) end gg.toast ( Name.."成功" ) end end function editData(qmnb,qmxg)gg.setVisible(false)gg.clearResults()qmnbv=qmnb[3]["value"]or qmnb[3][1]qmnbt=qmnb[3]["type"]or qmnb[3][2]qmnbn=qmnb[2]["name"]or qmnb[2][1]gg.setRanges(qmnb[1]["memory"]or qmnb[1][1])gg.searchNumber(qmnbv,qmnbt)gg.refineNumber(qmnbv,qmnbt)sz=gg.getResultCount()if sz==0 then gg.toast(qmnbn.."开启失败")else sl=gg.getResults(999999)for i=1,sz do pdsz=true for v=4,#qmnb do if pdsz==true then pysz={{}}pysz[1].address=sl[i].address+(qmnb[v]["offset"]or qmnb[v][2])pysz[1].flags=qmnb[v]["type"]or qmnb[v][3]szpy=gg.getValues(pysz)tzszpd=tostring(qmnb[v]["lv"]or qmnb[v][1]):gsub(",","")pyszpd=tostring(szpy[1].value):gsub(",","")if tzszpd==pyszpd then pdjg=true pdsz=true else pdjg=false pdsz=false end end end if pdjg==true then szpy=sl[i].address for x=1,#qmxg do xgsz=qmxg[x]["value"]or qmxg[x][1]xgpy=szpy+(qmxg[x]["offset"]or qmxg[x][2])xglx=qmxg[x]["type"]or qmxg[x][3]xgdj=qmxg[x]["freeze"]or qmxg[x][4]xg={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xg[1].freeze=xgdj gg.addListItems(xg)else gg.setValues(xg)end end xgjg=true end end if xgjg==true then gg.toast(qmnbn.."开启成功")else gg.toast(qmnbn.."开启失败")end end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) if gg.searchNumber(qmnb[3]["value"],qmnb[3]["type"],false,gg.SIGN_EQUAL,0,-1)~=true then gg.searchAddress(qmnb[3]["value"],-1,qmnb[3]["type"]) end if gg.getResultCount()==0 then gg.toast(qmnb[2]["name"].."开启失败")return end szxx=gg.getResults(gg.getResultCount()) szpd={} a=0 for i=4,#qmnb do for s=1,#szxx do if szpd[s]~="false" then if gg.getValues({{address=szxx[s].address+qmnb[i]["offset"],flags=qmnb[i]["type"]}})[1].value+0~=qmnb[i]["lv"]then szpd[s]="false" a=a+1 end end end end if a==#szxx then gg.toast(qmnb[2]["name"].."开启失败")return end b=0 t={} for x=1,#qmxg do if qmxg[x]["freeze"]==true then a=1 end for i=1,#szxx do if szpd[i]==nil then b=b+1 table.insert(t,{address=szxx[i].address+qmxg[x]["offset"],flags=qmxg[x]["type"],freeze=qmxg[x]["freeze"],value=qmxg[x]["value"]}) end end end gg.setValues(t) gg.addListItems(t) gg.clearResults() if a~=1 then gg.clearList()else a=nil end gg.toast(qmnb[2]["name"].."开启成功,共修改了"..b.."条数据") end qmnb = function(daarr) local array = {} for i = 1, #daarr["搜索数组"] do local data = {["lv"] =daarr["搜索数组"][i][1], ["offset"] = daarr["搜索数组"][i][2], ["type"] = daarr["搜索类型"]} table.insert(array, i, data) end local isok, data = app.memorysearch(daarr["搜索内存"], array) if isok then for i = 1, #data do for x = 1, #daarr["修改数组"] do app.memorywrite(data[i] + daarr["修改数组"][x][2], daarr["搜索类型"], daarr["修改数组"][x][1]) end end gg.toast(daarr["功能名称"] .. "共修改" .. #data * #daarr["修改数组"] .. "条数据") else gg.toast(daarr["功能名称"] .. "开启失败") end 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 SOGSPY_ST(HDZ,DYZ) if HDZ >= DYZ then py=string.format("0x%X",HDZ-DYZ) return tostring(string.format("-0x%X",py)) else py=string.format("0x%X",DYZ-HDZ) return tostring(string.format("0x%X",py)) end end function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = { [true] = 32, [false] = 4 } if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({ { address = addr, flags = va[x64] } }) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF else -- addr[1].value = addr[1].value & 0xFFFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end function gg.edits(addr, Table, name) if not addr then gg.toast('修改失败, 可能是模块不存在') return end local Table1 = { {}, {} } for k, v in ipairs(Table) do local value = { address = addr + v[3], value = v[1], flags = v[2], freeze = v[4] } if v[4] then Table1[2][#Table1[2] + 1] = value else Table1[1][#Table1[1] + 1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改" .. #Table .. "个值") end function SO_PT(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then toMusic("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}}) end end local SO={} SO['新手'] = 0x1a1b348 SO['封号'] = 0x1edf148 SO['行为1'] = 0x2c39504 SO['行为2'] = 0x2c3959c SO['行为3'] = 0x2c3933c SO['行为4'] = 0x2c32734 SO['行为5'] = 0x2c3920c SO['行为6'] = 0x1c1939c SO['行为7'] = 0x1e87e80 SO['行为8'] = 0x1a5c2f0 SO['行为9'] = 0x1a5c204 SO['行为10'] = 0x2c2be18 SO['行为11'] = 0x1a5c0c8 SO['行为12'] = 0x1a5bb98 SO['行为13'] = 0x1c18bac SO['行为14'] = 0x1c19098 SO['行为15'] = 0x1c192e0 SO['行为16'] = 0x1fba13c SO['行为17'] = 0x1acd17c SO['行为18'] = 0x1c20928 SO['行为19'] = 0x1c227c8 SO['行为20'] = 0x1ab1378 SO['行为21'] = 0x1c24540 SO['行为22'] = 0x3136a90 SO['行为23'] = 0x3136b34 SO['行为24'] = 0x4363efc SO['行为25'] = 0x2c31340 SO['行为26'] = 0x2c392a4 SO['行为27'] = 0x2c393d4 SO['行为28'] = 0x2c3946c SO['行为29'] = 0x3136738 SO['行为30'] = 0x31367dc SO['行为31'] = 0x3136880 SO['行为32'] = 0x313691c SO['行为33'] = 0x3136738 SO['行为34'] = 0x1e89bf0 SO['行为35'] = 0x2e0bb58 SO['行为36'] = 0x1c18e84 SO['行为37'] = 0x2c313dc SO['行为38'] = 0x1c21a9c SO['行为39'] = 0x1c25450 SO['行为40'] = 0x31369c0 SO['行为41'] = 0x3712234 SO['行为42'] = 0x3712228 SO['货币检测'] = 0x1aef9b8 SO['速度检测1'] = 0x1e5f110 SO['速度检测2'] = 0x1e5f194 SO['速度检测3'] = 0x1d4b930 SO['速度检测4'] = 0x2386b98 SO['时间检测5'] = 0x2c39174 SO['防举报1'] = 0x2e0bc00 SO['防举报2'] = 0x2e0bab8 SO['防举报3'] = 0x2622350 SO['防举报4'] = 0x280c664 SO['人物'] = 0x1a13e1c SO['滑板'] = 0x1a15bcc SO['背饰'] = 0x1a392d4 SO['背饰保存'] = 0x1a393b8 SO['像框'] = 0x210a0b4 SO['相框1'] = 0x2b19e7c SO['装扮'] = 0x1a08400 SO['技能'] = 0x1a7e5e8 SO['技能勾选'] = 0x1a892f8 SO['名称'] = 0x1b48e30 SO['获取十倍'] = 0x2c31c50 SO['解锁十倍'] = 0x2128aec SO['内购'] = 0x1f42938 SO['内购成功'] = 0x1f4fdec SO['领奖'] = 0x1a6ef28 SO['十抽'] = 0x2675b50 SO['宝物备份'] = 0x267486c SO['奖励替换'] = 0x20f81c0 SO['人物奖励'] = 0x2109c58 SO['滑板奖励'] = 0x2109e18 SO['背饰奖励'] = 0x2109fd8 SO['像框奖励'] = 0x210a0b4 SO['赛事'] = 0x1d99dcc SO['备份1'] = 0x2c2883c SO['备份2'] = 0x1a46778 SO['备份3'] = 0x2c2883c SO['备份4'] = 0x30a1bc4 SO['双倍'] = 0x19edce0 SO['微博'] = 0x26819b4 SO['金币'] = 0x1a018bc SO['钥匙'] = 0x1a01c24 SO['紫币'] = 0x1a70ef4 SO['宝物钥匙'] = 0x1a3ef7c SO['开发者'] = 0x2c2da2c SO['抓娃娃'] = 0x2c32374 SO['重生'] = 0x1c48854 SO['邮箱'] = 0x1b74f7c SO['炫跑卡'] = 0x1a3ad4c SO['历史分数1'] = 0x1a02178 SO['历史分数2'] = 0x1a02390 SO['历史排名'] = 0x1a31804 SO['等级'] = 0x1a0526c SO['全服'] = 0x1b1ae18 SO['省标'] = 0x1b1aeb0 SO['地区'] = 0x1b1af48 SO['断网1'] = 0x436cbfc SO['断网2'] = 0x436cbfc SO['隐藏1'] = 0x1e2dd94 SO['隐藏2'] = 0x2c2be18 SO['隐藏3'] = 0x1e2ecd4 SO['隐藏4'] = 0x1a2d5e0 SO['防止卡屏1'] = 0x1fba018 SO['防止卡屏2'] = 0x1fb9ef0 SO['受到攻击'] = 0x2e3914c SO['攻击拾取'] = 0x2e33a90 SO['局内金币'] = 0x2021460 SO['获取能量'] = 0x2e32fd0 SO['获取能量1'] = 0x2e2e968 SO['跳跃'] = 0x2028bd0 SO['下滑'] = 0x20291cc SO['下滑1'] = 0x2028dc0 SO['下滑左'] = 0x2028e9c SO['下滑中'] = 0x2028f24 SO['下滑右'] = 0x2028fac SO['滑板跳高'] = 0x1f6f9a4 SO['滑板滑翔'] = 0x1f6fd90 SO['滑板瞬移'] = 0x1f6fef8 SO['无尽装死'] = 0x1ada3a0 SO['无限跳跃'] = 0x261c290 SO['金币消失'] = 0x2846a90 SO['无尽死亡'] = 0x1ae175c SO['道具图标'] = 0x2e31e9c SO['道具图标2'] = 0x2e31f3c SO['道具图标3'] = 0x2e33f1c SO['修改道具'] = 0x2e33798 SO['战绩消失'] = 0x1fb81c8 SO['购买界面'] = 0x1afb62c SO['反弹道具1'] = 0x2df9478 SO['反弹道具2'] = 0x2df9564 SO['释放能量'] = 0x2e3315c SO['释放'] = 0x2e3328c SO['无视道具1'] = 0x2dfa820 SO['无视道具2'] = 0x2dfadd0 SO['无视障碍'] = 0x1e1eac0 SO['无视侧撞'] = 0x1e1f6c8 SO['开局道具'] = 0x1a0107c SO['能量穿透'] = 0x2e2e2bc SO['忙碌状态'] = 0x2e32450 SO['无限能量'] = 0x2e31d18 SO['Buff模式'] = 0x2e38500 SO['派对聚能'] = 0x2814b0c SO['得到分数'] = 0x20254b8 SO['结束游戏'] = 0x1fb9ef0 SO['锁定人机'] = 0x1fbc970 SO['派对新手'] = 0x2c2ee74 SO['派对省份'] = 0x2390310 SO['派对省排'] = 0x239027c SO['派对全服'] = 0x23901e8 SO['滑板消失'] = 0x1e22480 SO['三倍金币'] = 0x26b74a8 SO['得分倍增'] = 0x1a065d4 SO['宝物等级'] = 0x266f2e8 SO['段位'] = 0x25b76c0 SO['历史段位'] = 0x1a31f24 SO['星数'] = 0x1b20424 SO['道具满级'] = 0x291b280 SO['道具等级'] = 0x291b0ec SO['退出登录'] = 0x2c35c34 SO['超级跑者'] = 0x1a6bbcc SO['使用技能'] = 0x209b738 SO['观战对手'] = 0x261788c SO['替换人物'] = 0x209a04c SO['替换滑板'] = 0x209ad40 SO['替换背饰'] = 0x209c184 SO['替换装扮'] = 0x209a60c SO['点击表情'] = 0x2c7cf88 SO['宝抽次数'] = 0x1a3fed4 SO['铁轨金币'] = 0x2846a90 SO['房间防踢'] = 0x2a62a50 SO['匹配人机'] = 0x280cf98 SO['道具聚能'] = 0x2e3859c SO['道具备份1'] = 0x1a46778 SO['道具备份2'] = 0x2c2883c SO['好友'] = 0x25760d0 SO['踢人'] = 0x2576680 SO['修改对抗赛'] = 0x1e5d758 SO['对抗赛好友匹配'] = 0x26cee68 SO['观察者室'] = 0x1d2c500 SO['自救'] = 0x1e5aea4 SO['复活结算'] = 0x1fb81c8 SO['调出名称'] = 0x1a1b48c SO['派对新手1'] = 0x2c2ee74 SO['派对新手2'] = 0x2c2ef18 SO['改变角色'] = 0x1f90bec SO['自变保安'] = 0x1f9138c SO['时间'] = 0x2624bf0 SO['异常弹窗'] = 0x257fca8 SO['HFX目标'] = 0x2debe54 SO['HP目标'] = 0x2df9564 SO['HP使用人'] = 0x2df9478 SO['PVP定人'] = 0x1fbc970 SO['全宝'] = 0x2676e58 SO['半宝'] = 0x2676e58 SO['强制下线'] = 0x225d2d8 SO['行为弹窗'] = 0x257ff64 SO['升级金币'] = 0x266f544 SO['升级材料'] = 0x2669718 SO['道具无限时长'] = 0x28af844 SO['人物购买按钮'] = 0x20895b0 SO['人物购买成功'] = 0x208ecf4 SO['滑板购买按钮'] = 0x209f818 SO['滑板购买成功'] = 0x20a486c SO['竞赛模式1'] = 0x25ab878 SO['竞赛模式2'] = 0x1cd9590 SO['竞赛模式3'] = 0x20c1974 SO['匹配机制1'] = 0x2c7d36c SO['匹配机制2'] = 0x1d99dcc SO['匹配机制3'] = 0x1d2c500 SO['轨道位置'] = 0x2619ea8 SO['铁轨金币'] = 0x2846a90 SO['表情退出'] = 0x1b19250 SO['按钮复制房间'] = 0x291a910 SO['无视敏感词'] = 0x1b13efc SO['房间防踢1'] = 0x26de274 SO['分数全服'] = 0x1ce6218 SO['分数全省'] = 0x1ce633c SO['改字复活'] = 0x1b19388 SO['好友踢人'] = 0x2576680 SO['人物速度'] = 0x2617198 SO['滑板时长'] = 0x2de83b8 SO['宝藏等级'] = 0x266f2e8 SO['目标地图1'] = 0x2d9ae40 SO['目标地图2'] = 0x2d9bd90 SO['目标路线'] = 0x319562c SO['结算退出'] = 0x25b4454 SO['退出界面'] = 0x1d9c418 SO['灵魂出窍'] = 0x1b60344 SO['断开连接1'] = 0x1ce99b4 SO['断开连接2'] = 0x1d13884 SO['服务器1'] = 0x2c30f74 SO['服务器2'] = 0x2c38a7c SO['服务器3'] = 0x2c38b24 SO['服务器4'] = 0x1bc4ce4 SO['人物全显'] = 0x2a25918 SO['滑板全显'] = 0x2a25918 SO['API检值'] = 0x20328e8 SO['拖尾'] = 0x261c134 SO['弹窗'] = 0x1b1617c SO['PVP获胜者'] = 0x23939fc SO['胜利时间'] = 0x25b7bd8 SO['能量吸附'] = 0x2e2e2bc SO['能量吸附2'] = 0x2e2f27c SO['撑杆'] = 0x1adf774 SO['能量消失'] = 0x2e2f44c SO['更新时刻'] = 0x346559c SO['更新程序'] = 0x25e64c0 SO['获取奖励'] = 0x2049264 SO['滑板提速'] = 0x2de65ec SO['翻滚动作'] = 0x262272c SO['翻滚更新'] = 0x2618ba4 SO['触发事件'] = 0x2e2cb64 SO['速度不变'] = 0x25b1620 SO['发送成功'] = 0x2a04e70 SO['金币分数'] = 0x1a028ac SO['客户端离线'] = 0x2c30f74 SO['全局离线'] = 0x2e07e48 SO['防环境'] = 0x1e89bf0 SO['4399防环境'] = 0x2c2be18 SO['静态防环境'] = 0x2e0bb58 SO['检测关闭'] = 0x4363efc SO['关闭检测'] = 0x1c18bac SO['设备ID检测'] = 0x1a5c0c8 SO['上传钥匙作弊'] = 0x1a5c2f0 SO['上传金币作弊'] = 0x1a5c204 SO['上传人物数量作弊'] = 0x2c39504 SO['金币数量检测'] = 0x1c1939c SO['钥匙数量检测'] = 0x2c3933c SO['关闭速度异常检测'] = 0x2c3920c SO['用户离线检测'] = 0x1c18e84 SO['数据备份1'] = 0x2c2883c SO['数据备份2'] = 0x1a5966c SO['数据备份3'] = 0x1a46778 SO['等级'] = 0x1a0526c SO['奖杯领取'] = 0x1a6ef28 SO['内购'] = 0x1f42938 SO['炫跑卡'] = 0x1a3ad4c SO['宝物钥匙'] = 0x1a3ef7c SO['装扮'] = 0x1a08400 SO['头像框'] = 0x2b19e7c SO['滑板技能'] = 0x1a7e5e8 SO['滑板技能勾选'] = 0x1a892f8 SO['调出十倍'] = 0x2c31c50 SO['获得十倍'] = 0x2128aec SO['解锁微博'] = 0x26819b4 SO['十抽宝物'] = 0x2675b50 SO['赛事调出'] = 0x1d99dcc SO['社团锁定人机'] = 0x2c7cf88 SO['人物无敌'] = 0x1ae175c SO['人物瞬移'] = 0x262593c SO['二段跳'] = 0x1f6fa9c SO['无限连跳'] = 0x261c290 SO['滑板滑翔'] = 0x1f6fd90 SO['滑板瞬移'] = 0x1f6fef8 SO['滑板跳高'] = 0x1f6f9a4 SO['屏蔽上传'] = 0x20328e8 SO['新时刻'] = 0x25b5444 SO['最佳时间'] = 0x1b20c0c SO['屏蔽时间检测1'] = 0x3712248 SO['屏蔽时间检测2'] = 0x25b7b50 SO['屏蔽时间检测3'] = 0x25b83cc SO['屏蔽时间检测4'] = 0x25b7f78 SO['屏蔽时间检测5'] = 0x25b8330 SO['屏蔽时间检测6'] = 0x1b20b74 SO['屏蔽时间检测7'] = 0x25b809c SO['过滤十秒'] = 0x1fba018 SO['结算作弊状态'] = 0x1fba13c SO['结算异常'] = 0x1fb9ef0 SO['结算恢复'] = 0x1fb9ef0 SO['屏蔽人机'] = 0x1fbc858 SO['进入结算屏蔽'] = 0x1fbb3c4 SO['房间防踢'] = 0x2a62a50 SO['房间踢人'] = 0x2576680 SO['防断网'] = 0x436cbfc SO['段位'] = 0x24aa0c8 SO['阶段'] = 0x24aa174 SO['星数'] = 0x24ac08c SO['分数赛过检'] = 0x202575c SO['得分倍增'] = 0x1a065d4 SO['修改速度'] = 0x2617198 SO['过派对新手1'] = 0x2c2ef18 SO['过派对新手2'] = 0x2c2ee74 SO['发文字复活'] = 0x1b19388 SO['发表情退出'] = 0x1b19250 SO['终点自动退出'] = 0x25b4454 SO['国标'] = 0x1b1ae18 SO['省标'] = 0x1b1aeb0 SO['PVP定人'] = 0x1fbc970 SO['能量倍增1'] = 0x2028e9c SO['能量倍增2'] = 0x2028f24 SO['能量倍增3'] = 0x2028fac SO['能量倍增4'] = 0x2028bd0 SO['能量倍增5'] = 0x2028dc0 SO['点击道具图标'] = 0x2e33f1c SO['忽略能量'] = 0x2e2e2bc SO['无视道具1'] = 0x2dfa820 SO['无视道具2'] = 0x2dfadd0 SO['无视障碍'] = 0x1e1eac0 SO['双倍金币'] = 0x19edce0 SO['内购成功'] = 0x1f4fdec SO['宝物解锁'] = 0x2676e58 SO['宝物备份'] = 0x267486c SO['十抽调出购买界面回调'] = 0x1afb62c SO['社团回调'] = 0x25ab878 SO['发文字复活回调'] = 0x1b60344 SO['发表情退出回调'] = 0x1d9c418 SO['终点自动退出回调'] = 0x1d9c418 SO['能量倍增回调'] = 0x2e2e968 SO['点击道具图标获取能量回调'] = 0x2e2e968 SO['下滑左'] = 0x2028e9c SO['下滑中'] = 0x2028f24 SO['下滑右'] = 0x2028fac SO['新手'] = 0x1a1b348 SO['相框'] = 0x2b19e7c SO['装扮'] = 0x1a08400 SO['技能'] = 0x1a7e5e8 SO['使用所有技能'] = 0x1a892f8 SO['获取十倍'] = 0x2c31c50 SO['内购'] = 0x1f42938 SO['内购成功'] = 0x1f4fdec SO['奖励替换'] = 0x20f81c0 SO['人物奖励'] = 0x2109c58 SO['滑板奖励'] = 0x2109e18 SO['背饰奖励'] = 0x2109fd8 SO['相框奖励'] = 0x210a0b4 SO['替换人物'] = 0x209a04c SO['替换滑板'] = 0x209ad40 SO['替换背饰'] = 0x209c184 SO['替换装扮'] = 0x209a60c SO['备份1'] = 0x2c2883c SO['备份2'] = 0x30a1bc4 SO['双倍'] = 0x19edce0 SO['微博'] = 0x26819b4 SO['金币'] = 0x1a018bc SO['钥匙'] = 0x1a01c24 SO['宝物钥匙'] = 0x1a3ef7c SO['赛季币'] = 0x1a70ef4 SO['炫跑卡'] = 0x1a3ad4c SO['等级'] = 0x1a0526c SO['十抽'] = 0x2675b50 SO['宝物备份'] = 0x267486c SO['全宝'] = 0x2676e58 SO['全服'] = 0x1b1ae18 SO['省标'] = 0x1b1aeb0 SO['地区'] = 0x1b1af48 SO['派对全服'] = 0x23901e8 SO['派对省标'] = 0x239027c SO['派对地区'] = 0x2390310 SO['局内金币'] = 0x2021460 SO['滑板跳高'] = 0x1f6f9a4 SO['滑板滑翔'] = 0x1f6fd90 SO['滑板瞬移'] = 0x1f6fef8 SO['无尽装死'] = 0x1ada3a0 SO['无限跳跃'] = 0x261c290 SO['金币消失'] = 0x2846a90 SO['无尽死亡'] = 0x1ae175c SO['道具图标'] = 0x2e31e9c SO['道具图标'] = 0x2e31f3c SO['反弹道具1'] = 0x2df9478 SO['反弹道具2'] = 0x2df9564 SO['释放能量'] = 0x2e3315c SO['释放'] = 0x2e3328c SO['无视道具'] = 0x2dfa820 SO['无视障碍'] = 0x1e1eac0 SO['开局道具'] = 0x1a0107c SO['升级材料'] = 0x2669718 SO['升级金币'] = 0x266f544 SO['能量'] = 0x2e31d18 SO['观战资格'] = 0x1d99dcc SO['二段跳'] = 0x1f6fa9c SO['人物高跳'] = 0x26257d0 SO['人物滑翔'] = 0x2625a08 SO['退出登录'] = 0x2c35c34 SO['观战对手'] = 0x261788c SO['道具等级'] = 0x291b0ec SO['结束游戏'] = 0x1fb9ef0 SO['使用技能'] = 0x209b738 SO['抓娃娃'] = 0x2c32374 SO['开发者'] = 0x2c2da2c SO['跳跃'] = 0x2028bd0 SO['滚动'] = 0x2028dc0 SO['加好友'] = 0x25760d0 SO['房间踢人'] = 0x2576680 SO['减速带'] = 0x2e2d8fc SO['加速带'] = 0x2e2cb64 SO['道具赛'] = 0x25ab878 SO['分数赛'] = 0x1b172b0 SO['社区'] = 0x2c7cf88 SO['单抽广告'] = 0x267752c SO['发言'] = 0x1b13efc SO['无视敏感词'] = 0x1b1440c SO['结算界面'] = 0x25b4454 SO['三倍金币'] = 0x26b74a8 SO['得分倍增'] = 0x1a065d4 SO['能量消失'] = 0x2e2f44c SO['超长名'] = 0x1b48e30 SO['改名成功'] = 0x1b48f30 SO['锁地形'] = 0x32fe5c0 SO['加速'] = 0x2a1fd94 SO['设置道具'] = 0x2e31e9c SO['人物全局速度'] = 0x1e2121c SO['点击'] = 0x25bbb98 SO['结尾'] = 0x1e2451c SO['查询'] = 0x1a1416c SO['派对房间'] = 0x2348f1c SO['人物下滑'] = 0x262272c SO['人物跳跃'] = 0x2fdc154 SO['人物刷新'] = 0x2618ba4 SO['状态'] = 0x1e1ede0 SO['开始'] = 0x2de8600 SO['单人道具赛'] = 0x2e08154 SO['使用道具'] = 0x2e33f1c SO['获取能量1'] = 0x2e2e968 SO['获取能量2'] = 0x2e2e968 SO['跳跃'] = 0x2028bd0 SO['下滑'] = 0x20291cc SO['下滑1'] = 0x2028dc0 SO['下滑左'] = 0x2028e9c SO['下滑中'] = 0x2028f24 SO['下滑右'] = 0x2028fac SO['人物全局速度'] = 0x1e2121c SO['炫跑卡'] = 0x1a3ad4c SO['速度检测'] = 0x1d4b930 SO['速度检测2'] = 0x2386b98 SO['自动速度'] = 0x2616fe4 SO['是否显示开屏广告'] = 0x2c2a80c SO['高级秘典昵称'] = 0x24d2afc SO['是否显示开屏广告'] = 0x2c2a80c SO['人物下滑'] = 0x262272c SO['人物跳跃'] = 0x2fdc154 SO['人物刷新'] = 0x2618ba4 SO['获取玩家ID_1'] = 0x1c5feac SO['获取玩家ID_2'] = 0x1c5d5fc SO['获取玩家ID_3'] = 0x1c5f184 SO['获取玩家ID_4'] = 0x1b9b0a4 SO['刷新函数_2'] = 0x346559c SO['游戏刷新函数'] = 0x319562c SO['获取玩家ID_1'] = 0x274ca5c SO['获取玩家ID_2'] = 0x274a1ac SO['获取玩家ID_3'] = 0x274bd34 SO['获取玩家ID_4'] = 0x2775bcc function txl(zhi,lx,xg,dj) if dj == true then gg.addListItems({{address=zhi,flags=lx,value=xg,freeze=true}}) else gg.setValues({{address=zhi,flags=lx,value=xg}}) end end function SO_PT(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then toMusic("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}}) end end -------------------配置------------------ muby = dpToPx(300) mubx = dpToPx(340) function huiz() end 窗口背景 = "/storage/emulated/0/殃及配置./图片/nacho" fillet = "40"--图片and背景R角 悬浮窗图标 = "https://www.cccimg.com/view.php/3f0460a9eed75a0af019bce519ed327d.png" stab = { {"首页", "home"}, {"刷号", "function"}, {"竞赛", "jiasu"}, {"音乐", "yinyu"}, {"设置", "shezhi"}, } changan.menu( { { changan.button("选择进程", function() gg.setProcessX() end), changan.switch("打开水印", function() draw.text('冰霖全防', 30,150)draw.setColor('#FF0D47A1') draw.setColor("#FF0D47A1")--颜色 draw.setColor("#FF0D47A1") draw.setColor("#FF0D47A1") draw.setColor("#FF0D47A1")--颜色 draw.setColor("#FF0D47A1") draw.setColor("#FF0D47A1") draw.text("作者:雪霖知冬 冷琳", 30,250)--字体 draw.text("快手号:2876423146和IlIlIlIlIlIlIlIl388", 30,300)--字体 draw.text("冰霖总群:458496965", 30,350)--字体 gg.toast("已为您打开水印") end), changan.switch("过新手教程", function () SO_PT(SO['新手'],4,"~A8 MOV W0, #1") end), changan.switch("登录过滤", function () function setvalue(address, flags, value) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = flags tt[1].value = value gg.setValues(tt) end --[2].地址:775DF3069C 数值:-698416192 so=gg.getRangesList('libtersafe2.so')[1].start py=0x4FD69C setvalue(so+py,4,-698416192) --[3].地址:775DF306DC 数值:-698416192 so=gg.getRangesList('libtersafe2.so')[1].start py=0x4FD6DC setvalue(so+py,4,-698416192) --[4].地址:775DF306FC 数值:-698416192 so=gg.getRangesList('libtersafe2.so')[1].start py=0x4FD6FC setvalue(so+py,4,-698416192) --[5].地址:775DF307DC 数值:-698416192 so=gg.getRangesList('libtersafe2.so')[1].start py=0x4FD7DC setvalue(so+py,4,-698416192) --[6].地址:775DF307FC 数值:-698416192 so=gg.getRangesList('libtersafe2.so')[1].start py=0x4FD7FC setvalue(so+py,4,-698416192) --[7].地址:775DF3088C 数值:-698416192 so=gg.getRangesList('libtersafe2.so')[1].start py=0x4FD88C setvalue(so+py,4,-698416192) gg.toast("开启成功") string.toMusic('开启成功') end), changan.switch("环境循环", function () io.open("/sdcard/全防","w+"):write([[ 7039 Var #728E9E0860|728e9e0860|4|ffa|0|0|0|0|rw-p|/data/app/~~75mNvMLUYqiBUVZi1DjJaw==/com.kiloo.subwaysurf-__kop9IvKmCNfA8VkLlvUQ==/lib/arm64/libtersafe2.so:bss|860 Var #728E9E0A18|728e9e0a18|4|ffa|0|0|0|0|rw-p|/data/app/~~75mNvMLUYqiBUVZi1DjJaw==/com.kiloo.subwaysurf-__kop9IvKmCNfA8VkLlvUQ==/lib/arm64/libtersafe2.so:bss|a18 ]]) gg.loadList("/sdcard/全防", gg.LOAD_VALUES) os.remove("/sdcard/全防") gg.toast("开启成功") string.toMusic('开启成功') end), changan.switch("行为防御", function () function SO_PT(FUNCTIONADD,TYPE,VALUE) local SOMOD=gg.getRangesList("il2cpp.so") if SOMOD[2]==nil then gg.alert("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else gg.setValues({{address=SOMOD[2].start+FUNCTIONADD,flags=TYPE,value=VALUE}}) gg.setValues({{address=SOMOD[2].start+FUNCTIONADD+4,flags=TYPE,value="~A8 RET"}}) end end for i = 1, 45 do if SO['行为'..i] then SO_PT(SO['行为'..i], 4, "~A8 MOV X0, XZR") end end gg.toast("开启成功") string.toMusic('开启成功') end), }, { changan.box({"一键解锁", changan.check({ {"人物全解", function() SO_PT(SO['人物'] ,4,"~A8 MOV X0, #1") toMusic('冰已为您开启人物全解') end},{"滑板全解", function() SO_PT(SO['滑板'] ,4,"~A8 MOV X0, #1") toMusic('冰霖已为您开启滑板全解') end},{"背饰全解", function() SO_PT(SO['背饰'] ,4,"~A8 MOV X0, #1") SO_PT(SO['背饰保存'] ,4,"~A8 MOV X0, #1")---背饰保存 toMusic('冰霖已为您开启背饰全解') end},{"像框全解", function() SO_PT(SO['像框'] ,4,"~A8 MOV X0, #1") string.toMusic("冰霖已为您开启头像框全解") end},{"角色装扮", function() SO_PT(SO['装扮'] ,4,"~A8 MOV X0, #1") string.toMusic("冰霖已为您开启角色装扮全解") end},{"滑板技能", function() SO_PT(SO['技能'] ,4,"~A8 MOV X0, #1") string.toMusic("冰霖已为您开启滑板技能全解") end},{"超长名字", function() SO_PT(SO['名称'] ,4,"~A8 B [PC,#0x148]") string.toMusic("冰霖已为您开启超长名") end},{"十倍得分", function() SO_PT(SO['十倍'] ,4,"~A8 MOV X0, #1") string.toMusic("冰霖已为您开启十倍得分调出请前往主页查看") end}, }), }), changan.box({"保存解锁", changan.check({ {"破解内购", function() SO_PT(SO['内购'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['内购'] ,SO['内购成功']).."]") string.toMusic("冰霖已为您开启内购") end},{"一键领奖", function() SO_PT(SO['领奖'] ,4,"~A8 MOV X0, #1") string.toMusic("隐藏内容全部调出成功") end},{"金币人物", function() local Character = {} time=os.clock() ms.ss(10299,4,32) ms.py(291,0x4,4) ms.py(-1,0x8,4) ms.bc() gg.clearResults() for i , v in ipairs ( data ) do v =v-291*0xE8 for i = 0 , 318 do Character[#Character+1] = {value = 2,address = v + 0x2C + 0xE8 * i,flags = 4} Character[#Character+1] = {value = 0,address = v + 0x30 + 0xE8 * i,flags = 4} Character[#Character+1] = {value = 0,address = v + 0x3C + 0xE8 * i,flags = 4} Character[#Character+1] = {value = 2,address = v + 0x44 + 0xE8 * i,flags = 4} Character[#Character+1] = {value = 0,address = v + 0x64 + 0xE8 * i,flags = 4} end end gg.setValues(Character) local time=string.sub(os.clock()-time,0,5) gg.alert ( "开启成功,耗时:" .. time .. "秒" ) string.toMusic("冰霖已为您开启人物货币") end},{"金币滑板", function() local Board = {} time=os.clock() ms.ss(20263,4,32) ms.py(254,0x4,4) ms.py(-1,0x8,4) ms.bc() gg.clearResults() for i , v in ipairs ( data ) do v =v-254*0xC0 for i = 0 , 300 do Board[#Board+1] = {value = 2,address = v + 0x24 + 0xC0 * i,flags = 4} Board[#Board+1] = {value = 0,address = v + 0x28 + 0xC0 * i,flags = 4} Board[#Board+1] = {value = 0,address = v + 0x34 + 0xC0 * i,flags = 4} Board[#Board+1] = {value = 2,address = v + 0x4C + 0xC0 * i,flags = 4} Board[#Board+1] = {value = 0,address = v + 0x64 + 0xC0 * i,flags = 4} end end gg.setValues(Board) local time=string.sub(os.clock()-time,0,5) gg.alert ( "开启成功,耗时:" .. time .. "秒" ) string.toMusic("冰霖已为您开启滑板货币") end},{"金币背饰", function() local Ornament = {} time=os.clock() ms.ss(50061,4,32) ms.py(63,0x4,4) ms.py(-1,0x8,4) ms.bc() gg.clearResults() for i , v in ipairs ( data ) do v =v-63*0x68 for i = 0 , 83 do Ornament[#Ornament+1] = {value = 2,address = v + 0x24 + 0x68 * i,flags = 4} Ornament[#Ornament+1] = {value = 1,address = v + 0x28 + 0x68 * i,flags = 4} Ornament[#Ornament+1] = {value = 0,address = v + 0x30 + 0x68 * i,flags = 4} end end gg.setValues(Ornament) local time=string.sub(os.clock()-time,0,5) gg.alert ( "开启成功,耗时:" .. time .. "秒" ) string.toMusic("冰霖已为您开启背饰货币") end},}), }), changan.box({"宝物箱子", changan.check({ {"十抽半宝", function() SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['半宝']).."]") string.toMusic("冰霖已为您开启十抽一级宝物请前往宝物箱子界面进行十抽") end},{"十抽宝物", function() SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['全宝']).."]") string.toMusic("冰霖已为您开启十抽全宝物请前往宝物箱子界面进行十抽") end},{"十抽全饰", function() SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['三满']).."]") string.toMusic("冰霖已为您开启十抽全饰请前往宝物箱子界面进行十抽") end},{"十抽半饰", function() SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['半满']).."]") string.toMusic("冰霖已为您开启十抽半饰请前往宝物箱子界面进行十抽") end},{"十抽保存", function() SO_PT(SO['十抽'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['十抽'] ,SO['宝物备份']).."]") string.toMusic("冰霖已为您开启十抽宝物备份请前往宝物箱子界面进行十抽") end }, {"宝物直接升级", function() SO_PT(SO['升级材料'], 4, "00008052r")--材料 SO_PT(SO['升级金币'], 4, "00008052r")--金币 string.toMusic("冰霖已为您开启宝物直接升级请前往宝物界面进行升级") end } }), }), changan.check({ {"炫跑卡", function() local OP = gg.prompt({'请输入想要获取炫跑卡等级\n无法保存'},{"1"},{"text"}) SO_PT(SO['炫跑卡'] ,4,"~A8 MOV W0, #"..OP[1]) toMusic("已为您开启炫跑卡请前往主页查看") end, function() end}, {"金币", function() local OP = gg.prompt({'请输入修改的cpp金币'},{"15000"},{"text"}) SO_PT(SO['金币'] ,4,"~A8 MOV W0, #"..OP[1]) toMusic("已为您开启修改金币获取请前往主页查看") end}, {"钥匙", function() local OP = gg.prompt({'请输入修改的cpp钥匙'},{"150"},{"text"}) SO_PT(SO['钥匙'] ,4,"~A8 MOV W0, #"..OP[1]) toMusic("已为您开启修改钥匙获取请前往主页查看") end}, {"人物直购", function() SO_PT(SO['人物购买按钮'] ,4, "~A8 B [PC,#"..SOGSPY_ST(SO['人物购买按钮'] ,SO['人物购买成功'] ).."]") end}, {"滑板直购", function() SO_PT(SO['滑板购买按钮'] ,4, "~A8 B [PC,#"..SOGSPY_ST(SO['滑板购买按钮'] ,SO['人物购买成功'] ).."]") end}, }), }, { changan.box({"道具赛", changan.switch("时间检测" , function() SO['速度检测1'] = 0x22d99c0 SO['速度检测2'] = 0x346120c SO['速度检测3'] = 0x3469808 SO['速度检测4'] = 0x25f0734 SO['速度检测5'] = 0x2c7c094 SO_PT(SO['速度检测1'],4,"~A8 MOV W0, WZR")--滑板速度检测 SO_PT(SO['速度检测2'],4,"~A8 MOV W0, WZR")--滑板速度检测 SO_PT(SO['速度检测3'],4,"~A8 MOV W0, WZR")--滑板速度检测 SO_PT(SO['速度检测4'],4,"~A8 MOV W0, WZR")--滑板速度检测 SO_PT(SO['速度检测5'],4,"~A8 MOV W0, WZR")--滑板速度检测 SO_PT(SO['新时刻'],4,"~A8 MOV W0, #1")--新时刻 SO_PT(SO['最佳时间'],4,"~A8 MOV W0, #1")--最佳时间 SO_PT(SO['作弊时间'],4,"~A8 MOV W0, WZR")--作弊时间 SO_PT(SO['防举报1'],4,"~A8 MOV W0, WZR")--防举报1 SO_PT(SO['防举报2'],4,"~A8 MOV W0, WZR")--防举报2 SO_PT(SO['防举报3'],4,"~A8 MOV W0, WZR")--防举报3 SO_PT(SO['防举报4'],4,"~A8 MOV W0, WZR")--防举报4 SO_PT(SO['屏蔽时间检10'],4,"~A8 MOV W0, #1")--屏蔽时间检测1 SO_PT(SO['屏蔽时间检9'],4,"~A8 MOV W0, #1")--屏蔽时间检测2 SO_PT(SO['一分40秒2'],4,"~A8 MOV W0, #1")--屏蔽时间检测3 SO_PT(SO['一分40秒6'],4,"~A8 MOV W0, #1")--屏蔽时间检测4 SO_PT(SO['防封号1'], 4, "~A8 MOV X0, XZR") SO_PT(SO['防封号2'], 4, "~A8 MOV X0, XZR") SO_PT(SO['防封号3'], 4, "~A8 MOV X0, XZR") SO_PT(SO['防封号4'], 4, "~A8 MOV X0, XZR") SO_PT(SO['防封号5'], 4, "~A8 MOV X0, XZR") string.toMusic("时间检测开启成功") gg.toast('️开启成功') end), changan.switch("过滤10秒", function() SO_PT( 0x2a2cebc,4, "~A8 MOV W0, #1") gg.alert('过滤10秒开启成功') end, function() end), changan.switch("半自动上分" , function() function SO_PT(FUNCTIONADD, TYPE, VALUE) local SOMOD = gg.getRangesList("il2cpp.so") if SOMOD[2] == nil then gg.alert("开启失败\n━━━━━━━━━━━━━━━\n错误原因:未找到相关内存\n解决方法:请重新选择游戏进程\n━━━━━━━━━━━━━━━") else gg.setValues({ { address = SOMOD[2].start + FUNCTIONADD, flags = TYPE, value = VALUE } }) gg.setValues({ { address = SOMOD[2].start + FUNCTIONADD + 4, flags = TYPE, value = "~A8 RET" } }) gg.setValues({ { address = SOMOD[2].start + FUNCTIONADD + 8, flags = 16, value = "1740" } }) end end SO_PT(SO['微加速'],4,"~A8 LDR S0, [PC,#0x8]")--微加速 SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1","~A8 RET") SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR","~A8 RET") SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1") string.toMusic('开启成功') end), changan.switch("匹配人机", function() SO['竞赛模式1'] = 0x3055584 SO['匹配机制2'] = 0x25cd700 SO['匹配机制3'] = 0x280faac SO_PT(SO['匹配机制3'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['匹配机制3'] ,SO['竞赛模式1']).."]") SO_PT(SO['匹配机制2'] ,4,"~A8 MOV W0, #1","~A8 RET") gg.alert("匹配人机开启成功") string.toMusic("匹配人机开启成功") end), changan.button("修改文字", function() gg.clearResults() gg.setRanges(32) a = gg.prompt({"请输入更改前的文字","请输入更改后的文字"},{[1]="别跑!",[2]="人机!"},{"text","text"}) if not a then return end if a[1] == "" then return end if a[2] == "" then return end gg.searchNumber(";"..a[1], gg.TYPE_WORD, false, gg.SIGN_EQUAL, 0, -1, 0) if gg.getResultsCount() == 0 then gg.alert('搜索失败') return end gg.getResults(99999) gg.editAll(";"..a[2], gg.TYPE_WORD) gg.toast("开启成功") end), changan.switch("调出观战" , function() SO_PT(SO['赛事'] ,4,"~A8 MOV W0, #1") string.toMusic("调出观战开启成功请前往道具赛首页查看") end), changan.switch("弹射起步", function() -- 通用函数:根据模块名和状态取基址 function _lib(libs, state) local lib = gg.getRangesList(libs) for _, v in ipairs(lib) do if v.state == state then return v.start end end return nil end -- 1. 先拿到 il2cpp 基址 local base = _lib('il2cpp', 'Xa') if not base then print('找不到 il2cpp,脚本结束') os.exit() end -- local addr1 = base + SO['弹射起步'] gg.setValues({ -- 第 1 组 {address = addr1, flags = 4, value = '~A8 LDR S0, [PC,#0x8]'}, {address = addr1 + 4, flags = 4, value = '~A8 RET'}, {address = addr1 + 8, flags = 16, value = 9999}, -- 第 2 组 }) SO_PT(SO['攻击拾取'], 4, "~A8 RET") gg.alert("开启成功") string.toMusic("开启成功") end), changan.switch("踢人" , function() local so = gg.getRangesList("libil2cpp.so")[2].start local py = 0x319468C local set = { {address = so + 0x276878c, flags = 4, value = "~A8 B [PC,#0xF1740]"}, } gg.setValues(set) gg.addListItems(set) gg.alert("踢人开启成功") string.toMusic("踢人开启成功") end), changan.switch("无限滑板[搭配时间]" , function() function _lib(libs, state) local lib = gg.getRangesList(libs) for seed in ipairs(lib) do if lib[seed].state == state then return lib[seed].start end end end function zhix() local il2cpp_start = _lib('il2cpp', 'Xa') local targetOffset = il2cpp_start +SO['点击'] local getClass = il2cpp_start +SO['结尾'] local destinationOffset = il2cpp_start +SO['状态'] local ReleaseEnergyOffset = il2cpp_start +SO['释放能量'] local CollectPropOffset = il2cpp_start +SO['攻击拾取'] local register = { [0] = {0xB8, 32, 0}; [1] = {0x208, 4, 5}; [2] = {0x20C, 16, 80}; [3] = {0x210, 4, 0}; [4] = {0x214, 4, 1}; [5] = {0x218, 32, destinationOffset}; } local mmap = gg.allocatePage(1 | 2 | 4) + 8 local table_correct = { { address = mmap + ( #register + 1) * 4, flags = 4, value = '~A8 BR X5' }, {address = ReleaseEnergyOffset, flags = 4, value = '~A8 MOV W0, #1'}, {address = ReleaseEnergyOffset + 4, flags = 4, value = '~A8 RET'}, {address = CollectPropOffset, flags = 4, value = '~A8 RET'}, {address = targetOffset, flags = 4, value = '~A8 LDR X1, [PC,#0x8]'}, {address = targetOffset + 4, flags = 4, value = '~A8 BR X1'}, {address = targetOffset + 8, flags = 32, value = mmap}, {address = getClass, flags = 4, value = '~A8 LDR X2, [PC,#0x8]'}, {address = getClass + 4, flags = 4, value = '~A8 BR X2'}, { address = getClass + 8, flags = 32, value = (mmap - 8) }, { address = (mmap - 8), flags = 4, value = '~A8 STR X0, [X2,#0xC0]' }, { address = (mmap - 4), flags = 4, value = '~A8 RET' }, } for search = 0,#register do table_correct[ #table_correct + 1], table_correct[ #table_correct + 2] = { address = mmap + search * 4, flags = 4, value = '~A8 LDR X' .. search .. ', [PC,#' .. string.format('0x%X', register[search][1]) .. ']' }, { address = mmap + (search * 4) + register[search][1], flags = register[search][2], value = register[search][3] } end return gg.setValues(table_correct) end zhix() string.toMusic("无限滑板开启成功") end), changan.switch("反弹道具" , function() SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1") SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR") string.toMusic("反弹道具开启成功") end, function() SO_PT(SO['反弹道具2'] ,4,"~A8 MOV W0, WZR") SO_PT(SO['反弹道具1'] ,4,"~A8 MOV W0, #1") string.toMusic("反弹道具关闭成功") end), changan.switch("能量倍增", function() gg.alert("安全功能") SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]") SO_PT(SO['下滑'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑'] ,SO['获取能量2']).."]") string.toMusic("能量倍增开启成功") gg.alert("能量倍增开启成功") end, function() end), changan.switch("Buff聚能", function() SO_PT(SO['Buff模式'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['Buff模式'] ,SO['获取能量2']).."]") SO_PT(SO['跳跃'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['跳跃'] ,SO['获取能量2']).."]") SO_PT(SO['下滑'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑'] ,SO['获取能量2']).."]") SO_PT(SO['下滑左'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑左'] ,SO['获取能量2']).."]") SO_PT(SO['下滑右'] ,4,"~A8 B [PC,#"..SOGSPY_ST(SO['下滑右'] ,SO['获取能量2']).."]") string.toMusic('buff聚能跳跃下滑左右开启成功') end, function() end), changan.switch("无视道具", function() SO_PT(SO['无视道具1'] ,4,"~A8 MOV W0, #1") SO_PT(SO['无视道具2'] ,4,"~A8 MOV W0, #1") gg.alert('开启成功') end, function() end), changan.switch("无视障碍", function () SO_PT(SO['无视障碍'],4,"~A8 MOV W0, #1") SO_PT(SO['无视侧撞'] ,4,"~A8 MOV W0, #1") SO_PT(SO['减速带'],4,"~A8 MOV W0, WZR") string.toMusic("己为您开启无视障碍") end, function () end), changan.switch("滑板时间延长", function() local lib = gg.getRangesList() for _ in ipairs(lib) do if string.find(lib[_].name, 'libil2cpp.so') and lib[_].state == 'Xa' and lib[_].type == 'r-xp' then module = lib[_].start break end end hook = { StaticUpdater = SO['更新时刻'], } function HookCall(set) local action = module + set.hook local recover = gg.getValues({{address = action, flags = 4}})[1].value local function offset(a, b) if a >= b then return string.format("-0x%X", a - b) else return string.format("0x%X", b - a) end return 0 end local original = {} for a, r in pairs(set.method) do original[#original+1] = {address = action, flags = 4, value = "~A8 B [PC,#"..offset(action, module + r).."]"} end original[#original+1] = {address = action, flags = 4, value = recover} for I in ipairs(original) do gg.setValues({original[I]}) gg.sleep(math.random(4 * 7, 5 * 7)) end return true end returnValue{ SO['滑板时长'], 0x3BC, 14415.5, gg.allocatePage(gg.PROT_READ | gg.PROT_WRITE | gg.PROT_EXEC), } string.toMusic('开启成功') gg.alert("开启成功") end, function() end), changan.switch("滑板滑翔", function () SO_PT(SO['滑板滑翔'],4,"~A8 MOV W0, #1") string.toMusic("己为您开启滑板滑翔") end, function () end), changan.switch("滑板跳高", function () SO_PT(SO['滑板跳高'],4,"~A8 MOV W0, #1") string.toMusic("己为您开启滑板跳高") end, function () end), changan.switch("能量穿透" , function() SO_PT(SO['能量穿透'] ,4,"~A8 MOV W0, #1") gg.toast("能量穿透开启成功") gg.alert('能量穿透开启成功') end, function () SO_PT(SO['能量穿透'] ,4,"~A8 MOV W0, #1") gg.toast("能量穿透恢复成功") gg.alert('能量穿透恢复成功') end), changan.switch("滑板瞬移", function () SO_PT(SO['滑板瞬移'],4,"~A8 MOV W0, #1") string.toMusic('滑板瞬移开启成功') gg.toast("开启成功") end, function () end), changan.switch("开局道具", function() a = gg.prompt({'道具代码:\n1=恶魔 2=乌龟 3=颜料 4=能量10%[1;4]'},{[1]=2},{[1]='number'})[1] if not a then return end SO_PT(SO['开局道具'],4,"~A8 MOV W0, #"..a.."") gg.alert('开局道具修改成功') end, function() end), }), changan.box({"派对功能", changan.switch('平板视角',function() search(1.5,16,32) py1(33,16,0xC) py1(20,16,0x18) xg1(45,16,0x1C,true) gg.toMusic('平板视角开启成功') end, function() search(1.5,16,32) py1(33,16,0xC) py1(20,16,0x18) xg1(40,16,0x1C,true) end), changan.switch("无视道具" , function() SO_PT(SO['无视道具1'],4,"~A8 MOV X0, #1") SO_PT(SO['无视道具2'],4,"~A8 MOV X0, #1") string.toMusic("冰霖为您开启无视道具") end), changan.switch("无视障碍" , function() SO_PT(SO['无视障碍'] ,4,"~A8 MOV X0, #1") string.toMusic("冰霖为您开启无视障碍") end), }), changan.box({"分数赛",---box示例 可以删掉 changan.switch("下滑瞬移", function() qmnb = { {["memory"] = 32}, {["name"] = "下滑瞬移"}, {["value"] = -8388608, ["type"] = 4}, {["lv"] = -1082130432, ["offset"] = -16, ["type"] = 4}, {["lv"] = 2139095040, ["offset"] = -8, ["type"] = 4}, } qmxg = { {["value"] = 99999, ["offset"] = -64, ["type"] = 16}, } xqmnb(qmnb) gg.toast("冰霖已为您开启") end, function() qmnb = { {["memory"] = 32}, {["name"] = "恢复瞬移"}, {["value"] = -8388608, ["type"] = 4}, {["lv"] = -1082130432, ["offset"] = -16, ["type"] = 4}, {["lv"] = 2139095040, ["offset"] = -8, ["type"] = 4}, } qmxg = { {["value"] = 0, ["offset"] = -64, ["type"] = 16}, } xqmnb(qmnb) end), changan.switch("速度起飞", function () changan = gg.prompt({'请输入需要修改的倍数,建议改60'},{[1]=60},{[1]='number'})[1] local t = {"libunity.so:bss", "Cb"} local tt = {0x15508, 0xFC} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = changan, freeze = true}}) string.toMusic("冰霖已为您开启速度起飞") end, function () local t = {"libunity.so:bss", "Cb"} local tt = {0x15508, 0xFC} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 1, freeze = true}}) string.toMusic("速度起飞恢复成功") end), changan.switch("下滑穿透[爆分必开]", function () qmnb = { {["memory"] = 32}, {["name"] = "穿透"}, {["value"] = 4.5, ["type"] = 16}, {["lv"] = 5.5, ["offset"] = 16, ["type"] = 16}, } qmxg = { {["value"] = 9191, ["offset"] = 0, ["type"] = 16}, {["value"] = 9192, ["offset"] = 16, ["type"] = 16}, } xqmnb(qmnb) string.toMusic("冰霖已为您开启下滑穿透") end, function () qmnb = { {["memory"] = 32}, {["name"] = "恢复穿透"}, {["value"] = 9191.0, ["type"] = 16}, {["lv"] = 9192.0, ["offset"] = 16, ["type"] = 16}, } qmxg = { {["value"] = 4.5, ["offset"] = 0, ["type"] = 16}, {["value"] = 5.5, ["offset"] = 16, ["type"] = 16}, } xqmnb(qmnb) string.toMusic("冰霖已为您关闭下滑穿透") end), changan.switch("无尽装死", function() SO_PT(SO['无尽装死'],4,"~A8 MOV X0, #1") end), changan.switch("无限跳跃", function() SO_PT(SO['无限跳跃'],4,"~A8 MOV X0, #1") end), changan.switch("滑板飞翔", function() SO_PT(SO['滑板滑翔'],4,"~A8 MOV X0, #1") end, function() SO_PT(SO['滑板滑翔'],4,"~A8 MOV X0, #1") end), changan.switch("滑板跳高", function() SO_PT(SO['滑板跳高'],4,"~A8 MOV X0, #1") end, function() SO_PT(SO['滑板跳高'],4,"~A8 MOV X0, XZR") end), changan.switch("滑板瞬移", function() SO_PT(SO['滑板瞬移'],4,"~A8 MOV X0, #1") end, function() SO_PT(SO['滑板瞬移'],4,"~A8 MOV X0, XZR") end), changan.switch("撞墙撑杆", function() SO_PT(SO['无尽死亡'],4,"~A B -0x0000062C") end), changan.switch('金币消失', function() SO_PT(SO['金币消失'],4,'~A8 MOV X0, XZR') end), changan.switch('平板视角',function() search(1.5,16,32) py1(33,16,0xC) py1(20,16,0x18) xg1(45,16,0x1C,true) gg.alert('平板视角开启成功') end, function() search(1.5,16,32) py1(33,16,0xC) py1(20,16,0x18) xg1(40,16,0x1C,true) end), }), },{ changan.box({"更多音乐", changan.switch("口水旋律Vol.59",--功能名字 不可重复 function() gg.playMusic("https://image.api.losfer.cn/view.php/0fabb2c200dddb91ae71b971e213868c.mp3") end, function() gg.toast("正在停止播放...") for i=1,100 do gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end gg.toast("播放已停止") gg.toast("无正在播放的音乐") end ), changan.switch("海誓山盟",--功能名字 不可重复 function() gg.playMusic("https://image.api.losfer.cn/view.php/0ead07ab110ce719d4a005dcf292f773.mp3") end, function() gg.toast("正在停止播放...") for i=1,100 do gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end gg.toast("播放已停止") gg.toast("无正在播放的音乐") end ), changan.switch("有本事把我踩在脚下",--功能名字 不可重复 function() gg.playMusic("https://image.api.losfer.cn/view.php/fb19e90cc929121868fd3b5fc28d72bd.mp3") end, function() gg.toast("正在停止播放...") for i=1,100 do gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end gg.toast("播放已停止") gg.toast("无正在播放的音乐") end ), changan.switch("口水旋律Vol.77",--功能名字 不可重复 function() gg.playMusic("https://image.api.losfer.cn/view.php/c0a1bd274ca79f737a381c38cccc676a.mp3") end, function() gg.toast("正在停止播放...") for i=1,100 do gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end gg.toast("播放已停止") gg.toast("无正在播放的音乐") end ), changan.switch("脚踩魔怔b", function() gg.playMusic("http://music.163.com/song/media/outer/url?id=2027640152") end, function() gg.toast("正在停止播放...") for i=1,100 do gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end gg.toast("播放已停止") gg.toast("无正在播放的音乐") end ), }), changan.button("音乐搜索", function() WTYY() end), wyylog, changan.button("停止音乐", function() gg.toMusic("stop") end, 0xFFFF0000), },{ changan.text("🐧总群:458496965", "#161616", "18sp"), changan.button("加入官方群", function() gg.QQgroup("458496965") end), changan.switch("音量键隐藏UI", function () 音量键 = true end, function () 音量键 = false end ), changan.switch("摇一摇隐藏UI", function () 摇一摇 = true end, function () 摇一摇 = false end ), changan.button("退出UI", 退出) } })