【 代碼公布區 】
我把修改器怎麼做的、改哪裡寫在這,用這個你也能自己做出修改器
反三國志要實現永遠用跑的很簡單,把走路時要做的事改成跑步就好了
走路代碼
00426D70 - mov [esi+4c],00000001
跑步代碼
00427283 - mov [esi+4C],00000002
所以,只要把00426D70改成mov [esi+4C],00000002按走路也變成用跑的了
要做自動攻擊就很麻煩
1.進戰鬥後,跳出那個選單時,做自動點選攻擊or怒擊動作(當中還必須判斷當下是否可怒擊,可怒擊就要自動改點怒擊而不是自動點攻擊)
2.自動按下攻擊or怒擊後,還要再自動按下敵人
作1.跟2.的事情加起來才是一次完整的自動攻擊
00418FC1 - cmp eax,-1
00418FC4 - jne 00418fc9
00418FC6 - xor eax,eax
00418FC8 - ret
00418FC9 - cmp eax,04
00418FCC - push esi
00418FCD - ja 00419134
00418FD3 - jmp dword ptr [eax*4+00419138]
00418FDA - xor esi,esi
00418FDC - mov [0075fbe8],esi
00418FE2 - mov [0075fbf4],esi
00418FE8 - jmp 00418ffc
00418FEA - xor esi,esi
00418FEC - mov [0075fbf4],00000001
00418FF6 - mov [0075fbe8],esi
00418FFC - mov ecx,[0075fb58]
00419002 - push esi
00419003 - call 004402b0
00419008 - mov [0075fbe4],00000001
00419012 - xor eax,eax
00419014 - pop esi
00419015 - ret
首先,00418FC1~00419137在高階語言裡,其實是一個Switch cases,eax==-1這個case時,跳到00418FC6
eax==0這個case時,跳到00418FDA
eax==1這個case時,跳到00418FEA
在戰鬥選單如果按下攻擊,進這個Switch cases時eax就會是0,就會執行00418FDA
在戰鬥選單如果按下怒擊,進這個Switch cases時eax就會是1,就會執行00418FEA
戰鬥中什麼都沒按下時,進這個Switch cases時eax就會是-1,就會執行00418FC6
要做出自動按就是遊戲偵測到沒按就執行00418FC6,把它改成改執行00418FDA或00418FEA,就變成會自動按下攻擊or怒擊了
執行00418FC6或00418FDA或00418FEA,是由eax決定的
所以在00418FC1的地方把eax改成0,就會自動按攻擊。把eax改成1,就會自動按怒擊
主角是正常狀態時就是一直把eax改成0,但在這之前還必須加一個判斷,如果變成虛弱狀態可用怒擊時,要改把eax改成1放怒擊
遊戲運算當前可不可怒擊的地方在
00418D00 - mov eax,[0071c074]
00418D05 - lea ecx,[eax*8+00000000]
00418D0C - sub ecx,eax
00418D0E - lea ecx,[eax+ecx*4]
00418D11 - lea edx,[ecx+ecx*2]
00418D14 - lea eax,[eax+edx*8]
00418D17 - shl eax,02
00418D1A - fild dword ptr [eax+00728450]
00418D20 - fild dword ptr [eax+0072844c]
00418D26 - fmul qword ptr [00484338]
00418D2C - fcompp
00418D2E - fnstsw ax
00418D30 - test ah,01
00418D33 - je 00418d39
00418D35 - push 01
00418D37 - jmp 00418d3b
00418D39 - push 00
所以在00418FC1之前要先做(自己做)跟00418D00這個函數一樣的fild、fmul、fmul、fcompp、fnstsw浮點數運算
這樣才能在主角虛弱時改放1進eax
第二步
自動點了攻擊or怒擊後,還要再自動點選攻擊對象
判斷玩家點選攻擊對象了沒+點選的是哪個攻擊對象的地方在
004204DF - push 03
004204E1 - call 00420870
004204E6 - add esp,04
004204E9 - cmp eax,-1
004204EC - je 0042051a
004204EE - lea ecx,[eax*8+00000000]
004204F5 - mov [0075fbf8],eax
004204FA - sub ecx,eax
004204FC - mov [0075fbe4],00000002
00420506 - lea ecx,[eax+ecx*4]
00420509 - lea edx,[ecx+ecx*2]
0042050C - lea ecx,[eax+edx*8]
0042050F - mov [ecx*4+00728f00],00000000
在004204E9 - cmp eax,-1就是如果eax==-1代表使用者還沒點選攻擊對象,就會je 0042051A跳走了
004204EE~0042050F就是使用者點選了攻擊對象,只要讓他自動執行004204EE~0042050F就大功告成了,角色會做一個完整的自動攻擊了
但必須要在004204F5 - mov [0075fbf8],eax把你要攻擊誰放到[0075fbf8],不然還是會出錯
所以004204E1還是得再自己加個判斷,判斷要攻擊幾號敵人,因為敵人最多3個,所以你改成攻擊4號甚至還可以攻擊自己!
遊戲用[007299E4] [0072AFAC]這兩個地址表示現在選中第幾號敵人
選中第1個敵人(藍色)時,[007299E4]==2 [0072AFAC]==0
選中第2個敵人(綠色)時,[007299E4]==0 [0072AFAC]==0
選中第3個敵人(紅色)時,[007299E4]==0 [0072AFAC]==2
規則很簡單,所以那個判斷的寫法就是
如果[007299E4]==2,就eax=1,這樣就自動攻擊第1個敵人
如果[0072AFAC]==2,就eax=3,這樣就自動攻擊第3個敵人
如果是這兩種以外的情況,就是eax=2,自動攻擊第2個敵人