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

Не работает скрипт на последней версии Stealth

тут можно задать вопрос по скриптингу
Post Reply
novikov03
Posts: 3
Joined: 08.06.2018 19:18

Не работает скрипт на последней версии Stealth

Post by novikov03 »

На последней версии не копает вокруг себя, копает по одной точке. На 4 версии все работает исправно.
В чем может быть проблема?


program Mining;
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.2
{$Include 'all.inc'}

const
M_nothing1 = '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_nothing7 = 'You put the Iron Ore in your pack';
M_nothing8 = 'You put the Copper Ore in your pack';
M_nothing9 = 'You put the Dull Copper Ore in your pack';
M_nothing10 = 'You put the Iron Ore in your pack';
M_nothing11 = 'You put the Old Copper Ore in your pack';

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
Ore5 = $19B9; // камни
Ore6 = $19B9; // камни
Ore7 = $19B9; // камни
Ore8 = $19B9; // камни
Ore9 = $19B9; // камни
Ore10 = $19B9; // камни
Ore11 = $19B9; // камни




Sunduk_ore = $4035E835; // Sunduk of ore
Sunduk_ore2 = $4036B4E8; // сундук для камней
runebook = $4025B0E2; // Runebook
r_cave = 33; // Number of rune to cave 9 (no change)
r_home = 21; // Number of rune to home 1 (no change)
MyMaxWeight = 50; // Max Weight
CaveLimit = 1282; // Cave limit
RuneHome=$403DF39E; // Rune to fast recall
Recall=$1F4C; // Type Recall scrolls
pk_time=300; // Seconds of wait to pk go
kill_elem=0; // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела)
Itype=$0F0E; // Тип инвизки
vxcol=$0000; // Цвет скрола вортекса
vacol=$0000; // Цвет скрола мас диспела
xTileSunduk=4091; // координаты сандука
yTileSunduk=346;
xTileCave=4035; //Координаты точки копания
yTileCave=316;



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

flag1 : Boolean;

procedure CheckStels;
begin
SetWarMode(false);
if Hidden then exit;
if WarMode = true then SetWarMode(false);
repeat
SetWarMode(false);
UseSkill('Stealth');
wait(3000);
until Hidden or (not Connected);
end;
procedure GoToHome; // координаты пути к дому
begin
ClearBadLocationList;
ClearBadObjectList;
NewMoveXY(4046, 314, true, 0, true);
NewMoveXY(4055, 318, true, 0, true);
NewMoveXY(4058, 329, true, 0, true);
NewMoveXY(4086, 353, true, 0, true);
NewMoveXY(4088, 353, true, 0, true);
OpenDoor;
NewMoveXY(4092,353,false,0,false);
NewMoveXY(4093,350,false,0,false); // идём к двери дома. следует заменить $$$$ соответсвующими координатами
NewMoveXY(4093,348,false,0,false); // входим в дом. следует заменить $$$$ соответсвующими координатами
NewMoveXY(xTileSunduk, yTileSunduk, true, 0, true);
end;
procedure GoToCave; // координаты пути в шахту
begin
ClearBadLocationList;
ClearBadObjectList;
NewMoveXY(4093,348,false,0,false);
NewMoveXY(4092,353,false,0,false);
NewMoveXY(4086, 353, true, 0, true);
OpenDoor;
NewMoveXY(4058, 329, true, 0, true);
NewMoveXY(4055, 318, true, 0, true);
NewMoveXY(4046, 314, true, 0, true);
CheckStels;
NewMoveXY(xTileCave, yTileCave, true, 0, false);
end;
procedure GoToRess; // координаты пути к кресту
begin
ClearBadLocationList;
ClearBadObjectList;
NewMoveXY(4046, 314, true, 0, true);
NewMoveXY(4058, 329, true, 0, true);
NewMoveXY(4083, 331, true, 0, true);
NewMoveXY(4209, 464, true, 0, true);
NewMoveXY(4231, 518, true, 0, true);
NewMoveXY(4221, 519, true, 0, true);
NewMoveXY(4218, 522, true, 0, true);
NewMoveXY(4218, 529, true, 0, true);
NewMoveXY(4214, 536, true, 0, true);
NewMoveXY(4216, 548, true, 0, true);
NewMoveXY(4209, 562, true, 0, true);
end;

procedure GoToRessHome; // координаты пути к дому от креста
begin
ClearBadLocationList;
ClearBadObjectList;
NewMoveXY(4216, 548, true, 0, true);
NewMoveXY(4214, 536, true, 0, true);
NewMoveXY(4218, 529, true, 0, true);
NewMoveXY(4218, 522, true, 0, true);
NewMoveXY(4221, 519, true, 0, true);
NewMoveXY(4231, 518, true, 0, true);
NewMoveXY(4209, 464, true, 0, true);
NewMoveXY(4084, 353, true, 0, true);
NewMoveXY(4088, 353, true, 0, true);
OpenDoor;
NewMoveXY(4092,353,false,0,false);
NewMoveXY(4093,350,false,0,false);
NewMoveXY(4093,348,false,0,false);
NewMoveXY(xTileSunduk, yTileSunduk, true, 0, true);
NewMoveXY(xTileSunduk, yTileSunduk, true, 0, true);
CheckStels;
end;


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($4047892C); //ид суднука с кирками
wait(3000)
FindTypeEx($0E86,$FFFF,$4047892C,True); //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
FindTypeEx($0E85,$FFFF,$4047892C,True); //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
GoToCave;
end;


