黃易群俠傳M脫機外掛應用程式黃易神行
723
3

[發問] 請問SP大大們幫我修正一下

tcavs810304 發表於 2009-8-1 21:32:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |
function main
SetInputMode(3) //驅動模式,很多遊戲會阻擋SP的部份功能,可以套用此函數
while true    //循環開始
  FuncTimer01()
  FuncTimer02()
  State() //子函數狀態
wend        //返回while開始循環
end function
function State
do
  //取窗口原點坐標
  GetActiveWindowXY(WinX0, WinY0)
  
  //如果窗口坐標(425, 32)的顏色不等於(70, 73, 70) 那麼
  if not CheckColor(WinX0+425, WinY0+32, Color(70, 73, 70), 10) then
   //如果找不到怪
   KeyPress("TAB")
   Wait(300)
   KeyPress("TAB")
   
   KeyPress("A")
   Wait(300)
   KeyPress("A")
   
  else //否則
   KeyPress("2")
   Wait(300)
   KeyPress("1")
  end if
loop
//取窗口原點坐標
GetActiveWindowXY(WinX0, WinY0)

//只要窗口坐標(99, 41)的顏色不等於(107, 40, 16)
do while CheckColor(WinX0+99, WinY0+41, Color(107, 40, 16), 10)
  //就循環做此操作
  //以下為嚮導添加的代碼
  KeyPress("4")
  //加0.1秒延時以控制CPU佔用
  Wait(100)
loop
//取窗口原點坐標
GetActiveWindowXY(WinX0, WinY0)

do //循環
  //以下為嚮導添加的代碼
  KeyPress("TAB")
  //加0.1秒延時以控制CPU佔用
  Wait(100)
  //直到窗口坐標(186, 43)的顏色等於(185, 57, 13)
loop until CheckColor(WinX0+186, WinY0+43, Color(185, 57, 13), 10)
end function
# 定時器添加方法:
# 步驟1. 將以下代碼加入腳本末尾
function FuncTimer01
//定時器代碼,每Interval秒執行一次
dim global Timer01 = -1

if Timer01 < 0 then
  Timer01 = GetTime()
end if

if Timer01 < 0  or GetTime() - Timer01 >= 10 * 1000 then
  Timer01 = GetTime()
  //以下為執行代碼
  //以下為嚮導添加的代碼
  KeyPress("A")
  //代碼結束
end if
end function
# 定時器添加方法:
# 步驟1. 將以下代碼加入腳本末尾
function FuncTimer02
//定時器代碼,每Interval秒執行一次
dim global Timer02 = -1

if Timer02 < 0  or GetTime() - Timer02 >= 10 * 1000 then
  Timer02 = GetTime()
  //以下為執行代碼
  //以下為嚮導添加的代碼
  KeyPress("3")
  //代碼結束
end if
end function

我自己寫這樣,他為什麼到了我設定的血量的時候
並不會做下來休息呢,我休息技能是放在快捷鍵4的地方
還有我最後定時的也沒有效果出來耶,
可以請各位大大幫我看看嗎?  卸卸YCT61B
收藏收藏 分享分享 讚 幹 分享分享 FB分享
回覆

使用道具 舉報


歐菲爾 當前離線
UID
108103
熱心
507 值
嘉獎
0 次
違規
0 次
在線時間
208 小時
經驗
436 點
積分
3748
精華
0
最後登錄
2022-1-18
閱讀權限
70
註冊時間
2006-12-5
論壇幣
2492 幣
聯合幣
44 枚
幸運鑽
2 顆
招待卷
5000 點
查看詳細資料
Rank: 5Rank: 5Rank: 5
歐菲爾 2009-8-2 18:01:31
do
  //取窗口原點坐標
  GetActiveWindowXY(WinX0, WinY0)
  
  //如果窗口坐標(425, 32)的顏色不等於(70, 73, 70) 那麼
  if not CheckColor(WinX0+425, WinY0+32, Color(70, 73, 70), 10) then
   //如果找不到怪
   KeyPress("TAB")
   Wait(300)
   KeyPress("TAB")
   
   KeyPress("A")
   Wait(300)
   KeyPress("A")
   
  else //否則
   KeyPress("2")
   Wait(300)
   KeyPress("1")
  end if
loop

