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

Ветеринария для Ethereal Portal

тут можно задать вопрос по скриптингу
Post Reply
Vargul
Neophyte
Neophyte
Posts: 49
Joined: 16.09.2010 10:30

Ветеринария для Ethereal Portal

Post by Vargul »

Code: Select all

Program Veterinary;
{$Include 'all.inc'}
var
t,k:integer;
ctime : TDateTime;  

Const
bandage=$0E21;
Color_bndg=$0000;
blbandage=$0E20;
Sunduk=$405D1BF0; //Сундук куда скидывам кровавые бинты и где лежит корм для лошадок
Horse1=$004A416F; //Лошадка 1
Horse2=$0020F411; //Лошадка 2
seno=$1EBD; //Сено


   procedure Check_eda;
    var tmp1 : cardinal;
    tmp2 : Integer;
begin
  UseObject(Sunduk);
  FindType(seno,sunduk);
      if (FindCount>0) then
       begin
         MoveItem(FindItem,5,Horse1,0,0,0);
         wait(1250);
       end;
     tmp1 := findtype(seno,backpack);
     tmp2 := GetQuantity(tmp1);
     MoveItem(tmp1, tmp2, Sunduk, 0, 0, 0);
end;

   procedure Check_eda2;
    var tmp1 : cardinal;
    tmp2 : Integer;
begin
  UseObject(Sunduk);
  FindType(seno,sunduk);
      if (FindCount>0) then
       begin
         MoveItem(FindItem,5,Horse2,0,0,0);
         wait(1250);
       end;
     tmp1 := findtype(seno,backpack);
     tmp2 := GetQuantity(tmp1);
     MoveItem(tmp1, tmp2, Sunduk, 0, 0, 0);
end;

procedure Check_blbndg;
 begin
    Repeat
        FindType(blbandage,Backpack);
        while FindCount>0 do
          begin
           t:=CountEx(blbandage,Color_bndg,Backpack);
           MoveItem(FindItem,t,Sunduk,0,0,0);
           wait(1000);
           FindType(blbandage, backpack);
          end;
    Until FindCount=0;
 end;



   procedure getitems(item:cardinal); 
   begin 
      if (count(item)<3) then 
      begin 
         findType(item,Ground); 
         if (FindCount > 0) then 
         begin 
            k := FindQuantity; 
            Grab(finditem,20); 
            wait(500); 
            checksave; 
            case item of 
               bandage : addtosystemjournal('взял 20 bandage из ' + inttostr(k)); 
            end; 
         end 
         else 
         begin 
            addtosystemjournal('Мало!!!'); 
            repeat 
               wait(5000); 
               findType(item,Ground); 
            until (FindCount > 0); 
            Grab(finditem,20); 
            wait(1000); 
            checksave; 
            case item of 
               bandage : addtosystemjournal('взял 20 bandage из ' + inttostr(k)); 
             end; 
         end; 
      end; 
   end; 


         procedure HealHorse1;
   begin
      waitconnection(5000);
         check_eda;
         getitems(bandage);
         while (GetHP(Horse1) < GetMaxHP(Horse1)) do
         begin
            ctime := Now;
            UseObject(FindType(bandage,Backpack));
            WaitForTarget(1000);
             if targetpresent then
                begin
                TargetToObject(Horse1);
                end;
            k := 0;
            repeat
               wait(6000);
               k := k + 1;
            If (InJournalBetweenTimes('mummy', ctime, Now)<>-1) then exit;
            until (InJournalBetweenTimes('You put|apply|wait|already', ctime, Now)<>-1) or (k > 30);
         end;
         if (GetHP(Horse1)=GetMaxHP(Horse1)) then addtosystemjournal('Лошадка 1 полностью вылечена');
   end;

            procedure HealHorse2;
   begin
      waitconnection(5000);
         check_eda2;
         getitems(bandage);
         while (GetHP(Horse2) < GetMaxHP(Horse2)) do
         begin
            ctime := Now;
            UseObject(FindType(bandage,Backpack));
            WaitForTarget(1000);
             if targetpresent then
                begin
                TargetToObject(Horse2);
                end;
            k := 0;
            repeat
               wait(4000);
               k := k + 1;
            If (InJournalBetweenTimes('mummy', ctime, Now)<>-1) then exit;               
            until (InJournalBetweenTimes('You put|apply|wait|already', ctime, Now)<>-1) or (k > 30);
         end;
         if (GetHP(Horse2)=GetMaxHP(Horse2)) then addtosystemjournal('Лошадка 2 полностью вылечена');
   end;





Begin
FindDistance := 0;
SetARStatus(true);
While not Dead do
  Begin
     getitems(bandage);
     UOSAY('All kill');         
      WaitForTarget(1500);
        if targetpresent then
           begin
           TargetToObject(Horse1);
           end;
           CheckLag(1000);
           While (GetHP(Horse1) > GetMaxHP(Horse1)/2) and (GetHP(Horse2) > GetMaxHP(Horse2)/2) do wait(100);
           CheckLag(2000);
           UOSAY('All stop');
           HealHorse1;
           HealHorse2;
           Check_blbndg;
     Hungry(0,-1);
  end;   
End.

Задумка работы скрипта - 2 лошадки, натравливаем одну на другую, при ХП меньше половины максимального, говорим all stop (лошадки перестают атачить друг дружку), кормим, хилим по очереди, сначала одну потом вторую, опять натравливаем и так по кругу.

Критика приветствуется.
Post Reply