wangbeng

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

大航海时代ol台服找Call记(十一) 物品ID计算物品中文名称 (2)

根据第十篇的获取物品中文名称分析,再结合第九篇的背包数据结构,得到以下的获取背包物品内容的简易程序:(物品的objtype=2)

//-------获取物品中文名称--------
function GetObjName(objtype, id: integer): string;
var
  base2: integer;
  objaddr: integer;
  objNameBase:Integer;
  temp: integer;
  name: string;
begin
  name := '';
  if objtype = 2 then // 物品
  begin
    base2 := $001219664;
    objaddr := getObjAddr(id, base2);
    objNameBase:=objaddr ;
    objaddr := readmemoryint(players[0], objaddr + $C);
    name := readmemorystr(players[0], objaddr);
    log(0, Format('[base:%x]   ID:[%0x] [nameAddr:%08x]  name:[%s], ', [objnamebase,Id,  objaddr,name]));
  end;
  result := name;
end;
//-------获取背包物品数据--------
procedure TForm1.GetBagItems(Sender: TObject);
var
  base: integer;
  tmp1, tmp2, tmp3, id, num: integer;
  name: string;
begin
  base := $1291274;
  tmp1 := readmemoryint(players[0], base) + $2f0;
  while tmp1 > 0 do
  begin
    tmp2 := readmemoryint(players[0], tmp1) + 8;
    tmp3 := readmemoryint(players[0], tmp2)+$c;
    tmp3 := readmemoryint(players[0], tmp3);

    id := readmemoryint(players[0], tmp3 + 8);
    num := readmemoryint(players[0], tmp3 + $28);
    name := GetObjName(2, id);

    tmp1 := readmemoryint(players[0], tmp1);
  end;

end;

背包数组

从上图可知:只有第1个物品成功获取到了中文名称。后面的物品只有ID是正确的,中文名称均为空,中文名称的指针都相同均为:0x120BF18
进入CE,先到第1个物品“宽松衫”的节点地址(即上图的①处的base:48FEB1C)
0168node
[+04] = ID , [+08] = 数量 [+0c] = 中文名称地址指针0x06ADDFA8,转过去看下:

kss0
kss
确实就“宽松衫”的中文名称(utf-16)

那第2个及后面的所有物品都没获取到中文名称,转到第2个物品的节点地址base:0x0493553C 看下:
199c4node
120BF18

可以看到[0x0493553C+0c] = 0120BF18 ,[0120BF18] = 0x0,没有中文名称。

经测试,鼠标移动过背包物品后(移动到物品上时,会显示物品名称等信息),节点内容会发生变化 ,[0x0493553C+0c] 从原来的 0120BF18 变为 06815100 ,指向的内容 [06815100] = ”阿拉伯式包头巾“,可以读出中文名称来了。
19cc4china
1c994chinese
1c994delphi


如上面几个图所示,物品节点[0x0493553C+0c] = 06815100 ,为中文名称的地址。

在向wking请教后,知道了,应该是物品的中文名称原来是加密存放在内存中,当鼠标移到物品上时,或物品获得焦点时,游戏解密物品中文名称数据,存到该物品节点中。而背包打开时,默认第1个物体为选中焦点,因此第1个物品“宽松衫”游戏直接先解密了,可以取到中文名称,而其他物品一定要鼠标移或点上去后,游戏才去解密,然后可以取得中文名称。
(解密过程下一篇再写)

posted on 2026-03-22 20:08  wangbeng  阅读(1)  评论(0)    收藏  举报