Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
91
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Использование переменных в других локальных скриптах и объектах

Set … to

Если уникальный объект имеет скрипт на себе, то вы можете изменять переменные на нем извне следующим образом:

Set MyObject.variable to 100

или

Set MyObject.variable to local_variable

Этот метод изменяет локальную переменную в скрипте объекта. Объект должен при этом иметь скрипт на себе, и конечно, он должен быть активен (то есть локальный скрипт должен быть в той же ячейке).

Примечание: Скриптовая система использует только первый объект в базе данных, поэтому вы должны иметь только одну копию объекта.

Отметьте, что обратный метод не работает:

Set local_variable to MyObject.variable ; Это не работает!

Используйте глобальную переменную, чтобы перемещать информацию, или установите local_variable из другого скрипта, используя вышеприведенный пример.

if ( anotherobject.x > 0 )

работает.

Более того, недавно я осознал, что подобный синтаксис работает и для глобальных скриптов:

set Global_script_name.variable to 1

Это полезно, чтобы избежать большого количества глобальных переменных или для отладки глобальных скриптов в консоли.

Использование переменных в функциях

К сожалению, одним из ограничений скриптов TES является то, что только некоторые функции принимают переменные в качестве параметров. Тип аргументов, которые принимают функции, указан в списке функций ниже.

Примечание: Для некоторых функция, где возможны Get-функции and Set-функции, работа может быть построена, используя функцию while (см ниже).

Операторы / математические расчеты

Вы можете использовать стандартные операторы в командах set (и возможно, в других местах, но я никогда не пробовал14)

Сложение:

+

Вычитание:

-

Умножение:

*

Деление:

/

Синтаксис следующий:

Set result_var to (var_a + var_b)

Вместо переменных возможны конкретные числа. Я предполагаю, что применяется стандартная последовательность операторов ( * и / вычисляются перед + и - ). Так как это не проверено, я всегда использую скобки на всякий случай. Можно использовать скобки в соответствии с обычными математическими правилами:

set ln to ( ln + ( k10 * math_ln10 ) + ( k2 * math_ln2 ) )

Предупреждение: На форумах существуют различные мнения по поводу использования нескольких операторов в одной строчке. Некоторые люди говорят, что это вызывает много проблем. Лично я использовал как минимум 4 оператора и переменных в одной строке. Есть мнение, что очень большие сложения (например, более 20 переменных в одной строке) служат причиной вылета игры при загрузке. Если это случилось, разделите вычисления на несколько строк.

Немногое можно сказать о математических функциях в скриптах. Есть функция Random (возвращает случайное значение) и Трибунал добавил функцию GetSquareRoot (см ниже). Если вам нужны более сложные функции, можно скачать Soralis' Math Mod (с Morrowind Summit). В нем есть коллекция скриптов, которая позволяет совершать сложные расчеты.

Вот небольшая выдержка из Ридми, чтобы вы поняли, что это такое:

"Этот мод дает возможность использовать различные математические функции в скриптах Морровинда.

Вот скрипты, которые были добавлены:"

Имя

Проверка/Сделано

Ввод

Вывод

Точность

MathScripts

N/A

N/A

N/A

N/A

MathConstants

N/A

N/A

N/A

N/A

SquareRoot

1

math_sqrt

math_result, math_imag

7

SineScript

2

math_angle

math_sin, math_cos, math_tan

7

ArcsineScript

3

math_arc

math_sin, math_cos

6-7

NaturalLog

4

math_log

math_result, math_imag

4-5

LogScript

5

math_log, math_base

math_result, math_imag

3-4

intPower

6

math_value, math_power

math_result

7

intRoot

7

math_value, math_root

math_result, math_imag

6-7

Modulus

8

math_value, math_mod

math_result

6-7

Antiln

9

math_log

math_result

4-5

Antilog

10

math_log, math_base

math_result

2-3

AbsoluteValue

11*

math_abs

math_abs

7

PowerScript

12

math_value, math_power

math_result, math_imag

2-3

К сожалению, многие из этих функций довольно медленные и не годятся для вычислений в реальном времени. Для синуса и косинуса посмотрите скрипт JDGBOLT'а в разделе Советов и Трюков.