|
|
|
|
| Author: Wasteland Ghost 07.02.05 15:51:58 | Вызов функции. Синтаксис оригинального компилятора: call procedure_name [in delay | when condition]; - вызов процедуры Параметры: procedure_name - имя процедуры delay - задержка в игровом времени condition - условие (условный вызов возможен только для процедур без параметров!) Примечания: при вызове процедура помещается в стек. Вызов может быть отменён с помощью функций Cancel и CancelAll. Процедура обязательно должна быть объявлена или определена до её вызова. Если два вызова следуют подряд, то нет никакой гарантии, что вызванные функции будут выполнены именно в таком порядке (см. также critical). Вообще, похоже, единственная функция, которая выполняется сразу, окончательно и бесповоротно - это destroy_object. При последовательном отложенном вызове одной и той же процедуры время вызова будет заменено последним значением, процедура будет выполнена только один раз (не проверено!). |
| Author: legacy information 22.06.02 13:29:01 | Вызов одной функции из другой строится с использованием команд 800D и 8005: 8005; call; аргумент1, аргумент2, : , аргументN, количество аргументов, индекс функции в таблице функций (считается от нуля); результат функции. Аргументов может не быть вообще, тогда количество их устанавливается в ноль. Индекс может быть указан как константа командой C001 XXXX XXXX или вычислен из имени функции командой 8028: 8028; @; указатель на строку - имя функции; индекс функции. Указатель помещается командой 9001 XXXX XXXX и смещение считается от начала списка строк (а не идентификаторов). Вызову функции предшествует помещение адреса возврата в стек возвратов. Пример: Предположим, что адрес команды, следующей за вызовом функции, равен 15E6h. Функция не имеет аргументов и индекс ее равен 5. Тогда вызов функции записывается следующей последовательностью: C001 0000 15E6 800D C001 0000 0000 C001 0000 0005 8005 Большинство функций в скриптах используются скорее как процедуры, т.е. возвращают всегда нулевой результат, не используемый в дальнейшем. Для удаления такого результата из стека используется описанная выше команда 801A, следующая непосредственно за 8005. |
| Author: legacy information 18.06.02 22:31:22 | Вызов одной функции из другой строится с использованием команд 800D и 8005: 8005; call; аргумент1, аргумент2, : , аргументN, количество аргументов, индекс функции в таблице функций (считается от нуля); результат функции. Аргументов может не быть вообще, тогда количество их устанавливается в ноль. Индекс может быть указан как константа командой C001 XXXX XXXX или вычислен из имени функции командой 8028: 8028; @; указатель на строку - имя функции; индекс функции. Указатель помещается командой 9001 XXXX XXXX и смещение считается от начала списка строк (а не идентификаторов). Вызову функции предшествует помещение адреса возврата в стек возвратов. Пример: Предположим, что адрес команды, следующей за вызовом функции, равен 15E6h. Функция не имеет аргументов и индекс ее равен 5. Тогда вызов функции записывается следующей последовательностью: C001 0000 15E6 800D C001 0000 0000 C001 0000 0005 8005 Большинство функций в скриптах используются скорее как процедуры, т.е. возвращают всегда нулевой результат, не используемый в дальнейшем. Для удаления такого результата из стека используется описанная выше команда 801A, следующая непосредственно за 8005. |