脚本精灵-做最方便,最快捷,最好玩的手机游戏脚本

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1242|回复: 10

[综合讨论] 【学习经验】我的脚本精灵学习经验和笔记

[复制链接]

164

主题

350

帖子

2216

积分

精灵助教

Rank: 10Rank: 10Rank: 10

威望
28
金币
1461
贡献
339
精华
1
在线时间
838 小时

脚本开发者最佳新人活跃会员热心会员技术达人宣传达人

QQ
发表于 2016-2-11 19:40:46 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 sivyura 于 2016-2-11 19:43 编辑

还望回复下


________________
Call,Task,Case,Act,Box
T[r][c] = getColors(x1, y1, x2. y2)
p, X1, Y1, X2, Y2 = findColors(x1, y1, x2. y2)
function getColors(x1, y1, x2. y2)
        local r, c, T = {}
        for r = y1, y2 do
                for c = x1, x2 do
                        T[r][c] = getColor(c, r)
                end
        end
        return T
end





atDate()
atTime()
setLight(
keepLight(
swipe(x1, y1, x2, y2,)




md5()
type(变量)
copylist()










1475752068,http://qm.qq.com/cgi-bin/qm/qr?k=VaQV9rQJA4vMzpARVM7NwTETYEarbBUN
1481611106,http://qm.qq.com/cgi-bin/qm/qr?k=Mj_7QDMtlnt2vUYAUnRyn7K-lVaGMqf1



________________
【运算符和条件判断】



算术一元运算符:-(负号)
算术二元运算符:+ - * / % ^ (加减乘除余幂)

关系运算符:< > <= >= ~= ==

逻辑运算符:and or not
逻辑运算符认为false和nil是假,其他为真,0也是true。

三元运算符:(a and b) or c
连接运算符:..

优先级从高到低:
  ^
  not -
  *  /
  +  -
  ..
  <  >  <=  >=  ~=  ==
  and
  or



  if  条件1  then
    表达式1
  elseif  条件2  then
    表达式2
。。。。。。
  elseif  条件n-1  then
    表达式n-1
  else  表达式n
  end

:abel::    goto Label
--跳转的使用
________________
【循环】



repeat
        循环体;
until        条件



while 条件 do
        循环体;
end



for 变量 = 初值, 终值, 步长 do
        循环体;
end



for 变量列表 in 表达式列表 do
        循环体;
end

变量列表(var-list)可以有多个变量,其中第一个固定为控制变量。表达式列表(exp-list)由至少一个表达式组成,在进入泛型for时被调用一次且只有这一次。泛型for的调用流程如下:

Step1:调用exp-list,然后返回3个值:迭代函数IterFunc、状态常量StateConst、控制变量ControlVar,不足3个的会自动补上nil,超过3个的会被忽略。

Step2:将状态常量和控制变量作为迭代函数的参数这样子调用:IterFunc(StateConst, ControlVar)。

Step3:将调用后的返回值按顺序赋给var-list中的变量,超出的抛弃,不足的补nil。

Step4:若返回的第一个值为nil,则循环结束,否则执行循环体。

Step5:回到Step2再次调用迭代函数。



迭代每一行:io.lines
迭代表元素:pairs
迭代数组元素:ipairs
迭代字符串中的单词:string.gmatch

回复

使用道具 举报

164

主题

350

帖子

2216

积分

精灵助教

Rank: 10Rank: 10Rank: 10

威望
28
金币
1461
贡献
339
精华
1
在线时间
838 小时

脚本开发者最佳新人活跃会员热心会员技术达人宣传达人

QQ
 楼主| 发表于 2016-2-11 19:50:45 来自手机 | 显示全部楼层
代码_脚本精灵






________________
【IO函数库】



readFile()
--二进制读取文件
local path = getSDCardPath()
--获取SD卡路径
txtpath = path.."/ScriptElf/script/123.txt"
--SD卡路径和文本文件的路径合一
local file = io.open(txtpath, "w")
--以“写入”方式打开文件,若文件不存在则创建
file:write("game is over")
--写入信息
file:write("\r\n")
--换行
file:read()
--读取第一行
file:read()
--读取第二行,为空
file:close()
--关闭文件

io.open(路径, 模式),下面是所有可用模式的列表:
r  读取模式
w  写入模式,覆盖现有内容
a  附加模式,附加在现有内容之后
b  二进制模式
r+  读取更新模式,现有数据保留
w+  写入更新模式,现有数据擦除
a+  附加更新模式,现有数据保留,只在文件末尾附加


假如一个文件里有多行,可以用以下方式读取:
for line in file:lines() do
     log("当前行内容:"..line)
end
________________
【UI函数库】



function createUI()
showLoopSetting(false)
newLine(窗口名称)
createTextView(控件名称, 文本, 宽度, 高度)
createWebView(控件名称, 路径, 宽度, 高度)
createEditText(控件名称, 默认值, 类型, 宽度, 高度)
createRadioBox(控件名称, 文本, 勾中否, 宽度, 高度)
createCheckBox(控件名称, 文本, 勾中否, 宽度, 高度)
createButton(控件名称, 文本, 函数名, 宽度, 高度)
createWindow(窗口名称, 宽度, 高度)
createTextViewEx(窗口名称, 控件名称, 文本, 宽度, 高度)
getText(窗口名称, 控件名称)
setText(窗口名称, 控件名称, 文本)
getChecked(窗口名称, 控件名称)
setChecked(窗口名称, 控件名称, 勾中否)

end



DEFAULT_WINDOW_NAME
--脚本界面主窗口名称

WRAP_CONTENT
--变量值为-2,表示根据内容变化

MATCH_PARENT
--变量值为-1,表示控件占满整行

EDIT_TYPE_TEXT
--变量为文本编辑框的多行文本编辑类型

EDIT_TYPE_LINE
--变量为文本编辑框的单行文本编辑类型

EDIT_TYPE_NUMBER
--变量为文本编辑框的数字编辑类型

EDIT_TYPE_PASSWORD
--变量为文本编辑框的密码编辑框类型
________________
【selArg】



function selArg(n, ...)
        local arg = {...}
        return arg[n]
end
--从参数列表中选出第n个参数并返回
________________
【pairs】



function pairs(t)
        return next, t, nil
end
________________
【ipairs】



function iter(a, i)
        i = i + 1
        local v = a[i]
        if v then
                return i, v
        end
end
function ipairs(a)
        return iter, a, 0
end
________________
【toastN{数组}】



function toastN(...)
        local arg, i, v = {...}
        for i, v in pairs(arg) do
                toast(v)
        end
end
--实现多个toast(" ")简化为toast("a", "b", "c", …)的功能
________________
【unpack】



t为数组的名称,i为数组的长度,返回值为数组的所有元素,相当于把数组解包。
function unpack(t, i)
        i = i or 1
        if t[i] then
                return t[i], unpack(t, i+1)
        end
end
________________
【手指长按】



function press(x, y, MS)
MS = MS or 15
touchDown(x, y)
sleep(15)
touchMove(x, y)
sleep(MS)
touchUp()
end
--press(x坐标, y坐标, 毫秒数)
________________
【四舍五入】



--传入数值num,取小数点后几位n
function pon(num, n)
        local b=0
        if 5-num % (1/10^(n))*10^(n+1) < 0 then
                b= 1/10^n
        end
        num = num - num % (1/10^n)
        num = num + b
        return num
end
________________
【求数组长度】



--数组的类型为table,可以通过自定义一个函数,通过函数的返回值得到数组的长度,具体的方法如下。T为需要求长度的数组名,返回值是一个整数。
function tablelength(T)
        local count = 0
        for _ in pairs(T) do
                count = count +1
        end
        return count
end

貌似还可以这样:
tablenum = {1,2,3,4,5}
toast(#tablenum)
________________
【取色矩阵】



--传入左上角和右下角的坐标,函数遍历整个矩形区域,然后将颜色存储到T表中并返回。
function getColors(x1, y1, x2. y2)
        local r, c, T = {}
        for r = y1, y2 do
                for c = x1, x2 do
                        T[r][c] = getColor(c, r)
                end
        end
        return T
end
________________
【字符串原样返回】



--函数实现字符串原样返回,传人字符串和标志,标志n默认为1,表示只在字符模式下,比如toast中(不包含引号的转义);n为2表示在格式化模式下,比如string.format;n为3表示在通配模式下,比如string.gsub。貌似没法用,string函数库不能作为自定义函数的代码,不过,你可以参考下面的代码。
function strSrc(str, n)
local str, n, w
n = n or 1
if n == 1 then
str = string.gsub(str,"\\","\\\\")
elseif n == 2 then
str = string.gsub(string.gsub(str,"\\","\\\\"),"%%","%%%%")
elseif n == 3 then
str = string.gsub(string.gsub(str,"\\","\\\\"),"%%","%%%%")
w = {"^","$","(",")","[","]","*",".","%","+","-","?"}
for i=1,#w do
str = string.gsub(str,"%"..w,"%%%"..w)
end
end
return str
end
________________
【读取每行】



--传入参数path为包含文件名的全路径,函数完成读取文件每一行的操作,最后返回的是一个数组。
function eline(path)
        local i=0; local a = {}
        local file = io.open(path, "r")
        if file then
        for line in file:lines() do
                i=i+1
                a[i] = line
        end
        file:close()
        return a
        else
                return nil
        end
end
________________
【分割字符串1】



--Lua本身并没有直接分割字符串的函数,需要自定义函数实现,下面这段函数可以实现这个功能。str为要分割的字符串,pat为分隔符(多个字符),最后返回的是一个一维数组。
function split(str, pat)
    local t = {}
    local fpat = "(.-)" .. pat
    loc
回复 支持 1 反对 0

使用道具 举报

164

主题

350

帖子

2216

积分

精灵助教

Rank: 10Rank: 10Rank: 10

威望
28
金币
1461
贡献
339
精华
1
在线时间
838 小时

脚本开发者最佳新人活跃会员热心会员技术达人宣传达人

QQ
 楼主| 发表于 2016-2-11 19:45:12 来自手机 | 显示全部楼层
________________
【获取信息类】



getIMEI()
getUDID()
getWifiMAC()
getBluetoothMAC()
getAndroidID()
getDeviceInfo()

getBitsPerPixel()
isCompatMode()
getScriptElfVersion()
getResolutionRatio()
setCompatMode(布尔值)
getRealResolutionRatio()
________________
【触摸点击类】



touchClick(x坐标, y坐标)
touchDown(x坐标, y坐标, 手指码)
touchMove(x坐标, y坐标, 手指码)
touchUp(手指码)


touchClickRandom(x坐标, y坐标, 因子, 手指码)
touchDownRandom(x坐标, y坐标, 因子, 手指码)
touchMoveRandom(x坐标, y坐标, 因子, 手指码)
________________
【找色找图类】



getColor(x坐标, y坐标)
getColorRGB(x坐标, y坐标)
RGB(红, 绿, 蓝)
isColor(x坐标, y坐标, 0xffffff)
isColor(x坐标, y坐标, 0xffffff, 比率)
findColor(0xffffff, x1, y1, x2, y2)
findColorFuzzy(0xffffff, 比率, x1, y1, x2, y2)


findImage(路径)
findImage(路径, x1, y1, x2, y2)
clickImage(路径)
findImageFuzzy(路径, 比率)
findImageFuzzy(路径, 比率, x1, y1, x2, y2)
findImageIrregular(路径, 忽略颜色)
findImageIrregular(路径, 忽略颜色, x1, y1, x2, y2)
findImageFuzzyIrregular(路径, 比率, 忽略颜色)
findImageFuzzyIrregular(路径, 比率, 忽略颜色, x1, y1, x2, y2)


screencap()
setAutoScreencap()
screencapToFile(路径, x1, y1, x2, y2)
________________
【调试交互类】



exit()
log(文本)
loge(文本)
toast(文本)
copy(文本)
input(文本)
input(键码)
inputNext()
inputDone()
inputGo()
inputSend()
inputSearch()
imeSwitch(识别码)
deleteText(前数, 后数)
vibrate(毫秒数)
call(函数)
doString(代码)
include("define.script")


findApp(包名)
isRunning(包名)
kill(包名)
startApp(包名)
pauseApp(包名)
resumeApp(包名)

startThread(线程名称)
globalLock(线程名称)
globalUnlock(线程名称)
globalTrylock(线程名称)
startMediaPlayer(路径)
pauseMediaPlayer(路径)
stopMediaPlayer(路径)
内置声音:
SCRIPTELF_SOUND_1
SCRIPTELF_SOUND_2
SCRIPTELF_SOUND_3

回复 支持 反对

使用道具 举报

164

主题

350

帖子

2216

积分

精灵助教

Rank: 10Rank: 10Rank: 10

威望
28
金币
1461
贡献
339
精华
1
在线时间
838 小时

脚本开发者最佳新人活跃会员热心会员技术达人宣传达人

QQ
 楼主| 发表于 2016-2-11 19:47:11 来自手机 | 显示全部楼层
________________
【时间网络类】



sleep(毫秒数)
os.clock()
os.time(时间的表)
os.date(格式, 时间点)
os.difftime(t2, t1)
getNetTime()
--返回字符串, 时间戳, 年, 月, 日, 时, 分, 秒

starTimer(函数名, 延迟, 间隔)
killTimer(定时器)
math.random(下限, 上限)
httpGet(地址)
urlParamEncode()
________________
【os函数库】



os.exit()
os.tmpname()
os.getenv(环境变量名)
os.remove(删除文件)
os.rename(旧名称, 新名称)
os.execute("su -c svc data prefer")
os.execute("su -c svc wifi enable")
os.execute("su -c svc data enable")
os.execute("su -c svc data disable")
os.execute("su -c svc power stayon true/false/wireless")

os.execute("su -c pm uninstall 包名")

os.execute("su -c reboot")
os.execute("su -c reboot -p")
os.execute("su -c reboot recovery")
os.execute("su -c pkill system_server")

os.execute("su -c ime set com.baidu.input/.ImeService")

os.execute("su -c  echo 255 > /sys/class/leds/lcd-backlight/brightness")

os.execute("su -c > /sdcard/tmp.htm wget -c -O /sdcard/tmp.htm http://www.baidu.com/index.html")

os.execute("su -c am start -n com.android.gallery3d/com.android.camera.Camera")

os.execute("su -c am start -n com.mediatek.batterywarning/com.mediatek.batterywarning.BatteryWarningActivity")

os.execute("su -c am start -n android/com.android.server.ShutdownActivity")

号码查找:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.AddFriendActivity")

条件查找:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.conditionsearch.ConditionSearchFriendActivity")

找人:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.contact.addcontact.AddContactsActivity")

好友备注:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.AutoRemarkActivity")

启动QQ:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity")

帐号管理:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.AccountManageActivity
")

被迫下线:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.ForceLogoutActivity
")

关联帐号:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SubLoginActivity
")

设置手势密码:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.GesturePWDCreateActivity")

手势密码锁定:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.GesturePWDGuideActivity")

辅助功能:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.AssistantSettingActivity")

调试:os.execute("su -c am start -n com.tencent.mobileqq/cooperation.qzone.ServerSetting")

调试:os.execute("su -c am start -n com.tencent.mobileqq/cooperation.qzone.UploadServerSetting")

发送日志:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.testassister.activity.ShareAppLogActivity")

分组管理:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.GroupManagerActivity")

新朋友请求:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.contact.newfriend.NewFriendActivity")

拒绝申请:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.TroopRequestRefuseActivity")

同类好友:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.contact.addcontact.ClassificationSearchActivity
")

做相同事:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.richstatus.SameStatusActivity
")

订阅号:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.biz.pubaccount.troopbarassit.TroopBarAssistantActivity")

群助手:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.TroopAssistantActivity")

群消息设置:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.TroopAssisSettingActivity")

发件箱:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.troop.activity.TroopBarUploadManagerActivity")

选择地点:os.execute("su -c am start -n com.tencent.mobileqq/com.tencent.mobileqq.troop.activity.TroopBarPublishLocationSelectActivity")

选择部落:os.execute("su -c am sta
回复 支持 反对

使用道具 举报

164

主题

350

帖子

2216

积分

精灵助教

Rank: 10Rank: 10Rank: 10

威望
28
金币
1461
贡献
339
精华
1
在线时间
838 小时

脚本开发者最佳新人活跃会员热心会员技术达人宣传达人

QQ
 楼主| 发表于 2016-2-11 19:49:05 来自手机 | 显示全部楼层
________________
【table函数库】



table.insert(表, 位置, 值)
table.remove(表, 位置)
table.concat(表连串, 分隔符, i, j)
table.sort(表, 序函数)
________________
【string函数库】



tostring()
tonumber()
string.len(求长度)
string.rep(字符串, 次数)
string.reverse(倒序排列)
string.lower(转小写)
string.upper(转大写)
string.char(数转字)
string.byte(字转数, 第n个)
string.find(源串, 模式串, 开始索引, 无格式否)
--返回开始索引, 结束索引, 捕获值

string.gfind(全局字符串查找)
string.sub(取字串, 初值, 终值)
string.gsub(源串, 模式串, 改为, 前n个)
--返回替换后的字符串, 执行次数

string.dump(函数)
--返回指定函数的二进制代码,函数必须是Lua函数,并且没有up value上值
loadstring(字符串)
--loadstring可以用来运行一段字符串代码,简单来说,就是把字符串转换成代码

string.format(格式化字符串)
string.formatr(连接字符串)
string.match(源串, 匹配特征)
--返回第一个捕获值

string.gmatch(源串, 返回找到字串的迭代器)
________________
【转义符】



\a  响铃
\b  退格
\f  换页
\n  换行
\r  回车
\t  水平制表
\v  垂直制表
\\  反斜杆
\"  双引号
\'  单引号
\[  左中括号
\]  右中括号
________________
【格式化符】



%c  将一个数字转化为ASCII码表中对应的字符
%u  将一个数字转化为无符号整数格式
%d、%i  将一个数字转化为有符号的整数格式
%f  将一个数字转化为浮点数格式
%o  将一个数字转化为八进制数格式
%x  将一个数字转化为小写十六进制数
%X  将一个数字转化为大写十六进制数
%e  将一个数字转化为科学记数法格式,使用小写e
%E  将一个数字转化为科学记数法格式,使用大写E
%g  将一个数字转化为%e和%f中较短的一种格式(%G对应%E和%F)
%q  将一个字符串转化为可安全被Lua编译器读入的格式
%s  将一个字符串按照给定的参数格式化


为进一步细化格式,可以在%号后面依次添加下列参数:
+  将让正数显示正号,默认情况下只有负数显示符号
0  占位符,在后面指定了字串宽度时占位用,默认占位符是空格
-  左对齐,在指定了字串宽度时有用,默认为右对齐
宽度数值  指定字串显示的宽度
小数位数  如%6.3f表示该浮点数的小数只保留3位,若后接s(字符串),如%5.4s则表示字符串只显示前4位.

在这些参数的后面则是上述所列的格式化类型(c, u, d, i, f, o, x, X, e, E, g, G, q, s)
________________
【通配符】



除^$()[]*.%+-?这12个需要%来转义外,单个字符与它自身配对

.  点与任何单个字符配对
%c  与任何控制符配对,例如\n
%s  与空白字符配对
%p  与任何标点配对
%d  与任何数字配对
%x  与任何十六进制数配对
%z  与任何代表零的字符配对
%a  与任何字母配对
%l  与任何小写字母配对
%u  与任何大写字母配对
%w  与任何字母或数字配对
%b<>  与在<和>之间的字符配对

[通配符]  在方括号中的多个通配符会被进行逻辑或处理,即方括号中的通配符能通配的字符全都通配

[^通配符]  ^相当于逻辑非,即方括号中的通配符能通配的字符全都不通配

当上述的通配符用大写时, 相当于对原通配符进行了逻辑非,例如%S表示与任何非空白字符配对。

?  匹配前一字符0次或1次,最短匹配
-  匹配前一字符0次或多次,最短匹配
*  匹配前一字符0次或多次,最长匹配
+  匹配前一字符1次或多次,最长匹配
________________
【math函数库】



math.abs(求绝对值)
math.ceil(数取上整)
math.floor(数取下整)
math.rad(角度求弧度)
math.deg(弧度求角度)
math.sin(弧度求正弦)
math.cos(弧度求余弦)
math.tan(弧度求正切)
math.asin(数值求反正弦)
math.acos(数值求反余弦)
math.atan(数值求反正切)
math.random(取随机数)
________________
【协同与多线程】



assert
dofile
require
loadfile
loadstring
loadlib(路径, 名称)
error(错误, 级别)
pcall(函数名)
xpcall(调用, 错误处理)
debug.debug
debug.traceback()
coroutine.wrap(函数)
coroutine.create(函数)
coroutine.status(协同状态)
coroutine.resume(运行协同, ...)
coroutine.yield(挂起协同, ...)
socket.connect()

回复 支持 反对

使用道具 举报

15

主题

54

帖子

549

积分

精灵本科生

Rank: 7Rank: 7Rank: 7

威望
10
金币
411
贡献
64
精华
0
在线时间
246 小时
发表于 2016-2-11 22:30:07 来自手机 | 显示全部楼层
sivyura 发表于 2016-2-11 19:50
代码_脚本精灵



谢谢!学习了
回复 支持 反对

使用道具 举报

0

主题

3

帖子

6

积分

精灵学前班

Rank: 2

威望
0
金币
0
贡献
3
精华
0
在线时间
2 小时
发表于 2016-2-18 15:11:19 来自手机 | 显示全部楼层
高手呀  学习
回复 支持 反对

使用道具 举报

0

主题

3

帖子

25

积分

精灵小学生

Rank: 3Rank: 3

威望
0
金币
19
贡献
3
精华
0
在线时间
12 小时
发表于 2016-3-4 22:55:15 来自手机 | 显示全部楼层
好好学习
回复

使用道具 举报

4

主题

11

帖子

61

积分

精灵初中生

Rank: 4

威望
0
金币
40
贡献
10
精华
0
在线时间
14 小时
发表于 2016-3-26 08:54:29 来自手机 | 显示全部楼层
那个md5函数代码是怎么样写的?能发出来看看吗?
回复 支持 反对

使用道具 举报

1

主题

27

帖子

141

积分

精灵高中生

Rank: 5Rank: 5

威望
0
金币
90
贡献
24
精华
0
在线时间
23 小时
发表于 2016-4-17 21:54:15 | 显示全部楼层
感谢分享,新手学习了!!!
回复 支持 反对

使用道具 举报

QQ|手机版|小黑屋|脚本精灵 ( 京ICP备13037106 京公网安备11010802011589

GMT+8, 2017-10-19 06:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表