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

Tinkering(Lockpick) на DRW

тут можно задать вопрос по скриптингу
Post Reply
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Tinkering(Lockpick) на DRW

Post by Scripts Writer »

Доброе время суток.
Кто-то победил крафт топоров вместо отмычек, в случае когда приходят сообщения:

Code: Select all

[20:20:01] System: Targeting Cancelled
[20:20:01] System: Unexpected menu info
?

Лог ниже не очень лицеприятный.

Code: Select all

20:19:16 [DontTalk]: В сундуке 14065 iron ingots.
20:19:17 [DontTalk]: Берём 400 iron ingots.
20:19:26 [DontTalk]: В паке 1 отмычек, 27 топоров
20:19:30 [DontTalk]: В паке 2 отмычек, 27 топоров
20:19:34 [DontTalk]: В паке 3 отмычек, 27 топоров
20:19:38 [DontTalk]: В паке 4 отмычек, 27 топоров
20:19:42 [DontTalk]: В паке 5 отмычек, 27 топоров
20:19:42 [DontTalk]: В паке 5 отмычек, 27 топоров
20:19:49 [DontTalk]: В паке 5 отмычек, 28 топоров
20:19:53 [DontTalk]: В паке 6 отмычек, 28 топоров
20:19:57 [DontTalk]: В паке 7 отмычек, 28 топоров
20:20:01 [DontTalk]: В паке 8 отмычек, 28 топоров
20:20:01 [DontTalk]: В паке 8 отмычек, 28 топоров
20:20:08 [DontTalk]: В паке 8 отмычек, 29 топоров
20:20:12 [DontTalk]: В паке 9 отмычек, 29 топоров
20:20:17 [DontTalk]: В паке 10 отмычек, 29 топоров
20:20:21 [DontTalk]: В паке 11 отмычек, 29 топоров
20:20:24 [DontTalk]: В паке 12 отмычек, 29 топоров
20:20:28 [DontTalk]: В паке 13 отмычек, 29 топоров
20:20:34 [DontTalk]: В паке 14 отмычек, 29 топоров
20:20:34 [DontTalk]: В паке 14 отмычек, 29 топоров
20:20:40 [DontTalk]: В паке 14 отмычек, 29 топоров
20:20:45 [DontTalk]: В паке 15 отмычек, 29 топоров
20:20:49 [DontTalk]: В паке 16 отмычек, 29 топоров
20:20:53 [DontTalk]: В паке 17 отмычек, 29 топоров
20:20:58 [DontTalk]: В паке 18 отмычек, 29 топоров
20:20:58 [DontTalk]: В паке 18 отмычек, 29 топоров
20:21:05 [DontTalk]: В паке 18 отмычек, 29 топоров
20:21:09 [DontTalk]: В паке 19 отмычек, 29 топоров
20:21:13 [DontTalk]: В паке 20 отмычек, 29 топоров
20:21:17 [DontTalk]: В паке 21 отмычек, 29 топоров
20:21:21 [DontTalk]: В паке 22 отмычек, 29 топоров
20:21:25 [DontTalk]: В паке 23 отмычек, 29 топоров
20:21:28 [DontTalk]: В паке 24 отмычек, 29 топоров
20:21:32 [DontTalk]: В паке 25 отмычек, 29 топоров
20:21:38 [DontTalk]: В паке 26 отмычек, 29 топоров
20:21:42 [DontTalk]: В паке 27 отмычек, 29 топоров
20:21:42 [DontTalk]: В паке 27 отмычек, 29 топоров
20:21:49 [DontTalk]: В паке 27 отмычек, 30 топоров
20:21:54 [DontTalk]: В паке 28 отмычек, 30 топоров
Функция крафта ниже.

Code: Select all

const
tiron = $1BEF;
tlockpick = $14FB;
maxquantity = 400;
ttools = $1EBC;
sundukwithiron = $4022103F;

var
k, l: Integer;
TimeStart : TDateTime;

Code: Select all

  CancelMenu;
  AutoMenu('Tinkering' , 'Tool');
  AutoMenu('Tool' , 'lockp');
  AddToSystemJournal('Начинаем...');
  ClearBackpack;
  GetIron;
  Check_World_Save;
  CheckHide;
  repeat
    repeat
      k:=0;
      TimeStart:=Now;
      FindType(ttools,Backpack);
      if FindCount > 0 then UseObject(FindItem);
      repeat 
        wait(100); 
        k := k + 1; 
        Check_World_Save; 
      until (InJournalBetweenTimes('You put the lockpick|Tinkering failed', TimeStart, Now)<>-1) or (k > 60); 
      if InJournalBetweenTimes('Tinkering failed', TimeStart, Now)<>-1 then
        begin
          k:=0
          TimeStart:=Now;
          ClearJournal;
          wait(5000);
        end
      if InJournalBetweenTimes('Unexpected menu info', TimeStart, Now)<>-1 then
        begin
          CancelMenu;
          AutoMenu('Tinkering' , 'Tool');
          AutoMenu('Tool' , 'lockp'); 
          wait(500);
        end         
      if Count(tiron) < 10 then GetIron;  
      AddToSystemJournal('В паке ' + IntToStr(Count(tlockpick)) + ' отмычек, ' + IntToStr(Count($0F43)) + ' топоров');
    until Count(tlockpick) > 300
    FindType(tlockpick,Backpack);
    MoveItem(FindItem,300,sundukwithiron,0,0,0);
    AddToSystemJournal('Выкладываем 300 lockpick');
    wait(500)
  until Dead
