[原创]大航海OL 读取当前目标名字的代码 v5007

2012-03-0522:27:43 发表评论 6,437点击

以前版本的代码不少人都有。不过从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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: