http://stealth.od.ua/forum/viewtopic.php?t=1000
Все отлично работает. Копал он у меня в 5-и точках. Решил увеличить количество точек до 10-и. Увеличил, но теперь выдает ошибку:
Code: Select all
Out Of Range at 28.1132
Code: Select all
Out Of Range at 28.1132
Code: Select all
if self = Boris then
begin
MyMaxWeight := 620;
StartMinPoint[1] := 1896;
StartMinPoint[2] := 272;
StartMinPoint[3] := 1901;
StartMinPoint[4] := 271;
StartMinPoint[5] := 1906;
StartMinPoint[6] := 271;
StartMinPoint[7] := 1912;
StartMinPoint[8] := 273;
StartMinPoint[9] := 1916;
StartMinPoint[10] := 282;
StartMinPoint[11] := 1921;
StartMinPoint[12] := 276;
StartMinPoint[13] := 1919;
StartMinPoint[14] := 272;
StartMinPoint[15] := 1922;
StartMinPoint[16] := 267;
StartMinPoint[17] := 1923;
StartMinPoint[18] := 262;
StartMinPoint[19] := 1927;
StartMinPoint[20] := 262;
CaveLimit := 1930;
exit;
end;
Code: Select all
Case StartFlag of
1 : begin
GotoXY( StartMinPoint[1],StartMinPoint[2],0,true);
StartFlag := 2;
end;
2 : begin
GotoXY( StartMinPoint[3],StartMinPoint[4],0,true);
StartFlag := 3;
end;
3 : begin
GotoXY( StartMinPoint[5],StartMinPoint[6],0,true);
StartFlag := 4;
end;
4 : begin
GotoXY( StartMinPoint[7],StartMinPoint[8],0,true);
StartFlag := 5;
end;
5 : begin
GotoXY( StartMinPoint[9],StartMinPoint[10],0,true);
StartFlag := 6;
end;
6 : begin
GotoXY( StartMinPoint[11],StartMinPoint[12],0,true);
StartFlag := 7;
end;
7 : begin
GotoXY( StartMinPoint[13],StartMinPoint[14],0,true);
StartFlag := 8;
end;
8 : begin
GotoXY( StartMinPoint[15],StartMinPoint[16],0,true);
StartFlag := 9;
end;
9 : begin
GotoXY( StartMinPoint[17],StartMinPoint[18],0,true);
StartFlag := 10;
end;
10 : begin
GotoXY( StartMinPoint[19],StartMinPoint[20],0,true);
StartFlag := 1;
end;
end;
Code: Select all
program MineBot;
// v.2.08 (c) Edred
{$Include 'all.inc'}
const
r1 = 10; r2 = 12; r3 = 8;
rmax = 12; // максимальный
M_nothing1 = 'There is nothing here';
M_nothing2 = 'That is too far';
M_nothing3 = 'Try mining elsewhere.';
M_nothing4 = 'You cannot mine so close';
M_nothing5 = 'You have no line of sight to that location';
M_nothing6 = 'reach';
M_fizzles1 = 'You loosen some rocks';
M_fizzles2 = 'не смогли выкопать ничего';
M_needwait = 'You decide not to mine';
M_success = 'in your pack.';
MaxLimit = 10; // максимальное кол-во физлов одной точки
Pickaxe1 = $0E85; // Типы кирок
Pickaxe2 = $0E86;
AnkhID = $40009C73; // сериал креста для реса
Ore1 = $19B7; // 1 Ore
Ore2 = $19BA; // 2 Ore
Ore3 = $19B8; // 3 Ore
Ore4 = $19B9; // 4 Ore
Boris = $00B18697;
Sunduk = $405DA266;
DeadLife = 40; // Временно - если меньше здоровья - мы мертвы
// Точнее, проверить через реконнект.
type Rail = array[1..rmax] of Integer;
var
Rail_1, Rail_2, Rail_3, StartMinPoint : Rail;
minret, MyMaxWeight,StartFlag, CaveLimit : integer;
IronCnt,BronzeCnt,CopperCnt,OzoneCnt,ShadowCnt : Integer;
BlueSteelCnt,CrinitCnt,SkyCnt,SteelCnt,DarkSteelCnt : Integer;
BlackSteelCnt,MytherilCnt,SilverCnt,GoldenCnt,PlutoniumCnt,HowManyDischarge : Integer;
ResCnt : Integer;
ScriptStartTime : TDateTime;
flag1 : Boolean;
function InitConfig : Boolean;
// Настройка переменных под конкретного чара
begin
Result := true;
// Rail_1: сундук - шахта
Rail_1[1] := 1887; Rail_1[2] := 266;
Rail_1[3] := 1888; Rail_1[4] := 266;
Rail_1[5] := 1888; Rail_1[6] := 272;
Rail_1[7] := 1893; Rail_1[8] := 272;
Rail_1[9] := 1896; Rail_1[10] := 272;
// Rail_2: сундук - ГЗ
Rail_2[1] := 1887; Rail_2[2] := 266;
Rail_2[3] := 1888; Rail_2[4] := 266;
Rail_2[5] := 1888; Rail_2[6] := 272;
Rail_2[7] := 1856; Rail_2[8] := 272;
Rail_2[9] := 1847; Rail_2[10] := 281;
Rail_2[11] := 1845; Rail_2[12] := 333;
// Rail_3: ГЗ - крест
Rail_3[1] := 1845; Rail_3[2] := 333;
Rail_3[3] := 1845; Rail_3[4] := 359;
Rail_3[5] := 1834; Rail_3[6] := 359;
Rail_3[7] := 1834; Rail_3[8] := 360;
// Счетчики разгруженной руды
IronCnt := 0;
BronzeCnt := 0;
CopperCnt := 0;
OzoneCnt := 0;
ShadowCnt := 0;
BlueSteelCnt := 0;
CrinitCnt := 0;
SkyCnt := 0;
SteelCnt := 0;
DarkSteelCnt := 0;
BlackSteelCnt := 0;
MytherilCnt := 0;
SilverCnt := 0;
GoldenCnt := 0;
PlutoniumCnt := 0;
ResCnt := 0;
if self = Boris then
begin
MyMaxWeight := 620;
StartMinPoint[1] := 1896;
StartMinPoint[2] := 272;
StartMinPoint[3] := 1901;
StartMinPoint[4] := 271;
StartMinPoint[5] := 1906;
StartMinPoint[6] := 271;
StartMinPoint[7] := 1912;
StartMinPoint[8] := 273;
StartMinPoint[9] := 1916;
StartMinPoint[10] := 282;
StartMinPoint[11] := 1921;
StartMinPoint[12] := 276;
StartMinPoint[13] := 1919;
StartMinPoint[14] := 272;
StartMinPoint[15] := 1922;
StartMinPoint[16] := 267;
StartMinPoint[17] := 1923;
StartMinPoint[18] := 262;
StartMinPoint[19] := 1927;
StartMinPoint[20] := 262;
CaveLimit := 1930;
exit;
end;
// Если дошли до сюда - это плохо!
Result := false;
addtosystemjournal('Error: Не могу настроиться под чара!');
exit;
end;
procedure PrintStatistic;
// выводит в файл с именем charname.log суммарную статистику с запуска скрипта
begin
with TStringList.Create do
try
Add('Скрипт начал работу: ' + DateTimeToStr(ScriptStartTime));
Add(' Сейчас: ' + DateTimeToStr(Now));
Add(' ');
Add('Количество разгрузок: ' + inttostr(HowManyDischarge));
Add(' ');
Add('Добыто:');
Add(' Iron ' + inttostr(IronCnt));
Add(' Bronze ' + inttostr(BronzeCnt));
Add(' Copper ' + inttostr(CopperCnt));
Add(' Ozone ' + inttostr(OzoneCnt));
Add(' Shadow ' + inttostr(ShadowCnt));
Add(' Blue Steel ' + inttostr(BlueSteelCnt));
Add(' Crinit ' + inttostr(CrinitCnt));
Add(' Sky ' + inttostr(SkyCnt));
Add(' Steel ' + inttostr(SteelCnt));
Add(' Dark Steel ' + inttostr(DarkSteelCnt));
Add(' Black Steel ' + inttostr(BlackSteelCnt));
Add(' Mytheril ' + inttostr(MytherilCnt));
Add(' Silver ' + inttostr(SilverCnt));
Add(' Golden ' + inttostr(GoldenCnt));
Add(' Plutonium ' + inttostr(PlutoniumCnt));
Add(' ');
Add('Количество ресов чара: ' + inttostr(ResCnt));
SaveToFile('__' + GetName(self) + '.log');
finally
free;
end;
end;
procedure CheckDead;
begin
if Dead then exit;
if HP < 40 then
begin
SetARStatus(False);
Disconnect;
wait(5000);
Connect;
SetARStatus(True);
repeat
wait(100);
until Connected;
end;
end;
function CheckPickaxe : Boolean;
// Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку
// возвращаем true - если все ок, false - если нет кирки
// Проверка на то, что в руке у чара не кирка не производится!
var tmpser : Cardinal;
begin
Result := true;
if (ObjAtLayerEx(RhandLayer,self) = 0) then
begin
// ничего в руках нету
tmpser := findtype(Pickaxe1,backpack);
if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack);
if tmpser = 0 then
begin
Result := false;
exit;
end;
if not equip(RhandLayer,tmpser) then
begin
wait(1000);
if not equip(RhandLayer,tmpser) then
begin
Result := false;
exit;
end;
end;
wait(500);
checksave;
end;
end;
procedure CheckHide;
begin
if Hidden then exit;
if WarMode = true then SetWarMode(false);
repeat
UseSkill('Hiding');
wait(4500);
checksave;
until Hidden or (not Connected);
end;
function MiningAround : Integer ;
// копаем вокруг чара
// параметр - максимальный вес.
// возвращаем:
// 1 - вокруг чара все вскопано успешно
// 2 - превышен максимальный вес
// 3 - чар под атакой
// 4 - нет кирки
var k, r, x, y : Integer;
var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mf2, mw1, ms1 : Integer;
var ctime : TDateTime;
begin
Result := 1;
if (HP < MaxHP) or Dead then
begin
Result := 3;
exit;
end;
addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight));
for x := -2 to 2 do
begin
for y := -2 to 2 do
begin
r := 0;
repeat
waitconnection(5000);
if (HP < MaxHP) or Dead then
begin
Result := 3;
exit;
end;
if not CheckPickaxe then
begin
Result := 4;
exit;
end;
if TargetPresent then CancelTarget;
if WarMode = true then SetWarMode(false);
ctime := Now;
UseObject(ObjAtLayerEx(RhandLayer,self));
WaitForTarget(5000);
If TargetPresent then TargetToTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self));
k := 0;
repeat
wait(100);
k := k + 1;
checksave;
mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now);
mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now);
mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now);
mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now);
mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now);
mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now);
mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now);
mf2 := InJournalBetweenTimes(M_fizzles2, ctime, Now);
ms1 := InJournalBetweenTimes(M_success, ctime, Now);
until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (mf2<>-1) or (ms1<>-1) or (HP < MaxHP) or Dead or (k > 300);
if (HP < MaxHP) or Dead then
begin
Result := 3;
exit;
end;
if Weight > MyMaxWeight then
begin
Result := 2;
exit;
end;
if (mf1<>-1) or (mf2<>-1) then
begin
r := r + 1;
if r >= 10 then break
else continue;
end;
if (mw1<>-1) then wait(100);
until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1);
end;
end;
end;
procedure GotoXY(x,y,prec : integer; runflag : boolean);
// x,y - координаты, в которые идем
// prec - точность подхода
// runflag - бежать или идти
// v. 1.04 (с) Edred, скрипт портирован с инжекта
// оригинальная версия Yoko с доработкой AGRS и Edred.
var ld, ldc, dx, dy, mx, my : Integer;
begin
ld := 0; ldc := 0;
while true do
begin
CheckSave;
dx := GetX(self) - x; if dx < 0 then dx := 0 - dx;
dy := GetY(self) - y; if dy < 0 then dy := 0 - dy;
if dy > dx then dx := dy;
if dx <= prec then exit;
mx := GetX(self); my := GetY(self);
dx := mx - x; if dx < 0 then dx := 0 - dx;
dy := my - y; if dy < 0 then dy := 0 - dy;
if dy > dx then dx := dy;
if dx <= prec then exit;
if ld = dx then begin
ldc := ldc + 1;
if ldc > 100 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end;
end
else ld := dx;
waitconnection(5000);
if mx = x then begin
if my = y then exit;
// North
if my > y then begin Raw_Move(0,runflag); continue; end;
// South
Raw_Move(4,runflag); continue;
end;
if mx < x then begin
// Northeast
if my > y then begin Raw_Move(1,runflag); continue; end;
// East
if my = y then begin Raw_Move(2,runflag); continue; end;
// Southeast
Raw_Move(3,runflag); continue;
end;
// Southwest
if my < y then begin Raw_Move(5,runflag); continue; end;
// West
if my = y then begin Raw_Move(6,runflag); continue; end;
// Nortwest
Raw_Move(7,runflag); continue;
end;
end;
procedure GotoRail(TmpR : Rail; TmpRD : Integer; dir, guard : Boolean);
// TmpR - маршрут, по которому двигаться
// TmpRD - размер этого массива
// dir - направление перемещения по маршруту (true - прямое, false - обратное)
// guard - звать гвардов если бьют по дороге или нет (true - звать, false - нет)
// v.1.21 (c) Edred, основана на моих аналогичных функциях для Инжекта и Изи.
var i,k,x,y : Integer;
begin
// число элементов в массиве четное. Каждые два - это координаты.
// 1 : 1,2 2 : 3,4 3 : 5,6 n : n*2-1,n*2
// обратное направление:
// 1 : max-1,max 2 : max-3,max-2 n : max-n*2+1,max-n*2+2
k := TmpRD/2;
for i := 1 to k do
begin
if dir then
begin x := TmpR[i*2 - 1]; y := TmpR[i*2]; end
else
begin x := TmpR[TmpRD - i*2 + 1]; y := TmpR[TmpRD - i*2 + 2]; end;
if guard AND (HP < MaxHP) then
begin UOSay( 'GUARDS' ); wait(100); end;
repeat
wait(1000);
addtosystemjournal('Отладка: идем в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]');
GotoXY(x,y,0,true);
addtosystemjournal('Отладка: пришли в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]');
until (GetX(self)=x) and (GetY(self)=y);
end;
end;
procedure Medita;
// медитация до полного восстановления маны
var
tmptime : TDateTime;
k : Integer;
begin
if WarMode = true then SetWarMode(false);
waitconnection(5000);
if (Mana <= MaxMana) then
begin
tmptime := Now;
k:=0;
repeat
useskill('meditation');
wait(2000);
k := k + 1;
checksave;
until (InJournalBetweenTimes('reached full mana', tmptime, Now)<>-1) or (k = 100);
addtosystemjournal('медитация закончена');
end;
end;
procedure HealChar;
// лечение чара спирит спиком до полного здоровья
var
tmptime : TDateTime;
k : Integer;
begin
while (HP<MaxHP) do
begin
waitconnection(3000);
tmptime := Now;
k := 0
UseSkill('Spirit Speak');
repeat
wait(100);
k := k + 1;
until (InJournalBetweenTimes('You fail|You channel|You lack|You establish', tmptime, Now)<>-1) or (Mana < (MaxMana - 50)) or (k > 300);
wait(500);
if Mana < 30 then Medita;
end;
end;
function ResChar : Boolean;
// Рес чара с креста
begin
Result := true;
WaitConnection(5000);
if WarMode = true then SetWarMode(false);
UseObject(AnkhID);
wait(2000);
checksave;
if Dead then
begin
addtosystemjournal('Error: не могу реснуться!');
Result := false;
exit;
end;
ResCnt := ResCnt + 1;
//HealChar;
end;
procedure RestoreStamina;
// если стамины мало, восстанавливаем ее чару до полной
begin
if Stam < 20 then
begin
AddToSystemJournal('Необходимо восстановить стамину. Текущий уровень: ' + inttostr(Stam));
repeat
waitconnection(5000);
wait(1000);
until Stam >= MaxStam - 50;
AddToSystemJournal('Минимальная стамина восстановлена. Текущий уровень: ' + inttostr(Stam));
end;
end;
function GetPickaxe : Boolean;
// проверяем, есть ли кирка у чара в паке или на нужном слое.
// если ее нет - открываем сундук и мешок, берем кирку. Если кирки нет
// в мешке - выход.
var tmpser : Cardinal;
begin
Result := true;
waitconnection(3000);
CheckDead;
if Dead then
begin
Result := false;
exit;
end;
if (ObjAtLayerEx(RhandLayer,self) <> 0) or (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0) then exit;
// нет у чара кирки
repeat
CheckDead;
if Dead then
begin
Result := false;
exit;
end;
waitconnection(3000);
UseObject(Sunduk);
wait(1000);
checksave;
tmpser := findtype(Pickaxe1,Sunduk);
if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk);
if tmpser <> 0 then
begin
Grab(tmpser,1);
wait(1000);
checksave;
end;
until (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0);
end;
function GetOreColor(c : cardinal) : string;
// сравниваем цвет указанного итема с табличкой и возвращаем
// название этого цвета с пробелом в начале
begin
Result := ' unknown';
Case GetColor(c) of
$0000 : begin Result := ' Iron'; IronCnt := IronCnt + GetQuantity(c); end;
$0488 : begin Result := ' Bronze'; BronzeCnt := BronzeCnt + GetQuantity(c); end;
$0641 : begin Result := ' Copper'; CopperCnt := CopperCnt + GetQuantity(c); end;
$048F : begin Result := ' Ozone'; OzoneCnt := OzoneCnt + GetQuantity(c); end;
$0770 : begin Result := ' Shadow'; ShadowCnt := ShadowCnt + GetQuantity(c); end;
$1BF2 : begin Result := ' Blue Steel'; BlueSteelCnt := BlueSteelCnt + GetQuantity(c); end;
$0487 : begin Result := ' Crinit'; CrinitCnt := CrinitCnt + GetQuantity(c); end;
$0492 : begin Result := ' Sky'; SkyCnt := SkyCnt + GetQuantity(c); end;
$042C : begin Result := ' Steel'; SteelCnt := SteelCnt + GetQuantity(c); end;
$03A4 : begin Result := ' Dark Steel'; DarkSteelCnt := DarkSteelCnt + GetQuantity(c); end;
$0485 : begin Result := ' Black Steel'; BlackSteelCnt := BlackSteelCnt + GetQuantity(c); end;
$042A : begin Result := ' Mytheril'; MytherilCnt := MytherilCnt + GetQuantity(c); end;
$0482 : begin Result := ' Silver'; SilverCnt := SilverCnt + GetQuantity(c); end;
$0445 : begin Result := ' Golden'; GoldenCnt := GoldenCnt + GetQuantity(c); end;
$0498 : begin Result := ' Plutonium'; PlutoniumCnt := PlutoniumCnt + GetQuantity(c); end;
end;
end;
function DischargeSunduk : Boolean;
// Разгружаем пак чара в сундук. Возвращаем:
// 1 - все ок, пак разгружен.
// 0 - не получилось.
var tmpcnt : Integer;
tmpid, tmpstack : Cardinal;
tmpconnect : TDateTime;
begin
Result := true;
waitconnection(3000);
tmpconnect := ConnectedTime;
CheckDead;
if Dead then
begin
Result := false;
exit;
end;
UseObject(Sunduk);
wait(1000);
checksave;
// Переместим руду
tmpcnt := 0;
repeat
tmpid := Findtype(Ore1,backpack);
if tmpid = 0 then tmpid := Findtype(Ore2,backpack);
if tmpid = 0 then tmpid := Findtype(Ore3,backpack);
if tmpid = 0 then tmpid := Findtype(Ore4,backpack);
if tmpid = 0 then break;
addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + GetOreColor(tmpid) +' ore');
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить руду!');
Result := false;
exit;
end;
repeat
tmpstack := FindtypeEx(Ore1,GetColor(tmpid),Sunduk,False);
if tmpstack = 0 then tmpstack := FindtypeEx(Ore2,GetColor(tmpid),Sunduk,False);
if tmpstack = 0 then tmpstack := FindtypeEx(Ore3,GetColor(tmpid),Sunduk,False);
if tmpstack = 0 then tmpstack := FindtypeEx(Ore4,GetColor(tmpid),Sunduk,False);
if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack);
until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000);
// Если не найден в сундуке - тогда просто в контейнер
if tmpstack = 0 then tmpstack := Sunduk;
waitconnection(3000);
MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
HowManyDischarge := HowManyDischarge + 1;
PrintStatistic;
IgnoreReset;
end;
Begin
ScriptStartTime := Now;
HowManyDischarge := 0;
if not InitConfig then exit;
StartFlag := 1;
repeat
// стартуем от сундука
CheckDead;
if not Dead then
begin
HealChar;
CheckDead;
If not dead then RestoreStamina;
end;
if (GetX(self) = Rail_1[1]) and (GetY(self) = Rail_1[2]) then
begin
If not dead then if not GetPickaxe then exit;
addtosystemjournal('Скрипт начинает работу от сундука, идем в шахту');
GotoRail(Rail_1,r1,true,false);
end;
addtosystemjournal('Я в шахте. Начнем с точки ' + inttostr(StartFlag));
Case StartFlag of
1 : begin
GotoXY( StartMinPoint[1],StartMinPoint[2],0,true);
StartFlag := 2;
end;
2 : begin
GotoXY( StartMinPoint[3],StartMinPoint[4],0,true);
StartFlag := 3;
end;
3 : begin
GotoXY( StartMinPoint[5],StartMinPoint[6],0,true);
StartFlag := 4;
end;
4 : begin
GotoXY( StartMinPoint[7],StartMinPoint[8],0,true);
StartFlag := 5;
end;
5 : begin
GotoXY( StartMinPoint[9],StartMinPoint[10],0,true);
StartFlag := 6;
end;
6 : begin
GotoXY( StartMinPoint[11],StartMinPoint[12],0,true);
StartFlag := 7;
end;
7 : begin
GotoXY( StartMinPoint[13],StartMinPoint[14],0,true);
StartFlag := 8;
end;
8 : begin
GotoXY( StartMinPoint[15],StartMinPoint[16],0,true);
StartFlag := 9;
end;
9 : begin
GotoXY( StartMinPoint[17],StartMinPoint[18],0,true);
StartFlag := 10;
end;
10 : begin
GotoXY( StartMinPoint[19],StartMinPoint[20],0,true);
StartFlag := 1;
end;
end;
repeat
CheckDead;
if Dead then break;
minret := MiningAround;
CheckDead;
if Dead then break;
if minret = 1 then GotoXY(GetX(self)-3,GetY(self),0,false);
if GetX(self) < (CaveLimit + 3) then break;
until minret <> 1;
addtosystemjournal('Пора на разгрузку');
GotoRail(Rail_1,r1,false,false);
CheckDead;
if not Dead then
begin
repeat
WaitConnection(5000);
CheckDead;
if Dead then break;
addtosystemjournal('Пришли на разгрузку');
flag1 := DischargeSunduk;
wait(100);
until flag1 = true;
addtosystemjournal('Разгрузка закончена');
end;
CheckDead;
if Dead then
begin
GotoRail(Rail_2,r2,true,false);
GotoRail(Rail_3,r3,true,false);
addtosystemjournal('Надо ресаться');
repeat
WaitConnection(5000);
flag1 := ResChar;
wait(1000);
until flag1 = true;
RestoreStamina;
GotoRail(Rail_3,r3,false,true);
GotoRail(Rail_2,r2,false,false);
end;
until false;
End.
от 1 до 12.Antoska wrote:Code: Select all
const rmax = 12; // максимальный type Rail = array[1..rmax] of Integer;
Code: Select all
StartMinPoint[1] := 1896;
StartMinPoint[2] := 272;
StartMinPoint[3] := 1901;
StartMinPoint[4] := 271;
StartMinPoint[5] := 1906;
StartMinPoint[6] := 271;
StartMinPoint[7] := 1912;
StartMinPoint[8] := 273;
StartMinPoint[9] := 1916;
StartMinPoint[10] := 282;
StartMinPoint[11] := 1921;
StartMinPoint[12] := 276;
StartMinPoint[13] := 1919;
StartMinPoint[14] := 272;
StartMinPoint[15] := 1922;
StartMinPoint[16] := 267;
StartMinPoint[17] := 1923;
StartMinPoint[18] := 262;
StartMinPoint[19] := 1927;
StartMinPoint[20] := 262;
Code: Select all
Out Of Range at 28.1132