首页
社区
课程
招聘
(详细+说明+源码)热血传奇中周围有怪时如何使寻路终止?(目前需要鼠标点击一下))
发表于: 2010-11-6 14:01 6073

(详细+说明+源码)热血传奇中周围有怪时如何使寻路终止?(目前需要鼠标点击一下))

2010-11-6 14:01
6073
//以上代码实现了:有怪时打怪,但非得手动让游戏人物停(例如:鼠标点一下,此时游戏中人物会自动清除周围怪后寻路),无怪时可以寻路了
//疑问:当有怪时,人物不会自动停下来打怪,而需要在游戏中手动用鼠标单击一下才会停
//      此处如何才能让人物停下来呢?
procedure TForm1.Auto_PlayMonTimer(Sender: TObject);
var
i,monNum:integer;
curType:PByte;
temp,temp2,temMonObj:dword;
playBase,pt,curRole,pmonNum,curRoleX,curRoleY,curRoleLD,temp1:PDWORD;//^integer ^Dword;
ws:pchar;
s,tempStr,tempTypeStr,tempStr1:string;
begin
    self.Memo2.Clear;
    playBase:=Pointer($63E7C4);
                playBase:=Pointer(playbase^+$5FB5C);
    pmonNum:=Pointer(playbase^+$8);//周围怪物数量
          playBase:=Pointer(playbase^+$4);
         for  i:=0 to pmonNum^-1 do
                begin
    try
                        curRole:=Pointer(playBase^+i*4);//对象基址
      temMonObj:=curRole^;
      curType:=Pointer(curRole^+$e); //表示怪物类型
      if (curType^= 0) then continue;//如果是0,表示不是怪物
                        if (curRole=nil) then continue;
                        if (curRole^=0) then continue;
       pt:=Pointer(curRole^+$24); //表示名称指针
       curRoleLD:=Pointer(curRole^+$16); //最后一位为1生0死表示怪物生死
       curRoleX:=Pointer(curRole^+$E0); //表示怪物X坐标
       curRoleY:=Pointer(curRole^+$E4); //表示怪物Y坐标
       temp:=curRoleLD^;
       tempStr:=copy(IntToHex(temp,8),8,8);

                begin
                   if (tempStr='0')   then //如果怪物是活的并且周围有怪时,则
                     begin
                     //当有怪时,人物不会自动停下来,而需要在游戏中手动用鼠标单击一下才会停
                     //此处如何才能让人物停下来呢,
                      ws:=Pointer(pt^);//表示名称
                                        s:=strpas(ws);
                      self.Memo2.Lines.Add('怪物对象基址:'+IntToHex(curRole^,8)+'怪物名称:'+S+'怪物类型:'+IntToHex(curType^,8));
                      f1_f12(3,curRole^); //传入参数,3表示技能数组下标,curRole^表示怪物对象,调用技能打怪CALL
                     end
                end;
    except
    continue;
    end;
                end;
    //此处判断周围是否无怪,无怪就寻路
    tempStr1:=self.Memo2.Text;
    if tempStr1='' then
    begin
           flag:=true;
           goRoadMir($000000df,$00000165); //寻路函数
    end;

end;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 111
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看看你的留言版
2010-11-6 15:07
0
雪    币: 190
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
兄弟们帮帮忙啊,说说思路即可
2010-11-6 21:50
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我想先问问,这个游戏是不是手动操作都是那样的。
比如:手动操作的时候,你正在跑动,这个时候攻击怪物 是不是也不会去攻击怪物

不过我想游戏中不会那样。
估计是游戏这样设定的。你是发包打怪还是调用游戏函数呢。
如果是发包的话,估计你分析不够全面 肯定发包打怪,然后游戏跑道怪旁边
会自动再发一个停止移动的包(当然这个包可能在某包里的一个标志也可能和你停止移动包是同一个包)。
2010-11-7 15:20
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
啊 楼主结贴率那么低啊。
2010-11-7 15:21
0
游客
登录 | 注册 方可回帖
返回
//