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

Досвидание (прощальное фиесто)

Only working scripts
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Досвидание (прощальное фиесто)

Post by v26RuS »

Так как я уже почти перестал играть захожу так поздороваться да пообщаться выкладываю все свои скриптики....

Все скрипты тестировались на сервере ДРВ и играл я там-же)) на момент моей игры все скрипты работали.

Alchemy

Code: Select all

Program AlchemyDRW; 
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.1
{$Include 'all.inc'}
var
 STime: TDateTime;
 q: integer;
 AlchemyFlag : Boolean;  

const 
WhatYouDo = 'Total Mana'; // Что делаем
TypBottles = $0F0E;  // Тип пустых бутылок
TypPotion = $0F0A;   // Тип готовых бутылок
ColPotion = $0F0A;   // Цвет готовых бутылок
TypReag= $0F87;  // Тип реагентов из которых делаем
CountRegs = 10; // Какое количество реагентов брать
CountBottles = 5; // Какое количество пустых бутылок брать
Sunduk_reags_bottels = $40053D27; // ИД сундука с которого берем бутылки и реагенты
Sunduk_craft = $40053D27;  // ИД сундука в который кладем готовый продукт


procedure check_reag; 
 begin 
  FindType(TypReag,Backpack); 
  if (FindCount=0) OR (Count(TypReag)<10) then 
    begin 
      UseObject(Sunduk_reags_bottels); 
      wait(250); 
      FindType(TypReag,Sunduk_reags_bottels); 
      if (FindCount>0) and (CountEx(TypReag,$0000,Sunduk_reags_bottels)>100) then 
        begin 
          MoveItem(FindItem,CountRegs,Backpack,0,0,0); 
          wait(250); 
          AddToSystemJournal('Добрали '+IntToStr(CountRegs)+' реагентов. На данный момент имеем '+IntToStr(Count(TypReag))+' штук. Осталось ещё '+IntToStr(CountEx(TypReag,$0000,Sunduk_reags_bottels))+' реагентов.'); 
        end 
      else 
        AddToSystemJournal('Ошибка во время добора реагентов.'); 
	AlchemyFlag := false;
    end 
 end; 

procedure check_bootle; 
 begin 
  FindTypeEx(TypBottles,$0000,Backpack,false); 
  if (FindCount=0) OR (Count(TypBottles)<10) then 
    begin 
      UseObject(Sunduk_reags_bottels); 
      wait(250); 
      FindTypeEX(TypBottles,$0000,Sunduk_reags_bottels,false); 
      if (FindCount>0) and (CountEx(TypBottles,$0000,Sunduk_reags_bottels)>100) then 
        begin 
          MoveItem(FindItem,CountBottles,Backpack,0,0,0); 
          wait(250); 
          AddToSystemJournal('Добрали '+IntToStr(CountBottles)+' бутылок. На данный момент имеем '+IntToStr(CountEx(TypBottles,$0000,backpack))+' штук. Осталось ещё '+IntToStr(CountEx(TypBottles,$0000,Sunduk_reags_bottels))+' бутылок.'); 
        end 
      else 
        AddToSystemJournal('Ошибка во время добора реагентов.'); 
	AlchemyFlag := false;
    end 
 end; 

procedure craft_bottle; 
 begin 
      FindTypeEx(TypPotion,ColPotion,Backpack,false); 
      if (FindCount>0) AND (CountEx(TypPotion,ColPotion,backpack) > 9) then 
        begin 
          MoveItem(FindItem,1,Sunduk_craft,0,0,0); 
          wait(800); 
      end; 
 end; 


Begin
AlchemyFlag := true;
CancelMenu;
wait(500)
Automenu('What',WhatYouDo);
repeat

check_reag;
check_bootle;

UseObject(FindType(TypReag,Backpack))
Wait(500);
STime := Now;
	repeat
	wait(500)
	q := q+1;
	checksave;
	until (InJournalBetweenTimes('You put', STime, Now)<>-1) or (InJournalBetweenTimes('You toss', STime, Now)<>-1) or (AlchemyFlag = false) or (q > 300);

craft_bottle;

until (AlchemyFlag = false) or Dead;

FullDisconnect;

End.
autobuy

Code: Select all

program autobuy; 
{$Include 'all.inc'} 
{$Include 'checkflow.inc'}
{$Include 'move.inc'}

const 
   kolvo = 300;
   s_reag = $403BCB95;
   r_home = $4029A3FA;
   rmax = 3;
   b=0;
   run=$1F14;
   br_bag = $40325CCF;
   r_bag = $40325D10;

type 
buy_rail = array[1..rmax] of Integer;
rune_rail = array[1..30] of Integer;
regs_rail = array[1..3] of Integer;
ven_rail = array[1..2] of Integer;


var 
buy : buy_rail;
rune : rune_rail;
rumax, r, oldx, oldy, mark_key : Integer;
r_homes : Cardinal;
Times : TDateTime; 

procedure IntRune;
var r : integer;
begin
AddToSystemJournal('Инициализация рун');
UseObject(r_bag);
wait(1000);
 findtype(run,r_bag);
 rumax:=FindCount;
 for r:=1 to rumax do
  begin
     checksave;
  findtype(run,r_bag);
  rune[r]:=FindItem;
  Ignore(FindItem);
 end;
AddToSystemJournal('Инициализированно '+IntToStr(rumax)+' рун');
IgnoreReset;
end;

procedure Intbuy;
begin
AddToSystemJournal('Инициализация покупок');
//buy[1] := $0F7A; //BP
buy[2] := $0F88; //NS
buy[3] := $0E34; //BLS
//buy[4] := $0F7B; //BM
//buy[5] := $0F84; //GA
//buy[6] := $0F85; //GI
//buy[7] := $0F86; //MR
buy[1] := $0F87; //NW
if not GetAutoBuyMode then SetAutoBuyMode(true); 
SetAutoBuyDelay(2); 
end;

procedure Reags;
var Reg : regs_rail;
i : Integer;
begin
 Reg[1]:=$0F7B;
 Reg[2]:=$0F7A;  
 Reg[3]:=$0F86; 
 AddToSystemJournal('Берем реги');
 Useobject(s_reag);
 wait(1000);
 for i:=1 to 3 do
  begin
  findtype(Reg[i],backpack)
  if (FindCount = 0) or (Count(Reg[i]) < 20) then
  begin
  findtype(Reg[i],s_reag);
  if findcount > 0 then
   begin
     checksave;
   MoveItem(FindItem,50,Backpack,0,0,0);
   wait(800); 
  end;
 end;
 end;
end;
 
procedure check_mana;
begin
AddToSystemJournal('Проверка маны');
 if Mana < 30 then
  begin
  repeat
   useskill('Meditation');
     checksave;
   wait(5000);
  until Mana = Int;
 end;
end;

procedure vendor_buy;
var ven : ven_rail;
vx,vy,i,z,bs : Integer;
vn : string;
begin
AddToSystemJournal('Ищем вендоров и покупаем');
 ven[1]:=$0190;
 ven[2]:=$0191;
 FindDistance:=5;
 ignore(Self);
 for i:=1 to 2 do
 begin
  findtype(ven[i],ground)
  if FindCount > 0 then
  begin
   for z:=1 to FindCount do
   begin
    FindType(ven[i],ground);
    ClickOnObject(FindItem);
    vx:=GetX(FindItem);
    vy:=GetY(FindItem);
    vn:=GetName(FindItem);
    if (GetDistance(FindItem) > 3) then
    begin
     checksave;
     move(vx, vy, 2);
    end;
    for bs:=1 to rmax do
    begin
     checksave;
     AutoBuy(buy[i],$0000,kolvo); 
     UOSay(vn+' buy');
     AutoBuy(buy[i],$0000,0); 
     wait(2000);
    end;
   UOSay(vn+' bye');
   Ignore(FindItem);
   wait(1000);
   end;
  end;
 end;
IgnoreReset;
end;

procedure razgruz;
var i,cnt : Integer;
begin
AddToSystemJournal('Разгрузка');
 for i:=1 to rmax do
 begin
  findtype(buy[i],backpack);
  if FindCount > 0 then
  begin
   cnt:=GetQuantity(FindItem);
     checksave;
   moveitem(FindItem,cnt,s_reag,0,0,0);
   wait(800);
  end;
 end;
end;

begin 
 AddToSystemJournal('Запуск скрипта');
 Intbuy;
 IntRune;
 r_homes:=r_home;
useobject(r_bag);
wait(1000);
useobject(br_bag);
wait(1000);
 repeat
  Reags;

  findtype(run,r_bag);
  rumax:=FindCount;
  for r:=1 to rumax do
  begin
   oldx:=GetX(Self);
   oldy:=GetY(Self);
   AddToSystemJournal('Прыгаем по руне №'+IntToStr(r));
   repeat
     checksave;
    check_mana;
    cast('Recall');
    WaitForTarget(1500); 
    TargetToObject(Rune[r]);
    wait(6000);
   until (oldx <> GetX(Self)) AND (oldy <> GetY(Self));

   ClearJournal;
   wait(500);
   Times:=Now;
   ClickOnObject(Rune[r]);
   wait(4000);
   if (inJournalBetweenTimes('(2 charges)', Times, Now) <> -1) or (inJournalBetweenTimes('(1 charges)', Times, Now) <> -1) then
    begin
    AddToSystemJournal('Ремарк руны №'+IntToStr(r));
    UseObject(br_bag)
    wait(1000);
    findtype(run,br_bag)
    wait(1000);
    moveitem(FindItem,1,Backpack,0,0,0);
    wait(1000);
    repeat
     checksave;
     check_mana;
     FindType(run,backpack);
     cast('Mark');
     WaitForTarget(1500); 
     TargetToObject(FindItem);
     wait(10000);
     Times:=Now;
     mark_key:=1;
     if (inJournalBetweenTimes('spell', Times, Now) <> -1) then
     begin
      mark_key:=0;
     end;
    until mark_key=1;
   mark_key:=0;
   DropHere(Rune[r]);
   Rune[r]:=FindItem;
   moveitem(FindItem,1,r_bag,0,0,0);
   wait(800);
   end;
   vendor_buy;
  end;

   oldx:=GetX(Self);
   oldy:=GetY(Self);
   AddToSystemJournal('Летим домой');
   repeat
     checksave;
    check_mana;
    cast('Recall');
    WaitForTarget(1500); 
    TargetToObject(r_homes);
    wait(6000);
   until (oldx <> GetX(Self)) AND (oldy <> GetY(Self));
   ClearJournal;
   wait(500);
   Times:=Now;
   ClickOnObject(r_homes);
   wait(2000);
   if (inJournalBetweenTimes('(2 charges)', Times, Now) <> -1) or (inJournalBetweenTimes('(1 charges)', Times, Now) <> -1) then
    begin
    AddToSystemJournal('Ремарк руны домой');
    UseObject(br_bag)
    wait(1000);
    findtype(run,br_bag)
    wait(1000);
    moveitem(FindItem,1,Backpack,0,0,0);
    wait(1000);
    repeat
     checksave;
     check_mana;
     FindType(run,backpack);
     cast('Mark');
     WaitForTarget(1500); 
     TargetToObject(FindItem);
     wait(8000);
     Times:=Now;
     mark_key:=1;
     if (inJournalBetweenTimes('spell', Times, Now)  <> -1) then
     begin
      mark_key:=0;
     end;
    until mark_key=1;
   mark_key:=0;
   DropHere(r_homes);
   r_homes:=FindItem;
   wait(800);
   end;
  razgruz;
  wait(1000);
  repeat
   useskill('Hiding');
     checksave;
   wait(5000);
  until Hidden;
  wait(350000);
 until Dead;
End.
Camping

Code: Select all

Program CampingDrw; 
{$Include 'all.inc'} 
// (c) v26RuS (Galiano{ASTARTA} DRW)
// Простенький скрипт для прокачки кемпинга, 
// Становимся дома около сундука откуда брать хворост, он берет хворос летить к месту выкладки
// передвигается по направлению на цифровой клаве 1 (нуп пад)
// кончаеться хворост летит домой добирает и по новой при неуспешном поджиге пробует еще раз.
// Доходит до финальнай кординаты опять летит домой добираеться и по новой
const 
Hvorost = $0DE1; // Тип хвороста 
Sunduk_of_hvorost = $403BCB95; // Сундук откуда брать хворост
trash_id=$404A3ED8;

var
 mx: integer;
 CampingFlag : Boolean;  
 x, y : Integer;

   procedure CheckDead; 
Begin 
if Dead then 
begin 
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now)); 
CampingFlag := false;
FullDisconnect; 
end 
      end; 


 
procedure doborhv;
 begin 
  FindType(Hvorost,Backpack); 
  if (FindCount=0) OR (Count(Hvorost)<10) then 
    begin 
      UseObject(Sunduk_of_hvorost); 
      wait(250); 
      FindType(Hvorost,Sunduk_of_hvorost); 
      if (FindCount>0) and (CountEx(Hvorost,$0000,Sunduk_of_hvorost)>10) then 
        begin 
          MoveItem(FindItem,200,Backpack,0,0,0); 
          wait(250); 
          AddToSystemJournal('Добрали 200 хвороста. На данный момент имеем '+IntToStr(Count(Hvorost))+' штук. Осталось ещё '+IntToStr(CountEx(Hvorost,$0000,Sunduk_of_hvorost))+' хвороста.'); 
        end 
      else 
        AddToSystemJournal('Ошибка во время добора хвороста.'); 
	CampingFlag := false;
    end;
end;


procedure clear;
begin
addtosystemjournal('Clear');
FindDistance:=5;
repeat
findtype($0DE9,ground);
if findcount > 0 then
begin
MoveItem(FindItem,1,trash_id,0,0,0); 
wait(800);
end;
findtype($0DE9,ground);
until FindCount=0;
end;
   procedure CheckHide; 
   begin 
      if Hidden then exit; 
      if WarMode = true then SetWarMode(false); 
      repeat 
         AddToSystemJournal('Прячемся...'); 
         UseSkill('Hiding'); 
         wait(4500); 
         checksave; 
      until Hidden or (not Connected); 
   end; 

BEGIN 
FindDistance:=5;
  repeat
    checkdead;
    doborhv;
	mx := GetX(self);
	 for x := -3 to 3 do
	 begin
	  for y := -2 to 2 do
	  begin
  		CheckHide;
		FindType(Hvorost,Backpack);
		if Findcount = 0 then exit;
		Drop(FindItem,1,GetX(self)+x, GetY(self)+y, GetZ(self));
		AddToSystemJournal('Выложили хворост');
		wait(500);
		FindType(Hvorost,ground);
		 repeat
		  AddToSystemJournal('Пытаюсь зажечь хворост');
		  UseObject(FindItem);
		  wait(2000)
  		  FindType(Hvorost,ground);
		 until FindCount < 1;
		 AddToSystemJournal('Зажгли хворост');
		 wait(500)
	  end;
	 end;
  until 1<>1;

END.
Carpentry

Code: Select all

Program Carpentry_fishing_pole; 

const 
Sunduk=$403FED23;
Sunduk_With_logs_and_Tools=$403FCF27; 
Sunduk_With_Empty_Bags=$40325D14; 
Sunduk_With_Full_Bags=$404D54D9; 
Bag=$0E76; 
Tools=$1034; 
log=$1BDD; 
Pig=$09BB; 
Pole=$0DBF; 
color=$-1; 


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


procedure Check_Pole; 
 begin 
   FindType(Pole,Backpack); 
   if FindCount>0 then 
     begin 
       MoveItem(FindItem,1,poles_bag,0,0,0); 
       wait(500); 
     end 
 end; 

procedure Get_Bag; 
 begin 
   FindType(Bag,ground); 
   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,ground,0,0,0); 
           wait(1000); 
           UseObject(FindItem); 
           wait(1000); 
         end 
     end    
   poles_bag:=FindType(Bag,ground); 
 end; 


procedure Out_Bag; 
 begin 
 AddToSystemJournal('Мешок заполнен берём новый'); 
   FindType(Bag,ground); 
   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>50) 
   end 
 end; 


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


procedure Check_logs; 
 begin 
  FindType(log,Backpack); 
  if (FindCount=0) OR (Count(log)<1) then 
    begin 
      UseObject(Sunduk_With_logs_and_Tools); 
      wait(1000); 
      FindType(log,Sunduk_With_logs_and_Tools); 
      if (FindCount>0) and (CountEx(log,color,Sunduk_With_logs_and_Tools)>1) then 
        begin 
          MoveItem(FindType(log,Sunduk_With_logs_and_Tools),100,Backpack,0,0,0); 
          wait(1000); 
          AddToSystemJournal('Добрали 100 логов. На данный момент имеем '+IntToStr(Count(log))+' штук. Осталось ещё '+IntToStr(CountEx(log,color,Sunduk_With_logs_and_Tools))+' Логов. l='+IntToStr(l)+'; Count='+IntToStr(Count(Pole))+';'); 
        end 
      else 
        AddToSystemJournal('Ошибка во время добора Логов.'); 
        exit; 
    end 
   FindType(log,Ground); 
   if FindCount>0 then 
     begin 
       MoveItem(FindItem,0,Sunduk_With_logs_and_Tools,0,0,0); 
       wait(500); 
     end 
 end; 


procedure Check_Food; 
 begin 
  UseObject(Sunduk_With_logs_and_Tools) 
  wait(250); 
  FindType(Pig,Sunduk_With_logs_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_logs_and_Tools,0,0,0); 
    end 
  else 
    AddToSystemJournal('a Pig не был найден в сундуке.'); 
 end; 


procedure Check_Last_Bag; 
  begin 
    FindType(Bag,ground); 
    if FindCount>0 then 
      begin 
        UseObject(FindItem); 
        wait(500) 
        poles_bag:=FindType(Bag,ground);  
        FindType(Pole,poles_bag); 
        l:=FindCount; 
        AddToSystemJournal('В мешке '+IntToStr(l)+' Удочек.'); 
      end 
  end;  

procedure Check_Tools; 
  begin 
    FindType(Tools,backpack); 
    if FindCount=0 then 
      begin 
        FindType(Tools,Sunduk_With_logs_and_Tools); 
	if FindCount > 0 then
        begin
        moveitem(FindItem,1,backpack,0,0,0);
        end
      end 
  end;  


Begin 
 ClearJournal; 
 CancelMenu; 
 AutoMenu( 'Carpentry' , 'Weapons & Tools' ); 
 AutoMenu( 'Weapons & Tools' , 'fishing pole' );
 FindDistance:=1; 
 while not Dead do 
   begin 
useobject(sunduk);
wait(1000);
useobject(Sunduk_With_logs_and_Tools); 
wait(1000);
useobject(Sunduk_With_Empty_Bags); 
wait(1000);
useobject(Sunduk_With_Full_Bags); 
wait(1000);
     Check_Last_Bag; 
     Check_Tools;
     Get_Bag; 
     repeat 
       Check_logs; 
       k:=0; 
       TimeStart:=Now; 
       UseObject(FindType(Tools,Backpack)); 
       repeat 
         wait(100); 
         k := k + 1; 
         Check_World_Save; 
       until (InJournalBetweenTimes('You put|fail', TimeStart, Now)<>-1) or (k > 300); 
       wait(500); 
    if InJournal('put')<>-1 then 
         begin 
           l:=l+1; 
           Check_Pole; 
           AddToSystemJournal(IntToStr(CountEx(Pole,$0000,poles_bag))+'  удочек на данный момент в мешке.'); 
         end 
       ClearJournal; 
     until l=255  
     if l=255 then 
       begin 
         l:=0; 
         Out_Bag; 
       end 
   end    
End.
Blacksmith All Daggers

Code: Select all

Program color_daggers;
{$Include 'all.inc'} 

const
rmax = 12;
Cnt=$403FED23; //Сундук с сундуками
Container=$404261A5; //Сундук с ингами
Containerb=$40325D14; //Сундук с багами
Unload=$404D54D9; //Куда все кидать
CountIng=100; // Сколько ингов брать
bag=$0E76; //Тип бага
dagger=$0F51; //Тип дагера


type 
in_rail = array[1..rmax] of String;
i_rail = array[1..rmax] of Integer;

var
ColorIng,TypeIng : i_rail;
NameIng : in_rail;
i, l : Integer;
Flag1 : Boolean;  
k : integer;
TimeStart : TDateTime;
dagger_bag : Cardinal; 


procedure Ruda_int;
begin
NameIng[1]:=' ';
NameIng[2]:='Rusty ';
NameIng[3]:='Old Copper ';
NameIng[4]:='Dull Copper ';
NameIng[5]:='Copper ';
NameIng[6]:='Bronze ';
NameIng[7]:='Silver ';
NameIng[8]:='Shadow ';
NameIng[9]:='Agapite ';
NameIng[10]:='Rose ';
NameIng[11]:='Blood Rock ';
NameIng[12]:='Verite';


ColorIng[1]:=$0000;
ColorIng[2]:=$0750;
ColorIng[3]:=$0590;
ColorIng[4]:=$060A;
ColorIng[5]:=$FFFF;
ColorIng[6]:=$0488;
ColorIng[7]:=$0000;
ColorIng[8]:=$096B;
ColorIng[9]:=$0193;
ColorIng[10]:=$0014;
ColorIng[11]:=$04C2;
ColorIng[12]:=$07D5;

TypeIng[1]:=$1BEF;
TypeIng[2]:=$1BEF;
TypeIng[3]:=$1BEF;
TypeIng[4]:=$1BEF;
TypeIng[5]:=$1BE3;
TypeIng[6]:=$1BEF;
TypeIng[7]:=$1BF5;
TypeIng[8]:=$1BEF;
TypeIng[9]:=$1BEF;
TypeIng[10]:=$1BEF;
TypeIng[11]:=$1BEF;
TypeIng[12]:=$1BEF;

AddToSystemJournal('Загружена руда');
end;

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

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

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

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

procedure Checkrd(TypeIngs,ColorIngs: Integer; NameIngs :  String); 
 begin 
  FindTypeEx(TypeIngs,ColorIngs,Backpack,False);
  if (FindCount=0) OR (GetQuantity(FindItem)<3) then 
    begin 
      AddToSystemJournal('Добираем инги.') 
      UseObject(cnt); 
      wait(500); 
      UseObject(Container); 
      wait(1000); 
      FindTypeEx(TypeIngs,ColorIngs,Container,False); 
      if (FindCount>0) and (GetQuantity(FindItem)>3) then 

        begin 
          MoveItem(FindItem,CountIng,Backpack,0,0,0); 
          wait(1000); 
          AddToSystemJournal('Добрали '+IntToStr(CountIng)+' '+NameIngs+'. На данный момент имеем '+IntToStr(CountEx(TypeIngs,ColorIngs,backpack))+' штук. Осталось ещё '+IntToStr(CountEx(TypeIngs,ColorIngs,Container))+' '+NameIngs+'. l='+IntToStr(l));
	  exit;
      end;

      FindType(TypeIngs,Backpack); 
      if FindCount > 0 then
      begin
      MoveItem(FindItem,0,Container,0,0,0); 
      end;
        AddToSystemJournal('Закончилась руда: '+NameIngs); 
        Flag1 := false;
        exit; 

 
  end;
   FindType(TypeIngs,Ground); 
   if FindCount>0 then 
     begin 
       MoveItem(FindItem,0,Container,0,0,0); 
       wait(500); 
     end 

 end; 




