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

DRW VIP Mining

Only working scripts
Post Reply
Savage
Neophyte
Neophyte
Posts: 18
Joined: 27.09.2010 5:57
Contact:

DRW VIP Mining

Post by Savage »

Подправил скрипт. Теперь юзает один тип кирок и качественно кушает :)

Сразу оговорюсь, скрипт сырой. Сообщения о синтаксических, логических ошибках и прочих глюках приветствуются.

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

Для старта скрипта, грузим чара скролами масс диспела и ворта и инвизками, количество на усмотрение, у меня пока 30. Кирку в лапу и стартуем скрипт.

Что править в скрипте:
Sunduk = $4013D752; id сундука
MyBox = $40050E38; ящик с тремя мешками для руды и там же лежат скролы и инвизы.
IronBag = $40077033; id мешка для железа, он лежит в ящике!!!
OtherBag = $400767FA; id мешка для прочей руды
BestBag = $40076C6B; id мешка для выхи, туда же падает и плут
EdaBag = $402D75B6; id мешка со свинками, он лежит в сундуке
EdaType = $09BB; // Pig тип еды если свинки не устраивают
DiamondBag = $404C837D; id мешка для камней, он лежит в сундуке
ToolBag = $401CF9A9; id мешка с кирками, тоже лежит в сундуке. Чар хавает кирки обоих положений, но не проверял :)

SundukX = 5134; координаты места перед сундуком с которого он может разгружаться, я подхожу вплотную.
SundukY = 1087;

BaseX = 5142; координаты места на котором копает чар
BaseY = 1084;

KillElems = 'Yes'; // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела)
KillAnyElem = 'Yes'; // Убивать чужого элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела)

ScrollAmmount = 30; количество скролов для догрузки
InvisAmmount = 30; то же для инвизок.

Скрипт - прямой порт с инжекта моего скрипта, поэтому может показаться корявым для стэлса. Ещё раз повторяю, все замечания приветствуются.

Code: Select all

Program MiningVIPs;
const
M_nothing1 = 'There is no 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_fizzles1 = 'You loosen some rocks'; 
M_needwait = 'You decide not to mine'; 
M_success = 'in your pack.'; 
MaxDistance = 3; 
MaxCount = 10;               // максимальное кол-во физлов одной точки 
PickType1 = $0E85;            // Типы кирок 
PickType2 = $0E86; 

Sunduk = $4013D752;     // Sunduk of ore 
MyBox = $40050E38;      // Box
IronBag = $40077033;
OtherBag = $400767FA;
BestBag = $40076C6B;
EdaBag = $402D75B6;
EdaType = $09BB;      // Pig
DiamondBag = $404C837D;
ToolBag = $401CF9A9;  

SundukX = 5134;
SundukY = 1087; 

BaseX = 5142;
BaseY = 1084;

//MaxWeight = 700;       // Max Weight 
KillElems = 'Yes';          // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела) 
KillAnyElem = 'Yes';          // Убивать чужого элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела) 
InvisType = $0F0E;           // Тип инвизки 
InvisColor = $0631;
VortScType=$1F66;
MDScType=$1F62;
ScColor=$0000;           // Цвет скрола вортекса

ScrollAmmount = 30;
InvisAmmount = 30; 

var 
ScriptStartTime : TDateTime;
PickAxeObj : Cardinal; 
Counter, x, y : Integer;
MaxWeight : Word;
Hungry : Boolean;
ctime: TDateTime;

{$Include 'checklag.inc'}

procedure ToHide; 
  begin 
    if Hidden then exit; 
    if WarMode = true then SetWarMode(false); 
    repeat 
      UseSkill('Hiding'); 
      wait(4500); 
      CheckLag; 
    until Hidden or (not Connected); 
  end; 

procedure UnloadAll;
var
    Colors : array of word;
//    Ores : array of word;
    i : word;
    Ext : boolean;
    Container : cardinal;
    Ammo : integer;
     
