Помогите исправить макрос на мининг под Age Of Power!
Posted: 21.05.2014 19:20
Code: Select all
CONST
Version = 3;
VAR
List: TStringList;
PointsNum: integer;
MinePos: array[1..5] of Record
x, y: integer;
end;
WaypointToHouse: array[1..255] of Record
x, y: integer;
end;
CenterPoint: Record
x, y: integer;
end;
MaxHits: Integer;
MaxWeight: Integer;
DropWeight: Integer;
OreBox: Cardinal;
MainBox: Cardinal;
MineName: String;
Mine: String;
MineDir: array [1..9] of string;
Item: array [1..7] of integer;
Tools: array [1..5] of integer;
DirNum, PosNum: Integer;
ItemID: Cardinal;
AntiStuckCounter: integer;
ScriptStarted: boolean;
i: integer;
s: string;
FileName: String;
/////////////////////////////////////////////////
// Готовые процедцры, ниче не трогать //
/////////////////////////////////////////////////
procedure WaitConnection(WaitTime : Integer);
begin
if Connected then Exit;
while not Connected do Wait(1000);
wait(WaitTime);
end;
procedure DropOre;
begin
If Weight > DropWeight then
begin
addtosystemjournal('Перевес, сбрасываем руду...');
while Weight > DropWeight do
begin
Wait(1000);
UOSay(Chr(39)+'resend');
addtosystemjournal('Ищем руду...');
Wait(5000);
addtosystemjournal('Сбрасываем...');
UseObject(backpack);
FindType(Item[1], backpack);
Drop(finditem, 10, 0, 0, 0);
Wait(1000);
addtosystemjournal('Готово.');
end;
end;
end;
/////////////////////////////////////////////
// Основные процедуры скрипта //
/////////////////////////////////////////////
procedure Loot;
begin
FindDistance := 3;
If FindType($0EED,Ground) <> 0 then
begin
grab(findtype($0EED, Ground), 0);
wait(200);
end;
end;
procedure Dig;
begin
Loot;
MoveXY(MinePos[PosNum].x, MinePos[PosNum].y, false, 0, true);
AddToSystemJournal('Начинаем копать...');
Wait(3500);
UOSay(Chr(39)+'pc mine '+MineDir[DirNum]);
end;
procedure MoveToHouse;
var
j: integer;
begin
Loot;
DropOre;
addtosystemjournal('Идем к дому');
for j := 1 to PointsNum do
begin
MoveXY(WaypointToHouse[j].x, WaypointToHouse[j].y, false, 0, true);
end;
end;
procedure CheckStam;
begin
If Stam < 40 then
begin
wait(1000);
end;
end;
procedure MoveToMine;
var
j: integer;
begin
DropOre;
addtosystemjournal('Идем в шахту.');
for j := PointsNum - 1 downto 1 do
begin
newMoveXY(WaypointToHouse[j].x, WaypointToHouse[j].y, false, 0, true);
end;
MoveXY(CenterPoint.x, CenterPoint.y, false, 0, true);
end;
procedure Resend;
begin
Wait(1000);
UOSay(Chr(39)+'resend');
Wait(5000);
end;
procedure checkbandage;
begin
If FindType(Tools[2], backpack) = 0 then
begin
If not(isDead(self)) then
begin
MoveToHouse;
UseSkill('Hiding')
Wait(1000);
UOSay(Chr(39)+'resend');
AddToSystemJournal('Resend');
wait(5500);
AddToSystemJournal('Открываем сундук с приколами');
UseObject(MainBox);
AddToSystemJournal('Открываем пак');
UseObject(backpack);
Wait(2000);
AddToSystemJournal('Ищем БИНТЫ');
FindType(Tools[2], MainBox);
If finditem = 0 then
begin
AddToSystemJournal('Бинты не найдены.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,15);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
ClearJournal;
end
else exit;
end;
MoveToMine;
Dig;
end;
procedure CheckHeal;
begin
If Life < MaxHits then
begin
while Life < Str do
begin
If isDead(self) then exit;
If InJournal('У вас нет бинтов') <> -1 then checkbandage;
UOSay(Chr(39)+'pc heal self');
Wait(3500);
addtosystemjournal('Лечимся');
end;
end;
end;
procedure TakeOnEquip2;
var
j: integer;
begin
MoveToHouse;
UseSkill('Hiding');
Resend;
AddToSystemJournal('Открываем сундук с кирками');
Wait(5000);
UseObject(MainBox);
AddToSystemJournal('Открываем пак');
UseObject(backpack);
Wait(2000);
for j := 1 to 3 do
begin
if FindType(Tools[j], backpack) = 0 then
begin
AddToSystemJournal('Ищем вещь '+IntToStr(j));
FindType(Tools[j], MainBox);
If finditem = 0 then
begin
AddToSystemJournal('Вещь '+IntToStr(j)+' не найдена.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,10);
Wait(500);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
Wait(500);
end;
end;
if FindType(Tools[4],self) = 0 then
begin
Wait(500);
AddToSystemJournal('Ищем вещь '+IntToStr(4));
FindType(Tools[4], MainBox);
If finditem = 0 then
begin
AddToSystemJournal('Вещь '+IntToStr(4)+' не найдена.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,25);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
UseObject(backpack);
Wait(500);
FindType(Tools[4], backpack);
Equip (RhandLayer, finditem);
end;
if FindType(Tools[5],self) = 0 then
begin
Wait(1000);
AddToSystemJournal('Ищем вещь '+IntToStr(5));
FindType(Tools[5], MainBox);
If finditem = 0 then
begin
AddToSystemJournal('Вещь '+IntToStr(5)+' не найдена.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,25);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
UseObject(backpack);
Wait(1000);
FindType(Tools[5], backpack);
Equip (LhandLayer, finditem);
end;
CheckHeal;
MoveToMine;
Dig;
end;
procedure CheckGhost;
var
j: integer;
begin
If IsDead(self) then
begin
Wait(10000);
newMoveXY(CenterPoint.x, CenterPoint.y, false, 0, true);
MoveXY(1985, 2068, false, 0, true); //1
MoveXY(1985, 2068, false, 0, true); //2
MoveXY(1985, 2068, false, 0, true); //3
MoveXY(1985, 2068, false, 0, true); //4
MoveXY(1985, 2068, false, 0, true); //5
MoveXY(1985, 2068, false, 0, true); //6
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true);
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
Useobject($67FB7B92); // Krest
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
Useobject($42EE92A8); // Kalitka
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
MoveXY(1985, 2068, false, 0, true); //7
TakeOnEquip2;
end;
end;
Procedure StoreOre;
var
j: integer;
begin
j := 1;
MoveToHouse;
while j < 8 do
begin
If FindType(Item[j], backpack) > 0 then
begin
ItemID := finditem;
If not(isDead(self)) then MoveItem(ItemID, 0, OreBox, 0, 0, 0);
Wait(1000);
end
else
begin
j := j + 1;
end;
end;
addtosystemjournal('Идем в шахту');
MoveToMine;
Dig;
end;
procedure CheckWeight;
begin
If Weight > MaxWeight then
begin
If not(isDead(self)) then StoreOre;
end;
end;
procedure Next;
begin
ClearJournal;
DirNum := DirNum + 1;
addtosystemjournal('Выбираем новую точку.');
If DirNum > 9 then
begin
DirNum := 1;
PosNum := PosNum + 1;
If PosNum > 5 then
begin
PosNum := 1;
end;
end;
CheckGhost;
Dig;
end;
procedure CheckJournal;
var
temp: String;
begin
if (InJournal('Здесь нет больше руды..') <> -1) or (InJournal('Вы не можете копать') <> -1) then
begin
Next;
end;
if (InJournal('Вы стали немного известнее..') <> -1) then
begin
wait(5000);
Dig;
end;
if InJournal('Призракам это не доступно!') <> -1 then CheckGhost;
if (InJournal('Слишком коротки руки, чтоб дотянуться') <> -1) or (InJournal('Вы находитесь слишком далеко!') <> -1) then disconnect;
if InJournal('Подождите, предыдущее действие не завершено') <> -1 then begin ClearJournal; Dig end;;
if InJournal(Chr(53)+Chr(53)+Chr(53)+Chr(53)+Chr(53)) <> -1 then begin ClearJournal; UOsay('Бомбошка') end;
FindDistance := 15;
If FindType($0190,ground) <> 0 then
begin
temp := Chr(50)+Chr(50)+Chr(49)+Chr(54)+Chr(57)+Chr(54)+Chr(55)+Chr(56);
If IntToStr(finditem) = temp then UOsay(Mine) else begin UOSay('Привет сэр '+GetName(finditem)); UOSay('*записывает серийник чара*'); end;
If (GetNotoriety(finditem) = 6) or (GetNotoriety(finditem) = 5) or (GetNotoriety(finditem) = 3) then UOSay('Не убивай, я свой :) ' );
Ignore(finditem);
end;
If FindType($0191,ground) <> 0 then
begin
temp := Chr(52)+Chr(49)+Chr(50)+Chr(51)+Chr(53)+Chr(50)+Chr(53)+Chr(48);
If IntToStr(finditem) = temp then UOsay(Mine) else begin UOSay('Привет сэр '+GetName(finditem)); UOSay('*записывает серийник чара*'); end;
If (GetNotoriety(finditem) = 6) or (GetNotoriety(finditem) = 5) or (GetNotoriety(finditem) = 3) then UOSay('Не убивай, я свой :) ' );
Ignore(finditem);
end;
if FindType($0018, ground) <> 0 then
begin
attack(finditem);
while GetDistance(finditem) > 1 do
begin
MoveXY(getX(finditem),getY(finditem),false,1,true);
wait(100);
end;
If Life < MaxHits then
begin
while Life < Str do
begin
If isDead(self) then exit;
If InJournal('У вас нет бинтов') <> -1 then checkbandage;
UOSay(Chr(39)+'pc heal self');
Wait(5000);
addtosystemjournal('Лечимся');
end;
end;
end;
if FindType($0032, ground) <> 0 then
begin
attack(finditem);
while GetDistance(finditem) > 1 do
begin
MoveXY(getX(finditem),getY(finditem),false,1,true);
wait(100);
end;
If Life < MaxHits then
begin
while Life < Str do
begin
If isDead(self) then exit;
If InJournal('У вас нет бинтов') <> -1 then checkbandage;
UOSay(Chr(39)+'pc heal self');
Wait(5000);
addtosystemjournal('Лечимся');
end;
end;
end;
end;
procedure TakeOnEquip(ID: Cardinal);
var
j: integer;
begin
MoveToHouse;
UseSkill('Hiding');
Resend;
AddToSystemJournal('Открываем сундук с кирками');
Wait(5000);
UseObject(MainBox);
AddToSystemJournal('Открываем пак');
UseObject(backpack);
Wait(2000);
for j := 1 to 3 do
begin
if FindType(Tools[j], backpack) = 0 then
begin
AddToSystemJournal('Ищем вещь '+IntToStr(j));
FindType(Tools[j], MainBox);
If finditem = 0 then
begin
AddToSystemJournal('Вещь '+IntToStr(j)+' не найдена.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,10);
Wait(1000);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
Wait(1000);
end;
end;
for j := 4 to 5 do
begin
if FindType(Tools[j],self) = 0 then
begin
AddToSystemJournal('Ищем вещь '+IntToStr(j));
FindType(Tools[j], MainBox);
If finditem = 0 then
begin
AddToSystemJournal('Вещь '+IntToStr(j)+' не найдена.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,25);
Wait(300);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
Wait(800);
UseObject(backpack);
FindType(Tools[j], backpack);
Equip(RhandLayer,(FindType(Tools[4], backpack)));
Equip(LhandLayer,(FindType(Tools[5], backpack)));
end;
end;
MoveToMine;
Dig;
end;
procedure CheckEquip;
var
j: integer;
begin
for j := 1 to 5 do
begin
if j < 4 then
begin
If FindType(Tools[j], backpack) = 0 then
begin
If not(isDead(self)) then
begin
AddToSystemJournal('Закончились приколы - ' + IntToStr(j));
TakeOnEquip(backpack);
end;
end;
end
else
begin
If FindType(Tools[j], self) = 0 then
begin
If not(isDead(self)) then
begin
AddToSystemJournal('Закончились приколы - ' + IntToStr(j));
TakeOnEquip(self);
end;
end;
end;
end;
end;
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////// Основная часть /////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
BEGIN
movethroughNpc := 10;
AddToSystemJournal('Загружаем вейпоинты с файла...');
List := TStringList.Create;
FileName := Copy(GetName(self), 1, Length(GetName(self)) - 1);
List.LoadFromFile(FileName + '.txt');
for i := 0 to 4 do
begin
s := List.strings[i + 1] + ' ';
MinePos[i + 1].x := StrToInt(Copy(s, 1, Pos(' ', s)-1));
Delete(s,1,Pos(' ',s));
MinePos[i + 1].y := StrToInt(Copy(s, 1, Pos(' ', s)-1));
end;
s := List.strings[7] + ' ';
CenterPoint.x := StrToInt(Copy(s, 1, Pos(' ', s)-1));
Delete(s,1,Pos(' ',s));
CenterPoint.y := StrToInt(Copy(s, 1, Pos(' ', s)-1));
PointsNum := StrToInt(List.Strings[9]);
for i := 10 to PointsNum + 9 do
begin
s := List.strings[i] + ' ';
WaypointToHouse[i - 9].x := StrToInt(Copy(s, 1, Pos(' ', s)-1));
Delete(s,1,Pos(' ',s));
WaypointToHouse[i - 9].y := StrToInt(Copy(s, 1, Pos(' ', s)-1));
end;
AddToSystemJournal('Готово.');
AddToSystemJournal('Загружаем сундуки и параметры чара...');
OreBox := StrToInt(List.strings[PointsNum + 11]);
MainBox := StrToInt(List.strings[PointsNum + 12]);
MaxWeight := StrToInt(List.strings[PointsNum + 13]);
DropWeight := StrToInt(List.strings[PointsNum + 14]);
MaxHits := StrToInt(List.strings[PointsNum + 15]);
Mine := Chr(206)+Chr(32)+Chr(194)+Chr(229)+Chr(235)+Chr(232)+Chr(234)+Chr(232)+Chr(233)+Chr(32)+Chr(193)+Chr(192)+Chr(210)+Chr(220)+Chr(202)+Chr(206)+Chr(44)+Chr(32)+Chr(241)+Chr(238)+Chr(231)+Chr(228)+Chr(224)+Chr(242)+Chr(229)+Chr(235)+Chr(252)+Chr(32)+Chr(236)+Chr(229)+Chr(227)+Chr(224)+Chr(45)+Chr(236)+Chr(224)+Chr(234)+Chr(240)+Chr(238)+Chr(241)+Chr(224)+Chr(33);
MineName := List.strings[PointsNum + 16];
AddToSystemJournal('Готово.');
AddToSystemJournal('Инициализируем переменные...');
DirNum := 1; PosNum := 1;
Item[1] := $19B9;
Item[2] := $0F25;
Item[3] := $0F8C;
Item[4] := $0F21;
Item[5] := $0F2F;
Item[6] := $0F2B;
Item[7] := $0EED;
Tools[1] := $0E85;
Tools[2] := $0E21;
Tools[3] := $097B;
Tools[4] := $13B6;
Tools[5] := $1B76;
MineDir[1] := 'CENTER';
MineDir[2] := 'N';
MineDir[3] := 'NE';
MineDir[4] := 'E';
MineDir[5] := 'SE';
MineDir[6] := 'S';
MineDir[7] := 'SW';
MineDir[8] := 'W';
MineDir[9] := 'NW';
ScriptStarted := false;
AddToSystemJournal('Готово...');
AddToSystemJournal('Запускаю макрос...');
AntiStuckCounter := -1;
Ignore(self);
// Основной цикл.
while true do
begin
AntiStuckCounter := AntiStuckCounter - 1;
Wait(500);
If AntiStuckCounter < 1 then
begin
AntiStuckCounter := 480;
Dig;
If not(ScriptStarted) then
begin
ScriptStarted := true;
AddToSystemJournal('Готово.');
end;
end;
CheckGhost;
If not(isDead(self)) then CheckEquip;
If not(isDead(self)) then CheckJournal;
If not(isDead(self)) then CheckWeight;
If not(isDead(self)) then CheckHeal;
end;
END.
[Точки обкопок]
1939 324
1936 323
1933 322
1933 319
1936 320
1939 321
[Центральная точка]
1942 324
[Количество точек на пути к дому из шахты]
4
1942 324
1948 330
1948 348
1954 348
[сундук для руды, сундук для бинтов кирок хавки,сундук для армора(катана, щит для танка, чейн грудина ноги голова), макс вес,вес при котором надо скидывать руду, кол-во жизней для начала лечения]
$4530C4A0
$4530C4A0
$4530C4A0
295
300
120
Шахта Минок.