• 0MainCallLists pascode


    unit GameProc;
    interface
    uses
      SysUtils,
      Windows,
      Messages;
    (*有参数*)
    procedure SelMonster(ID1:DWORD);          {选中目标ID  所有可以选中的对象}
    procedure skill(ID:DWORD);                {使用技能}
    procedure RecoverMe(ID1,ID2:Integer);     {吃红,蓝}
    procedure pickUpGoods(ID1,ID2:DWORD);     {带参数 拾物}
    procedure Goforward(x,y,z: single);       {走路CALL向目标地方前进}
    procedure SendKey(Str:string);            {按键模拟}
    procedure F1_F8(Str:string);              {技能栏F1-F8}
    procedure Key1_8(Str:string);             {技能栏1-9}
    procedure Expression(str:string);         {表情}
    procedure SitDown(str:string);            {打坐}
    procedure TglWalkRun(str:string);         {走跑切换}
    procedure addPoint(ID1,ID2,ID3,ID4:DWORD);{加属性点}
    procedure wakuang(ID1,ID2:DWORD);         {挖矿}
    procedure sell(ID1,ID2,ID3:DWORD);        {出售物品}
    procedure buy(ID1,ID2,ID3:DWORD);         {购买物品}
    procedure sendMsg(s:pchar);               {喊话}
    procedure throwpckObj(ID1,ID2:DWORD);     {扔出物品}
    (*无参数*)
    procedure normalAttack();                 {普通攻击}
    procedure PickUp();                       {拾物}
    procedure fly();                          {飞行}
    procedure flyEx();                        {加速飞行}
    procedure hellolove();                    {相依相偎}
    procedure InviteTeam();                   {邀请加入队伍}
    procedure LeftTeam();                     {离开队伍}
    procedure DieBackCity();                  {死亡回城}
    procedure useFhjz();                      {使用复活卷轴}
    procedure acceptAlive();                  {接受复活}
    procedure LetMefly(str:string);           {BT飞行}
    procedure RepairAll();                    {全修}
    procedure CancelSelect();                 {取消选择}

    implementation

    (*期待添加*)
    {答题CALL}
    {BT-飞行}
    {BT-穿墙}
    {BT-连跳}
    {BT-隐藏建筑}

    /// <summary>
    /// 喊话CALL
    /// </summary>
    ///喊话CALL不正确
    procedure sendMsg(s:pchar);
    var calltxt:PWideChar;//宽字符类型指针
    begin
    callTxt:=allocmem(512); //把S字串的编码格式转成UNICODE存放在CallTxt里
    stringToWideChar(s,calltxt,256);//Ascii码编码转换成UNICODE编码
      asm
        MOV EDX,[$924E0C]
        MOV EAX,[EDX+$1C]
        MOV ECX,[EAX+$20]
        MOV EDX,[ECX+$0CB8]
        push 0  
        push calltxt //喊话内容地址
        mov ebx,$004722A0
        CALL ebx
      end;
    end;

    {3种药品的买卖 :红,蓝,弹药}
    /// <summary>
    /// 购买物品
    /// </summary>
    /// <param name="ID1">红药ID标识/param>
    /// <param name="ID2">在商店里的背包数组下标/param>
    /// <param name="ID3">购买物品数量/param>
    procedure buy(ID1,ID2,ID3:DWORD);
    var  a:array[1..3] of integer;
    begin
      a[1]:=ID1;//$000021A6; //红药ID标识
      a[2]:=ID2;//7;         //在商店里的背包数组下标
      a[3]:=ID3;//64;        //购买物品数量
      asm
        lea eax,a
        mov ecx,eax
        push ecx
        push 1
        mov ebx,$005A8590
        CALL ebx
        ADD ESP,8
      end;
    end;

    /// <summary>
    /// 出售物品
    /// </summary>
    /// <param name="ID1">红药ID标识/param>
    /// <param name="ID2">自己背包数组下标/param>
    /// <param name="ID3">出售物品数量/param>
    procedure sell(ID1,ID2,ID3:DWORD);
    var  a:array[1..3] of integer;
    begin
      a[1]:=ID1;//$000021A6; //红药ID标识
      a[2]:=ID2;//7;         //自己背包数组下标
      a[3]:=ID3;//64;        //出售物品数量
      asm
        lea eax,a
        mov ecx,eax
        push ecx
        push 1
        mov ebx,$005A8610
        CALL ebx
        ADD ESP,8
      end;
    end;

    /// <summary>
    /// 挖矿
    /// </summary>
    /// <param name="ID1">矿铲所在包裹的位置/param>
    /// <param name="ID2">地面系统物品ID/param>
    procedure wakuang(ID1,ID2:DWORD); 
    begin
       ASM
         PUSH 0
         PUSH $0C01 //矿产ID号  
         PUSH ID1  // 包裹ID号(矿铲所在包裹的位置)
         PUSH 0
         PUSH ID2  //石矿 地面系统物品ID  EDX=00000000 
         MOV EBX,$005A73A0
         CALL EBX
         ADD ESP,$14
       END;
    end;

    /// <summary>
    /// 加属性点
    /// </summary>
    /// <param name= "ID1">敏捷/param>
    /// <param name="ID2">力量/param>
    /// <param name= "ID3">灵力/param>
    /// <param name=  "ID4">体质/param>
    procedure addPoint(ID1,ID2,ID3,ID4:DWORD);
    begin
       ASM
         push ID1  //敏捷
         push ID2 //力量
         push ID3 //灵力
         push ID4   //体质
         MOV EBX,$005A7050
         CALL EBX
         ADD ESP,10
       END;
    end;

    /// <summary>
    /// 走路CALL向目标地方前进
    /// </summary>
    /// <param name="x">目的坐标平面X/param>
    /// <param name="y">目的坐标平面Y/param>
    /// <param name="z">目的坐标高度Z/param>
    procedure Goforward(x,y,z: single);
    var
      c1,c2,c3,c4: DWORD;
      xyz,xyz1: array[1..3] of single;
    begin
      c1 := $0045d880;
      c2 := $00461280;
      c3 := $004613a0;
      c4 := $0045dc80;
      xyz[1]  := x; //目的坐标平面X
      xyz[2]  := z; //目的坐标高度Y
      xyz[3]  := y; //目的坐标平面Z
      xyz1[1] := -0.03659384
      xyz1[2] := 0.9992558;
      xyz1[3] := 0.01219795;
      ASM
    //MOV ECX,[ESI+BB8]= [[[00924E0C]+1C]+20]+0BB8
        MOV ESI,[$924E0C]
        MOV ESI,[ESI+$1C]
        MOV ESI,[ESI+$20]
        MOV ECX,[ESI+$0BB8] 

        //CALL 1
        PUSH 1
        CALL C1  //直接不能CALL 用变量能CALL?!

        //CALL2
        MOV EDI,EAX
        LEA EAX,XYZ
        PUSH EAX //目的地 地址
        PUSH 0
        MOV ECX,EDI
        CALL C2

        //CALL 3
        LEA ECX,XYZ1 //目的地 地址
        LEA EDX,XYZ //目的地 地址
        PUSH ECX
        PUSH EDX
        MOV ECX,EDI
        CALL C3

        //CALL 4
        PUSH 0
        PUSH 1
        PUSH EDI
        MOV ECX,[ESI+$0BB8]
        PUSH 1
        CALL C4
      END;
    END;

    /// <summary>
    /// 选怪
    /// </summary>
    /// <param name="ID1">目标的ID号,所有可以选中的对象/param>
    procedure SelMonster(ID1:DWORD);
    begin
       ASM
          MOV EAX,[$924E0C]
          PUSH ID1  //目标ID号
          MOV ECX,[EAX+$20]
          ADD ECX,$0EC
          MOV EBX,$005830D0
          CALL EBX
       END;
    end;

    /// <summary>
    /// 取消选怪
    /// </summary>
    procedure CancelSelect();
    begin
    asm
      mov ebx,$005A7320
      call ebx
    end;
    end;
    /// <summary>
    /// 使用技能
    /// </summary>
    /// <param name="ID">技能ID号/param>
    procedure skill(ID:DWORD);
    begin
      ASM
        MOV ECX,[$924E0C]
        MOV ECX,[ECX+$1C]
        MOV ECX,[ECX+$20]
        PUSH -1
        PUSH 0
        PUSH 0
        PUSH ID  //技能ID
        MOV EBX,$00455860
        CALL EBX
      END;
    end;

    /// <summary>
    /// 吃红/蓝
    /// </summary>
    /// <param name="ID1">物品类型/param>
    /// <param name="ID2">包裹ID号/param>
    procedure RecoverMe(ID1,ID2:Integer);
    begin
      ASM
        PUSH 1
        PUSH ID1        {EDX=包裹里的物品的类型}
        PUSH ID2         {EAX背包格子ID号}
        PUSH 0
        MOV ECX,[$924E0C]
        MOV ECX,[ECX+$20]
        LEA ECX,[ECX+$0EC]
        MOV EBX,$00582E70
        CALL EBX
      END;
    end;

    /// <summary>
    /// 捡物
    /// </summary>
    /// <param name="ID1">物品IDparam>
    /// <param name="ID2">系统物品ID/param>
    procedure pickUpGoods(ID1,ID2:DWORD);
    begin
      ASM
        MOV ECX,[$924E0C]
        PUSH ID1 //4FAA {物品ID}
        PUSH ID2 //0C01014BD {系统ID}
        MOV ECX,[ECX+$20]
        ADD ECX,$0EC
        MOV EBX,$00583060
        CALL EBX
      END;
    end;

    /// <summary>
    /// 走跑切换
    /// </summary>
    /// <param name="VALUE">走和跑的地址/param>
    procedure TglWalkRun(str:string);
    var
      Value:DWORD;
    begin
       if str='走' then  Value:=0;
       if str='跑' then  Value:=1;
       ASM
          PUSH VALUE {0-> 走  1->跑}
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          MOV EBX,$00449A50
          CALL EBX
       END;
    end;

    /// <summary>
    /// 打坐
    /// </summary>
    /// <param name="VALUE">打坐和起立的CALL地址/param>
    procedure SitDown(str:string);
    var
      Value:DWORD;
    begin
     if str='坐下' then  Value:=$701;
     if str='起立' then  Value:=$700;
      ASM
        MOV ECX,[$924E0C]
        MOV ECX,[ECX+$1C]
        MOV ECX,[ECX+$20]
        SHR EAX,5
        NOT AL
        AND AL,1
        PUSH VALUE  {打坐CALL 701 坐下 700取消坐下}
        MOV EBX,$00449A20
        CALL EBX
      END;
    end;

    /// <summary>
    /// 表情
    /// </summary>
    /// <param name="Id">表情动作ID号/param>
    procedure Expression(str:string);
    var
      ID:integer;
    begin
        Id:=0;
        if str = '招手'   then ID:=0;
        if str = '点头'   then ID:=1;
        if str = '摇头'   then ID:=2;
        if str = '耸肩膀' then ID:=3;
        if str = '大笑'   then ID:=4;
        if str = '生气'   then ID:=5;
        if str = '晕倒'   then ID:=6;
        if str = '沮丧'   then ID:=7;
        if str = '飞吻'   then ID:=8;
        if str = '害羞'   then ID:=9;
        if str = '抱拳'   then ID:=10;
        if str = '坐下'   then ID:=11;
        if str = '冲锋'   then ID:=12;
        if str = '思考'   then ID:=13;
        if str = '挑衅'   then ID:=14;
        if str = '胜利'   then ID:=15;
        if str = '伸懒腰' then ID:=16;
        if str = '战斗'   then ID:=17;
        if str = '攻击1'  then ID:=18;
        if str = '攻击2'  then ID:=19;
        if str = '攻击3'  then ID:=20;
        if str = '攻击4'  then ID:=21;
        if str = '防御'   then ID:=22;
        if str = '摔倒'   then ID:=23;
        if str = '倒地'   then ID:=24;
        if str = '张望'   then ID:=25;
        if str = '舞蹈'   then ID:=26;
        ASM
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          PUSH ID  //表情动作ID号 第1个表情为0 第n个表情为 n-1 0..26
          MOV EBX,$0044A150
          CALL EBX
        END;
    end;

    /// <summary>
    /// 打开NPC对话框
    /// </summary>
    /// <param name="ID">NPC的ID号/param>
    procedure OpenNpcDlg(ID:DWORD);
    begin
       asm
        MOV ECX,[$924E0C]
        PUSH ID //NPC ID号
        MOV ECX,[ECX+$20]
        ADD ECX,$0EC
        MOV EBX,$00583490
        CALL EBX
       end;
    end;

    /// <summary>
    /// 扔掉物品
    /// </summary>
    /// <param name="ID1">物品数量/param>
    /// <param name="ID2">物品所在的包裹位置/param>
    procedure throwpckObj(ID1,ID2:DWORD);
    begin
    asm
      mov eax,[$924e0c]
      mov eax,[eax+$20]
      push ID1
      push ID2
      mov ebx,$0058DEB0
      CALL ebx
    end;
    end;

    /// <summary>
    /// 普通攻击
    /// </summary>
    procedure normalAttack();
    begin
       asm
         PUSH -1
         PUSH 0
         PUSH 0
         PUSH 0
         MOV ECX,[$924E0C]
         MOV ECX,[ECX+$1C]
         MOV ECX,[ECX+$20]
         MOV EBX,$00449A60
         CALL EBX
       end;
    end;

    /// <summary>
    /// 飞行
    /// </summary>
    procedure fly();
    begin
       asm
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          MOV EBX,$00449B50
          CALL EBX
       end;
    end;

    /// <summary>
    /// 接受复活
    /// </summary>
    procedure acceptAlive();
    begin
       asm
          MOV EBX,$005A7A10
          CALL EBX
       end;
    end;


    /// <summary>
    /// 使用复活卷轴
    /// </summary>
    procedure useFhjz();
    begin
       asm
         MOV ECX,[$924E0C]
         MOV ECX,[ECX+$20]
         LEA ECX,[ECX+$0EC]
         MOV EBX,$005831E0
         CALL EBX
       end;
    end;

    /// <summary>
    /// 死亡回城
    /// </summary>
    procedure DieBackCity();
    begin
       asm
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$20]
          LEA ECX,[ECX+$0EC]
          MOV EBX,$00583190
          CALL EBX
       end;
    end;

    /// <summary>
    /// 拾物
    /// </summary>
    procedure PickUp();
    begin
       asm
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          MOV EBX,$00449BF0
          CALL EBX
       end;
    end;


    /// <summary>
    /// 邀请加入队伍
    /// </summary>
    procedure InviteTeam();
    begin
       asm
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          MOV EBX,$0044A030
          CALL EBX
       end;
    end;

    /// <summary>
    /// 离开队伍
    /// </summary>
    procedure LeftTeam();
    begin
       asm
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          MOV EBX,$0044A060
          CALL EBX
       end;
    end;

    /// <summary>
    /// 加速飞行
    /// </summary>
    procedure flyEx();
    begin
       asm
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          MOV EBX,$00449CD0
          CALL EBX
       end;
    end;

    /// <summary>
    /// 相依相偎
    /// </summary>
    procedure hellolove();
    begin
       asm
          MOV ECX,[$924E0C]
          MOV ECX,[ECX+$1C]
          MOV ECX,[ECX+$20]
          PUSH 60
          MOV EBX,$00449D20
          CALL EBX
       end;  
    end;


    /// <summary>
    /// 全修 身上的装备全修  需要打开NPC对话框
    /// </summary>
    procedure RepairAll();
    begin
       ASM
         PUSH -1
         PUSH 0
         PUSH 0
         MOV EBX,$005A8690
         CALL EBX
         ADD ESP,$0C
       END;
    end;

    /////////多数汇编写/////////////////////////////////////////
    /// <summary>
    /// 技能栏F1-F8
    /// </summary>
    /// <param name="ID">技能ID号/param>
    procedure F1_F8(Str:string);
    var
      Index:integer;
      pECX:pInteger;
    begin
       Index:=1;
       if Str='F1'  then Index:=1;
       if Str='F2'  then Index:=2;
       if Str='F3'  then Index:=3;
       if Str='F4'  then Index:=4;
       if Str='F5'  then Index:=5;
       if Str='F6'  then Index:=6;
       if Str='F7'  then Index:=7;
       if Str='F8'  then Index:=8;
       Index:=(Index-1)*4;
       pECX:=Pointer($924E0C);  //
       pECX:=Pointer(pECX^+$1C);
       pECX:=Pointer(pECX^+$20);
       pECX:=Pointer(pECX^+$0BAC);//$0BAC=1*4+0BA8   F1~F8
       pECX:=Pointer(pECX^+$C);
       pECX:=Pointer(pECX^+Index);
       if pEcx^=0 then  Exit; //如果相应栏上没有放对象则退出 =[[[[[924E0C]+1C]+20]+1*4+0BA8]+C]+Ebx*4 =0
       pEcx:=pInteger(pEcx^);
      ASM
        MOV ECX,PECX
        MOV EDX,[ECX]
        MOV EDX,[EDX+$8]
        CALL EDX
      END;
    end;

    /////////多数汇编写/////////////////////////////////////////
    /// <summary>
    /// Key1_8
    /// </summary>
    /// <param name="ID">技能ID号/param>
    procedure Key1_8(Str:string);
    var
      Index:integer;
      pECX:pInteger;
    begin
       Index:=1;
       if Str='1'  then Index:=1
       if Str='2'  then Index:=2
       if Str='3'  then Index:=3
       if Str='4'  then Index:=4
       if Str='5'  then Index:=5
       if Str='6'  then Index:=6
       if Str='7'  then Index:=7
       if Str='8'  then Index:=8
       if Str='9'  then Index:=9;
       Index:=(Index-1)*4;
       pECX:=Pointer($924E0C);  //
       pECX:=Pointer(pECX^+$1C);
       pECX:=Pointer(pECX^+$20);
       pECX:=Pointer(pECX^+$0BA0);//$BA0 =1*4+0B9C  1~9
       pECX:=Pointer(pECX^+$C);
       pECX:=Pointer(pECX^+Index);
       if pEcx^=0 then  Exit; //如果相应栏上没有放对象则退出 =dd  [[[[[924E0C]+1C]+20]+1*4+0B9C]+C]+0*4 =0
       pEcx:=pInteger(pEcx^);
      asm
        MOV ECX,pECX
        MOV EDX,[ECX]
        MOV EDX,[EDX+$8]
        CALL EDX
      end;
    end;

    /// <summary>
    /// BT飞行
    /// </summary>
    /// <param name="FLYADDRESS">人物飞行后的数值/param>
    procedure LetMefly(str:string);
    var
      flyaddress:DWORD;
    begin
       if Str= '_on' then flyaddress:=$0E010;
       if Str='_off' then flyaddress:=$0E000;
       ASM
        MOV ECX,[$924E0C]
        MOV ECX,[ECX+$1C]
        MOV ECX,[ECX+$20]
        MOV EAX,FLYADDRESS { 0E010->飞行 0E000->没飞}
        MOV [ECX+$062C],EAX
       END;
    end;

    /// <summary>
    /// 按键模拟
    /// </summary>
    /// <param name="ID">技能ID号/param>
    procedure SendKey(Str:string);
    Var
        MyHwnd:HWND;
      KeyValue:integer;
    begin
      KeyValue:=VK_F1;
      {功能模拟发送按键:1~9,F1~F8}
       MyHwnd:=FindWindow(nil,'Element Client');
       if Str='1'  then KeyValue:=49;
       if Str='2'  then KeyValue:=50;
       if Str='3'  then KeyValue:=51;
       if Str='4'  then KeyValue:=52;
       if Str='5'  then KeyValue:=53;
       if Str='6'  then KeyValue:=54;
       if Str='7'  then KeyValue:=55;
       if Str='8'  then KeyValue:=56;
       if Str='9'  then KeyValue:=57;
       if Str='F1' then KeyValue:=VK_F1;
       if Str='F2' then KeyValue:=VK_F2;
       if Str='F3' then KeyValue:=VK_F3;
       if Str='F4' then KeyValue:=VK_F4;
       if Str='F5' then KeyValue:=VK_F5;
       if Str='F6' then KeyValue:=VK_F6;
       if Str='F7' then KeyValue:=VK_F7;
       if Str='F8' then KeyValue:=VK_F8;
       sendmessage(MyHwnd,wm_keydown,KeyValue,0);
       sendmessage(MyHwnd,wm_keyup,KeyValue,0);
    end;
    end.





    附件列表

  • 相关阅读:
    SpringBoot标准化搭建
    springboot打开swagger文档遇到For input string: ""的报错 swagger版本2.9.2
    MySQL和Redis如何保证数据一致性? 三种方案对比,初版
    [转]QUdpSocket收发信息
    [原][C++][插件]window下C++简单插件机制实现
    php saas 架构设计,SaaS的几种架构解析
    如何处理将HTML打印出来中的断行,分页,修改打印内容等问题?急,谢谢!!
    批量打印 | 多页打印 | PHP多页打印
    web页面的单页打印以及批量打印实现方法
    php批量打印发票三(php用FPDF合并所有图片为PDF文档)
  • 原文地址:https://www.cnblogs.com/xe2011/p/2525922.html
Copyright © 2020-2023  润新知