DO...LOOPDO...LOOP有四種表達式,你的不再其中
簡單的說…你這就是單純的迴圈罷了
所以說在這個State子函數中
你的腳本只會跑我用引用框起來的這一段而已
你後面的都不會跑…而且你的邏輯錯誤,如果硬要補正的話還是會出問題
我幫你補正,然後再說明問題在哪…
請把最後的的loop改成 LOOP WHILE<怪物狀態底部,可以是黑框位置>
這樣你的迴圈底部會判斷你這一次攻擊有沒有殺死怪物
沒有殺死就會跳回去迴圈頭執行,問題來了,怪物現在的血量不是滿血
所以會tab選怪去…
這樣應該會每支怪都打一下才對阿…搞不懂你怎麼掛…
你應該把迴圈頭寫在打怪的上方
改成以下這樣比較好
  //取窗口原點坐標
  GetActiveWindowXY(WinX0, WinY0)
  
  //如果窗口坐標(425, 32)的顏色不等於(70, 73, 70) 那麼
  if not CheckColor(WinX0+425, WinY0+32, Color(70, 73, 70), 10) then
   //如果找不到怪
   KeyPress("TAB")
   Wait(300)
   KeyPress("TAB")
   
   KeyPress("A")
   Wait(300)
   KeyPress("A")
   
  else //否則
do
   KeyPress("2")
   Wait(300)
   KeyPress("1")
LOOP WHILE<怪物狀態底部,可以是黑框位置>
  end if

另外你把語法的使用的地方用錯了…
判斷指令請養成用if then
因為IF判斷方式比較好用
一個判斷式可以判斷多個條件
而且後面你用do loop做判斷要判斷血量
那你魔力條不用判斷嗎?
雖然DO LOOP 和WHILE...WEND都可以用來做判斷
但是他們本質是迴圈…請用條件判斷用的IF THEN來寫會比叫好
這樣未來要寫很長的程式才不會被自己搞混

SP小秘訣::滑鼠定位到看不懂的函數名上~按鍵盤F1~跳轉到幫助文件
SP的AIAK討論區
回覆

使用道具 舉報

歐菲爾 當前離線
UID
108103
熱心
507 值
嘉獎
0 次
違規
0 次
在線時間
208 小時
經驗
436 點
積分
3748
精華
0
最後登錄
2022-1-18
閱讀權限
70
註冊時間
2006-12-5
論壇幣
2492 幣
聯合幣
44 枚
幸運鑽
2 顆
招待卷
5000 點
查看詳細資料
Rank: 5Rank: 5Rank: 5
歐菲爾 2009-8-2 18:17:59
你的子函數FuncTimer01也有問題阿
function FuncTimer01
//定時器代碼,每Interval秒執行一次
dim global Timer01 = -1

if Timer01 < 0 then
  Timer01 = GetTime()
end if

if Timer01 < 0  or GetTime() - Timer01 >= 10 * 1000 then
  Timer01 = GetTime()
  //以下為執行代碼
  //以下為嚮導添加的代碼
  KeyPress("A")
  //代碼結束
end if
end function

紅色標起來就是問題…砍掉就好
不然照原本的語法去跑會出現以下結果
首先定義Timer01=-1(這只會定義一次)
然後
if Timer01 < 0 then
  Timer01 = GetTime()
end if
條件成立,所以Timer01 = GetTime()
之後的
if Timer01 < 0  or GetTime() - Timer01 >= 10 * 1000 then
這個判斷,首先 Timer01絕對不會小於0,GetTime() - Timer01會幾乎等於0
因為紅色的那條判斷已經把Timer01=GetTime()了
所以相減後會出現極小值,因為程式在跑也是會有時間的
既然算式不大於等於10*10000,那怎麼可能會按A呢
你把
if Timer01 < 0 then
  Timer01 = GetTime()
end if
這行砍掉在看看
至於按3的
FuncTimer02我覺得沒問題

[ 本帖最後由 歐菲爾 於 2009-8-2 18:19 編輯 ]

SP小秘訣::滑鼠定位到看不懂的函數名上~按鍵盤F1~跳轉到幫助文件
SP的AIAK討論區
回覆

使用道具 舉報

tcavs810304 當前離線
UID
610317
熱心
146 值
嘉獎
0 次
違規
0 次
在線時間
15 小時
經驗
145 點
積分
306
精華
0
最後登錄
2015-12-16
閱讀權限
25
註冊時間
2007-10-24
論壇幣
1128 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 3
tcavs810304 2009-8-3 19:52:51
謝謝你的指導,我可以傳訊給妳在跟你請教一下嗎?YCT48B
回覆

使用道具 舉報

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


手機版 | Archiver | 外掛聯合國

GMT+8, 2024-5-5 22:16 , Processed in 0.045482 second(s), 19 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?