procedure TForm1.shuaxinBBTimer(Sender: TObject);
beginDJG:=nageBB^;
self.Edit9.Text := inttostr(DJG);
    if (DJG <> 0) or (DJG <> 1) or (DJG <> 2) or (DJG <> 3) then
    begin
    self.label32.Caption := '未召唤宠物...';
    self.Label33.Caption := '未召唤宠物...';
    self.Label34.Caption := '未召唤宠物...';
    self.Label35.Caption := '未召唤宠物...';
    self.Label36.Caption := '未召唤宠物...';
    end
    else
    begin
    self.label32.Caption := ming2;
    self.Label33.Caption := IntToStr(BBjy1^)+'/'+IntToStr(BBjy2^);
    self.Label34.Caption := IntToStr(BBhp1^)+'/'+IntToStr(BBhp2^);
    self.Label35.Caption := IntToStr(BBMP1^)+'/'+IntToStr(BBMP2^);
    self.Label36.Caption := IntToStr(BBzhongcheng^);
    endend;
这个判断不知道为什么,能编译通过,但是结果是错的DJG 的值是 0  1  2  3  为召唤第几个宝宝 比如DJG为0就是召唤第1个宝宝
如果DJG的值不等于 0 1 2 3  那么显示 '未召唤宠物...'问题来了,我写完判断,怎么测试都不行,结果都错误,明明召唤出来宠物还出现 '未召唤宠物...'我确定我召唤宠物时候DJG 的值是 0  1  2  3   因为已经在self.Edit9.Text := inttostr(DJG);  这句中显示了 0 或1或 2或 3
求高手指点,是不是IF哪句写错了?

解决方案 »

  1.   

    自己已解决,换了个 if = -1 的方法在问个新问题,如果我现在有一组封包数据 21 31 3B 3C 3C 3C 3C 5B 68 7C 3C 3C 21如果我的DLL已经注入到这个游戏进程,并且可以在游戏内呼出我的程序那么,我如果发送这个封包?求解~~谢谢了!!求详细源码~~~
      

  2.   

    Socket.SendBuf(hex,Sizeof(hex));
      

  3.   

    gyk120 前辈 ,,你上次帮我个忙,太谢谢你了,上次也就是去年呵呵   那个问题解决后我就懂了,因为有源码自己操作几次就全部理解了
    这次又要麻烦前辈了,虽然只有115分了...Socket.SendBuf(hex,Sizeof(hex));   能详细点参数吗? 或者源码?我只看的动 SIZE长度   hex里面估计是封包吧?请教~~~~谢谢你了...你人真好
      

  4.   

    给你个例子吧
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    strData: string; 
    mysend: array[0..65535] of Char; 
    begin 
    Edit2.Text:='AA 3F 4E 5F'; 
    StrData := Edit2.Text; 
    StrPCopy(mysend,strData); 
    ClientSocket1.Socket.SendBuf(mysend, SizeOf(strData)+1024); //封包内容以及长度
    end; 
      

  5.   

    没有指定clientsocket的话,直接Socket.SendBuf(mysend, SizeOf(strData)+1024);就可以了,我上面是从一个代码里面取出来的,那个指定了socket
      

  6.   


    恩,我去掉了clientsocket1, 可是.这个呢? 是不是要加什么控件或单元?
      

  7.   

    uses winsock,如果还不行就试试uses winsock2
      

  8.   

    那试试uses Winsock,sockets能行吗?
      

  9.   

    uses了肯定不行,他者个是通过组件的写法
    楼主如果uses winsock
    可以用send,具体用法可以看下delphi的sdk帮助或者msdn
      

  10.   

    差点忘了,你这个需要clientsocket组件才行,从API上实现可以直接用send
    http://blog.csdn.net/lishuqian/archive/2006/09/04/1176683.aspx
      

  11.   

    前辈
    我已经安装了 ClientSocket控件  
      

  12.   

    人家只是给你提示,
    代码需要你自己去写
    TCP和UDP发送是不同的
    就几个API
    MSDN都有纤细的例子,翻译成DELPHI就完了,偷点懒用INDY就可以了
      

  13.   

    if (DJG <> 0) or (DJG <> 1) or (DJG <> 2) or (DJG <> 3) then这个条件表达式的逻辑有问题。当DJG=0时, (DJG <> 1)的值为True, (DJG <> 2)的值也是True, 还有(DJG <> 3)的值也是True
    当DJG=1时, (DJG <> 0)的值为True, (DJG <> 2)的值也是True, 还有(DJG <> 3)的值也是True
    ......显然与你的原意不符。
      

  14.   

    改成:
    if (DJG <> 0) and (DJG <> 1) and (DJG <> 2) and (DJG <> 3) then
      

  15.   

    jadeluo  and 和 or  的区别?
      

  16.   

    and运算符:三个表达式,必须全部为True,整个表达式才是True
    Or运算符:三个表达式,其中只要有一个为True,整个表达式就是True
      

  17.   

    谢谢前辈那个。. 就是 
    就是这个代码编译通过...完整的通过了..可是发不了包点了这个单击事件没反映因为我开着WPE截着发送包呢,截不到,DLL注入到游戏进程了。.也呼出了我的程序 ..
      

  18.   

    说了你有没考虑它的网络类型是TCP还是UDP?
    TCP要先连接的,
    自己在发送的时候抓下网络异常就知道发送结果了 
      

  19.   

    用360看了下是 TCP连接 
    游戏一般都是TCP吧
    另外 怎么连接? 请教?Service  IP?
    Port 端口?Active true?
      

  20.   

    名称:DDM2.dat
    TCP/UDP:TCP
    安全级别: 未知
    本机IP端口:123.*.*.*:1077
    远程IP端口:218.60.132.167:7207
    状态:连接
    PID:2244
    路径:E:\三亿传奇\热血传奇\DDM2.dat
    详细信息:
      

  21.   

    我觉得你这样改了自己用SOCKET改回去没用的
      

  22.   

    你自己的SOCKET丢回去数据,根本和游戏的协议对不上
    得用钩子类的东西,自己控制网络,判断是否是你要修改的数据,然后改了,再丢回去
    这样用的还是它原来的协议,你这样直接用SOCKET去连,你自己根本不知道它协议,
      

  23.   


    意思是,我发不了封包了?
    我IP也填了,端口也填了,而且也连接上了,
    就是发不了包..为什么WPE发包这么容易,选择一下进程,直接发送数据包
      

  24.   

    WPE也是按照数据包格式发送的,它也是先更改了封包的数据,你可能没有按照数据包的格式发送,比如有的数据包会加上时间戳验证,你发送的是5秒之前的数据包,验证不通过,你的数据包也就发送失败了
    建议看下整个数据包的格式
      

  25.   

    这个传奇SF完全没有 时间戳验证因为我测试的明文包不管什么时候添加到WPE都可以发送格式也已经看了我都给改成16进制格式还不行  前面都进上 $另外  连接IP和端口我都改成了和  360显示的端口等一样。.连接也没问题