Begin

 Ruda_int;
 for i:= 1 to 12 do
 begin
  AddToSystemJournal(IntToStr(i)+' руда '+NameIng[i]);
 UseObject(cnt); 
 wait(1000); 
 UseObject(Container);
 wait(1000);
  FindTypeEx(TypeIng[i],ColorIng[i],Container,false);
  if (FindCount > 0) AND (CountEx(TypeIng[i],ColorIng[i],Container) > 3) then
  begin
   CancelMenu;
   if i = 1 then
   begin
    AutoMenu('Blacksmithing','Weapons');
    AutoMenu('Weapons','Swords');
    AutoMenu('Swords','dagger');
   end;
   if i > 1 then
   begin
    AutoMenu('Blacksmithing','Colored');
    AutoMenu('Colored',NameIng[i]+' Weapons');
    AutoMenu(NameIng[i]+' Weapons',NameIng[i]+'Swords');
    AutoMenu(NameIng[i]+' Swords',NameIng[i]+' Dagger');
   end;
   AddToSystemJournal('Делаем дагеры из: '+NameIng[i]);
   Flag1 := true;
  repeat
   Check_Last_Bag;
   Get_bag;
   if(CountEx(TypeIng[i],ColorIng[i],backpack)<3) then
   begin
   Checkrd(TypeIng[i],ColorIng[i],NameIng[i]);
   end;
   checksave;
   TimeStart:=Now; 
   k:=0;
 if Flag1 = true then
 begin
   UseObject(FindTypeEx(TypeIng[i],ColorIng[i],backpack,false));
   repeat
    wait(500);
    k := k + 1; 
    checksave;
  until (InJournalBetweenTimes('You put|failed', TimeStart, Now)<>-1) or (k > 50); 

  wait(200);

  if InJournalBetweenTimes('You put', TimeStart, Now)<>-1 then
  begin
   Check_dagger;
  end;

  if l=255 then
  begin
   l:=0;
   Out_Bag;
  end;
  end;
  until Flag1 = false;
wait(3000);
  end;
 end;

End.
Fishing

Code: Select all

program Fishing; 
// (c) v26RuS (Galiano{ASTARTA} DRW) 
// Залазием на лодку прописываем трюм кидаем beckpack с пустыми сумками и вперед плывет в направлении цифры 1 на нумпаде) 
{$Include 'all.inc'} 

const 
HatchID = $40338556;         // Сериал трюма 
FPoleType = $0DC0;            // Тип удочки 
BoxOfBags = $0E75;            // тип ящика с мешками 
EmptyBags = $0E76;            // тип пустого мешка 
{Сообщения} 
Mes1 = 'You pull out'; 
Mes2 = 'You fish a while, but fail'; 
Mes3 = 'There are no fish here.'; 
Mes4 = 'That is too far away.'; 
Mes5 = 'Try fishing in water.'; 
Mes6 = 'Вы не смогли выловить'; 

var 
x, y, k, n, d, s, scard, snom, m1, m2, m3, m4, m5, m6 : integer; 
ctime : TDateTime; 
CurBagID : Cardinal; 
CurBoxID : Cardinal; 
temp1 : Cardinal; 
FishResult : array[1..8] of Cardinal; 
SumResult : array[1..10] of Integer; 
FlagMagic : Integer; 
FoodID : Cardinal; 

   function GetEmptyBag : Cardinal; 
   begin 
      Result := 0; 
      UseObject(HatchID); 
      wait(1000); 
      checksave; 
      CurBoxID := findtype(BoxOfBags, HatchID); 
      if CurBoxID = 0 then 
      begin 
         Addtosystemjournal( 'Не смог найти ящик с мешками'); 
         exit; 
      end; 
      UseObject(CurBoxID); 
      wait(1000); 
      checksave; 
      temp1 := findtype(EmptyBags, CurBoxID); 
      if temp1 = 0 then 
      begin 
         Addtosystemjournal( 'Не смог найти мешок в ящике'); 
         exit; 
      end; 
      MoveItem(finditem, 1, HatchID, 0, 0, 0); 
      wait(1000); 
      checksave; 
      Result := temp1; 
   end; 

procedure virar; 
var TimeInterno : TDateTime; 
   loop1, loop2 : integer; 
    
begin 
   TimeInterno := Now; 
   UOSay('Turn Left'); 
   wait(200); 
   if (inJournalBetweenTimes('boat|cannot', TimeInterno, Now) >= 0) then //Obstaculo 
   begin 
      TimeInterno := Now; 
      loop1 := 0; 
      UOSay('Right'); 
      repeat 
         wait(100) 
         loop1 := loop1 + 1; 
      until (inJournalBetweenTimes('boat|cannot|stopped', TimeInterno, Now) >= 0) OR (loop1 >= 50); 
      if (loop1 < 50) then //Obstaculo a direita. 
      begin 
         TimeInterno := Now; 
         loop2 := 0; 
         UOSay('Left'); 
         repeat 
            wait(100) 
            loop2 := loop2 + 1; 
         until (inJournalBetweenTimes('boat|cannot|stopped', TimeInterno, Now) >= 0) OR (loop2 >= 50); 
         if (loop2 < 50) then //Obstaculo a esquerda. 
         begin 
            UOSay('Back'); 
            wait(5000); 
            virar; 
         end; 
      end; 
   end; 
end; 


procedure mover; 
var TimeInterno : TDateTime; 
   loop : integer; 
              
begin 
   TimeInterno := Now; 
   loop := 0; 
   UOSay('Forward'); 
   Addtosystemjournal('Переплываем на новое место ловли рыбы') 
   repeat 
      wait(100) 
      loop := loop + 1; 
   until (inJournalBetweenTimes('stopped', TimeInterno, Now) >= 0) OR (loop >= 150); 
   if (loop < 150) then //Obstaculo a frente. 
   begin 
      virar; 
      mover; 
   end 
   else 
   begin 
      UOSay('Stop'); 
      wait(200); 
   end; 
end; 

        
begin 
   for k := 1 to 10 do 
      SumResult[k] := 0; 
   FishResult[1] := $09CC;         // рыба 
   FishResult[2] := $09CF;         // рыба 
   FishResult[3] := $09CE;         // рыба 
   FishResult[4] := $09CD;         // рыба 
   FishResult[5] := $14EB;         // карты 
   FishResult[6] := $14EC;         // карты 
   FishResult[7] := $0DCA;         // fish net 
   FishResult[8] := $0DD6;         // prize 
   scard := 0; 
   CurBagID := GetEmptyBag; 
   if CurBagID = 0 then exit; 
   snom := 1; 
   UseObject(CurBagID); 
   wait(1000); 
   checksave; 
   s := 0; 
   repeat 
      // подсчет количества итемов в трюме 
      findtype($FFFF,HatchID); 
      if findcount > 0 then s := s + 1; 
      for k := 1 to 8 do 
      begin 
         if (GetType(finditem) = FishResult[7]) then 
         begin 
            SumResult[8] := GetQuantity(finditem); 
            break; 
         end; 
         if (GetType(finditem) = FishResult[8]) then 
         begin 
            SumResult[9] := GetQuantity(finditem); 
            break; 
         end; 
         if GetType(finditem) = FishResult[k] then SumResult[k] := GetQuantity(finditem); 
      end; 
      ignore(finditem); 
      wait(50); 
   until findcount = 0; 
   ignorereset; 
   repeat 
      UseObject(HatchID); 
      wait(1000); 
      checksave; 
FoodID := FindType($097B,backpack); 
wait(500) 
UseObject(FoodID); 
wait(500) 
UseObject(FoodID); 
      for x := -6 to 6 do 
      begin 
         for y := -6 to 6 do 
         begin 
            // Если схема облова другая - уберите следующую строку: 
//            if (y < 2) AND (x > -3) AND (x < 3) then continue; 
            repeat 
               if scard >= 250 then 
               begin 
                  // взять новый мешок 
                  CurBagID := GetEmptyBag; 
                  if CurBagID = 0 then exit; 
                  UseObject(CurBagID); 
                  wait(1000); 
                  checksave; 
                  scard := 0; 
                  s := s + 1; 
                  snom := snom + 1; 
               end; 
               if TargetPresent then CancelTarget; 
               waitconnection(3000); 
               ctime := Now; 
               UseObject(ObjAtLayerEx(LHandLayer,self)); 
               WaitForTarget(5000); 
               If TargetPresent then TargetToTile(0, GetX(self)+x, GETY(self)+y, 251); 
               k := 0; 
               repeat 
                  wait(500); 
                  k := k + 1; 
                  checksave; 
                  m1 := InJournalBetweenTimes(Mes1, ctime, Now); 
                  m2 := InJournalBetweenTimes(Mes2, ctime, Now); 
                  m3 := InJournalBetweenTimes(Mes3, ctime, Now); 
                  m4 := InJournalBetweenTimes(Mes4, ctime, Now); 
                  m5 := InJournalBetweenTimes(Mes5, ctime, Now); 
                  m6 := InJournalBetweenTimes(Mes6, ctime, Now); 
               until (k > 20) or (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1); 
          if k > 20 then 
      begin 
         wait(4000); 
         k := 0; 
               ClearJournal; 
         Addtosystemjournal('Лаг с западанием на ловлю') 
          end; 

               if m1 <> -1 then 
               begin 
                  k := 1; 
                  for n := 1 to 8 do 
                  begin 
                     findtype(FishResult[n],ground); 
                     if finditem = 0 then continue; 
                     d := GetQuantity(finditem); 
                     if (n = 5) OR (n = 6) then 
                        MoveItem(finditem, d, CurBagID, 0, 0, 0) 
                     else 
                        MoveItem(finditem, d, HatchID, 0, 0, 0); 
                     wait(1000); 
                     checksave; 
                     // Перепроверим, переместился ли объект 
                     findtype(FishResult[n],ground); 
                     if finditem > 0 then 
                     begin 
                        // Раз не переместился - значит был реконнект 
                        UseObject(HatchID); 
                        wait(1000); 
                        checksave; 
                        UseObject(CurBagID); 
                        wait(1000); 
                        checksave; 
                        d := GetQuantity(finditem); 
                        if (n = 5) OR (n = 6) then 
                           MoveItem(finditem, d, CurBagID, 0, 0, 0) 
                        else 
                           MoveItem(finditem, d, HatchID, 0, 0, 0); 
                        wait(1000); 
                        checksave; 
                     end; 
                     if d = 0 then d := 1; 
                     if FlagMagic = 1 then SumResult[8] := SumResult[8] + d; 
                     if FlagMagic = 2 then SumResult[9] := SumResult[9] + d; 
                     if FlagMagic = 3 then SumResult[10] := SumResult[10] + d; 
                     if FlagMagic = 0 then SumResult[n] := SumResult[n] + d; 
                     if (n = 5) OR (n = 6) then scard := scard + 1; 
                     // Сообщения о результатах лова: 
                     if (n <= 4) and (FlagMagic = 0) then Addtosystemjournal( inttostr(x) + inttostr(y) + ': сбросил в трюм ' + inttostr(d) + ' рыбы типа ' + inttostr(n) + ' из ' + inttostr(SumResult[n]) + '. В трюме ' + inttostr(s) + ' итемов'); 
                     if (n = 5) OR (n = 6) then Addtosystemjournal( inttostr(x) + inttostr(y) + ': сбросил в мешок N' + inttostr(snom) + ' карту. Всего в мешке ' + inttostr(scard) + ' карт'); 
                     if (n = 7) then Addtosystemjournal( inttostr(x) + inttostr(y) + ': сбросил в трюм ' + inttostr(d) + ' fish net из ' + inttostr(SumResult[9]) + '. В трюме ' + inttostr(s) + ' итемов'); 
                     if (n = 8) then Addtosystemjournal( inttostr(x) + inttostr(y) + ': сбросил в трюм ' + inttostr(d) + ' prize or rate fish из ' + inttostr(SumResult[8]) + '. В трюме ' + inttostr(s) + ' итемов'); 
                     if s > 250 then exit; 
                  end; 
               end; 
            until (m3<>-1) or (m4<>-1) or (m5<>-1); 
         end; 
      end; 
      ClearJournal; 
      Mover; 
      wait(500); 
   until False; 