//	Colors[0]="0x09F0" ; Gorgan 
//	Colors[1]="0x09D3" ; Steel 
//	Colors[3]="0x0BA7" ; Eldar 
//	Colors[4]="0x08AF" ; Plut 
//	Colors[5]="0x0085" ; Dragon 
//	Colors[6]="0x0060" ; Aqua 
//	Colors[7]="0x09E6" ; Elvin 
//	Colors[8]="0x010F" ; Krinit 
//	Colors[9]="0x09DA" ; Vulkan 
//	Colors[10]="0x09EC" ; Blood Crest 
//	Colors[11]="0x008F" ; Sand Rock 
//	Colors[12]="0x09B9" ; Acid 
//	Colors[13]="0x09A4" ; Crystaline 
begin
  Colors := [$09F0,$09D3,$0BA7,$08AF,$0085,$0060,$09E6,$010F,$09DA,$09EC,$008F,$09B9,$09A4 ];    
//    Ores := [$19BA,$19B8,$19B9,$19B7];

  MoveXY(SundukX,SundukY,false,0,false);
//    ToHide;
  UseObject(Sunduk);
  CheckLag;
  UseObject(MyBox);  
  CheckLag;
  UseObject(EdaBag);
  CheckLag;
AddToSystemJournal('zzzzz');
// Unload Ore
  for i := $19B7 to $19BA do
  begin
    Ext := false;
    repeat
    begin
      FindType(i,backpack);
      if FindCount > 0 Then
      begin
        Container := OtherBag;
        case GetColor(FindItem) of
          $0000 : Container := IronBag;
          $09F0 : Container := BestBag;  // Gorgan 
          $09D3 : Container := BestBag;  // Steel 
          $0BA7 : Container := BestBag;  // Eldar 
          $08AF : Container := BestBag;  // Plut 
          $0085 : Container := BestBag;  // Dragon 
          $0060 : Container := BestBag;  // Aqua 
          $09E6 : Container := BestBag;  // Elvin 
          $010F : Container := BestBag;  // Krinit 
          $09DA : Container := BestBag;  // Vulkan 
          $09EC : Container := BestBag;  // Blood Crest 
          $008F : Container := BestBag;  // Sand Rock 
          $09B9 : Container := BestBag;  // Acid 
          $09A4 : Container := BestBag;  // Crystaline
        end;
//addtosystemjournal('Cont = ' + INTTOSTR(Container) + '   i= '+ INTTOSTR(i));
        MoveItem(FindItem,-1,Container,0,0,0);
        wait(1000);
        CheckLag;             
      end
      else Ext := true;
    end;
    until Ext;
  end;  
  
// Unload Diamonds
  Container := DiamondBag;
  for i := $0F0F  to $0F26 do
  begin
    FindType(i,backpack);
    if FindCount > 0 Then
    begin
      MoveItem(FindItem,-1,Container,0,0,0);
      wait(1000);
      CheckLag;             
    end;
  end;  

  Container := MyBox;

// Unload Empty Bootle
  FindTypeEx($0F0E,$0000,backpack,false);
  if FindCount > 0 Then
  begin
    MoveItem(FindItem,-1,Container,0,0,0);
    wait(1000);
    CheckLag;             
  end;

// Unload Money
  FindType($0EED,backpack);
  if FindCount > 0 Then
  begin
    MoveItem(FindItem,-1,Container,0,0,0);
    wait(1000);
    CheckLag;             
  end;

// Eda
  If Hungry Then begin
    Container := EdaBag;
    UseObject(Container);
    wait(1000);
    FindType(EdaType,Container);
    wait(1000);
//addtosystemjournal('Count = ' + INTTOSTR(finditem));
    if FindCount > 0 Then
    begin
      MoveItem(FindItem,1,backpack,0,0,0);
      wait(1000);
      UseObject(FindItem);             
      CheckLag;
      Hungry := false;
      addtosystemjournal('Запитонил свинку.');
    end;
  end;

//
// Load Resource
//
// Vortex
  Count(VortScType); // FindFullQuantity
addtosystemjournal('Count Vort backpck = ' + INTTOSTR(FindFullQuantity));
  Ammo := FindFullQuantity;
  If Ammo < ScrollAmmount Then begin
    Container := MyBox;
    FindTypeEx(VortScType,ScColor,Container,false);
    wait(1000)
    If FindCount > 0 Then begin
      MoveItem(FindItem,ScrollAmmount-Ammo,backpack,0,0,0);
      wait(1000);
      CheckLag;             
    end;
  end;

