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

[發問] delphi 遊戲技能問題

janin0115 當前離線
UID
1472623
熱心
200 值
嘉獎
0 次
違規
0 次
在線時間
269 小時
經驗
120 點
積分
927
精華
0
最後登錄
2015-10-26
閱讀權限
30
註冊時間
2010-5-31
論壇幣
318 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 4Rank: 4
11
janin0115 2010-12-21 11:06:48
感謝大大們解說 但是我技能名稱 都讀不出來 執行的時候 整個視窗都沒辦法點 請大大幫我看一下
問題出在哪?感謝
var
   AjnnameII: array [0..35] of WideChar;
begin
ReadProcessMemory(ProcessID, Pointer($A5BFB0+$1C),@ft, 4, tt);   //讀取一級基址
       ReadProcessMemory(ProcessID, Pointer(ft+$20), @ft, 4, tt);   //人物基址
ReadProcessMemory(ProcessID, Pointer(ft++$101C), @jnfirst, 4, tt); //技能基址
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$1020), @jnnum, 4, tt);  //技能總數
        If jnnum > 0 Then
      ComboBox14.Clear;
       For i:= 0 to jnnum - 1 do
      begin
       ReadProcessMemory(ProcessID, Pointer(h3 + I * 4), @jnbase , 4, ByteRead);
       ReadProcessMemory(ProcessID, Pointer(jnbase+$c), @jnLV, 4, tt);  //技能等級
       ReadProcessMemory(ProcessID, Pointer(jnLV+$8), @jnID, 4, tt);  //技能ID
       ReadProcessMemory(ProcessID, Pointer(jnID +$10), @jnSJ, 4, tt);  //技能冷卻時間
       ReadProcessMemory(ProcessID, Pointer(jnSJ +$14), @jnJG, 4, tt);  //技能施放間隔
       ReadProcessMemory(ProcessID, Pointer(jnJG +$18), @jnZT, 4, tt);  //技能狀態
       ReadProcessMemory(ProcessID, Pointer(jnZT +$C), @ujnname, 4, tt);  //技能名稱
       ReadProcessMemory(ProcessID,Pointer(ujnname+$0),@AjnnameII,36,tt); //'得到技能名称
        begin
       combobox7.Items.Add(wideCharToString(AjnnameII));
回覆

使用道具 舉報

janin0115 當前離線
UID
1472623
熱心
200 值
嘉獎
0 次
違規
0 次
在線時間
269 小時
經驗
120 點
積分
927
精華
0
最後登錄
2015-10-26
閱讀權限
30
註冊時間
2010-5-31
論壇幣
318 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 4Rank: 4
12
janin0115 2010-12-22 09:30:03
請感謝各位大大解說 但是我技能名稱讀不出來 執行程式 讀取遊戲完 視窗都不能點 請大大幫我看一下我哪裡出問題 感恩

var I:integer; AjnnameII: array [0..35] of WideChar;
begin ReadProcessMemory(ProcessID, Pointer($A5BFB0+$1C),@ft, 4, tt); //讀取一級基址
ReadProcessMemory(ProcessID, Pointer(ft+$20), @ft, 4, tt); //人物基址 ReadProcessMemory(ProcessID, Pointer(FT++$101C), @jnfirst, 4, tt); //技能基址
ReadProcessMemory(ProcessID, Pointer(jnfirst +$1020), @jnnum, 4, tt); //技能總數
If jnnum > 0 Then ComboBox14.Clear; For i:= 0 to jnnum - 1 do begin ReadProcessMemory(ProcessID, Pointer(h3 + I * 4), @jnbase , 4, ByteRead);
ReadProcessMemory(ProcessID, Pointer(jnbase+$c), @jnLV, 4, tt); //技能等級
ReadProcessMemory(ProcessID, Pointer(jnLV+$8), @jnID, 4, tt); //技能ID ReadProcessMemory(ProcessID, Pointer(jnID +$10), @jnSJ, 4, tt); //技能冷卻時間
ReadProcessMemory(ProcessID, Pointer(jnSJ +$14), @jnJG, 4, tt); //技能施放間隔
ReadProcessMemory(ProcessID, Pointer(jnJG +$18), @jnZT, 4, tt); //技能狀態
ReadProcessMemory(ProcessID, Pointer(jnZT +$C), @ujnname, 4, tt); //技能名稱

ReadProcessMemory(ProcessID,Pointer(ujnname+$0),@AjnnameII,36,tt); //'得到技能名称
begin
combobox7.Items.Add(wideCharToString(AjnnameII));
回覆

使用道具 舉報