procedure Resurrector;
BEGIN
if dead then
begin
GoToRess;
FindDistance:=10;
moveXY(getX($400080F4),getY($400080F4),false,1,false);
wait(5000)
repeat
useObject($400080F4);
wait(8000);
until HP>0;
GoToRessHome;
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('Нету кирки :((');
GoToHome;
Take;
exit;
end;
if not equip(RhandLayer,tmpser) then
begin
wait(1000);
if not equip(RhandLayer,tmpser) then
begin
Result := false;
addtosystemjournal('Нету кирки :((');
GoToCave;
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(3000);
DropHere(FindType($0E7F,backpack));
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, mn7, mn8, mn9, mn10, mn11, 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);
mn7 := InJournalBetweenTimes(M_nothing7, ctime, Now);
mn8 := InJournalBetweenTimes(M_nothing8, ctime, Now);
mn9 := InJournalBetweenTimes(M_nothing9, ctime, Now);
mn10 := InJournalBetweenTimes(M_nothing10, ctime, Now);
mn11 := InJournalBetweenTimes(M_nothing11, 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 (mn7<>-1) or (mn8<>-1) or (mn9<>-1) or (mn10<>-1) or (mn11<>-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 (GetX(self)<>xTileCave) then
begin
NewMoveXY(xTileCave, yTileCave, true, 0, false);
CheckHide;
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(500);
until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mn7<>-1) or (mn8<>-1) or (mn9<>-1) or (mn10<>-1) or (mn10<>-11);
end;
end;
end;

function DischargeSunduk : Boolean;
// Разгружаем пак чара в сундук. Возвращаем:
// 1 - все ок, пак разгружен.
// 0 - не получилось.
var tmpcnt : Integer;
tmpid, tmpstack2, tmpstack : Cardinal;
tmpconnect : TDateTime;
begin
addtosystemjournal('Пришли на разгрузку');
Result := true;
waitconnection(3000);
tmpconnect := ConnectedTime;
CheckDead;
if Dead then
begin
Result := false;
exit;
end;
if (GetX(self)<>xTileSunduk) then
begin
NewMoveXY(xTileSunduk, yTileSunduk, true, 0, true);
CheckHide;
end;

UseObject(Sunduk_ore);
wait(300);
UseObject(Sunduk_ore2);
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 tmpid := Findtype(Ore5,backpack);
if tmpid = 0 then tmpid := Findtype(Ore6,backpack);
if tmpid = 0 then tmpid := Findtype(Ore7,backpack);
if tmpid = 0 then tmpid := Findtype(Ore8,backpack);
if tmpid = 0 then tmpid := Findtype(Ore9,backpack);
if tmpid = 0 then tmpid := Findtype(Ore10,backpack);
if tmpid = 0 then tmpid := Findtype(Ore11,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 tmpstack2 = 0 then tmpstack := FindtypeEx(Ore6,GetColor(tmpid),Sunduk_ore,False);
if tmpstack2 = 0 then tmpstack := FindtypeEx(Ore6,GetColor(tmpid),Sunduk_ore,False);
if tmpstack2 = 0 then tmpstack := FindtypeEx(Ore7,GetColor(tmpid),Sunduk_ore,False);
if tmpstack2 = 0 then tmpstack := FindtypeEx(Ore8,GetColor(tmpid),Sunduk_ore,False);
if tmpstack2 = 0 then tmpstack := FindtypeEx(Ore9,GetColor(tmpid),Sunduk_ore,False);
if tmpstack2 = 0 then tmpstack := FindtypeEx(Ore10,GetColor(tmpid),Sunduk_ore,False);
if tmpstack2 = 0 then tmpstack := FindtypeEx(Ore11,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;

begin
FindType($0F11,Backpack);
MoveItem(FindItem,0,Sunduk_ore2,0,0,0);
wait(350);
end;
begin
FindType($0F16,Backpack);
MoveItem(FindItem,0,Sunduk_ore2,0,0,0);
wait(350);
end;
begin
FindType($0F18,Backpack);
MoveItem(FindItem,0,Sunduk_ore2,0,0,0);
wait(350);
end;
begin
FindType($0F15,Backpack);
MoveItem(FindItem,0,Sunduk_ore2,0,0,0);
wait(350);
end;
begin
FindType($0F10,Backpack);
MoveItem(FindItem,0,Sunduk_ore2,0,0,0);
wait(350);
end;
begin
FindType($0F0F,Backpack);
MoveItem(FindItem,0,Sunduk_ore2,0,0,0);
wait(350);
end;
begin
FindType($0F26,Backpack);
MoveItem(FindItem,0,Sunduk_ore2,0,0,0);
wait(350);
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
GoToHome;
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);

GoToCave;
end;
end;


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

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


until minret = 2;
addtosystemjournal('Пора на разгрузку');
CheckDead;
GoToHome;
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.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Не работает скрипт на последней версии Stealth

Post by Vizit0r »

пиши в скайп\дискорд мне, и готовь чара для теста.
Буду смотреть, что там и как.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
loveslip
Posts: 3
Joined: 01.11.2019 20:31

Re: Не работает скрипт на последней версии Stealth

Post by loveslip »

Vizit0r wrote:пиши в скайп\дискорд мне, и готовь чара для теста.
Буду смотреть, что там и как.
Вечер добрый земляк)
понимаю что времени прошло не мало но все же нашли решение?)
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Не работает скрипт на последней версии Stealth

Post by Vizit0r »

я так и не увидел чара для тестов.
А искать, где этот скрипт будет или не будет работать, или работать, но не так как надо (а как надо?) - вот мне больше делать нечего, ага.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply