Android 台灣中文網

標題: 觸摸精靈-簡單的腳本編寫教學 [打印本頁]

作者: 有本書    時間: 2013-10-4 23:20
標題: 觸摸精靈-簡單的腳本編寫教學
本帖最後由 有本書 於 2014-3-21 19:47 編輯

即將增加新帖...本文過幾天會重整!

【觸摸精靈】簡單腳本編寫+基礎教學文(新帖)

我放棄了!文章有新發的文章連結,去那看看吧!另外!發文純想幫助一些跟我一樣有興趣寫腳本的人,但到最後有認真在看的也不過那幾個...有心學習不怕沒人教,無心學習教得再詳細也只是換來一場空!我沒刻意想要針對誰~只不過要告訴大家有新的文章,同時順便把這篇文章丟入大海~如果有心人看完我的文章有任何見解,有本書很樂意聽您的意見!如果只是一度的想當個愛等待的伸手族...那說句實在的!我沒這義務幫忙~新帖的教學都是個人到處向人討教與學習,同時也是個人實際操作與測試之後的解果,如果文章有任何不懂或意見都可回復發問!在此也在一遍的提醒回覆者,回文不是隨便回 也不是給伸手族 等待族 以及一些不懂裝懂的"人"用的~請認真看文章,不懂再問才會換來有用的回覆,不然我不介意回您一句"爬文吧!"希望各位自重...

颜色获取.lua

1.25 KB, 下載次數: 366, 下載積分: 碎鑽 -1 個


作者: momo1122    時間: 2013-10-5 11:59
請教 x軸跟y軸有什麼方式比較容易取得
還有最重要的 有解鎖沒時間限制的嗎?
XD
作者: u03v    時間: 2013-10-5 12:03
比較想知道大大都拿來幹嘛

目前好像也沒有很需要用到這個的遊戲
作者: 有本書    時間: 2013-10-5 12:13
momo1122 發表於 2013-10-5 11:59
請教 x軸跟y軸有什麼方式比較容易取得
還有最重要的 有解鎖沒時間限制的嗎?
XD ...

有些手機都有內置指針工具!
到開發人員選項裡翻翻看吧~
作者: 有本書    時間: 2013-10-5 12:18
u03v 發表於 2013-10-5 12:03
比較想知道大大都拿來幹嘛

目前好像也沒有很需要用到這個的遊戲

拿來幹麻就是見仁見智了...
在某遊戲上這叫外掛?
但在某些人眼裡他叫補助程式!
那這就要看你是以外掛的心態
來使用它還是以補助程式的心態來使用了!

至於你問我都拿來幹麻?
這個問題我就不會回答了...有人有用到自然就會去學!
所以到底能拿來淦麻就看你哪天有需要時就知道能幹麻了~
作者: momo1122    時間: 2013-10-5 12:33
有本書 發表於 2013-10-5 12:13
有些手機都有內置指針工具!
到開發人員選項裡翻翻看吧~

good

我都用錄腳本來找座標

作者: 有本書    時間: 2013-10-5 12:36
momo1122 發表於 2013-10-5 12:33
good

我都用錄腳本來找座標

我個人都是使用內建的指針工具!
這樣做標會比較精確~
作者: momo1122    時間: 2013-10-5 12:57
有本書 發表於 2013-10-5 12:36
我個人都是使用內建的指針工具!
這樣做標會比較精確~

我是不知道怎麼算座標 用土法練鋼的方式
慢慢找 弄一個腳本出來 要一個小時以上 XD
現卡在只能播30分鐘而已
作者: 有本書    時間: 2013-10-5 13:02
momo1122 發表於 2013-10-5 12:57
我是不知道怎麼算座標 用土法練鋼的方式
慢慢找 弄一個腳本出來 要一個小時以上 XD
現卡在只能播30分鐘 ...

等吧...過幾天會提供一個能夠暫時解決30分中限制的方法!
作者: momo1122    時間: 2013-10-5 17:15
有本書 發表於 2013-10-5 13:02
等吧...過幾天會提供一個能夠暫時解決30分中限制的方法!

紅豆泥!!!!!
期待中 ㄎㄎ
作者: st60507777    時間: 2013-10-5 18:51
感謝囉 我一職不會用
作者: 234245    時間: 2013-10-9 12:33
顏色要怎麼取得?
作者: dog2147    時間: 2013-10-9 13:49
沒有像電腦有抓色.抓座標的軟體嗎
作者: kml0418    時間: 2013-10-9 17:14
THX~~~~~~~
謝謝教學~~~~
作者: 有本書    時間: 2013-10-9 19:35
dog2147 發表於 2013-10-9 13:49
沒有像電腦有抓色.抓座標的軟體嗎

已經修改過文章內容,參考一下吧!
作者: 有本書    時間: 2013-10-9 19:35
kml0418 發表於 2013-10-9 17:14
THX~~~~~~~
謝謝教學~~~~

如有幫到您,請別吝嗇的給予評分!
作者: rokmf    時間: 2013-10-10 00:51
來試試看 多謝大大喔
作者: 看到哩    時間: 2013-10-10 23:13
大大我最近正好對按鍵精靈有些研究

還請教您一些問題

觸摸精靈是否跟按鍵精靈9一樣指令呢?

還有除了利用找色的方式自動打怪補血外還有其他方式嗎?
(小的武功薄弱只會用找圖找色方式寫一套腳本而已ˊˋ)
作者: zxc9286695    時間: 2013-10-11 00:58
看到哩 發表於 2013-10-10 23:13
大大我最近正好對按鍵精靈有些研究

還請教您一些問題

語法上有差距
但思維差不多@@
觸摸好像C語言的
按精有部分是VBS
作者: 有本書    時間: 2013-10-11 19:47
看到哩 發表於 2013-10-10 23:13
大大我最近正好對按鍵精靈有些研究

還請教您一些問題

除了找圖和找色 還可以寫一些定時功能!
但這樣在運用在打怪練功會有誤差!

個人比較推薦用找色和定時來寫一套腳本!
不知道為甚麼用找圖寫出來的腳本有時會失效!
可能是圖片誤差或路徑問題吧?

我目前都只靠找色和定時來來做腳本,
也會經過一些假設來將一些掛機的誤差給解決~

比方說我的遊戲在掛機時會遇到中毒!這時我會針對
解毒的有效時間來定時,每過幾分或秒就自動吃解毒補品!
找色就比較常用在確定HP與MP了~

置於誤差部分會因為每個地圖的怪都有強弱區分~
而我總不能衛了配合每個地圖的怪就去一直更改腳本的內容~
所以我就是配合該繳瑟本身的能力與怪物的強度來做更進一步的
腳本編寫~

以上是個人製作某遊戲的腳本的心得分享

觸摸精靈採lun函數 按鍵精靈我就不清楚了~
這方面沒有研究,但兩個的函數運用大致都相同
只是函數的表達方式比較不同~ 文中有提到=
這東東~稍稍看一下就能了解觸摸精靈和按鍵精靈的不同了!

作者: silkyheart    時間: 2013-11-2 16:38
你好
想必你知道很多人在玩LINE釣魚
-- 適用屏幕參數
SCREEN_RESOLUTION="600x1024        不斷線 板

-- 主入口
function main()
        mSleep(32);                         mSleep=毫秒延遲
        touchDown(0, 203, 454);      touchDown= 手指按下
        mSleep(22);
        touchMove(0, 431, 493);
        mSleep(22);
        touchUp(0);                         touchUp=手指抬起

