⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.~pas

📁 纵横天地(开源) Delphi的功能很多``很值得大家学习
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
     begin
        ReadProcessMemory(hProcess, Pointer(GameBase), @RenBase,4, ByteRead);
        ReadProcessMemory(hProcess, Pointer(RenBase+$145), @IsRun,1, ByteRead);
        if IsRun=0 then
          SendMessage(ZHHwnd,WM_AOTOMOVE,MuDiX,MuDiY);
     end;
end;

Function GetJiNengInfo(DoType:string;SkillName:string):Integer;
var
i:Integer;
JiNengBase,JiNengAddr,CurJiNengAddr:DWORD;
LengQueTime,PianYi:Integer;
JiNengID:Integer;
JiNengName:array[0..14]of char;
TempName:string;
begin
Result:=-1;
if DoType='刷新' then
begin
  Form1.ListBox1.Clear;
end;

ReadProcessMemory(hProcess, Pointer(GameBase), @JiNengAddr,4, ByteRead);
JiNengAddr:=JiNengAddr+$864;

For i:=0 to 31 do
begin
    FillChar(JiNengName,15,0);
    JiNengID:=0;
    ReadProcessMemory(hProcess, Pointer(JiNengAddr+i*$14), @JiNengID,2, ByteRead);
    if (JiNengID=0) or(JiNengID>10000) then
        Continue;
    asm
        pushad                       //通过ID计算地址
            mov ecx,JiNengID
            imul ecx,ecx,$AA4
            add ecx,$8D9BB0
            mov CurJiNengAddr,ecx
        popad
    end;
    ReadProcessMemory(hProcess, Pointer(CurJiNengAddr+$44), @LengQueTime, 4, ByteRead);
    ReadProcessMemory(hProcess, Pointer(CurJiNengAddr+$884), @JiNengName, 15, ByteRead);
    TempName:=JiNengName;

    if DoType='刷新' then
    begin
      if TempName<>''then
      begin
        if (Trim(TempName)='摆摊')   or(Trim(TempName)='自动拾取')
              or (Trim(TempName)='自动对话') then
                 Continue;
        Form1.ListBox1.Items.Add(JiNengName);
      end;
      Continue;   
    end;

    if DoType='使用技能' then
    begin
       if Pos(SkillName,TempName)<>0 then
       begin
           Result:=JiNengID;
           exit;
       end;
       Continue;
    end;    
end;
end;

Function NoZhanDouBaoHu:Boolean;  //非战斗中保护
Const
{$j+}IsBaoHu:Boolean=False{$j-};
{$j+}XueIsFull:Boolean=False{$j-};
{$j+}LanIsFull:Boolean=False{$j-};
{$j+}XueTime:Integer=0{$j-};
{$j+}LanTime:Integer=0{$j-};
var
RenBase,JiNengID:Integer;
XuePos,LanPos:Integer;
BaoHuFlag:Byte;
begin
    Result:=False;

    if Form1.CheckBox1.Checked then
    begin
        if CurXue<=StrtoInt(Trim(Form1.Edit1.Text))  then
        begin
           Result:=True;
           IsBaoHu:=True;
        end;

        if CurXue>= MaxXue then
        begin
            XueIsFull:=True;
        end;
    end
    else
    begin
       XueIsFull:=True;
    end;
    
    if Form1.CheckBox2.Checked then
    begin
        if CurLan<=StrtoInt(Trim(Form1.Edit2.Text))  then
        begin
           Result:=True;
           IsBaoHu:=True;
        end;
        if CurLan>= MaxLan then
        begin
            LanIsFull:=True;
        end;
    end
    else
    begin
        LanIsFull:=True;
    end;

    
    if IsBaoHu then
    begin
       Result:=True; 
       if (XueIsFull) and (LanIsFull) then
       begin
          IsBaoHu:=False;
          XueIsFull:=False;
          LanIsFull:=False;
          XueTime:=0;
          LanTime:=0;
          Result:=False;
          exit;
       end;
       ReadProcessMemory(hProcess, Pointer(GameBase), @RenBase, 4, ByteRead);
       ReadProcessMemory(hProcess, Pointer(RenBase+$146), @BaoHuFlag,1, ByteRead);
       if BaoHuFlag=0 then
       begin
          JiNengID:=GetJiNengInfo('使用技能','调息');
          if JiNengID>=0 then
             Call.JiNeng(JiNengID);
       end;

       if Pos('调息',Trim(Form1.ComboBox1.Text))=0 then
       begin
           if not XueIsFull then
           begin
               if XueTime=0 then
               begin
                   XuePos:=GetBeiBaoInfo('物品位置',Trim(Form1.ComboBox1.Text));
                   if XuePos>=0 then
                   begin
                      Call.EatYao(XuePos);
                      XueTime:=GetTickCount;
                   end
                   else
                   begin
                       YaoPinState:='无药';
                   end;
               end
               else
               begin
                   if SleepFun(StrtoInt(Trim(Form1.LabeledEdit5.Text)),XueTime) then
                   begin
                       XueTime:=0;
                   end;
               end;
           end;
       end;


       if Pos('调息',Trim(Form1.ComboBox2.Text))=0 then
       begin
           if not LanIsFull then
           begin
              if LanTime=0 then
              begin
                 LanPos:=GetBeiBaoInfo('物品位置',Trim(Form1.ComboBox2.Text));
                 if LanPos>=0 then
                 begin
                    Call.EatYao(LanPos);
                    LanTime:=GetTickCount;
                 end
                 else
                   begin
                       YaoPinState:='无药';
                   end;
              end
              else
              begin
                  if SleepFun(StrtoInt(Trim(Form1.LabeledEdit6.Text)),LanTime) then
                  begin
                     LanTime:=0;
                  end;
              end;
           end;
       end;
    end;
