綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[其他] 觸摸精靈-簡單的腳本編寫教學

   關閉 [複製連結] 查看: 45511|回覆: 109|好評: 10
51
zawa0615 | 收聽TA | 只看該作者
發表於 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                       

       
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

52
zawa0615 | 收聽TA | 只看該作者
發表於 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去)
還是會照流程 重上往下跑呢?

非常非常感謝
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

53
ChangMichael | 收聽TA | 只看該作者
發表於 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動作。

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

具體的你實際測試過就知道了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

54
 樓主| 有本書 | 收聽TA | 只看該作者
發表於 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放在如果之後...
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

55
 樓主| 有本書 | 收聽TA | 只看該作者
發表於 2014-1-15 15:59
樓上大大的回復比較清楚,參考看看吧!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

56
qooqoox99 | 收聽TA | 只看該作者
發表於 2014-1-15 23:27
由 手機網頁 發佈
大大..可以教我定時嗎…我目前只寫出補血…不會定時和補血同時!!!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

57
zawa0615 | 收聽TA | 只看該作者
發表於 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的需求 不能單純讓他一直往下跑)

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

小弟我住台北 能的話可以找我認領星巴克喔 我說真的^^ 太感謝了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

58
ChangMichael | 收聽TA | 只看該作者
發表於 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的需求 不能單純讓他一直往下跑)

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

以上是一點一心得。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

59
zawa0615 | 收聽TA | 只看該作者
發表於 2014-1-16 15:39
本帖最後由 zawa0615 於 2014-1-16 15:42 編輯

function 說穿了只是把常用的動作先寫好,這樣就不用每次都要寫那幾句重複的指令。
這句讓我結除了困惑
可以在判斷之後的判斷用function 那邏輯就簡單多了
真是太感謝大大了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

60
aaca11 | 收聽TA | 只看該作者
發表於 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

點評

很想幫你 但看到這樣的排版我就懶得看了...整理一夏蚊帳在發問吧!!  發表於 2014-2-26 20:28
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則