piaorou 发表于 2011-4-9 20:27:17

[丝路传说-官服]怪物,物品,玩家,NPC,宠物等遍例,适用1.177

本帖最后由 piaorou 于 2011-4-10 12:03 编辑

#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_UseUPX=n
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****

;------------文章来源
;------------网站:精灵领域 丝路传说
;------------网址:w w w . s r o 5 . c o m
;------------作者:精灵

Opt("TrayMenuMode", 1)
$kernel32 = DllOpen('kernel32.dll')
$GUI = GUICreate('丝路传说 遍历', 780, 200)
$list_belt = GUICtrlCreateCombo('', 10, 15, 700, -1, 3)
$data_input = GUICtrlCreateInput('', 10, 60, 700)
$guolv_input = GUICtrlCreateInput('', 10, 90, 700)
$button = GUICtrlCreateButton('刷新', 710, 90, 65, 23)
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = -3 Then
DllClose($kernel32)
Exit
EndIf
If $msg = -4 Then Tray()
If $msg = $list_belt Then
GUICtrlSetData($data_input, GUICtrlRead($list_belt))
EndIf
If $msg = $button Then
$ItemIDLIST = ""
$pid = WinGetProcess("SRO_Client")
$mid = memopen($pid)
GUICtrlSetData($list_belt, '')
$eax = memread($mid, 0xEC0B74)
While 1
$ecx = $eax - 0xDC
$type = memread($mid, memread($mid, $ecx))
If memread($mid, $ecx + 0x128) > 0x8 Then
$name = memread($mid, memread($mid, $ecx + 0x114), 'wchar')
Else
$name = memread($mid, $ecx + 0x114, 'wchar')
EndIf
$ID = Hex(memread($mid, $ecx + 0xF8))
$x_y = 'X:' & BitShift(BitAND(memread($mid, $ecx + 0x7c, "short"), 0xFF) * 3 - 0x195, -6) - Int(memread($mid, $ecx + 0x80, "float") / (-10))
$x_y = $x_y & ' Y:' & BitShift(BitShift(memread($mid, $ecx + 0x7c, "short"), 0x8) * 3 - 0x114, -6) - Int(memread($mid, $ecx + 0x88, "float") / (-10))
$itemdata = ""
$itemdata &= " 类型:" & GetTypeName($type)
$itemdata &= " 名称:" & $name
$itemdata &= " 坐标:" & $x_y
$itemdata &= " 在线ID:" & $ID
If $type = 0x009E13D0 Then $itemdata &= " HP:" & memread($mid, $ecx + 0x458) & '/' & memread($mid, $ecx + 0x460)
$itemdata &= " ECX=" & Hex($ecx)
$guolv = GUICtrlRead($guolv_input)
If $guolv = "" Then
GUICtrlSetData($list_belt, $itemdata)
Else
If StringInStr($itemdata, $guolv) > 0 Then
GUICtrlSetData($list_belt, $itemdata)
EndIf
EndIf
$eax = memread($mid, $eax + 0xC)
If $eax = 0 Then ExitLoop
WEnd
$pid = 0
memclose($mid)
EndIf
Switch TrayGetMsg()
Case -13
Tray()
EndSwitch
WEnd
Func Tray()
If BitAND(WinGetState($GUI), 2) Then
WinSetState($GUI, "", @SW_HIDE)
Else
WinSetState($GUI, "", @SW_SHOW)
EndIf
EndFunc ;==>Tray
Func GetTypeName($type)
$typeName = ''
Switch $type
Case 0x009E87A0
$typeName = '自己'
Case 0x009D3CD0
$typeName = '宠物'
Case 0x009EA1C0
$typeName = '玩家'
Case 0x009E24F0
$typeName = 'NCP '
Case 0x009E13D0
$typeName = '怪物'
Case 0x009EFC20
$typeName = '物品'
Case 0x009F8700
$typeName = '传送'
Case Else
$typeName = $type
EndSwitch
Return $typeName & '-' & Hex($type)
EndFunc ;==>GetTypeName
Func memopen($pid)
Local $mid = DllCall($kernel32, 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $pid)
Return $mid
EndFunc ;==>memopen
Func memread($mid, $adress, $type = 'dword')
Local $struct = DllStructCreate($type)
DllCall($kernel32, 'int', 'ReadProcessMemory', 'int', $mid, 'int', $adress, 'ptr', DllStructGetPtr($struct), 'int', DllStructGetSize($struct), 'int', '')
Return DllStructGetData($struct, 1)
EndFunc ;==>memread
Func memwrite($mid, $adress, $hex)
Local $struct = DllStructCreate('byte[' & BinaryLen('0x' & $hex) & ']')
For $i = DllStructGetSize($struct) To 1 Step -1
DllStructSetData($struct, 1, BinaryMid('0x' & $hex, $i, 1), $i)
Next
Local $x = DllCall($kernel32, 'int', 'VirtualProtectEx', 'int', $mid, 'ptr', $adress, 'int', DllStructGetSize($struct), 'dword', 0x40, 'dword*', 0)
DllCall($kernel32, 'int', 'WriteProcessMemory', 'int', $mid, 'int', $adress, 'ptr', DllStructGetPtr($struct), 'int', DllStructGetSize($struct), 'int', 0)
DllCall($kernel32, 'int', 'VirtualProtectEx', 'int', $mid, 'ptr', $adress, 'int', DllStructGetSize($struct), 'dword', $x, 'dword*', 0)
EndFunc ;==>memwrite
Func memclose($mid)
DllCall($kernel32, 'int', 'CloseHandle', 'int', $mid)
EndFunc ;==>memclosehttp://www.sro5.com/attachment.aspx?attachmentid=11
编译环境 AutoIt

