Code: Select all
program MiningVip;
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.1
{$Include 'all.inc'}
const
M_nothing1 = 'There is no ore here to mine';
M_nothing2 = 'That is too far';
M_nothing3 = 'Try mining in rock';
M_nothing4 = 'You cannot mine so close';
M_nothing5 = 'You have no line';
M_nothing6 = 'reach';
M_fizzles1 = 'You loosen some rocks';
M_needwait = 'You decide not to mine';
M_success = 'in your pack.';
MaxLimit = 15; // максимальное кол-во физлов одной точки
Cords_x = 1251; // Кордината сундука X
Cords_y = 1251; // Кордината сундука Y
Cord_x = 1251; // Кордината копки X
Cord_y = 1251; // Кордината копки Y
Pickaxe1 = $0E85; // Типы кирок
Pickaxe2 = $0E86;
Ore1 = $19B7; // 1 Ore
Ore2 = $19BA; // 2 Ore
Ore3 = $19B8; // 3 Ore
Ore4 = $19B9; // 4 Ore
MyMaxWeight = 400; // Max Weight
CaveLimit = 1282; // Cave limit
var
minret,StartFlag : Integer;
HowManyDischarge : Integer;
ScriptStartTime : TDateTime;
flag1 : Boolean;
procedure CheckDead;
Begin
if Dead then
begin
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now));
FullDisconnect; // тут мне пишет ошибку
end
end;
procedure GoXY(x,y : integer; runflag : boolean);
// x,y - eii?aeiaou, a eioi?ua eaai
// prec - oi?iinou iiaoiaa
// runflag - aa?aou eee eaoe
// v. 1.04 (n) Edred, ne?eio ii?oe?iaai n ei?aeoa
// i?eaeiaeuiay aa?ney Yoko n ai?aaioeie AGRS e Edred.
var ld, ldc, dx, dy, mx, my,d,e,a : Integer;
begin
ld := 0; ldc := 0; d := 0; e := 2;
AddToSystemJournal('Начинаем переход');
while true do
begin
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;
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 ld = dx then begin
ldc := ldc + 1;
if ldc > 4 then begin
addtosystemjournal( 'GotoXY: Cannot reach location!' );
a := 0
repeat
Raw_Move(d,runflag);
a := a+1
until a = e
d := d + 2;
If d = 8 then d:=0 e:= e+1 ldc :=0
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;
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;
addtosystemjournal('Нету кирки :((');
exit;
end;
if not equip(RhandLayer,tmpser) then
begin
wait(1000);
if not equip(RhandLayer,tmpser) then
begin
Result := false;
addtosystemjournal('Нету кирки :((');
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, mw1, ms1 : Integer;
var ctime : TDateTime;
begin
Result := 1;
addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight));
for x := -4 to 4 do
begin
for y := -4 to 4 do
begin
r := 0;
repeat
waitconnection(5000);
if not CheckPickaxe then
begin
Result := 4;
exit;
end;
CheckHide;
if TargetPresent then CancelTarget;
if WarMode = true then SetWarMode(false);
ctime := Now;
UseObject(ObjAtLayerEx(RhandLayer,self));
WaitForTarget(1000);
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);
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 (ms1<>-1) or Dead or (k > 300);
if InJournalBetweenTimes('heavy', ctime, Now) <> -1 then
begin
Result := 6
exit;
end;
if Weight > MyMaxWeight then
begin
Result := 2;
exit;
end;
if (mf1<>-1) then
begin
r := r + 1;
if r >= 10 then break
else continue;
end;
if (mw1<>-1) then wait(3000);
until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1);
end;
end;
end;
function GetPickaxe : 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;
if Result = false then
begin
GoXY(Cords_x,Cords_y,true);
useobject(sunduk_ore);
tmpser := findtype(Pickaxe1,Sunduk_pix);
if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk_pix);
if tmpser = 0 then
begin
Result := false;
addtosystemjournal('Нету кирки в сундуке:((');
end;
grab(Finditem,1);
if not equip(RhandLayer,tmpser) then
begin
wait(1000);
if not equip(RhandLayer,tmpser) then
begin
Result := false;
addtosystemjournal('Нету кирки в сундуке:((');
exit;
end;
end;
wait(500);
checksave;
GoXY(Cord_x,Cord_y,true);
end;
end.