end
是甚麼?
作者: 有本書    時間: 2013-11-2 22:23
silkyheart 發表於 2013-11-2 16:38
你好
想必你知道很多人在玩LINE釣魚
-- 適用屏幕參數

你想表達什麼?
function main()--主入口
        mSleep(32);--延遲32毫秒
        touchDown(0, 203, 454); --手指在X203Y454按下
        mSleep(22);--延遲22毫秒
        touchMove(0, 431, 493);--手指滑動到X437Y493
        mSleep(22);--延遲22毫秒
        touchUp(0); --第0根手指抬起

end--對應主入口的end(結束)

想問意思 這樣夠清楚?
還是其他? 能否標示清楚點...這樣我比較好回答~
作者: silkyheart    時間: 2013-11-2 22:48
我手機是NO2  下載後打開他要ROOT權限
錄製腳本是不是要現打名稱後  還要導入後才開始
但是我手機好像還沒有ROOT 他都會說錯誤1XXX著樣
還是你有解鎖版的 如有  大大可以分享嗎?
作者: silkyheart    時間: 2013-11-2 22:49
http://apk.tw/thread-320340-1-1.html   妳看看著個
我要玩的事釣魚大師LINE的
作者: 有本書    時間: 2013-11-3 16:17
silkyheart 發表於 2013-11-2 22:48
我手機是NO2  下載後打開他要ROOT權限
錄製腳本是不是要現打名稱後  還要導入後才開始
但是我手機好像還沒 ...

沒ROOT就沒辦法使用喔!
如果要將下載下來的腳本加入觸摸精靈要從導入找~
如果想自己錄製,介面都很詳細!!
要輸入:腳本名稱(隨便給一個吧!錄完可以改) 腳本內容(個人覺得不必要!所以隨便輸入)

您給的往只看過了~但個人沒玩這遊戲!!
如果你想用他的腳本~
此人手機類型: Samsung Galaxy Tab 2 (7.0)  
所以 有人手機是跟我一樣的 只要修改 跟下面就OK

-- 主入口
function main()
        mSleep(32);                         mSleep=毫秒延遲
        touchDown(0, 203, 454);      touchDown= 手指按下
        mSleep(22);
        touchMove(0, 431, 493);
        mSleep(22);
        touchUp(0);                         touchUp=手指抬起

end

型號一樣就創一個腳本,然後點編輯~把裡面的東西全刪掉,換上上面的腳本碼!
型號不一樣就必須配合手機的介面座標來修改

-- 主入口
function main()
        mSleep(83);
        touchDown(0, 182, 461);              這段是7點鐘 座標   紅色部分 更新
        mSleep(23);                      修改到23了
        touchMove(0, 430, 491);               這段是12點鐘 座標
        mSleep(23);                      修改到23了
        touchUp(0);

end

照他的教學去修改對應的地方就可以了!
他的腳本大概的意思是對某點按住然後往指定方向拉再放開(然後去循環)
如果你想用 就必須學會怎麼改做標~
改坐標改毫秒改基本腳本函數都屬於新手入門級的~
如果你不會的話,就只能自己錄了,要不然我也愛莫能助!!

還有需要的話!歡迎留言回復~如有幫到您也請不吝嗇的給予評分:)
作者: 很搖擺    時間: 2013-11-3 16:37
不給您一朵鮮花,怎對得起我的優良教養
作者: 有本書    時間: 2013-11-3 23:23
如果各位有甚麼想法或建議歡迎提出!
比方說該如何達成每幾分鐘做哪些事~
而不到那指定時間則做哪些事~

答:文章有教了,所以我就不回答了XD

如果你像我一樣,想像力很豐富!歡迎藝起討論:)
作者: weiwei122    時間: 2013-11-4 16:52
有本書 發表於 2013-11-3 23:23
如果各位有甚麼想法或建議歡迎提出!
比方說該如何達成每幾分鐘做哪些事~
而不到那指定時間則做哪些事~

Note2 請問腳本可以設定 按返回鍵嗎
作者: 有本書    時間: 2013-11-4 21:54
本帖最後由 有本書 於 2013-11-4 22:07 編輯
weiwei122 發表於 2013-11-4 16:52
Note2 請問腳本可以設定 按返回鍵嗎


觸摸精靈這回的更新貌似有加入物理按鍵的功能!!
沒做過實際測試...如果您的版本不是3.X.X以上的可能沒這功能~

如果想更新觸摸精靈版本~文章有觸摸精靈作者的論壇~
那裏可以找到新版的觸摸精靈!!!
作者: nono710427    時間: 2013-11-8 01:04
大大。。想請教一下觸摸精靈腳本有使用次數的判別嗎。。也就是說。。我a座標已經運行十次了。。我想點擊b座標。。因為沒辦法顏色判別所以才想到這方法 謝謝大大的指導
作者: 有本書    時間: 2013-11-8 16:00
nono710427 發表於 2013-11-8 01:04
大大。。想請教一下觸摸精靈腳本有使用次數的判別嗎。。也就是說。。我a座標已經運行十次了。。我想點擊b座 ...

如果要增加判斷的語句,應該很難!
但可以參考一下
function click(x, y) --這算一個封裝子程序
touchDown(0, x, y); --x,y軸是你點的座標(xy改成要點的座標)
mSleep(100); --延遲
touchUp(0);--應該不必解釋?
end--對應封裝子程序的end

function main()
a = getColor(x, y);
if a == 0X000000 then
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
click(x, y) --上面的封裝子程序就是對應這裡!!
end--對應如果句的end
end--對應主入口的end

這樣他就會判斷xy軸是否是等於黑色!
是的話就點對應的座標10次如果,去掉色值判斷就會變成對該點點10次
如果要再增加其他座標的子程序,就再多做一個封裝子程序!!!
如下

function click(x, y) --這算一個封裝子程序
touchDown(0, x, y); --x,y軸是你點的座標(xy改成要點的座標)
mSleep(100); --延遲
touchUp(0);--應該不必解釋?
end--對應封裝子程序的end

function click(x, y) --這算一個封裝子程序
touchDown(0, z, a); --z,a軸是你點的座標(za改成要點的座標)
mSleep(100); --延遲
touchUp(0);--應該不必解釋?
end--對應封裝子程序的end
下面就參考上面的範例吧~

我在想如果要對某點點10次 點完再點下一個點!
應該就只需要做10次同樣的點擊函數
上面的封裝子程序是應為要簡化腳本~
應該是沒幫到您太大的忙~但我的能力有限,還請見諒UU
作者: gotty    時間: 2013-11-8 18:44
請問如何輸入變數內文呢?
假設遊戲過程需要輸入某些數字  1234
在腳本一開始時 需要先讀取變數值,又或者簡化為自行輸入變數  X==1234

當遊戲過程中,對話框出現需要輸入1234數值時,input 命令如何讀取X變數
input = "X" 會出現錯誤
請教書兄~~
作者: 有本書    時間: 2013-11-8 21:32
gotty 發表於 2013-11-8 18:44
請問如何輸入變數內文呢?
假設遊戲過程需要輸入某些數字  1234
在腳本一開始時 需要先讀取變數值,又或者 ...

如果是 當畫面彈窗要求輸入視窗中的數字的話
這個我可能沒辦法...這超出了我的能力範圍!

那如果 視窗中所要求的數字是固定的!
你可以取該視窗的某點色值~
然後寫:如果該色等於要求值(就是視窗彈出)就輸入1234

至於輸入的方式 因為觸摸精靈還沒強到可以自動輸入文字!
所以你必須從函數庫裡找到"複製內容到剪貼簿"
然後在自行錄製一個貼上的動作~
這樣可以達到對彈窗自動輸入數字的功效!