cslxiaozhu 发表于 2011-4-10 03:42:41

坐标是怎么找到的? LZ 能说下思路吗

chunsen 发表于 2011-4-10 11:25:01

Au3做##的很少看到{:1_90:}{:1_89:}

piaorou 发表于 2011-4-10 12:09:38

不好意思。修正1下。
$x_y = 'X:' & BitShift(BitAND(memread($mid, $ecx + 0x7c, "short"), 0xFF) * 3 - 0x195, -6) - Int(memread($mid, $ecx + 0x7c, "float") / (-10))


正确的是
$x_y = 'X:' & BitShift(BitAND(memread($mid, $ecx + 0x7c, "short"), 0xFF) * 3 - 0x195, -6) - Int(memread($mid, $ecx + 0x80, "float") / (-10))



找坐标算法。来“精灵领域”看吧,陆续会发布所有的算法,找法和公开源代码。

死鱼 发表于 2011-4-11 00:22:15

这么好的帖子,不顶不行,鄙视不回帖的。

xiyuxiaomo 发表于 2011-4-15 16:38:15

搞啥灰机啊!这玩意儿可以用易语言写?!

yxqmeng2008 发表于 2011-4-15 19:53:55

为什么我用CE找不出人物坐标呢?

happelya 发表于 2011-4-20 15:04:44

好东西吖!学习了!!!

xiaomeimei 发表于 2011-4-23 10:12:11

AutoIt写的.学习了.{:1_83:}

绿色的草原 发表于 2011-4-24 09:53:35

想学下 但看上去太难了         

clong 发表于 2011-4-24 17:54:43

楼主打广告吗?{:1_83:}

syhhghy123 发表于 2011-5-6 21:19:17

好难啊,不是易语言的....

heiying8660 发表于 2011-5-7 12:07:13

我怎么什么都 看不懂呢

yr46369532 发表于 2011-5-13 16:14:45

是啊搞啥灰机啊! 啥都看不懂

zsbgx 发表于 2011-8-27 10:09:35

先回复一下再说吧,到时找不到就惨了

hu123456890 发表于 2011-10-3 10:46:18

啥语言怎么发现这里了

jiangyuanyang2 发表于 2011-10-22 08:43:35

电脑盲,来学习一下!!!!!!!!!!!!!!!!!!头都老大的哎
页: [1]
查看完整版本: [丝路传说-官服]怪物,物品,玩家,NPC,宠物等遍例,适用1.177