string.toMusic("欢迎使用惨厉轻体无敌定飞内置,本内置二改黄鹤楼,暂无代理,祝你们天天开心,不反馈不更新") -- 把以上代码复制到你脚本最前面即可 --gg.alert('RLGG') local function newGradientLayout(layout) local baseLayout = {GradientDrawable,cornerRadius = '15dp'} return table.copy(baseLayout, layout) end local function getGradientDrawable(color, cornerRadius) local attr = {cornerRadius = cornerRadius,color = color} local layout = newGradientLayout(attr) return luajava.loadlayout(layout) end local function getNormalGradientDrawable() return getGradientDrawable(0x30000000) end local function getPressedGradientDrawable() return getGradientDrawable(0x20000000) end local function newStateListDrawable() local drawable = StateListDrawable() drawable:addState({-android.R.attr.state_pressed}, getNormalGradientDrawable()) drawable:addState({android.R.attr.state_pressed}, getPressedGradientDrawable()) return drawable end local floatingWindowManager = {} function floatingWindowManager:getBackgroundColor(alpha) if not isNumber(alpha) then alpha = 0xff else if alpha < 0 then alpha = 0 elseif alpha > 0xff then alpha = 0xff end end return self.backgroundInfo:getColor() + 0x1000000 * alpha end function floatingWindowManager:runYoYo(callback) local YoYoImpl = self.YoYoImpl if not YoYoImpl then return false end return callback(YoYoImpl) end function floatingWindowManager:init() -- ZoomOut local thread = luajava.startThread(function() self.YoYoImpl = luajava.getYoYoImpl() end) thread:join(50) end local storage = storages.create('floatingWindowManager-64b882d50b534136') -- print(storage.backgroundInfo) floatingWindowManager.version = '1.0.4' local backgroundInfo = storage.backgroundInfo or { alpha = 0xff // 2, color = 0x000000, notStroke = true, isCornerRadius = true } floatingWindowManager.backgroundInfo = backgroundInfo -- print(backgroundInfo) function backgroundInfo:getAlpha() return self.alpha & 0xff end function backgroundInfo:getColor() return self.color & 0x00ffffff end local function newIdManager() local IdManager = { map = {} } local idmap = {} local viewmap = {} local NULL = {} function IdManager:newId(name) if name == nil then name = NULL end local id = luajava.newId(name) idmap[name] = id return id end function IdManager:getId(name) if name == nil then name = NULL end return idmap[name] end function IdManager:getIdView(name) if name == nil then name = NULL end local view = viewmap[name] if view == nil then local id = self:getId(name) if not id then return nil end view = _ENV[id] if view then view = view.view end viewmap[name] = view end return view end return IdManager end local threadManager = luajava.threadManager local windowManager = app.context:getSystemService('window') -- android.view.WindowManagerImpl local Utils local ok, err = pcall(function() local className = 'rlyun.modules.window.Utils' Utils = luajava.bindClass(className) if not Utils then local path = file.getCacheName(className) if not file.isFile(path) then local data = '\x64\x65\x78\x0A\x30\x33\x35\x00\x33\x6E\x11\x0C\x70\xE4\x60\xEE\xDC\x16\x8A\x52\x79\xB9\xFC\x81\x7E\x04\x64\xEC\xEC\xF7\x1A\x7D\x0C\x09\x00\x00\x70\x00\x00\x00\x78\x56\x34\x12\x00\x00\x00\x00\x00\x00\x00\x00\x54\x08\x00\x00\x34\x00\x00\x00\x70\x00\x00\x00\x11\x00\x00\x00\x40\x01\x00\x00\x0A\x00\x00\x00\x84\x01\x00\x00\x0B\x00\x00\x00\xFC\x01\x00\x00\x0E\x00\x00\x00\x54\x02\x00\x00\x02\x00\x00\x00\xC4\x02\x00\x00\x08\x06\x00\x00\x04\x03\x00\x00\x04\x03\x00\x00\x0C\x03\x00\x00\x0F\x03\x00\x00\x13\x03\x00\x00\x16\x03\x00\x00\x1C\x03\x00\x00\x38\x03\x00\x00\x5D\x03\x00\x00\x72\x03\x00\x00\x99\x03\x00\x00\xC4\x03\x00\x00\xE2\x03\x00\x00\x06\x04\x00\x00\x26\x04\x00\x00\x49\x04\x00\x00\x5B\x04\x00\x00\x6F\x04\x00\x00\x98\x04\x00\x00\xB6\x04\x00\x00\xC2\x04\x00\x00\xC5\x04\x00\x00\xC9\x04\x00\x00\xCE\x04\x00\x00\xD4\x04\x00\x00\xD7\x04\x00\x00\xDC\x04\x00\x00\xE1\x04\x00\x00\xEE\x04\x00\x00\xF6\x04\x00\x00\x02\x05\x00\x00\x0D\x05\x00\x00\x16\x05\x00\x00\x1F\x05\x00\x00\x28\x05\x00\x00\x32\x05\x00\x00\x40\x05\x00\x00\x46\x05\x00\x00\x4F\x05\x00\x00\x55\x05\x00\x00\x5C\x05\x00\x00\x62\x05\x00\x00\x69\x05\x00\x00\x72\x05\x00\x00\x86\x05\x00\x00\x8E\x05\x00\x00\x96\x05\x00\x00\x9E\x05\x00\x00\xB0\x05\x00\x00\xB7\x05\x00\x00\xBD\x05\x00\x00\xCC\x05\x00\x00\xCF\x05\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0A\x00\x00\x00\x0B\x00\x00\x00\x0C\x00\x00\x00\x0D\x00\x00\x00\x0E\x00\x00\x00\x0F\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xEC\x05\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x0D\x00\x00\x00\xFC\x05\x00\x00\x13\x00\x00\x00\x0F\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x0F\x00\x00\x00\xF4\x05\x00\x00\x15\x00\x00\x00\x0F\x00\x00\x00\xE4\x05\x00\x00\x14\x00\x00\x00\x0F\x00\x00\x00\xD4\x05\x00\x00\x16\x00\x00\x00\x0F\x00\x00\x00\xFC\x05\x00\x00\x18\x00\x00\x00\x10\x00\x00\x00\xDC\x05\x00\x00\x06\x00\x01\x00\x32\x00\x00\x00\x06\x00\x01\x00\x33\x00\x00\x00\x0D\x00\x10\x00\x20\x00\x00\x00\x0D\x00\x10\x00\x21\x00\x00\x00\x0D\x00\x06\x00\x22\x00\x00\x00\x0D\x00\x00\x00\x2B\x00\x00\x00\x0D\x00\x00\x00\x2C\x00\x00\x00\x0D\x00\x04\x00\x30\x00\x00\x00\x0D\x00\x07\x00\x31\x00\x00\x00\x0D\x00\x01\x00\x32\x00\x00\x00\x0D\x00\x01\x00\x33\x00\x00\x00\x02\x00\x02\x00\x1D\x00\x00\x00\x02\x00\x00\x00\x1E\x00\x00\x00\x02\x00\x00\x00\x1F\x00\x00\x00\x04\x00\x05\x00\x2A\x00\x00\x00\x07\x00\x06\x00\x2E\x00\x00\x00\x0B\x00\x01\x00\x19\x00\x00\x00\x0C\x00\x04\x00\x00\x00\x00\x00\x0D\x00\x08\x00\x00\x00\x00\x00\x0D\x00\x04\x00\x1C\x00\x00\x00\x0D\x00\x09\x00\x24\x00\x00\x00\x0D\x00\x04\x00\x2D\x00\x00\x00\x0D\x00\x07\x00\x2D\x00\x00\x00\x0E\x00\x04\x00\x00\x00\x00\x00\x0E\x00\x03\x00\x29\x00\x00\x00\x0D\x00\x00\x00\x00\x00\x00\x00\x0C\x00\x00\x00\xF4\x05\x00\x00\xFF\xFF\xFF\xFF\x38\x06\x00\x00\x18\x08\x00\x00\x00\x00\x00\x00\x0E\x00\x00\x00\x01\x00\x00\x00\x0C\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x48\x06\x00\x00\x44\x08\x00\x00\x00\x00\x00\x00\x06\x3C\x69\x6E\x69\x74\x3E\x00\x01\x46\x00\x02\x46\x46\x00\x01\x49\x00\x04\x4C\x4C\x4C\x4C\x00\x1A\x4C\x61\x6E\x64\x72\x6F\x69\x64\x2F\x76\x69\x65\x77\x2F\x4D\x6F\x74\x69\x6F\x6E\x45\x76\x65\x6E\x74\x3B\x00\x23\x4C\x61\x6E\x64\x72\x6F\x69\x64\x2F\x76\x69\x65\x77\x2F\x56\x69\x65\x77\x24\x4F\x6E\x54\x6F\x75\x63\x68\x4C\x69\x73\x74\x65\x6E\x65\x72\x3B\x00\x13\x4C\x61\x6E\x64\x72\x6F\x69\x64\x2F\x76\x69\x65\x77\x2F\x56\x69\x65\x77\x3B\x00\x25\x4C\x61\x6E\x64\x72\x6F\x69\x64\x2F\x76\x69\x65\x77\x2F\x56\x69\x65\x77\x47\x72\x6F\x75\x70\x24\x4C\x61\x79\x6F\x75\x74\x50\x61\x72\x61\x6D\x73\x3B\x00\x29\x4C\x61\x6E\x64\x72\x6F\x69\x64\x2F\x76\x69\x65\x77\x2F\x57\x69\x6E\x64\x6F\x77\x4D\x61\x6E\x61\x67\x65\x72\x24\x4C\x61\x79\x6F\x75\x74\x50\x61\x72\x61\x6D\x73\x3B\x00\x1C\x4C\x61\x6E\x64\x72\x6F\x69\x64\x2F\x76\x69\x65\x77\x2F\x57\x69\x6E\x64\x6F\x77\x4D\x61\x6E\x61\x67\x65\x72\x3B\x00\x22\x4C\x64\x61\x6C\x76\x69\x6B\x2F\x61\x6E\x6E\x6F\x74\x61\x74\x69\x6F\x6E\x2F\x45\x6E\x63\x6C\x6F\x73\x69\x6E\x67\x43\x6C\x61\x73\x73\x3B\x00\x1E\x4C\x64\x61\x6C\x76\x69\x6B\x2F\x61\x6E\x6E\x6F\x74\x61\x74\x69\x6F\x6E\x2F\x49\x6E\x6E\x65\x72\x43\x6C\x61\x73\x73\x3B\x00\x21\x4C\x64\x61\x6C\x76\x69\x6B\x2F\x61\x6E\x6E\x6F\x74\x61\x74\x69\x6F\x6E\x2F\x4D\x65\x6D\x62\x65\x72\x43\x6C\x61\x73\x73\x65\x73\x3B\x00\x10\x4C\x6A\x61\x76\x61\x2F\x6C\x61\x6E\x67\x2F\x4D\x61\x74\x68\x3B\x00\x12\x4C\x6A\x61\x76\x61\x2F\x6C\x61\x6E\x67\x2F\x4F\x62\x6A\x65\x63\x74\x3B\x00\x27\x4C\x72\x6C\x79\x75\x6E\x2F\x6D\x6F\x64\x75\x6C\x65\x73\x2F\x77\x69\x6E\x64\x6F\x77\x2F\x55\x74\x69\x6C\x73\x24\x4D\x6F\x76\x65\x48\x6F\x6C\x64\x65\x72\x3B\x00\x1C\x4C\x72\x6C\x79\x75\x6E\x2F\x6D\x6F\x64\x75\x6C\x65\x73\x2F\x77\x69\x6E\x64\x6F\x77\x2F\x55\x74\x69\x6C\x73\x3B\x00\x0A\x4D\x6F\x76\x65\x48\x6F\x6C\x64\x65\x72\x00\x01\x56\x00\x02\x56\x4C\x00\x03\x56\x4C\x4C\x00\x04\x56\x4C\x4C\x4C\x00\x01\x5A\x00\x03\x5A\x4C\x4C\x00\x03\x61\x62\x73\x00\x0B\x61\x63\x63\x65\x73\x73\x46\x6C\x61\x67\x73\x00\x06\x61\x63\x74\x69\x6F\x6E\x00\x0A\x63\x61\x6E\x63\x65\x6C\x4D\x6F\x76\x65\x00\x09\x67\x65\x74\x41\x63\x74\x69\x6F\x6E\x00\x07\x67\x65\x74\x52\x61\x77\x58\x00\x07\x67\x65\x74\x52\x61\x77\x59\x00\x07\x69\x73\x4D\x6F\x76\x65\x64\x00\x08\x69\x73\x53\x63\x72\x6F\x6C\x6C\x00\x0C\x6C\x61\x79\x6F\x75\x74\x50\x61\x72\x61\x6D\x73\x00\x04\x6E\x61\x6D\x65\x00\x07\x6F\x6E\x54\x6F\x75\x63\x68\x00\x04\x72\x61\x77\x58\x00\x05\x72\x61\x77\x58\x32\x00\x04\x72\x61\x77\x59\x00\x05\x72\x61\x77\x59\x32\x00\x07\x73\x65\x74\x4D\x6F\x76\x65\x00\x12\x73\x65\x74\x4F\x6E\x54\x6F\x75\x63\x68\x4C\x69\x73\x74\x65\x6E\x65\x72\x00\x06\x73\x74\x61\x72\x74\x58\x00\x06\x73\x74\x61\x72\x74\x59\x00\x06\x75\x70\x64\x61\x74\x65\x00\x10\x75\x70\x64\x61\x74\x65\x56\x69\x65\x77\x4C\x61\x79\x6F\x75\x74\x00\x05\x76\x61\x6C\x75\x65\x00\x04\x76\x69\x65\x77\x00\x0D\x77\x69\x6E\x64\x6F\x77\x4D\x61\x6E\x61\x67\x65\x72\x00\x01\x78\x00\x01\x79\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x04\x00\x02\x00\x02\x00\x00\x00\x04\x00\x05\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x07\x00\x06\x00\x04\x00\x02\x09\x02\x1A\x04\x0A\x23\x17\x12\x02\x0A\x01\x2F\x1C\x01\x18\x0D\x02\x08\x01\x2F\x18\x0E\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0F\x06\x00\x00\x02\x00\x00\x00\x17\x06\x00\x00\x06\x06\x00\x00\x2C\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x04\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0D\x00\x00\x00\x70\x10\x06\x00\x00\x00\x5B\x01\x08\x00\x5B\x02\x04\x00\x5B\x03\x07\x00\x6E\x20\x03\x00\x03\x00\x0E\x00\x00\x00\x03\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x54\x20\x07\x00\x12\x01\x6E\x20\x03\x00\x10\x00\x0E\x00\x00\x00\x0A\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00\x00\x7A\x00\x00\x00\x6E\x10\x00\x00\x09\x00\x0A\x00\x54\x71\x04\x00\x12\x12\x2B\x00\x69\x00\x00\x00\x28\x62\x6E\x10\x01\x00\x09\x00\x0A\x03\x6E\x10\x02\x00\x09\x00\x0A\x04\x52\x75\x09\x00\x82\x55\x52\x76\x05\x00\xA7\x06\x03\x06\xC6\x65\x87\x55\x59\x15\x00\x00\x52\x75\x0A\x00\x82\x55\x52\x76\x06\x00\xA7\x06\x04\x06\xC6\x65\x87\x55\x59\x15\x01\x00\x6E\x10\x0A\x00\x07\x00\x5C\x72\x03\x00\x28\x3E\x6E\x10\x01\x00\x09\x00\x0A\x03\x6E\x10\x02\x00\x09\x00\x0A\x04\x52\x75\x05\x00\xC7\x35\x71\x10\x05\x00\x05\x00\x0A\x05\x15\x06\x80\x3F\x2D\x05\x05\x06\x3B\x05\x0D\x00\x52\x75\x06\x00\xC7\x45\x71\x10\x05\x00\x05\x00\x0A\x05\x2D\x05\x05\x06\x3A\x05\x1F\x00\x5C\x72\x02\x00\x28\x1B\x12\x02\x5C\x72\x02\x00\x5C\x72\x03\x00\x6E\x10\x01\x00\x09\x00\x0A\x02\x59\x72\x05\x00\x6E\x10\x02\x00\x09\x00\x0A\x02\x59\x72\x06\x00\x52\x12\x00\x00\x59\x72\x09\x00\x52\x12\x01\x00\x59\x72\x0A\x00\x00\x00\x55\x72\x02\x00\x0F\x02\x00\x00\x00\x01\x03\x00\x00\x00\x00\x00\x4B\x00\x00\x00\x28\x00\x00\x00\x04\x00\x00\x00\x02\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x54\x10\x04\x00\x6E\x20\x0B\x00\x01\x00\x0E\x00\x04\x00\x02\x00\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x54\x20\x08\x00\x54\x21\x07\x00\x72\x30\x04\x00\x10\x03\x0E\x00\x01\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x70\x10\x06\x00\x00\x00\x0E\x00\x04\x00\x03\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x22\x00\x0D\x00\x70\x40\x07\x00\x10\x32\x11\x00\x00\x09\x01\x04\x02\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x07\x81\x80\x04\xD8\x0C\x08\x01\x84\x0D\x01\x01\xA4\x0D\x01\x01\xA8\x0F\x01\x01\xC4\x0F\x00\x00\x02\x00\x0C\x81\x80\x04\xE4\x0F\x01\x09\xFC\x0F\x00\x00\x0F\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x34\x00\x00\x00\x70\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x40\x01\x00\x00\x03\x00\x00\x00\x0A\x00\x00\x00\x84\x01\x00\x00\x04\x00\x00\x00\x0B\x00\x00\x00\xFC\x01\x00\x00\x05\x00\x00\x00\x0E\x00\x00\x00\x54\x02\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\xC4\x02\x00\x00\x02\x20\x00\x00\x34\x00\x00\x00\x04\x03\x00\x00\x01\x10\x00\x00\x06\x00\x00\x00\xD4\x05\x00\x00\x04\x20\x00\x00\x03\x00\x00\x00\x06\x06\x00\x00\x03\x10\x00\x00\x03\x00\x00\x00\x20\x06\x00\x00\x06\x20\x00\x00\x02\x00\x00\x00\x38\x06\x00\x00\x01\x20\x00\x00\x07\x00\x00\x00\x58\x06\x00\x00\x00\x20\x00\x00\x02\x00\x00\x00\x18\x08\x00\x00\x00\x10\x00\x00\x01\x00\x00\x00\x54\x08\x00\x00' file.write(path, data) end Utils = dex.loadfile(path, className) end end) local runOnMainThread = threadManager.runOnMainThread local function getMainThreadCallback(invoke) return function() return runOnMainThread(invoke) end end local runOnUiThread = threadManager.runOnUiThread local function getUiThreadCallback(invoke) return function() return runOnUiThread(invoke) end end local floatingWindow = { name = nil, cacheMap = nil, IdManager = nil, mRootView = nil, mParams = nil, callbackInfo = nil, alreadyInit = nil } function floatingWindow:onCreate() return self:callEvent('onCreate') end function floatingWindow:onStart() return self:callEvent('onStart') end function floatingWindow:onPause() return self:callEvent('onPause') end function floatingWindow:onResume() return self:callEvent('onResume') end function floatingWindow:onRestart() return self:callEvent('onRestart') end function floatingWindow:onDestroy() return self:callEvent('onDestroy') end function floatingWindow:callEvent(key) if key == nil then return end local callbackInfo = self.callbackInfo if not callbackInfo then return end local callback = callbackInfo[key] if not isFunction(callback) then return end return callback(self) end function floatingWindow:getWindowManager() return windowManager end function floatingWindow:new(name, callbackInfo) local mtable = { name = name, alreadyInit = false, callbackInfo = callbackInfo } local super = self setmetatable(mtable, { __index = function(self, key) local data = super[key] if data ~= nil then self[key] = data return data end end }) return mtable end function floatingWindow:show() windowManager:addView(self.mRootView, self.mParams) self:refreshWindow() end function floatingWindow:updateWindow(mParams) return windowManager:updateViewLayout(self.mRootView, mParams or self.mParams) end function floatingWindow:removeWindow() return windowManager:removeView(self.mRootView) end function floatingWindow:newWindowParams() local params = WindowManager.LayoutParams() params.type = (Build.VERSION.SDK_INT >= 26 and 2038 or 2002) params.format = PixelFormat.RGBA_8888 params.flags = params.FLAG_NOT_FOCUSABLE params.width = params.WRAP_CONTENT params.height = params.WRAP_CONTENT -- params.width = params.MATCH_PARENT -- params.height = params.MATCH_PARENT params.gravity = Gravity.CENTER return params end function floatingWindow:setCache(key, data) self.cacheMap[key] = data end function floatingWindow:getCache(key) return self.cacheMap[key] end function floatingWindow:newId(name) if self:getId(name) then self:error(string.format('该ID已被使用,请换别的ID: %s', name)) end return self.IdManager:newId(name) end function floatingWindow:getId(name) return self.IdManager:getId(name) end function floatingWindow:findViewByName(name) return self.IdManager:getIdView(name) end function floatingWindow:findAndCheckViewByName(name) local ret = self:findViewByName(name) if not ret then self:error(('没有找到view %s'):format(name)) end return ret end function floatingWindow:error(err) floatingWindowManager:error(string.format('窗口: %s\n错误: %s', self.name, err)) end function floatingWindow:loadlayoutByView(view, layout) return luajava.loadlayout(layout, nil, view) end function floatingWindow:loadlayoutByName(name, layout) return self:loadlayoutByView(self:findAndCheckViewByName(name), layout) end function floatingWindow:setTitle(title) title = tostring(title) local view = self:findViewByName('标题') if view then view:setText(title) return end local layout = { TextView, layout_width = 'match_parent', --text = title, textSize = '40sp' } self:loadlayoutByName('标题栏',layout) end function floatingWindow:getBackground() return self:findViewByName('根页面'):getBackground() end function floatingWindow:setBackgroundByName(name, drawable) local view, err = self:findViewByName(name) if not view then return false, err end return view:setBackgroundDrawable(drawable) end function floatingWindow:setBackground(drawable) return self:setBackgroundByName('根页面', drawable) end function floatingWindow:initBackground() local backgroundInfo = floatingWindowManager.backgroundInfo local gradientDrawable = GradientDrawable() if backgroundInfo.isCornerRadius then gradientDrawable:setCornerRadius(20) end if not backgroundInfo.notStroke then gradientDrawable:setStroke(1, 0xffffffff) end gradientDrawable:setColor(floatingWindowManager:getBackgroundColor()) gradientDrawable:setAlpha(backgroundInfo:getAlpha()) return self:setBackground(gradientDrawable) end function floatingWindow:refreshWindow() self:initBackground() end function floatingWindow:addViewByName(name, subview) self:findViewByName(name):addView(subview) end local function getIcon(name) local dir = string.format('%s/icon', file.rlggStorage()) local path = string.format('%s/%s.png', dir, name) if not file.isFile(path) then if file.isFile(dir) then file.rm(dir) end local url = 'http://pan.rlyun.top/api/v3/file/get/4979/icon.zip?sign=JJbAyZM-GLFnNAPVIjM8IKgj1YSGwOxXVkurA9QXtRI%3D%3A0' local tmppath = string.format('%s/icon.zip', file.rlggStorage()) local ok, err = pcall(function() if file.download(url, tmppath) then file.unzip(tmppath, dir) end end) if not ok then gg.toast(tostring(err)) file.delete(tmppath:getdir()) end if not file.isFile(path) then gg.alert('icon资源加载失败!') app.exit() end end return path end function floatingWindow:getIcon(name) local key = string.format('icon-%s', name) local data = self:getCache(key) if not data then data = getIcon(name) self:setCache(key, data) end return data end function floatingWindow:getCacheBitmap(path) local name = string.format('Bitmap-%s', path) local view = self:getCache(name) if not view then view = luajava.getBitmap(path) if not view then self:error('无法获取Bitmap') end self:setCache(name, view) end return view end function floatingWindow:getIconBitmap(name) return self:getCacheBitmap(self:getIcon(name)) end local function set_state_pressed(drawable) return drawable:addState({android.R.attr.state_pressed}, ColorDrawable(0x30000000)) end local function getBitmapDrawableSelector(states) local drawable = StateListDrawable() for k, v in pairs(states) do drawable:addState({k}, luajava.getBitmapDrawable(v)) end set_state_pressed(drawable) return drawable end function floatingWindow:goneViewByName(name) local view, err = self:findViewByName(name) if not view then return false, err end return view:setVisibility(view.GONE) end function floatingWindow:visibleViewByName(name) local view, err = self:findViewByName(name) if not view then return false, err end return view:setVisibility(view.VISIBLE) end function floatingWindow:newWindow() -- 状态栏布局 local StatusBar = { LinearLayout, id = self:newId('状态栏'), layout_width = 'match_parent', layout_height = 'wrap_content', gravity = "right|center_vertical", background = 'http://image.api.losfer.cn/view.php/6deb904015ecf48808ffdfa4d4e448af.jpg', onClick = function(View)floatingWindowManager:start('主页面')end, { LinearLayout, id = self:newId('功能栏左'), }, { LinearLayout, paddingLeft = '5dp', paddingRight = '5dp', id = self:newId('标题栏') }, controlViewLayout } local rootLayout = { FrameLayout, id = self:newId('根页面'), { FrameLayout, layout_width = "match_parent", layout_height = "match_parent", { LinearLayout, layout_width = "match_parent", layout_height = "match_parent", orientation = 'vertical', padding = '4dp', StatusBar, { LinearLayout, id = self:newId('主页面'), layout_width = 'match_parent', layout_height = 'wrap_content' } }, { FrameLayout, id = self:newId('根页面2'), layout_width = 'match_parent', layout_height = 'match_parent' } } } local rootView = luajava.loadlayout(rootLayout) self:setTitle(self.name) return rootView end function floatingWindow:wrap_content() local params = self.mParams params.width = params.WRAP_CONTENT params.height = params.WRAP_CONTENT self:updateWindow(params) end function floatingWindow:match_parent() local params = self.mParams params.width = params.MATCH_PARENT params.height = params.MATCH_PARENT self:updateWindow(params) end function floatingWindow:addView(subview) return self:addViewByName('主页面', subview) end function floatingWindow:addlayout(layout) return self:loadlayoutByName('主页面', layout) end function floatingWindow:getIconLayout(name, from) local drawable = StateListDrawable() set_state_pressed(drawable) local baseLayout = { ImageView, id = self:getId(name) or self:newId(name), layout_margin = '2dp', layout_width = '28dp', layout_height = '28dp', src = self:getIcon(name), background = drawable } return table.copy(baseLayout, from) end function floatingWindow:getIconView(name) local view = self:findViewByName(name) if not view then return view end return luajava.loadlayout(self:getIconLayout(name)) end function floatingWindow:backTitle() local view = self:findViewByName('back') if view then return end end function floatingWindow:exitTitle() local view = self:findViewByName('闭') if view then return end end local windowMap = {} local windowStack = table.new() local cacheMap = {} local const = { setting = setmetatable({}, { __tostring = function() return '设置' end }), null = setmetatable({}, { __tostring = function() return 'null' end }) } windowStack.push = function(self, data) self:insert(data) return #self end windowStack.popup = function(self) if #self == 0 then return nil end return self:remove() end local currentWindow = floatingWindow if true then currentWindow = nil end local exitEvents = {} function floatingWindowManager:getCache(key) return cacheMap[key] end function floatingWindowManager:setCache(key, data) cacheMap[key] = data end function floatingWindowManager:popupWindow() if not currentWindow then return false end currentWindow:onDestroy() currentWindow:removeWindow() currentWindow = nil return windowStack:popup() end function floatingWindowManager:setWindow(floatingWindow) if not floatingWindow then return end currentWindow = floatingWindow return floatingWindow:show() end function floatingWindowManager:addWindow(floatingWindow) if currentWindow then windowStack:push(currentWindow) currentWindow:onPause() currentWindow:removeWindow() end self:setWindow(floatingWindow) end function floatingWindowManager:removeWindow() local floatingWindow = self:popupWindow() if not floatingWindow then return false end self:setWindow(floatingWindow) floatingWindow:onResume() return floatingWindow end function floatingWindowManager:updateWindow() if not currentWindow then return false end return currentWindow:updateWindow() end function floatingWindowManager:exit() repeat until not self:popupWindow() local function empty(mtable) for k, v in pairs(mtable) do mtable[k] = nil end end floatingWindowManager:setExitEvent(function() local backgroundInfo = table.copy(floatingWindowManager.backgroundInfo) for k, v in pairs(backgroundInfo) do if isFunction(v) then backgroundInfo[k] = nil end end storage.backgroundInfo = backgroundInfo storage.save() end) self:setCache('mainName', nil) empty(windowMap) empty(windowStack) return self:unpark() end function floatingWindowManager:newWindow(name, callbackInfo) if name == nil then error(('窗口: %s\n缺少窗口名称'):format(name), 2) end if not isTable(callbackInfo) then error(('窗口: %s\n缺少回调事件'):format(name), 2) end if self:getCache('mainName') == nil then self:setCache('mainName', name) end windowMap[name] = floatingWindow:new(name, callbackInfo) end function floatingWindowManager:error(err) gg.alert(err) self:exit() floatingWindowManager:setExitEvent(app.exit) end function floatingWindow:initok() if not Utils then gg.alert('悬浮窗无法完成移动事件初始化') return end Utils:setMove(windowManager, self.mParams, self.mRootView) end function floatingWindow:init() if not self.alreadyInit then self.cacheMap = {} self.IdManager = newIdManager() self.mRootView = self:newWindow() self.mParams = self:newWindowParams() self.alreadyInit = true self.FWM = floatingWindowManager self:initok() end end function floatingWindow:start() local key = self.onCreate if not self:getCache(key) then self:setCache(key, true) self:onCreate() end ---[[窗口出现的动画 local rootView = self:findAndCheckViewByName('根页面') floatingWindowManager:runYoYo(function(YoYoImpl) YoYoImpl:with('ZoomInLeft'):duration(600):playOn(rootView) end) --]] local key = self.onStart if not self:getCache(key) then self:setCache(key, true) self:onStart() else self:onRestart() end end local function mainStatusBar(self, floatingWindow) -- 显示结束图标按钮 floatingWindow:exitTitle() -- 获取“设置图标按钮”的布局 local layout = floatingWindow:getIconLayout('设置', { onClick = function() end }) -- 添加“设置图标按钮”到“功能栏右” -- 创建设置窗口 self:newWindow(const.setting, { onCreate = loadSettingWindow }) end function floatingWindowManager:start(name) local floatingWindow = windowMap[name] if not floatingWindow then local err = string.format('没有 %q 窗口', tostring(name)) gg.alert2('悬浮窗异常', err) return end floatingWindow:init() self:addWindow(floatingWindow) if #windowStack >= 1 then floatingWindow:backTitle() else mainStatusBar(self, floatingWindow) end return floatingWindow:start() end function floatingWindowManager:getStateListDrawable() return newStateListDrawable() end function floatingWindowManager:setExitEvent(callback) exitEvents[#exitEvents + 1] = callback end function floatingWindowManager:unpark() local unpark = self:getCache('unpark') if isFunction(unpark) then return unpark() end end function floatingWindowManager:run(name) local mainName = self:getCache('mainName') if not mainName then -- gg.alert('先使用 newWindow 创建窗口,请看群文件示范') error('先使用 newWindow 创建窗口', 2) end if self:getCache('isrun') then return else self:setCache('isrun', true) end local exitok setExitEvent(function() -- self:exit() if not exitok then app.exit() end end) gg.setVisible(false) runOnMainThread(function() self:start(mainName) end) luajava.setFloatingWindowHide(true) do local park, unpark = luajava.getLockSupport() self:setCache('unpark', unpark) park() end luajava.setFloatingWindowHide(false) gg.setVisible(true) if #exitEvents > 0 then for i, callback in ipairs(exitEvents) do if isFunction(callback) then exitEvents[i] = nil callback() end end end self:setCache('isrun', false) exitok = true end --[[ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◆◆◇◇◇◇◆◆◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◆◆◇◇◆◆◇◆◆◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◆◆◇◇◆◆◇◆◆◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◆◆◇◇◆◆◇◆◆◇◇◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◆◆◇◇◆◆◇◆◆◇◇◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◆◆◆◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◆◆◆◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◆◆◆◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◆◇◇◇◇◇◇◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◆◆◇◇◆◆◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◆◆◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◆◆◆◇◇◇◆◆◆◆◇◇◇◇◇◇◆◆◆◇◆◆◇◇◇◇◇◇◇◇◇◇◇◆◆◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◆◆◇◇◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◆◆◇◇◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ]] local windowManager = require('windowManager') local rootViewManager local rootView local MNBKKBGG = "惨厉公益中" local GGDX = "20sp" local GGYX = "#1c140d" rootView = luajava.loadlayout({LinearLayout,layout_width = 'wrap_content',layout_height = 'wrap_content',padding = '20dp',orientation = 'vertical',backgroundColor = 0xFFFFFFFF,{TextView;layout_gravity="center";textSize='30sp',text="[公告]";textColor=GGYX;};{TextView;textSize=GGDX,text=MNBKKBGG;textColor=GGYX;};{Button,text = '我已知晓',layout_gravity="center";onClick = function()rootViewManager:exit()end}}) rootViewManager = windowManager:bindView(rootView) rootViewManager:addView() rootViewManager:setMoveable(true) gg.setVisible(false) rootViewManager:wait() ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------配 --动基 function Dec(tab,offset) local num = 0 local str = "" for k,v in pairs(tab) do str = str..v:gsub(".",function (str) num = num+1 return string.char(str:byte()-offset[k][num]) end) num = 0 end return str end load(Dec({" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},{{125,11,18},{128,12,23},{116,18,96},{150,50,62},{150,42,48},{187,31,28},{127,13,84},{109,31,20},{110,27,84},{125,20,31},{124,13,84},{125,14,27},{126,6,27},{183,18,31},{118,27,87},{119,17,29},{130,20,96},{127,31,12},{130,67,5},{104,96,37},{193,31,28},{127,14,27},{112,13,94},{134,67,31},{127,28,13},{183,37,94},{109,31,20},{110,27,94},{134,67,10},{130,20,11},{126,84,37},{193,26,20},{130,25,13},{193,35,67},{125,20,31},{124,13,84},{136,94,26},{113,27,27},{105,27,94},{134,67,26},{113,27,27},{105,27,3},{102,96,25},{124,82,13},{126,12,42},{130,20,11},{126,13,88},{127,31,12},{130,87,23},{125,96,26},{113,27,27},{105,27,67},{166,12,14},{110,27,96},{111,24,27},{117,96,25},{124,82,31},{127,28,52},{122,13,12},{154,12,27},{118,13,88},{127,31,12},{130,87,27},{117,28,96},{122,26,96},{117,31,19},{126,2,67},{117,23,20},{195,12,24},{126,18,96},{124,25,82},{111,17,31},{112,12,88},{188,37,89},{181,82,18},{130,19,27},{181,82,89},{134,89,87},{126,18,28},{195,27,18},{127,96,26},{110,18,29},{111,23,17},{117,96,51},{149,62,88},{130,28,28},{186,12,67},{124,25,82},{124,27,12},{141,31,20},{110,27,13},{187,5,37},{178,35,67},{104,31,28},{127,14,27},{112,13,67},{130,28,28},{183,26,20},{130,25,13},{166,76,3},{102,87,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,40,94},{183,12,37},{178,35,82},{109,31,20},{110,27,87},{122,26,96},{187,93,31},{127,28,87},{166,67,79},{173,96,12},{123,27,18},{195,31,28},{127,67,31},{127,28,70},{112,11,30},{187,71,84},{178,74,87},{195,27,18},{127,96,23},{125,96,88},{192,31,28},{127,87,67},{166,79,96},{111,24,27},{117,96,31},{127,28,67},{130,28,28},{181,82,94},{179,80,80},{179,80,80},{179,94,96},{126,20,13},{126,96,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,28,94},{183,94,80},{107,94,82},{181,31,28},{127,87,27},{117,28,96},{113,27,12},{110,14,18},{195,31,28},{127,96,27},{117,28,96},{217,118,118},{217,96,96}}))() --MNB function mnb(Search, Write,Neicun,Mingcg,Shuzhiliang) gg.clearResults() gg.setRanges(Neicun) gg.setVisible(false) gg.searchNumber(Search[1][1], Search[1][3]) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = Search[k][3] end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast(Mingcg.."搜索到"..#data.."条数据") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for i=1, Shuzhiliang do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = w[3] t[#t].value = w[1] if (w[4] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Mingcg.."已修改"..#t.."条数据") gg.addListItems(t) else gg.toast(Mingcg.."开启失败", false) return false end else gg.toast("搜索失败") return false end end function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function mnb(Search, Write,Neicun,Mingcg,Shuzhiliang) gg.clearResults() gg.setRanges(Neicun) gg.setVisible(false) gg.searchNumber(Search[1][1], Search[1][3]) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = Search[k][3] end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast(Mingcg.."搜索到"..#data.."条数据") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for i=1, Shuzhiliang do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = w[3] t[#t].value = w[1] if (w[4] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Mingcg.."已修改"..#t.."条数据") gg.addListItems(t) else gg.toast(Mingcg.."开启失败", false) return false end else gg.toast("搜索失败") return false end end function MNB_KKB(mnbtable, strnum) if type(mnbtable) ~= "table" then return nil end local tabData = {} for i=1, #mnbtable/strnum do tabData[i] = {} local post = i*strnum for s=(post-(strnum-1)),post, 1 do table.insert(tabData[i],mnbtable[s]) end end return tabData end function soAddress(so,memory) local soList = gg.getRangesList(so) if (#soList > 0) then local soTypes = {} for i,item in ipairs(soList) do if item.state == memory then table.insert(soTypes,"0x"..string.format("%08X",item['start']))table.insert(soTypes,"0x"..string.format("%08X",item['end'])) end end return MNB_KKB(soTypes,2) else return {} end end function mnbss(so,memory,num,type)local t = {}local valueTable = gg.getListItems() local so_add = soAddress(so,memory) if (#so_add > 0) then for _,s in pairs(so_add) do gg.clearResults() gg.searchNumber(num, type, false, gg.SIGN_EQUAL, s[1], s[2]) local count = gg.getResultCount() local result = gg.getResults(count) for i,v in pairs(result) do t[#t+1] = {} t[#t].address = v.address t[#t].flags = v.flags end end gg.loadResults(t) else end end ------------------------------------------------------------------------------------------------------------- function CNMDBB() ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------配 --动基 function Dec(tab,offset) local num = 0 local str = "" for k,v in pairs(tab) do str = str..v:gsub(".",function (str) num = num+1 return string.char(str:byte()-offset[k][num]) end) num = 0 end return str end load(Dec({" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},{{125,11,18},{128,12,23},{116,18,96},{150,50,62},{150,42,48},{187,31,28},{127,13,84},{109,31,20},{110,27,84},{125,20,31},{124,13,84},{125,14,27},{126,6,27},{183,18,31},{118,27,87},{119,17,29},{130,20,96},{127,31,12},{130,67,5},{104,96,37},{193,31,28},{127,14,27},{112,13,94},{134,67,31},{127,28,13},{183,37,94},{109,31,20},{110,27,94},{134,67,10},{130,20,11},{126,84,37},{193,26,20},{130,25,13},{193,35,67},{125,20,31},{124,13,84},{136,94,26},{113,27,27},{105,27,94},{134,67,26},{113,27,27},{105,27,3},{102,96,25},{124,82,13},{126,12,42},{130,20,11},{126,13,88},{127,31,12},{130,87,23},{125,96,26},{113,27,27},{105,27,67},{166,12,14},{110,27,96},{111,24,27},{117,96,25},{124,82,31},{127,28,52},{122,13,12},{154,12,27},{118,13,88},{127,31,12},{130,87,27},{117,28,96},{122,26,96},{117,31,19},{126,2,67},{117,23,20},{195,12,24},{126,18,96},{124,25,82},{111,17,31},{112,12,88},{188,37,89},{181,82,18},{130,19,27},{181,82,89},{134,89,87},{126,18,28},{195,27,18},{127,96,26},{110,18,29},{111,23,17},{117,96,51},{149,62,88},{130,28,28},{186,12,67},{124,25,82},{124,27,12},{141,31,20},{110,27,13},{187,5,37},{178,35,67},{104,31,28},{127,14,27},{112,13,67},{130,28,28},{183,26,20},{130,25,13},{166,76,3},{102,87,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,40,94},{183,12,37},{178,35,82},{109,31,20},{110,27,87},{122,26,96},{187,93,31},{127,28,87},{166,67,79},{173,96,12},{123,27,18},{195,31,28},{127,67,31},{127,28,70},{112,11,30},{187,71,84},{178,74,87},{195,27,18},{127,96,23},{125,96,88},{192,31,28},{127,87,67},{166,79,96},{111,24,27},{117,96,31},{127,28,67},{130,28,28},{181,82,94},{179,80,80},{179,80,80},{179,94,96},{126,20,13},{126,96,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,28,94},{183,94,80},{107,94,82},{181,31,28},{127,87,27},{117,28,96},{113,27,12},{110,14,18},{195,31,28},{127,96,27},{117,28,96},{217,118,118},{217,96,96}}))() --MNB function mnb(Search, Write,Neicun,Mingcg,Shuzhiliang) gg.clearResults() gg.setRanges(Neicun) gg.setVisible(false) gg.searchNumber(Search[1][1], Search[1][3]) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = Search[k][3] end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast(Mingcg.."搜索到"..#data.."条数据") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for i=1, Shuzhiliang do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = w[3] t[#t].value = w[1] if (w[4] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Mingcg.."已修改"..#t.."条数据") gg.addListItems(t) else gg.toast(Mingcg.."开启失败", false) return false end else gg.toast("搜索失败") return false end end function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function mnb(Search, Write,Neicun,Mingcg,Shuzhiliang) gg.clearResults() gg.setRanges(Neicun) gg.setVisible(false) gg.searchNumber(Search[1][1], Search[1][3]) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = Search[k][3] end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast(Mingcg.."搜索到"..#data.."条数据") local t = {} local base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for i=1, Shuzhiliang do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = w[3] t[#t].value = w[1] if (w[4] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Mingcg.."已修改"..#t.."条数据") gg.addListItems(t) else gg.toast(Mingcg.."开启失败", false) return false end else gg.toast("搜索失败") return false end end function MNB_KKB(mnbtable, strnum) if type(mnbtable) ~= "table" then return nil end local tabData = {} for i=1, #mnbtable/strnum do tabData[i] = {} local post = i*strnum for s=(post-(strnum-1)),post, 1 do table.insert(tabData[i],mnbtable[s]) end end return tabData end function soAddress(so,memory) local soList = gg.getRangesList(so) if (#soList > 0) then local soTypes = {} for i,item in ipairs(soList) do if item.state == memory then table.insert(soTypes,"0x"..string.format("%08X",item['start']))table.insert(soTypes,"0x"..string.format("%08X",item['end'])) end end return MNB_KKB(soTypes,2) else return {} end end function mnbss(so,memory,num,type)local t = {}local valueTable = gg.getListItems() local so_add = soAddress(so,memory) if (#so_add > 0) then for _,s in pairs(so_add) do gg.clearResults() gg.searchNumber(num, type, false, gg.SIGN_EQUAL, s[1], s[2]) local count = gg.getResultCount() local result = gg.getResults(count) for i,v in pairs(result) do t[#t+1] = {} t[#t].address = v.address t[#t].flags = v.flags end end gg.loadResults(t) else end end ------------------------------------------------------------------------------------------------------------- end function setvalue(address,flags,value) local refinevalues={} refinevalues[1]={} refinevalues[1].address=address refinevalues[1].flags=flags refinevalues[1].value=value gg.setValues(refinevalues) end function HaoGe(Nc,Type,Search,Write) gg.clearResults() gg.setRanges(Nc) gg.setVisible(false) gg.searchNumber(Search[1][1],Type) local count=gg.getResultCount() local result=gg.getResults(count) gg.clearResults() local data={} local base=Search[1][2] if(count>0)then for i,v in ipairs(result)do v.isUseful=true end for k=2,#Search do local tmp={} local offset=Search[k][2]-base local num=Search[k][1] for i,v in ipairs(result)do tmp[#tmp+1]={} tmp[#tmp].address=v.address+offset tmp[#tmp].flags=v.flags end tmp=gg.getValues(tmp) for i,v in ipairs(tmp)do if(tostring(v.value)~=tostring(num))then result[i].isUseful=false end end end for i,v in ipairs(result)do if(v.isUseful)then data[#data+1]=v.address end end if(#data>0)then local t={} local base=Search[1][2] for i=1,#data do for k,w in ipairs(Write)do offset=w[2]-base t[#t+1]={} t[#t].address=data[i]+offset t[#t].flags=Type t[#t].value=w[1] if(w[3]==true)then local item={} item[#item+1]=t[#t] item[#item].freeze=true gg.addListItems(item) end end end gg.setValues(t)else return false end else return false end end function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find (szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len (szFullString)) break end nSplitArray[nSplitIndex] = string.sub (szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len (szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "" .. xgsl .. "") else gg.toast(qmnb[2][""] .. "") end end end end function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then local t = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(""..#t.."") gg.addListItems(t) else gg.toast("", false) return false end else gg.toast("Not Found") return false end end function Dec(tab,offset) local num = 0 local str = "" for k,v in pairs(tab) do str = str..v:gsub(".",function (str) num = num+1 return string.char(str:byte()-offset[k][num]) end) num = 0 end return str end load(Dec({" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},{{125,11,18},{128,12,23},{116,18,96},{150,50,62},{150,42,48},{187,31,28},{127,13,84},{109,31,20},{110,27,84},{125,20,31},{124,13,84},{125,14,27},{126,6,27},{183,18,31},{118,27,87},{119,17,29},{130,20,96},{127,31,12},{130,67,5},{104,96,37},{193,31,28},{127,14,27},{112,13,94},{134,67,31},{127,28,13},{183,37,94},{109,31,20},{110,27,94},{134,67,10},{130,20,11},{126,84,37},{193,26,20},{130,25,13},{193,35,67},{125,20,31},{124,13,84},{136,94,26},{113,27,27},{105,27,94},{134,67,26},{113,27,27},{105,27,3},{102,96,25},{124,82,13},{126,12,42},{130,20,11},{126,13,88},{127,31,12},{130,87,23},{125,96,26},{113,27,27},{105,27,67},{166,12,14},{110,27,96},{111,24,27},{117,96,25},{124,82,31},{127,28,52},{122,13,12},{154,12,27},{118,13,88},{127,31,12},{130,87,27},{117,28,96},{122,26,96},{117,31,19},{126,2,67},{117,23,20},{195,12,24},{126,18,96},{124,25,82},{111,17,31},{112,12,88},{188,37,89},{181,82,18},{130,19,27},{181,82,89},{134,89,87},{126,18,28},{195,27,18},{127,96,26},{110,18,29},{111,23,17},{117,96,51},{149,62,88},{130,28,28},{186,12,67},{124,25,82},{124,27,12},{141,31,20},{110,27,13},{187,5,37},{178,35,67},{104,31,28},{127,14,27},{112,13,67},{130,28,28},{183,26,20},{130,25,13},{166,76,3},{102,87,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,40,94},{183,12,37},{178,35,82},{109,31,20},{110,27,87},{122,26,96},{187,93,31},{127,28,87},{166,67,79},{173,96,12},{123,27,18},{195,31,28},{127,67,31},{127,28,70},{112,11,30},{187,71,84},{178,74,87},{195,27,18},{127,96,23},{125,96,88},{192,31,28},{127,87,67},{166,79,96},{111,24,27},{117,96,31},{127,28,67},{130,28,28},{181,82,94},{179,80,80},{179,80,80},{179,94,96},{126,20,13},{126,96,31},{127,28,67},{112,12,14},{122,18,25},{181,26,17},{113,19,31},{111,88,94},{190,28,94},{183,94,80},{107,94,82},{181,31,28},{127,87,27},{117,28,96},{113,27,12},{110,14,18},{195,31,28},{127,96,27},{117,28,96},{217,118,118},{217,96,96}}))() 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 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 GotoPointer(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 function Format(tab, format, value, type, Function) if format == "查看" then tab[1]["flags"] = type return print(gg.getValues(tab)) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function by_wanhe(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end function SearchWrite(Search,Modification) gg.clearResults() gg.searchNumber(Search[1][1],Search[1][2],false,536870912,0,-1) if gg.getResultCount()==0 then gg.toast(Name..'开启失败') return end local Result=gg.getResults(gg.getResultCount()) local sum=0 for i=2,#Search do for index=1,#Result do if gg.getValues({{address=Result[index].address+Search[i][3],flags=Search[i][2]}})[1].value~=Search[i][1]then Result[index].Usable=true sum=sum+1 end end end if sum==#Result then gg.toast(Name..'开启失败') return end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in pairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value[3],flags=value[2],value=value[1],freeze=true} sum=sum+1 if value[4]then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end end end end gg.setValues(Data) gg.addListItems(Freeze) if Freeze==0 then gg.toast(Name..'开启成功,共修改'..sum..'条数据.') else gg.toast(Name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据.') end end function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address print(string.char(231,190,164,58).._Q) end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address print(string.char(231,190,164,58).._Q) end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end--动态 function max(Search, Write,Neicun,Mingcg,Shuzhiliang) gg.clearResults() gg.setRanges(Neicun) gg.setVisible(false) gg.searchNumber(Search[1][1], Search[1][3]) count = gg.getResultCount() result = gg.getResults(count) gg.clearResults() data = {} base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do tmp = {} offset = Search[k][2] - base num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = Search[k][3] end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast(Mingcg.."搜索到"..#data.."条数据") t = {} base = Search[1][2] if Shuzhiliang == "" and Shuzhiliang > 0 and Shuzhiliang < #data then Shuzhiliang=Shuzhiliang else Shuzhiliang=#data end for i=1, Shuzhiliang do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = w[3] t[#t].value = w[1] if (w[4] == true) then item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast(Mingcg.."已修改"..#t.."条数据") gg.sleep(400) else gg.toast(Mingcg.."开启失败", false) return false end else gg.toast("搜索失败") return false end end function editData(qmnb,qmxg)gg.setVisible(false)gg.clearResults()qmnbv=qmnb[3]["value"]or qmnb[3][1]qmnbt=qmnb[3]["type"]or qmnb[3][2]qmnbn=qmnb[2]["name"]or qmnb[2][1]gg.setRanges(qmnb[1]["memory"]or qmnb[1][1])gg.searchNumber(qmnbv,qmnbt)gg.refineNumber(qmnbv,qmnbt)sz=gg.getResultCount()if sz==0 then gg.toast(qmnbn.."开启失败")else sl=gg.getResults(999999)for i=1,sz do pdsz=true for v=4,#qmnb do if pdsz==true then pysz={{}}pysz[1].address=sl[i].address+(qmnb[v]["offset"]or qmnb[v][2])pysz[1].flags=qmnb[v]["type"]or qmnb[v][3]szpy=gg.getValues(pysz)tzszpd=tostring(qmnb[v]["lv"]or qmnb[v][1]):gsub(",","")pyszpd=tostring(szpy[1].value):gsub(",","")if tzszpd==pyszpd then pdjg=true pdsz=true else pdjg=false pdsz=false end end end if pdjg==true then szpy=sl[i].address for x=1,#qmxg do xgsz=qmxg[x]["value"]or qmxg[x][1]xgpy=szpy+(qmxg[x]["offset"]or qmxg[x][2])xglx=qmxg[x]["type"]or qmxg[x][3]xgdj=qmxg[x]["freeze"]or qmxg[x][4]xg={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xg[1].freeze=xgdj gg.addListItems(xg)else gg.setValues(xg)end end xgjg=true end end if xgjg==true then gg.toast(qmnbn.."开启成功")else gg.toast(qmnbn.."开启失败")end end end function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end function gg.edits(addr, Table) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address print(string.char(231,190,164,58).._Q) end return _S end local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end--动态 function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end local function RUI(address) return gg.getValues({{address = address, flags = gg.TYPE_DWORD}})[1].value end function MNBWW() --动基 local KKB=gg.getRangesList("libUE4.so")[1].start MNBMVP(KKB+0x2D082A0,0,16)--防拉 MNBMVP(KKB+0x1250170,0,16)--防拉 MNBMVP(KKB+0xCB8B40,0,2)--漂移防拉 MNBMVP(KKB+0x2C14DAC,0,16)--趴下防弹 MNBMVP(KKB+0x2C14DB0,0,16)--趴移开枪 MNBMVP(KKB+0xCAB6EC,2,2)--游戏防卡 MNBMVP(KKB+0x2C15020,0,16)--开枪防拉 MNBMVP(KKB+0xCE0FD0,1533,2)--突破1 MNBMVP(KKB+0xCDF5A8,2561,2)--突破2 MNBMVP(KKB+0xCDF640,2561,2)--突破3 MNBMVP(KKB+0x26F7AC0,-9999,16)--定点防拉 MNBMVP(KKB+0x45CFCA8,-9999.1,16)--定点防拉 MNBMVP(KKB+0x267C928,9999,16)--流畅 MNBMVP(KKB+0x270FD5C,0,16)--去除人物 MNBMVP(KKB+0x2CA998C,0,16)--去除卡顿 MNBMVP(KKB+0x26F7B3C,0,16)--迟钝暴走 MNBMVP(KKB+0x2647E54,0,16)--罚站 MNBMVP(KKB+0x26FCA34,0,16)--小加速 MNBMVP(KKB+0x2C33484,0,16)--全局翻倍x1 MNBMVP(KKB+0x2C3349C,0,16)--全局翻倍x2 MNBMVP(KKB+0xD09CC0,-1.1221873e28,16)--变形加速 MNBMVP(KKB+0xBDD030,0,16)--飞天防坠 MNBMVP(KKB+0x26F7B4C,0,16)--定 --[[去除核心]] MNBMVP(KKB+0x26F7D18,1,2)--去除上下抖动 --MNBMVP(KKB+0x26CF608,0,2)--去除攀爬 MNBMVP(KKB+0x26FC96C,0,16)--去除弹射 MNBMVP(KKB+0x26F1700,0,16)--去除漂移 MNBMVP(KKB+0x26F7B40,1,2)--自身减慢[速度突破] --[[瞬空核心]] MNBMVP(KKB+0x26CF580,2,2)--飞天巩固平衡 MNBMVP(KKB+0x27036E4,2,2)--去除跳跃卡顿 MNBMVP(KKB+0x26CF7A0,0,16) MNBMVP(KKB+0x26CF7B0,0,16) MNBMVP(KKB+0x26F79A4,0,16) --[[洐魂核心]] MNBMVP(KKB+0x29830D0,1,2)--\ MNBMVP(KKB+0x29830E0,1,2)--\ MNBMVP(KKB+0x29830FC,6666,2)--洐魂核心↓ MNBMVP(KKB+0x2983114,6657,2)--/ MNBMVP(KKB+0x2983124,6673,2)--/ MNBMVP(KKB+0xCADA50,0,16)--统一加速 MNBMVP(KKB+0xCAD8AC,0,16)--统一减速 --[[刷新第2人物]] MNBMVP(KKB+0xBDCC38,1,2)--\ MNBMVP(KKB+0xBDCC84,1,2)--\ MNBMVP(KKB+0xBDCEE0,1,2)--\ MNBMVP(KKB+0x1274E84,0,16)--去除漂移 local KKB=gg.getRangesList("libUE4.so")[1].start MNBMVP(KKB+0x26BF690,220,16) MNBMVP(KKB+0x2C33354,0,16) MNBMVP(KKB+0x26ED834,6658,2) MNBMVP(KKB+0xDAEF68,0,16)--无后 MNBMVP(KKB+0xDB10B8,90,16)--聚点 MNBMVP(KKB+0xDB0AF8,0,16)--倍镜防抖 MNBMVP(KKB+0x2640680,0,16)--身体防抖 MNBMVP(KKB+0x26BC7AC,0,16)--身体防抖 MNBMVP(KKB+0x217D2B0,0,16)--沙漠地图 end floatingWindowManager:init() floatingWindowManager:newWindow(('主页面'):format(floatingWindowManager.version), { onCreate = function(floatingWindow) floatingWindow:addlayout({ScrollView,layout_margin = '10dp',layout_width = 'match_parent',layout_height = 'match_parent', {LinearLayout,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_height = 'match_parent',orientation = 'vertical',padding = '10dp', {Button,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_margin = '5dp',text = '瞬空',textSize = '16sp',onClick = function(View)floatingWindowManager:start('副页')end}, --{Button,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_margin = '5dp',text = '大厅',textSize = '16sp',onClick = function(View)floatingWindowManager:start('大厅')end}, --{Button,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_margin = '5dp',text = '枪配',textSize = '16sp',onClick = function () luajava.startThread(QK) end}, --{Button,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_margin = '5dp',text = '速配',textSize = '16sp',onClick = function () luajava.startThread(SSSP) end}, {Button,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_margin = '5dp',text = '缩小',textSize = '16sp',onClick = function(View)floatingWindowManager:start('查配')end}, {Button,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_margin = '5dp',text = '关闭',textSize = '16sp',onClick = function()floatingWindowManager:exit()end}, }})end,onDestroy = function()gg.alert('天天开心 !')end}) floatingWindowManager:newWindow('副页', { onCreate = function(floatingWindow) floatingWindow:addlayout({ScrollView,layout_width = 'match_parent',layout_height = 'match_parent', {LinearLayout;layout_gravity="center";orientation="horizontal";backgroundColor="0"; {TextView;alpha="0xFF00FFFF";layout_marginTop="-20dp";layout_width="0dp";textSize="20sp";layout_height="88dp";backgroundColor="0xFF000000";onClick = function(View)floatingWindowManager:start('收起')end}, {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="防闪";onClick = function () luajava.startThread(SZD) end}; {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="秒落";onClick = function () luajava.startThread(SDF) end}; {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="开镜";onClick = function () luajava.startThread(XCV) end}; {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="原地";onClick = function () luajava.startThread(SBK2) end}; {Button;layout_width = 'match_parent', layout_marginTop="-10dp";layout_width="50dp";textSize="20sp";text="上";onClick = function () luajava.startThread(M1) end}; {Button;layout_width = 'match_parent', layout_marginLeft="-50dp";layout_marginTop="30dp";textSize="20sp";layout_width="50dp";text="速";onClick= function () luajava.startThread(SD4) end}; {Button;layout_width = 'match_parent', layout_marginTop="-10dp";layout_width="50dp";textSize="20sp";text="定";onClick = function () luajava.startThread(M2) end}; {Button;layout_width = 'match_parent', layout_marginLeft="-50dp";layout_marginTop="30dp";textSize="20sp";layout_width="50dp";text="速";onClick= function () luajava.startThread(SD3) end}; {Button;layout_width = 'match_parent', layout_marginTop="-10dp";layout_width="50dp";textSize="20sp";text="下";onClick = function () luajava.startThread(M3) end}; {Button;layout_width = 'match_parent', layout_marginLeft="-50dp";layout_marginTop="30dp";textSize="20sp";layout_width="50dp";text="速";onClick= function () luajava.startThread(SD5) end}; {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="缆车";onClick = function () luajava.startThread(SBK3) end}; {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="大厅";onClick = function () luajava.startThread(MNBWW) end}; {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="瞬移";onClick = function () luajava.startThread(SZD99) end}; {Button;layout_width = 'match_parent', layout_height="88dp";layout_width="50dp";textSize="20sp";text="救回";onClick = function () luajava.startThread(SBK1) end}; {TextView;alpha="0xFF00FFFF";layout_marginTop="-20dp";layout_width="0dp";textSize="20sp";layout_height="88dp";backgroundColor="0xFF000000";onClick = function(View)floatingWindowManager:start('收起')end}, }})end}) function SDF() local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x508, 0x1C, 0x28} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 114514514}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x508, 0x1C, 0x2C}--降落伞加速x2 local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 114514514}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x18, 0xB60, 0xD8} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 191918}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x18, 0xB60, 0xDC} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 191918}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x18, 0xB60, 0xE0} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 191918}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x18, 0xB60, 0xE4}--下落 local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 191918}}) end function XCV() local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x140,0x150}--G36C模型改妹控 local ttt = S_Pointer(t, tt,true) gg.addListItems({{address = ttt, flags = 4, freeze =false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x140,0x154}--G36C模型改妹控 local ttt = S_Pointer(t, tt,true) gg.addListItems({{address = ttt, flags = 4, freeze =false}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x140,0x158}--G36C模型改妹控 local ttt = S_Pointer(t, tt,true) gg.addListItems({{address = ttt, flags = 4, freeze =false}}) end function SZD() so = gg.getRangesList("libanogs.so")[1].start setvalue(so + "0x30618", 32,"h 00 00 B0 E3 1E FF 2F E1") setvalue(so + "0x3061C", 32,"h 00 00 B0 E3 1E FF 2F E1") local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2D8, 0x1558} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 70}}) end function SZD99() local t = {"libUE4.so", "Cd"} local tt = {0x5C2A20, 0x24, 0x6C, 0x24} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 1.40129846e-39}})--开枪防拉 gg.toast("去除开枪") local t = {"libUE4.so:bss", "Cb"} local tt = {0x2494A0, 0xB4, 0xD90, 0x19F4} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 0.8}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x138} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 75}}) local t = {"libUE4.so", "Cd"} local tt = {0x1EA3A8, 0x20, 0x320, 0x19F4} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 0.13}}) gg.toast("上下坡防拉") local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2D8, 0x1558} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 70}})--浮空 local t = {"libUE4.so", "Cd"} local tt = {0x5C2A20, 0x78, 0x68, 0x3C8} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 1.79999995232}})--A全局 so=gg.getRangesList('libUE4.so')[1].start py=0XCB8B40 setvalue(so+py,16,-3.83692277e21) so=gg.getRangesList('libUE4.so')[1].start py=0X267C928 setvalue(so+py,16,5.6) so=gg.getRangesList('libUE4.so')[1].start py=0X26FCA44 setvalue(so+py,16,0.28000000119) so=gg.getRangesList('libUE4.so')[1].start py=0X270878C setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2C33484 setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2C3349C setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2C33524 setvalue(so+py,16,9.5) so=gg.getRangesList('libUE4.so')[1].start py=0X2C33528 setvalue(so+py,16,0) so=gg.getRangesList('libUE4.so')[1].start py=0X2D082A0 setvalue(so+py,16,0) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x60} local ttt = S_Pointer(t, tt) local tt = {0x1EA3A8, 0x20, 0x2CC, 0x14F0} local ttt = S_Pointer(t, tt) gg.setValues({{address = ttt, flags = 16, value = 9999}}) gg.setValues({{address = ttt, flags = 16, value = 2}}) gg.clearResults() gg.setRanges(32) gg.searchNumber("2.0;2,048.0;300.0;0.05000000075", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("0.05000000075", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("20000000", gg.TYPE_FLOAT) end function SD3() MNBCNM =io.open("/storage/emulated/0/Android/浮速","r") if MNBCNM == nil then io.open("/storage/emulated/0/Android/浮速","w") else end if io.open("/storage/emulated/0/Android/浮速")~=nil then MNBHH=io.open("/storage/emulated/0/Android/浮速","r"):read("*a") pcall(load(MNBHH))end local MNBHH = gg.prompt({MNBHH}, {MNBHH}, {'text'}) if MNBHH then io.open("/storage/emulated/0/Android/浮速","w"):write(MNBHH[1]) local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x180 MNBMVP(KKB+8,MNBHH[1],16)--游速 end end function SD4() MNBCNM =io.open("/storage/emulated/0/Android/上速","r") if MNBCNM == nil then io.open("/storage/emulated/0/Android/上速","w") else end if io.open("/storage/emulated/0/Android/上速")~=nil then MNBHH=io.open("/storage/emulated/0/Android/上速","r"):read("*a") pcall(load(MNBHH))end local MNBHH = gg.prompt({MNBHH}, {MNBHH}, {'text'}) if MNBHH then io.open("/storage/emulated/0/Android/上速","w"):write(MNBHH[1]) end end function SD5() MNBCNM =io.open("/storage/emulated/0/Android/下速","r") if MNBCNM == nil then io.open("/storage/emulated/0/Android/下速","w") else end if io.open("/storage/emulated/0/Android/下速")~=nil then MNBHH=io.open("/storage/emulated/0/Android/下速","r"):read("*a") pcall(load(MNBHH))end local MNBHH = gg.prompt({MNBHH}, {MNBHH}, {'text'}) if MNBHH then io.open("/storage/emulated/0/Android/下速","w"):write(MNBHH[1]) end end function M1() D=io.open("/storage/emulated/0/Android/上速","r"):read("*a") local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x180 MNBMVP(KKB-0x4C,-D,16) end function M3() D=io.open("/storage/emulated/0/Android/下速","r"):read("*a") local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x180 MNBMVP(KKB-0x4C,D,16) end function M2() D=io.open("/storage/emulated/0/Android/浮速","r"):read("*a") local KKB=gg.getRangesList("libUE4.so:bss")[1].start local KKB=KKB+0x1EA3A8 local KKB=MNB(KKB)+0x20 local KKB=MNB(KKB)+0x2CC local KKB=MNB(KKB)+0x310 local KKB=MNB(KKB)+0x180 MNBMVP(KKB+8,D,16)--游速 MNBMVP(KKB-0x4C,0,16) end function SBK3() so = gg.getRangesList('libUE4.so:bss','Cb')[1].start local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x1D8} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value=1, freeze =true}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x140,0x150} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value=44271, freeze =true}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x140,0x154} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value=152773, freeze =true}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x140,0x158} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value=5820, freeze =true}}) gg.sleep(1000) z3 = RUI(RUI(RUI(RUI(RUI(so + 0x1EA3A8)+0x20)+0x2CC)+0x310)+0x348) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x348}--高帧率 local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value =z3, freeze =true}}) z3 = RUI(RUI(RUI(RUI(RUI(so + 0x1EA3A8)+0x20)+0x2CC)+0x310)+0x344) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x344}--高帧率 local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = z3, freeze =true}}) z3 = RUI(RUI(RUI(RUI(RUI(so + 0x1EA3A8)+0x20)+0x2CC)+0x310)+0x340) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x340}--高帧率 local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = z3, freeze =true}}) z3 = RUI(RUI(RUI(RUI(RUI(so + 0x1EA3A8)+0x20)+0x2CC)+0x310)+0x33C) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x33C}--高帧率 local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = z3, freeze =true}}) end function SBK2() local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8,0x20,0x2CC,0x140,0x158} local ttt = S_Pointer(t, tt) c = gg.getValues({{address = ttt, flags = 16}}) gg.setValues({{address = ttt, flags=16, value =c[1].value+120}}) end function SBK1() local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x134} local ttt = S_Pointer(t, tt) gurenya({{address = ttt, flags = 16, value = 1.5}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x134} local ttt = S_Pointer(t, tt) gurenya({{address = ttt, flags = 16, value = 4}}) local t = {"libUE4.so:bss", "Cb"} local tt = {0x1EA3A8, 0x20, 0x2CC, 0x310, 0x134} local ttt = S_Pointer(t, tt) gurenya({{address = ttt, flags = 16, value = 0}}) end floatingWindowManager:newWindow('配置', { onCreate = function(floatingWindow) floatingWindow:addlayout({ScrollView,layout_width = 'match_parent',layout_height = 'match_parent', {LinearLayout,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_height = 'match_parent',orientation = 'vertical', {TextView;alpha="0xFF00FFFF";maxHeight="50dp";textSize="30sp";backgroundColor="0xFF000000";text=" 返回 ",onClick = function(View)floatingWindowManager:start('主页面')end}, {Button;layout_width = 'match_parent',layout_margin = '5dp',textSize="20sp";text="主速";onClick = function () luajava.startThread(D2) end}; {Button;layout_width = 'match_parent',layout_margin = '5dp',textSize="20sp";text="视角";onClick = function () luajava.startThread(D3) end}; {Button;layout_width = 'match_parent',layout_margin = '5dp',textSize="20sp";text="头范";onClick = function () luajava.startThread(D4) end}; }})end}) floatingWindowManager:newWindow('查配', { onCreate = function(floatingWindow) floatingWindow:addlayout({ScrollView,layout_width = 'match_parent',layout_height = 'match_parent', {LinearLayout,background = floatingWindowManager:getStateListDrawable(),layout_width = 'match_parent',layout_height = 'match_parent',orientation = 'vertical', {TextView;alpha="0xFF00FFFF";maxHeight="50dp";textSize="30sp";backgroundColor="0xFF000000";text=" 点击惨厉返回 ",onClick = function(View)floatingWindowManager:start('查配')end}, }})end}) floatingWindowManager:run()