Многим наверно сложно читать такой код
Code:
if (local_var(LVAR_Personal_Enemy) == 1) then begin
call Node998;
end
else if (dude_iq <= 3) then begin
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
call Node002;
gSay_End;
end_dialogue;
end
else if (critter_is_armed(dude_obj)) then begin
call Node012;
end
else if( global_var(GVAR_BH_JAIL) == JAIL_STEALTH ) then
call Node015;
else begin
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
if( local_var(LVAR_Herebefore) == 0 ) then
call Node001;
else
call Node013;
gSay_End;
end_dialogue;
end
set_local_var( LVAR_Herebefore, 1 );
call Node998;
end
else if (dude_iq <= 3) then begin
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
call Node002;
gSay_End;
end_dialogue;
end
else if (critter_is_armed(dude_obj)) then begin
call Node012;
end
else if( global_var(GVAR_BH_JAIL) == JAIL_STEALTH ) then
call Node015;
else begin
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
if( local_var(LVAR_Herebefore) == 0 ) then
call Node001;
else
call Node013;
gSay_End;
end_dialogue;
end
set_local_var( LVAR_Herebefore, 1 );
Много begin'ов. Как в паскале.
С помощью препроцессора можно сделать синтаксис похожим на modul'у
Этот же код
Code:
IF (local_var(LVAR_Personal_Enemy) == 1) THEN
CALL Node998;
ELSIF (dude_iq <= 3) THEN
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
call Node002;
gSay_End;
end_dialogue;
ELSIF (critter_is_armed(dude_obj)) THEN
CALL Node012;
ELSIF( global_var(GVAR_BH_JAIL) == JAIL_STEALTH ) THEN
CALL Node015;
ELSE
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
IF( local_var(LVAR_Herebefore) == 0 ) THEN
CALL Node001;
ELSE
CALL Node013;
END
gSay_End;
end_dialogue;
END
set_local_var( LVAR_Herebefore, 1 );
CALL Node998;
ELSIF (dude_iq <= 3) THEN
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
call Node002;
gSay_End;
end_dialogue;
ELSIF (critter_is_armed(dude_obj)) THEN
CALL Node012;
ELSIF( global_var(GVAR_BH_JAIL) == JAIL_STEALTH ) THEN
CALL Node015;
ELSE
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
IF( local_var(LVAR_Herebefore) == 0 ) THEN
CALL Node001;
ELSE
CALL Node013;
END
gSay_End;
end_dialogue;
END
set_local_var( LVAR_Herebefore, 1 );
Скопируйте в скрипт
Code:
#define THEN then begin
#define ELSIF end else if
#define ELSE end else begin
#define DO do begin //для цикла
#define ELSIF end else if
#define ELSE end else begin
#define DO do begin //для цикла
Теперь не нужно писать begin после then, но каждый then должен закрываться end'ом.
Но только не в условии ELSIF.
Пример
было
Code:
if( local_var(LVAR_Herebefore) == 0 ) then
display_msg(mstr(100));
else
display_msg(mstr(101));
display_msg(mstr(100));
else
display_msg(mstr(101));
стало
Code:
IF( local_var(LVAR_Herebefore) == 0 ) THEN
display_msg(mstr(100));
ELSE
display_msg(mstr(101));
END
display_msg(mstr(100));
ELSE
display_msg(mstr(101));
END
Пример с ELSIF
Code:
IF (LSpeech) THEN
Option(101,Node001);
ELSIF (ASpeech) THEN
Option(102,Node003);
ELSIF (HSpeech) THEN
Option(103,Node004);
END
WHILE (I < 50) DO
END
Option(101,Node001);
ELSIF (ASpeech) THEN
Option(102,Node003);
ELSIF (HSpeech) THEN
Option(103,Node004);
END
WHILE (I < 50) DO
END
Проблемы: fgeck выдаёт ошибку и не может распарсить скрипт на процедуры.