📄 mainform.~pas
字号:
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 + -