個人能回答得很有限,但只要我能解答的我一定會回~
你問的問題有部分是觸摸精靈本身就無乏達到的~
另一部份就超出我的能力範圍了~沒幫到您我深感抱歉uu
作者: 有本書    時間: 2013-11-8 21:35
gotty 發表於 2013-11-8 18:44
請問如何輸入變數內文呢?
假設遊戲過程需要輸入某些數字  1234
在腳本一開始時 需要先讀取變數值,又或者 ...

沒注意看清楚您的問題~就如我剛剛回復的
"複製內容到剪貼版"...

"變數"本身就只是一個判斷東西的功能!
他會將你要求的東西存入指定變數~
然後再加以運用~

希望友幫到您~
作者: cd45091    時間: 2013-11-12 03:37
我想請問,錄製一個b腳本能控制a腳本暫停之後繼續播放,這方法很可行
但是能重複開兩個腳本播放嗎= =
作者: 有本書    時間: 2013-11-12 21:48
cd45091 發表於 2013-11-12 03:37
我想請問,錄製一個b腳本能控制a腳本暫停之後繼續播放,這方法很可行
但是能重複開兩個腳本播放嗎= =  ...

注意看一下文章內容!
需要兩個不會互相覆蓋的版本~

文末有提供觸摸精靈作者的論壇~
那邊可以找到資源!
作者: scoproabc    時間: 2013-11-12 22:10
本帖最後由 scoproabc 於 2013-11-12 22:16 編輯

還有一套叫 腳本精靈
http://www.jbelf.com/forum.php

下載點
http://android.d.cn/software/33159.html
作者: 有本書    時間: 2013-11-12 22:54
scoproabc 發表於 2013-11-12 22:10
還有一套叫 腳本精靈
http://www.jbelf.com/forum.php

還有一款叫手指精靈~

腳本精靈和觸摸精靈的寫法有些不同~
在觸摸精靈寫的腳本,拿到腳本精靈必
須做很多內容的修改~
然後也不是每支手機都適用!
成長速度快,但因為是後者,所以看看就好!
比較值得等待的是手指精靈~
與觸摸精靈的腳本通用!!

沒必要的話請自己發帖推廣你的app
這裡是教"觸摸精靈"的文章!!
作者: toro8866    時間: 2013-12-3 22:46
大大  請問可以幫我寫嗎。。呵呵
作者: 有本書    時間: 2013-12-4 19:18
寫蝦米挖溝?
有疑問要描述清楚...這樣我比較好幫忙~

把你的構想奉上...我會試著幫你做出來!
但我不可能幫你寫出來!我只會告訴你如何做...
作者: vip999    時間: 2013-12-19 20:24
看到板大文章的的是有所領悟

但是我怎麼用  他都是顯示文法錯誤.....

-- ??膩
DESCRIPTION="??憭?;

-- ?撅??
SCREEN_RESOLUTION="800x480";
SCREEN_COLOR_BITS=4;

-- 銝餃??
function main()
        a = getColor(380, 15);
        if a == 0x5a3908 then
        touchDown(0, 744, 103);
        touchUp(0);
        mSleep(30000);
        elseif a ~= 0x5a3908 then
        touchDown(0, 400, 100);
        touchUp(0);
        mSleep(100);
        touchDown(0, 400, 100);
        touchUp(0);
        mSleep(100);
        touchDown(0, 400, 100);
        touchUp(0);
        mSleep(8000);
end

作者: qooqoox99    時間: 2013-12-19 21:44
感謝分享呀~我一直為了找色一直搞不定也~下戴了大大取色就馬上ok了~可以寫一些基本腳本了~感謝也
作者: t300020    時間: 2014-1-12 17:07
大大請問一下,我使用取色腳本來取色
但是同一個座標我看有不只一組色碼(好像會有三~四組),
這是啥問題?手機問題嗎?
作者: 有本書    時間: 2014-1-12 21:04
t300020 發表於 2014-1-12 17:07
大大請問一下,我使用取色腳本來取色
但是同一個座標我看有不只一組色碼(好像會有三~四組),
這是啥問題?手機 ...

一次可取4組座標的色碼

作者: zawa0615    時間: 2014-1-14 12:21
我本身大概會一點按鍵精靈的編寫 也有IF END IF迴圈的概念
但對於LUA很苦手 有兩個編寫的問題想請教大大

1. 是否有 標記/副程式  跳至標記/調用副程式 這類的編碼呢?
例如VBS的 REM 跟GOTO
因為在IF 跟 ELSE下 能選擇跳去哪 或調用什麼 可以更靈活 不只是讓程式往下跑

2. LUA看似 在迴圈裡 加入定時施放 (例如BUFF) 是比較容易的樣子]
依照您上面所交

如果我要在一個打怪無限循環迴圈裡 加入定時 是否只要把Y1 Y2的變量加進去
然後 if y2-y1>=5*60 then 怎樣怎樣

標記 打怪模式
如果 血低於 則 補血
如果 魔低於 則 等魔 跳至等魔標記
按下攻擊鍵
跳回 打怪模式

若是我想要優先插入 每五分鐘施放buff a 如下這樣寫的概念可以嗎?

標記 打怪模式

function main()
y1=os.time()
while true do
y2=os.time()
mSleep(4000);
if y2-y1>=5*60 then
施放 buff a
y1=os.time()  <===這行的用意是?
否則
繼續讓程式往下跑

如果 血低於 則 補血
如果 魔低於 則 等魔 跳至等魔標記
按下攻擊鍵
跳回 打怪模式

小弟很有心想要學習LUA的一些差別 我的line ID是 zawa0615
請望能請大大指教 非常感謝
作者: 有本書    時間: 2014-1-14 15:05
本帖最後由 有本書 於 2014-1-14 17:38 編輯
zawa0615 發表於 2014-1-14 12:21
我本身大概會一點按鍵精靈的編寫 也有IF END IF迴圈的概念
但對於LUA很苦手 有兩個編寫的問題想請教大大


所學不多...
::apk:: -相當與標記    goto apk -相當於跳轉標記

function apk() -相當於副程式    apk() -相當於調用副程式
-在此加入動作
end -副程式end

具體功用應該不必多做解釋?

至於時間函數嗎...我也是從網路上複製來的!
公用基本上就像文中所的~

function main() --function ? main() --此為主入口
y1=os.time() --意旨不明
while true do --死循環
y2=os.time() --意旨不明
mSleep(4000);
if y2-y1>=5*60 then
y1=os.time() --意旨不明

其具體功效還有代碼的用意,基本上我不會刻意去研究就是了!

LUA函數我也沒刻意去學,只是很單純的將自己有用到的東西帶來版上做教學!

如果還有什麼不懂的,可以私訊我~我可以給你LINE不彷一起討論與研究!
作者: zawa0615    時間: 2014-1-15 00:27
沒想到這麼久前的文章 竟然大大您還會看到 真是感恩~
非常感謝您提供的指令 有空我來試試

不過我目前改用了判斷式 抓BUFF顏色的 給您參考好了 目前我覺得這比較好用
總覺得再無限循環裡面插入定時 怪怪的 (可能是我還不夠了解 所以一直弄不好)
我在 if y2-y1>=5*60 then 之後
加入了第二次的變量 y1=os.time() <==這應該是重至OS時間
總是會有問題 我不會用LUA表達出 我想要的方式
因為後面的循環是跳來跳出 但沒有出口的

