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

Tinkering_Necklace. Dragon World

Only working scripts
Post Reply
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Tinkering_Necklace. Dragon World

Post by Scripts Writer »

Скрипт на крафт Necklace с раскладом по мешкам.

Code: Select all

Program Tinker_Necklace;

const
Sunduk_With_Iron_and_Tools=$402DE2C4;
Sunduk_With_Empty_Bags=$402DE2C4;
Sunduk_With_Full_Bags=$404CAA07;
Bag=$0E76;
Tools=$1EBC;
Ingot=$1BEF;
Pig=$09BB;
Necklace=$1085;

var
k, l : integer;
TimeStart : TDateTime;
Neck_Bag : Cardinal;


procedure Check_Necklace;
 begin
   FindType(Necklace,Backpack);
   if FindCount>0 then
     begin
       while FindCount <> 0 do
         begin
           l:=l+1;
           MoveItem(FindItem,1,Neck_Bag,0,0,0);
           wait(500);
           FindType(Necklace,Backpack);
         end
     end
 end;


procedure Get_Bag;
 begin
   FindType(Bag,Backpack);
   if FindCount=0 then
     begin
       UseObject(Sunduk_With_Empty_Bags); 
       wait(1000);
       FindType(Bag,Sunduk_With_Empty_Bags);
       if FindCount>0 then
         begin
           MoveItem(FindItem,1,Backpack,0,0,0);
           wait(1000);
           UseObject(FindItem);
           wait(1000);
         end
     end   
   Neck_Bag:=FindType(Bag,Backpack);
 end; 


procedure Out_Bag;
 begin
   FindType(Bag,Backpack);
   if FindCount>0 then
     begin
       MoveItem(FindItem,1,Sunduk_With_Full_Bags,0,0,0); 
       wait(1000)
     end
 end;


procedure Check_World_Save;
 begin
  if InJournal('saving')<>-1 then
   begin 
    ClearJournal;
    k:=0;
    repeat
      wait(10000)
      k:=k+1;
      AddToSystemJournal('World is saving more than '+IntToStr(k*10)+' seconds.');
    until (InJournal('data')<>-1) or (k>10)
   end
 end;


procedure Check_Connect;
 begin
  if not Connected then 
    while not Connected do 
      begin
        Connect;
        wait(1000);
      end 
 end;


procedure Check_Iron;
 begin
  FindTypeEx(Ingot,$0000,Backpack,False);
  if (FindCount=0) OR (GetQuantity(FindItem)<5) then
    begin
      AddToSystemJournal('Добираем инги.')
      UseObject(Sunduk_With_Iron_and_Tools);
      wait(1000);
      FindTypeEx(Ingot,$0000,Sunduk_With_Iron_and_Tools,False);
      if (FindCount>0) and (GetQuantity(FindItem)>100) then
        begin
          MoveItem(FindItem,100,Backpack,0,0,0);
          wait(1000);
          AddToSystemJournal('Добрали 100 iron ingots. На данный момент имеем '+IntToStr(Count(Ingot))+' штук. Осталось ещё '+IntToStr(CountEx(Ingot,$0000,Sunduk_With_Iron_and_Tools))+' iron ingots. l='+IntToStr(l)+'; Count='+IntToStr(Count(Necklace))+';');
        end
      else
        AddToSystemJournal('Ошибка во время добора Iron Ignots.');
        exit;
    end
   FindType(Ingot,Ground);
   if FindCount>0 then
     begin
       MoveItem(FindItem,0,Sunduk_With_Iron_and_Tools,0,0,0);
       wait(500);
     end
 end;


procedure Check_Food;
 begin
  UseObject(Sunduk_With_Iron_and_Tools)
  wait(250);
  FindType(Pig,Sunduk_With_Iron_and_Tools);
  if FindCount>0 then
    begin
      MoveItem(FindItem,1,Backpack,0,0,0);
      wait(250);
      UseObject(FindItem);
      FindType(Pig,Backpack);
      if FindCount=0 then AddToSystemJournal('Покушали.');
      if FindCount>0 then MoveItem(FindItem,1,Sunduk_With_Iron_and_Tools,0,0,0);
    end
  else
    AddToSystemJournal('a Pig не был найден в сундуке.');
 end;