2Можно конечно брать x-1 инготов айрона, где x = кол-во инготов требуемых для топора, но это лишние обращения и временные затраты.
Проще научить человека ловить рыбу, чем постоянно ею его кормить. (с) Destruction
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

http://stealth.od.ua/forum/viewtopic.php?p=6151#6151

про использование automenu в цикле - читать до понимания.

+ использовать стелс версии от 1 сентября и позднее - чтобы работало cancelmenu
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Не, я конечно не хочу спорить с вашим авторитетным мнением, но AutoMenu у меня стоит за пределами цикла, и изредка срабатывает AutoMenu когда выпадает сообщение

Code: Select all

Unexpected menu info
, которого не должно быть и которое является бедствием скрипта.

Мб я правда чего-то не понимаю, поправьте меня пожалуйста.
Проще научить человека ловить рыбу, чем постоянно ею его кормить. (с) Destruction
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

а. недосмотрел.
тогда еще лучше - полный бред получается :)

использовать надо что-то типа
IF MEnu Present then CloseMenu - как проверка на заглючившее меню.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Разобрался, ошибка была разве что в том, что не хватало элементарной задержки в 1мс

Code: Select all

    repeat
      k:=0;
      TimeStart:=Now;
      UseObject(FindType(ttools,Backpack));
      repeat 
        wait(100); 
        k := k + 1; 
        Check_World_Save; 
      until (InJournalBetweenTimes('You put the lockpick|Tinkering failed', TimeStart, Now)<>-1) or (k > 60); 
      wait(100); <---------------------------------------------------
      if InJournalBetweenTimes('Tinkering failed', TimeStart, Now)<>-1 then
        begin
          k:=0
          TimeStart:=Now;
          ClearJournal;
          wait(5000);
        end      
      if Count(tiron) < 10 then GetIron;  
      AddToSystemJournal('В паке ' + IntToStr(Count(tlockpick)) + ' отмычек, ' + IntToStr(Count($0F43)) + ' топоров');
    until Count(tlockpick) > 300


2Как говорится, лучшее- враг хорошего.
Проще научить человека ловить рыбу, чем постоянно ею его кормить. (с) Destruction
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

странно, как задержка скрипта в 1мс может повлиять на появление пакета от сервера, который переваривается клиентом как

Code: Select all

Unexpected menu info
?
Уменя те-же проблемы. на инже тоже помню постоянные мусорные менюхи от сервака прилетали.
Mirage
Novice
Novice
Posts: 90
Joined: 18.07.2009 19:41

Post by Mirage »

Пользуюсь:

Code: Select all

k:=0;
TimeStart:=Now;
WaitMenu( 'Tinkering' , 'Tools');
WaitMenu( 'Tools', 'lockpick');
UseObject(FindType(Tools,Backpack));

repeat
wait(100);
k := k + 1;
Check_World_Save;
until (InJournalBetweenTimes('You put|failed', TimeStart, Now)<>-1) or (k > 300);
wait(100);
Делает по 30К-50К за раз притом только отмычки. МБ дело в пинге плохом?
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Code: Select all

wait(100);
убери,-тогда начнутся глюки.

Code: Select all

C:\Documents and Settings\Administrator>ping uo.drw.ru -t

Обмен пакетами с uo.drw.ru [89.188.109.174] по 32 байт:

Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=3мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=3мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Ответ от 89.188.109.174: число байт=32 время=2мс TTL=121
Проще научить человека ловить рыбу, чем постоянно ею его кормить. (с) Destruction
Mirage
Novice
Novice
Posts: 90
Joined: 18.07.2009 19:41

Post by Mirage »

Зачем искусственно себе ставить палки в колеса? 0,1 секунды и подождать не сложно :)
Смысл в том что ловушка каждый раз назначается и не сбивается при глюках.
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Смысл в том, что начиналось всё с того, что не было этой самой задержки в 0.1 мс и пытался понять почему же оно сбивается. Потом уже когда исправил- Вы пришли и на готовое мне расписываете то, что я и сам уже понял.

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

Post by Vizit0r »

я поставлю вопрос иначе - такой ситуации вообще не должно возникать.

Когда-то много лет тому я на меню качался весьма плотно - ошибок небыло. с тем пор в обработке меню ничего не менялось. так что есть мнение, что это слегка зависит от сервера - надо проверять.

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