function addBuffer1()                                       -- 循环检测和补充buffer1
    while true do                                                 -- 主循环
        if getColor(100, 100) ~= 0x000000 then  -- 如果没有buffer1
            touchDown(0, 100, 100);                       -- 释放buffer1
            touchUp(0);
        end
        mSleep(500);
        coroutine.yield();                                       -- 主动挂起自己
    end
end

function addBuffer2()                                       -- 循环检测和补充buffer2
    while true do                                                 -- 主循环
        if getColor(200, 200) ~= 0x000000 then  -- 如果没有buffer2
            touchDown(0, 200, 200);                       -- 释放buffer2
            touchUp(0);
        end
        mSleep(500);
        coroutine.yield();                                       -- 主动挂起自己
    end
end

function addBuffer3()                                       -- 循环检测和补充buffer3
    while true do                                                 -- 主循环
        if getColor(300, 300) ~= 0x000000 then  -- 如果没有buffer3
            touchDown(0, 300, 300);                       -- 释放buffer3
            touchUp(0);
        end
        mSleep(500);
        coroutine.yield();                                       -- 主动挂起自己
    end
end

function addBuffer4()                                       -- 循环检测和补充buffer4
    while true do                                                 -- 主循环
        if getColor(400, 400) ~= 0x000000 then  -- 如果没有buffer4
            touchDown(0, 400, 400);                       -- 释放buffer4
            touchUp(0);
        end
        mSleep(500);
        coroutine.yield();                                        -- 主动挂起自己
    end     
end

function addBuffer5()                                        -- 循环检测和补充buffer5
    while true do                                                  -- 主循环
         if getColor(500, 500) ~= 0x000000 then  -- 如果没有buffer5
            touchDown(0, 500, 500);                        -- 释放buffer5
            touchUp(0);
        end
        mSleep(500);
        coroutine.yield();                                        -- 主动挂起自己
    end
end

function kill()                                                     -- 循环打怪一直到怪物死亡
    while true do
        if getColor(600, 600) ~= 0x000000 then  -- 如果怪物没死
           touchDown(0, 1000, 1000);                    -- 释放一次技能
           touchUp(0);
        end
        mSleep(500);
        coroutine.yield();                                       -- 主动挂起自己
    end
end

function main()
    co1 = coroutine.create(addBuffer1);
    co2 = coroutine.create(addBuffer2);
    co3 = coroutine.create(addBuffer3);
    co4 = coroutine.create(addBuffer4);
    co5 = coroutine.create(addBuffer5);
    co6 = coroutine.create(kill);

    while true do
        coroutine.resume(co1);
        coroutine.resume(co2);
        coroutine.resume(co3);
        coroutine.resume(co4);
        coroutine.resume(co5);
        coroutine.resume(co6);
    end
end

coroutine 頗好用.....又簡單
定時 還是弄不好><


作者: zawa0615    時間: 2014-1-15 01:27
還是不死心想利用標寄來讓判斷更靈活的穿插

再跟有本書大大請教 您剛說的
::apk:: -相當與標記    goto apk -相當於跳轉標記

假如 我有 REM1 跟REM2
具體上該怎麼用 ::apk:: 來表達呢? 1,2 是該寫在哪 而GOTO APK 也是。

大概的邏輯如下
REM 打怪
如果        HP        低於多少                則        補血         GOTO 打怪
                (如果沒低於)        則        ↓               
                                               
如果        MP        低於多少                則        進入等魔        GOTO 等魔
                (如果沒低於)        則        ↓               

攻擊熱鍵
GOTO 打怪

REM 等魔
如果        HP        低於多少                則        補血        GOTO 等魔
                (如果沒低於)                ↓               
                                               
如果        MP        高於多少                則                GOTO 打怪
                (沒高於)                則                GOTO 等魔

以上是說 沒血補血 然後打怪 , 如果沒有魔 就等魔 (但被怪打的話還是會補血)
魔到一定程度了 再回到打怪模式
(多一個等魔模式,用意是讓他回滿在動作比較有效率,不會滿足了最低魔量就動作,然後又馬上要停)

不知這樣的思維是否有需要修改的地方,是否有更好的詮釋方式呢?
再一次非常感謝。
作者: 有本書    時間: 2014-1-15 08:48
本帖最後由 有本書 於 2014-1-15 08:58 編輯
zawa0615 發表於 2014-1-15 01:27
還是不死心想利用標寄來讓判斷更靈活的穿插

再跟有本書大大請教 您剛說的


活用範例如下

function appa() --這段代碼中的appa()代表副程式的名稱
--這裡面放你想執行的動作
end --結束副程式

function main() --主入口(這段是基本代碼BJ4)
::apk:: --這段代碼中的apk是標記名稱(這段代碼等同標記)
--這裡放你要執行的動作(此段我當顏色獲取的動作)
--這裡放你要執行的動作(此段我當如果句)
appa() --當判斷成立後調用appa副程式
--(這裡當否則else)
goto kpa --跳轉到kpa標記點
end --(這end是如果句的end,如果上面判斷成立後沒其他動作就結束)
::kpa:: --這段代碼中的kpa是標記名稱(這段代碼等同標記)
--這裡放你要執行的動作(此段當顏色獲取)
--這裡放你要執行的動作(這裡我當如果句)
--這裡放判斷成立後的動作
--(這裡當否則else)
goto apk --跳轉到apk標記點
end --(如果句的end)
end --(主入口的end)

思路就是   
儲存某點到變量,如果變量成立就調用副程式!
如果不成立就跳轉到標記點,儲存某點到變量!
如果變量成立後就執行某些動作,如果判斷不成立就跳轉標記!

希望有幫到您:)

我看你剛剛的回復,說真的我學的可能比你少...所沒辦法幫你解釋到什麼!
上面的範例我只是活用了副程式的調用與標記的使用!至於你要怎麼放,就要看你的發揮了!

時間函數如果你想用就參考一下教學文吧!如果看不太懂我在弄個範例給你:)
作者: ChangMichael    時間: 2014-1-15 14:12
本帖最後由 ChangMichael 於 2014-1-15 14:19 編輯

亂入下~
y1=os.time() --把該時間儲存至Y1 如 18:00
y2=os.time() --把該時間儲存至Y2 如 18:05  

if y2-y1>=5*60 then...

這邊是時間的判斷
Y2時間-Y1時間 大於等於(超過) 300 就 do
這樣的意思
=================
zawa0615 您的需求
我覺得用while同時跑就行了


作者: zawa0615    時間: 2014-1-15 14:54
大大您對我的幫助很大 非常謝謝您

我大概弄了一下 給您看看 是否是這樣 也跟您分享 也希望能糾正我


function Buff1()                        --- 施放BUFF
::Buff1::                               ---***做一個標記 BUFF1***
while true do                                                       
if getColor(100, 100) ~= 0x000000 then        --- 如果沒有BUFF                               
touchDown(0, 100, 100);                        --- 點BUFF熱鍵       
touchUp(0);                                       
end                                        --- Buff1入口的END                               
mSleep(500);               
coroutine.yield();                      --- coroutine類似多線程 重新讓function在準備而不是DEAD               
end                                        --- while的END                       
end                                        --- if的END       

function healhp()                       --- 補血1 入口        (用於平常狀態監測血量)
::healhp1::                             ---***做一個標記 healhp***                                
while true do                                       
if getColor(600, 600) ~= 0x000000 then  --- 如果血低於多少                                       
touchDown(0, 1000, 1000);               --- 點補血熱鍵                               
touchUp(0);                                       
end
coroutine.yield();                      --- coroutine類似多線程 重新讓function在準備而不是DEAD                                               
end                                       
end               