end;


procedure ZhanDouBaoHu;      //战斗中保护
const
{$j+}IsEatXue:Boolean=False{$j-};
{$j+}IsEatLan:Boolean=False{$j-};
{$j+}XueTime:Integer=0{$j-};
{$j+}LanTime:Integer=0{$j-};
var
XuePos,LanPos :Integer;
begin
     if Form1.CheckBox3.Checked then   //吃血
     begin
         if not IsEatXue then
         begin
           if CurXue<=StrtoInt(Form1.Edit3.Text) then
               IsEatXue:=True;
         end;

         if IsEatXue then
         begin
             if IsEatXue then
             begin
                 if XueTime=0 then
                 begin
                     XuePos:=GetBeiBaoInfo('物品位置',Trim(Form1.ComboBox3.Text));
                     if XuePos>=0 then
                     begin
                        Call.EatYao(XuePos);
                        XueTime:=GetTickCount;
                     end
                     else
                     begin
                        YaoPinState:='无药';
                     end;
                 end
                 else
                 begin
                     if SleepFun(StrtoInt(Trim(Form1.LabeledEdit9.Text)),XueTime) then
                     begin
                         XueTime:=0;
                         IsEatXue:=False;
                     end;
                 end;
             end;
         end;
     end;

     if Form1.CheckBox4.Checked then     //吃蓝
     begin
         if not IsEatLan then
         begin
           if CurLan<=StrtoInt(Trim(Form1.Edit4.Text)) then
               IsEatLan:=True;
         end;

         if IsEatLan then
         begin
             if LanTime=0 then
             begin
                 LanPos:=GetBeiBaoInfo('物品位置',Trim(Form1.ComboBox4.Text));
                 if LanPos>=0 then
                 begin
                    Call.EatYao(LanPos);
                    LanTime:=GetTickCount;
                 end
                 else
                 begin
                    YaoPinState:='无药';
                 end;
             end
             else
             begin
                 if SleepFun(StrtoInt(Trim(Form1.LabeledEdit12.Text)),LanTime) then
                 begin
                     LanTime:=0;
                     IsEatLan:=False;
                 end;
             end;
         end;
     end;
end;

procedure UseJiNeng;     //使用技能
const
{$j+}Skill1Timer:Integer=0{$j-};
{$j+}Skill2Timer:Integer=0{$j-};
{$j+}Skill3Timer:Integer=0{$j-};
{$j+}Skill4Timer:Integer=0{$j-};
{$j+}Skill5Timer:Integer=0{$j-};
{$j+}Skill6Timer:Integer=0{$j-};
var
SkillID1,SkillID2,SkillID3,SkillID4,SkillID5,SkillID6:Integer;
begin
if hProcess=0 then
    exit;

