Gwathlobal:
Ingame functionshttp://cs.elderscrolls.com/constwiki/index...ngame_Functions------
Внутриигровые функцииЭтот способ можно использовать вместо функций стадий квеста. Основан он на том, что метод Activate может быть вызван на любом постоянном объекте и работает он немедленно.
Внутриигровые функции легко создать. Они не обладают ограничениями функций стадий квеста и позволяют организовывать циклы с помощью блока GameMode (при использовании флагов, счетчиков и т.д.). Кроме того, это еще один способ добавить глобальную переменную в игру.
Как создать внутриигровую функцию:
1) Создайте копию любого объекта, на который можно повесить скрипт (Я использую Gold001). Переименуйте его, например в TargFunction.
2) Поместите копию объекта в игровой мир – желательно туда, куда вы уже что-нибудь помещали или в собственную ячейку.
3) Сделайте объект постоянным. Сделайте его Initially Disabled. Дайте ему подходящее имя, например TargFunc01.
4) Прикрепите к объекту скрипт, который должен исполнять то, что вы хотите. (См. пример ниже).
5) Вызывайте функцию командой TargFunc01.Activate player 1.
Вот пример функции, которая вычисляет положение прицела цели:
scn TargFunctionScript
; начальное положение вектора
float xPos
float yPos
float zPos
; направление вектора
float dx
float dy
float dz
; дополнительные переменные
float ang
float x
float x2
float sin
float cos
Begin OnActivate
; горизонтальное направление вектора
set ang to player.GetAngle z
if ang > 180
set ang to (ang)-360
endif
set x to ang*0.0174532925
set x2 to x*x
set sin to x*(1-(x2/6)*(1-(x2/20)*(1-(x2/42)*(1-(x2/72)*(1-x2/110)))))
set cos to 1-0.5*x2*(1-(x2/12)*(1-(x2/30)*(1-(x2/56)*(1-x2/90))))
set dx to 10*sin
set dy to 10*cos
; вертикальное направление вектора
set ang to player.GetAngle x
set x to -ang*0.0174532925
set x2 to x*x
set sin to x*(1-(x2/6)*(1-(x2/20)*(1-(x2/42)*(1-(x2/72)*(1-x2/110)))))
set cos to 1-0.5*x2*(1-(x2/12)*(1-(x2/30)*(1-(x2/56)*(1-x2/90))))
set dz to 10*sin
; начальное положение вектора (добавим потом к координатам игрока)
set xPos to 5*dx*cos
set yPos to 5*dy*cos
set zPos to 118+5*dz
End
Чтобы ее использовать:
; какой-то скрипт
;...
TargFunc01.Activate player 1
set xPos to TargFunc01.xPos+player.GetPos x
set yPos to TargFunc01.yPos+player.GetPos y
set zPos to TargFunc01.zPos+player.GetPos z
set dx to TargFunc01.dx
set dy to TargFunc01.dy
set dz to TargFunc01.dz
Еще одно замечание по функциям стадиях квеста. Они могут принимать переменные, и это можно использовать для создания небольших связанных списков, стеков и массивов.
set x to 10; любое значение в пределах 0-255
SetStage MyQuest x