function checkmp()                      --- 確認魔量 入口
::checkmp::                                   ---***做一個標記 checkmp***                
while true do                                       
if getColor(600, 600) ~= 0x000000 then  --- 如果魔低於1/4                                       
goto waitmp                             --- 去等魔 入口 那邊開始                                       
else                                        --- 否則
touchDown(0, 1000, 1000);               --- 按攻擊熱鍵                                       
touchUp(0);       
goto buff1                              --- 重頭 從buff1那邊開始       
end
coroutine.yield();                      --- coroutine類似多線程 重新讓function在準備而不是DEAD                               
end         
end                               



function waitmp()                       --- 等魔 入口
::waitmp::                              ---***做一個標記 waitmp***                                                       
while true do                               
if getColor(600, 600) ~= 0x000000 then  --- 如果血低於多少 (等魔時的血量監測)                               
touchDown(0, 1000, 1000);               --- 補血                               
touchUp(0);                               
goto waitmp                             --- 去等魔入口 那邊開始                               
else if getColor(600, 600) ~= 0x000000 then   --- 又如果 魔高於多少                               
goto main                               --- 從主入口開始 然後重頭跑程式碼
else                                        --- 否則
goto waitmp                             --- 去等魔入口 那邊開始 (也就是等到一定量的魔)                               
end       
coroutine.yield();                      --- coroutine類似多線程 重新讓function在準備而不是DEAD                               
end       
end                       
                                       
function main()                                --- 主入口 創建變量 以及恢復
::main::                        
co1 = coroutine.create(Buff1);                       
co2 = coroutine.create(healhp);       
co3 = coroutine.create(checkmp);                       
co3 = coroutine.create(waitmp);                       
                       
while true do                       
coroutine.resume(co1);                       
coroutine.resume(co2);                       
coroutine.resume(co3);       
coroutine.resume(co3);                               
end                       
end                       

       
作者: zawa0615    時間: 2014-1-15 15:02
本帖最後由 zawa0615 於 2014-1-15 15:05 編輯

ChangMichael 您亂入的好
您的意思是
我只要

y1=os.time() --把該時間儲存至Y1 如 18:00
y2=os.time() --把該時間儲存至Y2 如 18:05  
while true do
if y2-y1>=5*60 then...

不管後麵巴拉巴拉
時間到就會執行嗎?

可是 我可能在直行BUFF的時候 後面的流程需要暫停一下
(因為攻擊 補血 補BUFF這些動作 同時只能執行一個)

SORRY 對於LUA的理解不佳 腦袋還停留在按鍵精靈最基本的IF迴圈 望能賜教


ChangMichael大 另外一個部份 我想要理解的是

當多個function XXX() while true do
是同時執行 (也是就我不用GOTO來GOTO去)
還是會照流程 重上往下跑呢?

非常非常感謝
作者: ChangMichael    時間: 2014-1-15 15:51
本帖最後由 ChangMichael 於 2014-1-15 15:54 編輯

y1=os.time() --把該時間儲存至Y1 如 18:00
y2=os.time() --把該時間儲存至Y2 如 18:05  

if y2-y1>=5*60 then...


這邊是時間的判斷
Y2時間-Y1時間 大於等於(超過) 300 就 do
這樣的意思

剛剛漏掉解釋底下的 y1=os.time()的意思

這是把新的時間值給Y1 如18:10
不然Y1永遠都是當初的時間 18:00
而Y2會隨著while不停更新

=============

while true do

只要成立就是由上往下跑
所以你多個動作監測,用47樓,你貼的那個就行了


程式會不停循環那幾個function,成立就執行...

所以當 A function 跟 B function 條件都成立的情形下

A執行完就會換B

如果動作有衝突,while再跑一圈碰到A(條件已成立)改執行B動作。

就這樣一直反覆下去直到你手動關掉

具體的你實際測試過就知道了

作者: 有本書    時間: 2014-1-15 15:56
zawa0615 發表於 2014-1-15 15:02
ChangMichael 您亂入的好
您的意思是
我只要

如果你把時間函數加上了,就不必在做任何循環設定!
不加入標記的話他會一直向下執行!
然後迴圈到時間的判定!

function appa()--副程式
省略
end--結束副程式

function appb()--副程式
省略
end--結束副程式

function appc()--副程式
省略
end--結束副程式

function main()--主入口
y1=os.time()
while true do
y2=os.time()
mSleep(100);
if y2-y1>=1*60 then
y1=os.time()
省略
else--否則
省略
appa()--調用appa副程式
else--否則
省略
appb()--調用appb副程式
else--否則
省略
appc()--調用appc副程式
end--這裡是while true do
的end
end--這裡if y2-y1>=1*60 then的end
end--主入口的end

省略的部分就是要執行的動作
因為時間判定的代碼有加入死循環的代碼所以不必在設定循環!
除非你其他動作需要循環判斷!
他會一直向下執行!除非你的執行動作的end放在如果之後...
作者: 有本書    時間: 2014-1-15 15:59
樓上大大的回復比較清楚,參考看看吧!
作者: qooqoox99    時間: 2014-1-15 23:27
大大..可以教我定時嗎…我目前只寫出補血…不會定時和補血同時!!!
作者: zawa0615    時間: 2014-1-16 00:33
本帖最後由 zawa0615 於 2014-1-16 00:47 編輯

非常感謝兩位大大 小弟受益匪淺 大概都已經會了
如果有機會還真想請兩位喝杯咖啡呢....

再請教最後幾個問題

1.順序 大大您剛有說 如果條件同時成立是依照先後順序
詳細一點的意思是
會先執行function  A完  跑完內容END後
再執行function B 這樣對吧? (因為我大部分的動作  都沒辦法同時執行)

2.計時的部分 計時時間到了 條件成立了 同時也滿足了function  A條件
也是 先執行計時的內容 執行完 在執行A吼? (計時在最上面的話)

另外 關於調用副程式
3. function appa()--調用副程式 也是依此類推嗎?
正在跑 副程式內容 時 還沒END 當其他條件成立 也會先跑完副程式 再去跑下面的滿足條件function嗎?

(我知道前三個問題很雷同很蠢 SORRY 但就是想確認清楚咩><)

4. 副程式的部分 可不可以像這樣 放在IF判斷後 再選擇調不調用?
例如:
function C()
while true do
if xxxx 成立 then
執行  function appa()
else if
執行  function appb()
end end end

function C 成立時 才執行 副程式appa 或是appb 這樣
function C 沒成立 則略過  function C下的副程式
需要先聲明副程式 或是有更好的辦法嗎? (很怕多此一舉 因為判斷上一直有GOTO的需求 不能單純讓他一直往下跑)

如果邏輯是這樣的話 那就好辦了

小弟我住台北 能的話可以找我認領星巴克喔 我說真的^^ 太感謝了

作者: ChangMichael    時間: 2014-1-16 09:06
1.順序 大大您剛有說 如果條件同時成立是依照先後順序
詳細一點的意思是
會先執行function  A完  跑完內容END後
再執行function B 這樣對吧? (因為我大部分的動作  都沒辦法同時執行)

●是啊,順序是按照 function main 裡面的順序逐一執行,你一個寫死後面的沒執行就沒動作了。


2.計時的部分 計時時間到了 條件成立了 同時也滿足了function  A條件
也是 先執行計時的內容 執行完 在執行A吼? (計時在最上面的話)

●看你內容怎麼寫,基本都是從上到下。


