找回密码
 加入
搜索
查看: 5278|回复: 13

用Autoit3製作 遊戲外掛-相關討論

[复制链接]
发表于 2009-10-19 19:18:57 | 显示全部楼层 |阅读模式
本帖最后由 ZEROBOYS 于 2009-11-29 00:33 编辑

感謝各位不吝嗇的文章,讓我完成許多遊戲的小掛
(固然Autoit3 並非是拿來製作外掛的,只是碰巧發現可以拿來寫,也剛好是我唯一會的程式語言,但願排斥此類的前輩,敬請見諒...放開眼界,讓Autoit3於各種領域有一片空)
^.^" Autoit3 最大的樂趣在於讓一些電腦菜鳥,也能製作出小小夢想的程式...

武林外傳
風色幻想
萬王之王3
伊西歐之夢
未來啟示錄
熱血三國志

在此好奇問幾個問題...

以現階段的Autoit3 去讀遊戲內存?是否為WPI模式?
嘗試過相同的「讀內存模式語法」在某些遊戲中,完全ok
而某些遊戲屬於「NP」在擋,一開始認為是基址錯誤...
經過其他程式去驗證、測試,已經肯定基址是正確無誤、可用!
※ 想瞭解是否有以下模式中,更不為人知的方式?可以學習探討!?
在此先引讀內存橋段,試問是否有其他模式?
代碼:
;===========================
#include "Memory.au3"
;引入函數定義
#include "Memory.au3"
;定義記憶體基址
$Address = 0x008bab4c
;定義記憶體偏移地址
$Off_Hp = 0x254
;獲取遊戲句柄
$CurProcID=WinGetProcess("Element")
;獲取記憶體讀寫句柄
$Handle = _MemoryOpen($CurProcID)
;錯誤處理
If $Handle=0 then
    MsgBox(4096,"錯誤提示","存取遊戲記憶體失敗。")
    Exit
EndIf
;讀取記憶體資料
$HP = _MemoryRead("0x" & Hex($Address+$Off_Hp), $Handle)
;關閉記憶體句柄
_MemoryClose($CurProcID)
;===========================

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2009-10-19 19:24:36 | 显示全部楼层
本帖最后由 ZEROBOYS 于 2009-10-19 19:30 编辑

第二部份為當我無法使用讀遊戲內存技術,退一步改用讀色法...
卻注視到幾個奇怪現象?有請各位給予見解...

標準上是先製作一個熱鍵,便於呼叫"讀色"....
HotKeySet("!p", "GetCurColor");;;使用熱鍵Alt+P 呼叫...

Func GetCurColor()
        $cur = MouseGetPos()
        $curcolor = PixelGetColor($cur[0], $cur[1])
        ToolTip("坐標:" & $cur[0] & "," & $cur[1] & ",顏色:" & Hex($curcolor))
EndFunc   ;==>GetCurColor

以上部份,算是非常良好,除非遊戲在擋,基本上是小弟蒐集文章後,最激賞的的方式...

以下部份,是思考想多點採集遊戲資訊,想製作的模式,卻異常產生「讀錯色」?
HotKeySet("!p", "GetCurColor");;;使用熱鍵Alt+P 呼叫...

Func GetCurColor()
$P = PixelGetColor(IniRead("test.ini", "設定", "X", ""), IniRead("test.ini", "設定", "Y", ""))
ToolTip("色標為"&Hex($P),0,10)
EndFunc

很是好奇,語法其實是相通的,只是轉個彎去使用,Autoit3 擷取出來的色碼,就異常了?
发表于 2009-10-19 21:00:23 | 显示全部楼层
万王之王3这游戏本身就带一些外挂功能,好像除了自动释放技能需要花钱,别的都可以用,我现在的问题是不知道怎么样把好几个按键集合到一个脚本里,兄弟有没有什么好办法?
 楼主| 发表于 2009-10-19 21:13:36 | 显示全部楼层
4# angelink

嗯...萬王是我當初的實驗品之一,記憶中為下
支援內存讀取「HP、MP」、支援背景按鍵...全螢幕、視窗螢幕,網頁依舊繼續看...

OK 回歸你的問題,應該也是我最近遇到的問題之一,那就是塞版面吧...
舉例三個常駐技能,使用三組時間、三組按鍵...還算客氣? 當達到5~N次方...
難否程式面板無限拉開? 那就糗了,複雜到 沒人會使用...
OK...開始化繁為簡,善用INI處理,這種鳥現象
我們先探討補血吧
;===
HP=500
;;;多少喝水
HP_Key=1
;;;熱鍵
;===思維運用...
;;;公式1
[技能1]
01=4,5,6
;;;效應依序按下 4、5、6
;-----
;;;公式2
[技能2]
01=4,1000,5,1500,6,2000
;;;熱鍵、延遲

相信你都能寫小掛了,應該懂「01=4,5,6」這種INI該如何讀取?
至於「01=4,1000,5,1500,6,2000」的模式,是對應現在遊戲技能都有CD時間,CD時間不可能統一,
我們就以最簡單的方式搞定......
发表于 2009-10-19 21:27:30 | 显示全部楼层
5# ZEROBOYS


读取一个ini我还是会的,像这种 ;;;熱鍵、延遲 连在一起的我还真不知道怎么读,能不能有个代码参考一下?谢谢先!
 楼主| 发表于 2009-10-19 22:21:58 | 显示全部楼层
本帖最后由 ZEROBOYS 于 2009-10-20 04:52 编辑

6# angelink

喔...這部份難學的地方為,要去摸索三個參數
IniReadSection
效果為一口氣讀取
[技能]
01=
02=
03=
------------------------
StringSplit 效果為開始切割這些字串了...例如
01=1,2,3
※ 基本上,此時就需要動用For...好分別處理01、02、03
且01的部份,資料為....01[1]、01[2]、01[3]
以上例子,完整運用於熱血三國志/熱血無雙
達到一口氣派出N種兵種,不僅牽扯滑鼠動作、鍵盤動作(數量輸出)、讀取完畢的驗證...
此模組為我哥擇寫完成,我實在沒啥資格教人,自己概念也滿哩哩拉拉...

僅知道最近接觸的遊戲,要開始設計背娃娃系統,娃娃扣除應有的「補血」功能...
還需要龐大的「輔助支援」,還真的傻眼...面板一定不夠塞了所以經過N天的思維?
演化成以下部份「口、隊友#1、HP 500、口 輔助」
口=核選方塊(GUICtrlCreateCheckbox )
隊友/名字(GUICtrlCreateLabel )
血量/多少補....後面追加edit1方塊(GUICtrlCreateEdit )
口、輔助技能(GUICtrlCreateCheckbox )
~~~~~~~~~~~~~~~~~~~~~~~~關鍵處,勾選中,去載入整串ini值,達到連續動作
嗯...抱歉,這部份訴說的不是清楚,總言當您能完成以上方式時...
基礎(純熱鍵)
01=4,5,6
進階(熱鍵、毫秒....)
01=4,1000.5,1500,6,2000
~~~~~~~~~~~~~~~~~~
倘若真還看不懂@@等我完成新模組時,我會再引完整清晰的段落...
发表于 2009-10-20 10:22:04 | 显示全部楼层
7# ZEROBOYS
我目前想到的办法是建立一个gui界面(这个我不太熟,只好去翻别人的码+帮助文件)

每个键后跟一个可以打勾的复选,然后下边有个自动建立写入配置文件,然后还有一个开始和停止按钮,努力吧,现在只好开N个单个脚线了,期待放出你编写的详细脚本
 楼主| 发表于 2009-10-20 12:03:22 | 显示全部楼层
本帖最后由 ZEROBOYS 于 2009-10-20 12:14 编辑

8# angelink

碰巧這次的設計,剛好接近你詢問的部份...
[技能]
01=780,F1,5,4800
02=780,F2,5,2800
03=0,F1,5,0
04=0,F1,5,0
05=0,F1,5,0
06=0,F1,5,0