End.
Lumber

Code: Select all

Program LumberDRW; 
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.4

{$Include 'all.inc'}
type LumbRecord = Record 
   x,y,tt,tx,ty,tz : integer; 
   end; 

var 
LumberDim : array [0..5000] of LumbRecord; 
ResDim : array [0..5000] of  LumbRecord; 
MaxPosL, MaxPosR, k : integer;               // длины соответствующих массивов 
LumberFlag : Boolean;      // true - работаем, false - нет (разгрузка или смерть) 
ctime : TDateTime;
CheckSWSTimer : TDateTime; 

const 
FMoveArrMax = 300; // ставь здесь больше, если твой чар ходит на дистанции больше 13 тайлов или вокруг чара очень много препятствий. Если препятствий на пути мало, то можно оставить как есть. 
var 
PrognosisX, PrognosisY, FMoveArrCount : integer; 
FMoveArr : array [1..FMoveArrMax] of array [1..2] of smallint; 

const 
Msg1 = 'You put the'; 
Msg2 = 'reach this'; 
Msg3 = 'fail to'; 
Msg4 = 'There are no logs here to chop'; 
Msg5 = 'There is nothing';
Msg6 = 'OOPS !!!';
AxeType1 = $0F47;
AxeType2 = $0F47;
MaxWeight = 350;
MaxFizzle = 30;
l_rails = 'f:\titles\babros_l.txt';
logType = $1BDD;
Sunduk_log = $4010C799;
r_lumb = 33;		    // Number of rune to Lumber 2 (no change)
r_home = 21;		    // Number of rune to home 1 (no change)
runebook = $4027BB57;	    // Runebook


   procedure CheckDead; 
Begin 
if Dead then 
begin 
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now)); 
FullDisconnect; 
end 
      end; 

   procedure ents;
var TimeInterno : TDateTime; 
   begin
ClearJournal; 
   TimeInterno := Now; 
   Addtosystemjournal('Найден ЭНТ для продолжение напишите start');
   UOSay('\w Galiano: Ents!!! x:'+IntToStr(GetX(self))+' y:'+IntToStr(GetY(self)));
repeat
wait(2000);
until (inJournalBetweenTimes('start', TimeInterno, Now) >= 0); 
wait(2000);
ClearJournal; 
   end;

   procedure GetLumberRail(s : String; WPos : Integer; flag : Boolean); 
   // flag - true - маршрут для ламбера, false - маршрут для реса 
   begin 
      s := s + ' '; 
      if flag then 
      begin 
         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)); 
      end 
      else 
      begin 
         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)); 
      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; 


   function CheckAxe : Boolean; 
   // проверяем, есть ли топор у чара в паке или на нужном слое. 
   // если ее нет - открываем сундук и мешок, берем топор. Если топора нет 
   // в мешке - выход. 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      waitconnection(3000); 
      if (ObjAtLayerEx(LhandLayer,self) <> 0) or (count(AxeType1)<>0) or (count(AxeType2)<>0) then exit; 
      // нет у чара топора 
      repeat 
         UseObject(Sunduk_log); 
         wait(1000); 
         checksave; 
         tmpser := findtype(AxeType1,Sunduk_log); 
         if tmpser = 0 then tmpser := findtype(AxeType2,Sunduk_log); 
         if tmpser <> 0 then 
         begin 
            Grab(tmpser,1); 
            wait(1000); 
            checksave; 
         end; 
      until (count(AxeType1)<>0) or (count(AxeType2)<>0); 
   end; 

procedure dlog(logString,fname : string); 
var 
   ls : TStringList; 
begin 
   ls := TSTringList.Create(); 
   try 
      ls.loadFromFile(fname); 
   except 
      //создаем файл, если нету 
      ls.saveToFile(fname); 
   end; 

   ls.add(logString); 

   ls.saveToFile(fname) 
   ls.free(); 
end;

procedure DropLog; 
   var tmpid : Cardinal; 
   begin 
      dlog('Babros - Разгрузка логов: ' + DateTimeToStr(Now),'lumber.log'); 
      CheckDead; 
      checksave; 
      repeat 
         tmpid := Findtype(logType,backpack); 
         waitconnection(3000); 
         checksave; 
         MoveItem(tmpid,GetQuantity(tmpid),Sunduk_log,0,0,0); 
         wait(1000); 
         checksave; 
      until tmpid = 0; 
End;

   procedure CheckHide; 
   begin 
      if Hidden then exit; 
      repeat 
      if WarMode = true then SetWarMode(false); 
         AddToSystemJournal('Прячемся...'); 
         UseSkill('Hiding'); 
         wait(4500); 
         checksave; 
      until Hidden or (not Connected); 
   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; 
      repeat 
	 CheckHide;
         checkdead;
         if WarMode = true then SetWarMode(false); 
         if TargetPresent then CancelTarget; 
         ctime := Now; 
         if Dead then begin Result := false; exit; end; 
	 UseObject(ObjAtLayerEx(LhandLayer,self));
         WaitForTarget(5000); 
         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 (m6<>-1) or Dead or (q = 60); 
         if (m2<>-1) or (m3<>-1) or (q = 60) then CountFizzle := CountFizzle + 1; 
	 if (m6<>-1) then ents;
         if Dead or (Weight > MaxWeight) then begin Result := false; exit; end; 

      until (m5<>-1) or (m4<>-1) OR (CountFizzle = MaxFizzle); 

   end;


   procedure recal_rb(rune : integer); 
   var tmpr : Integer; 
   mx, my, k, Res : Integer; 

   begin 
    repeat
      Res := 0; 
        CheckDead; 
        AddToSystemJournal('Try to recall');
	tmpr := rune;
	waitgump(IntToStr(tmpr));
        wait(1000)
	UseObject(runebook);
	mx := GetX(self);
	my := GetY(self);
		k := 0;
	repeat
		wait(500)
		k := k + 1;
		CheckSave;
	until (mx<>GetX(self)) or (my<>GetY(self)) or Dead or (k = 20)

	if (mx<>GetX(self)) or (my<>GetY(self)) then Res := 1;

   until Res = 1;

   end;

procedure checkweight; 
begin 
if (Weight > MaxWeight) then  
begin 
AddToSystemJournal('Полный'); 
recal_rb(r_home); 
DropLog; 
recal_rb(r_lumb);
end; 
end;
procedure InitCheckFlow; 
begin 
CheckSWSTimer := Now; 
end; 

function SWSSoon : boolean; 
begin 
result := (GetGlobal('stealth', 'Saving World State') = '1'); 
end; 

function CheckFlow : integer; 
var 
delay : integer; 
begin 
delay := timer; 
checksave; 
WaitConnection(5000); 
result := timer - delay; 
end;

Function Abs(A: integer): integer; 
Begin 
If A>=0 then result:=A 
Else result:=0-A; 
End; 

function SetDirection(x, y : integer) : integer; 
var 
   MyX,MyY,DiffX,DiffY,GoDir: integer; 
Begin 
MyX:=GetX(self); 
MyY:=GetY(self); 
DiffX:=Abs(MyX-x); 
DiffY:=Abs(MyY-y); 

if (DiffX/(DiffY+0.1))>=2 then 
   begin 
   if (MyX>X) then 
      GoDir:=6 
   else 
      GoDir:=2; 
   end  
else 
    
   if (DiffY/(DiffX+0.1))>=2 then 
      begin 
      if (MyY>Y) then 
         GoDir:=0 
      else 
         GoDir:=4; 
      end  
   else 
        
      if (MyX>X) and (MyY>Y) then  GoDir:=7 
      else 

        if (MyX>X) and (MyY<Y) then  GoDir:=5 
        else 

           if (MyX<X) and (MyY>Y) then  GoDir:=1 
           else 

             if (MyX<X) and (MyY<Y) then  GoDir:=3; 
              
result:=GoDir; 
end; 


procedure CalcPrognosis(Dir : integer); 
begin 
   if (Dir = 1) or (Dir = 2) or (Dir = 3) then PrognosisX := GetX(self) + 1; 
   if (Dir = 5) or (Dir = 6) or (Dir = 7) then PrognosisX := GetX(self) - 1; 
   if (Dir = 0) or (Dir = 4) then PrognosisX := GetX(self); 

   if (Dir = 3) or (Dir = 4) or (Dir = 5) then PrognosisY := GetY(self) + 1; 
   if (Dir = 7) or (Dir = 0) or (Dir = 1) then PrognosisY := GetY(self) - 1; 
   if (Dir = 2) or (Dir = 6) then PrognosisY := GetY(self); 
end; 

function TryToMove(Direction : integer; RunFlag : boolean) : boolean; 
begin 
   if GetDirection(self) <> Direction then Raw_Move(Direction, RunFlag); 
   result := Raw_Move(Direction, RunFlag); 
end; 

function WrongMove(x, y : integer) : boolean; 
var 
i : integer; 
begin 
   result := false; 
   if FMoveArrCount = 0 then exit; 
   for i := 1 to FMoveArrCount do 
      begin 
      if (x = FMoveArr[i][1]) and (y = FMoveArr[i][2]) then 
         begin 
         result := true; 
         exit; 
         end; 
      end; 
end; 


function Min(x,y: integer): integer; 
begin 
 if x>y then Result:=y else Result:=x; 
end; 

function HEst(x,y: integer): integer; 
var dx,dy,Ddx : integer; 
begin 
  dx:= GetX(self)-x; 
  dy:= GetY(self)-y; 
  Ddx:= dx-dy; 
  If dx<0 then dx:=0-dx; 
  If dy<0 then dy:=0-dy; 
  If Ddx<0 then Ddx:=0-Ddx; 
  Result:= min(dx,dy)+Ddx; 
end; 

procedure SetWrongMove(x, y : integer); 
begin 
   FMoveArrCount := FMoveArrCount + 1; 
   FMoveArr[FMoveArrCount][1] := x; 
   FMoveArr[FMoveArrCount][2] := y; 
end; 

function RewindDir(Dir, c : integer) : integer; 
begin 
   result := Dir + c; 
   if result < 0 then result := result + 8; 
   if result > 7 then result := result - 8; 
end; 

