以前版本的代码不少人都有。不过从v5005开始以前的就不能用了。原因是过程中有一个变量偏移发生了改变。我花了几个小时把脚本恢复了。其中读取人名是没问题的,读取门什么的还不行。有空再说吧。seraph的代码。改成按键精灵很容易。
#[HOTKEY]F11
function main
name=UnicodeToGB(GetObjName())
print(name)
end function
function GetObjName()
ReadMemory(&HCB2348, 2, ID) //TAB ID
ReadMemory(&HCB2344, 2, ObjType) //TAB选择对象大类(对象基本)
print("ID=" & HEX(ID))
print("ObjType="&ObjType)
if ObjType =0 then
//计算NPC或PC名字
base=&HCB7C78 //活动对象
ObjAddr= GetObjAddr(ID,base)
print("ObjAddr="& HEX(ObjAddr))
If ReadMemoryEx(ObjAddr+&H2C, 2, temp, 1) then
ReadMemoryEx(temp, 5, 50, temp, 1)
Else
Temp=GBToUnicode("Null")
End If
elseif ObjType=1 then
//求场景名字
base=&HCB7C98 //固定对象
ObjAddr= GetObjAddr(ID,base)
print("ObjAddr1="& HEX(ObjAddr))
if ObjAddr>0 then
ReadMemory(ObjAddr+&H0C, 2, ID)
print("ID="& HEX(ID))
base=&HCB8328 //场景对象
ObjAddr= GetObjAddr(ID,base)
print("ObjAddr2="& HEX(ObjAddr))
ReadMemoryEx(ObjAddr, 2, temp, 1)
print(temp)
ReadMemoryEx(temp, 5, 50, temp,1)
else
temp="没找到"
end if
else
temp=GBToUnicode("请TAB选择对象后再运行本脚本!")
end if
GetObjName = temp
end function
function GetObjAddr(ID,base)
dim A,B,temp,Addr
ReadMemoryEx(base, 2, A,1)
ReadMemoryEx(base+&H04, 2, B,1)
B=A+(int(ID/16) mod B) *4
ReadMemoryEx(B, 2, addr, 1)
DO
ReadMemoryEx(addr, 2, temp,1)
if temp=ID then
exit do
end if
ReadMemoryEx(addr+&H08, 2, Addr,1)
LOOP UNTIL addr=0
if addr >0 then
ReadMemoryEx(Addr+&H04 , 2, temp,1)
GetObjAddr=temp
else
GetObjAddr=0
end if
end function
//十进制转16进制
function Hex(Dec)
dim D,R,H
D=Dec
H=""
do
R=D mod 16
if R<10 then
H=CStr(R) & H
else
H=Chr(55+R) & H
end if
D=D\16
loop UNTIL D=0
J=8-len(H)
for I=0 to J
H="0" & H
next
Hex = "&H" & H
end function
文章评论
大大您好,請問您還有繼續研究大航海嗎?
目前基礎不穩,剛開始嘗試使用您使用的x64dbg軟件,有許多不懂的部分。
不曉得您是否有空解答這方面的問題呢?
首先第一個問題,對於大航海如何確認基址?
@winzxc 基址是用x64dbg跟踪航海程序时发现的。比如eax=[0x12345],耐久=[eax+3],那0x12345就是基址
感謝!
追蹤確認基址這部份,大大您能否說說整個流程呢?
目前嘗試使用x64dbg,但我沒有辦法有一個流程能確定基址。
以前我是使用ce,透過各種搜索,將我能搜索到的確定內址後,往前推算及尋找一個最前面但改版後不會變動的非遊戲功能內址作為基址。
這個方法應該是錯誤的,現在想學您使用x64dbg來確認遊戲機址。
第二個問題,以前一直在使用ce搜索陸地座標時,曾經找到一個陸地座標公式,現在已經搜不到該文章,目前也推不出陸地座標的公式(沒有頭緒了@@),您能說說嗎?謝。
地三個問題,延續陸地座標,想在海上透過CE搜索座標及海域資料時,頂多能找到一組基址為海域名稱,但沒有辦法透過CE搜索出海域的中文ID內址,而船隻海上座標則是一直無法能有正確的CE搜索方式(不管是有使用測量還是沒使用測量),您能說說嗎?謝。
抱歉,這次回航搜索各種心得文章時才看到您這裡,請問您是否願意教我解決我的未解問題呢?謝。
我曾經嘗試透過C或C++來做自己的輔助,但碰到C或C++對於記憶體的操作指令也一直搜不到相關文章,也搜不到在C或C++下如何去針對滑鼠鍵盤進行後台操作的文章(不管是自寫DLL還是套用DLL),請問您對C或C++熟悉嗎?如果您不熟基,我可以改學P語言,這部份能請您推薦P語言的編譯軟體及套件的發佈網站嗎?謝。
@winzxc 1.上次也说了,最先不是从基址入手。而是先搜一个容易找的数据,从这个数据一步步逆推,在逆推的过程中找基址。比如我这篇文章https://wkings.blog/archives/591,从当前场景的人物数量入手,在跟踪的过程中发现0119E630是基址。你的方法也是对的,其实原理都一样。CE里说的静态地址,就是C++语言里的全局变量,而基址就是一个类型为指针的全局变量。当数据结构简单的时候比如血量,就是int全局变量,数据结构复杂了,就可能变成指针全局变量了,这完全看程序员是怎么写代码的。
2.大航海有两个坐标系统。一个是内存坐标,一个是游戏显示坐标。内存坐标经过公式变为游戏坐标。但公式具体是什么,我也还没研究。找内存坐标你可以看https://www.cnblogs.com/dol888/archive/2009/09/15/1567177.html。
3.中文ID=[[[11B670C]+4]+0]。测量坐标是根据内存坐标算出来的。公式我还没验证,搞好了我会再发一篇文章。
4.C++太底层了。但是可以直接操作指针,读内存就是直接用指针读对应的内存地址就可以,不像其他编程语言还需要借助第三方库。键鼠就是直接发sendmessage消息了。另外你也可以用大漠插件实现键鼠。哪个编程语言主要看你熟悉哪个,最终能实现的效果都一样,只是编程过程有简单复杂之分。
感謝。
@@天啊,怎麼這裡還有快速鍵能切換對齊模式
您知道如何切回去靠右對齊嗎?
@winzxc 我没注意到有右对齐功能?
抱歉,這幾天一直在嘗試新版本的ce來搜索找出以前能搜索並鎖定的遊戲相關內址,如:海上船隻狀態....等。
因此,這麼晚才看到您的回復。
我會去看看您提到的文章內的內容,看看是否能解決我一直解決不了的部分。
關於程式語言的部份,我並不是很喜歡高階的邊程語言,起因是,之前在嘗試編輯x堂x服的java核心時,經常碰到第三方dll檔案
調用時的報錯問題,而我又無法完全找到相關版本的說明文件,導致經常改到改不下去。@@
想用c跟c++的原因也是,我記得c跟c++都能自己編輯這些相關dll,不過我也卡在搜索不到學習製作這些自用的元件的學習來源。
大漠現在需要收費才能使用那些後台功能,對於我學習這部份倒是也沒有幫助。
還是感謝您的建議。
對了,能請您說說海上座標是否跟陸地座標一樣的內址嗎?
陸地座標一直都是沒有問題的部份,透過您提供的文章也確定我搜尋到的應該是正確的內址。
但是海上座標我一直無法確定是否跟陸地座標一樣的內址,也就無法計算測量技能使用時顯示的座標數值與內址內的數值所使用的公式。謝。
@winzxc 是一样的地址。只不过游戏里看到的测量坐标是游戏用内存坐标经过计算得出的
請問大大您還記得大漠v3.1233版本的插件,於按鍵精靈內如何註冊調用嗎?
我搜索到的文章資料及大漠本身的端口說明文件內的紀錄,都無法能在按鍵精靈內的插件區
讓我能正常看到大漠插件內的指令正常說明@@
調用也都失敗,就算有成功每次使用速度都很慢。
@winzxc <code>
Call Plugin.RegDll.Reg("E:\crack\COMDLL\dm.dll")
Set dm = createobject("dm.dmsoft")
if dm.Ver <> reg_ver then
// 这时,已经确认插件注册失败了。 弹出一些调试信息,以供分析.
messagebox "插件版本错误,当前使用的版本是:"&dm.Ver()&",插件所在目录是:"&dm.GetBasePath()
endscript
end if
//脚本结束时调用
Sub OnScriptExit()
dm.UnBindWindow
Set dm = nothing
End Sub
</code>
請教個問題,您有辦法透過cheatengine查找出遊戲內的子視窗相關資訊嗎?
@winzxc 不行。对windows和cheatengine来说,游戏启动只创建了一个windows窗口,游戏内部的子窗口不是典型的windows窗口
再請教兩個問題,透過ce搜索出遊戲內的某些數值的內址後,如有多個內址都擁有相同的數值,請問您是如何接下去篩選?例如:陸地上座標 x y數值,我能搜索出相同數值的內址超過一個,
GVOnline00.exe+E2173C,
GVOnline00.exe+DB4200,
GVOnline00.exe+DB41E0,
目前我沒有任何想法能在將目標縮小。
有看到您ce中,有找出海上船隻轉向的角度數值,請問這部份您是什麼方式確定出內址呢?
@winzxc 如果有多个内存地址,重新运行游戏后,多个地址的数值仍然正确,那么地址都是有效的。一般选择第一个地址。
海上角度是我用CE观察内存数据窗口目测出来的。角度地址就在坐标地址旁边,CE里把内存用浮点数表示,一眼就可以看出来。
再請教有關大漠v3.1233的註冊及使用問題
這次找到的檔案看起來應該沒有問題,但註冊後精靈內看不到大漠的插件分類(透過重複解除註冊及再次註冊後,有出現大漠插件分類,但分類內卻無法看到指令分類及解釋),且每次使用都得重新註冊。
您有碰過這個問題嗎?我現在想知道如何將大漠插件內的說明文件能正常顯示於按鍵精靈9之內。
@winzxc 没有遇到过你说的问题。大漠插件的文件夹里有一个“大漠接口说明.CHM”,根据这个CHM说明文件使用大漠就可以了。
好的,我目前也是指能靠這個說明文件來使用大漠的指令。
有個關於人物x、y座標的問題,我一直想輸入x、y座標來讓人物移動,但寫入記憶體數值後,卻是瞬間移動到該座標值,請問您是否能做出人物移動但不是瞬間飛過去的方法呢?
@winzxc 想实现走路那得使用CALL了,光改内存地址数据无法实现。用编程的话说就是“调用走路函数”。
再請教個問題
這幾天嘗試定位出您說的海上船隻轉向角度的地址,您說就在座標地址的旁邊。
我目前定位出的座標地址如下:
x座標-目標座標:011B4208
Y座標-目標座標:011B4200
X座標-移動跟隨變動:011B41E8
X座標-移動跟隨變動:0122173C
Y座標-移動跟隨變動:011B41E0
但我的觀察,這幾個地址旁邊都沒有與船隻轉向角度有關的變化地址。
頂多在此座標地址旁(0122173C)觀察到視角變動時跟隨變動的地址。
請問,您說的海上船隻轉向地址是哪個呢?
@winzxc 抱歉之前我没看清楚你的问题。你需要的是海上船只目前的角度?有两个坐标
海上鼠标点击坐标X或目标角度sin=[11B7674]+F8
海上鼠标点击坐标Y或目标角度cos[11B7674]+100
感謝回復。
請問您能否找個時間講講大航海內的調用函數這個部分?謝。
@winzxc 这个太难,没有基础理论光写文章是看不懂的
海上船隻的轉向角度問題,我想了解的也還不是您提到的海上鼠標點擊x,y軸這兩個地址的部份。
我想了解的是,當滑鼠點擊螢幕後,最終會產生一個船隻轉向的結果。
但我想不出來任何能搜索出能產生出這個船隻最終轉向的參數。
舉例來說:我想知道我滑鼠點擊後所產生的轉向是幾度角。
會有這個想法,也是因為一旦轉向指令下達後,船隻中心會產生一個圓周齒輪,用以表現所轉的角度。因此我想找出該角度用以確認我是否轉向過大(經常需要轉向只達到1度~5度內)。
不知道您是否考慮過該思維方向,且已有找到相關參數。
@winzxc 你想要知道你转向几度角,就是我之前告诉过你的内存地址啊?这个内存地址记录的就是转向角度
繼續請教個問題,遊戲人物的疲勞度您有方法能用ce找出地址嗎?
我印象中,多年前可以使用單浮點或雙浮點來找出,但現在我卻沒法找出正確地只,請問是我記錯了嗎?還是???
@winzxc 疲劳度内存的数据和看到的不一样。如果当前疲劳度是28,内存应该搜索280。
喔,疲勞度改成這樣了。
難怪我一直無法成功定位。
關於海上船隻轉動角度的問題。
我在觀察看看。
反之,我有成功定位出下面兩個內址。看起來像是遊戲內的滑鼠x,y座標值,但對應的是使用者桌面的解析度設定大小,請問您是搜索出這兩個地址呢?是否有確定這兩個地址的正確意義?
滑鼠 x:11AFF44
滑鼠 Y:11AFF48
@winzxc 鼠标内存这个我也找出来了,没有什么用处。