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

Не заводится.

тут можно задать вопрос по скриптингу
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Не заводится.

Post by nah nah »

Чего ему надо?

Code: Select all

Program New;
var i : Integer;
begin
  For i := 1 to 3 do
  Begin
    AddToSystemJournal(inttostr(Timer));
    Wait(100);
  End;
end.
Image

Втыкал ; после do, все равно не заводится
Last edited by nah nah on 20.12.2011 19:45, edited 3 times in total.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: Не заводится.

Post by Alex »

добавь в первый пост сообщение об ошибке которое стелс показывает
Новый стелс лежит тут. Стелс это произведение искусства! :)
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Сделано
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Не заводится.

Post by Vizit0r »

после begin не должно быть точки с запятой
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Все равно не работает
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

function Timer: Cardinal
Можно ли эту функцию как-то поглядеть. Собственно интересно сколько раз в секунду меняется значение
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Не заводится.

Post by Vizit0r »

взял скрипт с первого поста.
19:50:32:203 [Test - Test]: Compiling
19:50:32:218 [Test - Test]: Compiled succesfully
19:50:32:218 [Test - Test]: 42454953
19:50:32:328 [Test - Test]: 42455062
19:50:32:421 [Test - Test]: 42455156
19:50:32:531 [Test - Test]: Succesfully executed
19:50:32:531 [Test - Test]: Script 12.sc stopped successfuly
что я не так делаю?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Да я чё-то сам не понял =) Заработало после сохранения
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

То есть не сохраненный скрипт, не будет работать даже в режиме отладки. Не знал =) Все спасибо тему можно удалять\закрывать\заспамить рекламой тампонов
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Не заводится.

Post by Vizit0r »

потому что скрипт при компиляции подхватывается из файла, а не из редактора. так уж исторически сложилось.

насколько я помню, при выполнении предлагается сохранить файл
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Опять не заводится! Написал свой первый скрипт на стелс, это мининг. Ошибок куча, но вот эту я не могу понять.

Code: Select all

NewMoveXY(GetX(id_Forge), GetY(id_Forge), false, 1, true);
Пишет, что несоответствие типов. Мигающая палочка :) ставится между ) и ;

id_Forge забита в константах в виде $40006283. В вики написано, что 1ый и 2ой параматры newmove это Word, а GetX и GetY возвращают Integer, но подсмотрев в скриптах с этого форума, увидел, что должно работать.

Кароче жесть :evil:


ЗЫ Все разобрался! Было так

Code: Select all

Const
  id_Forge = '$40006283'
Все из-за инжекта =)
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Кароче. Вот мой шедевр, он не заводится!

Code: Select all

Program Mining;

Const
  id_OreContainer = 1;
  id_JewelContainer = 1;
  id_Forge = $40006283;
  UseStealth = false;
  UseSmelt = true;
  msg_t = 'loosen some|put the';
  msg_e = 'There is no|far away|mining|so close|line of sight|t use';
  t_Pickaxe = $0E85;
  
Procedure MiningAround;
var i, j, mx, my : Integer; 
    Delay : TDateTime;
Begin
  For i := -2 to 2 do
  Begin
    For j := -2 to 2 do
    Begin
      mx := GetX(self); my := GetY(self);
      Repeat
        If Weight >= 700 then
        Begin
          If UseSmelt then
          Begin
            NewMoveXY(GetX(id_Forge), GetY(id_Forge), false, 1, true);
            Smelt;
          End;
          GoToDest('bank');
          Reload;
          GoToDest('cave');
        End;
        Stealth;
        If TargetPresent then
          CancelTarget;
        If WarMode = true then
          SetWarMod(false);
        Repeat
          Wait(100);
        Until CheckLag(10000);        
        Delay := Timer;
        DelJournal(msg_t|msg_e);
        WaitTargetTile(1342, GetX(self) + i, GetY(self) + j, GetZ(self));
        UseType(t_Pickaxe);
        Repeat
          Wait(100)
        Until InJournal(msg_t|msg_e) or Delay + 15s <= Timer;
      Until InJournal(msg_e);
    End;
  End;
End;

Procedure Reload;
var t_Ore = '0x1BEF 0x19B9 0x19B8 0x19BA 0x19B7 0x0F0F 0x0F10 0x0F11 0x0F13 0x0F15 0x0F16 0x0F18 0x0F25 0x0F26' : String;
  i, moveDelay = 1100 : Integer;
  id_RecContainer : Cardinal;
  rQuit : Boolean
Begin
  For i := 1 to GetWordAmount(t_Ore, ' ') do
  Begin
    rQuit := false;
    Repeat
      If FyndType(GetWord(t_Ore, ' ', 1), -1, BackPack) then
      Begin
        If i < 5 then id_RecContainer := id_OreContainer else id_RecContainer := id_JewelContainer;
        Repeat
          Wait(100);
        Until CheckLag(10000);
        MoveItem(FindItem, -1, id_RecContainer);
        Wait(moveDelay);
      else
        rQuit := true;
      End;
    Until Quit;
  End;
  If Count(t_Pickaxe) < 4 then
  Begin
    For i := 1 to 4 - Count(t_Pickaxe) do
    Begin
      If FindType(t_Pickaxe, -1, id_JewelContainer) then
      Begin
        Repeat
          Wait(100);
        Until CheckLag(10000);
        MoveItem(FindItem, -1, BackPack);
        Wait(moveDelay);
      else
        AddToSystemJournal('Закончились кирки')
        Break;
      End;
    End;
  End;          
