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

проблема с скриптом на мининг

тут можно задать вопрос по скриптингу
Post Reply
aibolit
Posts: 7
Joined: 13.09.2017 6:46

проблема с скриптом на мининг

Post by aibolit »

Скрипт должен копать на заданной точке под собою, но он не доходит до точек примерно одну клетку.
Я все пробовал поменять, но зараза так и не доходит. Помогите плз. Вот процедура ходилки.
procedure Mining;
begin
MyX := GetX(self);
MyY := GetY(self);
MyZ := GetZ(self);

CaveTiles :=
[
1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349,
1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359
];

repeat
CheckHide;
If TargetPresent Then CancelTarget;
ClearJournal;
startTime := Now;


begin
StaticCell := ReadStaticsXY(myX , myY , WorldNum);
if StaticCell.StaticCount > 0 then
begin
for i := 0 to (StaticCell.StaticCount - 1) do
begin
for j := 0 to (Length(CaveTiles) - 1) do
begin
if StaticCell.Statics.Tile = CaveTiles[j] then
begin
T := StaticCell.Statics.Tile;
BREAK;
end;
end;
if T > 0 then BREAK;
end;
end;
end;
checkProblem;
idMinerTool := FindType(PickType, Backpack);
UseObject(idMinerTool);
WaitForTarget(1000);
TargetToTile(T, MyX, MyY, MyZ);
AddToSystemJournal('Копаем ' + 'x- '+ IntToStr(MyX) + ' y-'+ IntToStr(MyY) + ' z-'+ IntToStr(MyZ));
Wait(6000);
until Dead or not Connected or (InJournalBetweenTimes('no metal|far|can|harvest here',startTime,Now) <> -1) ;
Steals;
end;

и начальные заданные параметры
program mining;

var
i,j : Integer;
MyX,MyY, MyZ : Integer;
StaticCell: TStaticCell;
T: Word;
CaveTiles: array of Word;
LootType : Array of Word;
idMinerTool: Cardinal;
startTime: TDateTime;
PreCurveTime : TDateTime;
ParalyzeTime : TDateTime;

я не очень понимаю в скриптах, мне пытались помочь два соображающих человека, но так и ничего не вышло.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: проблема с скриптом на мининг

Post by Vizit0r »

это кусок чисто копания, хождения тут нет вообще.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
aibolit
Posts: 7
Joined: 13.09.2017 6:46

Re: проблема с скриптом на мининг

Post by aibolit »

Vizit0r wrote:это кусок чисто копания, хождения тут нет вообще.
ах вот оно что. А шарящие типо тут сказали проблема. Видимо не очень они шарящие ))

Можно скину тебе скрипт в личку ? или прям сюда скинуть?
aibolit
Posts: 7
Joined: 13.09.2017 6:46

Re: проблема с скриптом на мининг

Post by aibolit »

или может тут проблема
//Координаты входа в копку
MineX = 1500;
MineY = 2830;
Xmin = MineX-5;
Xmax = MineX+5;
Ymin = MineY-5;
Ymax = MineY+5;
//возле сундука X,Y
VozleX = 1503;
VozleY = 2828;
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: проблема с скриптом на мининг

Post by Vizit0r »

если там ничего секретного - можешь сюда кидать.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
aibolit
Posts: 7
Joined: 13.09.2017 6:46

Re: проблема с скриптом на мининг

Post by aibolit »

Vizit0r wrote:если там ничего секретного - можешь сюда кидать.
sunduk= $40057B7A;
OreType1= $19B9;
PickType= $0E86;
TypeSund= $0E43;
SwordType= $1441;
ShieldType= $1B76;
MusType= $0EB3;
//Координаты входа в копку
MineX = 1500;
MineY = 2830;
Xmin = MineX-5;
Xmax = MineX+5;
Ymin = MineY-5;
Ymax = MineY+5;
//возле сундука X,Y
VozleX = 1503;
VozleY = 2828;




{$Include 'all.inc'}

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;


procedure GotoOnHome;
begin
//while ((GetX(self) and GetY(self)) <> (vozleX and vozleY)) do
begin
Addtosystemjournal('Пошли к дому');
NewMoveXY(vozleX,vozleY, false, 0, True);
wait (500);
CheckHide;
if Dead then NewMoveXY(1503,2828, false, 0, True);
end;
end;

procedure DropOre;

Begin

wait(1000);
finddistance := 2;
CheckSave;
AddToSystemJournal('Все скидываем');
UseObject(sunduk);
wait(1000);

CheckSave;
while FindType($FFFF,Backpack)>0 do
begin
AddToSystemJournal('Скидываем');
MoveItem(finditem, -1, sunduk, 0,0,0);
end;
End;

procedure GrabTools; /// добираем кирки
var
Sunduk2: Cardinal;
begin
repeat
if CountEx(PickType,$0000,backpack)<2 then
AddToSystemJournal('Кирок в бакпаке ' + IntToStr(CountEx(PickType,$0000,backpack)));
UseObject(Sunduk);
FindTypeEx(TypeSund,$FFFF,Sunduk,True) ;
Sunduk2:= finditem;
wait(1000);
UseObject(Sunduk2);
AddToSystemJournal('Ящиков найдено ' + IntToStr(FindCount));
wait(700);
FindType(PickType,Sunduk2) ;
wait(700);
AddToSystemJournal('Кирок в ящике ' + IntToStr(FindCount));
MoveItem(finditem, 0, Backpack,GetX(self),GetY(self),GetZ(self));
// MoveItems(Sunduk2,PickType,$FFFF,Backpack,0,0,0,2000);
wait(700);
until (CountEx(PickType,$FFFF,backpack) > 2);
AddToSystemJournal('Переложим кирки ' + IntToStr(FindCount));
MoveItems(Sunduk,PickType,$FFFF,sunduk2,0,0,0,2000);

disarm;
wait(1000);
AddToSystemJournal('Оружия в бакпаке ' + IntToStr(CountEx(SwordType,-1 ,backpack))); // добираем оружие
if CountEx(SwordType,-1 ,backpack)=0 then
begin
UseObject(Sunduk);
FindType(SwordType,Sunduk) ;
wait(700);
AddToSystemJournal('Оружия в ящике ' + IntToStr(FindCount));
MoveItem(finditem, 0, Backpack,GetX(self),GetY(self),GetZ(self));
wait(700);
end;

AddToSystemJournal('Щитов в бакпаке ' + IntToStr(CountEx(ShieldType,-1 ,backpack))); // добираем щиты
if CountEx(ShieldType,-1 ,backpack)=0 then
begin
UseObject(Sunduk);
FindType(ShieldType,Sunduk) ;
wait(700);
AddToSystemJournal('Щитов в ящике ' + IntToStr(FindCount));
MoveItem(finditem, 0, Backpack,GetX(self),GetY(self),GetZ(self));
wait(700);
end;

if Count($0E21)=0 then
begin
FindType($0E21,Sunduk) ; // Бинты
wait(700);
AddToSystemJournal('Бинтов в ящике ' + IntToStr(FindCount));
MoveItem(finditem, 100, Backpack,GetX(self),GetY(self),GetZ(self));
end;

if Count($0F9F)=0 then
begin
FindType($0F9F,Sunduk) ; // ножницы
wait(700);
AddToSystemJournal('Ножниц в ящике ' + IntToStr(FindCount));
MoveItem(finditem, 0, Backpack,GetX(self),GetY(self),GetZ(self));
end;

if Count(MusType)=0 then
begin
FindType(MusType,Sunduk) ; // Музыкальный иснтрумент
wait(700);
AddToSystemJournal('Инструментов в ящике ' + IntToStr(FindCount));
MoveItem(finditem, 0, Backpack,GetX(self),GetY(self),GetZ(self));
wait(700);
UseObject(finditem); //сыграем разок, чтобы знал
end;


wait(1000);
UseObject(FindType($09F2,Sunduk)); // пожрем

End;

Procedure HealBand;
var sX,sY : integer;
Begin
sX:=GetX(self);
sY:=GetY(self);
WaitTargetSelf;
UseObject(FindType($0E21,Backpack));
wait(700);
UseObject(FindType(SwordType,BackPack));
wait(700);
UseObject(FindType(ShieldType,BackPack));
CancelWaitTarget;
CancelTarget;
End;

procedure Killing(target : cardinal);
var corpse,KilltryCount,KillingTryCount,x: integer;
var errorStatus:boolean;
begin
if (gettype(ObjAtLayer(RhandLayer))<>SwordType) then begin
UseObject(FindType(SwordType,BackPack));
wait(800);
end else begin
UseObject(ObjAtLayer(RhandLayer));
wait(800);
end;
KillingTryCount:=0;
errorStatus:=True;
AddToSystemJournal('Убиваем ' +GetName(target));
Attack(target) ;
PreCurveTime:=now();
KillingTryCount:=0;
corpse:=FindType($2006,Ground);
if (FindType($2006,Ground)>0) then Ignore(finditem);
repeat
errorStatus:=NewmoveXY(getx(target)+randomrange(-1,1),gety(target)+randomrange(-1,1),True,1,False);
KillingTryCount:=KillingTryCount+1;
WaitTargetObject(target);
UseSkill('Peacemaking');
wait(1000);
Attack(target) ;
x:=Random(4);
if x = 1 then NewMoveXY(getx(target)+1,gety(target),True,1,True);
if x = 2 then NewMoveXY(getx(target)-1,gety(target),True,1,True);
if x = 3 then NewMoveXY(getx(target),gety(target)+1,True,1,True);
if x = 4 then NewMoveXY(getx(target),gety(target)-1,True,1,True);
Attack(target) ;
ClearBadLocationList;
ClearBadObjectList;
wait(100);
if (Life < 50) then HealBand();
if Life < 30 then
begin
GotoOnHome;
DropOre;
// DropLoot();
GrabTools();
end;
//waittargetobject(corpse);
//UseSkill('Forensic Evaluation');
until (GetType(target)=$2006) or(KillingtryCount>3500) or (errorStatus=False);
AddToSystemJournal('Убил '+GetName(target));
AddToSystemJournal('Лутим');
wait(800);
PreCurveTime:=now();
KilltryCount:=0;
repeat
FindDistance := 3;
corpse:=FindType($2006,Ground);
NewMoveXY(getx(corpse),gety(corpse),True,1,True);
waittargetobject(corpse);
if (gettype(ObjAtLayer(RhandLayer))<>SwordType) then begin
UseObject(FindType(SwordType,BackPack));
wait(800);
end else begin
UseObject(ObjAtLayer(RhandLayer));
wait(800);
end;
KilltryCount:=KilltryCount+1;
until (KilltryCount>5) or (InJournalBetweenTimes('You carve|This sheep is not yet ready to be shorn|use a bladed item on that', PreCurveTime, Now) <> -1) or (hp<maxhp-30);
UseObject(corpse);
wait(1000);
EmptyContainer(corpse,backpack,1200);
// waittargetobject(corpse);
// UseSkill('Forensic Evaluation');
wait(1000);

CancelWaitTarget;
CancelTarget;

while (CountEx($1079,-1,BackPack)>0) and (CountEx($0F9F,-1,BackPack)>0) do begin
WaitTargetObject(FindType($1079,BackPack));
UseObject(FindType($0F9F,BackPack));
wait(700);
end;
end;
procedure checkProblem;
begin

if FindTypesArrayEx([$006D,$006C,$0009,$000E],[$FFFF],[Ground],false) >0 then begin
AddToSystemJournal('Нашли ' + inttostr(FindItem) + ', Имя ' + getname(FindItem));
NewMoveXY(getx(FindItem),gety(FindItem),True,1,False);
Killing(FindItem);
if (Life < 30) then begin
GotoOnHome();
end else if (Life < 80) then begin
HealBand();
end;

end;

if (Weight > MaxWeight -10) then
begin
AddToSystemJournal('Полный, пошел скидывать');
GotoOnHome;
// uosay('bank');
DropOre;
GrabTools;
NewMoveXY(MineX,mineY, false, 0, True);
end;

if FindType(PickType, Backpack) = $0 then
begin
AddToSystemJournal('Нет кирок, пошел добирать');
GotoOnHome;
// uosay('bank');
DropOre;
GrabTools;
NewMoveXY(MineX,mineY, false, 0, True);
end;

if (HP < 20) then
begin
AddToSystemJournal('Атакуют, сваливаем');
NewMoveXY(1503,2828, false, 1, True); ////

repeat
CheckHide;
wait(1000); /// подождем может проблема исчезнет
if Dead then NewMoveXY(1503,2828, false, 0, True) ;
until life = maxlife ; /// стоим подалее до востановления
GotoOnHome;
CheckHide;
DropOre;
NewMoveXY(MineX,mineY, false, 0, True);
end;



end;
procedure Steals;
begin
if Hidden then
useskill('Stealth')
end;


procedure Mining;
begin
MyX := GetX(self);
MyY := GetY(self);
MyZ := GetZ(self);

CaveTiles :=
[
1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349,
1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359
];

repeat
CheckHide;
If TargetPresent Then CancelTarget;
ClearJournal;
startTime := Now;


begin
StaticCell := ReadStaticsXY(myX , myY , WorldNum);
if StaticCell.StaticCount > 0 then
begin
for i := 0 to (StaticCell.StaticCount - 1) do
begin
for j := 0 to (Length(CaveTiles) - 1) do
begin
if StaticCell.Statics.Tile = CaveTiles[j] then
begin
T := StaticCell.Statics.Tile;
BREAK;
end;
end;
if T > 0 then BREAK;
end;
end;
end;
checkProblem;
idMinerTool := FindType(PickType, Backpack);
UseObject(idMinerTool);
WaitForTarget(1000);
TargetToTile(T, MyX, MyY, MyZ);
AddToSystemJournal('Копаем ' + 'x- '+ IntToStr(MyX) + ' y-'+ IntToStr(MyY) + ' z-'+ IntToStr(MyZ));
Wait(6000);
until Dead or not Connected or (InJournalBetweenTimes('no metal|far|can|harvest here',startTime,Now) <> -1) ;
Steals;
end;




BEGIN
Addtosystemjournal('Скрипт успешно стартовал. Made by M and Chico.');
SetARStatus(True);
MoveOpenDoor:=True;
if Dead then NewMoveXY(1503,2828, false, 0, True) ;
while not Dead do
begin
GotoOnHome;
// DropLoot;
DropOre;
GrabTools;
newmoveXY(1500, 2830, false,1,true) ;
mining;
newmoveXY(1499, 2830, false,1,true) ;
mining;
newmoveXY(1496, 2830, false,1,true) ;
mining;
newmoveXY(1497, 2828, false,1,true) ;
mining;
newmoveXY(1496, 2832, false,1,true) ;
mining;
newmoveXY(1493, 2834, false,1,true) ;
mining;
newmoveXY(1494, 2836, false,1,true) ;
mining;
newmoveXY(1492, 2836, false,1,true) ;
mining;
newmoveXY(1492, 2838, false,1,true) ;
mining;
end;
END.
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: проблема с скриптом на мининг

Post by nah nah »

Это так похоже на мой первый скрипт под инжект =D
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: проблема с скриптом на мининг

Post by Vizit0r »

во всех newmoveXY заменяешь последнюю 1 на ноль. всё.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
aibolit
Posts: 7
Joined: 13.09.2017 6:46

Re: проблема с скриптом на мининг

Post by aibolit »

Vizit0r wrote:во всех newmoveXY заменяешь последнюю 1 на ноль. всё.
блин так все просто. спс сейчас попробую! )

блин. Только он вообще перестал ходить сле того как все на 0 поменял )))
стоит на месте и в журнале просто повторяет точку под собою
an't find path to (1500, 2830)
20:35:01:079 [bb4]: Копаем x- 1503 y-2828 z-0
20:35:08:199 [bb4]: Can't find path to (1499, 2830)
20:35:08:561 [bb4]: Копаем x- 1503 y-2828 z-0
и так бесконечно
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: проблема с скриптом на мининг

Post by Vizit0r »

значит в точку назначения не может наступить.
Почему-смотри сам, что-то мешает.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
aibolit
Posts: 7
Joined: 13.09.2017 6:46

Re: проблема с скриптом на мининг

Post by aibolit »

Vizit0r wrote:значит в точку назначения не может наступить.
Почему-смотри сам, что-то мешает.
Все сделал. Работает. Первую точку копки поставил 1, он ее так и не доходит но ходить начал, а следующие с значением 0 уже норм ходит и копает четко где надо. Спс за помощь!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: проблема с скриптом на мининг

Post by Vizit0r »

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