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

Мб кто знает...

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

Мб кто знает...

Post by pr0Zak »

Запускаю скрипт на фишинг и выдает вот такую ошибку :

Code: Select all

2:05:31 [XBOCT]: Compiler: [Error] (Ôèø.SC at 600:4):  Identifier expected
2:05:31 [XBOCT]: Compiling failed
2:05:31 [XBOCT]: Script Ôèø.SC stoped successfuly

ошибка указывает на поледний END.

ps. Все енды и бегины проверил вроде все норм немогу понять в чем ошибка, кто знает подскажите))
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Post by pr0Zak »

Читал, но Я всеровно не нечево непонял!!
зы. Я заметил что после попытки запуска скрипта помимо ошибки весь русский текст в скрипте приобразовалсо в такой вид:

Code: Select all

 ?????? ?????? ?????? ?? ????
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Post by pr0Zak »

Пыталса вчера написать ищо один скрипт, де чар должен был убивать тварей и лутить их и опять меня настигла таже ошибка, непойму в чем прикол))

Сам скрипт:

Code: Select all

Program Hobat; 

Const
MaxHits = 140;  // Хп при котором чар начинает хилитса


var 
Corpse: Cardinal;

  Item: array [1..10] of integer;
  ItemID: Cardinal;

//*************************************************************** 
//ОЖИДАНИЕ КОНЕКТА 
//*************************************************************** 
procedure WaitConnection; 
begin 
if Connected then exit; 
while not Connected do wait(100); 
wait(3000); 
end; 

//*************************************************************** 
// РЕСЕНД 
//*************************************************************** 
procedure Resend; 
begin 
Wait(1000); 
UOSay(Chr(39)+'resend'); 
Wait(5000); 
end; 

//*************************************************************** 
// ЧЕК ХП
//*************************************************************** 
procedure CheckHeal; 
begin 
  If Life < MaxHits then 
  begin 
    UOSay('Нэ вбЫвай плз! :)'); 
    while Life < Str do 
    begin 
      If isDead(self) then exit; 
      UOSay(Chr(39)+'pc heal self'); 
      Wait(3000); 
      addtosystemjournal('Лечимся'); 
    end; 
  end; 
end;

//*************************************************************** 
// ОДЕВАЕТ КАТАНУ И ЩИТ
//*************************************************************** 
Procedure CheckEquip; 
begin 
If (FindType($13FF, self) = 0) or (FindType($1B76, self) = 0) then 
begin 
WaitConnection; 
Disarm; 
wait(1000); 
If FindType($13FF, backpack) = 0 then UOSay('Катана в сумке не найдена');
If FindType($13FF, backpack) <> 0 then Equip(RhandLayer, finditem);
If FindType($1B76, backpack) = 0 then UOSay('Щит в сумке не найден'); 
If FindType($1B76, backpack) <> 0 then Equip(LhandLayer, finditem); 
wait(1000); 
end; 
end;

//*************************************************************** 
// Розделка трупа
//*************************************************************** 
procedure FindMobs; 
VAR 
Corpse: Cardinal;
j: integer; 
 
BEGIN
while true do 
begin 
FindDistance := 1; 

if FindType($2006, ground) <> 0 then 
begin 
AddToSystemJournal('Найден труп ' + IntToStr(finditem)); 
Corpse := finditem; 
If FindType($13FF, backpack) <> -1 then 
begin 
AddToSystemJournal('Режем труп'); 
WaittargetObject(Corpse); 
Wait(1000); 
UseObject(finditem); 
Wait(3500); 
end; 
UseObject(Corpse); 
Wait(1000); 
Ignore(Corpse);
begin
  j := 1;  
  UseObject(Backpack); 
  Wait(3200); 
  UOSay(Chr(39)+'resend'); 
  Wait(1000); 
  while j < 10 do 
  begin 
    If FindType(Item[j], Corpse) > 0 then 
    begin 
      ItemID := finditem; 
      If not(isDead(self)) then MoveItem(ItemID, 0, backpack, 0, 0, 0);
      Wait(1000); 
    end 
    else 
    begin 
      j := j + 1; 
    end; 
