Форум TeamX
   Home   Members  
Pages: [1] |   Go Down
 
Author Topic: Имена функций как параметры  (Read 852 times)
Jordan
Пользователь
Posts: 416

476228895
Имена функций как параметры
« on: 31 May 2009, 17:56:30 »

Почему не вызывается диалог?

glfuncs.h


#define var variable



var GOOD_REACTION    :=49;
var NEUTRAL_REACTION :=50;
var BAD_REACTION     :=51;

//export var script_number;

//export procedure GOption(var x, var y, var z);
//export procedure NOption(var x, var y, var z);
//export procedure BOption(var x, var y, var z);
//export procedure GMessage(var x);
//export procedure NMessage(var x);
//export procedure BMessage(var x);
//export procedure Reply(var x);

procedure Dialog(var x) begin
       start_gdialog(script_number, self_obj, 4, -1, -1);
       gSay_Start;
           call x;
       gSay_End;
       end_dialogue;
end

procedure Reply(var x) begin
gSay_Reply(script_number, x);
end

procedure GMessage(var x) begin
gSay_Message(script_number, x, GOOD_REACTION);
end

procedure NMessage(var x) begin
gSay_Message(script_number, x, NEUTRAL_REACTION);
end

procedure BMessage(var x) begin
gSay_Message(script_number, x, BAD_REACTION);
end

procedure GOption(var x, var y, var z) begin
giq_option(z, script_number, x, y, GOOD_REACTION);
end

procedure NOption(var x, var y, var z) begin
giq_option(z, script_number, x, y, NEUTRAL_REACTION);
end

procedure BOption(var x, var y, var z) begin
giq_option(z, script_number, x, y, BAD_REACTION);
end

ACKLINT.SSL


variable script_number := 751;

//import var script_number;

//import procedure GOption(var x, var y, var z);
//import procedure NOption(var x, var y, var z);
//import procedure BOption(var x, var y, var z);
//import procedure Reply(var x);

procedure start;
#include "glfuncs.h"
procedure critter_p_proc;
procedure pickup_p_proc;
procedure talk_p_proc;
procedure destroy_p_proc;
procedure look_at_p_proc;
procedure description_p_proc;
procedure damage_p_proc;
procedure map_enter_p_proc;

procedure Node998;
procedure Node999;
procedure Node001;


procedure start begin
end

procedure map_enter_p_proc begin

end

procedure critter_p_proc begin
end

procedure damage_p_proc begin
end

procedure pickup_p_proc begin
end

procedure talk_p_proc begin
       //start_gdialog(script_number,self_obj,4,-1,-1);
       //gSay_Start;
       //    call Node001;
       //gSay_End;
       //end_dialogue;

       call Dialog(Node001); - это не работает
end

procedure destroy_p_proc begin
end

procedure look_at_p_proc begin
end

procedure description_p_proc begin
end

procedure Node998 begin
end

procedure Node999 begin
end

procedure Node001 begin
   call Reply(103);
   call NOption(106,Node999,4);
   call NOption(107,Node999,4);
   call NOption(108,Node999,4);
end

В чем проблема? Может потому что в процедуре есть call и при вызове тоже call?
« Last Edit: 31 May 2009, 17:58:41 by Jordan »

Воспрянет Россия, из праха отцов
Расправятся крылья, миллионов сердец
Поднимут все головы и грудью вздохнут
И громка скажут, что пришли
Мы пришли, со столетней войны
KLIMaka
Пользователь
Posts: 72


Имена функций как параметры
« Reply #1 on: 01 June 2009, 01:05:51 »

Проблема в том, что любое упоминание имени ф-ии (кроме случаев, оговоренных компилятором) воспринимается как ее вызов, и call Dialog(Node001) воспринимается как передача результата из Node001 в Dialog, в качестве аргумента. Т.е. сначала выполняется Node001, и после этого вершина стека ( 0 в данном случае ) становится фактическим аргументом Dialog. Такие-вот пироги. Замени call Dialog(Node001) на call Dialog("Node001") - должно работать именно так, как предпологалось.
Jordan
Пользователь
Posts: 416

476228895
Имена функций как параметры
« Reply #2 on: 01 June 2009, 08:16:43 »

Теперь заработало. Нужно было объявить процедуру до талк п прок.

procedure Node001;
procedure talk_p_proc;

Воспрянет Россия, из праха отцов
Расправятся крылья, миллионов сердец
Поднимут все головы и грудью вздохнут
И громка скажут, что пришли
Мы пришли, со столетней войны
Pages: [1] |   Go Up