Page 1 of 1

Вопрос по поводу выхода из процедуры в случае истинности if

Posted: 09.05.2008 10:26
by Scripts Writer
Edred, привет. Несколько вопросов по этой процедуре- ответь по возможности:

1. В стелсе есть прерывание процедуры- аналог return в инжекте? Если нет, то каким образом можно это осуществить на местах комментариев?

2. В строке msg=Journal(0); выводится ошибка Assignment expected. Как можно исправить, чтоб в дальнейшем эту переменную типа String использовать как массив символов?

Code: Select all

procedure WaitForMessage;
begin
  for i:=0 to 200 do
    begin
      msg=Journal(0);
      if Journal(0)=msg_Nothing or Journal(0)=msg_Error1 or Journal(0)=msg_Error2 or Journal(0)=msg_Error3 or Journal(0)=msg_Error4 or Journal(0)=msg_Error5 or Journal(0)=msg_Error6 or Journal(0)=msg_Error7
        //
      if Journal(0)=GetName(self)+': You loosen some rocks' then
        begin
          wait(150)
          //
        end
      if msg[0]='Y' and msg[1]='o' and msg[2]='u' and msg[4]='p' and msg[5] ='u' and msg[6]='t' then   
        //
      wait(50)
    end
  //
end;

Re: Вопрос по поводу выхода из процедуры в случае истинности

Posted: 09.05.2008 11:10
by CFA
я конечно не Edred, но..
1) вместо return пользоватся exit - это выход из текущей функции/процедуры
2) для присваивания, вместо = используется :=, = используется при сравнении и при определении констант. Да и переменную msg предварительно надо объявить.

Re: Вопрос по поводу выхода из процедуры в случае истинности

Posted: 09.05.2008 11:29
by Scripts Writer
CFA wrote:я конечно не Edred, но..
1) вместо return пользоватся exit - это выход из текущей функции/процедуры
2) для присваивания, вместо = используется :=, = используется при сравнении и при определении констант. Да и переменную msg предварительно надо объявить.
Ещё немного не привык к программированию под стелс, а процедура- отрывок из большого скрипта не мининг,- переменная объявлена выше со спецификатором String.

Спасибо.

2Ещё один вопрос. Конструкция

Code: Select all

if Journal(0)=msg_Nothing or Journal(0)=msg_Error1 or Journal(0)=msg_Error2 or Journal(0)=msg_Error3 or Journal(0)=msg_Error4 or Journal(0)=msg_Error5 or Journal(0)=msg_Error6 or Journal(0)=msg_Error7 then
Выдаёт ошибку на втором сравнении, т.о. в случае если она имеет вид

Code: Select all

 if Journal(0)=msg_Nothing then 
всё работает, но если добавить второе условие в эту же строку, то

Code: Select all

 Type mismatch 
перед знаком "=" второго сравнения.

Re: Вопрос по поводу выхода из процедуры в случае истинности

Posted: 09.05.2008 12:13
by CFA
дело в том, что логические операции or и and имеют более высокий приоритет чем сравнение, и получается, что сначала должна выполнится операция or между строками msg_Nothing и Journal(0), что и приводит к ошибке. Решение - взять в скобки сравнения - (Journal(0)=msg_Nothing) or (Journal(0)=msg_Error1) и тд.

Posted: 09.05.2008 13:07
by Scripts Writer
Всё работает. Спасибо

Posted: 09.05.2008 19:37
by Edred
Могу еще добавить только следующее: в стелсе есть более удобные для использования возможности работы с журналом, нежели Journal(0). Почитай команды работы с журналом, обрати внимание на проверку журнала в указанном диапазоне времени. Применение подобных команд полностью избавляет от необходимости чистить журнал, например.