AddToSystemJournal('Закончили с трупом.');
end;
end; 
end;
end;

//*************************************************************** 
// Основная часть 
//*************************************************************** 
BEGIN
  AddToSystemJournal('Инициализируем переменные...');
  Item[1] := $0F21;               // Стар сапфиры
  Item[2] := $0EED;               // Золото
  Item[3] := $0F85;               // Гинс
  Item[4] := $0F86;               // Мр
  Item[5] := $0F7B;               // Блуд мус
  Item[6] := $0F88;               // Нс
  Item[7] := $0F7A;               // БП
  Item[8] := $0F84;               // Гарлик
  Item[9] := $0F8C;               // Сульфур
  Item[10] := $0F8D;              // СС
  AddToSystemJournal('Готово...');
  AddToSystemJournal('Запускаю макрос на хобот...');
  Ignore(self);
  FindDistance := 1; 

  if FindType($2006, ground) <> 0 then 
   begin 
   AddToSystemJournal('Найден труп ' + IntToStr(finditem));
   FindMobs;
   end; 
    If not(isDead(self)) then CheckEquip;
    If not(isDead(self)) then CheckHeal;
END.
Ошибка такаяже как и впридведущем посте, де указывает на последний ЕНД.
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

Code: Select all

procedure FindMobs; 
VAR 
Corpse: Cardinal; 
j: integer; 
  
BEGIN 
while true do 
begin 
   FindDistance := 1; 

   if FindType($2006, ground) <> 0 then 
      begin 
      AddToSystemJournal('Найден труп ' + IntToStr(finditem)); 
      Corpse := finditem; 
      If FindType($13FF, backpack) <> -1 then 
         begin 
         AddToSystemJournal('Режем труп'); 
         WaittargetObject(Corpse); 
	 Wait(1000); 
	 UseObject(finditem); 
	 Wait(3500); 
	 end; 
      UseObject(Corpse); 
      Wait(1000); 
      Ignore(Corpse); 
         begin                  <---- этот begin тут явно лишний
         j := 1;  
         UseObject(Backpack); 
         Wait(3200); 
         UOSay(Chr(39)+'resend'); 
         Wait(1000); 
         while j < 10 do 
	   begin 
	   If FindType(Item[j], Corpse) > 0 then 
              begin 
              ItemID := finditem; 
              If not(isDead(self)) then MoveItem(ItemID, 0, backpack, 0, 0, 0); 
              Wait(1000); 
              end 
           else 
              begin 
              j := j + 1; 
              end; 
           AddToSystemJournal('Закончили с трупом.'); 
           end; 
        end; 
     end; 
END; 
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Смени кодировку файла скрипта (например на Plain text) , и все будет ок с русским текстом.Проверено.
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Post by pr0Zak »

Спс действительно вся проблема была в лишнем Бегин


Ищо вопрос, почему нехотят работать ети процедуры в макросе на фиш?

Code: Select all

procedure Dig; // ничего менять больше не надо 
 begin
      Disarm; 
      wait(1000); 
      FindType(Tools[1],backpack); 
      if FindCount > 0 then 
       Equip(RhandLayer,finditem) 
      else 
       begin 
      FindType(Tools[1],MainBox); 
      Equip(RhandLayer,finditem); 
       end;
      If TargetPresent then 
      CancelTarget;
      AddToSystemJournal('Начинаем ловить...'); 
      Wait(3500); 
      WaitTargetTile(FishPos[PosNum].tile, FishPos[PosNum].x, FishPos[PosNum].y, FishPos[PosNum].z); 
      UseObject(Tools[1]); 
      WaitConnection(3000); 
end;

Code: Select all

procedure Dig;  // ничего менять больше не надо
begin
  Disarm;
   wait(1000);
  FindType(Tools[1],backpack);
   if FindCount > 0 then
  Equip(RhandLayer,finditem)
   else
 begin
  FindType(Tools[1],MainBox);
  Equip(RhandLayer,finditem);
 end;
  if TargetPresent then CancelTarget;
  waitconnection(3000);
  AddToSystemJournal('Начинаем ловить...');
   Wait(3500);
  UseObject(ObjAtLayerEx(RHandLayer,self));
  WaitForTarget(3000);
  If TargetPresent then TargetToTile(FishPos[PosNum].tile, FishPos[PosNum].x, FishPos[PosNum].y, FishPos[PosNum].z);
