@miniknife
2019-05-13T09:40:55.000000Z
字数 7888
阅读 53777
已不更新,最新版请查看:http://www.touchsprite.com/docs/5489
开发教程
渐开线在游戏脚本中多用于找怪或者农场类游戏中收割,下面给出两种不同的渐开线在触动精灵中的实现方法:
init(1)mSleep(1000)local x = 1010 --起始坐标xlocal y = 698 --起始坐标ylocal v = 30 --两点间距离touchDown(x, y)mSleep(100)for var = 1,20 doj = 0k = vfor _i = 1,2 dofor i = 1,10 dox = x + jy = y + ktouchMove(x, y)mSleep(20)endj = vk = 0endv = v * (-1.05)endtouchUp(x, y)
init(1)mSleep(1000)local x0 = 1010 --起始坐标xlocal y0 = 698 --起始坐标ylocal rr = 20 --设置递增半径local l = 10 --设置点间距local p = 0 --初始化角度local r = 30 --设置首圈半径local rn = 10 --设置圈数touchDown(x0, y0)mSleep(100)for var = 1,rn dowhile p < math.pi * 2 dox = x0 + r * math.cos(p)y = y0 - r * math.sin(p)touchMove(x, y)mSleep(10)p = p + l/rendp = 0r = r + rrendtouchUp(x0, y0)
在实际游戏脚本制作中,很多界面单靠1个点不容易进行准确的判断,这里封装一个配合TABLE使用的多点模糊比色函数来实现精确判断:
function multiColor(array,s)s = math.floor(0xff*(100-s)*0.01)keepScreen(true)for var = 1, #array dolocal lr,lg,lb = getColorRGB(array[var][1],array[var][2])local r = math.floor(array[var][3]/0x10000)local g = math.floor(array[var][3]%0x10000/0x100)local b = math.floor(array[var][3]%0x100)if math.abs(lr-r) > s or math.abs(lg-g) > s or math.abs(lb-b) > s thenkeepScreen(false)return falseendendkeepScreen(false)return trueend--用法g_t_Table = {{ 1962, 52, 0xefdccf},{ 2150, 50, 0xefd8d0},{ 1964, 76, 0xe9d1c5},{ 2152, 74, 0xefdcd1},{ 2122, 62, 0xf1ddd1},{ 2146, 1080, 0x893824},{ 1840, 1082, 0x593724},}if multiColor(g_t_Table,90) thentouchDown(100,100)mSleep(50)touchUp(100,100)end
- 参数 s 为模糊度,范围 0 - 100,一般使用90即可。
- 实例中的TABLE格式可使用触动精灵抓色器生成。
由于lua中的随机函数产生的随机数是伪随机,我们需要设置一个随机种子来解决此问题
--改进方法math.randomseed(tostring(os.time()):reverse():sub(1, 6)) -- 随机种子dialog(math.random())
--进阶方法,需加载扩展库中的socket模块local ts = require("ts")local function get_seed()local t = string.format("%f", socket.gettime())local st = string.sub(t, string.find(t, "%.") + 1, -1)return tonumber(string.reverse(st))endmath.randomseed(get_seed())for var = 1,5 dodialog(math.random())end
function randomStr(str, num)local ret =''for i = 1, num dolocal rchr = math.random(1, string.len(str))ret = ret .. string.sub(str, rchr, rchr)endreturn retend--用法math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6))) --设置随机种子for var = 1,5 dos = randomStr("abcdefghijklmnopqrstuvwxyz", 6) --生成6位随机字母nLog(s)end
function rndLetter(num)local ret = ""pcall(function()for var = 1,num doif math.random()>0.5 thenret = ret..string.char(math.random(65,90))elseret = ret..string.char(math.random(97,122))endendend)return retend--用法math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6))) --设置随机种子for var = 1,5 donLog(rndLetter(10)) --生成一个10位随机大小写字母的字符串end
local today = tonumber(os.date("%w",os.time()))if today == 0 or today == 6 then --如果是周日或者周六dialog(today, 0)end
local nowTime = os.date("*t",os.time()) --返回一个tabledialog(nowTime.year, 0) --年dialog(nowTime.month, 0) --月dialog(nowTime.day, 0) --日dialog(nowTime.hour, 0) --小时dialog(nowTime.min, 0) --分钟dialog(nowTime.sec, 0) --秒钟dialog(nowTime.yday, 0) --显示当前为一年中的第几天--时间戳格式化当前时间local nowTime = os.date("%Y-%m-%d %H:%M:%S", os.time())dialog(nowTime,0)
local ts = require("ts")--写 showUI 前必须插入这一句local json = ts.json--写 showUI 前必须插入这一句w,h = getScreenSize();MyTable = {["style"] = "default",["width"] = w,["height"] = h,["config"] = "save_01.dat",["timer"] = 99,["orient"] = 0,--需引擎版本 iOS v2.2.5以上版本支持,Android 暂不支持["pagetype"] = "multi",--需引擎版本 iOS v2.2.5,Android v2.1.5 以上版本支持["title"] = "触动精灵脚本配置",--需引擎版本 iOS v2.2.5,Android v1.2.4 以上版本支持["cancelname"] = "取消",["okname"] = "开始",pages ={{{["type"] = "Label",["text"] = "第一页设置",["size"] = 25,["align"] = "center",["color"] = "0,0,0",},{["type"] = "RadioGroup",["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",["select"] = "1",},},{{["type"] = "Label",["text"] = "第二页设置",["size"] = 25,["align"] = "center",["color"] = "0,0,0",},{["type"] = "Edit",["prompt"] = "请输入一个字母",["text"] = "默认值",["kbtype"] = "ascii",},{["type"] = "Edit",["prompt"] = "请输入一个数字",["text"] = "默认值",["kbtype"] = "number",},},{{["type"] = "Label",["text"] = "第三页设置",["size"] = 25,["align"] = "center",["color"] = "0,0,0",},{["type"] = "CheckBoxGroup",["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",["select"] = "3@5",},{["type"] = "ComboBox",["list"] = "选项1,选项2,选项3",["select"] = "1",["data"] = "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9",["source"] = "test"},{["type"] = "ComboBox",["select"] = "1",["dataSource"] = "test"},}}}local MyJsonString = json.encode(MyTable);retTable = {showUI(MyJsonString)};for var = 1,#retTable donLog(retTable[var]) --输出每一个返回值end
- 以上实例中使用了两个 ComboBox 控件,并在两个 ComboBox 控件之间建立了数据关联,此控件属性需引擎版本 iOS v2.1.8,Android v1.1.0 以上支持。
- 以上实例中的 title 属性需引擎版本 iOS v2.2.5,Android v1.2.4 以上版本支持。
- 以上实例中的 pagetype 属性需引擎版本 iOS v2.2.5,Android v2.1.5 以上版本支持。
- 以上实例中的 orient 属性需引擎版本 iOS v2.2.5以上版本支持,Android 暂不支持。
- 以上实例中最后对于 showUI 的调用将返回一个table。
--[[简单的发账号示例script/account.txt内保存账号密码--]]local ok,account = telib:controller_injection([[local f = io.open("script/account.txt", "r")if f thenlocal account_tab = {}local account = f:read()while account dotable.insert(account_tab,account)account = f:read()endf:close()if #account_tab > 0 thenlocal f = io.open("script/account.txt", "w")if f thenfor i = 2,#account_tab dof:write(account_tab[i].."\n")endf:close()endreturn account_tab[1]elsereturn falseendendreturn false]])assert(ok,account)if account thennLog("获取账号:"..account)toast("获取账号:"..account)elsenLog("获取账号失败")toast("获取账号失败")endmSleep(1000)
function writeEEFile(str,path,mode) --写入文件内容,路径,类型,默认路径企业版目录scriptData/playLog.text下,自定义路径请把\改为/。默认类型追加,覆盖第三个参数写"wb"mode = mode or "a"local telib = require("ts_enterprise_lib")assert(telib,"无法引入企业专用库")if path==nil thenlocal ok,msg = telib:controller_injection([[require("lfs").mkdir("scriptData")local f = io.open("scriptData/playLog.text","a")if f thenf:write("]]..str..[[\r\n")f:close()end]])elselocal ok,msg = telib:controller_injection([[local f = io.open("]]..path..[[","]]..mode..[[")if f thenf:write("]]..str..[[\r\n")f:close()end]])endend
function findEEFile(path,tsType) --读取文件内容,读取方式(string或table)path = path or "scriptData/playLog.text"tsType = tsType or "string"local telib = require("ts_enterprise_lib")assert(telib,"无法引入企业专用库")local ok,accountif tsType=="table" thenok,account = telib:controller_injection([[local f = io.open("]]..path..[[", "r")if f thenlocal account_tab = {}local account = f:read()while account dotable.insert(account_tab,account)account = f:read()endf:close()return account_tabendreturn false]])elseok,account = telib:controller_injection([[local f = io.open("]]..path..[[", "r")if f thenlocal account = f:read("*all")f:close()return accountendreturn false]])endreturn accountend
如果您安装了以下插件导致服务使用异常,请在Cydia 中卸载该插件后重新安装客户端。
Stashing/内存修正插件
会导致帮你玩无法注册和登录账号,提示文件获取失败
StatusHUD2 插件
会导致脚本showUI无法弹。
FakeGPS Pro
会导致点击失效或服务无法启动
CCSettings
会导致脚本showUI无法弹出
协奏助手
会导致点击失效
按键精灵iOS
会导致UI弹出后点击【取消】【确定】无反应
xxplugin - coc/cok等
会导致点击失效或服务无法启动
XY苹果助手
会导致点击失效或服务无法启动
| 函数名 | 描述 | 示例 | 结果 |
|---|---|---|---|
| pi | 圆周率 | math.pi | 3.1415926535898 |
| abs | 取绝对值 | math.abs(-2012) | 2012 |
| ceil | 向上取整 | math.ceil(9.1) | 10 |
| floor | 向下取整 | math.floor(9.9) | 9 |
| max | 取参数最大值 | math.max(2,4,6,8) | 8 |
| min | 取参数最小值 | math.max(2,4,6,8) | 2 |
| pow | 计算x的y次幂 | math.pow(2,16) | 65536 |
| sqrt | 开平方 | math.sqrt(65536) | 256 |
| modf | 取整数和小数部分 | math.modf(20.12) | 20 0.12 |
| randomseed | 设随机数种子 | math.randomseed(os.time()) | |
| random | 取随机数 | math.random(5,90) | 5 ~ 90 |
| rad | 角度转弧度 | math.rad(180) | 3.1415926535898 |
| deg | 弧度转角度 | math.deg(math.pi) | 180 |
| exp | e的x次方 | math.exp(4) | 54.598150033144 |
| log | 计算x的自然对数 | math.log(54.598150033144) | 4 |
| log10 | 计算10为底,x的对数 | math.log10(1000) | 3 |
| frexp | 将参数拆成 x * (2 ^ y) 的形式 | math.frexp(160) | 0.625 8 |
| ldexp | 计算x * (2 ^ y) | math.ldexp(0.625,8) | 160 |
| sin | 正弦 | math.sin(math.rad(30)) | 0.5 |
| cos | 余弦 | math.cos(math.rad(60)) | 0.5 |
| tan | 正切 | math.tan(math.rad(45)) | 1 |
| asin | 反正弦 | math.deg(math.asin(0.5)) | 30 |
| acos | 反余弦 | math.deg(math.acos(0.5)) | 60 |
| atan | 反正切 | math.deg(math.atan(1)) | 45 |
- WinSCP:链接:https://pan.baidu.com/s/1del626 密码:wdcn
- 简体中文语言包:链接:https://pan.baidu.com/s/1dmYZL0 密码:jd9z
- Putty:链接:https://pan.baidu.com/s/1pMwHRUN 密码:pegn
- VCredist 2010:https://pan.baidu.com/s/1cSap22 密码:mchk
- NET Framework 4:http://www.microsoft.com/zh-cn/download/details.aspx?id=17718
- 触动精灵本地 OCR 简体中文识别库:https://pan.baidu.com/s/1snhuZyH 密码:hy56
- 触动精灵本地 OCR 英文数字识别库:https://pan.baidu.com/s/1pMbdlEV 密码:9ewt