// Mass Dispell
  Count(MDScType); // FindFullQuantity
addtosystemjournal('Count MD backpck = ' + INTTOSTR(FindFullQuantity));
  Ammo := FindFullQuantity;
  If Ammo < ScrollAmmount Then begin
    Container := MyBox;
    FindTypeEx(MDScType,ScColor,Container,false);
    wait(1000)
    If FindCount > 0 Then begin
      MoveItem(FindItem,ScrollAmmount-Ammo,backpack,0,0,0);
      wait(1000);
      CheckLag;             
    end;
  end;

// Invis
  Count(InvisType); // FindFullQuantity
addtosystemjournal('Count Invis backpck = ' + INTTOSTR(FindFullQuantity));
  Ammo := FindFullQuantity;
  If Ammo < InvisAmmount Then begin
    Container := MyBox;
    FindTypeEx(InvisType,InvisColor,Container,false);
    wait(1000)
addtosystemjournal('Count Invis MyBox = ' + INTTOSTR(FindFullQuantity));
    If FindCount > 0 Then begin
      MoveItem(FindItem,InvisAmmount-Ammo,backpack,0,0,0);
      wait(1000);
      CheckLag;             
    end;
  end;

  MoveXY(BaseX, BaseY, false, 0, false);
end;

procedure NewPickAxe;
begin
addtosystemjournal('Побрёл за новой киркой...');
  wait(3000);
  MoveXY(SundukX,SundukY,false,0,false);
  UseObject(Sunduk);
  CheckLag;

  UseObject(ToolBag);
  CheckLag;

  FindType(PickType1,ToolBag);
  If  FindCount > 0 Then MoveItem(FindItem,1,backpack,0,0,0);
  MoveXY(BaseX, BaseY, false, 0, false);
end;

//----------- Summon Energy Vortex, kill elem and loot him ----------- 
procedure KillElem; 
var
  m, i : word;
//    ctime: TDateTime;
//	DIM Ore[4] 
//	Ore[0]='0x19B7' ; 1 ore 
//	Ore[1]='0x19BA' ; 2 ore 
//	Ore[2]='0x19B8' ; 3 ore 
//	Ore[3]='0x19B9' ; 4 and more ore 
//	VAR i, Exit,l 

label  povtor, jdat, dispel;
  
begin
    FindDistance := 15;

    UseType($0f0e, $0631); //inviz

//0x000D vortex
povtor:
  ctime := now;
  m := Mana;
  FindType($0010, ground);
  If FindCount > 0 Then
  begin
    WaitTargetObject(finditem);
    UseType($1f66, ScColor);
    while Mana >= m do wait(300);
    If InJournalBetweenTimes('spell fizzles', ctime, Now) > 0 Then goto povtor;
    wait(1000);
  end;
   
jdat:
  FindType($0010, ground)
  wait(300);
  If FindCount > 0 Then
  begin
    FindType($000D, ground)
    wait(300);
    If FindCount > 0 Then
    begin
      wait(1000);
      goto jdat;
    end
    Else goto povtor;
  End;
  
dispel: 
  ctime := now;
  m := Mana;
  FindType($000D, ground)
  If FindCount > 0 Then
  begin
    WaitTargetObject(finditem);
    UseType($1F62, ScColor);
    While Mana >= m do wait(300);
    If InJournalBetweenTimes('spell fizzles', ctime, Now) > 0 Then goto dispel;
  End;
  
  for i := $19B7 to $19BA do
  begin
    FindType(i,ground);
    CheckLag;
    if FindCount > 0 Then
    begin
      if GetDistance(finditem) > 3 Then MoveXY(GetX(finditem), GetY(finditem), false, 0, false);
      MoveItem(FindItem,-1,backpack,0,0,0);
      wait(1000);
      CheckLag;             
    end;
    FindType($0EED,ground);
    CheckLag;
    if FindCount > 0 Then
    begin
      MoveItem(FindItem,-1,backpack,0,0,0);
      wait(1000);
      CheckLag;             
    end;

  end;
  MoveXY(BaseX, BaseY, false, 0, false);
end; 

//
//
// ----------------------------+++++++++++++++++++++++++++-------------------------------
//
//

