- Board index Stealth Client in Russian Помощь по скриптам
- Search
-
- It is currently 15.05.2024 5:35
- All times are UTC+02:00
Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Помогите со скриптом пжл
тут можно задать вопрос по скриптингу
Помогите со скриптом пжл
Помогите пожалуйсто со скриптом на ламбер. Скрипт рабочий, все норм, НО!!! если его остановить на середине маршрута или еще что то с ним случается то он стопарится и выдает UseObject error: Object not found.. Раньше настраивал его (года3-4 назад) все было норм, работал отлично. При выключении и повторном включении чар просто шел к сундуку и стартовал заного. Помогите исправте ошибку что б скрипт работал.
Re: Помогите со скриптом пжл
Denis wrote:Помогите пожалуйсто со скриптом на ламбер. Скрипт рабочий, все норм, НО!!! если его остановить на середине маршрута или еще что то с ним случается то он стопарится и выдает UseObject error: Object not found.. Раньше настраивал его (года3-4 назад) все было норм, работал отлично. При выключении и повторном включении чар просто шел к сундуку и стартовал заного. Помогите исправте ошибку что б скрипт работал.lumber Lyntik.sc
попробуй авдруг!
Code: Select all
program LambIsengard101;
// В папке D:\Games\Railes есть файл имя_чара.txt и файл res.txt
// Первый - это маршрут перемещения чара по лесу от сундука и обратно к
// сундуку. При килле чар идет дальше по маршруту вплоть до сундука.
// Второй файл - маршрут от сундука до креста для реса.
// Вырубленные логи скидывать в сундук. Топоры брать из мешка оттуда же.
// В общем, как в мининге.
//
// v.1.01 (c) Edred
{$Include 'all.inc'}
const
MyMaxWeight = 350;
Msg1 = 'You put the';
Msg2 = 'reach this';
Msg3 = 'fail to';
Msg4 = 'There are no logs here to chop';
Msg5 = 'There is nothing';
Msg6 = 'OOPS !!!';
Msg7 = 'far away';
Hatchet1 = $0F43;
Hatchet2 = $0F48;
AnkhID = $4000721A;
Sunduk = $4023A375;
BagHatchets = $4023D4BC;
DeadLife = 10;
Logs = $1BDD;
WoodType = $0F90;
Procedure Take;
begin
UseObject($4023A375); //ид суднука с кирками
wait(3000)
FindTypeEx($0F43,$FFFF,$4023A375,True); //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
FindTypeEx($0E85,$FFFF,$4023A375,True); //ид суднука с кирками
wait(1000)
MoveItem(FindItem,1,Backpack,0,0,0);
wait(3000)
end;
type LumbRecord = Record
x,y,tt,tx,ty,tz : integer;
end;
var
LumberDim : array [0..5000] of LumbRecord;
ResDim : array [0..5000] of LumbRecord;
Regs : array [1..3] of Cardinal;
MaxPosL, MaxPosR, k : integer; // длины соответствующих массивов
CharRail, ResRail : String;
LumberFlag : Boolean; // true - работаем, false - нет (разгрузка или смерть)
ctime : TDateTime;
procedure GetLumberRail(s : String; WPos : Integer; flag : Boolean);
// flag - true - маршрут для ламбера, false - маршрут для реса
begin
s := s + ' ';
if flag then
begin
LumberDim[WPos].x := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberDim[WPos].y := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberDim[WPos].tt := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberDim[WPos].tx := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberDim[WPos].ty := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberDim[WPos].tz := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
end
else
begin
ResDim[WPos].x := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
ResDim[WPos].y := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
ResDim[WPos].tt := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
ResDim[WPos].tx := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
ResDim[WPos].ty := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
ResDim[WPos].tz := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
end;
end;
procedure GetRail(FileNam : String; Flagoffile : boolean);
var
List : TStringList;
i : integer;
begin
List := TStringList.Create;
List.LoadFromFile(FileNam);
for i := 0 to List.Count-1 do GetLumberRail(List.strings[i],i,FlagOfFile);
if Flagoffile then MaxPosL := i
else MaxPosR := i;
end;
procedure CheckDead;
begin
if Dead then exit;
if HP < 10 then
begin
Disconnect;
wait(5000);
Connect;
repeat
wait(1000);
until Connected;
end;
end;
procedure RestoreStamina;
// если стамины мало, восстанавливаем ее чару до полной
begin
if Stam < 20 then
begin
repeat
waitconnection(3000);
wait(1000);
until Stam = MaxStam;
end;
end;
function CheckHatchet : Boolean;
// проверяем, есть ли топор у чара в паке или на нужном слое.
// если ее нет - открываем сундук и мешок, берем топор. Если топора нет
// в мешке - выход.
var tmpser : Cardinal;
begin
Result := true;
waitconnection(3000);
if (ObjAtLayerEx(RhandLayer,self) <> 0) or (count(Hatchet1)<>0) or (count(Hatchet2)<>0) then exit;
// нет у чара топора
repeat
UseObject(Sunduk);
wait(1000);
checksave;
UseObject(BagHatchets);
wait(1000);
checksave;
tmpser := findtype(Hatchet1,BagHatchets);
if tmpser = 0 then tmpser := findtype(Hatchet2,BagHatchets);
if tmpser <> 0 then
begin
Grab(tmpser,1);
wait(1000);
checksave;
end;
until (count(Hatchet1)<>0) or (count(Hatchet2)<>0);
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;
procedure ResChar;
// идем по маршруту на рес, ресаем чара, восстанавливаем здоровье, возвращаемся
// по тому же маршруту в обратную сторону
var
n : integer;
tmptime : TDateTime;
begin
AddToSystemJournal('TEST: нужен рес чара');
For n := 0 to MaxPosR-1 do
begin
repeat
NewMoveXY(ResDim[n].x,ResDim[n].y,False,0,true);
wait(300);
until (GetX(self)=ResDim[n].x) and (GetY(self)=ResDim[n].y);
end;
// чар у креста
AddToSystemJournal('TEST: чар у креста');
WaitConnection(5000);
if WarMode = true then SetWarMode(false);
repeat
UseObject(AnkhID);
wait(2000);
checksave;
until not Dead;
// лечим чара
AddToSystemJournal('TEST: лечим чара');
while (HP<MaxHP) do
begin
waitconnection(3000);
tmptime := Now;
n := 0
UseSkill('Spirit Speak');
repeat
wait(2000);
n := n + 1;
until (InJournalBetweenTimes('You fail|You channel|You lack|You establish', tmptime, Now)<>-1) or (Mana < (MaxMana - 50)) or (n > 300);
wait(500);
if Mana < 30 then
begin
tmptime := Now;
n := 0;
repeat
waitconnection(3000);
useskill('meditation');
wait(2000);
n := n + 1;
checksave;
until (InJournalBetweenTimes('reached full mana', tmptime, Now)<>-1) or (n = 100);
end;
end;
// пойдем обратно
AddToSystemJournal('TEST: идем обратно к сундуку');
For n := 0 to MaxPosR-1 do
begin
repeat
NewMoveXY(ResDim[MaxPosR-1-n].x,ResDim[MaxPosR-1-n].y,False,0,true);
wait(3000);
until (GetX(self)=ResDim[MaxPosR-1-n].x) and (GetY(self)=ResDim[MaxPosR-1-n].y);
end;
end;
procedure Discharge;
// разгружаем нарубленное в сундук
// нарубленное - реги в массиве Regs[1..3]
// логи - константа Logs
var m, tmpcnt : integer;
tmpid, tmpstack, tmpcolor : Cardinal;
tmpname : String;
begin
AddToSystemJournal('TEST: разгрузка');
waitconnection(3000);
CheckDead;
if Dead then exit;
NewMoveXY(GetX(Sunduk), GetY(Sunduk), true, 1, true);
UseObject(Sunduk);
wait(1000);
checksave;
// выложим реги
for m := 1 to 3 do
begin
tmpcnt := 0;
Repeat
tmpid := Findtype(Regs[m],backpack);
if tmpid = 0 then break;
addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + ' regs');
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить regs!');
wait(15000);
end;
tmpstack := Findtype(Regs[m],Sunduk);
// Если не найден в банке - тогда просто в контейнер
if tmpstack = 0 then tmpstack := Sunduk;
MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
end;
// выложим дид вуды
tmpcnt := 0;
Repeat
tmpid := Findtype(WoodType,backpack);
if tmpid = 0 then break;
addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + ' dead woods');
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить dead woods!');
wait(15000);
end;
tmpstack := Findtype(WoodType,Sunduk);
// Если не найден в банке - тогда просто в контейнер
if tmpstack = 0 then tmpstack := Sunduk;
MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
// выложим логи
tmpcnt := 0;
Repeat
tmpid := Findtype(Logs,backpack);
if tmpid = 0 then break;
tmpcolor := GetColor(tmpid);
tmpname := ' unknown logs';
case tmpcolor of
$0000 : tmpname := ' logs';
$037F : tmpname := ' Grave logs';
$0039 : tmpname := ' Willow logs';
$0026 : tmpname := ' Maple logs';
$0405 : tmpname := ' Oak logs';
$0994 : tmpname := ' Bloody logs';
$048A : tmpname := ' Nature logs';
$0898 : tmpname := ' Spirits logs';
end;
addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + tmpname);
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить логи');
wait(15000);
end;
repeat
tmpstack := FindtypeEx(Logs,tmpcolor,Sunduk,False);
if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack);
until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000);
// Если не найден в сундуке - тогда просто в контейнер
if tmpstack = 0 then tmpstack := Sunduk;
MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
IgnoreReset;
AddToSystemJournal('TEST: разгрузка закончена');
end;
function LumbCurTree(tile,x,y,z : Integer) : Boolean;
// рубим указанный тайл. Возвращаем false если перевес или чар мертв.
var q, m1, m2, m3, m4, m5, m6, CountFizzle : integer;
begin
Result := true;
CountFizzle := 0;
CheckHide;
repeat
if WarMode = true then SetWarMode(false);
if TargetPresent then CancelTarget;
ctime := Now;
if Dead then begin Result := false; exit; end;
if UseType(Hatchet1,$FFFF) = 0 then
begin
if UseType(Hatchet2,$FFFF) = 0 then
begin
Result := false;
exit;
end;
end;
WaitForTarget(1000);
If TargetPresent then TargetToTile(tile, x, y, z);
q := 0;
repeat
wait(1000);
q := q + 1;
checksave;
m1 := InJournalBetweenTimes(Msg1, ctime, Now);
m2 := InJournalBetweenTimes(Msg2, ctime, Now);
m3 := InJournalBetweenTimes(Msg3, ctime, Now);
m4 := InJournalBetweenTimes(Msg4, ctime, Now);
m5 := InJournalBetweenTimes(Msg5, ctime, Now);
m6 := InJournalBetweenTimes(Msg6, ctime, Now);
until (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1) or Dead or (q > 300);
if (m2<>-1) or (m3<>-1) or (m4<>-1) then CountFizzle := CountFizzle + 1;
if Dead or (Weight > MyMaxWeight) then begin Result := false; exit; end;
until (m5<>-1) OR (CountFizzle = 7);
end;
Begin
Regs[1] := $0F85; // ginseng
Regs[2] := $0F88; // Nightshade
Regs[3] := $0F86; // Mandrake Roots
GetRail(CharRail,true);
AddToSystemJournal('Маршрут ' + CharRail + ' загружен');
GetRail(ResRail,false);
AddToSystemJournal('Маршрут ' + ResRail + ' загружен');
// Стартуем от сундука
repeat
CheckDead;
if Dead then LumberFlag := false else LumberFlag := true;
if LumberFlag then
begin
if not CheckHatchet then exit;
For k := 0 to MaxPosL-1 do
begin
// идем по маршруту
repeat
RestoreStamina;
NewMoveXY(LumberDim[k].x,LumberDim[k].y,False,0,true);
wait(3000);
until (GetX(self)=LumberDim[k].x) and (GetY(self)=LumberDim[k].y);
AddToSystemJournal('TEST (' + inttostr(k) + ' of ' + inttostr(MaxPosL-1) + '): пришел в координаты ' + inttostr(LumberDim[k].x) + ',' + inttostr(LumberDim[k].y));
if LumberFlag and (LumberDim[k].tt <> 0) then
// Будем рубить
LumberFlag := LumbCurTree(LumberDim[k].tt,LumberDim[k].tx,LumberDim[k].ty,LumberDim[k].tz);
end;
end;
// мы снова у сундука
if not Dead then Discharge else ResChar;
if ((GetX(self) = 1124) AND (GetY(self) = 2730)) then NewMoveXY(1124,2730,False,0,true);
until False;
End.