• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.

Автор Тема: Ingame Funcs  (Прочитано 686 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Ingame Funcs
« : 11 Декабрь, 2006, 14:39:38 »
0
Gwathlobal: Ingame functions
http://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
Награды За огромный вклад в развитие Румора

Теги:
 

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal