1. Маг кастует огненную стену на предмет (сумка на полу).
2. Медитирует
3. Проверка на голод
4. Ждет.
Проблема - через какое то время маг ставит стенку огня не на объект, а на то место где стоит сам и еще 2 персонажа, которые хилят ходящего по стенке гнома - результат 3 трупа.
Заранее спасибо.
Вот скрипт
Code: Select all
Program MagicResistance;
// v.1.04 (c) Edred
{$Include 'all.inc'}
var
i:integer;
k:integer;
ctime : TDateTime;
const
sumka=$40107083; 
// Значение маны, с которого нужно начинать медитировать
tmana=33;
TypeCast='Fire Field';
// Реги
BPreg=$0F7A;
BMreg=$0F7B;
GAreg=$0F84;
GSreg=$0F85;
MRreg=$0F86;
NSreg=$0F88;
SAreg=$0F8C;
SSreg=$0F8D;
   procedure getitems(item:cardinal);
   // процедура берет из контейнера 20 шт указанного предмета
   begin
      if (count(item)=0) then
      begin
         findType(item,Ground);
         if (FindCount > 0) then
         begin
            k := FindQuantity;
            Grab(finditem,20);
            wait(1000);
            case item of
               BPreg : addtosystemjournal('взял 20 BP из ' + inttostr(k));
               SAreg : addtosystemjournal('взял 20 SA из ' + inttostr(k));
               SSreg : addtosystemjournal('взял 20 SS из ' + inttostr(k));
            end;
         end
         else
         begin
            addtosystemjournal('Мало!!!');
            repeat
               wait(5000);
               findType(item,Ground);
            until (FindCount > 0);
            Grab(finditem,20);
            wait(1000);
            case item of
               BPreg : addtosystemjournal('взял 20 BP из ' + inttostr(k));
               SAreg : addtosystemjournal('взял 20 SA из ' + inttostr(k));
               SSreg : addtosystemjournal('взял 20 SS из ' + inttostr(k));
            end;
         end;
      end;
   end;
   procedure Medita; 
   begin 
      while (WarMode = true) do SetWarMode(false);
      while (Mana < 30) do 
      begin 
         ctime := Now; 
         i:=0; 
         useskill('meditation');
         wait(1000); 
         repeat 
            wait(200); 
            i:=i+1; 
            checksave; 
         until (InJournalBetweenTimes('You are at peace.', ctime, Now)<>-1) or (i=300); 
         addtosystemjournal('медитация закончена'); 
      end; 
   end; 
   procedure Cast2Self;
   begin
      if TargetPresent then CancelTarget;
      case TypeCast of
         'Fire Field' :    begin getitems(BPreg); getitems(SAreg); getitems(SSreg); end;
//         'Lightning' :    begin getitems(BPreg); getitems(MRreg); getitems(SAreg); end;
//         'Poison' : begin getitems(NSreg); end;
      end;
      i:=0;
      ctime := Now;
      cast(TypeCast);
      repeat
          wait(800);
      until TargetPresent or (InJournalBetweenTimes('fizzles', ctime, Now)<>-1) or (i=50);
      if TargetPresent then TargetToObject(sumka);
      wait(1000)
      if (InJournalBetweenTimes('fizzles', ctime, Now)=-1) then addtosystemjournal('каст закончен');
      end;
Begin
   FindDistance:=1;
   while true do
   begin
      Hungry(2, -1);
      Cast2Self;
      wait(3000);
      Medita;
      wait(45000);
   end;
End.