另外 關於調用副程式
3. function appa()--調用副程式 也是依此類推嗎?
正在跑 副程式內容 時 還沒END 當其他條件成立 也會先跑完副程式 再去跑下面的滿足條件function嗎?

●一樣,function main 裡面,你怎麼放,他就怎麼執行。
前一個執行完,後一個才會開始,真的要全部同時得LUA支援多工。




4. 副程式的部分 可不可以像這樣 放在IF判斷後 再選擇調不調用?

●可以啊,只要判斷式給對就行了。
function 說穿了只是把常用的動作先寫好,這樣就不用每次都要寫那幾句重複的指令。


需要先聲明副程式 或是有更好的辦法嗎? (很怕多此一舉 因為判斷上一直有GOTO的需求 不能單純讓他一直往下跑)

●程式畢竟是死的,人腦才是活的。需求比較複雜繁瑣時,就要先想想有沒有其他條路可走。

以上是一點一心得。
作者: zawa0615    時間: 2014-1-16 15:39
本帖最後由 zawa0615 於 2014-1-16 15:42 編輯

function 說穿了只是把常用的動作先寫好,這樣就不用每次都要寫那幾句重複的指令。
這句讓我結除了困惑
可以在判斷之後的判斷用function 那邏輯就簡單多了
真是太感謝大大了
作者: aaca11    時間: 2014-2-7 12:52
用途:我想写一设可以自动自已搜寻开关的程式码,如果没有找到开关会自已自动移一页,可是为什麽这段程式,没有显示错误,可是都无法运作呢,而且很卡,而如果我把"移动一页"的那段删了,就变成有时候可以达运行,而有时候却也无法运行(无显示错误,可是找不到图,而运行很卡,也要很久才会自已自动播放结束)   -- 适用屏幕参数 SCREEN_RESOLUTION="640x960"; SCREEN_COLOR_BITS=32;     function main()    rotateScreen(0); while true do --无限循环        mSleep(3000);        x, y =findImage("/var/touchelf/b.bmp"); --找vpn关的图案        mSleep(1000)        if  x ~= -1 and y ~= -1  then --找到时        mSleep(1099);        touchDown(0, x+5, y+5);         mSleep(1099);                                         touchUp(0);        mSleep(1000);                  break    --没有找到就一直循环加移动一页提示没有找到        else          rotateScreen(0);        mSleep(1380);        touchDown(3, 408, 900)        mSleep(30);        touchMove(3, 420, 30)         --移动一页        mSleep(16);        touchUp(3);             notifyMessage("没有找到");         end      --if的end end --while的end   while true do    --无限循环        mSleep(3000);        x, y =findImage("/var/touchelf/a.bmp"); --找vpn开的图案        mSleep(1000)        if  x ~= -1 and y ~= -1  then --找到时        mSleep(1099);              keyDown("HOME");        mSleep(200);                   --按home键反回桌啊        keyUp("HOME");        mSleep(1000);                 break  --没有找到就一直循环加提示没有找到        else        notifyMessage("没有找到");                end       end end
作者: aaca11    時間: 2014-2-7 12:53
求指導一下,麻煩了
作者: dream750103    時間: 2014-2-7 16:43
不給您按個讚,怎對得起我的優良教養
作者: bird123321    時間: 2014-2-7 20:52

大大我最近正好對按鍵精靈有些研究

還請教您一些問題

語法上有差距
但思維差不多@@
觸摸好像C語言的

作者: 有本書    時間: 2014-2-9 12:39
bird123321 發表於 2014-2-7 20:52
大大我最近正好對按鍵精靈有些研究

還請教您一些問題

我也只是淺學...

語法與語言的部分我都沒刻意去了解!
我都是先想思維再去將他具體化~
對於腳本的製作與編寫,歡迎一同研究與討論!
作者: apkb    時間: 2014-2-24 03:06
觸摸精靈 是不是 就是腳本精靈?

只是叫法不同?

還是不同一個的程式?
作者: 555888777    時間: 2014-2-24 18:53
本帖最後由 555888777 於 2014-2-26 21:05 編輯

請問
我修改完腳本 按保存後
就會出現語法錯誤
螢幕分辨率 原本480X800 =>空白
螢幕色彩位數會變-1
有辦法解決?


作者: taco0103    時間: 2014-2-24 23:24
請問一下如果血條底色透顏色會變動要怎麼抓顏色才會準
作者: 有本書    時間: 2014-2-26 20:26
taco0103 發表於 2014-2-24 23:24
請問一下如果血條底色透顏色會變動要怎麼抓顏色才會準

血條底色如果是透明的那可以直接取血條顏色~

========== ←這個當血條

我希望他在血量過低時做補血或其他動作

===="="===== ←這個當血條 (被特別標示的是我認為得過低)

那就直接取你自認為過低的"低"是在哪一點~

當初在取血條底色是 如果某點(某點是你所取的點)等於"黑色"就...
改成取血條的紅色 如果某點(某點是你所取的點)不等於"紅色"就...

因為我沒再背腳本碼所以直接"字述" 如果真的看不懂可以再告訴我!!
作者: 555888777    時間: 2014-2-26 21:43
本帖最後由 555888777 於 2014-2-26 21:53 編輯

錯誤碼 33
是什麼意思?看不懂

原本能用 修改後
就出現錯誤碼 33

作者: 有本書    時間: 2014-2-26 22:05
555888777 發表於 2014-2-26 21:43
錯誤碼 33
是什麼意思?看不懂

照截圖上的意思你少了一個end
對於錯誤代碼我比較沒有基礎!只能照他訊息給的提示去找問題了~
我在寫完腳本都會自己去試算他的運行過程,然後才去測試腳本的效果!
希望有幫到您!
作者: taco0103    時間: 2014-3-5 21:42
本帖最後由 taco0103 於 2014-3-5 21:43 編輯

請問一下要怎在這個角本上加入2分鐘施放1個技能function main()
c = getColor(1400, 1000);
if c ~= 0xb42b07 then  --
    touchDown(0, 984, 1668);-
    mSleep(386);
     touchUp(0);
     mSleep(386);
    else                                 
mSleep(50);
touchDown(0, 1168, 1670);
    mSleep(50);
     touchUp(0);
     mSleep(50);
touchDown(0, 1168, 1670);
    mSleep(50);
     touchUp(0);
     mSleep(50);
touchDown(0, 1168, 1670);
    mSleep(50);
     touchUp(0);
     mSleep(50);
touchDown(0, 1168, 1670);
    mSleep(50);
     touchUp(0);
     mSleep(50);
end
作者: 有本書    時間: 2014-3-5 21:46
taco0103 發表於 2014-3-5 21:42
請問一下要怎在這個角本上加入2分鐘施放1個技能function main()
c = getColor(1400, 1000);
if c ~= 0xb4 ...

教學文中有個新帖的超連結~到那看看喔~
那邊都有詳細的解說~如果看完還是不懂在發問唷!!!
作者: just.tw    時間: 2014-3-11 16:16
本帖最後由 just.tw 於 2014-3-11 16:51 編輯
taco0103 發表於 2014-3-5 21:42
請問一下要怎在這個角本上加入2分鐘施放1個技能function main()
c = getColor(1400, 1000);
if c ~= 0xb4 ...


改成下面這樣就可以了



round=1

function main()

        while round == 1 do       
                fight();
                mSleep(120000);
        end
end