procedure Check_Last_Bag;
  begin
    FindType(Bag,Backpack);
    if FindCount>0 then
      begin
        UseObject(FindItem);
        wait(500)
        Neck_Bag:=FindType(Bag,Backpack);  
        FindType(Necklace,Neck_Bag);
        l:=FindCount;
        AddToSystemJournal('В мешке '+IntToStr(l)+' necklace.');
      end
  end;  


Begin
 UseObject(Sunduk_With_Iron_and_Tools);
 wait(1000);
 ClearJournal;
 CancelMenu;
 AutoMenu( 'Tinkering' , 'Jew' );
 AutoMenu( 'Jew' , 'neck' );
 while not Dead do
   begin
     Check_Last_Bag;
     Get_Bag;
     repeat
       if Weight>500 then exit; 
       Check_Iron;
       k:=0;
       TimeStart:=Now;
       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);
       if InJournal('put')<>-1 then 
         begin
           Check_Necklace; 
         end
       ClearJournal;
     until l>=254  
     if l>=254 then 
       begin
         l:=0;
         Out_Bag;
       end
   end    
End.
Last edited by Scripts Writer on 13.07.2008 10:22, edited 3 times in total.
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Вопрос остаётся в силе
scf
Neophyte
Neophyte
Posts: 20
Joined: 06.02.2008 11:56

Post by scf »

Попробуй увеличить задержку после мувитема, + чеклаг втули.
Еще как вариант: невместимость по количеству necklace в контейнере, мешке
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

Переделал под удочки вроде всё пашет )
Но вот проблема бывает удачка падает на пол :D
Надо поставить задержку , вроде как падает после добора ресурсов или когда берёт мешок ) Токо вот боюсь не там поставить(
keks
Posts: 6
Joined: 30.06.2008 4:04

Post by keks »

Спасибо за скрипт!
Но почему то во время работы скрипта он сбивается и выдаёт

Code: Select all

[5:56:58] System: The item is of above average quality
[5:56:58] System: You put the necklace in your pack.
[5:56:58] System: Targeting Cancelled
[5:57:00] System: Targeting Cancelled
[5:57:02] System: Previous Targeting Cancelled
[5:57:03] System: Unexpected menu info
[5:57:55] System: Targeting Cancelled
И ничего не делает, приходиться отключаться и снова конектиться к игре и запускать скрипт! Просто перезапускать скрипт не удаёться, продолжет выскакивать ошибки. Спасибо!
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Code: Select all

procedure Check_World_Save;
 begin
  if InJournal('saving')<>-1 then
   begin
    ClearJournal;
    k:=0;
    repeat
      wait(10000)
      k:=k+1;
      AddToSystemJournal('World is saving more than '+IntToStr(k*10)+' seconds.');
    until (InJournal('data')<>-1) or (k>10)
   end
 end; 
И мхо в этом вся проблема :!:

Code: Select all

    until (InJournal('data')<>-1) or (k>10)
Меняем на

Code: Select all

    until (InJournal('data')<>-1) or (k>30)
Просто на ДРВ сейчас сейв больше двух минут. А эта процедура ждет максимум 100 сек
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Я чучуть изменил твой скрипт. Вот стою на нем уже 3 часа, все работает!

Code: Select all

Program Tinker_Necklace;

const
Sunduk_With_Iron_and_Tools=$4035BF59;
Sunduk_With_Empty_Bags=$4035BF59;
Sunduk_With_Full_Bags=$403C2EA6;
Bag=$0E76;
Tools=$1EBC;
Ingot=$1BEF;
Pig=$09BB;
Necklace=$1085;

var
k : integer;
TimeStart : TDateTime;
Neck_Bag : Cardinal;
Quantity : integer;


procedure Check_Necklace;
 begin
  if Quantity<255 then
    begin
      FindType(Necklace,Backpack);
      if FindCount>0 then
        begin
          MoveItem(FindItem,1,Neck_Bag,0,0,0);
          wait(250);
        end
    end
  else
    begin
      MoveItem(Neck_Bag,1,Sunduk_With_Full_Bags,0,0,0);
      wait(250);
      Quantity:=0;
    end
 end;


procedure Check_Bag;
 begin
  Neck_Bag:=FindType(Bag,Backpack);
  if FindCount>0 then
    begin
      UseObject(Neck_Bag);
      wait(250);
      FindType(Necklace,Neck_Bag);
      Quantity:=FindCount;
      if Quantity>0 then AddToSystemJournal(IntToStr(Quantity)+' necklaces на данный момент в мешке.');
      if Quantity=0 then AddToSystemJournal('Начинаем новую партию изделий.');
    end
  else
    begin
      AddToSystemJournal('Мешок не найден в backpacke. Берём новый');
      UseObject(Sunduk_With_Empty_Bags);
      wait(250);
      FindType(Bag,Sunduk_With_Empty_Bags);
      if FindCount>0 then
        begin
          MoveItem(FindType(Bag,Sunduk_With_Empty_Bags),1,Backpack,0,0,0);
          wait(250);
        end
    end
 end;     


procedure Check_World_Save;
 begin
  if InJournal('saving')<>-1 then
   begin
    ClearJournal;
    k:=0;
    repeat
      wait(10000)
      k:=k+1;
      AddToSystemJournal('World is saving more than '+IntToStr(k*10)+' seconds.');
    until (InJournal('data')<>-1) or (k>30)
   end
 end;


procedure Check_Connect;
 begin
  if not Connected then
    while not Connected do
      begin
        Connect;
        wait(1000);
      end
 end;


procedure Check_Iron;
 begin
  FindType(Ingot,Backpack);
  if (FindCount=0) OR (Count(Ingot)<50) then
    begin
      UseObject(Sunduk_With_Iron_and_Tools);
      wait(250);
      FindType(Ingot,Sunduk_With_Iron_and_Tools);
      if (FindCount>0) and (CountEx(Ingot,$0000,Sunduk_With_Iron_and_Tools)>200) then
        begin
          MoveItem(FindItem,200,Backpack,0,0,0);
          wait(250);
          AddToSystemJournal('Добрали 200 iron ingots. На данный момент имеем '+IntToStr(Count(Ingot))+' штук. Осталось ещё '+IntToStr(CountEx(Ingot,$0000,Sunduk_With_Iron_and_Tools))+' iron ingots.');
        end
      else
        AddToSystemJournal('Ошибка во время добора Iron Ignots.');
    end
 end;
       
 
Begin

 ClearJournal;
 while not Dead do
   begin
     Check_Connect;
     Check_Iron;
     Check_Bag;

     k:=0;
     TimeStart:=Now;
     WaitMenu( 'Tinkering' , 'Jew' );
     WaitMenu( 'Jew' , 'neck' );
     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);

     FindType(Necklace,Backpack);
     if Count(Necklace)>0 then Check_Necklace;
   end   