RAINTCK 當前離線
UID
1569638
熱心
259 值
嘉獎
0 次
違規
0 次
在線時間
321 小時
經驗
158 點
積分
4295
精華
0
最後登錄
2018-10-27
閱讀權限
50
註冊時間
2010-10-21
論壇幣
3504 幣
聯合幣
47 枚
幸運鑽
6 顆
招待卷
2000 點
查看詳細資料
Rank: 6Rank: 6
13
RAINTCK 2010-12-22 11:16:47
ReadProcessMemory(ProcessID, Pointer(FT++$101C), @jnfirst, 4, tt); //技能基址
多了個+
ReadProcessMemory(ProcessID, Pointer(jnfirst +$1020), @jnnum, 4, tt); //技能總數
技能總數應該是由人物基址來控制不是由技能基址來來讀取
ReadProcessMemory(ProcessID, Pointer(ft +$1020), @jnnum, 4, tt); //技能總數

ReadProcessMemory(ProcessID, Pointer(h3 + I * 4), @jnbase , 4, ByteRead);YCT62B
看了2 3次你的h3是甚麼
ReadProcessMemory(ProcessID, Pointer(jnfirst + I * 4), @jnbase , 4, ByteRead);
技能基址+i*4   指向技能偏移
回覆

使用道具 舉報

janin0115 當前離線
UID
1472623
熱心
200 值
嘉獎
0 次
違規
0 次
在線時間
269 小時
經驗
120 點
積分
927
精華
0
最後登錄
2015-10-26
閱讀權限
30
註冊時間
2010-5-31
論壇幣
318 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 4Rank: 4
14
janin0115 2010-12-23 09:31:25
感謝教導 之後用好讀取出來是 亂碼?請問是什麼問題是定義錯誤嗎
VAR
       I:integer;
       jnLV:DWORD;
      AjnnameII: array [0..35] of WideChar;
      ujnname,Ajnname:dword;
UnicodeName:dword ; //unicode名
begin
ReadProcessMemory(ProcessID, Pointer(FT+$101C), @jnfirst, 4, tt); //技能基址
       ReadProcessMemory(ProcessID, Pointer(ft +$1020), @jnnum, 4, tt);  //技能總數
        If jnnum > 0 Then
      ComboBox14.Clear;
       For i:= 0 to jnnum - 1 do
      begin
       ReadProcessMemory(ProcessID, Pointer(jnfirst + I * 4), @jnbase , 4, ByteRead);
       ReadProcessMemory(ProcessID, Pointer(jnfirst+$8), @jnID, 4, tt);  //技能ID
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$10), @jnSJ, 4, tt);  //技能冷卻時間
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$14), @jnJG, 4, tt);  //技能施放間隔
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$18), @jnZT, 4, tt);  //技能狀態
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$C), @ujnname, 4, tt);  //技能名稱
       ReadProcessMemory(ProcessID,Pointer(ujnname+$0),@AjnnameII,36,tt); //'得到技能名稱
       combobox14.Items.Add(WideCharToString(AjnnameII));
回覆

使用道具 舉報

janin0115 當前離線
UID
1472623
熱心
200 值
嘉獎
0 次
違規
0 次
在線時間
269 小時
經驗
120 點
積分
927
精華
0
最後登錄
2015-10-26
閱讀權限
30
註冊時間
2010-5-31
論壇幣
318 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 4Rank: 4
15
janin0115 2010-12-23 11:19:21
ReadProcessMemory(ProcessID, Pointer(FT+$101C), @jnfirst, 4, tt); //技能基址
       ReadProcessMemory(ProcessID, Pointer(ft +$1020), @jnnum, 4, tt);  //技能總數
        If jnnum > 0 Then
      ComboBox14.Clear;
       For i:= 0 to jnnum - 1 do
      begin
       ReadProcessMemory(ProcessID, Pointer(jnfirst + I * 4), @jnbase , 4, ByteRead);
       ReadProcessMemory(ProcessID, Pointer(jnbase+$8), @jnID, 4, tt);  //技能ID
       ReadProcessMemory(ProcessID, Pointer(jnbase+$c), @jnLV, 4, tt);  //技能等級
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$10), @jnSJ, 4, tt);  //技能冷卻時間
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$14), @jnJG, 4, tt);  //技能施放間隔
       ReadProcessMemory(ProcessID, Pointer(jnfirst +$18), @jnZT, 4, tt);  //技能狀態
       ReadProcessMemory(ProcessID, Pointer(jnbase+$4), @ujnname1, 4, tt);
       ReadProcessMemory(ProcessID, Pointer(ujnname1+$4), @ujnname2, 4, tt);
       ReadProcessMemory(ProcessID, Pointer(ujnname2 +$C), @ujnname3, 4, tt);  //技能名稱
       ReadProcessMemory(ProcessID,Pointer(ujnname3+$0),@AjnnameII,36,tt); //'得到技能名稱
       combobox14.Items.Add(WideCharToString(AjnnameII));

