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

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

тут можно задать вопрос по скриптингу
Post Reply
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

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

Post 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;
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

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

Post by CFA »

я конечно не Edred, но..
1) вместо return пользоватся exit - это выход из текущей функции/процедуры
2) для присваивания, вместо = используется :=, = используется при сравнении и при определении констант. Да и переменную msg предварительно надо объявить.
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

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

Post 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 
перед знаком "=" второго сравнения.
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

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

Post by CFA »

дело в том, что логические операции or и and имеют более высокий приоритет чем сравнение, и получается, что сначала должна выполнится операция or между строками msg_Nothing и Journal(0), что и приводит к ошибке. Решение - взять в скобки сравнения - (Journal(0)=msg_Nothing) or (Journal(0)=msg_Error1) и тд.
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Всё работает. Спасибо
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

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