真要我說明怎設計?引源碼?我上面已經相關指令語法,都KEY出了...
有圖、有版面、有INI...現在你就當它是拼圖吧@@~
PS:這也算是今天剛完成的東西,之前寫了N個版本...
都不是滿意,並竟這個遊戲,技能CD時間有夠囉唆...
最後的地方為施放CD時間,事後發現,還有技能恢復使用的CD時間...
導致使用上卡卡的? 反覆的編譯、紙上作業?又發現寫法其實很正確...
只是在使用說明上,需要些技術教學...
範例1 單一的技能,填入值為「施放CD時間+恢復CD時間」,執行上就很完美的運作...
變成要教使用者...施放1500毫秒、恢復1000毫秒 填入值則為 1500+1000=2500

範例2 錯開的兩個技能,就可以省略"技能恢復CD時間"...
施放技能1的時間1000毫秒、施放技能2的時間2000毫秒,是個別的不相干、不起衝突...

以上範例1跟2,應該就能讓你對應版面跟INI了,語法怎玩?盡在....[F1]幫助

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-10-20 12:44:17 | 显示全部楼层
游戏外挂用按键精灵做比较方便,特别是读取内存这一块
当然你需要事先用GameMaster之类的工具将HP、MP的对应地址找到(要找到指针,因为具体地址一般每次重新启动会改变的)
 楼主| 发表于 2009-10-20 12:45:28 | 显示全部楼层
780秒~就是秒!不是毫秒! 會死人的...5分鐘,你要填入多大串?「300000」毫秒)
F1~剛好為遊戲中選擇組隊玩家的"快速鍵",依序F2、F3、F4....
5~遊戲中的施放技能熱鍵,這部份應該沒啥好說
4800~這裡是毫秒,沒辦法這遊戲搞怪,技能常有顯示0.8秒恢復、1.5秒、2.0秒...
※ 以上的寫法?我不是建議學習,除了INI對應回存複雜,且不寫又不行,會成為很失敗的外掛..
光要啟動一個技能施放,算算單位為5個「方塊、秒數、人物熱鍵、技能熱鍵、CD毫秒」

但邏輯上是相通的...簡化公式為
口 定時施放輔助於隊友01
口 定時施放輔助於隊友02
INI的部份則不變,直接以行為單位,再用StringSplit 拆成個別熱鍵、動作...
01=780,F1,5,4800 ;;每780秒、對F1隊友、施放技能5熱鍵、延遲時間為4800毫秒..
※ 第一次使用時,我們開啟INI編輯相關設定,將來使用僅需...
啟動外掛>個別打勾>點選[開始]....

呼..剩下應該就沒啥好說了,只是把這串「01=780,F1,5,4800」掛上去
If GUICtrlRead($01) = 1 Then
Send("{F1}")
Send("{5}")
Sleep(4800)
..........................

=.=" 打到自己迷糊了,大概就是這個概念,[780]秒的部份,該怎處理...就千奇百怪了
 楼主| 发表于 2009-10-20 12:52:22 | 显示全部楼层
用按鍵精靈,再怎麼寫,也頂多是個腳本...
今天我們既然學習了Autoit3 自然會習慣以著最熟悉的領域著手...
讀內存的部份?Autoit3 並沒有比較難,只是相關情報、知識,太少、太舊...
找基址的部份,那跟Autoit3 無關,這就撇開不談,相關技術,網路文章一大堆...
我自己目前有在嘗試學習Delphi...只是回頭吶悶Autoit3的極限?真的到了嗎?

10# wisly
发表于 2009-12-8 17:28:30 | 显示全部楼层
先收藏了,有空再看。
发表于 2009-12-8 17:31:01 | 显示全部楼层
繁体看得我晕死了……
发表于 2009-12-14 14:09:52 | 显示全部楼层
[img][/img]
[img][/img]
[img][/img]
[img][/img]
[img][/img]
[img][/img]
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-9 02:45 , Processed in 0.097492 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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