if Form1.CheckBox11.Checked then
begin
    if Skill1Timer=0 then
    begin
        SkillID1:=GetJiNengInfo('使用技能',Trim(Form1.Edit5.Text));
        if SkillID1>=0 then
        begin
          Call.JiNeng(SkillID1);
        end;
       Skill1Timer:=GetTickCount;
    end;
     
    if SleepFun(strtoint(Trim(Form1.LabeledEdit19.Text)),Skill1Timer) then
    begin
        Skill1Timer:=0;
    end;
end;

if Form1.CheckBox12.Checked then
begin
    if Skill2Timer=0 then
    begin
        SkillID2:=GetJiNengInfo('使用技能',Trim(Form1.Edit6.Text));
        if SkillID2>=0 then
        begin
          Call.JiNeng(SkillID2);
        end;
       Skill2Timer:=GetTickCount;
    end;
    
    if SleepFun(strtoint(Trim(Form1.LabeledEdit20.Text)),Skill2Timer) then
    begin
        Skill2Timer:=0;
    end;
end;

if Form1.CheckBox13.Checked then
begin
    if Skill3Timer=0 then
    begin
        SkillID3:=GetJiNengInfo('使用技能',Trim(Form1.Edit7.Text));
        if SkillID3>=0 then
        begin
          Call.JiNeng(SkillID3);
        end;
       Skill3Timer:=GetTickCount;
    end;
    
    if SleepFun(strtoint(Trim(Form1.LabeledEdit21.Text)),Skill3Timer) then
    begin
       Skill3Timer:=0;
    end;
end;


if Form1.CheckBox14.Checked then
begin
    if Skill4Timer=0 then
    begin
        SkillID4:=GetJiNengInfo('使用技能',Trim(Form1.Edit8.Text));
        if SkillID4>=0 then
        begin
          Call.JiNeng(SkillID4);
        end;
       Skill4Timer:=GetTickCount;
    end;
    
    if SleepFun(strtoint(Trim(Form1.LabeledEdit22.Text)),Skill4Timer) then
    begin
       Skill4Timer:=0;
    end;
end;

if Form1.CheckBox15.Checked then
begin
    if Skill5Timer=0 then
    begin
        SkillID5:=GetJiNengInfo('使用技能',Trim(Form1.Edit9.Text));
        if SkillID5>=0 then
        begin
          Call.JiNeng(SkillID5);
        end;
       Skill5Timer:=GetTickCount;
    end;
    
    if SleepFun(strtoint(Trim(Form1.LabeledEdit23.Text)),Skill5Timer) then
    begin
        Skill5Timer:=0;
    end;
end;

if Form1.CheckBox16.Checked then
begin
    if Skill6Timer=0 then
    begin
        SkillID6:=GetJiNengInfo('使用技能',Trim(Form1.Edit10.Text));
        if SkillID6>=0 then
        begin
          Call.JiNeng(SkillID6);
        end;
       Skill6Timer:=GetTickCount;
    end;
    if SleepFun(strtoint(Trim(Form1.LabeledEdit24.Text)),Skill6Timer) then
    begin
       Skill6Timer:=0;
    end;
end;
end;

Function GetBeiBaoInfo(DoType:String;FindWuName:string):Integer;
var
i:Integer;
WuPinBase:DWORD;
CurWuAddr,WuAddr:Integer;
CurWuID:Word;
XueNum,LanNum:Integer;
NaiJiuDu:Byte;
WuPinType:Integer;
BeiBaoMin,BeiBaoMax:Integer;
ZhuangBeiBadNum:Integer;  //装备损坏数目
CurWuName:array[0..14]of char;
TempWuName:string;
WuPinNum:Byte;
WuPinYanSe:Byte;
BuyNum:Integer;
begin
Result:=-1;
ZhuangBeiBadNum:=0;
XueNum:=0;LanNum:=0;
if DoType='刷新' then
begin
  if Pos('出售物品',FindWuName)<>0 then
      Form1.ListBox3.Clear;
  if Pos('清理背包',FindWuName)<>0 then
      Form1.ListBox4.Clear;
end;

if DoType='选择药品' then
begin
  Form1.ComboBox1.Items.Clear;
  Form1.ComboBox2.Items.Clear;
  Form1.ComboBox1.Items.Add('调息');
  Form1.ComboBox2.Items.Add('调息');
  Form1.ComboBox3.Items.Clear;
  Form1.ComboBox4.Items.Clear;
end;

if DoType='测试' then
  Form1.ListBox5.Clear;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -