Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Не подходит к кресту мининг ДРВ

тут можно задать вопрос по скриптингу
Post Reply
Beerce
Posts: 1
Joined: 24.09.2013 14:44

Не подходит к кресту мининг ДРВ

Post by Beerce »

program Mining;
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.2
{$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; // максимальное кол-во физлов одной точки
Pickaxe1 = $0E86; // Типы кирок
Pickaxe2 = $0E85;
Ore1 = $19B7; // 1 Ore
Ore2 = $19BA; // 2 Ore
Ore3 = $19B8; // 3 Ore
Ore4 = $19B9; // 4 Ore
Sunduk_ore = $40446884; // Sunduk of ore
runebook = $4029C396; // Runebook
r_cave = 33; // Number of rune to cave 9 (no change)
r_home = 21; // Number of rune to home 1 (no change)
MyMaxWeight = 600; // Max Weight
CaveLimit = 4045; // Cave limit
RuneHome=$402CB6A8; // Rune to fast recall
Recall=$1F4C; // Type Recall scrolls
pk_time=420; // Seconds of wait to pk go
kill_elem=1; // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела)
Itype=$0F09; // Тип инвизки
vxcol=$FFFF; // Цвет скрола вортекса
vacol=$FFFF; // Цвет скрола мас диспела


var
minret,StartFlag : Integer;
HowManyDischarge : Integer;
ScriptStartTime : TDateTime;

flag1 : Boolean;




procedure recal_rb2(rune : integer);
var tmpr : Integer;
mx, my, k, Res : Integer;

begin

Res := 0;

AddToSystemJournal('Пытаемся рекольнуться');
tmpr := rune;
waitgump(IntToStr(tmpr));
wait(1000)
UseObject(runebook);
wait(10000)
mx := GetX(self);
my := GetY(self);
k := 0;

wait(500)
k := k + 1;


if (mx<>GetX(self)) or (my<>GetY(self)) then Res := 1;


end;

Procedure Take;
begin
UseObject($401BD54E); //ид суднука с кирками
wait(3000)
FindTypeEx($0E86,$FFFF,$401BD54E,True); //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
FindTypeEx($0E85,$FFFF,$401BD54E,True); //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
recal_rb2(r_cave)
end;

procedure Resurrector;
BEGIN
if dead then
begin
HelpRequest;//Нажать "Help"
wait(1000);
waitgump('3');//Нажать "Help i am stuck"
wait(1000);
waitgump(IntToStr(2));//Нажать на кнопку города
wait(3000)
FindDistance:=10;
moveXY(getX(self),getY(self)-2,false,1,false);
wait(5000)
repeat
useObject($4001D120);
wait(8000);
until HP>0;
recal_rb2(r_home);
wait(pk_time*1000);
Take;
end
end;


procedure CheckDead;
Begin
if Dead then
begin
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now));
Resurrector;

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('Нету кирки :((');
recal_rb2(r_home);
Take;
exit;
end;
if not equip(RhandLayer,tmpser) then
begin
wait(1000);
if not equip(RhandLayer,tmpser) then
begin
Result := false;
addtosystemjournal('Нету кирки :((');
recal_rb2(r_home);
Take;
exit;
end;
end;
wait(500);
checksave;
end;
end;

procedure CheckHide;
begin
SetWarMode(false);
checkdead;
if Hidden then exit;
if WarMode = true then SetWarMode(false);
repeat
SetWarMode(false);
UseSkill('Hiding');
wait(4500);
checksave;
checkdead;
until Hidden or (not Connected);
end;



function redcheck : Boolean;
// Ищет персонажей от серого к красному в радиусе 10-ти клеток. Возвращаем:
// True - найдетны такие персонажи.
// False - персонажей не найдено все спокойно.
var n : integer; l : TStringList;
begin
l := TStringList.Create();
Result := False;
FindType($190,ground);
GetFindedList(l);
if (l.count > 0) then
begin
for n:= 0 to (l.count-1) do
if (GetNotoriety(StrToInt('$'+l.strings[n]))>2) then Result := true;
end;
l.free;
l := TStringList.Create();
FindType($191,ground);
GetFindedList(l);
if (l.count > 0) then
begin
for n:= 0 to (l.count-1) do
if (GetNotoriety(StrToInt('$'+l.strings[n]))>2) then Result := true;
end;
l.free;
end;


function MiningAround : Integer ;
// копаем вокруг чара
// параметр - максимальный вес.
// возвращаем:
// 1 - вокруг чара все вскопано успешно
// 2 - превышен максимальный вес
// 3 - чар под атакой
// 4 - нет кирки
// 5 - PK
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;
Checkdead;
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 redcheck = true then
begin
Result := 5
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 DischargeSunduk : Boolean;
// Разгружаем пак чара в сундук. Возвращаем:
// 1 - все ок, пак разгружен.
// 0 - не получилось.
var tmpcnt : Integer;
tmpid, tmpstack : Cardinal;
tmpconnect : TDateTime;
begin
addtosystemjournal('Пришли на разгрузку');
Result := true;
waitconnection(3000);
tmpconnect := ConnectedTime;
CheckDead;
if Dead then
begin
Result := false;
exit;
end;
UseObject(Sunduk_ore);
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;
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить руду!');
Result := false;
exit;
end;
repeat
tmpstack := FindtypeEx(Ore1,GetColor(tmpid),Sunduk_ore,False);
if tmpstack = 0 then tmpstack := FindtypeEx(Ore2,GetColor(tmpid),Sunduk_ore,False);
if tmpstack = 0 then tmpstack := FindtypeEx(Ore3,GetColor(tmpid),Sunduk_ore,False);
if tmpstack = 0 then tmpstack := FindtypeEx(Ore4,GetColor(tmpid),Sunduk_ore,False);
if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack);
until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000);
// Если не найден в сундуке - тогда просто в контейнер
if tmpstack = 0 then tmpstack := Sunduk_ore;
waitconnection(3000);
MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
HowManyDischarge := HowManyDischarge + 1;
IgnoreReset;
FindType(Recall,Backpack);
if (FindCount = 0) or (Count(Recall) < 5) then
begin
AddToSystemJournal('Добираем скролы');
FindType(Recall,Sunduk_ore);
if FindCount > 0 then
begin
MoveItem(FindItem,10,Backpack,0,0,0);
end;
end;
AddToSystemJournal('Добираем реагенты');
FindType($0F86,Backpack);
if (FindCount = 0) or (Count($0F86) < 10) then
begin
FindType($0F86,Sunduk_ore);
if FindCount > 0 then
begin
MoveItem(FindItem,10,Backpack,0,0,0);
end;
end;
FindType($0F7A,Backpack);
if (FindCount = 0) or (Count($0F7A) < 10) then
begin
FindType($0F7A,Sunduk_ore);
if FindCount > 0 then
begin
MoveItem(FindItem,10,Backpack,0,0,0);
end;
end;
FindType($0F7B,Backpack);
if (FindCount = 0) or (Count($0F7B) < 10) then
begin
FindType($0F7B,Sunduk_ore);
if FindCount > 0 then
begin
MoveItem(FindItem,10,Backpack,0,0,0);
end;
end;
FindType($0F7B,Backpack);
if (FindCount = 0) or (Count($0F7B) < 10) then
begin
FindType($0F7B,Sunduk_ore);
if FindCount > 0 then
begin
MoveItem(FindItem,10,Backpack,0,0,0);
end;
end;

FindType(Itype,Backpack);
if (FindCount = 0) or (Count(Itype) <= 2) then
begin
AddToSystemJournal('Добираем инвизки');
FindType(Itype,Sunduk_ore);
if FindCount > 0 then
begin
MoveItem(FindItem,5,Backpack,0,0,0);
end;
end;


with TStringList.Create do
try
Add('Разгрузка руды: ' + DateTimeToStr(Now));
SaveToFile('mining_' + GetName(self) + '.log');
finally
free;
end;
addtosystemjournal('Разгрузка закончена');
end;

procedure recal_rb(rune : integer);
var tmpr : Integer;
mx, my, k, Res : Integer;

begin

Res := 0;
CheckDead;
AddToSystemJournal('Пытаемся рекольнуться');
tmpr := rune;
waitgump(IntToStr(tmpr));
wait(1000)
UseObject(runebook);
wait(10000)
mx := GetX(self);
my := GetY(self);
k := 0;

wait(500)
k := k + 1;


if (mx<>GetX(self)) or (my<>GetY(self)) then Res := 1;


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
recal_rb(r_home);
useobject(sunduk_ore);
tmpser := findtype(Pickaxe1,Sunduk_ore);
if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk_ore);
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);

recal_rb(r_cave);
end;
end;


Begin
ScriptStartTime := Now;
HowManyDischarge := 0;
StartFlag := 1;
repeat
// стартуем от сундука
CheckDead;

addtosystemjournal('Вылетаю в шахту');
recal_rb(r_cave);
repeat
CheckDead;
if Dead then break;
GetPickaxe;
minret := MiningAround;
CheckDead;
if Dead then break;
if minret = 4 then GetPickaxe;


until minret = 2;
addtosystemjournal('Пора на разгрузку');
CheckDead;
recal_rb(r_home);
if not Dead then
begin
repeat
WaitConnection(5000);
CheckDead;
if Dead then break;
flag1 := DischargeSunduk;
wait(100);
until flag1 = true;

end;
CheckDead;
until false;
End.





























Помогите пожалуиста пишет System: Your ghostly hand passes through the object.
Post Reply