begin
//sub digitstay(MaxWeight,MaxDistance,KillElemental,KillAnyElemental,ElemSignal,BaseX,BaseY) 
//	VAR x,y,z='0',TileNum='1339' 
//	VAR Last=0,LastTimer, ContFlag=1, Counter, PickAxeType
//	VAR MaxTimer=110, MaxCount=10 ; количество попыток копания
   
  MaxWeight :=700;
  SetRunUnmountTimer(200);
  SetWalkUnmountTimer(400);
  Hungry := false;

  MoveXY(BaseX,BaseY,false,0,false);

//Выбор кирки	
//  FindType(PickType1,backpack);
//  PickAxeObj := FindItem;    
//addtosystemjournal(INTTOSTR(PickAxeObj));

//  If  FindCount = 0 Then FindType(PickType2,Self); 
//  PickAxeObj := FindItem;    
//addtosystemjournal(INTTOSTR(PickAxeObj));
repeat
  For x := -MaxDistance to MaxDistance do 
    For y := -MaxDistance to MaxDistance do 
      begin
        Counter := 0;
        Repeat 
          CheckLag; 
          ToHide; 
          ctime := now;
          WaitTargetTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self));
          UseType(PickType1,0);
//          UseObject(PickAxeObj); 
//          UseObject(ObjAtLayerEx(RhandLayer,self));
          Repeat 
            wait(500); 
          until (InJournalBetweenTimes('Try mining|You put|You loosen|There is no|That is too|OOPS|attacking you|destroyed', ctime, now)<>-1); 
          Counter := Counter+1;

          If (InJournalBetweenTimes('You are hungry', ctime, now) >0) Then Hungry := true;

          If (InJournalBetweenTimes('destroyed', ctime, now) >0) Then NewPickAxe;
          
          If (InJournalBetweenTimes('something with ore|attacking you', ctime, now) > 0) then KillElem; 

          FindType($0010, ground)
          If FindCount > 0 Then KillElem; 

          If Weight > MaxWeight then UnloadAll; 

        Until (InJournalBetweenTimes('Try mining|There is no|That is too', ctime , now)<>-1) OR (Counter > MaxCount);
      end;
until Dead; 
end.
Last edited by Savage on 05.07.2011 8:29, edited 1 time in total.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

идея кул но шахти вип больше не продают с этого года.
Savage
Neophyte
Neophyte
Posts: 18
Joined: 27.09.2010 5:57
Contact:

Post by Savage »

Кому надо было, тот купил, продлил на будущее :)
Beren
Novice
Novice
Posts: 108
Joined: 08.09.2008 1:07

Post by Beren »

впервые тут вижу использлвания goto )))
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

надеюсь, ты только наблюдением и ограничишься.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Post by MuDaCk »

а разве в паскале есть гото? помню в школе чтото такое учили...
А зачем пользоваться гоуту, если можно и без него? :?:
My name is Игорёшка Image
Пишу скрипты за едуImage
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

увы, есть.
незнаю, зачем они впихнули в высокий язык низкоуровневые команды - но они там есть.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

shinma wrote:идея кул но шахти вип больше не продают с этого года.
Guru нашёл другой способ выбивания денег из игроков? :)
Quarko
Neophyte
Neophyte
Posts: 10
Joined: 07.03.2010 12:44
Contact:

Post by Quarko »

Vizit0r wrote:увы, есть.
незнаю, зачем они впихнули в высокий язык низкоуровневые команды - но они там есть.
Image
Гениальные изобретения обычно сопровождаются не фразой "Эврика!" а фразой "Странно...".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

ну примерно так, да)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Savage
Neophyte
Neophyte
Posts: 18
Joined: 27.09.2010 5:57
Contact:

Post by Savage »

С точки зрения процессора гото ничем не хуже любой другой команды. В данном случае, применение гото вполне оправдано. У кого есть предложение чем заменить данный блок скрипта, с радостью посмотрю. :D
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

еще одной парой циклов.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Post by CFA »

Savage wrote:С точки зрения процессора гото ничем не хуже любой другой команды. В данном случае, применение гото вполне оправдано. У кого есть предложение чем заменить данный блок скрипта, с радостью посмотрю. :D
в данном случае совершенно не оправдано, получились обычные циклы, только через goto
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

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