End;

Procedure GoToDest(dest) : String;
var BankToCaveTilesX = '2512 2515 2521 2528 2528 2553 2556 2558 2558 2567',
    BankToCaveTilesY = '553 544 538 538 501 501 504 503 496 483' : String;
    i, a, b : Integer;
  If dest = 'bank' then
  Begin
    a := -10; b := -1;
  else
    a := 1; b := 10;
  End;
  For i := a to b do
  Begin
    newMoveXY(StrToInt(GetWord(BankToCaveTilesX, ' ', Absolute(i))), StrToInt(GetWord(BankToCaveTilesY, ' ', Absolute(i))), true, 1);
  End;
End;

Procedure Smelt;
var t_Ore = '0x19B9 0x19B8 0x19BA 0x19B7' : String;
    i : Integer;
    rQuit : Boolian;
Begin
  For i = 1 to GetWordAmount(t_Ore, ' ') do
  Begin
    rQuit := false
    Repeat
      If FindType(GetWord(t_Ore, ' ', i), -1, BackPack) then
      Begin
        UseObject(FindItem);
        Wait(100);
      else
        rQuit := true;
      End;
    Until rQuit;
  End;
End;
    
Function GetWord(Const str, divider : String; num : Integer) : String;
var SL : TStringList;
    rStr
Begin
  SL := TStringList.Create; 
  StrBreakApart(str, divider, SL);
  If SL.Count > 0 then rStr := Sl.Strings[num];
  SL.Free;
  Result := rStr
End;

Function GetWordAmount(Const str, divider : String) : Integer;
var i : Integer;
Begin
  SL := TStringList.Create; 
  StrBreakApart(str, divider, SL);
  i := Sl.Count;
  SL.Free;
  Result := i
End;  
         
Procedure DelJournal(msg);
Begin
While InJornal(msg) do SetJournalLine(InJournal(msg), '');
End;

Begin
var TilesX = '2559 2560 2560 2564 2565 2568 2573 2578 2578 2578 2573 2574 2569 2568 2571 2570 2565 2564',
    TilesY = '496 491 487 484 479 476 476 476 481 485 485 481 481 486 489 489 489 493' : String;
    i : Integer;
  While true do
  Begin
    For i := 1 to GetWordAmount(TilesX, ' ') do
    Begin
      newMoveXY(StrToInt(GetWord(BankToCaveTilesX, ' ', Absolute(i))), StrToInt(GetWord(BankToCaveTilesY, ' ', Absolute(i))), true, 1);
      MiningAround;
    End;
  End;
End.
Он кричит, что Unknown identifier Smelt
Это в процедуре miningAround в начале, но процедура Smelt в файле присутствует... Что ему на этот раз надо? Уже сил нет.

ЗЫ Прошу помочь решить только эту ошибку в компиляции. Со всеми остальными хочу разобраться сам.
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: Не заводится.

Post by CFA »

nah nah wrote:Он кричит, что Unknown identifier Smelt
Это в процедуре miningAround в начале, но процедура Smelt в файле присутствует... Что ему на этот раз надо? Уже сил нет.
Дело в том, что Smelt объявлена позже, чем вызывается, поэтому компилятор о ней в момент вызова еще не знает. Есть 2 способа решить это -
1) Сделать так чтоб она была определена до своего первого вызова. В большинстве случаев такое возможно.
2) Если же это не возможно, то поможет директивая forward, она позволяет объявить процедуру или функцию без фактического определения ее тела.

Как-то так:

Code: Select all

Procedure Smelt; forward;

Procedure MiningAround;
begin
 ...
 Smelt;
 ...
end;

Procedure Smelt;
begin
 ...
end;
И лучше хранить координаты/тайлы/типы руды и тп в массивах/записях/массивах записей, а не в строках.
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Теперь ругается на FindType Несоответствие типов. Кусок кода

Code: Select all

Procedure Reload;
var t_Ore : Array of Word;
  i, moveDelay : Integer;
  id_RecContainer : Cardinal;
  rQuit : Boolean;
  
Begin
  t_Ore := [$1BEF, $19B9, $19B8, $19BA, $19B7, $0F0F, $0F10, $0F11, $0F13, $0F15, $0F16, $0F18, $0F25, $0F26]
  moveDelay := 1100
  For i := 0 to 13 do
  Begin
    rQuit := false;
    Repeat
      If FindType(t_Ore[i], BackPack) then
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Re: Не заводится.

Post by MuDaCk »

nah nah wrote:Теперь ругается на FindType Несоответствие типов. Кусок кода
FindType не булеан, а кардинал.
My name is Игорёшка Image
Пишу скрипты за едуImage
Post Reply