android脚本精灵开发,触动精灵脚本开发示例代码

渐开线实现

渐开线在游戏脚本中多用于找怪或者农场类游戏中收割,下面给出两种不同的渐开线在触动精灵中的实现方法:

方形渐开线

init(1)

mSleep(1000)

local x = 1010 --起始坐标x

local y = 698 --起始坐标y

local v = 30 --两点间距离

touchDown(x, y)

mSleep(100)

for var = 1,20 do

j = 0

k = v

for _i = 1,2 do

for i = 1,10 do

x = x + j

y = y + k

touchMove(x, y)

mSleep(20)

end

j = v

k = 0

end

v = v * (-1.05)

end

touchUp(x, y)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

init(1)

mSleep(1000)

localx=1010--起始坐标x

localy=698--起始坐标y

localv=30--两点间距离

touchDown(x,y)

mSleep(100)

forvar=1,20do

j=0

k=v

for_i=1,2do

fori=1,10do

x=x+j

y=y+k

touchMove(x,y)

mSleep(20)

end

j=v

k=0

end

v=v *(-1.05)

end

touchUp(x,y)

圆形渐开线

init(1)

mSleep(1000)

local x0 = 1010 --起始坐标x

local y0 = 698 --起始坐标y

local rr = 20 --设置递增半径

local l = 10 --设置点间距

local p = 0 --初始化角度

local r = 30 --设置首圈半径

local rn = 10 --设置圈数

touchDown(x0, y0)

mSleep(100)

for var = 1,rn do

while p < math.pi * 2 do

x = x0 + r * math.cos(p)

y = y0 - r * math.sin(p)

touchMove(x, y)

mSleep(10)

p = p + l/r

end

p = 0

r = r + rr

end

touchUp(x0, y0)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

init(1)

mSleep(1000)

localx0=1010--起始坐标x

localy0=698--起始坐标y

localrr=20--设置递增半径

locall=10--设置点间距

localp=0--初始化角度

localr=30--设置首圈半径

localrn=10--设置圈数

touchDown(x0,y0)

mSleep(100)

forvar=1,rndo

whilep

x=x0+r *math.cos(p)

y=y0-r *math.sin(p)

touchMove(x,y)

mSleep(10)

p=p+l/r

end

p=0

r=r+rr

end

touchUp(x0,y0)

多点模糊比色

在实际游戏脚本制作中,很多界面单靠1个点不容易进行准确的判断,这里封装一个配合TABLE使用的多点模糊比色函数来实现精确判断:

function multiColor(array,s)

s = math.floor(0xff*(100-s)*0.01)

keepScreen(true)

for var = 1, #array do

local 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 then

keepScreen(false)

return false

end

end

keepScreen(false)

return true

end

--用法

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) then

touchDown(100,100)

mSleep(50)

touchUp(100,100)

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

functionmultiColor(array,s)

s=math.floor(0xff*(100-s)*0.01)

keepScreen(true)

forvar=1,#array do

locallr,lg,lb=getColorRGB(array[var][1],array[var][2])

localr=math.floor(array[var][3]/0x10000)

localg=math.floor(array[var][3]%0x10000/0x100)

localb=math.floor(array[var][3]%0x100)

ifmath.abs(lr-r)>sormath.abs(lg-g)>sormath.abs(lb-b)>sthen

keepScreen(false)

returnfalse

end

end

keepScreen(false)

returntrue

end

--用法

g_t_Table={

{1962,52,0xefdccf},

{2150,50,0xefd8d0},

{1964,76,0xe9d1c5},

{2152,74,0xefdcd1},

{2122,62,0xf1ddd1},

{2146,1080,0x893824},

{1840,1082,0x593724},

}

ifmultiColor(g_t_Table,90)then

touchDown(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))

end

math.randomseed(get_seed())

for var = 1,5 do

dialog(math.random())

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

--改进方法

math.randomseed(tostring(os.time()):reverse():sub(1,6))--随机种子

dialog(math.random())

--进阶方法,需加载扩展库中的socket模块

localts=require("ts")

localfunctionget_seed()

localt=string.format("%f",socket.gettime())

localst=string.sub(t,string.find(t,"%.")+1,-1)

returntonumber(string.reverse(st))

end

math.randomseed(get_seed())

forvar=1,5do

dialog(math.random())

end

自定义字符串随机

function randomStr(str, num)

local ret =''

for i = 1, num do

local rchr = math.random(1, string.len(str))

ret = ret .. string.sub(str, rchr, rchr)

end

return ret

end

--用法

math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6))) --设置随机种子

for var = 1,5 do

s = randomStr("abcdefghijklmnopqrstuvwxyz", 6) --生成6位随机字母

nLog(s)

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

functionrandomStr(str,num)

localret=''

fori=1,numdo

localrchr=math.random(1,string.len(str))

ret=ret..string.sub(str,rchr,rchr)

end

returnret

end

--用法

math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6)))--设置随机种子

forvar=1,5do

s=randomStr("abcdefghijklmnopqrstuvwxyz",6)--生成6位随机字母

nLog(s)

end

随机大小写字母

function rndLetter(num)

local ret = ""

pcall(function()

for var = 1,num do

if math.random()>0.5 then

ret = ret..string.char(math.random(65,90))

else

ret = ret..string.char(math.random(97,122))

end

end

end)

return ret

end

--用法

math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6))) --设置随机种子

for var = 1,5 do

nLog(rndLetter(10)) --生成一个10位随机大小写字母的字符串

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

functionrndLetter(num)

localret=""

pcall(function()

forvar=1,numdo

ifmath.random()>0.5then

ret=ret..string.char(math.random(65,90))

else

ret=ret..string.char(math.random(97,122))

end

end

end)

returnret

end

--用法

math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6)))--设置随机种子

forvar=1,5do

nLog(rndLetter(10))--生成一个10位随机大小写字母的字符串

end

日期与时间

获取今天是星期几

local today = tonumber(os.date("%w",os.time()))

if today == 0 or today == 6 then --如果是周日或者周六

dialog(today, 0)

end

1

2

3

4

localtoday=tonumber(os.date("%w",os.time()))

iftoday==0ortoday==6then--如果是周日或者周六

dialog(today,0)

end

获取当前日期及时间

local nowTime = os.date("*t",os.time()) --返回一个table

dialog(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)

1

2

3

4

5

6

7

8

9

10

11

localnowTime=os.date("*t",os.time())--返回一个table

dialog(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)--显示当前为一年中的第几天

--时间戳格式化当前时间

localnowTime=os.date("%Y-%m-%d %H:%M:%S",os.time())

dialog(nowTime,0)

UI

一个包含所有控件的默认样式UI实例

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 do

nLog(retTable[var]) --输出每一个返回值

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

localts=require("ts")--写showUI前必须插入这一句

localjson=ts.json--写showUI前必须插入这一句

w,h=getScreenSize();

MyTable={

["style"]="default",

["width"]=w,

["height"]=h,

["config"]="save_01.dat",

["timer"]=99,

["orient"]=0,--需引擎版本iOSv2.2.5以上版本支持,Android暂不支持

["pagetype"]="multi",--需引擎版本iOSv2.2.5,Androidv2.1.5以上版本支持

["title"]="触动精灵脚本配置",--需引擎版本iOSv2.2.5,Androidv1.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"

},

}

}

}

localMyJsonString=json.encode(MyTable);

retTable={showUI(MyJsonString)};

forvar=1,#retTable do

nLog(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 then

local account_tab = {}

local account = f:read()

while account do

table.insert(account_tab,account)

account = f:read()

end

f:close()

if #account_tab > 0 then

local f = io.open("script/account.txt", "w")

if f then

for i = 2,#account_tab do

f:write(account_tab[i].."\n")

end

f:close()

end

return account_tab[1]

else

return false

end

end

return false

]]

)

assert(ok,account)

if account then

nLog("获取账号:"..account)

toast("获取账号:"..account)

else

nLog("获取账号失败")

toast("获取账号失败")

end

mSleep(1000)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

--[[

简单的发账号示例

script/account.txt内保存账号密码

--]]

localok,account=telib:controller_injection(

[[

localf=io.open("script/account.txt","r")

iffthen

localaccount_tab={}

localaccount=f:read()

whileaccountdo

table.insert(account_tab,account)

account=f:read()

end

f:close()

if#account_tab > 0 then

localf=io.open("script/account.txt","w")

iffthen

fori=2,#account_tab do

f:write(account_tab[i].."\n")

end

f:close()

end

returnaccount_tab[1]

else

returnfalse

end

end

returnfalse

]]

)

assert(ok,account)

ifaccountthen

nLog("获取账号:"..account)

toast("获取账号:"..account)

else

nLog("获取账号失败")

toast("获取账号失败")

end

mSleep(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 then

local ok,msg = telib:controller_injection(

[[

require("lfs").mkdir("scriptData")

local f = io.open("scriptData/playLog.text","a")

if f then

f:write("]]..str..[[\r\n")

f:close()

end

]]

)

else

local ok,msg = telib:controller_injection(

[[

local f = io.open("]]..path..[[","]]..mode..[[")

if f then

f:write("]]..str..[[\r\n")

f:close()

end

]]

)

end

end

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,account

if tsType=="table" then

ok,account = telib:controller_injection(

[[

local f = io.open("]]..path..[[", "r")

if f then

local account_tab = {}

local account = f:read()

while account do

table.insert(account_tab,account)

account = f:read()

end

f:close()

return account_tab

end

return false

]]

)

else

ok,account = telib:controller_injection(

[[

local f = io.open("]]..path..[[", "r")

if f then

local account = f:read("*all")

f:close()

return account

end

return false

]]

)

end

return account

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

functionwriteEEFile(str,path,mode)--写入文件内容,路径,类型,默认路径企业版目录scriptData/playLog.text下,自定义路径请把\改为/。默认类型追加,覆盖第三个参数写"wb"

mode=modeor"a"

localtelib=require("ts_enterprise_lib")

assert(telib,"无法引入企业专用库")

ifpath==nilthen

localok,msg=telib:controller_injection(

[[

require("lfs").mkdir("scriptData")

localf=io.open("scriptData/playLog.text","a")

iffthen

f:write("]]..str..[[\r\n")

f:close()

end

]]

)

else

localok,msg=telib:controller_injection(

[[

localf=io.open("]]..path..[[","]]..mode..[[")

iffthen

f:write("]]..str..[[\r\n")

f:close()

end

]]

)

end

end

functionfindEEFile(path,tsType)--读取文件内容,读取方式(string或table)

path=pathor"scriptData/playLog.text"

tsType=tsTypeor"string"

localtelib=require("ts_enterprise_lib")

assert(telib,"无法引入企业专用库")

localok,account

iftsType=="table"then

ok,account=telib:controller_injection(

[[

localf=io.open("]]..path..[[","r")

iffthen

localaccount_tab={}

localaccount=f:read()

whileaccountdo

table.insert(account_tab,account)

account=f:read()

end

f:close()

returnaccount_tab

end

returnfalse

]]

)

else

ok,account=telib:controller_injection(

[[

localf=io.open("]]..path..[[","r")

iffthen

localaccount=f:read("*all")

f:close()

returnaccount

end

returnfalse

]]

)

end

returnaccount

end

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 类似按键精灵脚本录制项目是指一种与按键精灵类似的应用程序,可以录制和播放一系列Android设备上的操作步骤,从而实现自动化操作。 这样的项目通常由以下几个主要组件构成: 1. 脚本录制功能:用户可以通过点击、滑动、输入文本等操作步骤来录制脚本。录制过程中会记录每个操作的类型、位置和参数。 2. 脚本编辑功能:用户可以对录制的脚本进行编辑,例如调整操作的顺序、修改参数等。 3. 脚本播放功能:用户可以选择播放已录制的脚本,系统会自动模拟用户在设备上的操作步骤进行自动化操作。 4. 脚本管理功能:用户可以对录制的脚本进行保存、导入、导出和删除等管理操作,方便后续的使用和维护。 实现这样一个项目需要掌握Android应用开发的相关技术,例如: 1. Android图形界面开发:使用Android的界面组件来实现用户界面的设计和交互。 2. Android事件处理:监听用户的触摸、滑动等事件,并记录下来用于脚本录制。 3. 脚本与解析:将录制的操作转化为可执行的脚本代码,并将代码解析为对应的操作步骤。 4. 设备模拟与控制:通过模拟鼠标点击、键盘输入等操作,实现自动化操作。 此外,为了确保项目的成功,还需要进行一定的测试和优化。例如,针对不同设备分辨率、系统版本和应用程序差异,进行充分的测试和适配工作,提高应用的兼容性和稳定性。 总结来说,Android 类似按键精灵脚本录制项目是一种实现自动化操作的应用程序,通过录制和播放一系列操作步骤,提高用户的效率和体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值