function Move(x, y, tolerance : integer) : boolean; 
var 
Dir, Dist, lastX, lastY, t, i, timeout : integer; 
begin 
   FMoveArrCount := 0; 
   Dist := HEst(x, y); 
   timeout := Dist * 13000; // 13 секунд времени на шаг 
   t := timer; 
   while true do 
      begin 
      Dist := HEst(x, y); 
      if Dist <= tolerance then // пришёл 
         begin 
         result := true; 
         exit; 
      end; 
      if timer - t > timeout then // провал по таймауту 
      begin 
         AddToSystemJournal('Move: Time moved out!'); 
         result := false; 
         exit; 
      end; 
      Dir := SetDirection(x, y); 
      CalcPrognosis(Dir); 
      if WrongMove(PrognosisX, PrognosisY) then 
         begin 
         for i := 1 to 7 do 
            begin 
            Dir := RewindDir(Dir, 1); 
            CalcPrognosis(Dir); 
            if not WrongMove(PrognosisX, PrognosisY) then break; 
            end; 
      if i = 8 then 
         begin 
         AddToSystemJournal('Move: Cannot move'); 
         result := false; 
         exit; 
         end; 
      end; 
      timeout := timeout + CheckFlow; 
      lastX := GetX(self); lastY := GetY(self); 
      if TryToMove(Dir, true) then SetWrongMove(lastX, lastY) // отсюда чар пришёл 
      else SetWrongMove(PrognosisX, PrognosisY); 
      end; 
end; 

procedure _move(x, y, tolerance : integer); 
begin 
while not Move(x, y, tolerance) do wait(100); 
end;
Begin 
   GetRail(l_rails,true);
AddToSystemJournal('Маршрут ' + l_rails + ' загружен');
   repeat 
      CheckDead; 
      if Dead then LumberFlag := false else LumberFlag := true; 
      if LumberFlag then 
      begin 
         recal_rb(r_lumb);
         if not CheckAxe then exit; 
         For k := 0 to MaxPosL-1 do 
         begin 
            // идем по маршруту 
	       AddToSystemJournal('Переход к дереву #' + inttostr(k+1)+ ' x:'+inttostr(LumberDim[k].tx)+' y:'+inttostr(LumberDim[k].ty)); 
		 _move(LumberDim[k].tx, LumberDim[k].ty, 1);

	       AddToSystemJournal('Переход окончен'); 
            if LumberFlag and (LumberDim[k].tt <> 0) then 
	       CheckHide;
	       AddToSystemJournal('Начинаем рубить дерево #' + inttostr(k+1)); 
               LumberFlag := LumbCurTree(LumberDim[k].tt,LumberDim[k].tx,LumberDim[k].ty,GetZ(self));
 	       checkweight;
         end; 
      end; 
   until False; 
End.
Lumber tails inject

Code: Select all

sub Mark() 
var i=0,j=0,k=0,r=0,q=0,ii,jj 
var TopX=324,TopY=65 
dim TreeX[5000], TreeY[5000],TreeT[5000],TreeZ[5000] 
dim TreeTile[29] 
var flag=0,treeCount=0,clicks=0,flag2=0 
######################## 
### Графика деревьев ### 
######################## 
TreeTile[0]=3277 
TreeTile[1]=3280 
TreeTile[2]=3283 
TreeTile[3]=3286 
TreeTile[4]=3289 
TreeTile[5]=3291 
TreeTile[6]=3294 
TreeTile[7]=3296 
TreeTile[8]=3299 
TreeTile[9]=3302 
TreeTile[10]=3393 
TreeTile[11]=3394 
TreeTile[12]=3395 
TreeTile[13]=3396 
TreeTile[14]=3415 
TreeTile[15]=3416 
TreeTile[16]=3417 
TreeTile[17]=3418 
TreeTile[18]=3419 
TreeTile[19]=3438 
TreeTile[20]=3439 
TreeTile[21]=3440 
TreeTile[22]=3441 
TreeTile[23]=3442 
TreeTile[24]=3460 
TreeTile[25]=3461 
TreeTile[26]=3462 
TreeTile[27]=3290 
TreeTile[28]=3288 

uo.Exec("filterspeech on") 
uo.Exec("filterspeech add 'Where do you want to use the pickaxe?'") 

###################################### 
### Собираем координаты из клиента ### 
###################################### 
uo.Print('Выбери Кирку: ') 
uo.Exec('addobject Pickaxe') 
while uo.Targeting() 
wait(100) 
wend 
uo.Print('Собираем координаты деревьев в округе...') 
repeat 
clicks=0 
flag=0 
uo.DeleteJournal() 
####################### 
### Кликаем на тайл ### 
####################### 
uo.UseObject('Pickaxe') 
waitForTarget() 
uo.DeleteJournal() 
WaitForTryRock() 
############################### 
### Проверяем дерево ли это ### 
############################### 
flag=0 
for k=0 to 28 
if uo.LastTile(0)==TreeTile[k]+1 then 
flag=2 
end if 
next 
if flag==0 then 
for k=0 to 28 
if uo.LastTile(0)==TreeTile[k] then 
flag=1 
end if 
next 
end if 
if uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() then 
flag=3 
end if 
######################### 
### Кликнули на ствол ### 
######################### 
if flag==1 then 
flag2=0 
if treeCount>0 then 
for ii=1 to treeCount 
if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==uo.LastTile(2) and TreeZ[ii]==uo.LastTile(3) then 
flag2=1 
end if 
next 
end if 
if flag2==0 then 
treeCount=treeCount+1 
TreeX[treeCount]=uo.LastTile(1) 
TreeY[treeCount]=uo.LastTile(2) 
TreeT[treeCount]=uo.LastTile(0) 
TreeZ[treeCount]=uo.LastTile(3) 
uo.Print('Найдено дерево '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))+' z='+str(uo.LastTile(3))) 
end if 
end if 
########################## 
### Кликнули по листве ### 
########################## 
if flag==2 then 
flag2=0 
if treeCount>0 then 
for ii=1 to treeCount 
if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==uo.LastTile(2) and TreeZ[ii]==uo.LastTile(3) then 
flag2=1 
end if 
next 
end if 
if flag2==0 then 
treeCount=treeCount+1 
TreeX[treeCount]=uo.LastTile(1) 
TreeY[treeCount]=uo.LastTile(2) 
TreeZ[treeCount]=uo.LastTile(3) 
TreeT[treeCount]=uo.LastTile(0)-1 
uo.print('Найдено дерево '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))+' z='+str(uo.LastTile(3))) 
end if 
end if 
until (Flag==3) or (treeCount==500) 
uo.Exec("filterspeech off") 
uo.Print('Анализ закончен, координаты деревьев записаны в файл C:\ltitles.txt') 
SaveToFile(treeCount,TreeX,TreeY,TreeT,TreeZ) 
uo.Print('Деревьев найдено: '+str(treeCount)) 
end sub 

sub GetTree(Type,X,Y,Z) 
var i 
uo.Print('Начинаем рубку дерева...') 
for i=0 to 15 
if uo.Warmode()==1 then 
return 0 
end if 
wait(200) 
uo.DeleteJournal() 
### CheckLag() 
uo.WaitTargetTile(Type,X,Y,Z) 
uo.UseObject('Axe') 
if WaitForChange()==1 then 
return 1 
end if 
next 
return 0 
end sub 

sub WaitForTryRock() 
var Text1="That is too far away." 
var Text2="Try mining in rock." 
var Text3="There is no ore here to mine." 
var Text4="You have no line of sight to that location" 
var Text5="You can't see the target" 
for var i=0 to 50 
if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text5 then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub 

sub WaitForTarget() 
for var i=0 to 50 
if uo.Targeting()==1 then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub 

sub SaveToFile(treeCount,TreeX,TreeY,TreeT,TreeZ) 
var f=file("C:\ltitles.txt") 
var s=0,i=0 
f.open() 
f.create() 
for i=1 to treeCount 
s=safe call f.writeln(str(TreeT[i])+' '+str(TreeX[i])+' '+str(TreeY[i])+' '+str(TreeZ[i])) 
next 
f.close() 
end sub 

sub CheckLag() 
if uo.Waiting()>0 then 
uo.Exec('canceltarget') 
end if 
uo.DeleteJournal() 
uo.Click('backpack') 
repeat 
wait(50) 
until uo.InJournal('backpack') 
end sub
Невозможное возможнО!
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

И еще немножко

Mining cave

Code: Select all

program Mining_cave; 
// Мининг в пещере
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.3
// Tested by RaTaMaHaTTa on DRW
{$Include 'all.inc'}

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.';
MaxLimit = 15;               // максимальное кол-во физлов одной точки 
Pickaxe1 = $0E85;            // Типы кирок 
Pickaxe2 = $0E86; 
Ore1 = $19B7;               // 1 Ore 
Ore2 = $19BA;               // 2 Ore 
Ore3 = $19B8;               // 3 Ore 
Ore4 = $19B9;               // 4 Ore 
Sunduk_ore = $4010C799;     // Sunduk of ore
runebook = $404B4021;	    // Runebook
r_cave = 1025;		    // Number of rune to cave 9 (no change)
r_home = 21;		    // Number of rune to home 1 (no change)
MyMaxWeight = 400;	    // Max Weight
CaveLimit = 1282; 	    // Cave limit
RuneHome=$4001E531;	    // Rune to fast recall
Recall=$1F4C;  		    // Type Recall scrolls
pk_time=120;		    // Seconds of wait to pk go
kill_elem=0;		    // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела)
Itype=$0F09; 		    // Тип инвизки
vxcol=$FFFF; 		    // Тип скрола вортекса
vacol=$FFFF; 		    // Тип скрола мас диспела

var 
minret,StartFlag : Integer; 
HowManyDischarge : Integer; 
ScriptStartTime : TDateTime; 

flag1 : Boolean; 

   procedure CheckDead; 
Begin 
if Dead then 
begin 
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now)); 
FullDisconnect; 
end 
      end; 

procedure kill_elemental;
var
ctime : TDateTime;
castvx, castva : Boolean; 
c, Eltype: Integer;
begin
Eltype:=$0010; // Тип элементаля
castvx:=false;
castva:=false;
// Search and use Invisible potion
   FindType(Itype,backpack);
    if FindCount>0 then 
     begin
       UseType(Itype,$FFFF); 
    end;

// Search and use Vortex Scroll
repeat
   FindTypeEx(vxcol,Backpack);
    if FindCount>0 then 
     begin
AddToSystemJournal('Кастую вортекса'); 
	repeat
	   UseObject(FindItem); 
	   ctime:=Now;
 	   wait(5000);
	   FindTypeEx(vxcol,backpack);
	until (inJournalBetweenTimes('Vortex', ctime, Now)<>0) or (FindCount = 0);
if (inJournalBetweenTimes('Vortex', ctime, Now)<>0) then castvx:=true;
    end;

// Search Elemental
if castvx = true then
begin
FindDistance:=17; 
AddToSystemJournal('Жду пока умрет элементаль'); 
FindType(Eltype,ground)
c:=0;
repeat
c:=c+1;
wait(10000);
FindType(Eltype,ground)
until (FindCount = 0) OR (c = 20);
end;
until (c < 20) or (castvx = false);

// Search and use Vas An Ort Scroll
if castvx = true then
begin
   FindTypeEx(vacol,backpack);
    if FindCount>0 then 
     begin
AddToSystemJournal('Кастую воз ан орт'); 
	repeat
	   UseObject(FindItem); 
  	   ctime:=Now;
	   wait(6000);
	   FindTypeEx(vacol,backpack);
	until (inJournalBetweenTimes('fizzles', ctime, Now) = 0) or (FindCount = 0);
	if (inJournalBetweenTimes('fizzles', ctime, Now) = 0) then castva:=true;
    end;