function fight()

        c = getColor(1400, 1000);
        if c ~= 0xb42b07 then  --
                  touchDown(0, 984, 1668);-
                    mSleep(386);
                     touchUp(0);
                     mSleep(386);
            else                                 
                mSleep(50);
                touchDown(0, 1168, 1670);
                  mSleep(50);
                     touchUp(0);
                     mSleep(50);
                touchDown(0, 1168, 1670);
                    mSleep(50);
                     touchUp(0);
                     mSleep(50);
                touchDown(0, 1168, 1670);
                    mSleep(50);
                     touchUp(0);
                     mSleep(50);
                touchDown(0, 1168, 1670);
                    mSleep(50);
                     touchUp(0);
                     mSleep(50);
        end

end
作者: taco0103    時間: 2014-3-19 21:37
感謝搞了好久終於可以寫出完整的腳本了
作者: 有本書    時間: 2014-3-21 19:29
just.tw 發表於 2014-3-11 16:16
改成下面這樣就可以了

看了大大的腳本,好奇之下寫了一下!我對腳本只有一點基礎,但我很好奇為何要這樣寫...
如果他只是單純的想要每兩分鐘做一件事,而等待兩分鐘的過程中沒做其他事,只要加個延遲就可以了!
好奇大大腳本裡的while round == 1 do 這句是甚麼?
我試寫一下這個腳本發現好像沒啥功用...只不過是調用副程序然後延遲兩分鐘...
不知道大大能否告訴我...那句的功用?
作者: 有本書    時間: 2014-3-21 19:34
taco0103 發表於 2014-3-19 21:37
感謝搞了好久終於可以寫出完整的腳本了

如果單純想寫每兩分鐘做一件事~加個延遲就可以了!
如果你是想先做其他事,然後等兩分鐘之後做一件事!
那我的文章都有相關代碼~新發的教學文也有實作和詳細教學!
如果一度的想等人幫忙寫出完整的腳本,那說真的...我的文章可以乾脆刪一刪了!
時間函數的運用文中都有教學,看不懂有新文章可以參考,在看不懂發問無訪!
但我真的很好奇...我發這篇文章到底有多少人有認真的在看
作者: just.tw    時間: 2014-3-22 11:36
本帖最後由 just.tw 於 2014-3-22 12:15 編輯
有本書 發表於 2014-3-21 19:29
看了大大的腳本,好奇之下寫了一下!我對腳本只有一點基礎,但我很好奇為何要這樣寫...
如果他只是單純的 ...


while round == 1 do      
                fight();
                mSleep(120000);
end


這只是個無窮迴圈,每兩分鐘執行一次 fight() 裡面的動作而已

的確如您所說,加個2分鐘的延遲即可
但因為提出需求的人只有說想每兩分鐘想執行一次動作,並沒有提到是否還有其它動作
所以我才用無窮迴圈的方式來實現

我這裡用無窮迴圈還有個好處,就是在每次執行時不用再去設定延遲時間,直接按下播放鍵即可


在我看來 taco0103 是有能力把程式寫出來的,因為他已經具有 if...else..的判斷能力,他只差在臨門一腳而已
既然我有能力幫他一把,稍微幫他補充一下不足之處,不也是您開這個教學文的原始美意嗎?



寫到這裡,我就順便貢獻一個函數給大家
以後如果想在特定座標點一下,只要打 click(座標x,座標y) 就可以了


function main()  

        click(185,250)

end



function click(x,y)
                     
        touchDown(0, x, y)   ;                     
        touchUp(0);               
        mSleep(300);

end




以 taco0103 提出的需求為例,程式碼可大幅縮減如下:

round=1

function main()

        while round == 1 do      
                fight();
                mSleep(120000);
        end
end


function fight()

        c = getColor(1400, 1000);
        if c ~= 0xb42b07 then  --

                click(984,1668)

            else   

                click(1168,1670)
                click(1168,1670)
                click(1168,1670)
                click(1168,1670)
                             
        end

end



function click(x,y)
                     
        touchDown(0, x, y)   ;                     
        touchUp(0);               
        mSleep(300);

end


感謝樓主「有本書」以及版友 taco0103 提出的需求

才讓小弟有機會在這裡獻醜一下
作者: 有本書    時間: 2014-3-23 00:17
just.tw 發表於 2014-3-22 11:36
while round == 1 do      
                fight();
                mSleep(120000);

function click(x,y) --這個函數封裝也有更簡略的寫法
function click() or function c() --其實它的用途就跟調用副程序一樣!
在寫入 click(x,y) 時去掉用預先設好的動作

function click(x,y) --這裡面的click不過是個定義名(此定義名可隨意輸入)
而click(x,y)中的(x,y)貌似是用來定義click(x,y)的調用~
如果再調用多個click()的副程序可以這樣寫

function click(x,y)
touchDown(0,x,y)
touchUp(0)
end

function click(z,r)
touchDown(0,x,y)
touchUp(0)
end

function main()
click(x,y)
click(z,r)
end

上面都屬個人見解,其實際解釋個人並不瞭解!

至於無窮迴圈我倒覺得用意不大...lua不是已經有個無線循環的函數了嗎?
多寫那幾行總覺得很多餘~不過小的很好奇!

round=1 --這個1 和 while round == 1 do --裡的1是何用途?

起初剛認識這個代碼時我以為這是在設定迴圈幾次在跳出,但實際寫出來的解果卻不是如此...
與其增加這兩行來定義循環何不while true do直接用這個呢?

最後我之所以不幫他是因為他既能寫出一個基本的腳本,對於只是單純的每兩分鐘做一件事的腳本應該不是難處~
但這個部份我個人要向他致歉...因為沒有注意她的要求,一度以為他是要我教她怎麼寫每兩分鐘做一件事!
而不是單純的每兩分鐘做一件事的腳本!

個人很高興有人能一起研究腳本的編寫,對於我的回覆如果有不對之處有本書還要在此項大大學習!
作者: pig55790    時間: 2014-3-23 00:26
錄座標好物
作者: islapple    時間: 2014-3-23 00:47
收下了,感謝
作者: just.tw    時間: 2014-3-23 11:32
本帖最後由 just.tw 於 2014-3-23 11:36 編輯
有本書 發表於 2014-3-23 00:17
function click(x,y) --這個函數封裝也有更簡略的寫法
function click() or function c() --其實它的用 ...


函數要寫成  function click() or function c()  都是可以的
只是在宣告函數時,我會考慮以後看我的程式的人能不能一眼就從函數的名稱看出這個函數的作用..

function click()  遠比  function c() 更能直接看出這個函數是用來處理「點擊畫面」之後所要處理的事情


另外你的這段程式碼是不是寫錯了呢?

function click(z,r)
touchDown(0,x,y)
touchUp(0)
end

應該是寫成下面這樣,還是你有特別用意呢?

function click(z,r)
touchDown(0,z,r)
touchUp(0)
end




至於無窮迴圈的用法,我貼我自己寫的武俠Q傳自動打魔教的片段給你參考

x988 = getColor(700,505);                         -- 擷取進入戰鬥畫面的色碼
while x988 ~= 0xb59954 do                        -- 確認是否已經進入開始戰鬥的畫面
                                                                -- 若不是,則持續抓色碼直到進入戰鬥為止
                                                                       
        mSleep(500);
        x988 = getColor(700,505);
                                       
end                       

--當跳出無窮迴圈時,則表示已切換至戰鬥畫面了                                       
notifyMessage("第 "..round.." 關");


上述需求,不是 while true do 就能做到的


作者: 有本書    時間: 2014-3-23 15:56
本帖最後由 有本書 於 2014-3-23 15:58 編輯
just.tw 發表於 2014-3-23 11:32
函數要寫成  function click() or function c()  都是可以的
只是在宣告函數時,我會考慮以後看我的程式 ...


