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

Сбор реагента

тут можно задать вопрос по скриптингу
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сбор реагента

Post by Vizit0r »

окей.
45vvv wrote:что-то он постоянно пытался сорвать не созревший реагент.
подробности в студию.


и чуть подправил скрипт.
45vvv wrote:

Code: Select all

Program SborReg;
const
reagent=$1A92;        //rostok
reagent2=$1A93;       //reagent
FlCon=$4055F97E;      //sumka dla reagenta

begin

  while not dead do  
  begin 
  
        If Not Hidden then  
        begin
        UseSkill('Hiding'); 
        Wait(5000);
        end; 
    
    If FindType(reagent,ground)>0 then 
    UseObject(FindItem );

         If FindType(reagent2,backpack)>0 then 
         begin
         MoveItem(finditem,0,FlCon,0,0,0);
         Wait(1000);
         AddToSystemJournal('Собрали и переложили!');
         Wait(6000);    // no Dos
         end;
    wait(1000);  //без этой задержки запросто скрипт может "потечь". циклы без задержек - зло.
   end;
end.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Re: Сбор реагента

Post by 45vvv »

Vizit0r wrote: подробности в студию.
там вроде все просто, в одной из первых редакций у меня просто юзало тип через промежуток определенный, а когда реагент сорван, то соответственно писало, что не нашло тип.

я все скрипт от "shinma" крутил и так и эдак, ну, и докрутился :)
Vizit0r wrote: и чуть подправил скрипт.
спасибо. вроде тихо пока.
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Re: Сбор реагента

Post by 45vvv »

решил добавить оповещение и лечение персонажа, вроде так:
вначале скрипта прописан тип бандажей.

Code: Select all

   
..................   
Wait(60000);    // no Dos
         end;   
        
      if HP < MaxHP THEN
      begin  
      While HP < MaxHP do
        
        PlayWav('C:\Ultima online\warning.wav');
           
            UseObject(bandages); 
            WaitTargetSelf; 
            wait(3000);   
      end;
    wait(1000);
   end;
end.

еще думаю добавить сообщение в журнал о нике игрока, который рядом был, но пока примера не нашел
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сбор реагента

Post by Vizit0r »

вначале время ставишь stime := Now
дальше InJournalBetweenTimes по 'YouSee:'

и потом из найденных строк берешь LineID

по поиску примеры с InJournalBetweenTimes есть
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Re: Сбор реагента

Post by 45vvv »

Code: Select all

...................... //sumka dla reagenta
bandages=$0E21; 
sTime := Now;
..................
         Wait(60000);    // no Dos
         end;   
   
            if  InJournalBetweenTimes ('You see:') <> -1 then
            begin
            AddToSystemJournal('LineID');
            end;
         
      if HP < MaxHP THEN
      begin  
      While HP < MaxHP do
        
        PlayWav('C:\Ultima online\warning.wav');
           
            UseObject(bandages); 
            WaitTargetSelf; 
            wait(3000);   
      end;
    wait(1000);
   end;
end.
типо того? но программа ругается на знак равенства "sTime := Now;; " хотя в других скриптах все так же стоит
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сбор реагента

Post by Vizit0r »

там не стоит две точки с запятой, да и параметров у InJournalBetweenTimes там явно побольше должно быть

нашел у себя какой-то хлам, как образец пойдет.

Code: Select all

stime := Now; 
UseObject(Feather); 
WaitTargetObject(Shafts); 
wait(200); 
  AddToSystemJournal('8');
repeat 
  c := InJournalBetweenTimes('performing|doing', stime, Now); 
  InJournalBetweenTimes('create|make|destroy', stime, Now); 
  wait(100); 
until (LineCount >= 1) or (Now > stime + (1.0/1440)) or (c >= 0); 
wait(100); 
дальше писать времени нет, вечером если еще надо будет - напишу.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Re: Сбор реагента

Post by 45vvv »

мудрено что-то,
не надо заморачиваться, не тратьте время и так сойдет, главное собирает и сбрасывает, ну, и подхил на всякий случай.
Post Reply