invoke(swib1,swib2) gg.setVisible(false) for i=1,#stab do _ENV["jm"..i .."t"]:setTextColor(0xFFFFFFFF) _ENV["jm"..i .."t"]:setBackground(slctb[i]) end _ENV["jm1t"]:setTextColor(0xffffffff) _ENV["jm1t"]:setBackground(slcta[1]) -- _ENV["jm1text"]:setTextColor(控件颜色) luajava.getIdView("backv"):setColorFilter(控件颜色) luajava.getIdView("suov"):setColorFilter(控件颜色) --luajava.getIdView("tosearch"):setHintTextColor(控件颜色) 隐藏() setOnExitListener(function() tuichu=1 luajava.setFloatingWindowHide(false) luajava.post(function() window:removeView(floatWindow) end) luajava.setFloatingWindowHide(false) end) luajava.setFloatingWindowHide(true) qhkai = 0 qiehuan = function() if qhkai == 0 then qhkai = 1 draw.remove() luajava.runUiThread(function() changan.controlSmall(floatWindow,400) end) gg.sleep(400) luajava.runUiThread(function() floatWindow:setVisibility(View.GONE) end) else qhkai = 0 huiz() luajava.runUiThread(function() floatWindow:setVisibility(View.VISIBLE) end) luajava.runUiThread(function() changan.controlBig(floatWindow,400) end) end end if loadingBox~=nil then loadingBox['关闭']() end huiz() already=true while true do if tuichu==1 then break end if 音量键 then jianting3(qiehuan) end gg.sleep(300) end end function 滚(x) luajava.runUiThread(function() local cbsc=luajava.getIdView("cbscro") local targetLeft = _ENV["jm"..x]:getTop()/2 cbsc:smoothScrollTo(0,targetLeft); end) end function 切换(x) 窗口=false luajava.runUiThread(function() local searchUI = luajava.getIdView("tosearch") 当前ui=x ViewPager:setCurrentItem(x-1) end) end 显示=0 function 隐藏() if 显2==true then return 0 end luajava.runUiThread(function() if 显示 == 0 then control2:setVisibility(View.GONE) sf:setVisibility(View.VISIBLE) 显示 = 1 if 窗口 then luajava.getIdView("extra"):setVisibility(View.VISIBLE) else chuangk:setVisibility(View.VISIBLE) end YoYoImpl:with("ZoomInRight"):duration(600):playOn(floatWindow) floatWindow:setBackground(beij) mainLayoutParams.height = mubx mainLayoutParams.width = muby mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL window : updateViewLayout (floatWindow , mainLayoutParams) else sf:setVisibility(View.GONE) if tuichuing then return 0 end tuichuing=true luajava.newThread(function() luajava.runUiThread(function() YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow) --YoYoImpl:with("ZoomInLeft"):duration(600):playOn(floatWindow) end) gg.sleep(300) luajava.runUiThread(function() chuangk:setVisibility(View.GONE) floatWindow:setBackground(beij2) YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow) YoYoImpl:with("ZoomInLeft"):duration(300):playOn(floatWindow) luajava.getIdView("extra"):setVisibility(View.GONE) mainLayoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度 mainLayoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度 control2:setVisibility(View.VISIBLE) 显示 = 0 mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE window : updateViewLayout (floatWindow , mainLayoutParams) end) tuichuing=false end):start() end end) end function 打开窗口(x) if ewsv[x]==nil then gg.alert("没有窗口“"..x.."”\n请检查是否写错了名字或者没创建") return 0 end luajava.runUiThread(function() 窗口=true --changan.controlBigX(floatWindow,600)--横向 --AN.controlBigX1(floatWindow,400)竖向 YoYoImpl:with("FadeIn"):duration(600):playOn(floatWindow) chuangk:setVisibility(View.GONE) luajava.getIdView("extra"):setVisibility(View.VISIBLE) for k,v in pairs(ewsv) do if k~=x then v:setVisibility(View.GONE) end end luajava.getIdView("extrat"):setText(x) ewsv[x]:setVisibility(View.VISIBLE) end) end function 关闭窗口() luajava.getIdView("extra"):setVisibility(View.GONE) chuangk:setVisibility(View.VISIBLE) 窗口=false vibra:vibrate(10) end ewsv={} function 创建窗口(name,v) if type(v)~="table" then gg.alert("窗口"..name.."格式错误") end local t={ LinearLayout, orientation="vertical", visibility="gone", layout_width="match_parent", } for i = 1,#v do if type(v[i]) == "userdata" then t[#t+1]=v[i] else t[#t+1]=v[i]["view"] end end ewsv[name]=luajava.loadlayout(t) end function getShape3() jianbians = luajava.loadlayout({ GradientDrawable, type = "linear", angle = "135", }) jianbians:setCornerRadius(22) jianbians:setOrientation(GradientDrawable.Orientation.TL_BR) jianbians:setColors({ 0x55ffffff,0x55ffffff }) jianbians:setStroke(5,0xffffffff)--边框宽度和颜色 return jianbians end switches = {} function 开关3(name,func1,func2,nid) local sname = nid local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then local outfunc=function() namers = _ENV[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."k"):setVisibility(View.GONE) YoYoImpl:with("ZoomInLeft"):duration(600):playOn(switches["2s"..sname]) luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setChecked(true) luajava.getIdValue(nid):setBackground(checkbg) end) _ENV[name] = "开" pcall(func1) else vibra:vibrate(9) luajava.runUiThread(function() --luajava.getIdValue(nid.."g"):setVisibility(View.GONE) --YoYoImpl:with("ZoomInRight"):duration(600):playOn(switches["1s"..sname]) --luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE) luajava.getIdValue(nid):setChecked(false) --luajava.getIdValue(nid):setBackground(checkbga) end) _ENV[name] = "关" pcall(func2) end end if localname=="摇一摇隐藏UI" then yyfunc=outfunc end if localname=="音量键隐藏UI" then ylfunc=outfunc end return outfunc end end function getTimeStamp(t) local str = os.date("%Y/%m/%d %H:%M:%S",t) return str end function getShape(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(7,tmp3)--边框宽度和颜色 return jianbians end function getShape2(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors(tmp1) jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT) jianbians:setStroke(24,tmp3)--边框宽度和颜色 return jianbians end function changan.m3switch(name,func1,func2) rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_height = "47dp", gravity = "center", { LinearLayout, layout_width = 'fill_parent', layout_height = "40dp", gravity = "center", elevation = "2dp", layout_marginRight = "15dp", layout_marginLeft = "15dp", background = getButtonBG(), padding = {"0dp","0dp","6dp","0dp"}, { TextView, Typeface=font, gravity = "top", text = name, textColor = "#FFFFFFFF", textSize = "13sp", layout_weight = 1, layout_width = 'fill_parent', layout_marginLeft = "10dp", layout_marginRight = "20dp", }, { MaterialSwitch, layout_weight = 1, layout_width = 'match_parent', layout_height = 'wrap_content', onCheckedChange = function(compoundButton, isChecked) luajava.newThread(function() if isChecked then pcall(func1) else pcall(func2) end end):start() end } } }) return rest end function changan.switch(name,func1,func2,miaoshu) if not checkbg then checkbg = getShape2( 45, { 0xA5A5A5,0xFFFFFFFF }, 4,0xFFFFFFFF) checkbga = getShape2( 45, { 0xffE3E3E3,0xffE3E3E3 }, 4,0xFFFFFFFF) switchbg1 = getShape( 45, { 0xffffffff,0xffffffff }, 4,0xffffffff) switchbg2 = luajava.loadlayout { GradientDrawable , color = "#ffffff" , cornerRadius = 360 } end local nid = name..guid() local func = 开关3(name,func1,func2,nid) if not name then name = "未设置" end local rest = luajava.loadlayout({ LinearLayout, elevation = "5dp", layout_width = 'fill_parent', layout_height = "48dp", gravity = "center_vertical", { LinearLayout, layout_width = 'fill_parent', layout_height = "40dp", gravity = "center_vertical", id = luajava.newId(nid.."bg"), background = getButtonBG(),padding = { "0dp","0dp","6dp","0dp" }, elevation="2dp", layout_marginLeft = "5dp", layout_marginRight = "5dp", { TextView, Typeface=font, gravity = "top", text = name, id=luajava.newId(nid.."txt"), textColor = "#FFFFFFFF", textSize = "13sp", layout_weight = 1, layout_width = '80dp', layout_marginLeft = "10dp", layout_marginRight = "20dp", }, { TextView, Typeface=font, gravity = "center", layout_height = "match_parent", text = miaoshu, textSize = "11sp", layout_width = "wrap_content", layout_marginLeft = "-50dp", layout_weight = 1, textColor = "#FFFFFFFF", }, { MaterialSwitch, id=luajava.newId(nid), elevation = "1dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'wrap_content', layout_height = 'wrap_content', gravity = "left", padding="4dp", }} }) return {["view"] = rest, ["name"] = name, ["func1"] = func1, ["func2"] = func2, ["type"] = "开关", } end switchs={} isLocked=false inlock=getRes("heisuo") uiunlock=getRes("heis") function uiLock() vibra:vibrate(15) if isLocked==false then isLocked=true luajava.newThread(function() gg.toast("UI缩放已锁定") end):start() lockui:setImageDrawable(inlock) else isLocked=false luajava.newThread(function() gg.toast("UI缩放已解锁") end):start() lockui:setImageDrawable(uiunlock) end end suofang = function(v, event) if isLocked then hanshu(v,event) return 0 end local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then--0xFF141118,0xFF141118 黑色 luajava.getIdValue("ckbg"):setBackground(newbg({0xFF141118,0xFF141118},6,控件颜色,0,0,35,35)) isMove = false RawX = event:getRawX() RawY = event:getRawY() hx = mainLayoutParams.height hy = mainLayoutParams.width if hx == 0 or hx==-2 then hx = 810 hy = 1150 end elseif Action == MotionEvent.ACTION_UP then luajava.getIdValue("ckbg"):setBackground(newbg({0xFF141118,0xFF141118},0,0xffffffff,0,0,35,35)) elseif Action == MotionEvent.ACTION_MOVE then isMove = true mubx = tonumber(hx) + (event:getRawY() - RawY) if mubx >= 250 and mubx <= 11100 then mainLayoutParams.height = mubx end muby = tonumber(hy) + (event:getRawX() - RawX) if muby >= 250 and muby <= 24500 then mainLayoutParams.width = muby end if muby<=250 and mubx<=250 then muby=250 mubx=250 --隐藏() return 0 end window:updateViewLayout(floatWindow, mainLayoutParams) end end ckbg=getVerticalBG({0xff3A3A3C,0xff3A3A3C},360) changan.controlRotation9 = function(control, time,t) luajava.runUiThread(function() import "android.view.animation.Animation" import "android.animation.ObjectAnimator" xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", { time,t }) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(400) xuanzhuandonghua:start() end) end function visi (tid , ttid) vibra:vibrate(4) local tview = luajava.getIdValue (tid) local ttview = luajava.getIdValue (ttid) if not tview then return 0 end if tonumber (tostring (tview : getVisibility ())) == 8.0 then tview : setVisibility (View.VISIBLE) YoYoImpl:with("FadeIn"):duration(200):playOn(boxes[tid]) changan.controlRotation9(boxpic[tid],0,90) boxpic[tid]:setColorFilter(控件颜色) else tview : setVisibility (View.GONE) changan.controlWater (_ENV [tid.."6"] , 200) changan.controlRotation9(boxpic[tid],90,0) boxpic[tid]:setColorFilter(nil) end end boxes = {} boxpic = {} function changan.box (views) local tid = "box"..guid () boxpic[tid] = luajava.loadlayout { ImageView , src = getRes("hei_right"), layout_width = "24dp" , layout_height = "24dp" , } local ttid = tid.."6" local t1id = guid () firadio = { LinearLayout , layout_width = 'fill_parent' , layout_height = "wrap_content" , layout_marginTop = "2dp" , layout_marginBottom = "2dp" , orientation = "vertical" , } if type (views [1]) == "string" or type (views [1]) == "number" then firadio [# firadio + 1] = { LinearLayout , layout_width = 'fill_parent' , layout_height = "40dp" , gravity = "center_vertical" , layout_marginTop = "2dp" , layout_marginBottom = "4dp" , onClick = function () YoYoImpl:with("Fadeln"):duration(400):playOn(boxes[tid]) LayoutTrasition=layoutTransition layoutTransition:setDuration(500) changan.controlWater(_ENV[t1id],400)-- Box音效 changan.controlBigX1(_ENV[t1id],600) visi (tid , ttid) end , id=luajava.newId(tid.."bg"), background = getButtonBG(), layout_marginLeft = "5dp", layout_marginRight = "5dp", elevation="2dp", { TextView , text = views [1] , Typeface=font, textSize = "13sp" , id=luajava.newId(tid.."txt"), layout_marginLeft = "15dp" , layout_width = "match_parent" , layout_weight=1, textColor = "#FFFFFFFF" , gravity = "left" , },{ 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 = "0dp" , layout_marginRight = "0dp" , orientation = "vertical" , visibility = "gone" , id = luajava.newId (tid) , padding = "0dp" , layout_width = 'fill_parent' , } local vs={} for i = 2,#views do if type(views[i]) == "userdata" then radios[#radios+1] = views[i] else radios[#radios+1] = views[i].view vs[#vs+1]=views[i] end end boxes[tid] = luajava.loadlayout(radios) firadio [# firadio + 1] = boxes[tid] _ENV [t1id] = luajava.loadlayout (firadio) return {["view"] = _ENV[t1id], ["name"] = views[1], ["type"] = "BOX", ["vs"]=vs } end buts={} heir=getRes("heir") function changan.button(txt,func,txtc) if not txt then txt = "未设置" end if not txtc then txtc="#FFFFFFFF" end local tid="Cbutton"..guid() buts[tid]=luajava.loadlayout( { LinearLayout, layout_width = 'match_parent', layout_height = "wrap_content", { LinearLayout, layout_width = "fill_parent", gravity = "center_vertical", layout_marginTop = "5dp", layout_marginBottom = "5dp", background = getButtonBG(), elevation="2dp", layout_marginLeft = "5dp", layout_marginRight = "5dp", id = luajava.newId(tid.."bg"), padding="10dp", onClick = function() changan.controlWater(buts[tid],400) vibra:vibrate(10) luajava.newThread(func):start() end, { TextView, Typeface=font, --id = luajava.newId(tid), textColor = txtc, text = txt, id = luajava.newId(tid.."txt"), textSize = "13sp", layout_height = "wrap_content", layout_width = "fill_parent", layout_weight=1, },{ImageView, src=heir, layout_height="14dp", layout_width="14dp", } }}) return {["view"]= buts[tid], ["name"] = txt, ["func"] = func, ["type"] = "按钮", } end function getButtonBG() local jianbians = luajava.loadlayout({ GradientDrawable, color = 0xFFFFFFFF, gradientType = GradientDrawable.LINEAR_GRADIENT, orientation = GradientDrawable.Orientation.TOP_BOTTOM , }) jianbians:setColors({0xFF1D1B20,0xFF1D1B20}) jianbians:setStroke(0,0xffffffff)--边框宽度和颜色 jianbians:setCornerRadii({20,20,20,20,20,20,20,20}) return jianbians end radiog={} function changan.radio (cklist) if not radoff then radon=getVerticalBG({0xffffffff,0xffffffff},360,20,控件颜色) radoff=getVerticalBG({0x00ffffff,0x00ffffff},360,8,0xFFFFFFFF) --radon=getRes("heiraon") --radoff=getRes("heiraoff") end local rid=guid() local vs={} radiog[rid]={} rest = { LinearLayout , layout_width = 'match_parent' , layout_height = "wrap_content" , layout_marginTop = "10dp" , gravity = "top" , orientation = "vertical" , } if type (cklist [1]) == "string" then rds=2 rest [# rest + 1] = { TextView , Typeface=font, gravity = "left" , padding="5dp", text = cklist [1] , textSize = "13sp" , textColor = "#FFFFFFFF" , layout_width = 'fill_parent' , layout_height = 'wrap_content' , layout_marginLeft = "10dp" , layout_marginRight = "5dp" , layout_marginTop = "0dp" , layout_marginBottom = "0dp" , } else rds=1 end local restt={ LinearLayout , layout_width = 'match_parent' , layout_height = "wrap_content" , id=luajava.newId (rid.."radiobg") , gravity = "top" , orientation = "vertical" , background=getButtonBG(), elevation="3dp", layout_marginLeft = "5dp", layout_marginRight = "5dp", layout_marginTop = "15dp", layout_marginBottom = "3dp", padding={"0dp","14dp","0dp","10dp"}, } for i = rds , # cklist do local name = cklist [i] [1] local func = cklist [i] [2] if not name then name = "未设置" end nid = name..guid () radiog[rid][nid]=false local func = radin(rid,nid,func) local tid = nid..guid () _ENV [tid] = luajava.loadlayout ( { LinearLayout , layout_width = '250dp' , layout_height = "30dp" , layout_marginTop = "5dp" , layout_marginBottom = "15dp" , layout_marginLeft = "4dp" , layout_marginRight = "10dp" , gravity = "center_vertical" , onClick = function () changan.controlWater (_ENV [tid] , 400) func() end , { ImageView , id = luajava.newId (nid) , layout_width = '20dp' , layout_height = "20dp" , layout_marginLeft = "5dp" , layout_marginRight = "0dp" , background =radoff , } , { TextView , Typeface=font, gravity = "top" , id = luajava.newId (nid.."radiotxt") , text = name , textSize="13sp", textColor = "#FFFFFFFF" , layout_width = 'wrap_content' , layout_height = 'wrap_content' , layout_marginLeft = "10dp" , layout_marginRight = "5dp" , } }) restt [# restt + 1] = _ENV [tid] vs[#vs+1]={ view=_ENV[tid], name=name, func=func, type='单选选项' } end rest [# rest + 1] = restt return {["view"]= luajava.loadlayout (rest), ["name"] = "单选", ["type"] = "radio", ["vs"] = vs } end function radin(rid,nid,func) return function() for k,v in pairs(radiog[rid]) do luajava.getIdValue(k):setBackground(radoff) if k==nid and v~=true then luajava.getIdValue(k):setBackground(radon) v=true luajava.newThread(func):start() end end end end 当前ui=1 checkbg1 = getRes("quarkcheckoff") checkbg2 = getRes("quarkcheckon") switchs={} function changan.intcheck(name,func1,func2) nid = name..guid() local func = 开关5(name,func1,func2,nid) if not name then name = "未设置" end switchs[nid] = { LinearLayout, layout_width = 'match_parent', layout_weight=1, layout_height = "42dp", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { MaterialCheckBox, id = luajava.newId(nid), onClick = function() luajava.newThread(function() func() end):start() end, --background = checkbg1, layout_width = '32dp', layout_height = '32dp', padding = "0dp", },{ TextView, Typeface=font, id=luajava.newId(nid.."t"), gravity = "left", text = name, textColor=0xffffffff, textSize = "14sp", --layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } return switchs[nid] end function 开关5(name,func1,func2,nid) local sname = nid local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid):setChecked(true) --luajava.getIdValue(nid.."t"):setTextColor(0xff232323) --changan.controlWater(switchs[nid],300) end) _ENV[name] = "开" pcall(func1) else vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid):setChecked(false) --luajava.getIdValue(nid.."t"):setTextColor(0xff232323) --changan.controlWater(switchs[nid],300) end) _ENV[name] = "关" pcall(func2) end end end end function changan.check(cklist) if #cklist==0 then return nil end local rest = { LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", 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 luajava.loadlayout(rest) end spics={ } for i=1,55 do spics[i]="opo"..i end switchs={} tcheck=10 function changan.intcard(name,name2,func1,func2) if tcheck==56 then tcheck=1 else tcheck=tcheck+1 end tocheck=spics[tcheck] gid = name..guid() local func = 开关6(name,name2,func1,func2,gid) if not name then name = "未设置" end if not name2 then name2="" end switchs[gid] = { LinearLayout, id = luajava.newId(gid), layout_width = 'match_parent', layout_weight=1, layout_height = "wrap_content", layout_marginTop="-3dp",--5 layout_marginBottom="5dp",--5 layout_marginLeft="3dp", layout_marginRight="3dp", { LinearLayout, padding="3dp",-- 3 onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "left", background=getButtonBG(), layout_marginLeft = "5dp",--5 layout_marginRight = "5dp",--5 layout_marginTop = "5dp",--5 layout_marginBottom = "5dp",--5 elevation="2dp",--2 id = luajava.newId(gid.."cardbg"), orientation="vertical", padding="5dp",--5 ---background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { ImageView, id = luajava.newId(gid.."p"), src = getRes(tocheck), gravity="left", layout_width = '30dp', layout_height = '30dp', padding = "3dp", },{ TextView, Typeface=font, id=luajava.newId(gid.."t"), gravity = "left", text = name, textColor="#d7d7d7", textSize = "12sp",--12 layout_width = 'match_parent', layout_weight=1, },{ TextView, Typeface=font, id=luajava.newId(gid.."t2"), gravity = "left", text = name2, textColor="#aaaaaa", textSize = "9sp",--9 layout_width = 'match_parent', layout_weight=1, } } } return switchs[gid] end function changan.card(cklist) if #cklist==0 then return nil end local rest = { LinearLayout, layout_width = 'fill_parent', layout_height = "wrap_content", 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 name2 = cklist[i + j][2] local func1 = cklist[i + j][3] local func2 = cklist[i + j][4] if not name then name = "未设置" end rstt = changan.intcard(name,name2,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 luajava.loadlayout(rest) end shous={} function 收起ck(gid,ii) if shous[gid] ==false then shous[gid]=true luajava.getIdView(gid.."p"):setRotation(0) for i=1,ii-1 do if i>=9 then luajava.post(function() luajava.getIdView(gid):removeView(luajava.getIdView(gid..i)) end) end end else shous[gid]=false luajava.post(function() luajava.getIdView(gid):removeView(luajava.getIdView(gid)) for i=1,ii-1 do if i>=9 then luajava.getIdView(gid):addView(luajava.getIdView(gid..i)) end end luajava.getIdView(gid):addView(luajava.getIdView(gid)) end) luajava.getIdView(gid.."p"):setRotation(180) end end opou=getRes("opou") function changan.checkbox(gid,ii) local func = function() 收起ck(gid,ii) end if not name then name = "未设置" end switchs[gid] = { LinearLayout, id=luajava.newId(gid), layout_width = '70dp', layout_height = "wrap_content", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = func, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_horizontal", orientation="vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { ImageView, id = luajava.newId(gid.."p"), src = opou, background=ckbg, gravity="center", layout_width = '30dp', layout_height = '30dp', padding = "8dp", },{ TextView, Typeface=font, id=luajava.newId(gid.."t"), gravity = "center", text = "展开", textColor="#d7d7d7", textSize = "9sp", --layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } return switchs[gid] end function 开关6(name,name2,func1,func2,nid) local sname = nid local localname=name name = name..guid() _ENV[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = _ENV[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(控件颜色) luajava.getIdValue(nid.."t2"):setTextColor(控件颜色) luajava.getIdValue(nid.."p"):setColorFilter(控件颜色) changan.controlWater(switchs[nid],500) end) _ENV[name] = "开" pcall(func1) else vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(0xffd7d7d7) luajava.getIdValue(nid.."p"):setColorFilter(0xffd7d7d7) luajava.getIdValue(nid.."t2"):setTextColor(0xffaaaaaa) changan.controlWater(switchs[nid],500) end) _ENV[name] = "关" pcall(func2) end end end end function changan.image(img,height,width,pad,func) if not func then func=function() end end if not pad then pad="0dp" end if not height then height="80dp" end if not width then width="80dp" end return luajava.loadlayout({ LinearLayout, layout_height="wrap_content", layout_width="fill_parent", gravity="center", { ImageView, layout_height=height, layout_width=width, padding=pad, src=获取图片(img), onClick=function() luajava.newThread(func):start() end, }}) end function changan.edit (name , hint) _ENV [name] = name..guid () nid = name..guid () if not hint then hint = name end rest = luajava.loadlayout ( { LinearLayout , layout_width = 'fill_parent' , layout_height = "wrap_content", { LinearLayout , layout_width = 'fill_parent' , layout_height = "wrap_content" , gravity = "center_vertical" , { TextInputEditText , background = getButtonBG(), elevation="2dp", layout_marginTop = "5dp" , layout_marginBottom = "5dp" , layout_marginLeft = "5dp", layout_marginRight = "5dp", gravity = "center" , hint = hint , textColor="#FFFFFFFF", textSize = "13sp", id=luajava.newId(_ENV [name]), layout_width = 'match_parent' , layout_height = "wrap_content" , } } }) luajava.getIdValue(_ENV [name]):setHintTextColor(0xFFCCC3DC) return {["view"] = rest, ["name"] = name, ["type"] = "输入框", } end function changan.getedit (name) edit = tostring (luajava.getIdValue (_ENV [name]) : getText ()) return edit end function changan.setedit (name , txt) txt = tostring (txt) luajava.runUiThread (function () luajava.getIdValue (_ENV [name]) : setText (txt) end ) end chazhi={} chajv={} function changan.seek(name,bian,smin,smax,nows) _ENV[bian] =nows local thum= getVerticalBG({0xffffffff,0xffffffff},5,5,控件颜色) thum:setSize(40, 40) smin=tonumber(smin) smax=tonumber(smax) chajv[bian]=smax-smin chazhi[bian]=1-smin if smin==nil then smin=1 smax=10 end truesmin=1 truesmax=truesmin+chajv[bian] if not nows then nows = smin tnows=(smin-nows) else tnows=(nows-smin)+1 end if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name..guid() rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", { LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", layout_marginTop = "5dp", layout_marginBottom = "5dp", gravity = "center_vertical", background = getButtonBG(), elevation="2dp", layout_marginLeft = "5dp", layout_marginRight = "5dp", id=luajava.newId(name.."seekbg"), { TextView, Typeface=font, padding={"5dp","10dp","0dp","10dp",}, gravity = "top", textColor="#FFFFFFFF", text = name..":"..nows, id = luajava.newId(names), layout_width = '100dp', --layout_marginLeft = "5dp", textSize='13sp', layout_marginRight = "0dp", }, { SeekBar, layout_width = 'fill_parent', layout_weight=1, id=luajava.newId(name.."seekbar"), min = truesmin, max = truesmax, progress=tnows, maxHeight="10dp", maxWidth="fill_parent", minHeight="10dp", minWidth="fill_parent", --paddingStart="0dp", --paddingEnd="0dp", progressDrawable={ getVerticalBG({控件颜色,控件颜色},45)}, thumb=thum, progressHeight="10dp", onSeekBarChange = { onProgressChanged = function(SeekBar, var2, var3) if not var3 then return end local resultvar=tonumber(string.sub(var2,0,-3))-chazhi[bian] luajava.runUiThread(function() luajava.getIdValue(names):setText(name..":".. resultvar) end) _ENV[bian] = resultvar end }} }}) return {["view"] = rest, ["name"] = name, ["type"] = "拉条", } end function changan.slider(name,bian,smin,smax,nows) _ENV[bian] =nows return luajava.loadlayout({ Slider, layout_width = 'match_parent', layout_height = 'wrap_content', value = smax, valueTo = smin, valueFrom = nows, --stepSize = 1, addOnChangeListener = function(slider, value, fromUser) -- 如果执行的功能不是修改器的函数,或者不带阻塞的,可以不用 window:threadWraper 包裹,性能更好(属于UI线程) -- 如果不是用户触发的,不处理 if not fromUser then return end Snackbar:make(slider, '拖动条进度 > '..value, Snackbar.LENGTH_SHORT) :show() end }) end function changan.seek2(name,bian,smin,smax,nows,size) _ENV[bian] =nows if _ENV[bian] == nil then _ENV[bian] = 1.0 end if size == nil then size = 1 end if not name then name = "未设置" end local names = name..guid() rest = luajava.loadlayout({ LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", { Slider, id=luajava.newId(name.."Slider"), layout_width = 'match_parent', layout_height = 'wrap_content', value = nows, valueTo = smax, valueFrom = smin, stepSize = size, addOnChangeListener = function(slider, value, fromUser) -- 如果执行的功能不是修改器的函数,或者不带阻塞的,可以不用 window:threadWraper 包裹,性能更好(属于UI线程) -- 如果不是用户触发的,不处理 if not fromUser then return end Snackbar:make(floatWindow, '拖动条进度 > '..value, Snackbar.LENGTH_SHORT):show() _ENV[bian] = value end }}) return {["view"] = rest, ["name"] = name, ["type"] = "拉条", } end --[[ function Cseek(name,bian,smin,smax,nows) _ENV[bian] =nows thum=getVerticalBG({0xffFFFFFF,0xffFFFFFF},4,10,0xFF684FA3) thum:setSize(40, 40) seekbg=getVerticalBG({0xFF684FA3,0xFF684FA3},38,2,0x77000000) smin=tonumber(smin) smax=tonumber(smax) chajv[bian]=smax-smin chazhi[bian]=1-smin if smin==nil then smin=1 smax=10 end truesmin=1 truesmax=truesmin+chajv[bian] if not nows then nows = smin tnows=(smin-nows) else tnows=(nows-smin)+1 end if _ENV[bian] == nil then _ENV[bian] = 1.0 end if not name then name = "未设置" end local names = name..guid() rest = luajava.loadlayout({ Slider, layout_width = 'match_parent', layout_height = 'wrap_content', -- gravity = "center_vertical", { Slider, layout_width = 'match_parent', layout_height = 'wrap_content', value = 100, valueTo = 1000, valueFrom = 1, stepSize = 1, --addOnChangeListener = window:threadWraper(function(slider, value, fromUser) -- 如果执行的功能不是修改器的函数 background = luajava.loadlayout({ GradientDrawable, color = 0xffFFFFFF, cornerRadius = 15 }), { LinearLayout, layout_width = 'fill_parent', layout_hight = "fill_parent", layout_gravity = "center", { TextView, layout_gravity = "center", textColor="0xFF684FA3", textSize="16sp", text = name..":"..nows, id = luajava.newId(names), layout_width = '90dp', layout_marginLeft = "10dp", layout_marginRight = "0dp", }, { SeekBar, layout_width = 'fill_parent', layout_hight = "10dp", layout_gravity = "center", layout_weight=1, id=luajava.newId(name.."seekbar"), min = truesmin, max = truesmax, progress=tnows, progressDrawable={seekbg}, thumb=thum, progressHeight="2dp", onSeekBarChange = { onProgressChanged = function(SeekBar, var2, var3) if not var3 then return end local resultvar=tonumber(string.sub(var2,0,-3))-chazhi[bian] luajava.runUiThread(function() luajava.getIdValue(names):setText(name..":".. resultvar) end) _ENV[bian] = resultvar end }} }}}) return {["view"] = rest, ["name"] = name, ["type"] = "拉条", } end --]] function changan.text(text,color,size,isjz) if not color then color="#0xFFFFFFFF" end if isjz then return luajava.loadlayout( { TextView, Typeface=font, text=text, textColor=color, textSize=size, gravity="center", layout_height="wrap_content", layout_width="match_parent", autoSizeTextType="uniform", }) else return luajava.loadlayout({ TextView, Typeface=font, text=text, textColor=color, textSize=size, layout_height="wrap_content", layout_width="match_parent", autoSizeTextType="uniform", }) end end function changan.alertDialog(title,text,control) local Tit = {LinearLayout, layout_height="wrap_content", layout_width="match_parent", orientation="vertical",} context = baseWindow:getContext() if control==nil then view={} else for i, v in ipairs(control) do Tit[#Tit+1] = v.view end view=Tit end local dialogBuilder = MaterialAlertDialogBuilder(context) :setTitle(title) :setMessage(text) :setView(luajava.loadlayout(view)) :setPositiveButton('确定') luajava.showAlert(dialogBuilder) end function getShape22(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ tmp1,tmp2 }) jianbians:setStroke(3,tmp3)--边框宽度和颜色 return jianbians end function getShape00(tmp0,tmp1,tmp2,tmp3) jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(tmp0) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({ tmp1,tmp2 }) return jianbians end if loadingBox~=nil then loadingBox['关闭']() end colorvs = {} kgs = {} function changan.group(cklist) local vs={} local gid = guid() local parentLayout = { LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", gravity = "center", orientation = "vertical", background=getVerticalBG({0xFF1D1B20,0xFF1D1B20},25), } for i = 1, #cklist,3 do local tempTable = {LinearLayout, id=luajava.newId(gid..'p'..i), layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "left", orientation="horizontal" } for j = 0, 2 do if cklist[i+j]~=nil then local name = cklist[i+j][1] or "未设置" local func1 = cklist[i+j][2] or nulfunc local func2 = cklist[i+j][3] or nulfunc local pic = cklist[i+j][4] local t=changan.intgroup(name, func1, func2, i+j, gid, pic) local rstt = t.view table.insert(vs,t) if i+j >= 9 then -- 当组件数量达到9个时,执行原逻辑 if #cklist > 9 then--大于9的整体情况 lastrstt=rstt if i+j==9 then--第九个 local rs = changan.groupbox(gid,'box') table.insert(tempTable, rs) table.insert(cklist,9,{nil,nil,nil,nil}) shous[gid]={false,{}} else --10以后的情况 --rstt.visibility='gone' tempTable.visibility='gone' table.insert(shous[gid][2],gid..'p'..i) table.insert(tempTable, lastrstt) end else table.insert(tempTable, rstt) end else --正常情况 table.insert(tempTable, rstt) end else table.insert(tempTable, {LinearLayout, layout_width = 'match_parent', layout_weight=1,}) end end table.insert(parentLayout,tempTable) end return { view = luajava.loadlayout(parentLayout), type = "BOX", vs = vs, name = "开关合集" } end opou=getRes("opou") function changan.groupbox(gid,ii) local func = function() 收起ck(gid,ii) end if not name then name = "未设置" end _ENV[gid..ii.."p"]=luajava.loadlayout{ ImageView, src = opou, id=luajava.newId(gid..ii.."p"), background=ckbg, gravity="center", layout_width = '30dp', layout_height = '30dp', padding = "8dp", } switchs[gid..ii] = { LinearLayout, id=luajava.newId(gid..ii), layout_width = 'match_parent', layout_weight=1, layout_height = "wrap_content", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = func, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_horizontal", orientation="vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), _ENV[gid..ii.."p"],{ TextView, Typeface=font, id=luajava.newId(gid..ii.."t"), gravity = "center", text = "展开", textColor="#d7d7d7", textSize = "9sp", --layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } colorvs[gid..ii.."p"]={false,"img"} colorvs[gid..ii.."t"]={gid..ii.."t",false,"txt"} return switchs[gid..ii] end function changan.intgroup(name,func1,func2,ii,gid,pic) if pic~=nil then tocheck=获取图片(pic) else if tcheck==56 then tcheck=1 else tcheck=tcheck+1 end tocheck=getRes(spics[tcheck]) end local func = 开关group(name,func1,func2,gid..ii) if not name then name = "未设置" end switchs[gid..ii] = { LinearLayout, id = luajava.newId(gid..ii), layout_width = "match_parent", layout_weight=1, layout_height = "wrap_content", layout_marginTop = "1dp", layout_marginBottom = "1dp", padding = "1dp", { LinearLayout, padding="3dp", onClick = function() luajava.newThread(function() func() end):start() end, layout_width = 'fill_parent', layout_height = "wrap_content", gravity = "center_horizontal", orientation="vertical", --background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71), { ImageView, id = luajava.newId(gid..ii.."p"), src=tocheck, gravity="center", layout_width = '30dp', layout_height = '30dp', padding = "2dp", },{ TextView, Typeface=font, id=luajava.newId(gid..ii.."t"), gravity = "center", text = name, textColor="#d7d7d7", textSize = "9sp", --layout_marginLeft="8dp", layout_width = 'match_parent', layout_weight=1, }, } } colorvs[gid..ii.."p"]={false,"img"} colorvs[gid..ii.."t"]={gid..ii.."t",false,"txt"} return {["view"] = switchs[gid..ii], ["name"] = name, ["func"] = func, ["type"] = "勾选", } end function 开关group(name,func1,func2,nid) local sname = nid local localname=name name = name kgs[name] = "关" if func1 == nil then func1 = "" end if func2 == nil then func2 = "" end if type(func1) == "function" then return function() namers = kgs[name] if namers ~= "开" then vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(控件颜色) luajava.getIdValue(nid.."p"):setColorFilter(控件颜色) colorvs[nid.."p"]={true,"img"} colorvs[nid.."t"]={true,"txt"} changan.controlWater(switchs[nid],500) end) kgs[name] = "开" pcall(func1) else vibra:vibrate(9) luajava.runUiThread(function() luajava.getIdValue(nid.."t"):setTextColor(0xffd7d7d7) luajava.getIdValue(nid.."p"):setColorFilter(0xffd7d7d7) colorvs[nid.."p"]={false,"img"} colorvs[nid.."t"]={false,"txt"} changan.controlWater(switchs[nid],500) end) kgs[name] = "关" pcall(func2) end end end end local nulfunc=function() end namelist = {} param1 = {} floattable = {} function 打开页面(name) if _ENV['fenye'..name]==nil then gg.alert(name..'页面未创建') return 0 end if floattable['fenye'..name]==1 then 关闭页面(name) return end floattable['fenye'..name]=1 window = context:getSystemService("window") -- 获取窗口管理器 local function invoke(name,func1,func2) local function invoke2() window:addView(_ENV['fenye'..name], param1[name]) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end invoke(name,func1,func2) end function 关闭页面(name) if _ENV['fenye'..name]==nil then gg.alert(name..'页面未创建') return 0 end if floattable['fenye'..name]==0 then return 0 end floattable['fenye'..name]=0 local function invoke2() window:removeView(_ENV['fenye'..name]) end local runnable = luajava.getRunnable(invoke2) local handler = luajava.getHandler() handler:post(runnable) end function 创建页面(name,vs) if type(vs)~='table' then gg.alert(name..'创建页面格式错误') os.exit() end local tmp={LinearLayout, layout_width='match_parent', orientation='vertical' } for i=1,#vs do table.insert(tmp,vs[i]) end param1[name] = getLayoutParams2() _ENV['fenye'..name] = luajava.loadlayout( { LinearLayout, layout_width = "wrap_content", layout_height = "wrap_content", orientation='vertical', gravity='center_horizontal', background=luajava.loadlayout({ GradientDrawable , color = "#aa161616" , cornerRadius = 15 } ), padding={'10dp','5dp','10dp','5dp'}, { TextView, text = name, textSize='14sp', gravity = "center", layout_width = "70dp", layout_height = "wrap_content", onClick=function() local vis=luajava.getIdView(name) if vis:getVisibility()==8.0 then vis:setVisibility(View.VISIBLE) else vis:setVisibility(View.GONE) end end, onTouch=function(v, event) local Action = event:getAction() if Action == MotionEvent.ACTION_DOWN then isMove = false RawX = event:getRawX() RawY = event:getRawY() x = param1[name].x y = param1[name].y elseif Action == MotionEvent.ACTION_MOVE then isMove = true param1[name].x = tonumber(x) + (event:getRawX() - RawX) param1[name].y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(_ENV['fenye'..name], param1[name]) end end, }, {ScrollView, visibility='gone', id=luajava.newId(name), layout_width='120dp', layout_height='250dp', tmp } }) if type(_ENV['fenye'..name])~='userdata' then gg.alert(name..'生成失败') os.exit() end end paramt = {} titletable = {} corb = true wyyget="http://120.24.160.246:3000/" function huoqu(txt) return table.json(gg.makeRequest(wyyget.."song/url/v1?id="..txt.."&level=standard").content) end function souyy(txt) return table.json(gg.makeRequest("http://music.163.com/api/search/get?s="..txt.."&type=1&offset=0&total=true&limit=10").content) end function develo(tabb) gg.alert(tostring(tabb)) end function develo2(tabb) gg.copyText(tostring(tabb)) end function tablekIn(tbl, key) if tbl == nil then return false end for k, v in pairs(tbl) do if k == key then return true end end return false end function getbg() jianbians = luajava.new(GradientDrawable) jianbians:setCornerRadius(15) jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbians:setColors({0xFFFFFFFF,0xFF000000}) jianbians:setStroke(4,"0xFFFFFFFF")--边框宽度和颜色 selector = luajava.getStateListDrawable() selector:addState({ android.R.attr.state_pressed }, luajava.loadlayout { GradientDrawable, color = "#88000000", cornerRadius = 12 }) -- 点击时候的背景 selector:addState({ -android.R.attr.state_pressed }, jianbians) -- 没点击的背景 return selector end function searchmusic() if not lasttm then lasttm = os.time() else if os.time() - lasttm <= 5 then gg.alert("请在" .. (5 - (os.time() - lasttm)) .. "秒冷却后搜索") return 0 end end if not wryt then else runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):removeView(wyr) end) handler = luajava.getHandler() handler:post(runnable) end mustxt = luajava.getIdView("搜索"):getText() if string.len(tostring(mustxt)) <= 2 or tostring(mustxt) == nil then gg.alert("至少输入2个字符") return 0 end mustxt = tostring(mustxt) luajava.runUiThread(function() luajava.getIdView("jzz"):setVisibility(View.VISIBLE) luajava.getIdView("stxt"):setVisibility(View.GONE) end) lasttm = os.time() mustable = souyy(mustxt) mustable = mustable.result.songs -- print(mustable) musnames = {} musids = {} musarts = {} musictable = {} for k, v in pairs(mustable) do musictable[#musictable + 1] = v end -- gg.alert(tostring(mustable)) -- gg.alert(tostring(musictable)) -- gg.copyText(tostring(mustable)) -- gg.alert(#musictable) wrfun = {} wryt = { LinearLayout, id = luajava.newId("搜索结果"), layout_marginTop = "5dp", layout_marginBottom = "5dp", orientation = "vertical" } for i = 1, #musictable do musid = musictable[i].id -- print('musid',musid) -- musid = musictable[i].album.id -- print('musid',musid) musids[#musids + 1] = musid musname = musictable[i].name if tablekIn(musictable[i], "transNames") ~= false then musname = musname .. "\n(" .. musictable[i].transNames[0] .. ")" end musnames[#musnames + 1] = musname musart = musictable[i].artists[0].name musarts[#musarts + 1] = musart wryt[#wryt + 1] = { LinearLayout, orientation = "vertical", layout_marginTop = "2dp", layout_marginBottom = "2dp", background = getbg(), id = luajava.newId("音" .. musid), onClick = function() thread = luajava.getThread(function() bofang(musname, musid) end) thread:start() end, { TextView, layout_marginTop = "5dp", textSize = "15sp", textColor = "#ffffff", layout_marginBottom = "0dp", text = musname, layout_hight = "10dp", layout_width = "228dp", gravity = "center" }, { TextView, layout_marginTop = "0dp", textColor = "#ffffff", textSize = "12sp", layout_marginBottom = "5dp", text = musart, layout_hight = "10dp", layout_width = "200dp", gravity = "center" } } -- gg.sleep(50) wryt[#wryt].onClick = function() -- (function() -- bofang(musnames[i] .. musarts[i], musids[i]) -- end):start() luajava.startThread(function() bofang(musnames[i] .. musarts[i], musids[i]) end) end end wyr = luajava.loadlayout(wryt) runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):addView(wyr) end) handler = luajava.getHandler() handler:post(runnable) luajava.runUiThread(function() luajava.getIdView("jzz"):setVisibility(View.GONE) luajava.getIdView("stxt"):setVisibility(View.VISIBLE) end) -- gg.alert(tostring(wrfun)) end function bofang(gqmz, gdmn) luajava.runUiThread(function() luajava.getIdView("搜索结果"):setVisibility(View.GONE) luajava.getIdView("加载"):setVisibility(View.VISIBLE) end) gg.playMusic("http://music.163.com/song/media/outer/url?id="..gdmn..".mp3" or huoqu(gdmn).data[0].url) -- gg.sleep(2000) luajava.runUiThread(function() luajava.getIdView("加载"):setVisibility(View.GONE) luajava.getIdView("搜索结果"):setVisibility(View.VISIBLE) end) end stxt = { TextView, text = "搜索", textColor="#ffffff", background=getbg(), layout_height="match_parent", visibility = "visible", gravity="center", layout_marginRight="10dp", id = luajava.newId("stxt"), layout_marginLeft = "3dp", textSize = "15sp", padding={"13.5dp","0dp","13.5dp","0dp"}, onClick = function() thread = luajava.getThread(function() searchmusic() end) thread:start() end } jzz = { TextView, text = "加载中", visibility = "gone", id = luajava.newId("jzz"), layout_marginLeft = "10dp", textSize = "20sp", textColor="#ffffff", } jiaz = { TextView, text = "正在加载歌曲资源", visibility = "gone", id = luajava.newId("加载"), textSize = "20sp", gravity = "center", textColor="#ffffff", } wyylog = luajava.loadlayout({ LinearLayout, orientation="vertical", layout_width = "match_parent", { ScrollView, layout_hight = "220dp", gravity="center_horizontal", layout_width = "match_parent", { LinearLayout, layout_width = "match_parent", {LinearLayout, padding="4dp", gravity="center", orientation="vertical", id=luajava.newId("固定音乐"), }, id = luajava.newId("搜索列表"), layout_hight = "300dp", orientation = "vertical", layout_width = "match_parent", gravity="center_horizontal", { LinearLayout, orientation = "horizontal", layout_width = "match_parent", padding={"10dp","0dp","10dp","0dp"}, { EditText, hint = "搜索歌曲名称", textColor="#ffffff", id = luajava.newId("搜索"), background = getbg(), focusableInTouch = "true", focusable = "true", selectAllOnFocus = "true", singleLine = "true", layout_weight=1, gravity="center", layout_width = "match_parent" }, stxt, jzz }, jiaz } } }) ---😁😁😁😁😁😁😁😁😁 function SearchWrite(A0_150, A1_151, A2_152) gg.clearResults() gg.setVisible(false) gg.searchNumber(A0_150[1][1], A2_152) gg.clearResults() if gg.getResultCount() > 0 then for _FORV_10_, _FORV_11_ in ipairs((gg.getResults((gg.getResultCount())))) do _FORV_11_.isUseful = true end for _FORV_10_ = 2, #A0_150 do for _FORV_17_, _FORV_18_ in ipairs((gg.getResults((gg.getResultCount())))) do ;({})[#{}].address = _FORV_18_.address + (A0_150[_FORV_10_][2] - A0_150[1][2]) ;({})[#{}].flags = _FORV_18_.flags end for _FORV_17_, _FORV_18_ in ipairs((gg.getValues({}))) do if tostring(_FORV_18_.value) ~= tostring(A0_150[_FORV_10_][1]) then gg.getResults((gg.getResultCount()))[_FORV_17_].isUseful = false end end end for _FORV_10_, _FORV_11_ in ipairs((gg.getResults((gg.getResultCount())))) do end if #{} > 0 then gg.toast("搜索到" .. #{} .. "条数据") for _FORV_12_ = 1, #{} do for _FORV_16_, _FORV_17_ in ipairs(A1_151) do offset = _FORV_17_[2] - A0_150[1][2] ;({})[#{}].address = ({})[_FORV_12_] + offset ;({})[#{}].flags = A2_152 ;({})[#{}].value = _FORV_17_[1] if _FORV_17_[3] == true then ;({})[#{}].freeze = true gg.addListItems({}) end end end gg.setValues({}) gg.toast("已修改" .. #{} .. "条数据") gg.addListItems({}) else gg.toast("not found", false) do return false end gg.toast("Not Found") return false end end end function split(A0_153, A1_154) local L2_155, L3_156, L4_157 L2_155 = 1 L3_156 = 1 L4_157 = {} while true do if not string.find(A0_153, A1_154, L2_155) then L4_157[L3_156] = string.sub(A0_153, L2_155, string.len(A0_153)) break end L4_157[L3_156] = string.sub(A0_153, L2_155, string.find(A0_153, A1_154, L2_155) - 1) L2_155 = string.find(A0_153, A1_154, L2_155) + string.len(A1_154) L3_156 = L3_156 + 1 end return L4_157 end function xgxc(A0_158, A1_159) local L2_160, L3_161, L4_162, L5_163 L2_160 = 1 L3_161 = #A1_159 for _FORV_5_ = 1, #A1_159 do xgpy = A0_158 + A1_159[_FORV_5_].offset xglx = A1_159[_FORV_5_].type xgsz = A1_159[_FORV_5_].value xgdj = A1_159[_FORV_5_].freeze if xgdj == nil or xgdj == "" then gg.setValues({ [1] = { address = xgpy, flags = xglx, value = xgsz } }) else gg.addListItems({ [1] = { address = xgpy, flags = xglx, freeze = xgdj, value = xgsz } }) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(A0_164) gg.clearResults() gg.setRanges(A0_164[1].memory) gg.searchNumber(A0_164[3].value, A0_164[3].type) if gg.getResultCount() == 0 then gg.toast(A0_164[2].name .. "开启失败") else gg.refineNumber(A0_164[3].value, A0_164[3].type) gg.refineNumber(A0_164[3].value, A0_164[3].type) gg.refineNumber(A0_164[3].value, A0_164[3].type) if gg.getResultCount() == 0 then gg.toast(A0_164[2].name .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for _FORV_4_ = 1, sz do pdsz = true for _FORV_8_ = 4, #A0_164 do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[_FORV_4_].address + A0_164[_FORV_8_].offset pysz[1].flags = A0_164[_FORV_8_].type szpy = gg.getValues(pysz) pdpd = A0_164[_FORV_8_].lv .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[_FORV_4_].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(A0_164[2].name .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(A0_164[2].name .. "开启失败") end end end end function PS() local L0_165, L1_166 end function setvalue(A0_167, A1_168, A2_169) PS("修改地址数值(地址,数值类型,要修改的值)") ;({ [1] = {} })[1].address = A0_167 ;({ [1] = {} })[1].flags = A1_168 ;({ [1] = {} })[1].value = A2_169 gg.setValues({ [1] = {} }) end function split(A0_170, A1_171) local L2_172, L3_173, L4_174 L2_172 = 1 L3_173 = 1 L4_174 = {} while true do if not string.find(A0_170, A1_171, L2_172) then L4_174[L3_173] = string.sub(A0_170, L2_172, string.len(A0_170)) break end L4_174[L3_173] = string.sub(A0_170, L2_172, string.find(A0_170, A1_171, L2_172) - 1) L2_172 = string.find(A0_170, A1_171, L2_172) + string.len(A1_171) L3_173 = L3_173 + 1 end return L4_174 end function xgxc(A0_175, A1_176) local L2_177, L3_178, L4_179, L5_180 L2_177 = 1 L3_178 = #A1_176 for _FORV_5_ = 1, #A1_176 do xgpy = A0_175 + A1_176[_FORV_5_].offset xglx = A1_176[_FORV_5_].type xgsz = A1_176[_FORV_5_].value xgdj = A1_176[_FORV_5_].freeze if xgdj == nil or xgdj == "" then gg.setValues({ [1] = { address = xgpy, flags = xglx, value = xgsz } }) else gg.addListItems({ [1] = { address = xgpy, flags = xglx, freeze = xgdj, value = xgsz } }) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(A0_181) gg.clearResults() gg.setRanges(A0_181[1].memory) gg.searchNumber(A0_181[3].value, A0_181[3].type) if gg.getResultCount() == 0 then gg.toast(A0_181[2].name .. "开启失败") else gg.refineNumber(A0_181[3].value, A0_181[3].type) gg.refineNumber(A0_181[3].value, A0_181[3].type) gg.refineNumber(A0_181[3].value, A0_181[3].type) if gg.getResultCount() == 0 then gg.toast(A0_181[2].name .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for _FORV_4_ = 1, sz do pdsz = true for _FORV_8_ = 4, #A0_181 do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[_FORV_4_].address + A0_181[_FORV_8_].offset pysz[1].flags = A0_181[_FORV_8_].type szpy = gg.getValues(pysz) pdpd = A0_181[_FORV_8_].lv .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[_FORV_4_].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(A0_181[2].name .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(A0_181[2].name .. "开启失败") end end end end function gg.edits(A0_182, A1_183, A2_184) local L3_185 L3_185 = { {}, {} } for _FORV_7_, _FORV_8_ in ipairs(A1_183) do if _FORV_8_[4] then L3_185[2][#L3_185[2] + 1] = { address = A0_182 + _FORV_8_[3], value = _FORV_8_[1], flags = _FORV_8_[2], freeze = _FORV_8_[4] } else L3_185[1][#L3_185[1] + 1] = { address = A0_182 + _FORV_8_[3], value = _FORV_8_[1], flags = _FORV_8_[2], freeze = _FORV_8_[4] } end end gg.addListItems(L3_185[2]) gg.setValues(L3_185[1]) gg.toast((A2_184 or "") .. "开启成功 by.YY") end function xqmnb(A0_186, A1_187) gg.clearResults() gg.setRanges(A0_186[1].memory) gg.searchNumber(A0_186[3].value, A0_186[3].type, false, 536870912, 0, -1) if gg.getResultCount() == 0 then gg.toast(A0_186[2].name .. "开启失败") return end for _FORV_7_ = 4, #A0_186 do for _FORV_11_ = 1, #gg.getResults(gg.getResultCount()) do if gg.getValues({ { address = gg.getResults(gg.getResultCount())[_FORV_11_].address + A0_186[_FORV_7_].offset, flags = A0_186[_FORV_7_].type } })[1].value ~= A0_186[_FORV_7_].lv then gg.getResults(gg.getResultCount())[_FORV_11_].Usable = true end end if 0 + 1 == #gg.getResults(gg.getResultCount()) then gg.toast(A0_186[2].name .. "开启失败") return end end for _FORV_10_, _FORV_11_ in ipairs(A1_187) do for _FORV_15_ = 1, #gg.getResults(gg.getResultCount()) do if not gg.getResults(gg.getResultCount())[_FORV_15_].Usable then if _FORV_11_.freeze then else end end end end gg.setValues({}) gg.addListItems({}) if 0 + 1 == 0 then gg.toast(A0_186[2].name .. "开启成功,共修改" .. 0 + 1 .. "条数据") else gg.toast(A0_186[2].name .. "开启成功,共修改" .. 0 + 1 .. "条数据,冻结" .. 0 + 1 .. "条数据") end gg.clearResults() end function XGBase(A0_188, A1_189) local L2_190 L2_190 = 0 for _FORV_6_, _FORV_7_ in ipairs(A0_188) do if _FORV_6_ == 1 then L2_190 = _FORV_7_ else L2_190 = gg.getValues({ { address = L2_190 + _FORV_7_, flags = 4 } })[1].value end end for _FORV_8_, _FORV_9_ in ipairs(A1_189) do if _FORV_9_[4] then else end end gg.setValues({}) gg.addListItems({}) end function Format(A0_191, A1_192, A2_193, A3_194, A4_195) if A1_192 == "查看" then A0_191[1].flags = A3_194 return print(gg.getValues(A0_191)) end if A1_192 == "修改" then A0_191[1].flags = A3_194 A0_191[1].value = A2_193 return gg.setValues(A0_191) end if A1_192 == "冻结" then A0_191[1].flags = A3_194 A0_191[1].freeze = true A0_191[1].name = A4_195 or "功能" return gg.addListItems(A0_191) end if A1_192 == "加载" then A0_191[1].flags = A3_194 return gg.loadResults(A0_191) end end function LSQ_Chain(A0_196, A1_197, A2_198, A3_199, A4_200, A5_201) local L6_202 L6_202 = "getRanges" _ENV[L6_202] = getRanges or function() local L0_203 L0_203 = {} for _FORV_5_, _FORV_6_ in pairs((gg.getRangesList("^/data/*.so*$"))) do if _FORV_6_.type:sub(2, 2) == "w" then L0_203[#L0_203 + 1] = _FORV_6_ end end return L0_203 end L6_202 = {} for _FORV_13_ in pairs((getRanges())) do if A0_196[1] == getRanges()[_FORV_13_].internalName:gsub("^.*/", "") and A0_196[2] == getRanges()[_FORV_13_].state then break end end if getRanges()[_FORV_13_].start then if A1_197[1] then for _FORV_13_ = 1, #A1_197 do L6_202 = { { flags = gg.TYPE_QWORD, address = getRanges()[_FORV_13_].start + A1_197[_FORV_13_] } } L6_202 = gg.getValues(L6_202) if _FORV_13_ == #A1_197 then break end if gg.TYPE_QWORD == gg.TYPE_DWORD then else end end end print(L6_202) if #L6_202 == 1 then end return Format(L6_202, A2_198, A3_199, A4_200, A5_201) end gg.toast("功能:" .. A5_201 .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end function setvalue(A0_204, A1_205, A2_206) local L3_207 L3_207 = {} L3_207[1] = {} L3_207[1].address = A0_204 L3_207[1].flags = A1_205 L3_207[1].value = A2_206 gg.setValues(L3_207) end function readPointer(A0_208, A1_209, A2_210) if gg.getRangesList(A0_208)[A2_210 or 1] then for _FORV_10_ = 2, #A1_209 do if not gg.getTargetInfo().x64 then gg.getValues({ { address = gg.getRangesList(A0_208)[A2_210 or 1].start + A1_209[1], flags = ({ [true] = 32, [false] = 4 })[gg.getTargetInfo().x64] } })[1].value = gg.getValues({ { address = gg.getRangesList(A0_208)[A2_210 or 1].start + A1_209[1], flags = ({ [true] = 32, [false] = 4 })[gg.getTargetInfo().x64] } })[1].value & 4294967295 end end return gg.getValues({ { address = gg.getRangesList(A0_208)[A2_210 or 1].start + A1_209[1], flags = ({ [true] = 32, [false] = 4 })[gg.getTargetInfo().x64] } })[1].value + A1_209[_FORV_10_] end end function gg.edits(A0_211, A1_212, A2_213) local L3_214 L3_214 = { {}, {} } for _FORV_7_, _FORV_8_ in ipairs(A1_212) do if _FORV_8_[4] then L3_214[2][#L3_214[2] + 1] = { address = A0_211 + _FORV_8_[3], value = _FORV_8_[1], flags = _FORV_8_[2], freeze = _FORV_8_[4] } else L3_214[1][#L3_214[1] + 1] = { address = A0_211 + _FORV_8_[3], value = _FORV_8_[1], flags = _FORV_8_[2], freeze = _FORV_8_[4] } end end gg.addListItems(L3_214[2]) gg.setValues(L3_214[1]) gg.toast((A2_213 or "") .. "开启成功, 共修改" .. #A1_212 .. "个值by.YY") end function S_Pointer(A0_215, A1_216, A2_217) local L3_218 function L3_218() for _FORV_5_, _FORV_6_ in pairs((gg.getRangesList("^/data/*.so*$"))) do if _FORV_6_.type:sub(2, 2) == "w" then table.insert({}, _FORV_6_) end end return {} end return (string.format("0x%X", (function(A0_219, A1_220, A2_221) if A2_221 then else end for _FORV_12_ in pairs((L3_218())) do if A0_219[1] == L3_218()[_FORV_12_].internalName:gsub("^.*/", "") and A0_219[2] == L3_218()[_FORV_12_].state then break end end if L3_218()[_FORV_12_] then ;({})[#{}].address = L3_218()[_FORV_12_].start + A1_220[1] ;({})[#{}].flags = 4 if #A1_220 ~= 1 then for _FORV_12_ = 2, #A1_220 do for _FORV_17_ in pairs((gg.getValues({}))) do if not gg.getTargetInfo().x64 then gg.getValues({})[_FORV_17_].value = gg.getValues({})[_FORV_17_].value & 4294967295 end ;({})[#{}].address = gg.getValues({})[_FORV_17_].value + A1_220[_FORV_12_] ;({})[#{}].flags = 4 end end end end return ({})[#{}].address end )(A0_215, A1_216, A2_217))) end function setvalue(A0_222, A1_223, A2_224) local L3_225 L3_225 = {} L3_225[1] = {} L3_225[1].address = A0_222 L3_225[1].flags = A1_223 L3_225[1].value = A2_224 gg.setValues(L3_225) end function addListltems(A0_226, A1_227, A2_228, A3_229) t = {} t[1] = {} t[1].address = A0_226 t[1].flags = A1_227 t[1].value = A2_228 t[1].freeze = A3_229 gg.addListItems(t) end function xfnb(A0_230, A1_231) return gg.getValues({ {address = A0_230, flags = A1_231} })[1].value end function setvalue(A0_232, A1_233, A2_234) local L3_235 L3_235 = {} L3_235[1] = {} L3_235[1].address = A0_232 L3_235[1].flags = A1_233 L3_235[1].value = A2_234 gg.setValues(L3_235) end function addListltems(A0_236, A1_237, A2_238, A3_239) t = {} t[1] = {} t[1].address = A0_236 t[1].flags = A1_237 t[1].value = A2_238 t[1].freeze = A3_239 gg.addListItems(t) end function split(A0_240, A1_241) local L2_242, L3_243, L4_244 L2_242 = 1 L3_243 = 1 L4_244 = {} while true do if not string.find(A0_240, A1_241, L2_242) then L4_244[L3_243] = string.sub(A0_240, L2_242, string.len(A0_240)) break end L4_244[L3_243] = string.sub(A0_240, L2_242, string.find(A0_240, A1_241, L2_242) - 1) L2_242 = string.find(A0_240, A1_241, L2_242) + string.len(A1_241) L3_243 = L3_243 + 1 end return L4_244 end function xgxc(A0_245, A1_246) local L2_247, L3_248, L4_249, L5_250 L2_247 = 1 L3_248 = #A1_246 for _FORV_5_ = 1, #A1_246 do xgpy = A0_245 + A1_246[_FORV_5_].offset xglx = A1_246[_FORV_5_].type xgsz = A1_246[_FORV_5_].value gg.setValues({ [1] = { address = xgpy, flags = xglx, value = xgsz } }) xgsl = xgsl + 1 end end function xqmnb(A0_251) gg.clearResults() gg.setRanges(A0_251[1].memory) gg.searchNumber(A0_251[3].value, A0_251[3].type) if gg.getResultCount() == 0 then gg.toast(A0_251[2].name .. "开启失败") else gg.refineNumber(A0_251[3].value, A0_251[3].type) gg.refineNumber(A0_251[3].value, A0_251[3].type) gg.refineNumber(A0_251[3].value, A0_251[3].type) if gg.getResultCount() == 0 then gg.toast(A0_251[2].name .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for _FORV_4_ = 1, sz do pdsz = true for _FORV_8_ = 4, #A0_251 do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[_FORV_4_].address + A0_251[_FORV_8_].offset pysz[1].flags = A0_251[_FORV_8_].type szpy = gg.getValues(pysz) pdpd = A0_251[_FORV_8_].lv .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[_FORV_4_].address xgxc(szpy, qmxg) xgjg = true end end if xgjg == true then gg.toast(A0_251[2].name .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(A0_251[2].name .. "开启失败") end end end end function S_Pointer(A0_252, A1_253, A2_254) local L3_255 function L3_255() for _FORV_5_, _FORV_6_ in pairs((gg.getRangesList("^/data/*.so*$"))) do if _FORV_6_.type:sub(2, 2) == "w" then table.insert({}, _FORV_6_) end end return {} end function PS() local L0_256, L1_257 end function setvalue(A0_258, A1_259, A2_260) PS("修改地址数值(地址,数值类型,要修改的值)") ;({ [1] = {} })[1].address = A0_258 ;({ [1] = {} })[1].flags = A1_259 ;({ [1] = {} })[1].value = A2_260 gg.setValues({ [1] = {} }) end return (string.format("0x%X", (function(A0_261, A1_262, A2_263) if A2_263 then else end for _FORV_12_ in pairs((L3_255())) do if A0_261[1] == L3_255()[_FORV_12_].internalName:gsub("^.*/", "") and A0_261[2] == L3_255()[_FORV_12_].state then break end end if L3_255()[_FORV_12_] then ;({})[#{}].address = L3_255()[_FORV_12_].start + A1_262[1] ;({})[#{}].flags = 4 if #A1_262 ~= 1 then for _FORV_12_ = 2, #A1_262 do for _FORV_17_ in pairs((gg.getValues({}))) do if not gg.getTargetInfo().x64 then gg.getValues({})[_FORV_17_].value = gg.getValues({})[_FORV_17_].value & 4294967295 end ;({})[#{}].address = gg.getValues({})[_FORV_17_].value + A1_262[_FORV_12_] ;({})[#{}].flags = 4 end end end end return ({})[#{}].address end )(A0_252, A1_253, A2_254))) end function S_Pointer(A0_264, A1_265, A2_266) local L3_267 function L3_267() for _FORV_5_, _FORV_6_ in pairs((gg.getRangesList("^/data/*.so*$"))) do if _FORV_6_.type:sub(2, 2) == "w" then table.insert({}, _FORV_6_) end end return {} end return (string.format("0x%X", (function(A0_268, A1_269, A2_270) if A2_270 then else end for _FORV_12_ in pairs((L3_267())) do if A0_268[1] == L3_267()[_FORV_12_].internalName:gsub("^.*/", "") and A0_268[2] == L3_267()[_FORV_12_].state then break end end if L3_267()[_FORV_12_] then ;({})[#{}].address = L3_267()[_FORV_12_].start + A1_269[1] ;({})[#{}].flags = 4 if #A1_269 ~= 1 then for _FORV_12_ = 2, #A1_269 do for _FORV_17_ in pairs((gg.getValues({}))) do if not gg.getTargetInfo().x64 then gg.getValues({})[_FORV_17_].value = gg.getValues({})[_FORV_17_].value & 4294967295 end ;({})[#{}].address = gg.getValues({})[_FORV_17_].value + A1_269[_FORV_12_] ;({})[#{}].flags = 4 end end end print(string.char(231, 190, 164, 58) .. tonumber(377200894)) end return ({})[#{}].address end )(A0_264, A1_265, A2_266))) end function edit(orig,ret)_om=orig[1].memory or orig[1][1]_ov=orig[3].value or orig[3][1]_on=orig[2].name or orig[2][1]gg.clearResults()gg.setRanges(_om)gg.searchNumber(_ov,orig[3].type or orig[3][2])sz=gg.getResultCount()if sz<1 then gg.toast(_on.."开启失败")else sl=gg.getResults(720)for i=1,sz do ist=true for v=4,#orig do if ist==true and sl[i].value==_ov then cd={{}}cd[1].address=sl[i].address+(orig[v].offset or orig[v][2])cd[1].flags=orig[v].type or orig[v][3]szpy=gg.getValues(cd)cdlv=orig[v].lv or orig[v][1]cdv=szpy[1].value if cdlv==cdv then pdjg=true ist=true else pdjg=false ist=false end end end if pdjg==true then szpy=sl[i].address for x=1,#(ret)do xgpy=szpy+(ret[x].offset or ret[x][2])xglx=ret[x].type or ret[x][3]xgsz=ret[x].value or ret[x][1]xgdj=ret[x].freeze or ret[x][4]xgsj={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xgsj[1].freeze=xgdj gg.addListItems(xgsj)else gg.setValues(xgsj)end end xgjg=true end end if xgjg==true then gg.toast(_on.."开启成功")else gg.toast(_on.."开启失败")end end 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) gg.toast("已修改"..#t.."条数据") gg.addListItems(t) else gg.toast("not found", false) return false end else gg.toast("Not Found") return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "开启失败") end end 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(0x315fdca1) 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 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(0x315fdca1) 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 split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "开启失败") end end end end function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end ----😁😁😁 function XZ(Search,Get,Type,Range,Name) gg.clearResults() gg.setRanges(Range) gg.setVisible(false) if Search[1][1]~=false then gg.searchAddress(Search[1][1],0xFFFFFFFF,Search[1][4] or Type,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) end gg.searchNumber(Search[1][2],Search[1][4] or Type,false,gg.SIGN_EQUAL,Search[1][5] or 1,Search[1][6] or -1) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][3] 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=Search[k][3] or Type end tmp=gg.getValues(tmp) for i,v in ipairs(tmp) do if v.flags==16 or v.flags==64 then values=tostring(v.value):sub(1,6) num=tostring(num):sub(1,6) else values=v.value end if tostring(values)~=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 local t,t_={},{} local base=Search[1][3] for i=1,#data do for k,w in ipairs(Get) do offset=w[2] - base if w[1]==false then t_[#t_+1]={} t_[#t_].address=data[i]+offset t_[#t_].flags=Type th_=(th_) and th_+1 or 1 else t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=w[3] or Type t[#t].value=w[1] tg_=(tg_) and tg_+1 or 1 if (w[4]==true) then local item={} item[#item+1]=t[#t] item[#item].freeze=w[4] gg.addListItems(item) end end end end tg=(tg_) and "\nYL修改"..tg_.."数据" or "" th=(th_) and "" or "" gg.setValues(t) t_=gg.getValues(t_) gg.loadResults(t_) gg.toast("\n"..Name..tg) tg_,th_=nil,nil else gg.toast("滚出去\n没有这个数值",false) return false end else gg.toast("没有这个数值") return false end end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end 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 function Unfreeze() --获取保存列表 local t = gg.getListItems() for k, v in pairs(t) do t[k]["freeze"] = false end return gg.addListItems(t) end function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Search[2].name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then gg.toast(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end function XGBase(Address,AFV) local address=0 for index,offset in ipairs(Address)do if index==1 then address=offset else address=gg.getValues({{address=address+offset,flags=4}})[1].value end end local Value,Freeze={},{} for index,value in ipairs(AFV)do local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true} if value[4]then Freeze[#Freeze+1]=VALUE else Value[#Value+1]=VALUE end end gg.setValues(Value) gg.addListItems(Freeze) end function Format(tab, format, value, type, Function) if format == "查看" then tab[1]["flags"] = type return print(gg.getValues(tab)) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end 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 function LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end 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 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--作者电报@XMXXNB886 _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--作者电报@XMXXNB886 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----作者电报@XMXXNB886 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 end--作者电报@XMXXNB886 return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end local function GetPor(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end 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 ---😂😂😂😂😂😂😞😨😞😓😜😓😜😓😜😓😜😔😜😓😜😓😓😚😓😓😓😜😓😓😍😔😔😔😓😜😔😚😓😚😓😚😚😓😚😓😚😓😓😜😡😜😡😒😚😡😒😚😒😡😚😡😚😒😡😚😚😒😡😚😒😡😠😍😔👿😌😓😌😔😍😔👿😌👿😔😌😚😒😡😍😡😍😡😌