沒有寫錯 touchDown (0,x,y) --xy不過是範例座標,跟括弧的zr是無關的!
的確像你說的Click()比c()更容易看出是解釋點擊函數封裝的代碼~
不過我的用意在於不必刻意去定義click(x,y) 直接寫個c()去封裝不是個簡潔?

對於你迴圈的函數,我說過了!我不熟悉~但在於單純定義2分鐘執行一個事件
的腳本,寫個無限迴圈和延遲2分鐘,不是更顯得簡潔有力!


如果你曾經寫過一個多功能掛機腳本,相信我!你絕對會用盡一切辦法~
讓腳本簡單化,而非一堆臭長的函數於判斷!

以上都是個人經驗絕非絕對,每個人在編寫腳本都有自己的堅持!

再來你那段代碼好像可以寫成

while getColor(110,74) == 0x0066cc do
--座標和色值是我用自己的!

試寫了一下你那段代碼,其實跟循環跳出是同樣的!
不過如果不重新定義變量會使判斷一直成立,
如果照我的代碼可以省去那個重新定義變量的代碼~
在不然就是直接用循環跳出來代替你那段代碼(不過會多幾行就是了)

以上都是測試
作者: 有本書    時間: 2014-3-23 16:04
just.tw 發表於 2014-3-23 11:32
函數要寫成  function click() or function c()  都是可以的
只是在宣告函數時,我會考慮以後看我的程式 ...

忘了說click(x,y)--括弧的xy不是定義座標!我不瞭解他的用意,
但可以確定的是那個xy不是座標~
有的時候在做教學為了怕有人複製自己的原碼導致他的座標於自己座標不同!
很多人會直接用xy來假設座標!希望你能瞭解~
作者: hkqwe147    時間: 2014-4-6 12:57
看了五頁大概明白概念
作者: staronocean    時間: 2014-4-9 23:29
感謝大大 辛苦了 希望Ios可以用 為了這個抓色的問題 我研究了五六個方法 都不行><"
作者: nuke39    時間: 2014-4-27 13:30
感謝分享精闢的教學。
作者: chingyes    時間: 2014-5-2 19:25
舊版本必備
作者: 068326    時間: 2014-5-10 22:15
又是30分鐘@@
作者: long5200a    時間: 2014-6-11 15:37
看了以上的大大們的教導有點既念了,不過我有問題要發問!

請問一下找色的程式是要怎麼用?有大大能教一下嗎?

作者: 林宥嘉    時間: 2014-6-11 16:21
提示: 作者被禁止或刪除 內容自動屏蔽
作者: wubelin    時間: 2014-7-25 00:51
以前是用按鍵精靈和Sikuli寫腳本
最近開始用觸摸精靈(手機按器)
覺得超好用
分享我常用的function給大家
-- 點擊
function click(x, y)
        touchDown(0, x, y)
        mSleep(100)
        touchUp(0)
end
----------------------------------------------------------------
--尋找圖片,含Timeout與X,Y位移
--參數說明:
--    sPicName:圖片完整路徑(只支援bmp檔),如"/mnt/sdcard/Arthur/UseItems.bmp"
--    iTimeout:幾秒內未偵測到圖片,則離開function
--    iDelayMS:發現圖片點擊後,等待多少ms (1000ms = 1秒)
--    Xmove:發現圖片後,點擊座標X軸位移量
--    Ymove:發現圖片後,點擊座標Y軸位移量
--    回傳值:true-有發現圖片,false-未發現圖片
----------------------------------------------------------------
function FindPic(sPicName, iTimeout, iDelayMS, Xmove, Ymove)
        local ifind;
        local iFuncX = -1;
        local iFuncY = -1;
        local t= os.time();
       
        ifind = false;
        repeat
                iFuncX, iFuncY = findImage(sPicName);
                if iFuncX > 0 and iFuncY > 0 then
                        click(iFuncX+Xmove, iFuncY+Ymove);
                        mSleep(iDelayMS);
                        ifind = true;
                end
        until((os.difftime(os.time(), t) > iTimeout) or (iFuncX > 0))
        return ifind;
end
----------------------------------------------------------------
--模糊尋找圖片,含Timeout與X,Y位移、精度
--參數說明:
--    sPicName:圖片完整路徑(只支援bmp檔),如"/mnt/sdcard/Arthur/UseItems.bmp"
--    iTimeout:幾秒內未偵測到圖片,則離開function
--    iDelayMS:發現圖片點擊後,等待多少ms (1000ms = 1秒)
--    Xmove:發現圖片後,點擊座標X軸位移量
--    Ymove:發現圖片後,點擊座標Y軸位移量
--    Similarity:精度0.1~1.0,越高表示要越符合圖片,比對才會成立
--    回傳值:true-有發現圖片,false-未發現圖片
----------------------------------------------------------------
function FindPicFuzzy(sPicName, iTimeout, iDelayMS, Xmove, Ymove, Similarity)
        local ifind;
        local iFuncX = -1;
        local iFuncY = -1;
        local t= os.time();
       
        ifind = false;
        repeat
                iFuncX, iFuncY = findImageFuzzy(sPicName, Similarity);
                if iFuncX > 0 and iFuncY > 0 then
                        click(iFuncX+Xmove, iFuncY+Ymove);
                        mSleep(iDelayMS);
                        ifind = true;
                end
        until((os.difftime(os.time(), t) > iTimeout) or (iFuncX > 0))
        return ifind;
end
----------------------------------------------------------------
作者: charlie7695380    時間: 2014-8-17 00:47
請問我大概知道腳本要怎麼寫 跟C++很像 可是...我不知道要去哪裡寫?是用甚麼程式寫?
作者: etonchang    時間: 2014-9-28 18:40
謝謝你的分享 感謝!
作者: ran0218    時間: 2014-10-12 06:31
感謝大大的教學指導
作者: spgylove    時間: 2014-11-19 17:15
我想寫一個,區域找色後,點擊技能座標...
執行也沒有出現語法錯誤,但就是連動也不會動,
不知道哪裡出問題?在此求大大指點~感謝~>"<

-- 脚本描述
DESCRIPTION="b";

-- 适用屏幕参数
SCREEN_RESOLUTION="1080x1920";
SCREEN_COLOR_BITS=4;

-- 主入口
function main()
x, y = findColorInRegionFuzzy(0x009EFF,90,0,0,833,1915);
if flag then
(if x ~= -1 and y ~= -1 then <--改上這一行也是沒反應)

touchDown(0,81,1545);
msleep(500);
touchUp(0);
msleep(500);

touchDown(0,81,1545);
msleep(500);
touchUp(0);
msleep(500);

touchDown(0,81,1545);
msleep(500);
touchUp(0);
msleep(500);

touchDown(0,697,82);
msleep(500);
touchUp(0);
msleep(500);

end
end
作者: a58806105    時間: 2014-12-31 01:20
我是不知道怎麼算座標
弄一個腳本出來 要1.2個小時以上


作者: 林旻駿    時間: 2015-2-1 10:06
感謝大大分享
作者: home_3r    時間: 2015-3-4 02:50
請問各位大大:
遊戲一些會發光的的圖片應如何找色?
小弟試過CUT 圖找色,但經常找不到那點的正確顏色,望指點~



作者: hnwyz2003    時間: 2015-3-5 00:55
谢谢分享
作者: atc121    時間: 2015-3-5 20:56
感謝分享




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1