if castva = true then
begin
AddToSystemJournal('Лутаю'); 
FindType($19B9,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19B7,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19BA,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19B8,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($0EED,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;
end;
end;
end;

   procedure elemental;
var TimeInterno : TDateTime; 
   begin
if kill_elem = 1 then
 begin
  kill_elemental;
  wait(1000);
  exit;
 end;
ClearJournal; 
   TimeInterno := Now; 
   Addtosystemjournal('В переще элементаль для продолжение напишите start');
repeat
   UOSay('\w Galiano: Elemental!!!'); // Приватное сообщение помощнику (который прийдет и убьет эля)...
wait(3000);
until (inJournalBetweenTimes('start', TimeInterno, Now) >= 0); 
   end;


   function pk_save : Boolean; 
   var mx, my, k, Res, scrol_r : Integer; 

begin
Result := true;
addtosystemjournal('Найдены опасные персонажи реколимся домой по рунке'); 

repeat
      Res := 0; 
if not Hidden then
begin
// Search and use Invisible potion
   FindType(Itype,backpack);
    if FindCount>0 then 
     begin
       UseType(Itype,$FFFF); 
    end;

end;
        CheckDead; 
AddToSystemJournal('Пробуем улететь');

if TargetPresent then CancelTarget;
FindType(Recall,backpack);
if (FindQuantity <> 0) then
begin
Addtosystemjournal('Используем свиток');
UseObject(finditem); 
WaitForTarget(1500);
TargetToObject(RuneHome);
scrol_r := 1;
end;

if scrol_r < 1 then
begin
Addtosystemjournal('Реколимся при помощи магии');
cast('Recall')
WaitForTarget(1500);
TargetToObject(RuneHome);
end;
	mx := GetX(self);
	my := GetY(self);
		k := 0;
	repeat
		wait(500)
		k := k + 1;
	until (mx<>GetX(self)) or (my<>GetY(self)) or Dead or (k = 10)

	if (mx<>GetX(self)) or (my<>GetY(self)) then Res := 1;

until Res = 1;
wait(pk_time*1000);

   end;

function check_el : Boolean;  
var TimeInterno : TDateTime; 
 element : Cardinal; // Тип эелементаля незнаю какой) 
 begin 
 Result := false;
 element:=$0000; 
 FindDistance:=10; 
 findtype(element,ground); 
 if FindCount > 0 then 
  begin 
  Result := true;
 end; 
end;

   function CheckPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
                 addtosystemjournal('Нету кирки :(('); 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
      		  addtosystemjournal('Нету кирки :(('); 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
   end; 

   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; 



function redcheck : Boolean;
   // Ищет персонажей от серого к красному в радиусе 10-ти клеток. Возвращаем: 
   // True - найдетны такие персонажи. 
   // False - персонажей не найдено все спокойно. 
var  n : integer; l : TStringList; 
begin 
l := TStringList.Create();
Result := False;
FindType($190,ground); 
GetFindedList(l); 
if (l.count > 0) then 
begin 
for n:= 0 to (l.count-1) do 
if (GetNotoriety(StrToInt('$'+l.strings[n]))>2) then Result := true; 
end; 
l.free;
l := TStringList.Create();
FindType($191,ground); 
GetFindedList(l); 
if (l.count > 0) then 
begin 
for n:= 0 to (l.count-1) do 
if (GetNotoriety(StrToInt('$'+l.strings[n]))>2) then Result := true; 
end; 
l.free; 
end;


   function MiningAround : Integer ; 
   // копаем вокруг чара 
   // параметр - максимальный вес. 
   // возвращаем: 
   // 1 - вокруг чара все вскопано успешно 
   // 2 - превышен максимальный вес 
   // 3 - чар под атакой 
   // 4 - нет кирки 
   // 5 - PK
   var k, r, x, y : Integer; 
   var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mw1, ms1 : Integer; 
   var ctime : TDateTime; 
   begin 
      Result := 1; 
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight)); 
      for x := -4 to 4 do 
      begin 
         for y := -4 to 4 do 
         begin 
            r := 0; 
            repeat 
               waitconnection(5000);
               if not CheckPickaxe then 
               begin 
                  Result := 4; 
                  exit; 
               end; 
               CheckHide; 
               if TargetPresent then CancelTarget; 
               if WarMode = true then SetWarMode(false); 
               ctime := Now; 
               UseObject(ObjAtLayerEx(RhandLayer,self)); 
               WaitForTarget(1000); 
               If TargetPresent then TargetToTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self)); 
               k := 0; 
               repeat 
                  wait(100); 
                  k := k + 1; 
                  checksave; 
                  mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now); 
                  mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now); 
                  mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now); 
                  mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now); 
                  mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now); 
                  mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now); 
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now); 
                  ms1 := InJournalBetweenTimes(M_success, ctime, Now); 
               until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (ms1<>-1) or Dead or (k > 300); 

	       if check_el = true then
		begin
		  Result := 6
		  exit;
	       end;
	
	       if redcheck = true then
		begin
		  Result := 5
		  exit;
	       end;

               if Weight > MyMaxWeight then 
               begin 
                  Result := 2; 
                  exit; 
               end; 
               if (mf1<>-1) then 
               begin 
                  r := r + 1; 
                  if r >= 10 then break 
                  else continue; 
               end; 
               if (mw1<>-1) then wait(3000); 
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1); 
         end; 
      end; 
   end; 

function DischargeSunduk : Boolean; 
   // Разгружаем пак чара в сундук. Возвращаем: 
   // 1 - все ок, пак разгружен. 
   // 0 - не получилось. 
   var tmpcnt : Integer; 
      tmpid, tmpstack : Cardinal; 
      tmpconnect : TDateTime; 
   begin 
            addtosystemjournal('Пришли на разгрузку'); 
      Result := true; 
      waitconnection(3000); 
      tmpconnect := ConnectedTime; 
      CheckDead; 
      if Dead then 
      begin 
         Result := false; 
         exit; 
      end; 
      UseObject(Sunduk_ore); 
      checksave; 
      // Переместим руду 
      tmpcnt := 0; 
      repeat 
         tmpid := Findtype(Ore1,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore2,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore3,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore4,backpack); 
         if tmpid = 0 then break; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),Sunduk_ore,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      IgnoreReset; 
	FindType(Recall,Backpack);
	 if (FindCount = 0) or (Count(Recall) < 5) then
	  begin
		  AddToSystemJournal('Добираем скролы рекола');
	  FindType(Recall,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
		  AddToSystemJournal('Добираем реагенты');
	FindType($0F86,Backpack);
	 if (FindCount = 0) or (Count($0F86) < 10) then
	  begin
	  FindType($0F86,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
	FindType($0F7A,Backpack);
	 if (FindCount = 0) or (Count($0F7A) < 10) then
	  begin
	  FindType($0F7A,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
	FindType($0F7B,Backpack);
	 if (FindCount = 0) or (Count($0F7B) < 10) then
	  begin
	  FindType($0F7B,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
	FindType($0F7B,Backpack);
	 if (FindCount = 0) or (Count($0F7B) < 10) then
	  begin
	  FindType($0F7B,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;

	FindType(Itype,Backpack);
	 if (FindCount = 0) or (Count(Itype) <= 2) then
	  begin
		  AddToSystemJournal('Добираем инвизки');
	  FindType(Itype,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,5,Backpack,0,0,0);
		end;
	 end;
	FindType(vxcol,Backpack);
	 if (FindCount = 0) or (Count(vxcol) <= 2) then
	  begin
		  AddToSystemJournal('Добираем скролы вортексов');
	  FindType(vxcol,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,5,Backpack,0,0,0);
		end;
	 end;
	FindType(vacol,Backpack);
	 if (FindCount = 0) or (Count(vacol) <= 2) then
	  begin
		  AddToSystemJournal('Добираем скролы масс диспел');
	  FindType(vacol,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,5,Backpack,0,0,0);
		end;
	 end;
         addtosystemjournal('Разгрузка закончена'); 
   end;
 
   procedure recal_rb(rune : integer); 
   var tmpr : Integer; 
   mx, my, k, Res : Integer; 

   begin 
repeat
      Res := 0; 
        CheckDead; 
AddToSystemJournal('Пытаемся рекольнуться');
	tmpr := rune;
	waitgump(IntToStr(tmpr));
wait(1000)
	UseObject(runebook);
	mx := GetX(self);
	my := GetY(self);
		k := 0;
	repeat
		wait(500)
		k := k + 1;
	until (mx<>GetX(self)) or (my<>GetY(self)) or Dead or (k = 20)

	if (mx<>GetX(self)) or (my<>GetY(self)) then Res := 1;

until Res = 1;

   end;
   function GetPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
if Result = false then
begin
                 recal_rb(r_home);
		 useobject(sunduk_ore);
		 tmpser := findtype(Pickaxe1,Sunduk_ore);
		 if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk_ore); 
		 if tmpser = 0 then
		 begin
		  Result := false;
		  addtosystemjournal('Нету кирки в сундуке:((');
		 end;
		 grab(Finditem,1);
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
		  addtosystemjournal('Нету кирки в сундуке:((');
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
                 recal_rb(r_cave);
end;
   end; 


Begin 
   ScriptStartTime := Now; 
   HowManyDischarge := 0; 
   StartFlag := 1; 
   repeat 
   // стартуем от сундука 
      CheckDead; 

      addtosystemjournal('Вылетаю в шахту'); 
	recal_rb(r_cave);
      repeat 
         CheckDead; 
         if Dead then break; 
         GetPickaxe;
         minret := MiningAround; 
         CheckDead; 
         if Dead then break; 
         if minret = 4 then  GetPickaxe;
	 if minret = 5 then  pk_save;
	 if minret = 6 then  elemental;
      until minret = 2; 
      addtosystemjournal('Пора на разгрузку'); 
      CheckDead;
	recal_rb(r_home); 
      if not Dead then 
      begin 
         repeat 
            WaitConnection(5000); 
            CheckDead; 
            if Dead then break; 
            flag1 := DischargeSunduk; 
            wait(100); 
         until flag1 = true; 
	recal_rb(r_cave);
      end; 
      CheckDead; 
   until false; 
End.
Vip mining

Code: Select all

program MiningVip; 
// Мининг в VIP пещере
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.2
// Tested by RaTaMaHaTTa on DRW
{$Include 'all.inc'} 

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.'; 
MaxLimit = 15;              // максимальное кол-во физлов одной точки 
Cords_x = 2063;       // Кордината сундука X
Cords_y = 2266;       // Кордината сундука Y
Cord_x = 2063;          // Кордината копки X
Cord_y = 2266;          // Кордината копки Y
Pickaxe1 = $0E85;           // Типы кирок 
Pickaxe2 = $0E86; 
Ore1 = $19B7;               // 1 Ore 
Ore2 = $19BA;               // 2 Ore 
Ore3 = $19B8;               // 3 Ore 
Ore4 = $19B9;               // 4 Ore 
Sunduk = $403D03EC;        // Общий сундук
Sunduk_pix = $4042414D;     //Сундук c кирками
Sunduk_ore = $403EDEF3;     // Сундук для руды
MyMaxWeight = 400;       // Max Weight 
CaveLimit = 1282;        // Cave limit 
Incol=$0F0E;           // Цвет инвизки 
kill_elem=1;          // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела) 
vxcol=$1F66;           // Тип скрола вортекса
vacol=$1F62;           // Тип скрола мас диспела
element=$0010;            // Тип элементаля 

var 
minret,StartFlag : Integer; 
HowManyDischarge : Integer; 
ScriptStartTime : TDateTime; 

flag1 : Boolean; 

   procedure CheckDead; 
Begin 
if Dead then 
begin 
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now)); 
FullDisconnect; 
end 
      end; 


procedure GoXY(x,y : integer; runflag : boolean); 
   // x,y - eii?aeiaou, a eioi?ua eaai 
   // prec - oi?iinou iiaoiaa 
   // runflag - aa?aou eee eaoe 
   // v. 1.04 (n) Edred, ne?eio ii?oe?iaai n ei?aeoa 
   // i?eaeiaeuiay aa?ney Yoko n ai?aaioeie AGRS e Edred. 
   var ld, ldc, dx, dy, mx, my,d,e,a : Integer; 
   begin 
        ld := 0;   ldc := 0;   d := 0;     e := 2; 
   AddToSystemJournal('Начинаем переход'); 
     while true do 
        begin 
         dx := GetX(self) - x; if dx < 0 then dx := 0 - dx; 
         dy := GetY(self) - y; if dy < 0 then dy := 0 - dy; 
         if dy > dx then dx := dy; 
         mx := GetX(self); my := GetY(self); 
         dx := mx - x; if dx < 0 then dx := 0 - dx; 
         dy := my - y; if dy < 0 then dy := 0 - dy; 
         if dy > dx then dx := dy; 
         if ld = dx then begin 
            ldc := ldc + 1; 
           if ldc > 4 then begin 
             addtosystemjournal( 'GotoXY: Cannot reach location!' ); 
             a := 0 
             repeat 
             Raw_Move(d,runflag); 
             a := a+1 
             until a = e 
             d := d + 2; 
             If d = 8 then d:=0 e:= e+1 ldc :=0 
              end; 
         end 
         else ld := dx; 
         waitconnection(5000); 
         if mx = x then begin 
            if my = y then exit; 
            // North 
            if my > y then begin Raw_Move(0,runflag); continue; end; 
            // South 
            Raw_Move(4,runflag); continue; 
         end; 
         if mx < x then begin 
            // Northeast 
            if my > y then begin Raw_Move(1,runflag); continue; end; 
            // East 
            if my = y then begin Raw_Move(2,runflag); continue; end; 
            // Southeast 
            Raw_Move(3,runflag); continue; 
         end; 
         // Southwest 
         if my < y then begin Raw_Move(5,runflag); continue; end; 
         // West 
         if my = y then begin Raw_Move(6,runflag); continue; end; 
         // Nortwest 
         Raw_Move(7,runflag); continue; 
      end; 
   end; 


procedure kill_elemental; 
var 
ctime : TDateTime; 
castvx, castva : Boolean; 
c,Vrx,Vry : Integer; 

label 
vortex;

begin 
castvx:=false; 
castva:=false; 
// Search and use Invisible potion 
   FindTypeEx($0F0E,incol,backpack,false); 
    if FindCount>0 then 
     begin 
      repeat
       UseObject(FindItem); 
       wait(1000)
      until Hidden;
    end; 

// Start kill elemental 
// Search and use Vortex Scroll 
vortex:
   FindType(vxcol,Backpack); 
    if FindCount>0 then 
     begin 
AddToSystemJournal('Кастую вортекса'); 
   repeat 
      UseObject(FindItem); 
      WaitForTarget(1000); 
      If TargetPresent then TargetToTile(1342, GetX(self)+1, GetY(self)+1, GetZ(self)); 
      ctime:=Now; 
       wait(5000); 
      FindType(vxcol,backpack); 
   until (inJournalBetweenTimes('Vortex', ctime, Now)<>-1) or (FindCount = 0); 
if (inJournalBetweenTimes('Vortex', ctime, Now)<>-1) then castvx:=true; 
    end; 

// Search Elemental 
if castvx = true then 
begin 
FindDistance:=17; 
AddToSystemJournal('Жду пока умрет элементаль'); 
FindType(element,ground) 
Vrx:=GetX(FindItem); 
Vry:=GetY(FIndItem); 
c:=0; 
repeat 
c:=c+1; 
wait(10*1000); 
FindType(element,ground) 
until (FindCount = 0) OR (c = 25); 
if (FindCount > 0) then goto vortex; 
end; 
// End Kill Elemental 


// Search and use Vas An Ort Scroll 
if castvx = true then 
begin 
   FindType(vacol,backpack); 
    if FindCount>0 then 
     begin 
AddToSystemJournal('Кастую воз ан орт'); 
   repeat 
      UseObject(FindItem); 
      WaitForTarget(1000); 
      If TargetPresent then TargetToObject(Self); 
      ctime:=Now; 
      wait(10000); 
      FindType(vacol,backpack); 
   until (inJournalBetweenTimes('fizzles', ctime, Now) = -1) or (FindCount = 0); 
   if (inJournalBetweenTimes('fizzles', ctime, Now) = -1) then castva:=true; 
    end; 
if castva = true then 
begin 
GoXY(Vrx,Vry,true); 
AddToSystemJournal('Лутаю'); 
FindType($19B9,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($19B7,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($19BA,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($19B8,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($0EED,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 
GoXY(Cord_x,Cord_y,true); 
UOSay('start'); 
end; 
end; 
end;

   procedure elemental; 
var TimeInterno : TDateTime; 
   begin 
if kill_elem = 1 then 
 begin 
  kill_elemental; 
  wait(1000); 
  exit; 
 end; 
ClearJournal; 
   TimeInterno := Now; 
   Addtosystemjournal('В переще элементаль для продолжение напишите start'); 
repeat 
//   UOSay('\w Galiano: Elemental!!!'); // Приватное сообщение помощнику (который прийдет и убьет эля)... 
wait(3000); 
until (inJournalBetweenTimes('start', TimeInterno, Now) >= 0); 
   end; 

function check_el : Boolean;  
 begin 
 Result := false;
 FindDistance:=10; 
 findtype(element,ground); 
 if FindCount > 0 then 
  begin 
  Result := true;
 end; 
end;

   function CheckPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
                 addtosystemjournal('Нету кирки :(('); 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
              addtosystemjournal('Нету кирки :(('); 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
   end; 

   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; 




   function MiningAround : Integer ; 
   // копаем вокруг чара 
   // параметр - максимальный вес. 
   // возвращаем: 
   // 1 - вокруг чара все вскопано успешно 
   // 2 - превышен максимальный вес 
   // 3 - чар под атакой 
   // 4 - нет кирки 
   var k, r, x, y : Integer; 
   var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mw1, ms1 : Integer; 
   var ctime : TDateTime; 
   begin 
      Result := 1; 
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight)); 
      for x := -4 to 4 do 
      begin 
         for y := -4 to 4 do 
         begin 
            r := 0; 
            repeat 
               waitconnection(5000); 
               if CheckPickaxe = false then 
               begin 
                  Result := 4; 
                  exit; 
               end; 
               CheckHide; 
               if TargetPresent then CancelTarget; 
               if WarMode = true then SetWarMode(false); 
               ctime := Now; 
               UseObject(ObjAtLayerEx(RhandLayer,self)); 
               WaitForTarget(1000); 
               If TargetPresent then TargetToTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self)); 
               k := 0; 
               repeat 
                  wait(100); 
                  k := k + 1; 
                  checksave; 
                  mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now); 
                  mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now); 
                  mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now); 
                  mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now); 
                  mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now); 
                  mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now); 
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now); 
                  ms1 := InJournalBetweenTimes(M_success, ctime, Now); 
               until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (ms1<>-1) or Dead or (k > 300); 

	       if check_el = true then
		begin
		  Result := 6
		  exit;
	       end;
    

               if Weight > MyMaxWeight then 
               begin 
                  Result := 2; 
                  exit; 
               end; 
               if (mf1<>-1) then 
               begin 
                  r := r + 1; 
                  if r >= 10 then break 
                  else continue; 
               end; 
               if (mw1<>-1) then wait(3000); 
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1); 
         end; 
      end; 
   end; 

function DischargeSunduk : Boolean; 
   var 
      tmpid : Cardinal; 
      tmpconnect : TDateTime; 
   begin 
            addtosystemjournal('Пришли на разгрузку'); 
      Result := true; 
      waitconnection(3000); 
      tmpconnect := ConnectedTime; 
      CheckDead; 
      if Dead then 
      begin 
         Result := false; 
         exit; 
      end; 
      UseObject(Sunduk); 
      wait(1000);
      UseObject(Sunduk_ore); 
      checksave; 
      // Переместим руду 
      repeat 
         tmpid := Findtype(Ore1,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore2,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore3,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore4,backpack); 
         if tmpid = 0 then break; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),Sunduk_ore,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      IgnoreReset; 

   FindTypeEx($0F0E,Incol,Backpack,false); 
    if (FindCount = 0) or (CountEx($0F0E,Incol,backpack) <= 2) then 
     begin 
        AddToSystemJournal('Добираем инвизки'); 
     FindTypeEx($0F0E,Incol,Sunduk_ore,false); 
      if FindCount > 0 then 
        begin 
        MoveItem(FindItem,5,Backpack,0,0,0); 
      end; 
    end; 

	FindType(vxcol,Backpack);
	 if (FindCount = 0) or (Count(vxcol) <= 2) then
	  begin
		  AddToSystemJournal('Добираем скролы вортексов');
	  FindType(vxcol,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,5,Backpack,0,0,0);
		end;
	 end;
	FindType(vacol,Backpack);
	 if (FindCount = 0) or (Count(vacol) <= 2) then
	  begin
		  AddToSystemJournal('Добираем скролы масс диспел');
	  FindType(vacol,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,5,Backpack,0,0,0);
		end;
	 end;


         addtosystemjournal('Разгрузка закончена'); 
   end; 

   function GetPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
       GoXY(Cords_x,Cords_y,true); 
       useobject(sunduk_ore); 
       wait(1000);
       useobject(Sunduk_pix); 
       wait(1000);
       tmpser := findtype(Pickaxe1,Sunduk_pix); 
       if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk_pix); 

       tmpser := findtype(Pickaxe1,Sunduk_pix); 
       if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk_pix); 
       if tmpser = 0 then 
       begin 
        Result := false; 
        addtosystemjournal('Нету кирки в сундуке:(('); 
       end; 
       grab(Finditem,1); 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
        addtosystemjournal('Нету кирки в сундуке:(('); 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
                 GoXY(Cord_x,Cord_y,true); 
end; 


Begin 
   ScriptStartTime := Now; 
   HowManyDischarge := 0; 
   StartFlag := 1; 
   repeat 
   // стартуем от сундука 
      CheckDead; 
      addtosystemjournal('Вылетаю в шахту'); 
   GoXY(Cord_x,Cord_y,true); 
      repeat 
         CheckDead; 
         if Dead then break; 
         minret := MiningAround; 
         CheckDead; 
         if Dead then break; 
         if minret = 4 then  GetPickaxe; 
    if minret = 6 then  elemental; 
      until minret = 2; 
      addtosystemjournal('Пора на разгрузку'); 
      CheckDead; 
   GoXY(Cords_x,Cords_y,true); 
      if not Dead then 
      begin 
         repeat 
            WaitConnection(5000); 
            CheckDead; 
            if Dead then break; 
            flag1 := DischargeSunduk; 
            wait(100); 
         until flag1 = true; 
   GoXY(Cord_x,Cord_y,true); 
      end; 
      CheckDead; 
   until false; 
End.
Poison:

Code: Select all

Program PoisoningDRW;
{$Include 'all.inc'} 
// (c) v26RuS (Galiano{ASTARTA} DRW)
Const
Sunduk=$403FD96C;
Dagger=$402E7A95;
kolvo=100;

var
PoisonFlag : Boolean;
time : TDateTime;

Begin
PoisonFlag:=true;
UseObject(Sunduk);
wait(1000);

