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

Вопрос:

тут можно задать вопрос по скриптингу
Post Reply
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Вопрос:

Post by pr0Zak »

Обясните или покажите, как работает таргет некст или (смена тайла для облова в скрипте)

Вот допустим в етом скрипте на фишинг, который Я нашол на етом форуме:

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.
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Re: Вопрос:

Post by WladL »

Code: Select all

program Fishing; 
// (c) v26RuS (Galiano{ASTARTA} DRW) 
      for x := -6 to 6 do 
      begin 
         for y := -6 to 6 do 
         begin 
......
               If TargetPresent then TargetToTile(0, GetX(self)+x, GETY(self)+y, 251); 
......
               
чар тупо облавливает на 6 клеток вокруг себя
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Post by pr0Zak »

Непонял вопрос мне нужна не система облова, а как происходит смена тайла ловли за щот чево?)
Mirage
Novice
Novice
Posts: 90
Joined: 18.07.2009 19:41

Post by Mirage »

TargetToTile(0, GetX(self)+x, GETY(self)+y, 251)
ловит в любом тайле (0) в координатах от -6 до +6 от себя (x y)
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Post by pr0Zak »

Mirage wrote:TargetToTile(0, GetX(self)+x, GETY(self)+y, 251)
ловит в любом тайле (0) в координатах от -6 до +6 от себя (x y)
Не ну допустим у нас на шарде строятца макросы по журналу.
Допустим ловлю я в первом заданом тайле и тут собщение ''Здесь рыбы больше нет'', ето сигнал для окончания ловли в етом тайле и перехода к следующему (вот мну интерисует как построить макрос для ловли по такому сюжету)

Допустим есть такая процедура облова, как зделать чтобы процедура реагировала на собщения из журнала и чар начинал ловить в следуйщей точке:

Code: Select all

procedure Fish;  // ничего менять больше не надо
begin
  Disarm;
   wait(1000);
  FindType(Tools[1],backpack);
   if FindCount > 0 then
  Equip(LhandLayer,finditem)
   else
 begin
  FindType(Tools[1],MainBox);
  Equip(LhandLayer,finditem);
 end;
  if TargetPresent then CancelTarget;
  waitconnection(3000);
  AddToSystemJournal('Начинаем ловить...');
   Wait(3500);
  UseObject(ObjAtLayerEx(LHandLayer,self));
  Wait(3500);
  WaitTargetTile(FishPos[PosNum].tile, FishPos[PosNum].x, FishPos[PosNum].y, FishPos[PosNum].z);
end;
Yazva
Neophyte
Neophyte
Posts: 11
Joined: 07.09.2009 22:58

Post by Yazva »

pr0Zak wrote:

Code: Select all

...
  WaitTargetTile(FishPos[PosNum].tile, FishPos[PosNum].x, FishPos[PosNum].y, FishPos[PosNum].z);
end;
...
после этой добавиш
WaitJournalLine(Now, 'Здесь рыбы больше нет', 60000);
естественно вносиш свои поправки
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Re: Вопрос:

Post by WladL »

pr0Zak wrote: {Сообщения}
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 = 'Вы не смогли выловить';

......
ctime := Now;
UseObject(ObjAtLayerEx(LHandLayer,self));
WaitForTarget(5000);
If TargetPresent then TargetToTile(0, GetX(self)+x, GETY(self)+y, 251);
k := 0;
//=====================
//Вот-же у тебя цикл проверки записей в журнале
//он пускается сразу после тыканья в тайл и ждет пока в журнале не появится одна из строк Mes1 или Mes2 или ...
//смотри описане фкнкции ниже
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);
//=====================
function InJournalBetweenTimes(Str: String; TimeBegin,TimeEnd: TDateTime): Integer; // поиск последней строки в журнале по слову (или по словам) во временном интервале
Post Reply