if io.open("/storage/emulated/0/绘梨衣/sharkTTF") == nil then gg.toast("第一次打开,正在下载资源配置") gg.alert("第一次打开,正在下载资源配置") file.download("https://image.rlyun.fun/down.php/8a03896837b03ddc1087350b306ec1ff.zip", "/storage/emulated/0/绘梨衣.zip") gg.alert("资源下载完成正在解压") file.unzip("/storage/emulated/0/绘梨衣.zip", "/storage/emulated/0/") os.remove("/storage/emulated/0/绘梨衣.zip") gg.alert("资源解压完成") end local material3 = require "material3" local context = material3:getContext() import "android.content.res.ColorStateList" import "android.graphics.Color" import 'com.google.android.material.button.MaterialButton' import "com.google.android.material.progressindicator.*" import "com.google.android.material.dialog.MaterialAlertDialogBuilder" import "com.google.android.material.slider.Slider" import "com.google.android.material.materialswitch.MaterialSwitch" import "com.google.android.material.card.MaterialCardView" import "android.graphics.PorterDuff" import "android.graphics.PorterDuffColorFilter" import "android.graphics.RectF" import "android.content.Context" import "android.os.Build" import "android.view.View" import "android.view.Gravity" import "android.view.MotionEvent" import "android.view.WindowManager" import "android.view.WindowManager$LayoutParams" import "android.graphics.PixelFormat" import "android.graphics.drawable.GradientDrawable" import "android.widget.LinearLayout" import "android.widget.ScrollView" import "android.widget.FrameLayout" import "android.widget.ImageView" import "android.widget.TextView" import "android.widget.CheckBox" import "android.widget.EditText" import "android.widget.RadioGroup" import "android.widget.RadioButton" import "android.animation.ObjectAnimator" import "android.animation.ValueAnimator" import "android.view.animation.Animation" import 'androidx.transition.Transition' import 'androidx.transition.Scene' import 'androidx.transition.TransitionManager' import 'androidx.transition.TransitionSet' import 'androidx.transition.ChangeBounds' import "android.view.TextureView" import "android.media.MediaPlayer" import "android.view.Surface" context:setTheme(0x7f090009) MXT = {} pcall(function() dex.loadfile('/storage/emulated/0/绘梨衣/GifView') import 'pl.droidsonroids.gif.*' end) local ui = require('ui') YoYoImpl = luajava.getYoYoImpl() vibra = context:getSystemService(Context.VIBRATOR_SERVICE) function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end local function dpToPx(dp) local resources = luajava.bindClass("android.content.res.Resources").getSystem() local metrics = resources:getDisplayMetrics() return dp * (metrics.densityDpi / 160) end local function sizeToPx(size) if type(size) == "string" then return dpToPx(tonumber((size:gsub("dp", "")))) end return size end function getImage(txt) txt = string.url(txt,"de") local ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1) if string.find(tostring(txt),"http") ~= nil then txt = "/storage/emulated/0/绘梨衣/"..ntxt end return luajava.getBitmapDrawable(txt) end function getIcon(icon) return luajava.getBitmapDrawable("/storage/emulated/0/绘梨衣/".. icon) end sharkTTF = nil pcall(function() local fi = luajava.newInstance("java.io.File", "/storage/emulated/0/绘梨衣/sharkTTF") sharkTTF = luajava.bindClass("android.graphics.Typeface"):createFromFile(fi) end) function setFont(v) if sharkTTF ~= nil then pcall(function() v:setTypeface(sharkTTF) end) end end SwitchButton = nil pcall(function() dexloader = dex.loadfile("/storage/emulated/0/绘梨衣/sensor.dex") SwitchButton = dexloader:loadClass("com.changan.CACore.SwitchButton") end) if SwitchButton == nil then SwitchButton = MaterialSwitch end DP3 = dpToPx(3) marg = luajava.new(RectF, 10, 10, 10, 10) transManager = nil function getVerticalBG(colors, radius, strokeWidth, strokeColor) if type(colors) ~= "table" then colors = {colors, colors} end local drawable = luajava.new(GradientDrawable) drawable:setShape(GradientDrawable.RECTANGLE) drawable:setGradientType(GradientDrawable.LINEAR_GRADIENT) drawable:setColors(colors) drawable:setCornerRadius(radius or 0) drawable:setStroke(strokeWidth or 0, strokeColor or 0x00000000) return drawable end function getBG() if gg.getWindowOrientation() == 0 then local bgPath = "/storage/emulated/0/绘梨衣/竖启动" if panduan(bgPath) then local ok, drawable = pcall(function() if file.length(bgPath) > 1 then return luajava.getBitmapDrawable(bgPath) end end) if ok and drawable then return drawable end end else local bgPath = "/storage/emulated/0/绘梨衣/横启动" if panduan(bgPath) then local ok, drawable = pcall(function() if file.length(bgPath) > 1 then return luajava.getBitmapDrawable(bgPath) end end) if ok and drawable then return drawable end end end return getVerticalBG({0xFFAF5A5A, 0xFF631D1A}, dpToPx(10)) end window = context:getSystemService("window") if tonumber(device.width) == nil then dwidth = 1340 dheight = 2300 else dwidth = device.width dheight = device.height end function getScreen() local ok, w, h = pcall(function() local metrics = luajava.newInstance("android.util.DisplayMetrics") window:getDefaultDisplay():getRealMetrics(metrics) return metrics.widthPixels, metrics.heightPixels end) if ok and tonumber(w) and tonumber(h) and w > 0 and h > 0 then return w, h end return dwidth, dheight end dwidth, dheight = getScreen() function 退出() tuichu = 1 luajava.setFloatingWindowHide(false) end uiVisible = true isToggling = false startupDone = false lastOrient = -1 function getSidePanelBG(edge) local panelBg = luajava.new(GradientDrawable) panelBg:setShape(GradientDrawable.RECTANGLE) panelBg:setColor(edge == "left" and 0xFFAF5A5A or 0xFFFAF9F9) panelBg:setStroke(math.max(1, math.floor(dpToPx(1))), 0xFFDCA0A0) local radius = math.floor(dpToPx(10)) if edge == "left" then panelBg:setCornerRadii({ 0, 0, radius, radius, radius, radius, 0, 0 }) else panelBg:setCornerRadii({ radius, radius, 0, 0, 0, 0, radius, radius }) end return panelBg end function getSideWindowParams(width, height, x, y) local params = luajava.new(WindowManager.LayoutParams) if Build.VERSION.SDK_INT >= 26 then params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY else params.type = WindowManager.LayoutParams.TYPE_PHONE end params.format = PixelFormat.RGBA_8888 params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL params.gravity = Gravity.LEFT | Gravity.TOP params.width = math.floor(width) params.height = math.floor(height) params.x = math.floor(x) params.y = math.floor(y) return params end local function toRunnable(func) return luajava.createProxy("java.lang.Runnable", { run = func }) 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A 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.addListItems(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.addListItems(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.addListItems(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 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 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then 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 rightWindowWidth = 0 sideWindowHeight = 0 colW = 0 function measure() rightWindowWidth = dpToPx(448) colW = math.floor(rightWindowWidth / 2) sideWindowHeight = dpToPx(264) end measure() function getWidth(isExpand) if gg.getWindowOrientation() == 0 then return colW else return isExpand and colW or rightWindowWidth end end 展开 = false collapsedW = math.floor(dpToPx(76)) expandedW = math.floor(dpToPx(150)) curPage = 1 pageTitleViews = {} navItemBgs = {} navIconViews = {} sakuraTitleView = nil leftCols = {} rightCols = {} rightScrolls = {} function setParams(contentW) local centerY = math.max(0, math.floor((dheight - sideWindowHeight) / 2)) local rightX = math.max(0, math.floor(dwidth - contentW)) leftWindowParams = getSideWindowParams(展开 and expandedW or collapsedW, sideWindowHeight, 0, centerY) rightWindowParams = getSideWindowParams(contentW, sideWindowHeight, rightX, centerY) rightWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL rightWindowParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN end function refresh(contentW) setParams(contentW) luajava.runUiThread(function() pcall(function() window:updateViewLayout(leftWindow, leftWindowParams) end) pcall(function() window:updateViewLayout(rightWindow, rightWindowParams) end) end) end function checkScreen() local nw, nh = getScreen() if nw == dwidth and nh == dheight then return end dwidth = nw dheight = nh measure() refresh(getWidth(展开)) end function cacheCols() pcall(function() local navItems = MXT._navItems or {} for i = 1, #navItems do if rightCols[i] == nil then local page = ViewPager:getChildAt(i - 1) if page ~= nil then local ls = page:getChildAt(0) local rs = page:getChildAt(1) if ls ~= nil and rs ~= nil then rightScrolls[i] = rs leftCols[i] = ls:getChildAt(0) rightCols[i] = rs:getChildAt(0) end end end end end) end function mergeCols(merge) cacheCols() local navItems = MXT._navItems or {} for i = 1, #navItems do local lc = leftCols[i] local rc = rightCols[i] local rs = rightScrolls[i] if lc ~= nil and rc ~= nil and rs ~= nil then pcall(function() if merge then rs:removeView(rc) lc:addView(rc) rs:setVisibility(View.GONE) else lc:removeView(rc) rs:addView(rc) rs:setVisibility(View.VISIBLE) end end) end end end function expand() if 展开 or isToggling then return end isToggling = true mergeCols(true) luajava.runUiThread(function() if sakuraTitleView then sakuraTitleView:setVisibility(View.VISIBLE) sakuraTitleView:setAlpha(0) end for i = 1, #pageTitleViews do if pageTitleViews[i] then pageTitleViews[i]:setVisibility(View.VISIBLE) pageTitleViews[i]:setAlpha(0) end end local startNavW = collapsedW local endNavW = expandedW local startContentW = rightWindowParams.width local endContentW = getWidth(true) local animator = ValueAnimator:ofFloat({0, 1}) animator:setDuration(350) animator:setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) luajava.setInterface(animator, "addUpdateListener", { onAnimationUpdate = function(animation) local f = animation:getAnimatedValue() local navW = math.floor(startNavW + (endNavW - startNavW) * f) local contentW = math.floor(startContentW + (endContentW - startContentW) * f) local rightX = math.max(0, math.floor(dwidth - contentW)) leftWindowParams.width = navW rightWindowParams.width = contentW rightWindowParams.x = rightX pcall(function() window:updateViewLayout(leftWindow, leftWindowParams) end) pcall(function() window:updateViewLayout(rightWindow, rightWindowParams) end) if sakuraTitleView then sakuraTitleView:setAlpha(f) end for i = 1, #pageTitleViews do if pageTitleViews[i] then pageTitleViews[i]:setAlpha(f) end end end }) luajava.setInterface(animator, "addListener", { onAnimationEnd = function(animation) 展开 = true isToggling = false end }) animator:start() end) end function collapse() if not 展开 or isToggling then return end isToggling = true luajava.runUiThread(function() local startNavW = expandedW local endNavW = collapsedW local startContentW = rightWindowParams.width local endContentW = getWidth(false) local animator = ValueAnimator:ofFloat({0, 1}) animator:setDuration(280) animator:setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) luajava.setInterface(animator, "addUpdateListener", { onAnimationUpdate = function(animation) local f = animation:getAnimatedValue() local navW = math.floor(startNavW + (endNavW - startNavW) * f) local contentW = math.floor(startContentW + (endContentW - startContentW) * f) local rightX = math.max(0, math.floor(dwidth - contentW)) leftWindowParams.width = navW rightWindowParams.width = contentW rightWindowParams.x = rightX pcall(function() window:updateViewLayout(leftWindow, leftWindowParams) end) pcall(function() window:updateViewLayout(rightWindow, rightWindowParams) end) local alpha = 1 - f if sakuraTitleView then sakuraTitleView:setAlpha(alpha) end for i = 1, #pageTitleViews do if pageTitleViews[i] then pageTitleViews[i]:setAlpha(alpha) end end end }) luajava.setInterface(animator, "addListener", { onAnimationEnd = function(animation) 展开 = false if sakuraTitleView then sakuraTitleView:setVisibility(View.GONE) end for i = 1, #pageTitleViews do if pageTitleViews[i] then pageTitleViews[i]:setVisibility(View.GONE) end end if gg.getWindowOrientation() ~= 0 then mergeCols(false) end isToggling = false end }) animator:start() end) end function toggleNav() if 展开 then collapse() else expand() end end function highlight() luajava.runUiThread(function() local navItems = MXT._navItems or {} for i = 1, #navItems do local selected = (i == curPage) if pageTitleViews[i] then pageTitleViews[i]:setTextColor(selected and 0xFFFFFFFF or 0xFFF5E8E8) end end if navIndicatorView then local targetY = (curPage - 1) * dpToPx(48) navIndicatorView:animate() :translationY(targetY) :setDuration(300) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :start() end end) end function dualIn(onComplete) if not leftWindow or not rightWindow then if onComplete then onComplete() end return end luajava.runUiThread(function() local curNavW = 展开 and expandedW or collapsedW local leftDistance = curNavW + dpToPx(16) local curContentW = rightWindowParams.width local rightDistance = curContentW + dpToPx(16) local finishedCount = 0 local function finishOne() finishedCount = finishedCount + 1 if finishedCount == 2 then leftWindow:setTranslationX(0) rightWindow:setTranslationX(0) if onComplete then onComplete() end end end leftWindow:animate():cancel() rightWindow:animate():cancel() leftWindow:setVisibility(View.VISIBLE) rightWindow:setVisibility(View.VISIBLE) leftWindow:setAlpha(1) rightWindow:setAlpha(1) leftWindow:setTranslationX(-leftDistance) rightWindow:setTranslationX(rightDistance) leftWindow:animate() :translationX(0) :setDuration(360) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :withEndAction(toRunnable(finishOne)) :start() rightWindow:animate() :translationX(0) :setDuration(360) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :withEndAction(toRunnable(finishOne)) :start() end) end function dualOut(onComplete) if not leftWindow or not rightWindow then if onComplete then onComplete() end return end luajava.runUiThread(function() local curNavW = 展开 and expandedW or collapsedW local leftDistance = curNavW + dpToPx(16) local curContentW = rightWindowParams.width local rightDistance = curContentW + dpToPx(16) local finishedCount = 0 local function finishOne() finishedCount = finishedCount + 1 if finishedCount == 2 then leftWindow:setVisibility(View.GONE) rightWindow:setVisibility(View.GONE) leftWindow:setTranslationX(0) rightWindow:setTranslationX(0) if onComplete then onComplete() end end end leftWindow:animate():cancel() rightWindow:animate():cancel() leftWindow:setVisibility(View.VISIBLE) rightWindow:setVisibility(View.VISIBLE) leftWindow:setAlpha(1) rightWindow:setAlpha(1) leftWindow:animate() :translationX(-leftDistance) :setDuration(280) :setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) :withEndAction(toRunnable(finishOne)) :start() rightWindow:animate() :translationX(rightDistance) :setDuration(280) :setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) :withEndAction(toRunnable(finishOne)) :start() end) end function singleIn(targetWindow, startTranslation, onComplete) if not targetWindow then if onComplete then onComplete() end return end luajava.runUiThread(function() targetWindow:animate():cancel() targetWindow:setVisibility(View.VISIBLE) targetWindow:setAlpha(1) targetWindow:setTranslationX(startTranslation) targetWindow:animate() :translationX(0) :setDuration(360) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :withEndAction(toRunnable(function() targetWindow:setTranslationX(0) if onComplete then onComplete() end end)) :start() end) end function fixShadow() luajava.startThread(function() gg.sleep(300) for round = 1, 3 do if tuichu == 1 then return end luajava.runUiThread(function() pcall(function() if contentPageView then contentPageView:setLayerType(View.LAYER_TYPE_NONE, nil) contentPageView:requestLayout() contentPageView:invalidate() end if ViewPager then local cur = ViewPager:getCurrentItem() for p = 0, #(MXT._navItems or {}) - 1 do ViewPager:setCurrentItem(p, false) end ViewPager:setCurrentItem(cur, false) end if rightWindow then rightWindow:requestLayout() rightWindow:invalidate() window:updateViewLayout(rightWindow, rightWindowParams) end end) end) gg.sleep(400) end end) end function topToggle() local imgSize = dpToPx(30) local viewWidth = math.floor(dpToPx(70) * 5 / 3) local viewHeight = dpToPx(30) local cornerR = dpToPx(50) local isExpanded = false local isAnimating = false local iconContainerRef = nil local iconARef = nil local iconBRef = nil local textRef = nil local iconToRight = viewWidth - imgSize local textToLeft = -(imgSize + dpToPx(6) - dpToPx(12)) function MXT.syncTopToggleState(uiVisible) if isAnimating then return end if not iconContainerRef or not textRef or not iconARef or not iconBRef then return end local shouldExpand = not uiVisible if isExpanded == shouldExpand then return end isAnimating = true isExpanded = shouldExpand local iconTargetX = isExpanded and iconToRight or 0 local textTargetX = isExpanded and textToLeft or 0 local moveDuration = isExpanded and 350 or 280 local iconDelay = isExpanded and 50 or 40 local fadeOutDuration = isExpanded and 260 or 200 local fadeOutDelay = isExpanded and 60 or 50 local fadeInDuration = isExpanded and 300 or 240 local fadeInDelay = isExpanded and 180 or 140 textRef:animate() :translationX(textTargetX) :setDuration(moveDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :start() iconContainerRef:animate() :translationX(iconTargetX) :setDuration(moveDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :setStartDelay(iconDelay) :withEndAction(toRunnable(function() isAnimating = false end)) :start() if isExpanded then iconARef:animate() :alpha(0) :setDuration(fadeOutDuration) :setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) :setStartDelay(fadeOutDelay) :start() iconBRef:animate() :alpha(1) :setDuration(fadeInDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :setStartDelay(fadeInDelay) :start() else iconBRef:animate() :alpha(0) :setDuration(fadeOutDuration) :setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) :setStartDelay(fadeOutDelay) :start() iconARef:animate() :alpha(1) :setDuration(fadeInDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :setStartDelay(fadeInDelay) :start() end end local layout = luajava.loadlayout({ LinearLayout, layout_width = viewWidth, layout_height = viewHeight, visibility = "gone", alpha = 0, orientation = "horizontal", gravity = "center_vertical", background = getVerticalBG({0xFFAF5A5A, 0xFFAF5A5A}, cornerR), onClick = function(v) if isAnimating then return end isAnimating = true MXT.controlWater(v, 200) local targetExpanded = not isExpanded isExpanded = targetExpanded local iconTargetX = targetExpanded and iconToRight or 0 local textTargetX = targetExpanded and textToLeft or 0 local moveDuration = targetExpanded and 350 or 280 local iconDelay = targetExpanded and 50 or 40 local fadeOutDuration = targetExpanded and 260 or 200 local fadeOutDelay = targetExpanded and 60 or 50 local fadeInDuration = targetExpanded and 300 or 240 local fadeInDelay = targetExpanded and 180 or 140 luajava.runUiThread(function() if textRef then textRef:animate() :translationX(textTargetX) :setDuration(moveDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :start() end if iconContainerRef then iconContainerRef:animate() :translationX(iconTargetX) :setDuration(moveDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :setStartDelay(iconDelay) :withEndAction(toRunnable(function() isAnimating = false end)) :start() end if iconARef and iconBRef then if targetExpanded then iconARef:animate() :alpha(0) :setDuration(fadeOutDuration) :setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) :setStartDelay(fadeOutDelay) :start() iconBRef:animate() :alpha(1) :setDuration(fadeInDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :setStartDelay(fadeInDelay) :start() else iconBRef:animate() :alpha(0) :setDuration(fadeOutDuration) :setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) :setStartDelay(fadeOutDelay) :start() iconARef:animate() :alpha(1) :setDuration(fadeInDuration) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :setStartDelay(fadeInDelay) :start() end end end) toggleUI() end, { FrameLayout, layout_width = imgSize, layout_height = imgSize, __onFinish = function(v) iconContainerRef = v local bg = luajava.new(GradientDrawable) bg:setShape(GradientDrawable.OVAL) bg:setColor(0xFFFFFFFF) v:setBackground(bg) pcall(function() v:setClipToOutline(true) end) end, { ImageView, layout_width = "match_parent", layout_height = "match_parent", scaleType = "centerCrop", src = "https://image.rlyun.fun/view.php/5efaffc02b64282f03f4c0bbaef148fd.png", __onFinish = function(v) iconARef = v end, }, { ImageView, layout_width = "match_parent", layout_height = "match_parent", scaleType = "centerCrop", alpha = 0, src = "https://image.rlyun.fun/view.php/053150e59de6fd7d6379ab78dca0d9eb.png", __onFinish = function(v) iconBRef = v end, }, }, { TextView, layout_width = "wrap_content", layout_height = "wrap_content", layout_marginLeft = "6dp", text = "Sakura最好了", textColor = 0xFF8A4A4A, textSize = "12sp", gravity = "center_vertical", __onFinish = function(v) textRef = v setFont(v) end, }, }) local params = luajava.new(WindowManager.LayoutParams) if Build.VERSION.SDK_INT >= 26 then params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY else params.type = WindowManager.LayoutParams.TYPE_PHONE end params.format = PixelFormat.RGBA_8888 params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP params.width = viewWidth params.height = viewHeight params.x = 0 params.y = dpToPx(40) luajava.runUiThread(function() window:addView(layout, params) end) topToggleWindow = layout end function guid() seed = { "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,15)]) 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_MUSIC, AudioManager.STREAM_RING, } 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 listenVol(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 makeToggle(name, func1, func2) 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 MXT.controlWater(control, time) luajava.runUiThread(function() ObjectAnimator():ofFloat(control, "scaleX", {1, 0.9, 0.9, 1}):setDuration(time):start() ObjectAnimator():ofFloat(control, "scaleY", {1, 0.9, 0.9, 1}):setDuration(time):start() end) end MXT.controlRotation9 = function(control, time, t) luajava.runUiThread(function() xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", { time, t }) xuanzhuandonghua:setRepeatCount(0) xuanzhuandonghua:setRepeatMode(Animation.RESTART) xuanzhuandonghua:setDuration(400) xuanzhuandonghua:start() end) end function getButtonBG() local selector = luajava.getStateListDrawable() selector:addState({android.R.attr.state_pressed}, getVerticalBG({0x55DCA0A0, 0x55DCA0A0}, 20)) selector:addState({-android.R.attr.state_pressed}, getVerticalBG({0xFFFAF9F9, 0xFFFAF9F9}, 20)) return selector end function visi(tid) vibra:vibrate(4) if transManager == nil then transManager = luajava.new(TransitionManager) end if boxes[tid][5] then boxes[tid][5] = false transManager:go(boxes[tid][1], boxes[tid][4]) MXT.controlRotation9(boxes[tid][3], 90, 0) else boxes[tid][5] = true transManager:go(boxes[tid][2], boxes[tid][4]) MXT.controlRotation9(boxes[tid][6], 0, 90) end end switchs, swfuncs, buts, textvs, sliders, boxes = {}, {}, {}, {}, {}, {} local swcDraw = ColorStateList({ {android.R.attr.state_checked}, {-android.R.attr.state_checked}, }, { 0xFFAF5A5A, 0x438A4A4A, }) local swcThumb = ColorStateList({ {android.R.attr.state_checked}, {android.R.attr.state_pressed}, {-android.R.attr.state_pressed}, }, { 0xffffffff, 0xffeeeeee, 0xffffffff, }) local RadTint = ColorStateList({ {android.R.attr.state_checked}, {-android.R.attr.state_checked}, {}, }, { 0xFFE8A8A8, 0xFF8A4A4A, 0xffffffff, }) function MXT.text(text, color, size, isjz) if not color then color = 0xFF8A4A4A end if color == "跟随主题" then color = 0xFF8A4A4A end local gravityValue = isjz and "center" or "left" return { TextView, text = text, textColor = color, textSize = size, gravity = gravityValue, layout_height = "wrap_content", layout_width = "match_parent", layout_marginLeft = "2dp", layout_marginRight = "2dp", autoSizeTextType = "uniform", __onFinish = function(v) setFont(v) end, } end function MXT.button(txt, func, txtc) if not txt then txt = "未设置" end if not txtc then txtc = 0xFF8A4A4A end if txtc == "跟随主题" then txtc = 0xFF8A4A4A end return { LinearLayout, layout_width = "match_parent", gravity = "center_vertical", layout_marginLeft = "2dp", layout_marginTop = "4dp", layout_marginRight = "2dp", layout_marginBottom = "4dp", background = getButtonBG(), elevation = "2dp", padding = "10dp", onClick = function(v) MXT.controlWater(v, 300) if func then luajava.newThread(func):start() end end, { TextView, textColor = txtc, text = txt, textSize = "13sp", layout_height = "wrap_content", layout_width = "match_parent", layout_weight = 1, __onFinish = function(v) setFont(v) end, }, { ImageView, src = pic_heir, layout_height = "14dp", layout_width = "14dp", colorFilter = 0xFFAF5A5A, } } end function MXT.switch(name, func1, func2, miaoshu) local nid = name .. guid() swfuncs[nid] = {func1, func2} if not name then name = "未设置" end return { FrameLayout, layout_width = "match_parent", layout_height = "48dp", layout_marginLeft = "2dp", layout_marginRight = "2dp", gravity = "center_vertical", { LinearLayout, layout_width = "match_parent", layout_height = "40dp", layout_marginLeft = "2dp", layout_marginTop = "4dp", layout_marginRight = "2dp", layout_marginBottom = "4dp", gravity = "center_vertical", background = getVerticalBG({0xFFFAF9F9, 0xFFFAF9F9}, 20), elevation = "2dp", padding = {"10dp", "0dp", "10dp", "0dp"}, { LinearLayout, layout_width = "0dp", layout_weight = 1, layout_height = "match_parent", gravity = "center_vertical", { TextView, gravity = "center_vertical", text = name, textColor = 0xFF8A4A4A, textSize = "13sp", layout_width = "80dp", layout_height = "match_parent", __onFinish = function(v) setFont(v) end, }, { TextView, gravity = "center_vertical", layout_height = "match_parent", text = miaoshu or "", textSize = "11sp", layout_width = "wrap_content", textColor = 0xFFB09090, __onFinish = function(v) setFont(v) end, }, }, { SwitchButton, id = luajava.newId(nid), layout_width = "wrap_content", layout_height = "wrap_content", __onFinish = function(v) pcall(function() v:setBackRadius(DP3) v:setThumbColor(swcThumb) v:setBackColor(swcDraw) v:setThumbRadius(DP3) v:setThumbRangeRatio(2.2) v:setThumbMargin(marg) end) table.insert(switchs, v) if name == "音键隐藏UI" then volKey = true v:post(function() v:setChecked(true) end) end luajava.setInterface(v, "setOnCheckedChangeListener", { onCheckedChanged = function(view, isc) if isc then local func = swfuncs[nid][1] or function() end luajava.startThread(func) else local func = swfuncs[nid][2] or function() end luajava.startThread(func) end end }) end, } } } end function MXT.seek(name, bian, smin, smax, nows) _ENV[bian] = nows local minValue = tonumber(smin) local maxValue = 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_height = "wrap_content", layout_marginTop = "5dp", layout_marginBottom = "5dp", layout_marginLeft = "2dp", layout_marginRight = "2dp", gravity = "center_vertical", { TextView, padding = {"10dp", "10dp", "0dp", "10dp"}, gravity = "top", textColor = 0xFF8A4A4A, textSize = "13sp", text = name, id = luajava.newId(names), layout_width = "80dp", __onFinish = function(v) setFont(v) end, }, { Slider, thumbHeight = "52dp", trackHeight = "10dp", trackStopIndicatorSize = "0dp", thumbTrackGapSize = "0dp", tickVisible = false, __onFinish = function(v) pcall(function() v:setCustomThumbDrawable(luajava.getBitmapDrawable("/storage/emulated/0/绘梨衣/小黄鸭")) end) table.insert(sliders, v) v:setTrackActiveTintList(ColorStateList({{}}, {0xFF8A4A4A})) v:setTrackInactiveTintList(ColorStateList({{}}, {0xFFDCA0A0})) v:setThumbTintList(ColorStateList({{}}, {0xFF8A4A4A})) luajava.setInterface(v, "addOnChangeListener", function(SeekBar, var2, var3) _ENV[bian] = var2 end) end, layout_width = "match_parent", id = luajava.newId(name .. "seekbar"), valueFrom = minValue, valueTo = maxValue, value = nows, stepSize = 1.0, } } end function MXT.check(cklist) if #cklist == 0 then return nil end local rest = { LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", layout_marginLeft = "2dp", layout_marginTop = "4dp", layout_marginRight = "2dp", layout_marginBottom = "4dp", elevation = "3dp", background = getVerticalBG({0xFFFAF9F9, 0xFFFAF9F9}, 20), gravity = "center", orientation = "vertical", } for i = 1, #cklist, 2 do local tempTable = { LinearLayout, layout_width = "match_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 table.insert(tempTable, MXT.intcheck(name, func1, func2)) else table.insert(tempTable, {LinearLayout, layout_width = "match_parent", layout_weight = 1}) end end table.insert(rest, tempTable) end return rest end function MXT.intcheck(name, func1, func2) local nid = name .. guid() local func = makeToggle(name, func1, func2, nid) if not name then name = "未设置" end return { LinearLayout, layout_width = "match_parent", layout_weight = 1, layout_height = "42dp", layout_marginTop = "1dp", layout_marginBottom = "1dp", layout_marginLeft = "2dp", layout_marginRight = "2dp", padding = "1dp", { LinearLayout, padding = "3dp", layout_width = "match_parent", layout_height = "wrap_content", gravity = "center_vertical", { CheckBox, id = luajava.newId(nid .. "t"), layout_width = "32dp", layout_height = "32dp", padding = "0dp", __onFinish = function(v) v:setButtonTintList(RadTint) end, onClick = function(v) luajava.newThread(function() func() end):start() end, }, { TextView, gravity = "left", text = name, textColor = 0xFF8A4A4A, textSize = "13sp", layout_width = "match_parent", layout_weight = 1, __onFinish = function(v) setFont(v) end, onClick = function() local v = luajava.getIdView(nid .. "t") v:setChecked(not v:isChecked()) luajava.newThread(function() func() end):start() end, }, } } end function MXT.alertView(title, view, positive, func) luajava.runUiThread(function() local alertBuilder = MaterialAlertDialogBuilder(context) if view then alertBuilder:setTitle(title):setView(view):setPositiveButton(positive or "确定", func) else alertBuilder:setTitle(title):setPositiveButton(positive or "确定", func) end alertBuilder:show() end) end function MXT.getedit(name) local editView = luajava.getIdValue(_ENV[name]) return editView and tostring(editView:getText()) or "" end function MXT.setedit(name, txt) txt = tostring(txt) luajava.runUiThread(function() local editView = luajava.getIdValue(_ENV[name]) if editView then editView:setText(txt) end end) end function MXT.edit(name, hint) _ENV[name] = name .. guid() if not hint then hint = "点击输入文字" end return { LinearLayout, layout_width = "match_parent", layout_height = "40dp", layout_marginTop = "5dp", layout_marginBottom = "5dp", layout_marginLeft = "2dp", layout_marginRight = "2dp", gravity = "center_vertical", { EditText, background = getButtonBG(), __onFinish = function(v) v:setHintTextColor(0xFFB09090) setFont(v) end, gravity = "center", hint = hint, textColor = 0xFF8A4A4A, textSize = "13sp", layout_height = "40dp", layout_marginRight = "0dp", layout_marginLeft = "0dp", id = luajava.newId(_ENV[name]), layout_width = "match_parent", } } end function MXT.radio(cklist) local rest = { LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", layout_marginLeft = "2dp", layout_marginRight = "2dp", gravity = "top", orientation = "vertical", } local startIndex = 1 if type(cklist[1]) == "string" then startIndex = 2 table.insert(rest, { TextView, gravity = "left", padding = "5dp", text = cklist[1], textSize = "13sp", textColor = 0xFF8A4A4A, layout_width = "match_parent", layout_height = "wrap_content", layout_marginLeft = "2dp", layout_marginRight = "2dp", __onFinish = function(v) setFont(v) end, }) end local group = { RadioGroup, layout_width = "match_parent", layout_height = "wrap_content", layout_marginLeft = "2dp", layout_marginTop = "4dp", layout_marginRight = "2dp", layout_marginBottom = "4dp", gravity = "top", orientation = "vertical", elevation = "2dp", background = getVerticalBG({0xFFFAF9F9, 0xFFFAF9F9}, 20, DP3, 0xFFF5E8E8), } for i = startIndex, #cklist do local name = cklist[i][1] or "未设置" local func = cklist[i][2] or function() end table.insert(group, { RadioButton, gravity = "center_vertical", text = name, textSize = "13sp", textColor = 0xFF8A4A4A, layout_width = "match_parent", layout_height = "wrap_content", layout_marginLeft = "2dp", layout_marginRight = "2dp", __onFinish = function(v) setFont(v) v:setButtonTintList(RadTint) end, onClick = function() luajava.startThread(func) end, }) end table.insert(rest, group) return rest end function MXT.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 { LinearLayout, layout_height = "wrap_content", layout_width = "match_parent", layout_marginLeft = "2dp", layout_marginRight = "2dp", gravity = "center", { ImageView, layout_height = height, layout_width = width, padding = pad, src = getImage(img), onClick = function() luajava.newThread(func):start() end, } } end function MXT.box(views) if type(views[1]) ~= "string" and type(views[1]) ~= "number" then gg.alert("MXT.box的table内第一个元素必须是string") return nil end local tid = "box" .. guid() boxes[tid] = {} boxes[tid][5] = false local function makeHeader(isOpen, iconRefKey) return { LinearLayout, layout_width = "match_parent", layout_height = "40dp", gravity = "center_vertical", layout_marginLeft = "2dp", layout_marginTop = "3dp", layout_marginRight = "2dp", layout_marginBottom = "3dp", background = getButtonBG(), onClick = function() visi(tid) end, { TextView, text = views[1], textSize = "13sp", layout_marginLeft = "10dp", layout_width = "match_parent", layout_weight = 1, textColor = 0xFF8A4A4A, gravity = "left", __onFinish = function(v) setFont(v) end, }, { LinearLayout, padding = {"0dp", "0dp", "10dp", "0dp"}, layout_width = "30dp", layout_height = "30dp", gravity = "center", { ImageView, padding = "1dp", src = luajava.getBitmapDrawable("/storage/emulated/0/绘梨衣/小熊"), layout_width = "24dp", layout_height = "24dp", __onFinish = function(v) if iconRefKey then boxes[tid][iconRefKey] = v end end, } } } end local firadio = { LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", layout_marginLeft = "2dp", layout_marginTop = "4dp", layout_marginRight = "2dp", layout_marginBottom = "4dp", orientation = "vertical", background = getButtonBG(), elevation = "2dp", __onFinish = function(v) boxes[tid][2] = Scene(v, boxes[tid][2]) boxes[tid][1] = Scene(v, boxes[tid][1]) boxes[tid][4] = luajava.new(TransitionSet) local bds = luajava.new(ChangeBounds) bds:setDuration(500) boxes[tid][4]:addTransition(bds) boxes[tid][4]:setDuration(500) end, } boxes[tid][1] = luajava.loadlayout({ LinearLayout, layout_width = "match_parent", layout_marginLeft = "2dp", layout_marginRight = "2dp", makeHeader(false, 3), }) local radios = { LinearLayout, orientation = "vertical", layout_width = "match_parent", } for i = 2, #views do radios[#radios + 1] = views[i] end boxes[tid][2] = luajava.loadlayout({ LinearLayout, layout_width = "match_parent", layout_marginLeft = "2dp", layout_marginRight = "2dp", orientation = "vertical", makeHeader(true, 6), radios }) table.insert(firadio, makeHeader(false, nil)) local radios2 = { LinearLayout, orientation = "vertical", layout_width = "match_parent", } for i = 2, #views do radios2[#radios2 + 1] = views[i] end return firadio end function MXT.menu(pages) curPage = 1 展开 = false local pageList = {} for k, v in pairs(pages) do if type(k) == "string" and type(v) == "table" then local order = tonumber(v[1]) or 999 local leftRaw = v[2] or {} local rightRaw = v[3] or {} local leftContent = {} local startIdx = 1 if type(leftRaw[1]) == "string" then startIdx = 2 end for j = startIdx, #leftRaw do table.insert(leftContent, leftRaw[j]) end table.insert(pageList, { name = k, order = order, left = leftContent, right = rightRaw, }) end end table.sort(pageList, function(a, b) return a.order < b.order end) local navItems = {} local leftPages = {} local rightPages = {} for i = 1, #pageList do table.insert(navItems, pageList[i].name) leftPages[pageList[i].name] = pageList[i].left rightPages[i] = pageList[i].right end MXT._navItems = navItems local layout = { 'ui.ViewPager', layout_height = 'fill_parent', layout_width = 'fill_parent', focusable = false, focusableInTouchMode = false, } for i = 1, #navItems do local leftCol = leftPages[navItems[i]] or {} local rightCol = rightPages[i] or {} local leftCols = { LinearLayout, layout_height = "wrap_content", layout_width = "match_parent", orientation = "vertical", } for k = 1, #leftCol do leftCols[#leftCols + 1] = leftCol[k] end local rightCols = { LinearLayout, layout_height = "wrap_content", layout_width = "match_parent", orientation = "vertical", } for k = 1, #rightCol do rightCols[#rightCols + 1] = rightCol[k] end layout[#layout + 1] = { LinearLayout, layout_height = "match_parent", layout_width = "match_parent", orientation = "horizontal", padding = {"4dp", "4dp", "4dp", "4dp"}, { ScrollView, layout_height = "match_parent", layout_width = "0dp", layout_weight = 1, layout_marginRight = "3dp", padding = {"6dp", "6dp", "6dp", "6dp"}, background = getVerticalBG({0xFFF5E8E8, 0xFFF5E8E8}, 20), leftCols, }, { ScrollView, layout_height = "match_parent", layout_width = "0dp", layout_weight = 1, layout_marginLeft = "3dp", padding = {"6dp", "6dp", "6dp", "6dp"}, background = getVerticalBG({0xFFF5E8E8, 0xFFF5E8E8}, 20), rightCols, }, } end local itemRows = {} for i = 1, #navItems do local idx = i local name = navItems[i] itemRows[#itemRows + 1] = { LinearLayout, layout_width = "match_parent", layout_height = "44dp", layout_marginTop = "2dp", layout_marginBottom = "2dp", layout_marginLeft = "2dp", layout_marginRight = "2dp", gravity = "center_vertical", orientation = "horizontal", onClick = function(v) MXT.controlWater(v, 300) if ViewPager then ViewPager:setCurrentItem(idx - 1, true) end end, __onFinish = function(v) navItemBgs[idx] = v end, { GifImageView, layout_width = "40dp", layout_height = "40dp", layout_marginLeft = "10dp", src = '/storage/emulated/0/绘梨衣/页面' .. idx, __onFinish = function(v) navIconViews[idx] = v pcall(function() local drawable = v:getDrawable() if drawable then drawable:start() end end) end, }, { TextView, text = name, textColor = 0xFFFFFFFF, textSize = "13sp", layout_marginLeft = "10dp", layout_width = "wrap_content", layout_height = "wrap_content", visibility = "gone", __onFinish = function(v) pageTitleViews[idx] = v setFont(v) end, }, } end local itemsContent = { LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", orientation = "vertical", } for i = 1, #itemRows do itemsContent[#itemsContent + 1] = itemRows[i] end navLayout = { FrameLayout, layout_width = "match_parent", layout_height = "wrap_content", padding = {"8dp", "4dp", "8dp", "4dp"}, { View, layout_width = "match_parent", layout_height = "44dp", layout_marginTop = "2dp", layout_marginBottom = "2dp", __onFinish = function(v) navIndicatorView = v local d = luajava.new(GradientDrawable) d:setShape(GradientDrawable.RECTANGLE) d:setCornerRadius(dpToPx(14)) d:setColor(0xFF8A4A4A) v:setBackground(d) end, }, itemsContent, } local isBuilt = false luajava.post(function() local ok, err = pcall(function() ViewPager = ui.ViewPager(layout) pcall(function() ViewPager:setOffscreenPageLimit(#navItems - 1) end) luajava.setInterface(ViewPager, 'addOnPageChangeListener', { onPageSelected = function(position) curPage = position + 1 highlight() end }) leftWindow = luajava.loadlayout({ LinearLayout, layout_width = "match_parent", layout_height = "match_parent", orientation = "vertical", background = getSidePanelBG("left"), ClipToOutline = true, alpha = 0, { LinearLayout, layout_width = "match_parent", layout_height = "52dp", orientation = "horizontal", gravity = "center_vertical", { LinearLayout, layout_width = "44dp", layout_height = "44dp", layout_marginLeft = "16dp", gravity = "center", orientation = "vertical", onClick = function(v) MXT.controlWater(v, 300) toggleNav() end, { View, layout_width = "16dp", layout_height = "2dp", __onFinish = function(v) local d = luajava.new(GradientDrawable) d:setShape(GradientDrawable.RECTANGLE) d:setColor(0xFFFFFFFF) d:setCornerRadius(dpToPx(1)) v:setBackground(d) end, }, { View, layout_width = "16dp", layout_height = "2dp", layout_marginTop = "3dp", __onFinish = function(v) local d = luajava.new(GradientDrawable) d:setShape(GradientDrawable.RECTANGLE) d:setColor(0xFFFFFFFF) d:setCornerRadius(dpToPx(1)) v:setBackground(d) end, }, { View, layout_width = "16dp", layout_height = "2dp", layout_marginTop = "3dp", __onFinish = function(v) local d = luajava.new(GradientDrawable) d:setShape(GradientDrawable.RECTANGLE) d:setColor(0xFFFFFFFF) d:setCornerRadius(dpToPx(1)) v:setBackground(d) end, }, }, { TextView, text = "Sakura最好了", textColor = 0xFFFFFFFF, textSize = "12sp", layout_marginLeft = "4dp", layout_width = "wrap_content", layout_height = "wrap_content", visibility = "gone", __onFinish = function(v) sakuraTitleView = v setFont(v) end, }, }, { ScrollView, layout_width = "match_parent", layout_height = "match_parent", navLayout, }, }) rightWindow = luajava.loadlayout({ FrameLayout, layout_width = "match_parent", layout_height = "match_parent", background = getSidePanelBG("right"), ClipToOutline = true, alpha = 0, { FrameLayout, layout_width = "match_parent", layout_height = "match_parent", __onFinish = function(v) startupPageView = v end, { ImageView, layout_width = "match_parent", layout_height = "match_parent", src = getBG(), __onFinish = function(v) local ImageView = luajava.bindClass("android.widget.ImageView") if gg.getWindowOrientation() == 0 then v:setScaleType(ImageView.ScaleType.MATRIX) v:post(function() local drawable = v:getDrawable() if not drawable then return end local dW = drawable:getIntrinsicWidth() local dH = drawable:getIntrinsicHeight() local vW = v:getWidth() local vH = v:getHeight() if vW == 0 or vH == 0 then return end local scale = math.max(vW / dW, vH / dH) * 1.2 local matrix = luajava.newInstance("android.graphics.Matrix") matrix:setScale(scale, scale) local dx = (vW - dW * scale) / 2 local dy = (vH - dH * scale) / 2 matrix:postTranslate(dx, dy) v:setImageMatrix(matrix) end) else v:setScaleType(ImageView.ScaleType.FIT_XY) end end, }, { LinearLayout, layout_width = tostring(190) .. "dp", layout_height = tostring(100) .. "dp", orientation = "vertical", layout_gravity = "center", rotation = 343, rotationY = 29, rotationX = 11, cameraDistance = 11358, gravity = "center", background = "#00000000", __onFinish = function(v) local lp = v:getLayoutParams() if gg.getWindowOrientation() == 0 then v:setRotation(0) v:setRotationY(0) v:setRotationX(0) lp.width = dpToPx(170) lp.height = dpToPx(86) else lp.width = dpToPx(190) lp.height = dpToPx(100) end v:setLayoutParams(lp) v:setTranslationY(dpToPx(75)) v:setTranslationX(dpToPx(0)) end, { LinearLayout, layout_width = "match_parent", layout_height = "wrap_content", orientation = "vertical", gravity = "center_horizontal", { TextView, layout_marginTop = "4dp", text = "正在检查资源", textSize = "12sp", textColor = 0xFF8A4A4A, gravity = "center", layout_width = "match_parent", layout_height = "wrap_content", __onFinish = function(v) startupStatusView = v setFont(v) end, }, { TextView, layout_marginTop = "6dp", text = "", textSize = "10sp", textColor = 0xFF8A4A4A, gravity = "center", layout_width = "match_parent", layout_height = "wrap_content", __onFinish = function(v) startupDiaryView = v setFont(v) end, }, { LinearProgressIndicator, layout_marginTop = "14dp", layout_width = "match_parent", layout_height = "6dp", indeterminate = true, __onFinish = function(v) startupProgressView = v v:setIndicatorColor({0xFF8A4A4A, 0xFF631D1A, 0xFFDCA0A0}) v:setIndeterminateAnimationType(0) end, }, } } }, { LinearLayout, layout_width = "match_parent", layout_height = "match_parent", orientation = "vertical", visibility = "gone", alpha = 0, background = getVerticalBG({0xFFFAF9F9, 0xFFFAF9F9}, 0), __onFinish = function(v) contentPageView = v end, ViewPager } }) if _ENV['MXT.toast'] == nil then _ENV['MXT.toast'] = luajava.loadlayout({ FrameLayout, id = "toastlay", layout_height = "wrap_content", layout_width = "wrap_content", }) end if _ENV['MXT.toast2'] == nil then _ENV['MXT.toast2'] = luajava.loadlayout({ LinearLayout, id = "toast2lay", orientation = 'vertical', layout_height = "wrap_content", layout_width = "wrap_content", }) end cacheCols() highlight() end) if not ok then luajava.startThread(function() end) end isBuilt = true end) while not isBuilt do if tuichu == 1 then return end gg.sleep(50) end function MXT.toastspar() local prm = luajava.new(WindowManager.LayoutParams) if Build.VERSION.SDK_INT >= 26 then prm.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY else prm.type = WindowManager.LayoutParams.TYPE_PHONE end prm.format = PixelFormat.RGBA_8888 prm.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE prm.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL prm.width = dpToPx(260) prm.height = dpToPx(70) prm.x = 0 prm.y = 0 return prm end function MXT.toastspar2() local prm = luajava.new(WindowManager.LayoutParams) if Build.VERSION.SDK_INT >= 26 then prm.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY else prm.type = WindowManager.LayoutParams.TYPE_PHONE end prm.format = PixelFormat.RGBA_8888 prm.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE prm.gravity = Gravity.BOTTOM | Gravity.RIGHT prm.width = prm.WRAP_CONTENT prm.height = prm.WRAP_CONTENT prm.x = dpToPx(16) prm.y = dpToPx(10) return prm end local function invoke() local initContentWidth = rightWindowWidth setParams(initContentWidth) local function switchStartupToContent() if startupDone then return end startupDone = true uiVisible = true luajava.runUiThread(function() if startupPageView then startupPageView:animate():alpha(0):setDuration(500):withEndAction(toRunnable(function() startupPageView:setVisibility(View.GONE) end)):start() end if contentPageView then contentPageView:setVisibility(View.VISIBLE) contentPageView:setAlpha(0) contentPageView:animate():alpha(1):setDuration(500):start() end pcall(function() window:addView(leftWindow, leftWindowParams) end) singleIn(leftWindow, -(collapsedW + dpToPx(16))) lastOrient = gg.getWindowOrientation() if contentPageView then contentPageView:post(function() if gg.getWindowOrientation() == 0 then mergeCols(true) end end) end if topToggleWindow then topToggleWindow:setVisibility(View.VISIBLE) topToggleWindow:setAlpha(0) topToggleWindow:setTranslationY(-dpToPx(20)) topToggleWindow:animate() :alpha(1) :translationY(0) :setDuration(400) :setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) :start() end end) fixShadow() end local function startStartupSequence() luajava.startThread(function() gg.sleep(1000) if tuichu == 1 then return end luajava.runUiThread(function() if startupStatusView then startupStatusView:setText("资源检查完毕") end if startupProgressView then pcall(function() startupProgressView:hide() end) startupProgressView:setVisibility(View.GONE) end if startupDiaryView then startupDiaryView:setText('"04.24,和Sakura去东京天空树,世界上暖和的地方在天空树的顶上。"\n"04.26,和Sakura去明治神宫,有人在那里举办婚礼。"') startupDiaryView:setAlpha(0) startupDiaryView:animate():alpha(1):setDuration(600):start() end end) gg.sleep(5000) if tuichu == 1 then return end luajava.runUiThread(function() if startupDiaryView then startupDiaryView:animate():alpha(0):setDuration(400):withEndAction(toRunnable(function() startupDiaryView:setText('"04.25,和Sakura去迪士尼,鬼屋很可怕,但是有Sakura在,所以不可怕。"\n"Sakura最好了。"') startupDiaryView:animate():alpha(1):setDuration(600):start() end)):start() end end) gg.sleep(5000) if tuichu == 1 then return end switchStartupToContent() end) end local function addStartupWindow() window:addView(rightWindow, rightWindowParams) singleIn(rightWindow, rightWindowParams.width + dpToPx(16), startStartupSequence) end local handler = luajava.getHandler() handler:post(luajava.getRunnable(addStartupWindow)) if _ENV['MXT.toast'] ~= nil then MXT.toastpar = MXT.toastspar() local function addToastWindow() pcall(function() window:addView(_ENV['MXT.toast'], MXT.toastpar) end) end luajava.getHandler():post(luajava.getRunnable(addToastWindow)) end if _ENV['MXT.toast2'] ~= nil then MXT.toastpar2 = MXT.toastspar2() local function addToastWindow2() pcall(function() window:addView(_ENV['MXT.toast2'], MXT.toastpar2) end) end luajava.getHandler():post(luajava.getRunnable(addToastWindow2)) end topToggle() end invoke() gg.setVisible(false) setOnExitListener(function() tuichu = 1 luajava.setFloatingWindowHide(false) end) luajava.setFloatingWindowHide(true) volKey = true uiVisible = true qhkai = 0 function toggleUI() if not startupDone or isToggling then return end isToggling = true local targetVisible = not uiVisible uiVisible = targetVisible luajava.runUiThread(function() if MXT.syncTopToggleState then MXT.syncTopToggleState(targetVisible) end end) if targetVisible then dualIn(function() isToggling = false end) else dualOut(function() isToggling = false end) end end while true do if tuichu == 1 then break end if volKey then listenVol(toggleUI) end checkScreen() local orientation = gg.getWindowOrientation() if orientation ~= lastOrient then lastOrient = orientation if not startupDone and startupPageView then luajava.runUiThread(function() pcall(function() local imgView = startupPageView:getChildAt(0) local textLayout = startupPageView:getChildAt(1) if imgView then imgView:setImageDrawable(getBG()) local ImageView = luajava.bindClass("android.widget.ImageView") if orientation == 0 then imgView:setScaleType(ImageView.ScaleType.MATRIX) imgView:post(function() local drawable = imgView:getDrawable() if not drawable then return end local dW = drawable:getIntrinsicWidth() local dH = drawable:getIntrinsicHeight() local vW = imgView:getWidth() local vH = imgView:getHeight() if vW == 0 or vH == 0 then return end local scale = math.max(vW / dW, vH / dH) * 1.2 local matrix = luajava.newInstance("android.graphics.Matrix") matrix:setScale(scale, scale) local dx = (vW - dW * scale) / 2 local dy = (vH - dH * scale) / 2 matrix:postTranslate(dx, dy) imgView:setImageMatrix(matrix) end) else imgView:setScaleType(ImageView.ScaleType.FIT_XY) end end if textLayout then if orientation == 0 then textLayout:setRotation(0) textLayout:setRotationY(0) textLayout:setRotationX(0) else textLayout:setRotation(343) textLayout:setRotationY(29) textLayout:setRotationX(11) end textLayout:setTranslationY(dpToPx(75)) textLayout:setTranslationX(dpToPx(0)) end end) end) end if orientation == 0 then luajava.runUiThread(function() mergeCols(true) rightWindowParams.width = colW rightWindowParams.x = math.max(0, math.floor(dwidth - colW)) pcall(function() window:updateViewLayout(rightWindow, rightWindowParams) end) end) else luajava.runUiThread(function() if not 展开 then mergeCols(false) end local targetW = getWidth(展开) rightWindowParams.width = targetW rightWindowParams.x = math.max(0, math.floor(dwidth - targetW)) pcall(function() window:updateViewLayout(rightWindow, rightWindowParams) end) end) end end gg.sleep(120) end luajava.post(function() pcall(function() window:removeView(_ENV['MXT.toast']) end) pcall(function() window:removeView(_ENV['MXT.toast2']) end) pcall(function() window:removeView(leftWindow) end) pcall(function() window:removeView(rightWindow) end) pcall(function() window:removeView(topToggleWindow) end) end) luajava.setFloatingWindowHide(false) gg.setVisible(true) end function MXT.video(videoPath, cornerRadiusDp) local cornerRadiusPx = dpToPx(cornerRadiusDp or 10) local textureId = "texture" .. guid() local videoList = { videoPath, videoPath .. "2", } local currentIndex = 1 local mediaPlayer = nil local currentSurface = nil local isSwitching = false local containerRef = nil local textureViewRef = nil local function updateHeight(videoW, videoH) if not textureViewRef or not containerRef then return end if videoW <= 0 or videoH <= 0 then return end local containerW = containerRef:getWidth() if containerW > 0 then local newHeight = math.floor(containerW * videoH / videoW) local lp = textureViewRef:getLayoutParams() lp.height = newHeight textureViewRef:setLayoutParams(lp) end end local function doPlayNext() if isSwitching then return end isSwitching = true currentIndex = currentIndex + 1 if currentIndex > #videoList then currentIndex = 1 end if not textureViewRef or not mediaPlayer then isSwitching = false return end local fadeOut = ObjectAnimator:ofFloat(textureViewRef, "alpha", {1, 0}) fadeOut:setDuration(300) fadeOut:setInterpolator(luajava.newInstance("android.view.animation.AccelerateInterpolator")) luajava.setInterface(fadeOut, "addListener", { onAnimationEnd = function(anim) pcall(function() mediaPlayer:reset() mediaPlayer:setDataSource(videoList[currentIndex]) mediaPlayer:setLooping(false) mediaPlayer:setVolume(0, 0) if currentSurface then mediaPlayer:setSurface(currentSurface) end mediaPlayer:prepareAsync() end) end }) fadeOut:start() end return { FrameLayout, layout_width = "match_parent", layout_height = "wrap_content", layout_marginLeft = "4dp", layout_marginRight = "4dp", layout_marginTop = "6dp", layout_marginBottom = "6dp", onClick = function(v) MXT.controlWater(v, 200) doPlayNext() end, __onFinish = function(container) containerRef = container local bg = luajava.new(GradientDrawable) bg:setShape(GradientDrawable.RECTANGLE) bg:setCornerRadius(cornerRadiusPx) bg:setColor(0xFF000000) container:setBackground(bg) pcall(function() container:setClipToOutline(true) end) end, { TextureView, id = luajava.newId(textureId), layout_width = "match_parent", layout_height = "1dp", __onFinish = function(textureView) textureViewRef = textureView mediaPlayer = luajava.newInstance("android.media.MediaPlayer") mediaPlayer:setAudioAttributes(luajava.newInstance("android.media.AudioAttributes$Builder"):setUsage(luajava.bindClass("android.media.AudioAttributes").USAGE_MEDIA):setContentType(luajava.bindClass("android.media.AudioAttributes").CONTENT_TYPE_MOVIE):setAllowedCapturePolicy(luajava.bindClass("android.media.AudioAttributes").ALLOW_CAPTURE_BY_NONE):build()) mediaPlayer:setVolume(0, 0) luajava.setInterface(textureView, "setSurfaceTextureListener", { onSurfaceTextureAvailable = function(surfaceTexture, width, height) currentSurface = luajava.newInstance("android.view.Surface", surfaceTexture) mediaPlayer:setSurface(currentSurface) pcall(function() mediaPlayer:setDataSource(videoList[currentIndex]) mediaPlayer:setLooping(false) mediaPlayer:setVolume(0, 0) mediaPlayer:prepareAsync() end) end, onSurfaceTextureSizeChanged = function(surfaceTexture, width, height) end, onSurfaceTextureDestroyed = function(surfaceTexture) pcall(function() mediaPlayer:stop() mediaPlayer:release() end) mediaPlayer = nil return true end, onSurfaceTextureUpdated = function(surfaceTexture) end, }) luajava.setInterface(mediaPlayer, "setOnPreparedListener", { onPrepared = function(mp) local videoW = mp:getVideoWidth() local videoH = mp:getVideoHeight() updateHeight(videoW, videoH) textureView:setAlpha(0) mp:start() local fadeIn = ObjectAnimator:ofFloat(textureView, "alpha", {0, 1}) fadeIn:setDuration(300) fadeIn:setInterpolator(luajava.newInstance("android.view.animation.DecelerateInterpolator")) luajava.setInterface(fadeIn, "addListener", { onAnimationEnd = function(anim) isSwitching = false end }) fadeIn:start() end }) luajava.setInterface(mediaPlayer, "setOnCompletionListener", { onCompletion = function(mp) doPlayNext() end }) luajava.setInterface(mediaPlayer, "setOnErrorListener", { onError = function(mp, what, extra) gg.sleep(1000) doPlayNext() return true end }) end, }, } end pic_heir = getIcon("heir") pic_heiright = getIcon("FishBone") MXT.menu({ ['首页'] = {"1", {--第1页面左侧栏 MXT.video("/storage/emulated/0/绘梨衣/视频", 10), MXT.button("选择进程", function() gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") gg.setProcessX() end, function() end), MXT.button("大厅初始化", function() function qxbb(qxbb1) local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x1970} local ttt = S_Pointer(t, tt, true ) gg.addListItems( { { address = ttt, flags = 4, value = qxbb1, freeze = true } }) end function szbb(szbb1) local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x1974} local ttt = S_Pointer(t, tt, true ) gg.addListItems( { { address = ttt, flags = 4, value = szbb1, freeze = true } }) end function xingshen() ue4 = staticstart( {"libUE4.so:bss", "Cb", 1}) nmsl = xing(ue4, {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x0}) end function modify_item(item_type, value) xingshen() for offset = 0x0, 0x999, 0x3C do if getvalue(nmsl + 0x8 + offset, 4) == item_type then setvalue(nmsl + 0x0 + offset, 4, value) end end end function lx(kjsm) modify_item(1, kjsm) end -- 脸部 function tf(kjsm) modify_item(2, kjsm) end -- 头发 function ts(kjsm) modify_item(3, kjsm) end -- 头饰 function mz(kjsm) modify_item(4, kjsm) end -- 面罩 function yf(kjsm) modify_item(5, kjsm) end -- 衣服 function kz(kjsm) modify_item(6, kjsm) end -- 裤子 function xz(kjsm) modify_item(7, kjsm) end -- 鞋子 function bb(kjsm) modify_item(8, kjsm) end -- 背包 function tk(kjsm) modify_item(9, kjsm) end -- 头盔 function yz(kjsm) modify_item(12, kjsm) end -- 眼罩 function hj(kjsm) modify_item(10, kjsm) end -- 盔甲或者手套 function ny(kjsm) modify_item(24, kjsm) end -- 内衣 function nk(kjsm) modify_item(25, kjsm) end -- 内裤 function 衣服防一秒() modify_item(5, 1404153) end -- 衣服 (固定值) function cx88(yp, sc, qk, wb, dj, qt, bj1, bj2, bj3, bj4, bj5, bj6, bj7) mk = gg.getRangesList("libUE4.so:bss")[1].start add = RUI(RUI(RUI(RUI(RUI(RUI(mk + 0x562F70) + 0x30) + 0x4B8) + 0x2608) + 0x5D8) + 0x820) offsets = {0x11C, 0x4, 0x2C, 0x54, 0x7C, 0xA4, 0x194} setvalue(add + offsets[1], 4, sc) setvalue(add + offsets[2], 4, qk) setvalue(add + offsets[3], 4, wb) setvalue(add + offsets[4], 4, dj) setvalue(add + offsets[5], 4, qt) setvalue(add + offsets[7], 4, sc) bjmh = add + offsets[6] if readD(bjmh) == 203001 then setvalue(bjmh, 4, bj1) end if readD(bjmh) == 203002 then setvalue(bjmh, 4, bj2) end if readD(bjmh) == 203003 then setvalue(bjmh, 4, bj3) end if readD(bjmh) == 203014 then setvalue(bjmh, 4, bj4) end if readD(bjmh) == 203004 then setvalue(bjmh, 4, bj5) end if readD(bjmh) == 203015 then setvalue(bjmh, 4, bj6) end if readD(bjmh) == 203005 then setvalue(bjmh, 4, bj7) end gg.sleep(3000) setvalue(add + offsets[1], 4, 0) end function shochi() --手持链条 local mk = gg.getRangesList("libUE4.so:bss")[1] and gg.getRangesList("libUE4.so:bss")[1].start or 0 if mk == 0 then return 0 end local step1 = RUI(mk + 0x562F70) local step2 = RUI(step1 + 0x30) local step3 = RUI(step2 + 0x4B8) local step4 = RUI(step3 + 0x2608) local step5 = RUI(step4 + 0x5D8) local add = RUI(step5 + 0x820) if add == 0 then return 0 end return readD(add + 0x194) end function delete_old_freeze(target_addr) local list = gg.getListItems() for i, item in pairs(list) do if item.address == target_addr then gg.removeListItems({i}) break end end end -- 清理所有脚本创建的冻结项(退出时调用) local function clean_all_freeze() local list = gg.getListItems() local to_remove = {} for i, item in pairs(list) do -- 匹配脚本创建的冻结项描述("旧"/"新") if item.description == "旧" or item.description == "新" then table.insert(to_remove, i) end end if #to_remove > 0 then gg.removeListItems(to_remove) toast.success("已清理所有冻结项") end end gg.alert("初始化成功") end), MXT.button("防闪", function() if gg.getRangesList("libanogs.so")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x51FA80; -- 数值地址:0x7174D7DA88 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -698416192, freeze = true, }, }) gg.toast("开启成功") end wow() gg.playMusic("https://cccimg.com/view.php/cab8d4feddd223def7f9d3e3ee5c8ef8.mp3")---语音 end), MXT.button("全局离线", function() 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 --[1].地址:754FDD2978 数值:67240454 so=gg.getRangesList('libgcloud.so')[1].start py=0x7A9978 setvalue(so+py,4,-698416192) --[1].地址:754FDD3090 数值:67897348 so=gg.getRangesList('libgcloud.so')[1].start py=0x7AA090 setvalue(so+py,4,-698416192) --[1].地址:754FDD3490 数值:67374088 so=gg.getRangesList('libgcloud.so')[1].start py=0x7AA490 setvalue(so+py,4, -698416192) 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 --[1].地址:71B29FD978 数值:67240454 so=gg.getRangesList('libgcloud.so')[1].start py=0x7A9978 setvalue(so+py,4, -698416192) --[1].地址:71B29FE090 数值:67897348 so=gg.getRangesList('libgcloud.so')[1].start py=0x7AA090 setvalue(so+py,4,-698416192) --[1].地址:71B29FE490 数值:67374088 so=gg.getRangesList('libgcloud.so')[1].start py=0x7AA490 setvalue(so+py,4,-698416192) gg.playMusic("https://cccimg.com/view.php/cab8d4feddd223def7f9d3e3ee5c8ef8.mp3")---语音 end), }, }, ['衣服美化'] = {"2", {--第2页面左侧栏 MXT.box({"套装", MXT.button("衣服改原值(结算开)", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x5524F0,0x30,0x4B8,0x2E40,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1400129}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("魔心爱神", function() 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(0x269CDB36) 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A 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 D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD 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 getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function iceEdit(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value t[1].freeze=true gg.addListItems(t) end function breakice(addr,type) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].freeze=false gg.addListItems(t) end function getMapRanges() local ranges = {} local r_list = {} local _index = 1 local library = gg.getRangesList('^/data/*.so*$') for index, map in ipairs(library) do if map.type:sub(2, 2) == "w" or map.type == "r-xp" then local name = map.internalName local state = map.state local count = map.count if not r_list[name] then r_list[name] = {} end if not r_list[name][state] then r_list[name][state] = {0, _index} end r_list[name][state][1] = r_list[name][state][1] + 1 r_list[name][state][2] = _index map.count = r_list[name][state][1] table.insert(ranges, map) _index = _index + 1 end end return ranges, r_list end function staticstart(map) local ranges = getMapRanges() if not map[3] then map[3] = 1 end for index, value in ipairs(ranges) do local name = value.internalName:gsub("^.*/", "") if map[1] == name and map[2] == value.state and map[3] == value.count then return value.start end end end function xing(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr end --0x5D0470,0x30,0x450,0x2D08,0x388,0x78 function xingshen() ue4=staticstart({"libUE4.so:bss", "Cb", 1}) nmsl=xing(ue4,{0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}) end function hj(kjsm)--防弹衣 xingshen() for qckjsm=0x0,0x196,0x38 do if getvalue(nmsl+0x11c+qckjsm,4)>=503001 and getvalue(nmsl+0x11c+qckjsm,4)<=503200 then setvalue(nmsl+0x118+qckjsm,4,kjsm) end end end hj(0) function yf(kjsm)--衣服 xingshen() for qckjsm=0x0,0x999,0x38 do if getvalue(nmsl+0x8+qckjsm,4) == 5 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end yf(1407921) gg.toast("美化成功") end), MXT.button("密渊领主", function() 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(0x269CDB36) 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A 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 D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD 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 getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function iceEdit(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value t[1].freeze=true gg.addListItems(t) end function breakice(addr,type) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].freeze=false gg.addListItems(t) end function getMapRanges() local ranges = {} local r_list = {} local _index = 1 local library = gg.getRangesList('^/data/*.so*$') for index, map in ipairs(library) do if map.type:sub(2, 2) == "w" or map.type == "r-xp" then local name = map.internalName local state = map.state local count = map.count if not r_list[name] then r_list[name] = {} end if not r_list[name][state] then r_list[name][state] = {0, _index} end r_list[name][state][1] = r_list[name][state][1] + 1 r_list[name][state][2] = _index map.count = r_list[name][state][1] table.insert(ranges, map) _index = _index + 1 end end return ranges, r_list end function staticstart(map) local ranges = getMapRanges() if not map[3] then map[3] = 1 end for index, value in ipairs(ranges) do local name = value.internalName:gsub("^.*/", "") if map[1] == name and map[2] == value.state and map[3] == value.count then return value.start end end end function xing(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr end --0x5D0470,0x30,0x450,0x2D08,0x388,0x78 function xingshen() ue4=staticstart({"libUE4.so:bss", "Cb", 1}) nmsl=xing(ue4,{0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}) end function hj(kjsm)--防弹衣 xingshen() for qckjsm=0x0,0x196,0x38 do if getvalue(nmsl+0x11c+qckjsm,4)>=503001 and getvalue(nmsl+0x11c+qckjsm,4)<=503200 then setvalue(nmsl+0x118+qckjsm,4,kjsm) end end end hj(0) function yf(kjsm)--衣服 xingshen() for qckjsm=0x0,0x999,0x38 do if getvalue(nmsl+0x8+qckjsm,4) == 5 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end yf(1406971) gg.toast("美化成功") end), MXT.button("诡宴魅灵套装", function() 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(0x269CDB36) 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A 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 D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD 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 getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function iceEdit(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value t[1].freeze=true gg.addListItems(t) end function breakice(addr,type) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].freeze=false gg.addListItems(t) end function getMapRanges() local ranges = {} local r_list = {} local _index = 1 local library = gg.getRangesList('^/data/*.so*$') for index, map in ipairs(library) do if map.type:sub(2, 2) == "w" or map.type == "r-xp" then local name = map.internalName local state = map.state local count = map.count if not r_list[name] then r_list[name] = {} end if not r_list[name][state] then r_list[name][state] = {0, _index} end r_list[name][state][1] = r_list[name][state][1] + 1 r_list[name][state][2] = _index map.count = r_list[name][state][1] table.insert(ranges, map) _index = _index + 1 end end return ranges, r_list end function staticstart(map) local ranges = getMapRanges() if not map[3] then map[3] = 1 end for index, value in ipairs(ranges) do local name = value.internalName:gsub("^.*/", "") if map[1] == name and map[2] == value.state and map[3] == value.count then return value.start end end end function xing(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end return addr end --0x5D0470,0x30,0x450,0x2D08,0x388,0x78 function xingshen() ue4=staticstart({"libUE4.so:bss", "Cb", 1}) nmsl=xing(ue4,{0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}) end function hj(kjsm)--防弹衣 xingshen() for qckjsm=0x0,0x196,0x38 do if getvalue(nmsl+0x11c+qckjsm,4)>=503001 and getvalue(nmsl+0x11c+qckjsm,4)<=503200 then setvalue(nmsl+0x118+qckjsm,4,kjsm) end end end hj(0) function yf(kjsm)--衣服 xingshen() for qckjsm=0x0,0x999,0x38 do if getvalue(nmsl+0x8+qckjsm,4) == 5 then setvalue(nmsl+0x0+qckjsm,4,kjsm) end end end yf(1407695) gg.toast("美化成功") end), MXT.button("不知名圣装", function() function sleep(ms) local start = os.clock() while os.clock() - start < (ms / 1000) do -- 循环等待 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- 第一步:执行某个操作 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x168} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 0}}) gg.toast("IDA") end), MXT.button("明日香", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406387}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("次元歌姬圣装", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407870}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("冬之光辉圣装", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407758}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("曙光女帝", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407558}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("旌旗卓维尔", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407625}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("苍翠仙子", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407295}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("凶萌兽娘", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407636}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("星舰提督", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407631}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("血狱猎人", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407572}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("巨人阿尔敏", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407601}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("巨人套装2", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407605}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("巨人套装3", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407598}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("三笠", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}--衣服 local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407599}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("利威尔", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}--衣服 local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407602}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("艾伦", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}--衣服 local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407597}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("阿尔敏", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}--衣服 local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407600}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("暗烬天使", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value =1407275}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("曙光弗洛拉", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407100}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("金尊法老", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406469}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("金辉艳后", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406475}})----衣服 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("千面诡皇", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406638}})----衣服 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("血鸦圣装", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1405870}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("废墟猎手", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value =1405163 }}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("魅夜死神", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1407387, freeze = true}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3")--1407425 end), MXT.button("包臀裙黑丝", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 40605012}})----头发链条 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1405069}})----衣服 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("零款战斗服", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406386}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("真理战斗服", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406388}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("真嗣战斗服", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406385}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("薰战斗服", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406389}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("木乃伊(白)", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1400687}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("木乃伊(蓝)", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406891}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("木乃伊(黄)", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1405623}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("木乃伊(红)", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78}---衣服 local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407277}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("孙悟空", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406327}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("小丑鱼", function() 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 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1405238, freeze = true}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("小丧尸", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407196}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("大丧尸", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407195}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("女丧尸", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407194}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("星彩魅魔", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1410065}})----头部链条 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406391}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("极乐愚者", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407079}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("冰蝶新娘", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407049}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("嗜血龙魇", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 1103012010, freeze = true}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("萌兽宝宝", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1406506}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("妙音猫粮", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1407261}})--衣服 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78 } local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value =1410640}})--头发40601001 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("海洋之王", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1405983}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("冰雪晶核", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2F80,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1400782}})----衣服链条 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), }), MXT.box({"隐藏头包", MXT.button("隐藏背包", function() bb(0) gg.playMusic("https://pan.jl8.top/view.php/d7a4e0dc418cfafd2be9b023775e237c.mp3") end), MXT.button("隐藏头盔", function() tk(0) gg.playMusic("https://pan.jl8.top/view.php/d7a4e0dc418cfafd2be9b023775e237c.mp3") end), }), MXT.box({"混搭专区", MXT.button("衣服改原值", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x5524F0,0x30,0x4B8,0x2E40,0x3E8,0x78} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1400129}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("霜棠混搭", function() tf(40604012) ts(401035)--隐藏 yz(1404198) yf(1400324) kz(1404050) xz(1404051) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("梦见混搭", function() tf(40604012) ts(1402223)--隐藏 yz(1404198) mz(1400127)--小丑鼻子 yf(1404207) kz(1404160) xz(1404423) bb(1501003629)--背包 gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("秋川混搭", function() ts(1400426) yz(1404198) mz(1400165) yf(1400324) kz(1400050) xz(1404423) bb(1501002009) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("逆光混搭", function() ts(1402223) yf(403177) tf(40604012) kz(1404050) xz(1400371) mz(1400165) yz(1404198) bb(1501006069) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("小念混搭", function() tf(1404366) yf(1404127) mz(1400165) yz(1404198) kz(1404160) xz(1404423) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("冰源混搭", function() tf(1410085) ts(1402223)--隐藏 yf(1400324) bb(1501003081) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("势霖混搭", function() tf(1410480) ts(1402223)--隐藏 yz(1404198) yf(1400708) kz(1404152) xz(1404423) st(452001) mz(1400165) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("晚安混搭", function() tf(40604012) ts(1402223)--隐藏 yz(1403326) kz(1400050) xz(40604012) bb(1501003243) mz(1400165) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("故纵混搭", function() tf(1414480) ts(1402223)--隐藏 yz(1404198) mz(1400165)--小丑鼻子 yf(1404133) kz(1404050) xz(1404051) st(452001) gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), MXT.button("身法荣混搭", function() bb(1501003276)--背包 tk(1502002014)--地狱骑士头盔 mz(0)--隐藏 yz(1403627)--音乐之王眼镜 mz(474031)--豹皮面罩 kz(404049)--s1战斗裤 gg.playMusic("https://cccimg.com/view.php/0ee4fffefb33ae35191857297884c9a6.mp3") end), }), }, {--第2页面右侧栏 }, }, ['枪械美化'] = {"3", {--第3页面左侧栏 MXT.box({"AUG", MXT.button("枪械改原值", function() 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end local t = {"libUE4.so:bss", "Cb"} local tt = {0x5D0470,0x30,0x440,0x29A0,0x730,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 10100400}})--枪 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("九尾", function() --九尾 function sleep(ms) local start = os.clock() while os.clock() - start < (ms / 1000) do -- 循环等待 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- 第一步:执行某个操作 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101006106}}) gg.toast("请把配件脱下来再装上") end), MXT.button("破军狂鸣", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101006075}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end) }), MXT.box({"MK14", MXT.button("龙吟", function() --龙吟 function sleep(ms) local start = os.clock() while os.clock() - start < (ms / 1000) do -- 循环等待 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- 第一步:执行某个操作 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1103007028}}) gg.toast("请把配件脱下来再装上") end), MXT.button("星云之力", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1103007020}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("凌霄凤鸣", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1103007029}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), }), MXT.box({"MG3", MXT.button("凤鸣", function() --凤鸣 function sleep(ms) local start = os.clock() while os.clock() - start < (ms / 1000) do -- 循环等待 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- 第一步:执行某个操作 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1105010019}}) gg.toast("请把配件脱下来再装上") end), }), MXT.box({"M416", MXT.button("冰霜", function() --冰霜 function sleep(ms) local start = os.clock() while os.clock() - start < (ms / 1000) do -- 循环等待 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- 第一步:执行某个操作 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004046}}) gg.toast("请把配件脱下来再装上") end), MXT.button("银紫战姬", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1103007032}})--枪 gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("愚人小丑", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004062}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("潮鸣宫廷", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004162}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("武魂宗师", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004201}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("机魂忍神", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004218}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("庇护之潮", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004208}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("封印幽冥", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004225}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("虎啸丹青", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101004235}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), }), MXT.box({"AK", MXT.button("星海", function() --Ak星海 function sleep(ms) local start = os.clock() while os.clock() - start < (ms / 1000) do -- 循环等待 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- 第一步:执行某个操作 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001213}}) gg.toast("请把配件脱下来再装上") end), MXT.button("沙影神国", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001265}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("光暗圣殿(神月)", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001249}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("光暗圣殿(金羽)", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001256}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("冰霜核心", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001089}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("部落之王", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001174}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("俏皮兔宝", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001103}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("决胜之日", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101001242}})---- gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), }), MXT.box({"M762", MXT.button("铂金骸骨", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101008154}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("森白骸骨", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101008146}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("乖张怪客", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101008081}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("星云机械", function() gg.setValues({{address = ttt, flags = 4, value = 1101008104}}) gg.toast("请在5秒内刷新你的枪械") gg.sleep(5000) local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 10100800}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("琉璃仙灵", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101008104}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("梅西绿茵传奇", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101008116}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("龙女魔后", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101008126}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), }), MXT.box({"Groza", MXT.button("红莲哥斯拉", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101005098}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("冥河烈焰", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101005052}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), }), MXT.box({"ACE32", MXT.button("传奇海怪号", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101102025}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), MXT.button("神庭冰棘", function() local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1101102007}}) gg.playMusic("https://pan.szfx.top/view.php/577df1d18061883605460af9731a1c79.mp3") end), }), MXT.box({"S12K", MXT.button("核子", function() --S12K核子 function sleep(ms) local start = os.clock() while os.clock() - start < (ms / 1000) do -- 循环等待 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end -- 第一步:执行某个操作 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0x11C} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 1104003037}}) gg.toast("请把配件脱下来再装上") end), }), MXT.box({"M4倍镜", MXT.button("冰霜", function() 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0xA4} local ttt = S_Pointer(t, tt, true) local input = gg.prompt({'红点:1010040470,全息1010040469,二倍1010040468,三倍1010040467,四倍1010040466,六倍1010040481'}, {[1] = '1010040470'}, {[1] = 'number'}) if input then gg.setValues({{address = ttt, flags = 4, value = tonumber(input[1])}}) gg.toast('修改成功,值为:' .. input[1]) else gg.toast('已取消修改') end end), }), MXT.box({"MK14倍镜", MXT.button("龙吟", function() 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 end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2608,0x5D8,0x820,0xA4} local ttt = S_Pointer(t, tt, true) local input = gg.prompt({'红点:1030070218,全息1030070217,二倍1030070216,三倍1030070215,四倍1030070214,六倍1030070213,八倍1030070212'}, {[1] = '1010040470'}, {[1] = 'number'}) if input then gg.setValues({{address = ttt, flags = 4, value = tonumber(input[1])}}) gg.toast('修改成功,值为:' .. input[1]) else end gg.toast('已取消修改') end), }), }, {--第3页面右侧栏 }, }, ['设置'] = {"4", {--第4页面左侧栏 }, {--第4页面右侧栏 MXT.button("退出UI", 退出), }, }, })