repeat

 FindTypeEx($0F0E,$0998,backpack,false);
 if (GetQuantity(FindItem) < 1) then
  begin
  FindTypeEx($0F0E,$0998,Sunduk,false);
  if (GetQuantity(FindItem) < 1) then
  begin
   PoisonFlag:=false;
   AddToSystemJournal('Закончились бутылки пойзона');
  end;
  if (GetQuantity(FindItem) > 1) then
  begin
   grab(FindItem,kolvo);
   AddToSystemJournal('Взяли '+IntToStr(kolvo)+' бутылок');
  end;
 end;

 if PoisonFlag = true then
 begin
  time := now;
  useskill('Poisoning');
  wait(800);
  waitfortarget(5000);
  if targetpresent then 
  begin 
   targettoobject(Dagger);
  wait(800);
   waitfortarget(5000); 
   if targetpresent then WaitTargetType($0F0E); 
   waitjournalline(time,'You fail to apply|You apply the poison',30000); 
   wait(2000); 
  end;
 end;


until (PoisonFlag=false) or (GetSkillValue('Poisoning') >= 100.0) or Dead;
End.
Snoop steal основной чар

Code: Select all

Program snop_steal;
{$Include 'timer.inc'}
{$Include 'checksave.inc'}
{$Include 'skilloger.inc'}

const
BackEny = $400496FD;	// ИД бекпака чара на ком качаемся
Sunduk = $4035FF1B;	// Сундук с котлетками
itemst = $097B;		// Что будем красть
eda = $097B;		// Что будем кушать


procedure snooping;
var ctime:TTimer;
skills : array of TSkill;
begin
skills := [makeSkill('Snooping')];
ctime:=setTimer(60000*5);
repeat
if (isTimerExpire(ctime)) then
begin
FindType(eda,backpack)
if FindCount > 0 then
begin
checksave;
UseObject(FindItem);
wait(500);
end;
resetTimer(ctime);
end;
checksave;
UseObject(BackEny);
wait(2500);
skillLogger(skills, @journalLogger);
until (GetSkillValue('Snooping') = 100) or Dead;
end;

procedure Stealing;
 var ctime:TTimer;
 stime : TDateTime;
 ist:integer;
 skills : array of TSkill;
begin
 skills := [makeSkill('Stealing')];
 ctime:=setTimer(60000*5);
 UseObject(BackEny);
 wait(2500);
repeat
  if (isTimerExpire(ctime)) then
  begin
   FindType(eda,backpack)
   if FindCount > 0 then
   begin
    checksave;
    UseObject(FindItem);
    wait(500);
   end;
   resetTimer(ctime);
  end;
  checksave;
  FindType(itemst,BackEny);
  if FindCount > 0 then
  begin
   WaitTargetObject(FindItem);
   wait(300);
   UseSkill('Stealing');
   stime:=Now;
   ist:=Count(itemst);
   repeat
    wait(500);
   until (InJournalBetweenTimes('You fail', STime, Now)<>-1) or (Count(Itemst) > ist) or Dead;
  end;
 FindType(itemst,backpack);
 if (FindCount > 0) AND (Count(itemst) >= 10) then
 begin
  moveitem(FindItem,5,Sunduk,0,0,0);
  wait(800);
 end;
  skillLogger(skills, @journalLogger);
 until (GetSkillValue('Stealing') >= 100) or Dead;
end;

Begin
if (GetSkillValue('Snooping') < 100) then
begin
 AddToSystemJournal('Snooping');
 snooping;
end;
 AddToSystemJournal('Stealing');
 stealing;

END.
Snoop Steal левак

Code: Select all

Program Popolnit_stealing;
const
Sunduk = $4035FF1B;	// Сундук с котлетками
itemst = $097B;		// Что будут красть

Begin
repeat
FindType(itemst,backpack);
if (FindCount=0) OR (GetQuantity(FindItem)<3) then 
begin
 useobject(Sunduk);
 wait(500);
 FindType(itemst,Sunduk);
 if FindCount > 0 then
 Begin
  Grab(FindItem,5);
 end;
end;
wait(10000);
until dead;
End.
Не судите строго...

Все скрипты на момент моей игры были работоспособны на сервере ДРВ.

Если нарушил чьито авторские права сильно не обижайтесь не специально...

Некоторые скрипты уникальны в своем роде так что можите отправить мне благодарность Z605801699331 буду признателен.... если такие найдутся...

Поддержку скриптов делать не буду... если что-то еще найду выложу...

Удачной игры и кача))
Невозможное возможнО!
OnlyMe
Neophyte
Neophyte
Posts: 15
Joined: 09.11.2008 1:38
Contact:

Post by OnlyMe »

[cоde]
Program PoisoningDRW;
{$Include 'all.inc'}
// (c) v26RuS (Galiano{ASTARTA} DRW)
Const
Sunduk=$403FD96C;
Dagger=$402E7A95;
kolvo=100;

var
PoisonFlag : Boolean;
time : TDateTime;

Begin
PoisonFlag:=true;
UseObject(Sunduk);
wait(1000);

repeat

FindTypeEx($0F0А,$0998,backpack,false);
if (GetQuantity(FindItem) < 1) then
begin
FindTypeEx($0F0А,$0998,Sunduk,false);
if (GetQuantity(FindItem) < 1) then
begin
PoisonFlag:=false;
AddToSystemJournal('Закончились бутылки пойзона');
end;
if (GetQuantity(FindItem) > 1) then
begin
grab(FindItem,kolvo);
AddToSystemJournal('Взяли '+IntToStr(kolvo)+' бутылок');
end;
end;

if PoisonFlag = true then
begin
time := now;
useskill('Poisoning');
wait(800);
waitfortarget(5000);
if targetpresent then
begin
targettoobject(Dagger);
wait(800);
waitfortarget(5000);
if targetpresent then WaitTargetType($0F0А);
waitjournalline(time,'You fail to apply|You apply the poison',30000);
wait(2000);
end;
end;


until (PoisonFlag=false) or (GetSkillValue('Poisoning') >= 100.0) or Dead;
End.

[/cоde]






СКРИПТ НА ПОЙЗОН НЕ РАБОТАЕТ!

13:29:58 [me]: WaitTargetType error: Object with type 0x0F0A not finded in Backpack! Canceled.
13:30:30 [me]: WaitTargetType error: Object with type 0x0F0A not finded in Backpack! Canceled.
13:31:02 [me]: WaitTargetType error: Object with type 0x0F0A not finded in Backpack! Canceled.

Если в беге есть бутылки , то он травит дагер , а как только бутылки заканчиваються , то все ! НАчинаеться вот это ! и к сундуку он не обращаеться ! ПОЧЕМУ ?
Last edited by OnlyMe on 30.11.2008 23:35, edited 1 time in total.
Gauhar
Novice
Novice
Posts: 87
Joined: 08.07.2008 17:40

Post by Gauhar »

Поменяй
Sunduk=$403FD96C;
Dagger=$402E7A95;
может заработает.
OnlyMe
Neophyte
Neophyte
Posts: 15
Joined: 09.11.2008 1:38
Contact:

Post by OnlyMe »

это все поменяно естественно ! Еще варианты ?
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Отредактируй пост с скриптом, заключи его в теги [cоde][/cоde] (выделить код скрипта и нажать соответствующую кнопку).
OnlyMe
Neophyte
Neophyte
Posts: 15
Joined: 09.11.2008 1:38
Contact:

Post by OnlyMe »

а поподробнее ? я чего то не понял что надо сделать ? и с чем ?
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Сравни сообщения с текстами скриптов и тем, которое написал ты (с скриптом). Никакой разницы не видишь?

В чужих постах код скрипта выводится на белом поле, озаглавленном Код:.

Это общепринятый способ публикации кодов скрипта. Также общепринято не помогать тем, кто не способен нормально запостить скрипт на форум.
OnlyMe
Neophyte
Neophyte
Posts: 15
Joined: 09.11.2008 1:38
Contact:

Post by OnlyMe »

оскорбления в адрес участников форума удалены цензурой.
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

От себя добавлю: конечно, оскорбить других проще, чем чуть пошевелить извилинами и привести свой пост с скриптом в порядок. Все с этим справляются, так что и вы смогли бы.

Никто вам ни в чем не обязан. Никто не должен вам писать скрипты, объяснять как они работают, исправлять ошибки и так далее.

Поэтому когда вы обращаетесь за помощью - вы ее просите. Так и ведите себя соответствующе. Если, конечно, хотите этой помощи дождаться. А если вы собираетесь помощи требовать - то ваши шансы весьма невелики.
admir
Novice
Novice
Posts: 97
Joined: 28.10.2008 20:44

Post by admir »

Респект автору за то что выложил.

Да я тоже заметил что иногда люди настколько не тактичны, что считают моим долгом выполнить их просьбу по написанию скрипта для них.
Кроме отго каждый раз стучат типа "ну че как там мой скрипт написал уже ? , а времени не было ? ну вощем я еще жду давай быстрее."

После этого думаешь - что за друг у тебя такой.
и потом в итоге перебарываешь себя делаешь ему приятное, а он и спасибо не скажет.
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Спасибо автору, нашёл скриптик на ковку цветных дагеров под дрв, дабы не утруждаться и не писать самому :) Правда пока что-то не куёт, но думаю поправлю. Удачи, v26RuS ;) 429827037

2Ошибочка вот здесь была.
В массиве имя с пробелом в конце, и в меню ещё пробел вначале ;)
В меню убираем и всё хорошо.

Code: Select all

    AutoMenu('Blacksmithing','Colored'); 
    AutoMenu('Colored',NameIng[i]+' Weapons'); 
    AutoMenu(NameIng[i]+' Weapons',NameIng[i]+'Swords'); 
    AutoMenu(NameIng[i]+' Swords',NameIng[i]+' Dagger');
Проще научить человека ловить рыбу, чем постоянно ею его кормить. (с) Destruction
nikbk
Neophyte
Neophyte
Posts: 45
Joined: 11.09.2009 0:02
Contact:

Post by nikbk »

если он не может нормально запостить скрипт то куда уж им пользоваться
"Совершенного кода не бывает, вседа найдется какой нибудь фрик который все испортит." © Cклонный к насилию Психопат
Alexej
Novice
Novice
Posts: 79
Joined: 06.06.2008 11:55
Contact:

Post by Alexej »

а пользоватся можно по разному:
- скопипастить и орать что неработает
- скопипастить и найти причину, поправить и юзать
- использовать как пример в обучении что и как можно реализовать
...

а человек запостивший все свои скрипты был в весолом настроении, т.к. забил на уо и решил чтобы непропали даром время и труд посвяженны уо канули в лету...
я думаю многие тут хорошенько поживились и сидят тихо и радуются, да наверное уже и забыли где брали те скрипты...
во всяком случае небыло замечено благодарностей автору темы :)
cektopa
Posts: 2
Joined: 12.01.2011 14:26
Contact:

Post by cektopa »

Вот проблемка с минингом...1.3 Помогите ктото...!!!) Плиииииз) Играю на ДРВ. Stealth v3.2.4 (Release 3.0)

Code: Select all

Character Unknown Name Connected.
 Compiling
 Compiler: [Error] (Mining.sc at 72:30):  Invalid number of parameters
 Compiling failed
 Script Mining.sc stopped successfuly
Ну вот кусок скрипта.

Code: Select all

// Search and use Vortex Scroll 
repeat 
   FindTypeEx(vxcol,Backpack);    <<<<<<<<<<<  Вот 72 строка 
    if FindCount>0 then 
     begin 
AddToSystemJournal('Кастую вортекса'); 
   repeat 
      UseObject(FindItem); 
      ctime:=Now; 
       wait(5000); 
      FindTypeEx(vxcol,backpack); 
   until (inJournalBetweenTimes('Vortex', ctime, Now)<>0) or (FindCount = 0); 
if (inJournalBetweenTimes('Vortex', ctime, Now)<>0) then castvx:=true; 
    end; 
Post Reply