可以讀出名稱了 請問大大  選擇技能 他都會清除 沒辦法固定在選項裡面
回覆

使用道具 舉報

RAINTCK 當前離線
UID
1569638
熱心
259 值
嘉獎
0 次
違規
0 次
在線時間
321 小時
經驗
158 點
積分
4295
精華
0
最後登錄
2018-10-27
閱讀權限
50
註冊時間
2010-10-21
論壇幣
3504 幣
聯合幣
47 枚
幸運鑽
6 顆
招待卷
2000 點
查看詳細資料
Rank: 6Rank: 6
16
RAINTCK 2010-12-23 12:02:53
ReadProcessMemory(ProcessID, Pointer(jnfirst + I * 4), @jnbase , 4, ByteRead);
你讀出偏移指針你沒讀出技能名稱基址
READPROCESSMEMORY(ProcessID,Pointer(jnbase +$4),@FIGURE_workman_NAME_ADDR,4, PP);  //相對應技能名稱基址
        READPROCESSMEMORY(ProcessID,Pointer(FIGURE_workman_NAME_ADDR+$C),@FIGURE_workman_NAME,4, PP);  // 相對應技能名稱
        READPROCESSMEMORY(ProcessID,Pointer(FIGURE_workman_NAME),@FIGURE_workman_NAMEASCII,32, PP);  // 讀入陣列
令外你的技能冷確 狀態......都沒從偏移讀取
ReadProcessMemory(ProcessID, Pointer(jnfirst + I * 4), @jnbase , 4, ByteRead);
ReadProcessMemory(ProcessID, Pointer(jnfirst+$8), @jnID, 4, tt);  //技能ID
你讀偏移指針形同做白工
ReadProcessMemory(ProcessID, Pointer(jnfirst + I * 4), @jnbase , 4, ByteRead);
ReadProcessMemory(ProcessID, Pointer(jnbase+$8), @jnID, 4, tt);  //技能ID
..........
...........
技能相關都是從技能偏移開始讀取
回覆

使用道具 舉報

janin0115 當前離線
UID
1472623
熱心
200 值
嘉獎
0 次
違規
0 次
在線時間
269 小時
經驗
120 點
積分
927
精華
0
最後登錄
2015-10-26
閱讀權限
30
註冊時間
2010-5-31
論壇幣
318 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 4Rank: 4
17
janin0115 2010-12-24 09:13:27
請問大大 我這樣用 會出現 選取技能 然後就清除 不會固定是因為
If jnnum > 0 Then
ComboBox14.Clear; 的關係嗎? 還是因為是簡體字
還有我要call技能 不知道這樣對不對 請大大看一下 謝謝
procedure TForm1.Timer10Timer(Sender: TObject);
VAR
       I:integer;
       jnLV:DWORD;

begin
       ReadProcessMemory(ProcessID, Pointer($A5BFB0+$1C),@ft, 4, tt);   //讀取一級基址
       ReadProcessMemory(ProcessID, Pointer(ft+$20), @ft, 4, tt);   //人物基址
       ReadProcessMemory(ProcessID, Pointer(FT+$101C), @jnfirst, 4, tt); //技能基址
       ReadProcessMemory(ProcessID, Pointer(ft +$1020), @jnnum, 4, tt);  //技能總數
        If jnnum > 0 Then
       ComboBox14.Clear;
       For i:= 0 to jnnum - 1 do
      begin
       ReadProcessMemory(ProcessID, Pointer(jnfirst + I * 4), @jnbase , 4, ByteRead);//技能名稱基址
       ReadProcessMemory(ProcessID, Pointer(jnbase+$8), @jnID, 4, tt);  //技能ID
       ReadProcessMemory(ProcessID, Pointer(jnbase+$c), @jnLV, 4, tt);  //技能等級
       ReadProcessMemory(ProcessID, Pointer(jnbase+$4), @ujnname1, 4, tt);
       ReadProcessMemory(ProcessID, Pointer(ujnname1+$4), @ujnname2, 4, tt);
       ReadProcessMemory(ProcessID, Pointer(ujnname2 +$C), @ujnname3, 4, tt);  //技能名稱
       ReadProcessMemory(ProcessID,Pointer(ujnname3+$0),@AjnnameII,36,tt); //'得到技能名稱
       ReadProcessMemory(ProcessID, Pointer(jnbase +$10), @jnSJ, 4, tt);  //技能冷卻時間
       ReadProcessMemory(ProcessID, Pointer(jnbase +$14), @jnJG, 4, tt);  //技能施放間隔
       ReadProcessMemory(ProcessID, Pointer(jnbase +$18), @jnZT, 4, tt);  //技能狀態
       combobox14.Items.Add(WideCharToString(AjnnameII));
     end;
     end;
      // ---- 技能 CALL
procedure MyCall1(aPParams: PParams); Stdcall;
var
  Address: pointer;
  P1: DWORD;
begin
  Address:=Pointer($45F550);
  P1:=aPParams^.Param1;          // ---- 技能ID號
asm
    pushad
    mov ecx,DWORD PTR [$A5B90C]
    push -1
    push 0
    mov edx,DWORD PTR [ecx+$1c]
    push 0
    push p1
    mov ecx,DWORD PTR [edx+$20]
    call address
    popad

  end;
end;
// ---- 呼叫CALL 技能
procedure TForm1.UseSkill(Skill_ID: cardinal);
var

  aParams: TParams;
   aParamsSize: DWORD;
begin
  aParams.Param1 := (Skill_ID);
  aParamsSize := SizeOf(aParams);
  if ghwnd<>0 then
  begin
    injectfunc(@MyCall1, @aParams,aParamsSize);
  end;
end;

執行程式e大有解說 if 選中目標編號>0 then    //假如有選中目標
     UseSkill( StrToInt( Edit1.Text ) );  //就使用 編輯框1內文的技能編號
請問大大 選中目標編號 是要寫哪一個
還有使用技能編號 我可以改成
UseSkill( StrToInt( combobox14.Text ) );
讀取嗎? 可以給一個範例嗎?
回覆

使用道具 舉報

efun 當前離線
UID
226745
熱心
683 值
嘉獎
6 次
違規
0 次
在線時間
1229 小時
經驗
812 點
積分
472147
精華
6
最後登錄
2021-5-1
閱讀權限
70
註冊時間
2007-2-19
論壇幣
469294 幣
聯合幣
59 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 5Rank: 5Rank: 5
18
efun 2010-12-24 15:31:20
本帖最後由 efun 於 2010-12-24 15:32 編輯

把技能列表寫在Timer裡面並不是很適合,尤其是短時間刷新
原因
1.技能列表並不是一直在更新的東西
2.一直更新的列表,由於清空的動作,會讓你的選取目標消失
3.浪費電腦資源
所以丁丁用按鈕來控制刷新,如果你要用timer,請把時間拉長


UseSkill用的是技能id,不是技能名稱
所以你壓入combobox裡面的,應該是id
但是只有id,你也看不懂那個是哪個技能,所以丁丁採用的是 id+技能的表現方式

然後再用 LeftStr 取出 id 給技能call使用 (使用方法參見google)

當然,作法不只一種
程式創作是很自由的東西,不要拘泥在別人的想法寫法
用自己的思路,多嘗試看看,也多拜google大神,能讓你收獲更多
回覆

使用道具 舉報

janin0115 當前離線
UID
1472623
熱心
200 值
嘉獎
0 次
違規
0 次
在線時間
269 小時
經驗
120 點
積分
927
精華
0
最後登錄
2015-10-26
閱讀權限
30
註冊時間
2010-5-31
論壇幣
318 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 4Rank: 4
19
janin0115 2010-12-25 12:49:39
感謝e大 請問leftstr 還要定義什麼嗎? 因為我在這裡出問題
procedure TForm1.CheckBox7Click(Sender: TObject);
var
   gs_hpjn:integer;
begin
if checkbox7.Checked then

gs_hpjn:=StrToInt(leftstr(combobox14.text,pos('=',combobox14.text)-1)); <===leftstr 有問題 無法執行
UseSkill(gs_hpjn);
end;
回覆

使用道具 舉報

janin0115 當前離線
UID
1472623
熱心
200 值
嘉獎
0 次
違規
0 次
在線時間
269 小時
經驗
120 點
積分
927
精華
0
最後登錄
2015-10-26
閱讀權限
30
註冊時間
2010-5-31
論壇幣
318 幣
聯合幣
3 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 4Rank: 4
20
janin0115 2010-12-26 10:13:12
昨天發文 到現在都還沒出現 有點誇張
回覆

使用道具 舉報

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


手機版 | Archiver | 外掛聯合國

GMT+8, 2024-11-24 13:08 , Processed in 0.054863 second(s), 15 queries , Memcache On.

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

回頂部
第二步?
第三步?