end;

Выдает вот такую ошибку:

Code: Select all

19:14:28 [XBOCT]: Çàïóñêàþ ìàêðîñ...
19:14:29 [XBOCT]: Íà÷èíàåì ëîâèòü...
19:14:33 [XBOCT]: UseObject error: Object not finded.
19:14:34 [XBOCT]: Íà÷èíàåì ëîâèòü...
19:14:38 [XBOCT]: UseObject error: Object not finded.
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

Для начала определи, правильно ли ты задаёшь руку. Левая или правая? Возьми удочку в руку и проверь, в какой руке она находиться.
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Post by pr0Zak »

grundick wrote:Для начала определи, правильно ли ты задаёшь руку. Левая или правая? Возьми удочку в руку и проверь, в какой руке она находиться.
Рука правая, а процедуры обе неработают немогу понять почему, тайп правельно стоит и нехочет юзать на удочку, он ее кстате воще даже в руки неберет!!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

может потому что в эквипе рука таки-да неправильно указана, а?

хватит лениться - проверь стелсом, а не визуально клиентом - тот весьма часто руку показывает неправильно.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

Сдаётся мне, что не тот тип поступает в FindType .

Code: Select all

FindType(Tools[1],backpack); 
      if FindCount > 0 then 
       Equip(RhandLayer,finditem) 
      else 
       begin 
      FindType(Tools[1],MainBox); 
      Equip(RhandLayer,finditem); 
       end; 
У тебя в обоих случаях ищет тип Tools[1]
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Re: Мб кто знает...

Post by Edred »

pr0Zak wrote:ошибка указывает на поледний END.

ps. Все енды и бегины проверил вроде все норм немогу понять в чем ошибка, кто знает подскажите))
Не хватает значит End-а, быстрее всего. Если бы отступы в скрипте делал как надо - сразу было бы видно. А так - считай на пальцах, где какой энд соответствует какому бегину.
Vano
Neophyte
Neophyte
Posts: 24
Joined: 31.01.2008 23:26

Post by Vano »

1. На сколько я помню, двуручное оружие (включая удочки) всегда берётся в левую руку. Соответственно, надо изменить слоя.
Смотреть в клиенте в какой руке чар держит удочку в корне неверно.
2.

Code: Select all

UseObject(Tools[1]); 
Вот это откровенная лажа, команда использования объекта, а подсовывается тип...
pr0Zak
Novice
Novice
Posts: 77
Joined: 15.09.2009 1:11
Location: Age of Power
Contact:

Post by pr0Zak »

Все верно удочка беретса в левую руку хотя, если смотреть на папердоле то удочка в правой руке-)
И теперь он на удочку юзает но незакидует удочку-)

Code: Select all

procedure Dig;  // ничего менять больше не надо 
begin 
  Disarm; 
   wait(1000); 
  FindType(Tools[1],backpack); 
   if FindCount > 0 then 
  Equip(RhandLayer,finditem) 
   else 
 begin 
  FindType(Tools[1],MainBox); 
  Equip(RhandLayer,finditem); 
 end; 
  if TargetPresent then CancelTarget; 
  waitconnection(3000); 
  AddToSystemJournal('Начинаем ловить...'); 
   Wait(3500); 
  UseObject(ObjAtLayerEx(RHandLayer,self)); 
  WaitForTarget(3000); 
  If TargetPresent then TargetToTile(FishPos[PosNum].tile, FishPos[PosNum].x, FishPos[PosNum].y, FishPos[PosNum].z); 
end;
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Проверяй что в момент заброса хранится в (FishPos[PosNum].tile, FishPos[PosNum].x, FishPos[PosNum].y, FishPos[PosNum].z) и расстояние свое до этой точки.
Что в UO Journal пишет в этот момент (есть ли сообщение о том что удочку заюзали)?
Post Reply