End.
Изменения:
1)Изменено время максимального сейва мира (до 300 сек)
2)Убрано кушанье (а зачем оно?! Мыж не качаемся.)
3)Удален добор тинкеринг тулзов (Ни разу на ДРВ тинкеринг тулз у меня не ламались)
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Огромное спасибо за скрипт! Супер!
Kynep
Neophyte
Neophyte
Posts: 40
Joined: 29.05.2008 6:41

Post by Kynep »

Unholy wrote:Я чучуть изменил твой скрипт. Вот стою на нем уже 3 часа, все работает!
ХЗ, как у тя работает, у меня через пол часа на полу валялось 5 неков.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Вротмненоги! Это особая уличная магия :shock:
(просто я сижу в кресле, и не увидел упавших неклассов. Но Хз. у меня за ночь их всего 10 валялось! :roll:
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Кто у нас шарит? Напишите простую процедуру, чтоб поднимало с пола и ложило в мешок.
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

А в каких вообще случаях у вас айтемы могут оказатсья на полу? Распишите подробнее... Например на оскоме только при перегрузе падают на пол...
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

Просто попробуй заменить количество некласов в одной сумке на 250 и все должно быть норм
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

Всё норма пашет , незнаю что у вас падает ! :?
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Значит так!
1)Неклас падает тогда когда он Первый, который должен попасть в мишок!
2)Некласс падает Полюбому! Хоть ты тресни! Хоть ты количество в мешке меняешь, хоть че хош делаешь!
3)А вот тут самое итнересное!
Добавил немного кода в цикл

Code: Select all

FindType(Necklace, Ground);
if FindCount > 0 then
begin
MoveItem(FindItem,1,Neck_Bag,0,0,0);
AddToSystemJournal('Подняли с пола неклас.');
wait(600);
End;
И он ПОтбирает неклассы ТОЛЬКО если я вторым чаром вытащу у него их ис под ног и кину на расстояние 1-2 клеток!

итог: ВРОТМНЕНОГИ! Это особая уличная магия!
Post Reply