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

Animal Taming -> Kill

тут можно задать вопрос по скриптингу
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Animal Taming -> Kill

Post by 45vvv »

Помогите подправить скрипт:

• тамит животное
• если затамил, то подзывает к себе и убивает
• и так бесконечно

Code: Select all

program animal_taming;

var time_begin : TDateTime;
    animal_type : array [1..2] of Byte;
    count, i : Integer;

Begin

animal_type[1] := $00DC   // Llama
animal_type[2] := $00DC   // Llama


FindDistance := 10
FindVertical := 20

ClearJournal
SetARStatus(true)
if not connected then connect
while not connected do wait(100)
SetWarMode(false)

repeat

   while (dead = false) and (connected = true) do
      begin

      if (i > 0) and (i <= 2) then
         begin
         while FindTypeEx(animal_type[i], $FFFF, ground, false) <> 0 do
            begin
            time_begin := Now
            while InJournalBetweenTimes('accept|already|далеко', time_begin, Now) = -1 do
               begin
               if TargetPresent then
                  begin

                  CancelTarget
                  wait(1000)
                  end
               WaitTargetObject(FindItem)
               UseSkill('Animal Taming')
               WaitJournalLine(Now, 'accept|fail|already|battle|далеко|action', 30000)
               if InJournalBetweenTimes('action|already', time_begin, Now) <> -1 then wait(1500)
               if InJournalBetweenTimes('battle', time_begin, Now) <> -1 then
                  begin
                  SetWarMode(false)
                  wait(1000)
                  end
               end
               if InJournalBetweenTimes('accept', time_begin, Now) <> -1 then count := count + 1
            Ignore(FindItem)
UOSay('all come')
attack(animal_type);
wait(10000)
            end

   if dead then
      begin
      AddToSystemJournal('Умерли')
      SetARStatus(false)
      Disconnect
      Exit
      end

until false

End.

17:21:46 [***]: Compiler: [Error] (Taming.sc at 19:1): Semicolon (';') expected
17:21:46 [***]: Compiling failed
17:21:46 [***]: Script Taming.sc stopped successfuly
Last edited by 45vvv on 31.01.2010 16:20, edited 2 times in total.
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Post by 45vvv »

а может можно даже как-то короче и проще сделать?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Animal Taming -> Kill

Post by Vizit0r »

45vvv wrote:
17:21:46 [***]: Compiler: [Error] (Taming.sc at 19:1): Semicolon (';') expected
17:21:46 [***]: Compiling failed
17:21:46 [***]: Script Taming.sc stopped successfuly

http://stealth.od.ua/forum/viewtopic.php?t=1278
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
randomnoob
Neophyte
Neophyte
Posts: 30
Joined: 10.04.2008 22:26

Post by randomnoob »

Code: Select all

program tamingKill;

var
k : integer;
ctime : TDateTime;
const
animal := ;

{$Include 'all.inc'}

Begin
   FindDistance := 10;
   FindVertical := 20; //нужно ли тебе искать в разной
                              //высоте?                                                         
   while FindTypeEx(animal, $FFFF, ground, false) <> 0 and (not dead) do
   begin
      while not connected do wait(100);
      SetWarMode(false);
      if TargetPresent then CancelTarget;
      ctime := Now;
      UseSkill('Animal Taming');
      WaitTargetObject(FindItem);
      k := 0;
      repeat
         wait(100);
         k := k + 1;
      until (InJournalBetweenTimes('accept you as master|You fail|is already tame.', ctime, Now)<>-1) or (k > 600);
      If (injournal('accept you as master|is already tame.')<>-1) or (k>600) then
      begin
        repeat 
          uosay('all come' );
          wait(5000);
          // сюда допиши убийство твари с проверкой на ХП (на форуме таких скриптов куча)
        until FindTypeEx(animal, $FFFF, ground, false) = 0;
      end;
        CheckSave;
   end;
End.
если нужно, могу построчно объяснить что каждая строчка делает, как дописать атаку и другие вопросы
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Post by 45vvv »

буду пытаться этот интегрировать, методом "тыка"

Code: Select all

Program killer;
var monster : Cardinal;
const
    Monstr = $0000; // Тип монстра

Begin
  repeat
    begin
      FindType(Monstr,ground);
      If FindCount > 0 then
        begin
          monster := FindItem;
          AddToSystemJournal('-= Монстр найден, атакую =-');
          Attack(monster);
          wait(5000);
          end
      Else
        begin
          AddToSystemJournal('-= Монстр не найден =-');
          wait(5000);
        end;
    end;
  until Dead;
End.
randomnoob
Neophyte
Neophyte
Posts: 30
Joined: 10.04.2008 22:26

Post by randomnoob »

45vvv wrote:буду пытаться этот интегрировать, методом "тыка"
из того скрипта тебе нужна максимум 1 строчка

Code: Select all

Attack(finditem);
посмотри в разделе Scripts есть скрипты на спаринг, из них сюда:

Code: Select all

        repeat
          uosay('all come' );
          wait(5000);
          ....
        until FindTypeEx(animal, $FFFF, ground, false) = 0; 
вырежи:
-подхил своего чара (вдруг тварь тебя забьет насмерть :)
-проверку на хп твари (для того чтоб узнать когда она здохнет)

в помощь тебе список команда
http://stealth.od.ua/forum/viewtopic.php?t=1220

ПС: действия, которые ты хочешь выполнять очень просты, так что это отличный шанс выучить основы скриптования в стелсе на примере

Code: Select all

While HP < MaxHP do
Begin
UseType(bandages, $0000); // $0000 - цвет бинтов (безцветный)
WaitTargetSelf;
wait(2000); 
end;
в данном случае HP - функция которая возвращает ХП персонажа
MaxHP - константа, которую нужно задавать в начале скрипта
bandages - тип бинтов, тоже константа в начале скрипта
смысл этого кусочка - если хп не полное юзаем бинт и ждем по 2секунды. повторяем это пока хп не станет полным
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Post by 45vvv »

спс, но я этот скрипт добью и закончу на этом.
это слишком тяжко для познания =(

стелс- для продвинутых!

Code: Select all

program tamingKill;

var
k : integer;
ctime : TDateTime;
const
animal := $00DC   // Llama 
{$Include 'all.inc'}
Begin
   FindDistance := 10;                                          
   while FindTypeEx(animal, $FFFF, ground, false) <> 0 and (not dead) do
   begin
      while not connected do wait(100);
      SetWarMode(false);
      if TargetPresent then CancelTarget;
      ctime := Now;
      UseSkill('Animal Taming');
      WaitTargetObject(FindItem);
      k := 0;
      repeat
         wait(100);
         k := k + 1;
      until (InJournalBetweenTimes('accept you as master|You fail|is already tame.', ctime, Now)<>-1) or (k > 600);
      If (injournal('accept you as master|is already tame.')<>-1) or (k>600) then
      begin
        repeat
          uosay('all come' );
          wait(5000);
               // сюда допиши убийство твари с проверкой на ХП (на форуме таких скриптов куча)
                     Attack(animal);
         // сюда допиши убийство твари с проверкой на ХП (на форуме таких скриптов куча)
        until FindTypeEx(animal, $FFFF, ground, false) = 0;
      end;
        CheckSave;
   end;
End.
выдает ошибку:
Compiler: [Error] (Taming.sc at 7:8): is ('=') expected
randomnoob
Neophyte
Neophyte
Posts: 30
Joined: 10.04.2008 22:26

Post by randomnoob »

1) ошибка нету ; в константе, где ты задаешь ламу
2) при объявлении констант используется обычное "=", а не ":="

а кстати и еще, допиши в конце скрипта задержку секунд в 10. потому что, как я понимаю, твари у тебя не сразу будут появляться и тогда скрипт будет проигрываться тыщапицот раз в секунду и может зависнуть
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Post by 45vvv »

animal := $00DC // Llama
на
animal =$00DC; // Llama
----

Code: Select all

Compiler: [Error] (Taming.sc at 11:71):  Type mismatch
while FindTypeEx(animal, $FFFF, ground, false) <> 0 and (not dead) do
randomnoob
Neophyte
Neophyte
Posts: 30
Joined: 10.04.2008 22:26

Post by randomnoob »

измени свои строки на:

Code: Select all

   while FindTypeEx(animal, $FFFF, ground, false) <> 0 do
   begin
      while not connected do wait(100);
      if dead then exit;
сам не знаю, что в моей конструкции не так.

кстати, у тебя скрипт не зацыклен. если нужно чтоб он проверял бесконечно, скажем, раз в 10 секунд

Code: Select all

repeat
while FindTypeEx
....
end; // передпоследний
wait(10000);
until dead;
end.
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Post by 45vvv »

Code: Select all

          uosay('all come' );
          wait(2000);
               // сюда допиши убийство твари с проверкой на ХП (на форуме таких скриптов куча)
                     Attack(FindItem);
         // сюда допиши убийство твари с проверкой на ХП (на форуме таких скриптов куча)
        until FindTypeEx(animal, $FFFF, ground, false) = 0;
      end;
        CheckSave;
end; // передпоследний
wait(10000);
until dead;
end.
при убийстве:
Attack error: Object not finded.
randomnoob
Neophyte
Neophyte
Posts: 30
Joined: 10.04.2008 22:26

Post by randomnoob »

[quote="45vvv"]

Code: Select all

          uosay('all come' );
if FindTypeEx(animal, $FFFF, ground, false) <> 0 then
                     Attack(FindItem);
          wait(2000);
        until FindTypeEx(animal, $FFFF, ground, false) = 0;
      end;
        CheckSave;
end;
wait(10000);
until dead;
end.
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Post by 45vvv »

ИТОГ:

Animal Taming

- Встаем рядом с животным и запускаем скрипт
- Если есть рядом живность, то тамит
- Если затамил, то убивает
- И это все бесконечно

Code: Select all

program tamingKill;

var
k : integer;
ctime : TDateTime;
const
animal =$00DC;    // Llama 
{$Include 'all.inc'}
Begin
   FindDistance := 10;  
   repeat                                         
   while FindTypeEx(animal, $FFFF, ground, false) <> 0 do
   begin
      while not connected do wait(100);
      SetWarMode(false); 
      if dead then exit;
      ctime := Now;
      UseSkill('Animal Taming');
      WaitTargetObject(FindItem);
      k := 0;
      repeat
         wait(100);
         k := k + 1;
      until (InJournalBetweenTimes('accept you as master|You fail|is already tame.', ctime, Now)<>-1) or (k > 600);
      If (injournal('accept you as master|is already tame.')<>-1) or (k>600) then
 uosay('all come' );
      begin
        repeat
if FindTypeEx(animal, $FFFF, ground, false) <> 0 then
                     Attack(FindItem);
          wait(2000);
        until FindTypeEx(animal, $FFFF, ground, false) = 0;
      end;
        CheckSave;
end;
wait(10000);
until dead;
end.

П.С.
Вроде работает, " uosay('all come' );"-поднял повыше, чтобы не повторял фразу



thnx, randomnoob!
randomnoob
Neophyte
Neophyte
Posts: 30
Joined: 10.04.2008 22:26

Post by randomnoob »

45vvv wrote:
П.С.
Вроде работает, " uosay('all come' );"-поднял повыше, чтобы не повторял фразу
только УО.сей засунь под
begin
end;

а то так, как ты сделал. у тебя после условия

Code: Select all

If (injournal('accept you as master|is already tame.')<>-1) or (k>600) then 
исполяется только следующая строчка, а должно исполнятся
всё от

Code: Select all

begin
...
end;
получается надо так:

Code: Select all

      If (injournal('accept you as master|is already tame.')<>-1) or (k>600) then
      begin
 uosay('all come' ); 
кстати, и атаку в принципе тоже можно убрать из цикла. 1 раза достаточно. а в тот цикл как раз добавить простенький хил, который я кидал тебе в начале темы
45vvv
Neophyte
Neophyte
Posts: 29
Joined: 31.01.2010 15:39

Post by 45vvv »

вот, подправил:

Code: Select all

program tamingKill;

var
k : integer;
ctime : TDateTime;
const
animal =$00DC;    // Llama 
{$Include 'all.inc'}
Begin
   FindDistance := 10;  
   repeat                                         
   while FindTypeEx(animal, $FFFF, ground, false) <> 0 do
   begin
      while not connected do wait(100);
      SetWarMode(false); 
      if dead then exit;
      ctime := Now;
      UseSkill('Animal Taming');
      WaitTargetObject(FindItem);
      k := 0;
      repeat
         wait(100);
         k := k + 1;
      until (InJournalBetweenTimes('accept you as master|You fail|is already tame.', ctime, Now)<>-1) or (k > 600);
      If (injournal('accept you as master|is already tame.')<>-1) or (k>600) then
      begin
      uosay('all come');
      Attack(FindItem);
        repeat
if FindTypeEx(animal, $FFFF, ground, false) <> 0 then
          wait(2000);
        until FindTypeEx(animal, $FFFF, ground, false) = 0;
      end;
        CheckSave;
end;
wait(10000);
until dead;
end.
Post Reply